diff --git a/Makefile b/Makefile index 52804184ab..323077b710 100644 --- a/Makefile +++ b/Makefile @@ -92,6 +92,7 @@ contracts: $(SOLC_BINARY) $(GOBINDATA_BINARY) $(CONTRACTS_DIR)/*.sol $(ABIGEN_BI @$(call gen-contract,,AutonityTest) @$(call gen-contract,,AccountabilityTest) @$(call gen-contract,,UpgradeManager) + @$(call gen-contract,,InflationController) @$(call gen-contract,asm/,ACU) @$(call gen-contract,asm/,SupplyControl) @$(call gen-contract,asm/,Stabilization) @@ -171,9 +172,9 @@ APE_VERSION := 0.6.26 HARDHAT_VERSION := 2.19.1 test-contracts-asm: test-contracts-asm-pre @echo "run tests for the asm contracts" - @cd $(CONTRACTS_BASE_DIR) && ape --verbosity WARNING test --network ::hardhat ./test/asm/acu - @cd $(CONTRACTS_BASE_DIR) && ape --verbosity WARNING test --network ::hardhat ./test/asm/stabilization - @cd $(CONTRACTS_BASE_DIR) && ape --verbosity WARNING test --network ::hardhat ./test/asm/supply_control + @cd $(CONTRACTS_BASE_DIR) && ape --verbosity DEBUG test --network ::hardhat ./test/asm/acu + @cd $(CONTRACTS_BASE_DIR) && ape --verbosity DEBUG test --network ::hardhat ./test/asm/stabilization + @cd $(CONTRACTS_BASE_DIR) && ape --verbosity DEBUG test --network ::hardhat ./test/asm/supply_control .PHONY: test-contracts-asm-pre test-contracts-asm-pre: diff --git a/autonity/autonity.go b/autonity/autonity.go index bb2f6147c8..52f559b887 100644 --- a/autonity/autonity.go +++ b/autonity/autonity.go @@ -467,6 +467,10 @@ type UpgradeManagerContract struct { EVMContract } +type InflationControllerContract struct { + EVMContract +} + func NewGenesisEVMContract(genesisEvmProvider GenesisEVMProvider, statedb vm.StateDB, db ethdb.Database, chainConfig *params.ChainConfig) *GenesisEVMContracts { evmProvider := func(header *types.Header, origin common.Address, statedb vm.StateDB) *vm.EVM { if header != nil { @@ -531,6 +535,14 @@ func NewGenesisEVMContract(genesisEvmProvider GenesisEVMProvider, statedb vm.Sta chainConfig: chainConfig, }, }, + InflationControllerContract: InflationControllerContract{ + EVMContract{ + evmProvider: evmProvider, + contractABI: &generated.InflationControllerAbi, + db: db, + chainConfig: chainConfig, + }, + }, statedb: statedb, } } @@ -543,6 +555,7 @@ type GenesisEVMContracts struct { SupplyControlContract StabilizationContract UpgradeManagerContract + InflationControllerContract statedb vm.StateDB } @@ -613,3 +626,7 @@ func (c *GenesisEVMContracts) DeployStabilizationContract( func (c *GenesisEVMContracts) DeployUpgradeManagerContract(autonityAddress common.Address, operatorAddress common.Address, bytecode []byte) error { return c.UpgradeManagerContract.DeployContract(nil, params.DeployerAddress, c.statedb, bytecode, autonityAddress, operatorAddress) } + +func (c *GenesisEVMContracts) DeployInflationControllerContract(bytecode []byte, param InflationControllerParams) error { + return c.InflationControllerContract.DeployContract(nil, params.DeployerAddress, c.statedb, bytecode, param) +} diff --git a/autonity/autonity_test.go b/autonity/autonity_test.go index 694e3499ff..fba1f69df6 100644 --- a/autonity/autonity_test.go +++ b/autonity/autonity_test.go @@ -454,19 +454,21 @@ func randomValidators(count int, randomPercentage int) ([]params.Validator, erro func autonityTestConfig() AutonityConfig { config := AutonityConfig{ Policy: AutonityPolicy{ - TreasuryFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.TreasuryFee), - MinBaseFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.MinBaseFee), - DelegationRate: new(big.Int).SetUint64(params.TestAutonityContractConfig.DelegationRate), - UnbondingPeriod: new(big.Int).SetUint64(params.TestAutonityContractConfig.UnbondingPeriod), - TreasuryAccount: params.TestAutonityContractConfig.Operator, + TreasuryFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.TreasuryFee), + MinBaseFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.MinBaseFee), + DelegationRate: new(big.Int).SetUint64(params.TestAutonityContractConfig.DelegationRate), + UnbondingPeriod: new(big.Int).SetUint64(params.TestAutonityContractConfig.UnbondingPeriod), + InitialInflationReserve: (*big.Int)(params.TestAutonityContractConfig.InitialInflationReserve), + TreasuryAccount: params.TestAutonityContractConfig.Operator, }, Contracts: AutonityContracts{ - AccountabilityContract: params.AccountabilityContractAddress, - OracleContract: params.OracleContractAddress, - AcuContract: params.ACUContractAddress, - SupplyControlContract: params.SupplyControlContractAddress, - StabilizationContract: params.StabilizationContractAddress, - UpgradeManagerContract: params.UpgradeManagerContractAddress, + AccountabilityContract: params.AccountabilityContractAddress, + OracleContract: params.OracleContractAddress, + AcuContract: params.ACUContractAddress, + SupplyControlContract: params.SupplyControlContractAddress, + StabilizationContract: params.StabilizationContractAddress, + UpgradeManagerContract: params.UpgradeManagerContractAddress, + InflationControllerContract: params.InflationControllerContractAddress, }, Protocol: AutonityProtocol{ OperatorAccount: params.TestAutonityContractConfig.Operator, diff --git a/autonity/bindings.go b/autonity/bindings.go index 5a6940bec6..c6d05d5caf 100644 --- a/autonity/bindings.go +++ b/autonity/bindings.go @@ -72,21 +72,23 @@ type AutonityConfig struct { // AutonityContracts is an auto generated low-level Go binding around an user-defined struct. type AutonityContracts struct { - AccountabilityContract common.Address - OracleContract common.Address - AcuContract common.Address - SupplyControlContract common.Address - StabilizationContract common.Address - UpgradeManagerContract common.Address + AccountabilityContract common.Address + OracleContract common.Address + AcuContract common.Address + SupplyControlContract common.Address + StabilizationContract common.Address + UpgradeManagerContract common.Address + InflationControllerContract common.Address } // AutonityPolicy is an auto generated low-level Go binding around an user-defined struct. type AutonityPolicy struct { - TreasuryFee *big.Int - MinBaseFee *big.Int - DelegationRate *big.Int - UnbondingPeriod *big.Int - TreasuryAccount common.Address + TreasuryFee *big.Int + MinBaseFee *big.Int + DelegationRate *big.Int + UnbondingPeriod *big.Int + InitialInflationReserve *big.Int + TreasuryAccount common.Address } // AutonityProtocol is an auto generated low-level Go binding around an user-defined struct. @@ -126,7 +128,16 @@ type IOracleRoundData struct { Round *big.Int Price *big.Int Timestamp *big.Int - Success bool + Status *big.Int +} + +// InflationControllerParams is an auto generated low-level Go binding around an user-defined struct. +type InflationControllerParams struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int } // StabilizationConfig is an auto generated low-level Go binding around an user-defined struct. @@ -153,7 +164,7 @@ var ACUMetaData = &bind.MetaData{ "a2e62045": "update()", "3fa4f245": "value()", }, - Bin: "0x60806040523480156200001157600080fd5b50604051620018ee380380620018ee83398101604081905262000034916200036d565b858580518251146200005957604051634ff799c560e01b815260040160405180910390fd5b60005b8151811015620000c0576001600160ff1b038282815181106200008357620000836200052c565b60200260200101511115620000ab57604051634ff799c560e01b815260040160405180910390fd5b80620000b78162000558565b9150506200005c565b508751620000d69060039060208b01906200014b565b508651620000ec9060049060208a0190620001a8565b506001869055620000ff86600a62000673565b6002555050600680546001600160a01b039485166001600160a01b03199182161790915560078054938516938216939093179092556008805491909316911617905550620007e3915050565b82805482825590600052602060002090810192821562000196579160200282015b8281111562000196578251829062000185908262000717565b50916020019190600101906200016c565b50620001a4929150620001f4565b5090565b828054828255906000526020600020908101928215620001e6579160200282015b82811115620001e6578251825591602001919060010190620001c9565b50620001a492915062000215565b80821115620001a45760006200020b82826200022c565b50600101620001f4565b5b80821115620001a4576000815560010162000216565b5080546200023a9062000688565b6000825580601f106200024b575050565b601f0160209004906000526020600020908101906200026b919062000215565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002af57620002af6200026e565b604052919050565b60006001600160401b03821115620002d357620002d36200026e565b5060051b60200190565b600082601f830112620002ef57600080fd5b81516020620003086200030283620002b7565b62000284565b82815260059290921b840181019181810190868411156200032857600080fd5b8286015b848110156200034557805183529183019183016200032c565b509695505050505050565b80516001600160a01b03811681146200036857600080fd5b919050565b60008060008060008060c087890312156200038757600080fd5b86516001600160401b038111156200039e57600080fd5b8701601f81018913620003b057600080fd5b8051620003c16200030282620002b7565b808282526020820191508b60208460051b8601011115620003e157600080fd5b602084015b60208460051b860101811015620004b85780516001600160401b038111156200040e57600080fd5b8d603f82880101126200042057600080fd5b858101602001516001600160401b038111156200044157620004416200026e565b62000456601f8201601f191660200162000284565b8181528f604083858b01010111156200046e57600080fd5b60005b828110156200049657604081858b010101516020828401015260208101905062000471565b50600060208383010152808652505050602083019250602081019050620003e6565b5060208b0151909950925050506001600160401b03811115620004da57600080fd5b620004e889828a01620002dd565b95505060408701519350620005006060880162000350565b9250620005106080880162000350565b91506200052060a0880162000350565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200056d576200056d62000542565b5060010190565b600181815b80851115620005b557816000190482111562000599576200059962000542565b80851615620005a757918102915b93841c939080029062000579565b509250929050565b600082620005ce575060016200066d565b81620005dd575060006200066d565b8160018114620005f65760028114620006015762000621565b60019150506200066d565b60ff84111562000615576200061562000542565b50506001821b6200066d565b5060208310610133831016604e8410600b841016171562000646575081810a6200066d565b62000652838362000574565b806000190482111562000669576200066962000542565b0290505b92915050565b6000620006818383620005bd565b9392505050565b600181811c908216806200069d57607f821691505b602082108103620006be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620006ed5750805b601f850160051c820191505b818110156200070e57828155600101620006f9565b5050505b505050565b81516001600160401b038111156200073357620007336200026e565b6200074b8162000744845462000688565b84620006c4565b602080601f8311600181146200078357600084156200076a5750858301515b600019600386901b1c1916600185901b1785556200070e565b600085815260208120601f198616915b82811015620007b45788860151825594840194600190910190840162000793565b5085821015620007d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110fb80620007f36000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637adbf973116100665780637adbf973146100fe578063a2e6204514610111578063b3ab15fb14610129578063d54d27991461013c578063f51e181a1461015157600080fd5b806307039ff9146100a3578063146ca531146100c15780633fa4f245146100d857806344b4708a146100e0578063683dd191146100f5575b600080fd5b6100ab61015a565b6040516100b8919061093c565b60405180910390f35b6100ca60005481565b6040519081526020016100b8565b6100ca610233565b6100f36100ee366004610a2c565b61025e565b005b6100ca60025481565b6100f361010c366004610b5e565b61038a565b6101196103d6565b60405190151581526020016100b8565b6100f3610137366004610b5e565b610704565b610144610750565b6040516100b89190610bc2565b6100ca60015481565b60606003805480602002602001604051908101604052809291908181526020016000905b8282101561022a57838290600052602060002001805461019d90610bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546101c990610bd5565b80156102165780601f106101eb57610100808354040283529160200191610216565b820191906000526020600020905b8154815290600101906020018083116101f957829003601f168201915b50505050508152602001906001019061017e565b50505050905090565b6000805460000361025757604051631d3e00bb60e11b815260040160405180910390fd5b5060055490565b8282805182511461028257604051634ff799c560e01b815260040160405180910390fd5b60005b81518110156102e1576001600160ff1b038282815181106102a8576102a8610c0f565b602002602001015111156102cf57604051634ff799c560e01b815260040160405180910390fd5b806102d981610c3b565b915050610285565b506007546001600160a01b0316331461030c576040516282b42960e81b815260040160405180910390fd5b845161031f9060039060208801906107a8565b5083516103339060049060208701906107fe565b50600183905561034483600a610d3a565b6002556040517fdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c099061037b90879087908790610d46565b60405180910390a15050505050565b6006546001600160a01b031633146103b4576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610403576040516282b42960e81b815260040160405180910390fd5b60006001600860009054906101000a90046001600160a01b03166001600160a01b0316639f8743f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190610d7c565b6104889190610d95565b9050806000541061049b57600091505090565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105159190610d7c565b905060005b60035481101561069f57604051661554d10b5554d160ca1b6020820152600090602701604051602081830303815290604052805190602001206003838154811061056657610566610c0f565b906000526020600020016040516020016105809190610da8565b60405160208183030381529060405280519060200120036105a2575081610656565b600854600380546000926001600160a01b031691633c8510fd91899190879081106105cf576105cf610c0f565b906000526020600020016040518363ffffffff1660e01b81526004016105f6929190610e1e565b608060405180830381865afa158015610613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106379190610eb1565b9050806060015161064f576000965050505050505090565b6020015190505b6004828154811061066957610669610c0f565b90600052602060002001548161067f9190610f22565b6106899085610f52565b935050808061069790610c3b565b91505061051a565b506106aa8183610f7a565b60058190556000849055604080514381524260208201528082018690526060810192909252517f23f161ca67071b3e902d4fa7afade82672c6160677e89d373a830145bdda6d269181900360800190a16001935050505090565b6006546001600160a01b0316331461072e576040516282b42960e81b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480548060200260200160405190810160405280929190818152602001828054801561079e57602002820191906000526020600020905b81548152602001906001019080831161078a575b5050505050905090565b8280548282559060005260206000209081019282156107ee579160200282015b828111156107ee57825182906107de9082611005565b50916020019190600101906107c8565b506107fa929150610845565b5090565b828054828255906000526020600020908101928215610839579160200282015b8281111561083957825182559160200191906001019061081e565b506107fa929150610862565b808211156107fa5760006108598282610877565b50600101610845565b5b808211156107fa5760008155600101610863565b50805461088390610bd5565b6000825580601f10610893575050565b601f0160209004906000526020600020908101906108b19190610862565b50565b600082825180855260208086019550808260051b8401018186016000805b8581101561092e57601f1980888603018b5283518051808752845b81811015610908578281018901518882018a015288016108ed565b5086810188018590529b87019b601f0190911690940185019350918401916001016108d2565b509198975050505050505050565b60208152600061094f60208301846108b4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099557610995610956565b604052919050565b600067ffffffffffffffff8211156109b7576109b7610956565b5060051b60200190565b600082601f8301126109d257600080fd5b813560206109e76109e28361099d565b61096c565b82815260059290921b84018101918181019086841115610a0657600080fd5b8286015b84811015610a215780358352918301918301610a0a565b509695505050505050565b600080600060608486031215610a4157600080fd5b833567ffffffffffffffff80821115610a5957600080fd5b818601915086601f830112610a6d57600080fd5b81356020610a7d6109e28361099d565b82815260059290921b8401810191818101908a841115610a9c57600080fd5b8286015b84811015610b2957803586811115610ab85760008081fd5b8701603f81018d13610aca5760008081fd5b84810135604088821115610ae057610ae0610956565b610af2601f8301601f1916880161096c565b8281528f82848601011115610b075760008081fd5b8282850189830137600092810188019290925250845250918301918301610aa0565b5097505087013592505080821115610b4057600080fd5b50610b4d868287016109c1565b925050604084013590509250925092565b600060208284031215610b7057600080fd5b81356001600160a01b038116811461094f57600080fd5b600081518084526020808501945080840160005b83811015610bb757815187529582019590820190600101610b9b565b509495945050505050565b60208152600061094f6020830184610b87565b600181811c90821680610be957607f821691505b602082108103610c0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610c4d57610c4d610c25565b5060010190565b600181815b80851115610c8f578160001904821115610c7557610c75610c25565b80851615610c8257918102915b93841c9390800290610c59565b509250929050565b600082610ca657506001610d34565b81610cb357506000610d34565b8160018114610cc95760028114610cd357610cef565b6001915050610d34565b60ff841115610ce457610ce4610c25565b50506001821b610d34565b5060208310610133831016604e8410600b8410161715610d12575081810a610d34565b610d1c8383610c54565b8060001904821115610d3057610d30610c25565b0290505b92915050565b600061094f8383610c97565b606081526000610d5960608301866108b4565b8281036020840152610d6b8186610b87565b915050826040830152949350505050565b600060208284031215610d8e57600080fd5b5051919050565b81810381811115610d3457610d34610c25565b6000808354610db681610bd5565b60018281168015610dce5760018114610de357610e12565b60ff1984168752821515830287019450610e12565b8760005260208060002060005b85811015610e095781548a820152908401908201610df0565b50505082870194505b50929695505050505050565b8281526000602060408184015260008454610e3881610bd5565b8060408701526060600180841660008114610e5a5760018114610e7457610ea2565b60ff1985168984015283151560051b890183019550610ea2565b896000528660002060005b85811015610e9a5781548b8201860152908301908801610e7f565b8a0184019650505b50939998505050505050505050565b600060808284031215610ec357600080fd5b6040516080810181811067ffffffffffffffff82111715610ee657610ee6610956565b806040525082518152602083015160208201526040830151604082015260608301518015158114610f1657600080fd5b60608201529392505050565b80820260008212600160ff1b84141615610f3e57610f3e610c25565b8181058314821517610d3457610d34610c25565b8082018281126000831280158216821582161715610f7257610f72610c25565b505092915050565b600082610f9757634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610fb157610fb1610c25565b500590565b601f82111561100057600081815260208120601f850160051c81016020861015610fdd5750805b601f850160051c820191505b81811015610ffc57828155600101610fe9565b5050505b505050565b815167ffffffffffffffff81111561101f5761101f610956565b6110338161102d8454610bd5565b84610fb6565b602080601f83116001811461106857600084156110505750858301515b600019600386901b1c1916600185901b178555610ffc565b600085815260208120601f198616915b8281101561109757888601518255948401946001909101908401611078565b50858210156110b55787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220c25476da0b15fed74e3b9e9171c129acdb415ba224e67b3a1d0b383c8772037764736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b50604051620018e6380380620018e683398101604081905262000034916200036d565b858580518251146200005957604051634ff799c560e01b815260040160405180910390fd5b60005b8151811015620000c0576001600160ff1b038282815181106200008357620000836200052c565b60200260200101511115620000ab57604051634ff799c560e01b815260040160405180910390fd5b80620000b78162000558565b9150506200005c565b508751620000d69060039060208b01906200014b565b508651620000ec9060049060208a0190620001a8565b506001869055620000ff86600a62000673565b6002555050600680546001600160a01b039485166001600160a01b03199182161790915560078054938516938216939093179092556008805491909316911617905550620007e3915050565b82805482825590600052602060002090810192821562000196579160200282015b8281111562000196578251829062000185908262000717565b50916020019190600101906200016c565b50620001a4929150620001f4565b5090565b828054828255906000526020600020908101928215620001e6579160200282015b82811115620001e6578251825591602001919060010190620001c9565b50620001a492915062000215565b80821115620001a45760006200020b82826200022c565b50600101620001f4565b5b80821115620001a4576000815560010162000216565b5080546200023a9062000688565b6000825580601f106200024b575050565b601f0160209004906000526020600020908101906200026b919062000215565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002af57620002af6200026e565b604052919050565b60006001600160401b03821115620002d357620002d36200026e565b5060051b60200190565b600082601f830112620002ef57600080fd5b81516020620003086200030283620002b7565b62000284565b82815260059290921b840181019181810190868411156200032857600080fd5b8286015b848110156200034557805183529183019183016200032c565b509695505050505050565b80516001600160a01b03811681146200036857600080fd5b919050565b60008060008060008060c087890312156200038757600080fd5b86516001600160401b038111156200039e57600080fd5b8701601f81018913620003b057600080fd5b8051620003c16200030282620002b7565b808282526020820191508b60208460051b8601011115620003e157600080fd5b602084015b60208460051b860101811015620004b85780516001600160401b038111156200040e57600080fd5b8d603f82880101126200042057600080fd5b858101602001516001600160401b038111156200044157620004416200026e565b62000456601f8201601f191660200162000284565b8181528f604083858b01010111156200046e57600080fd5b60005b828110156200049657604081858b010101516020828401015260208101905062000471565b50600060208383010152808652505050602083019250602081019050620003e6565b5060208b0151909950925050506001600160401b03811115620004da57600080fd5b620004e889828a01620002dd565b95505060408701519350620005006060880162000350565b9250620005106080880162000350565b91506200052060a0880162000350565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200056d576200056d62000542565b5060010190565b600181815b80851115620005b557816000190482111562000599576200059962000542565b80851615620005a757918102915b93841c939080029062000579565b509250929050565b600082620005ce575060016200066d565b81620005dd575060006200066d565b8160018114620005f65760028114620006015762000621565b60019150506200066d565b60ff84111562000615576200061562000542565b50506001821b6200066d565b5060208310610133831016604e8410600b841016171562000646575081810a6200066d565b62000652838362000574565b806000190482111562000669576200066962000542565b0290505b92915050565b6000620006818383620005bd565b9392505050565b600181811c908216806200069d57607f821691505b602082108103620006be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620006ed5750805b601f850160051c820191505b818110156200070e57828155600101620006f9565b5050505b505050565b81516001600160401b038111156200073357620007336200026e565b6200074b8162000744845462000688565b84620006c4565b602080601f8311600181146200078357600084156200076a5750858301515b600019600386901b1c1916600185901b1785556200070e565b600085815260208120601f198616915b82811015620007b45788860151825594840194600190910190840162000793565b5085821015620007d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110f380620007f36000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637adbf973116100665780637adbf973146100fe578063a2e6204514610111578063b3ab15fb14610129578063d54d27991461013c578063f51e181a1461015157600080fd5b806307039ff9146100a3578063146ca531146100c15780633fa4f245146100d857806344b4708a146100e0578063683dd191146100f5575b600080fd5b6100ab61015a565b6040516100b8919061093f565b60405180910390f35b6100ca60005481565b6040519081526020016100b8565b6100ca610233565b6100f36100ee366004610a2f565b61025e565b005b6100ca60025481565b6100f361010c366004610b61565b61038a565b6101196103d6565b60405190151581526020016100b8565b6100f3610137366004610b61565b610707565b610144610753565b6040516100b89190610bc5565b6100ca60015481565b60606003805480602002602001604051908101604052809291908181526020016000905b8282101561022a57838290600052602060002001805461019d90610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546101c990610bd8565b80156102165780601f106101eb57610100808354040283529160200191610216565b820191906000526020600020905b8154815290600101906020018083116101f957829003601f168201915b50505050508152602001906001019061017e565b50505050905090565b6000805460000361025757604051631d3e00bb60e11b815260040160405180910390fd5b5060055490565b8282805182511461028257604051634ff799c560e01b815260040160405180910390fd5b60005b81518110156102e1576001600160ff1b038282815181106102a8576102a8610c12565b602002602001015111156102cf57604051634ff799c560e01b815260040160405180910390fd5b806102d981610c3e565b915050610285565b506007546001600160a01b0316331461030c576040516282b42960e81b815260040160405180910390fd5b845161031f9060039060208801906107ab565b508351610333906004906020870190610801565b50600183905561034483600a610d3d565b6002556040517fdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c099061037b90879087908790610d49565b60405180910390a15050505050565b6006546001600160a01b031633146103b4576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610403576040516282b42960e81b815260040160405180910390fd5b60006001600860009054906101000a90046001600160a01b03166001600160a01b0316639f8743f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190610d7f565b6104889190610d98565b9050806000541061049b57600091505090565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105159190610d7f565b905060005b6003548110156106a257604051661554d10b5554d160ca1b6020820152600090602701604051602081830303815290604052805190602001206003838154811061056657610566610c12565b906000526020600020016040516020016105809190610dab565b60405160208183030381529060405280519060200120036105a2575081610659565b600854600380546000926001600160a01b031691633c8510fd91899190879081106105cf576105cf610c12565b906000526020600020016040518363ffffffff1660e01b81526004016105f6929190610e21565b608060405180830381865afa158015610613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106379190610eb4565b90508060600151600014610652576000965050505050505090565b6020015190505b6004828154811061066c5761066c610c12565b9060005260206000200154816106829190610f1a565b61068c9085610f4a565b935050808061069a90610c3e565b91505061051a565b506106ad8183610f72565b60058190556000849055604080514381524260208201528082018690526060810192909252517f23f161ca67071b3e902d4fa7afade82672c6160677e89d373a830145bdda6d269181900360800190a16001935050505090565b6006546001600160a01b03163314610731576040516282b42960e81b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054806020026020016040519081016040528092919081815260200182805480156107a157602002820191906000526020600020905b81548152602001906001019080831161078d575b5050505050905090565b8280548282559060005260206000209081019282156107f1579160200282015b828111156107f157825182906107e19082610ffd565b50916020019190600101906107cb565b506107fd929150610848565b5090565b82805482825590600052602060002090810192821561083c579160200282015b8281111561083c578251825591602001919060010190610821565b506107fd929150610865565b808211156107fd57600061085c828261087a565b50600101610848565b5b808211156107fd5760008155600101610866565b50805461088690610bd8565b6000825580601f10610896575050565b601f0160209004906000526020600020908101906108b49190610865565b50565b600082825180855260208086019550808260051b8401018186016000805b8581101561093157601f1980888603018b5283518051808752845b8181101561090b578281018901518882018a015288016108f0565b5086810188018590529b87019b601f0190911690940185019350918401916001016108d5565b509198975050505050505050565b60208152600061095260208301846108b7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099857610998610959565b604052919050565b600067ffffffffffffffff8211156109ba576109ba610959565b5060051b60200190565b600082601f8301126109d557600080fd5b813560206109ea6109e5836109a0565b61096f565b82815260059290921b84018101918181019086841115610a0957600080fd5b8286015b84811015610a245780358352918301918301610a0d565b509695505050505050565b600080600060608486031215610a4457600080fd5b833567ffffffffffffffff80821115610a5c57600080fd5b818601915086601f830112610a7057600080fd5b81356020610a806109e5836109a0565b82815260059290921b8401810191818101908a841115610a9f57600080fd5b8286015b84811015610b2c57803586811115610abb5760008081fd5b8701603f81018d13610acd5760008081fd5b84810135604088821115610ae357610ae3610959565b610af5601f8301601f1916880161096f565b8281528f82848601011115610b0a5760008081fd5b8282850189830137600092810188019290925250845250918301918301610aa3565b5097505087013592505080821115610b4357600080fd5b50610b50868287016109c4565b925050604084013590509250925092565b600060208284031215610b7357600080fd5b81356001600160a01b038116811461095257600080fd5b600081518084526020808501945080840160005b83811015610bba57815187529582019590820190600101610b9e565b509495945050505050565b6020815260006109526020830184610b8a565b600181811c90821680610bec57607f821691505b602082108103610c0c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610c5057610c50610c28565b5060010190565b600181815b80851115610c92578160001904821115610c7857610c78610c28565b80851615610c8557918102915b93841c9390800290610c5c565b509250929050565b600082610ca957506001610d37565b81610cb657506000610d37565b8160018114610ccc5760028114610cd657610cf2565b6001915050610d37565b60ff841115610ce757610ce7610c28565b50506001821b610d37565b5060208310610133831016604e8410600b8410161715610d15575081810a610d37565b610d1f8383610c57565b8060001904821115610d3357610d33610c28565b0290505b92915050565b60006109528383610c9a565b606081526000610d5c60608301866108b7565b8281036020840152610d6e8186610b8a565b915050826040830152949350505050565b600060208284031215610d9157600080fd5b5051919050565b81810381811115610d3757610d37610c28565b6000808354610db981610bd8565b60018281168015610dd15760018114610de657610e15565b60ff1984168752821515830287019450610e15565b8760005260208060002060005b85811015610e0c5781548a820152908401908201610df3565b50505082870194505b50929695505050505050565b8281526000602060408184015260008454610e3b81610bd8565b8060408701526060600180841660008114610e5d5760018114610e7757610ea5565b60ff1985168984015283151560051b890183019550610ea5565b896000528660002060005b85811015610e9d5781548b8201860152908301908801610e82565b8a0184019650505b50939998505050505050505050565b600060808284031215610ec657600080fd5b6040516080810181811067ffffffffffffffff82111715610ee957610ee9610959565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b80820260008212600160ff1b84141615610f3657610f36610c28565b8181058314821517610d3757610d37610c28565b8082018281126000831280158216821582161715610f6a57610f6a610c28565b505092915050565b600082610f8f57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610fa957610fa9610c28565b500590565b601f821115610ff857600081815260208120601f850160051c81016020861015610fd55750805b601f850160051c820191505b81811015610ff457828155600101610fe1565b5050505b505050565b815167ffffffffffffffff81111561101757611017610959565b61102b816110258454610bd8565b84610fae565b602080601f83116001811461106057600084156110485750858301515b600019600386901b1c1916600185901b178555610ff4565b600085815260208120601f198616915b8281101561108f57888601518255948401946001909101908401611070565b50858210156110ad5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122090a9b0d0854200a11135cda6f702d02a3d6c311a3a5d80dc2547b2edb0dca66864736f6c63430008150033", } // ACUABI is the input ABI used to generate the binding from. @@ -872,13 +883,13 @@ func (_ACU *ACUFilterer) ParseUpdated(log types.Log) (*ACUUpdated, error) { // AccountabilityMetaData contains all meta data concerning the Accountability contract. var AccountabilityMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"beneficiaries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"slashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"beneficiaries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"slashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", Sigs: map[string]string{ "01567739": "beneficiaries(address)", "7ccecadd": "canAccuse(address,uint8,uint256)", "4108a95a": "canSlash(address,uint8,uint256)", "79502c55": "config()", - "1de9d9b6": "distributeRewards(address)", + "a8031a1d": "distributeRewards(address,uint256)", "b5b7a184": "epochPeriod()", "0b791430": "events(uint256)", "6c9789b0": "finalize(bool)", @@ -888,7 +899,7 @@ var AccountabilityMetaData = &bind.MetaData{ "6b5f444c": "setEpochPeriod(uint256)", "e7bb0b52": "slashingHistory(address,uint256)", }, - Bin: "0x608060405260006011553480156200001657600080fd5b5060405162003d8f38038062003d8f8339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b613ba680620001e96000396000f3fe6080604052600436106100c25760003560e01c806379502c551161007f578063b5b7a18411610059578063b5b7a1841461029f578063bebaa8fc146102c3578063c50d21f0146102f0578063e7bb0b521461031057600080fd5b806379502c55146101d75780637ccecadd1461023b5780639cb22b061461027257600080fd5b806301567739146100c75780630b7914301461011a5780631de9d9b6146101525780634108a95a146101675780636b5f444c146101975780636c9789b0146101b7575b600080fd5b3480156100d357600080fd5b506100fd6100e2366004612f7e565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012657600080fd5b5061013a610135366004612fa2565b610348565b6040516101119c9b9a99989796959493929190613045565b610165610160366004612f7e565b61045b565b005b34801561017357600080fd5b506101876101823660046130e0565b61066a565b6040519015158152602001610111565b3480156101a357600080fd5b506101656101b2366004612fa2565b61071a565b3480156101c357600080fd5b506101656101d236600461311e565b610749565b3480156101e357600080fd5b506003546004546005546006546007546008546009546102069695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610111565b34801561024757600080fd5b5061025b6102563660046130e0565b61078c565b604080519215158352602083019190915201610111565b34801561027e57600080fd5b5061029261028d366004612f7e565b6108e1565b6040516101119190613216565b3480156102ab57600080fd5b506102b560005481565b604051908152602001610111565b3480156102cf57600080fd5b506102e36102de366004612f7e565b610b08565b6040516101119190613229565b3480156102fc57600080fd5b5061016561030b3660046133be565b610da7565b34801561031c57600080fd5b506102b561032b3660046134ca565b600e60209081526000928352604080842090915290825290205481565b6002818154811061035857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b03600160201b9093048316949216929091906103ba906134f6565b80601f01602080910402602001604051908101604052809291908181526020018280546103e6906134f6565b80156104335780601f1061040857610100808354040283529160200191610433565b820191906000526020600020905b81548152906001019060200180831161041657829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6001546001600160a01b0316331461048e5760405162461bcd60e51b815260040161048590613530565b60405180910390fd5b6001546001600160a01b038281166000908152600a6020526040808220549051630c825d9760e11b8152908316600482015290929190911690631904bb2e90602401600060405180830381865afa1580156104ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051591908101906135db565b516040519091506000906001600160a01b038316906108fc90349084818181858888f193505050503d8060008114610569576040519150601f19603f3d011682016040523d82523d6000602084013e61056e565b606091505b505090508061064157600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ee9190613759565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b5050505b50506001600160a01b03166000908152600a6020526040902080546001600160a01b0319169055565b60008061067684611114565b6001546040516396b477cb60e01b8152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e99190613776565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b031633146107445760405162461bcd60e51b815260040161048590613530565b600055565b6001546001600160a01b031633146107735760405162461bcd60e51b815260040161048590613530565b61077b61117f565b8015610789576107896114d7565b50565b600080600061079a85611114565b6001546040516396b477cb60e01b8152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190613776565b6001600160a01b0388166000908152600e6020908152604080832084845290915290205490915082116108475760009350600092506108d7565b6001600160a01b0387166000908152600c6020526040902054156108ce576001600160a01b0387166000908152600c602052604081205460029061088d906001906137a5565b8154811061089d5761089d6137b8565b906000526020600020906008020190506000945060036000015481600401546108c691906137ce565b9350506108d7565b60019350600092505b5050935093915050565b6108e9612e91565b6001600160a01b0382166000908152600c602052604090205461093e5760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b6044820152606401610485565b6001600160a01b0382166000908152600c6020526040902054600290610966906001906137a5565b81548110610976576109766137b8565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156109cb576109cb612fbb565b60028111156109dc576109dc612fbb565b815281546020909101906301000000900460ff166009811115610a0157610a01612fbb565b6009811115610a1257610a12612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610a4d906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906134f6565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610b3d57610b3d61328b565b604051908082528060200260200182016040528015610b7657816020015b610b63612e91565b815260200190600190039081610b5b5790505b50905060005b6001600160a01b0384166000908152600b6020526040902054811015610da0576001600160a01b0384166000908152600b6020526040902080546002919083908110610bca57610bca6137b8565b906000526020600020015481548110610be557610be56137b8565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610c3a57610c3a612fbb565b6002811115610c4b57610c4b612fbb565b815281546020909101906301000000900460ff166009811115610c7057610c70612fbb565b6009811115610c8157610c81612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610cbc906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce8906134f6565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110610d8257610d826137b8565b60200260200101819052508080610d98906137e1565b915050610b7c565b5092915050565b600154604051630c825d9760e11b81523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1891908101906135db565b60208101519091506001600160a01b03163314610e8d5760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201526c3932b2103b30b634b230ba37b960991b6064820152608401610485565b60808201516001600160a01b03163314610ee95760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610485565b6001826000015160ff16111561109e576000610f04836117b9565b905080610f1057505050565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610f6457610f64612fbb565b6002811115610f7557610f75612fbb565b815281546020909101906301000000900460ff166009811115610f9a57610f9a612fbb565b6009811115610fab57610fab612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610fe6906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611012906134f6565b801561105f5780601f106110345761010080835404028352916020019161105f565b820191906000526020600020905b81548152906001019060200180831161104257829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b6000826040015160028111156110b6576110b6612fbb565b036110c8576110c4826119f2565b5050565b6001826040015160028111156110e0576110e0612fbb565b036110ee576110c482611bf8565b60028260400151600281111561110657611106612fbb565b036110c4576110c482611d67565b6000600982600981111561112a5761112a612fbb565b036111385760025b92915050565b600082600981111561114c5761114c612fbb565b03611158576002611132565b600182600981111561116c5761116c612fbb565b03611178576002611132565b6002611132565b6011545b6010548110156114d2576000601082815481106111a2576111a26137b8565b90600052602060002001549050806000036111bd57506114c0565b6111c86001826137a5565b90506000600282815481106111df576111df6137b8565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561123457611234612fbb565b600281111561124557611245612fbb565b815281546020909101906301000000900460ff16600981111561126a5761126a612fbb565b600981111561127b5761127b612fbb565b815281546001600160a01b03600160201b9091048116602083015260018301541660408201526002820180546060909201916112b6906134f6565b80601f01602080910402602001604051908101604052809291908181526020018280546112e2906134f6565b801561132f5780601f106113045761010080835404028352916020019161132f565b820191906000526020600020905b81548152906001019060200180831161131257829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090504360036000015482610140015161138391906137ce565b1115611390575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516113bd90611114565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116113fb575050506114c0565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806114ca816137e1565b915050611183565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115519190613776565b905060005b600f548110156115c857816002600f8381548110611576576115766137b8565b906000526020600020015481548110611591576115916137b8565b906000526020600020906008020160050154036115b6576115b36001846137ce565b92505b806115c0816137e1565b915050611556565b5060005b600f548110156117ac5761179a6002600f83815481106115ee576115ee6137b8565b906000526020600020015481548110611609576116096137b8565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561165e5761165e612fbb565b600281111561166f5761166f612fbb565b815281546020909101906301000000900460ff16600981111561169457611694612fbb565b60098111156116a5576116a5612fbb565b815281546001600160a01b03600160201b9091048116602083015260018301541660408201526002820180546060909201916116e0906134f6565b80601f016020809104026020016040519081016040528092919081815260200182805461170c906134f6565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505084611ea7565b806117a4816137e1565b9150506115cc565b506110c4600f6000612f04565b6000816020015160ff166000036118ee57336000908152600d6020908152604091829020845181549286015160ff9081166101000261ffff1990941691161791909117808255918401518492829062ff000019166201000083600281111561182357611823612fbb565b021790555060608201518154829063ff0000001916630100000083600981111561184f5761184f612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906118ad9082613845565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff9182169161191c916101009004166001613905565b60ff161461196c5760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610485565b336000908152600d6020526040902060c083015161198d9160020190612441565b336000908152600d6020526040902080546001919082906119b7908290610100900460ff16613905565b92506101000a81548160ff021916908360ff160217905550816000015160ff16826020015160016119e89190613905565b60ff161492915050565b6000806000806000611a0960fe8760c0015161258b565b9450945094509450945084611a605760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611a955760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611aab57611aab612fbb565b8314611ac95760405162461bcd60e51b815260040161048590613949565b438210611b115760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610485565b60008211611b575760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b6044820152606401610485565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc59190613776565b610100880184905261012088018190524361014089015261016088018390529050611bef876125f2565b50505050505050565b6000806000806000611c0f60fc8760c0015161258b565b9450945094509450945084611c665760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611c9b5760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611cb157611cb1612fbb565b8314611ccf5760405162461bcd60e51b815260040161048590613949565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190613776565b610100880184905261012088018190524361014089015261016088018390529050611bef87612876565b6000806000806000611d7e60fd8760c0015161258b565b9450945094509450945084611dd55760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611e0a5760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611e2057611e20612fbb565b8314611e3e5760405162461bcd60e51b815260040161048590613949565b438210611e865760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610485565b61010086018290526101608601819052611e9f86612b2d565b505050505050565b60015460a0830151604051630c825d9760e11b81526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f2291908101906135db565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080546001600160a01b03191691909216179055905060038161026001516003811115611f7357611f73612fbb565b03611f7d57505050565b6000611f94611f8f8560600151611114565b612e38565b61022083015160075491925090600090611fae9083613973565b600654611fbb9087613973565b611fc590856137ce565b611fcf91906137ce565b600954909150811115611fe157506009545b60008461012001518560c001518660a00151611ffd91906137ce565b61200791906137ce565b60095490915060009061201a8385613973565b612024919061398a565b905060008111801561203557508181145b1561216557600060a087018190526101008701819052610120870181905260c08701526101e08601805182919061206d9083906137ce565b90525061022086018051600191906120869083906137ce565b905250600361026087015260006102008701526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e0906120c99089906004016139bc565b600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b610120860151819081116121925780876101200181815161218691906137a5565b905250600090506121ad565b6101208701516121a290826137a5565b600061012089015290505b801561222a5780876101000151106121f5578087610100018181516121d291906137a5565b90525060a0870180518291906121e99083906137a5565b9052506000905061222a565b61010087015161220590826137a5565b90508661010001518760a00181815161221e91906137a5565b90525060006101008801525b60008111801561224d575060008760a001518860c0015161224b91906137ce565b115b156122f95760008760a001518860c0015161226891906137ce565b60c08901516122779084613973565b612281919061398a565b905060008860a001518960c0015161229991906137ce565b60a08a01516122a89085613973565b6122b2919061398a565b9050818960c0018181516122c691906137a5565b90525060a0890180518291906122dd9083906137a5565b9052506122ea81836137ce565b6122f490846137a5565b925050505b61230381836137a5565b915081876101e00181815161231891906137ce565b90525061022087018051600191906123319083906137ce565b90525060005461022088015160085461234a9190613973565b6123549190613973565b61235e90436137ce565b61020088015260026102608801526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e09061239c908a906004016139bc565b600060405180830381600087803b1580156123b657600080fd5b505af11580156123ca573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b8154600260018083161561010002038216048251808201602081106020841001600281146124eb5760018114612510578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156124d557815184556001840193506020820191506124b8565b815191036101000a908190040290915550611bef565b60028302826020036101000a846020036101000a602089015104020185018755611bef565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156125715781518455600184019350602082019150612554565b815191036101000a90819004029091555050505050505050565b600080600080600080865160206125a291906137ce565b90506125ac612f22565b60a081838a8c5afa6125bd57600080fd5b80516001036125cb57600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b60006126018260600151611114565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161264f5760405162461bcd60e51b815260040161048590613b2c565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff00001990911690620100009084908111156126dc576126dc612fbb565b021790555060608201518154829063ff0000001916630100000083600981111561270857612708612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906127669082613845565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f9161286a91858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c6020526040902054156128e05760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610485565b60006128ef8260600151611114565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161293d5760405162461bcd60e51b815260040161048590613b2c565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff00001990911690620100009084908111156129ca576129ca612fbb565b021790555060608201518154829063ff000000191663010000008360098111156129f6576129f6612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c08201516002820190612a549082613845565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612a9c9060016137ce565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612acc9060016137ce565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351910161286a565b60a08101516001600160a01b03166000908152600c602052604081205490819003612b9a5760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610485565b81606001516009811115612bb057612bb0612fbb565b6002612bbd6001846137a5565b81548110612bcd57612bcd6137b8565b60009182526020909120600890910201546301000000900460ff166009811115612bf957612bf9612fbb565b14612c565760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b6064820152608401610485565b6101008201516002612c696001846137a5565b81548110612c7957612c796137b8565b90600052602060002090600802016004015414612ce65760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b6064820152608401610485565b6101608201516002612cf96001846137a5565b81548110612d0957612d096137b8565b90600052602060002090600802016007015414612d745760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b6064820152608401610485565b6011545b601054811015612dde578160108281548110612d9657612d966137b8565b906000526020600020015403612dcc57600060108281548110612dbb57612dbb6137b8565b600091825260209091200155612dde565b80612dd6816137e1565b915050612d78565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f910161286a565b600081612e4757505060055490565b60018203612e5757505060055490565b60028203612e6757505060055490565b60038203612e7757505060055490565b60048203612e885750612710919050565b50612710919050565b6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906107899190612f40565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612f555760008155600101612f41565b5090565b6001600160a01b038116811461078957600080fd5b8035612f7981612f59565b919050565b600060208284031215612f9057600080fd5b8135612f9b81612f59565b9392505050565b600060208284031215612fb457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60038110612fe157612fe1612fbb565b9052565b600a8110612fe157612fe1612fbb565b60005b83811015613010578181015183820152602001612ff8565b50506000910152565b60008151808452613031816020860160208601612ff5565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e166020840152613066604084018e612fd1565b613073606084018d612fe5565b6001600160a01b038b811660808501528a1660a084015260c0830181905261309d8184018a613019565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a8110612f7957600080fd5b6000806000606084860312156130f557600080fd5b833561310081612f59565b925061310e602085016130d1565b9150604084013590509250925092565b60006020828403121561313057600080fd5b81358015158114612f9b57600080fd5b805160ff16825260006101806020830151613160602086018260ff169052565b5060408301516131736040860182612fd1565b5060608301516131866060860182612fe5565b5060808301516131a160808601826001600160a01b03169052565b5060a08301516131bc60a08601826001600160a01b03169052565b5060c08301518160c08601526131d482860182613019565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b602081526000612f9b6020830184613140565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561327e57603f1988860301845261326c858351613140565b94509285019290850190600101613250565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156132c5576132c561328b565b60405290565b604051610280810167ffffffffffffffff811182821017156132c5576132c561328b565b604051601f8201601f1916810167ffffffffffffffff811182821017156133185761331861328b565b604052919050565b803560ff81168114612f7957600080fd5b803560038110612f7957600080fd5b600067ffffffffffffffff82111561335a5761335a61328b565b50601f01601f191660200190565b600082601f83011261337957600080fd5b813561338c61338782613340565b6132ef565b8181528460208386010111156133a157600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156133d057600080fd5b813567ffffffffffffffff808211156133e857600080fd5b9083019061018082860312156133fd57600080fd5b6134056132a1565b61340e83613320565b815261341c60208401613320565b602082015261342d60408401613331565b604082015261343e606084016130d1565b606082015261344f60808401612f6e565b608082015261346060a08401612f6e565b60a082015260c08301358281111561347757600080fd5b61348387828601613368565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b600080604083850312156134dd57600080fd5b82356134e881612f59565b946020939093013593505050565b600181811c9082168061350a57607f821691505b60208210810361352a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460408201526330ba37b960e11b606082015260800190565b8051612f7981612f59565b600082601f83011261359057600080fd5b815161359e61338782613340565b8181528460208386010111156135b357600080fd5b6135c4826020830160208701612ff5565b949350505050565b805160048110612f7957600080fd5b6000602082840312156135ed57600080fd5b815167ffffffffffffffff8082111561360557600080fd5b90830190610280828603121561361a57600080fd5b6136226132cb565b61362b83613574565b815261363960208401613574565b602082015261364a60408401613574565b604082015260608301518281111561366157600080fd5b61366d8782860161357f565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101806136d9818501613574565b908201526101a083810151908201526101c080840151908201526101e0808401519082015261020080840151908201526102208084015190820152610240808401518381111561372857600080fd5b6137348882870161357f565b828401525050610260915061374a8284016135cc565b91810191909152949350505050565b60006020828403121561376b57600080fd5b8151612f9b81612f59565b60006020828403121561378857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156111325761113261378f565b634e487b7160e01b600052603260045260246000fd5b808201808211156111325761113261378f565b6000600182016137f3576137f361378f565b5060010190565b601f82111561384057600081815260208120601f850160051c810160208610156138215750805b601f850160051c820191505b81811015611e9f5782815560010161382d565b505050565b815167ffffffffffffffff81111561385f5761385f61328b565b6138738161386d84546134f6565b846137fa565b602080601f8311600181146138a857600084156138905750858301515b600019600386901b1c1916600185901b178555611e9f565b600085815260208120601f198616915b828110156138d7578886015182559484019460019091019084016138b8565b50858210156138f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff81811683821601908111156111325761113261378f565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b80820281158282048414176111325761113261378f565b6000826139a757634e487b7160e01b600052601260045260246000fd5b500490565b60048110612fe157612fe1612fbb565b602081526139d66020820183516001600160a01b03169052565b600060208301516139f260408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152613a246102a0850183613019565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0613aab818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150613b0d8483613019565b935080870151915050613b22828601826139ac565b5090949350505050565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b60608201526080019056fea2646970667358221220c3f5c249d65d7b7ea67a4c4c8dc80f94c9086be5886e05e03017b5f9ccf1d43264736f6c63430008150033", + Bin: "0x608060405260006011553480156200001657600080fd5b5060405162003e2d38038062003e2d8339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b613c4480620001e96000396000f3fe6080604052600436106100c25760003560e01c80637ccecadd1161007f578063b5b7a18411610059578063b5b7a1841461029f578063bebaa8fc146102c3578063c50d21f0146102f0578063e7bb0b521461031057600080fd5b80637ccecadd146102285780639cb22b061461025f578063a8031a1d1461028c57600080fd5b806301567739146100c75780630b7914301461011a5780634108a95a146101525780636b5f444c146101825780636c9789b0146101a457806379502c55146101c4575b600080fd5b3480156100d357600080fd5b506100fd6100e2366004612ff6565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012657600080fd5b5061013a61013536600461301a565b610348565b6040516101119c9b9a999897969594939291906130bd565b34801561015e57600080fd5b5061017261016d366004613158565b61045b565b6040519015158152602001610111565b34801561018e57600080fd5b506101a261019d36600461301a565b61050b565b005b3480156101b057600080fd5b506101a26101bf3660046131a4565b610543565b3480156101d057600080fd5b506003546004546005546006546007546008546009546101f39695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610111565b34801561023457600080fd5b50610248610243366004613158565b610586565b604080519215158352602083019190915201610111565b34801561026b57600080fd5b5061027f61027a366004612ff6565b6106db565b6040516101119190613297565b6101a261029a3660046132aa565b610902565b3480156102ab57600080fd5b506102b560005481565b604051908152602001610111565b3480156102cf57600080fd5b506102e36102de366004612ff6565b610b80565b60405161011191906132d6565b3480156102fc57600080fd5b506101a261030b36600461346b565b610e1f565b34801561031c57600080fd5b506102b561032b3660046132aa565b600e60209081526000928352604080842090915290825290205481565b6002818154811061035857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b03600160201b9093048316949216929091906103ba90613577565b80601f01602080910402602001604051908101604052809291908181526020018280546103e690613577565b80156104335780601f1061040857610100808354040283529160200191610433565b820191906000526020600020905b81548152906001019060200180831161041657829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6000806104678461118c565b6001546040516396b477cb60e01b8152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156104b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104da91906135b1565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b0316331461053e5760405162461bcd60e51b8152600401610535906135ca565b60405180910390fd5b600055565b6001546001600160a01b0316331461056d5760405162461bcd60e51b8152600401610535906135ca565b6105756111f7565b80156105835761058361154f565b50565b60008060006105948561118c565b6001546040516396b477cb60e01b8152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156105e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060791906135b1565b6001600160a01b0388166000908152600e6020908152604080832084845290915290205490915082116106415760009350600092506106d1565b6001600160a01b0387166000908152600c6020526040902054156106c8576001600160a01b0387166000908152600c602052604081205460029061068790600190613624565b8154811061069757610697613637565b906000526020600020906008020190506000945060036000015481600401546106c0919061364d565b9350506106d1565b60019350600092505b5050935093915050565b6106e3612f09565b6001600160a01b0382166000908152600c60205260409020546107385760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b6044820152606401610535565b6001600160a01b0382166000908152600c602052604090205460029061076090600190613624565b8154811061077057610770613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156107c5576107c5613033565b60028111156107d6576107d6613033565b815281546020909101906301000000900460ff1660098111156107fb576107fb613033565b600981111561080c5761080c613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161084790613577565b80601f016020809104026020016040519081016040528092919081815260200182805461087390613577565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001546001600160a01b0316331461092c5760405162461bcd60e51b8152600401610535906135ca565b6001546001600160a01b038381166000908152600a6020526040808220549051630c825d9760e11b8152908316600482015290929190911690631904bb2e90602401600060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b391908101906136c7565b5160015460405163a9059cbb60e01b81526001600160a01b0380841660048301526024820186905292935091169063a9059cbb906044016020604051808303816000875af1925050508015610a25575060408051601f3d908101601f19168201909252610a2291810190613845565b60015b15610a2c57505b6000816001600160a01b0316346108fc90604051600060405180830381858888f193505050503d8060008114610a7e576040519150601f19603f3d011682016040523d82523d6000602084013e610a83565b606091505b5050905080610b5657600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b039190613862565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b4d576040519150601f19603f3d011682016040523d82523d6000602084013e610b52565b606091505b5050505b5050506001600160a01b03166000908152600a6020526040902080546001600160a01b0319169055565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610bb557610bb5613338565b604051908082528060200260200182016040528015610bee57816020015b610bdb612f09565b815260200190600190039081610bd35790505b50905060005b6001600160a01b0384166000908152600b6020526040902054811015610e18576001600160a01b0384166000908152600b6020526040902080546002919083908110610c4257610c42613637565b906000526020600020015481548110610c5d57610c5d613637565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610cb257610cb2613033565b6002811115610cc357610cc3613033565b815281546020909101906301000000900460ff166009811115610ce857610ce8613033565b6009811115610cf957610cf9613033565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610d3490613577565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6090613577565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110610dfa57610dfa613637565b60200260200101819052508080610e109061387f565b915050610bf4565b5092915050565b600154604051630c825d9760e11b81523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015610e68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9091908101906136c7565b60208101519091506001600160a01b03163314610f055760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201526c3932b2103b30b634b230ba37b960991b6064820152608401610535565b60808201516001600160a01b03163314610f615760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610535565b6001826000015160ff161115611116576000610f7c83611831565b905080610f8857505050565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610fdc57610fdc613033565b6002811115610fed57610fed613033565b815281546020909101906301000000900460ff16600981111561101257611012613033565b600981111561102357611023613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161105e90613577565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613577565b80156110d75780601f106110ac576101008083540402835291602001916110d7565b820191906000526020600020905b8154815290600101906020018083116110ba57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b60008260400151600281111561112e5761112e613033565b036111405761113c82611a6a565b5050565b60018260400151600281111561115857611158613033565b036111665761113c82611c70565b60028260400151600281111561117e5761117e613033565b0361113c5761113c82611ddf565b600060098260098111156111a2576111a2613033565b036111b05760025b92915050565b60008260098111156111c4576111c4613033565b036111d05760026111aa565b60018260098111156111e4576111e4613033565b036111f05760026111aa565b60026111aa565b6011545b60105481101561154a5760006010828154811061121a5761121a613637565b90600052602060002001549050806000036112355750611538565b611240600182613624565b905060006002828154811061125757611257613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156112ac576112ac613033565b60028111156112bd576112bd613033565b815281546020909101906301000000900460ff1660098111156112e2576112e2613033565b60098111156112f3576112f3613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161132e90613577565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90613577565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050436003600001548261014001516113fb919061364d565b1115611408575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516114359061118c565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161147357505050611538565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806115428161387f565b9150506111fb565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c991906135b1565b905060005b600f5481101561164057816002600f83815481106115ee576115ee613637565b90600052602060002001548154811061160957611609613637565b9060005260206000209060080201600501540361162e5761162b60018461364d565b92505b806116388161387f565b9150506115ce565b5060005b600f54811015611824576118126002600f838154811061166657611666613637565b90600052602060002001548154811061168157611681613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156116d6576116d6613033565b60028111156116e7576116e7613033565b815281546020909101906301000000900460ff16600981111561170c5761170c613033565b600981111561171d5761171d613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161175890613577565b80601f016020809104026020016040519081016040528092919081815260200182805461178490613577565b80156117d15780601f106117a6576101008083540402835291602001916117d1565b820191906000526020600020905b8154815290600101906020018083116117b457829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505084611f1f565b8061181c8161387f565b915050611644565b5061113c600f6000612f7c565b6000816020015160ff1660000361196657336000908152600d6020908152604091829020845181549286015160ff9081166101000261ffff1990941691161791909117808255918401518492829062ff000019166201000083600281111561189b5761189b613033565b021790555060608201518154829063ff000000191663010000008360098111156118c7576118c7613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c0820151600282019061192590826138e3565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff918216916119949161010090041660016139a3565b60ff16146119e45760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610535565b336000908152600d6020526040902060c0830151611a0591600201906124b9565b336000908152600d602052604090208054600191908290611a2f908290610100900460ff166139a3565b92506101000a81548160ff021916908360ff160217905550816000015160ff1682602001516001611a6091906139a3565b60ff161492915050565b6000806000806000611a8160fe8760c00151612603565b9450945094509450945084611ad85760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611b0d5760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611b2357611b23613033565b8314611b415760405162461bcd60e51b8152600401610535906139e7565b438210611b895760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610535565b60008211611bcf5760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b6044820152606401610535565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d91906135b1565b610100880184905261012088018190524361014089015261016088018390529050611c678761266a565b50505050505050565b6000806000806000611c8760fc8760c00151612603565b9450945094509450945084611cde5760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611d135760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611d2957611d29613033565b8314611d475760405162461bcd60e51b8152600401610535906139e7565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db591906135b1565b610100880184905261012088018190524361014089015261016088018390529050611c67876128ee565b6000806000806000611df660fd8760c00151612603565b9450945094509450945084611e4d5760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611e825760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611e9857611e98613033565b8314611eb65760405162461bcd60e51b8152600401610535906139e7565b438210611efe5760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610535565b61010086018290526101608601819052611f1786612ba5565b505050505050565b60015460a0830151604051630c825d9760e11b81526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f9a91908101906136c7565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080546001600160a01b03191691909216179055905060038161026001516003811115611feb57611feb613033565b03611ff557505050565b600061200c612007856060015161118c565b612eb0565b610220830151600754919250906000906120269083613a11565b6006546120339087613a11565b61203d908561364d565b612047919061364d565b60095490915081111561205957506009545b60008461012001518560c001518660a00151612075919061364d565b61207f919061364d565b6009549091506000906120928385613a11565b61209c9190613a28565b90506000811180156120ad57508181145b156121dd57600060a087018190526101008701819052610120870181905260c08701526101e0860180518291906120e590839061364d565b90525061022086018051600191906120fe90839061364d565b905250600361026087015260006102008701526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e090612141908990600401613a5a565b600060405180830381600087803b15801561215b57600080fd5b505af115801561216f573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b6101208601518190811161220a578087610120018181516121fe9190613624565b90525060009050612225565b61012087015161221a9082613624565b600061012089015290505b80156122a257808761010001511061226d5780876101000181815161224a9190613624565b90525060a087018051829190612261908390613624565b905250600090506122a2565b61010087015161227d9082613624565b90508661010001518760a0018181516122969190613624565b90525060006101008801525b6000811180156122c5575060008760a001518860c001516122c3919061364d565b115b156123715760008760a001518860c001516122e0919061364d565b60c08901516122ef9084613a11565b6122f99190613a28565b905060008860a001518960c00151612311919061364d565b60a08a01516123209085613a11565b61232a9190613a28565b9050818960c00181815161233e9190613624565b90525060a089018051829190612355908390613624565b905250612362818361364d565b61236c9084613624565b925050505b61237b8183613624565b915081876101e001818151612390919061364d565b90525061022087018051600191906123a990839061364d565b9052506000546102208801516008546123c29190613a11565b6123cc9190613a11565b6123d6904361364d565b61020088015260026102608801526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e090612414908a90600401613a5a565b600060405180830381600087803b15801561242e57600080fd5b505af1158015612442573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b8154600260018083161561010002038216048251808201602081106020841001600281146125635760018114612588578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101561254d5781518455600184019350602082019150612530565b815191036101000a908190040290915550611c67565b60028302826020036101000a846020036101000a602089015104020185018755611c67565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156125e957815184556001840193506020820191506125cc565b815191036101000a90819004029091555050505050505050565b6000806000806000808651602061261a919061364d565b9050612624612f9a565b60a081838a8c5afa61263557600080fd5b805160010361264357600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b6000612679826060015161118c565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116126c75760405162461bcd60e51b815260040161053590613bca565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff000019909116906201000090849081111561275457612754613033565b021790555060608201518154829063ff0000001916630100000083600981111561278057612780613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906127de90826138e3565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f916128e291858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c6020526040902054156129585760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610535565b6000612967826060015161118c565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116129b55760405162461bcd60e51b815260040161053590613bca565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff0000199091169062010000908490811115612a4257612a42613033565b021790555060608201518154829063ff00000019166301000000836009811115612a6e57612a6e613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c08201516002820190612acc90826138e3565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612b1490600161364d565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612b4490600161364d565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba4035191016128e2565b60a08101516001600160a01b03166000908152600c602052604081205490819003612c125760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610535565b81606001516009811115612c2857612c28613033565b6002612c35600184613624565b81548110612c4557612c45613637565b60009182526020909120600890910201546301000000900460ff166009811115612c7157612c71613033565b14612cce5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b6064820152608401610535565b6101008201516002612ce1600184613624565b81548110612cf157612cf1613637565b90600052602060002090600802016004015414612d5e5760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b6064820152608401610535565b6101608201516002612d71600184613624565b81548110612d8157612d81613637565b90600052602060002090600802016007015414612dec5760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b6064820152608401610535565b6011545b601054811015612e56578160108281548110612e0e57612e0e613637565b906000526020600020015403612e4457600060108281548110612e3357612e33613637565b600091825260209091200155612e56565b80612e4e8161387f565b915050612df0565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f91016128e2565b600081612ebf57505060055490565b60018203612ecf57505060055490565b60028203612edf57505060055490565b60038203612eef57505060055490565b60048203612f005750612710919050565b50612710919050565b6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906105839190612fb8565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612fcd5760008155600101612fb9565b5090565b6001600160a01b038116811461058357600080fd5b8035612ff181612fd1565b919050565b60006020828403121561300857600080fd5b813561301381612fd1565b9392505050565b60006020828403121561302c57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6003811061305957613059613033565b9052565b600a811061305957613059613033565b60005b83811015613088578181015183820152602001613070565b50506000910152565b600081518084526130a981602086016020860161306d565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e1660208401526130de604084018e613049565b6130eb606084018d61305d565b6001600160a01b038b811660808501528a1660a084015260c083018190526131158184018a613091565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a8110612ff157600080fd5b60008060006060848603121561316d57600080fd5b833561317881612fd1565b925061318660208501613149565b9150604084013590509250925092565b801515811461058357600080fd5b6000602082840312156131b657600080fd5b813561301381613196565b805160ff168252600061018060208301516131e1602086018260ff169052565b5060408301516131f46040860182613049565b506060830151613207606086018261305d565b50608083015161322260808601826001600160a01b03169052565b5060a083015161323d60a08601826001600160a01b03169052565b5060c08301518160c086015261325582860182613091565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b60208152600061301360208301846131c1565b600080604083850312156132bd57600080fd5b82356132c881612fd1565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561332b57603f198886030184526133198583516131c1565b945092850192908501906001016132fd565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561337257613372613338565b60405290565b604051610280810167ffffffffffffffff8111828210171561337257613372613338565b604051601f8201601f1916810167ffffffffffffffff811182821017156133c5576133c5613338565b604052919050565b803560ff81168114612ff157600080fd5b803560038110612ff157600080fd5b600067ffffffffffffffff82111561340757613407613338565b50601f01601f191660200190565b600082601f83011261342657600080fd5b8135613439613434826133ed565b61339c565b81815284602083860101111561344e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561347d57600080fd5b813567ffffffffffffffff8082111561349557600080fd5b9083019061018082860312156134aa57600080fd5b6134b261334e565b6134bb836133cd565b81526134c9602084016133cd565b60208201526134da604084016133de565b60408201526134eb60608401613149565b60608201526134fc60808401612fe6565b608082015261350d60a08401612fe6565b60a082015260c08301358281111561352457600080fd5b61353087828601613415565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b600181811c9082168061358b57607f821691505b6020821081036135ab57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156135c357600080fd5b5051919050565b60208082526024908201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460408201526330ba37b960e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156111aa576111aa61360e565b634e487b7160e01b600052603260045260246000fd5b808201808211156111aa576111aa61360e565b8051612ff181612fd1565b600082601f83011261367c57600080fd5b815161368a613434826133ed565b81815284602083860101111561369f57600080fd5b6136b082602083016020870161306d565b949350505050565b805160048110612ff157600080fd5b6000602082840312156136d957600080fd5b815167ffffffffffffffff808211156136f157600080fd5b90830190610280828603121561370657600080fd5b61370e613378565b61371783613660565b815261372560208401613660565b602082015261373660408401613660565b604082015260608301518281111561374d57600080fd5b6137598782860161366b565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101806137c5818501613660565b908201526101a083810151908201526101c080840151908201526101e0808401519082015261020080840151908201526102208084015190820152610240808401518381111561381457600080fd5b6138208882870161366b565b82840152505061026091506138368284016136b8565b91810191909152949350505050565b60006020828403121561385757600080fd5b815161301381613196565b60006020828403121561387457600080fd5b815161301381612fd1565b6000600182016138915761389161360e565b5060010190565b601f8211156138de57600081815260208120601f850160051c810160208610156138bf5750805b601f850160051c820191505b81811015611f17578281556001016138cb565b505050565b815167ffffffffffffffff8111156138fd576138fd613338565b6139118161390b8454613577565b84613898565b602080601f831160018114613946576000841561392e5750858301515b600019600386901b1c1916600185901b178555611f17565b600085815260208120601f198616915b8281101561397557888601518255948401946001909101908401613956565b50858210156139935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff81811683821601908111156111aa576111aa61360e565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b80820281158282048414176111aa576111aa61360e565b600082613a4557634e487b7160e01b600052601260045260246000fd5b500490565b6004811061305957613059613033565b60208152613a746020820183516001600160a01b03169052565b60006020830151613a9060408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152613ac26102a0850183613091565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0613b49818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150613bab8483613091565b935080870151915050613bc082860182613a4a565b5090949350505050565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b60608201526080019056fea2646970667358221220f6799acaca7e1582ac3ade1f96d6478ae068ca0d3c5ba2c5c9c046b04e18b86a64736f6c63430008150033", } // AccountabilityABI is the input ABI used to generate the binding from. @@ -1458,25 +1469,25 @@ func (_Accountability *AccountabilityCallerSession) SlashingHistory(arg0 common. return _Accountability.Contract.SlashingHistory(&_Accountability.CallOpts, arg0, arg1) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_Accountability *AccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _validator common.Address) (*types.Transaction, error) { - return _Accountability.contract.Transact(opts, "distributeRewards", _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_Accountability *AccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _Accountability.contract.Transact(opts, "distributeRewards", _validator, _ntnReward) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_Accountability *AccountabilitySession) DistributeRewards(_validator common.Address) (*types.Transaction, error) { - return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_Accountability *AccountabilitySession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _validator, _ntnReward) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_Accountability *AccountabilityTransactorSession) DistributeRewards(_validator common.Address) (*types.Transaction, error) { - return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_Accountability *AccountabilityTransactorSession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _validator, _ntnReward) } // Finalize is a paid mutator transaction binding the contract method 0x6c9789b0. @@ -2119,12 +2130,13 @@ func (_Accountability *AccountabilityFilterer) ParseSlashingEvent(log types.Log) // AutonityMetaData contains all meta data concerning the Autonity contract. var AutonityMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator[]\",\"name\":\"_validators\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator[]\",\"name\":\"_validators\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atnTotalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "b46e5520": "activateValidator(address)", "dd62ed3e": "allowance(address,address)", "095ea7b3": "approve(address,uint256)", + "e98712b2": "atnTotalRedistributed()", "70a08231": "balanceOf(address)", "a515366a": "bond(address,uint256)", "9dc29fac": "burn(address,uint256)", @@ -2157,7 +2169,9 @@ var AutonityMetaData = &bind.MetaData{ "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "9ac31074": "inflationReserve()", "c2362dd5": "lastEpochBlock()", + "89c614b8": "lastEpochTime()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", @@ -2167,6 +2181,7 @@ var AutonityMetaData = &bind.MetaData{ "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", + "f03b959d": "setInflationControllerContract(address)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", @@ -2177,7 +2192,6 @@ var AutonityMetaData = &bind.MetaData{ "114eaf55": "setUnbondingPeriod(uint256)", "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", - "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", @@ -2186,7 +2200,7 @@ var AutonityMetaData = &bind.MetaData{ "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", }, - Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b506040516200a3913803806200a3918339810160408190526200003e9162000e64565b601c546000036200006757602a80546001600160a01b031916331790556200006782826200006f565b505062001325565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b825181101562000420576000838281518110620001805762000180620010a1565b602002602001015160a0015190506000848381518110620001a557620001a5620010a1565b60200260200101516101a00181815250506000848381518110620001cd57620001cd620010a1565b602002602001015161018001906001600160a01b031690816001600160a01b0316815250506000848381518110620002095762000209620010a1565b602002602001015160a00181815250506000848381518110620002305762000230620010a1565b60209081029190910101516101c00152600f5484518590849081106200025a576200025a620010a1565b602002602001015160800181815250506000848381518110620002815762000281620010a1565b602002602001015161026001906003811115620002a257620002a2620010b7565b90816003811115620002b857620002b8620010b7565b815250506000848381518110620002d357620002d3620010a1565b602002602001015161016001818152505062000311848381518110620002fd57620002fd620010a1565b60200260200101516200042560201b60201c565b6200033e8483815181106200032a576200032a620010a1565b60200260200101516200056060201b60201c565b8060276000868581518110620003585762000358620010a1565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003959190620010e3565b925050819055508060296000828254620003b09190620010e3565b925050819055506200040a848381518110620003d057620003d0620010a1565b60200260200101516020015182868581518110620003f257620003f2620010a1565b6020026020010151600001516200079160201b60201c565b50806200041781620010ff565b9150506200015f565b505050565b60006200043c82606001516200097c60201b60201c565b6001600160a01b03909116602084015290508015620004905760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620005045760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000487565b612710826080015111156200055c5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000487565b5050565b6101808101516001600160a01b0316620005e357601d546000906200058590620009ca565b905081602001518260000151836080015183604051620005a59062000aea565b620005b494939291906200111b565b604051809103906000f080158015620005d1573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006959082620011ff565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182015561024082015160128201906200075f9082620011ff565b5061026082015160138201805460ff19166001836003811115620007875762000787620010b7565b0217905550505050565b60008211620007ef5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000487565b6001600160a01b038116600090815260276020526040902054821115620008595760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000487565b6001600160a01b0381166000908152602760205260408120805484929062000883908490620012cb565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200090f83620010ff565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b6000806200098962000af8565b60008060ff9050604083875160208901845afa620009a657600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003620009f25750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a22578062000a0981620010ff565b915062000a1a9050600a83620012f7565b9150620009f6565b6000816001600160401b0381111562000a3f5762000a3f62000b16565b6040519080825280601f01601f19166020018201604052801562000a6a576020820181803683370190505b5090505b841562000ae25762000a82600183620012cb565b915062000a91600a866200130e565b62000a9e906030620010e3565b60f81b81838151811062000ab65762000ab6620010a1565b60200101906001600160f81b031916908160001a90535062000ada600a86620012f7565b945062000a6e565b949350505050565b6115318062008e6083390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b515762000b5162000b16565b60405290565b60405160a081016001600160401b038111828210171562000b515762000b5162000b16565b60405161028081016001600160401b038111828210171562000b515762000b5162000b16565b604051601f8201601f191681016001600160401b038111828210171562000bcd5762000bcd62000b16565b604052919050565b6001600160a01b038116811462000beb57600080fd5b50565b805162000bfb8162000bd5565b919050565b60005b8381101562000c1d57818101518382015260200162000c03565b50506000910152565b600082601f83011262000c3857600080fd5b81516001600160401b0381111562000c545762000c5462000b16565b62000c69601f8201601f191660200162000ba2565b81815284602083860101111562000c7f57600080fd5b62000ae282602083016020870162000c00565b80516004811062000bfb57600080fd5b600060c0828403121562000cb557600080fd5b60405160c081016001600160401b038111828210171562000cda5762000cda62000b16565b8060405250809150825162000cef8162000bd5565b8152602083015162000d018162000bd5565b6020820152604083015162000d168162000bd5565b6040820152606083015162000d2b8162000bd5565b6060820152608083015162000d408162000bd5565b608082015260a083015162000d558162000bd5565b60a0919091015292915050565b60006080828403121562000d7557600080fd5b62000d7f62000b2c565b9050815162000d8e8162000bd5565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361020081121562000dcb57600080fd5b62000dd562000b2c565b915060a081121562000de657600080fd5b5062000df162000b57565b82518152602083015160208201526040830151604082015260608301516060820152608083015162000e238162000bd5565b6080820152815262000e398360a0840162000ca2565b602082015262000e4e83610160840162000d62565b60408201526101e0820151606082015292915050565b60008061022080848603121562000e7a57600080fd5b83516001600160401b038082111562000e9257600080fd5b818601915086601f83011262000ea757600080fd5b815160208282111562000ebe5762000ebe62000b16565b8160051b62000ecf82820162000ba2565b928352848101820192828101908b85111562000eea57600080fd5b83870192505b848310156200107f5782518681111562000f0957600080fd5b8701610280818e03601f1901121562000f2157600080fd5b62000f2b62000b7c565b62000f3886830162000bee565b815262000f486040830162000bee565b8682015262000f5a6060830162000bee565b604082015260808201518881111562000f7257600080fd5b62000f828f888386010162000c26565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015161014082015261018082015161016082015262000ff06101a0830162000bee565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e0820152898201516102008201526102408201518a820152610260820151888111156200104257600080fd5b620010528f888386010162000c26565b6102408301525062001068610280830162000c92565b610260820152835250918301919083019062000ef0565b8099505050506200109389828a0162000db6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620010f957620010f9620010cd565b92915050565b600060018201620011145762001114620010cd565b5060010190565b600060018060a01b0380871683528086166020840152508360408301526080606083015282518060808401526200115a8160a085016020870162000c00565b601f01601f19169190910160a00195945050505050565b600181811c908216806200118657607f821691505b602082108103620011a757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042057600081815260208120601f850160051c81016020861015620011d65750805b601f850160051c820191505b81811015620011f757828155600101620011e2565b505050505050565b81516001600160401b038111156200121b576200121b62000b16565b62001233816200122c845462001171565b84620011ad565b602080601f8311600181146200126b5760008415620012525750858301515b600019600386901b1c1916600185901b178555620011f7565b600085815260208120601f198616915b828110156200129c578886015182559484019460019091019084016200127b565b5085821015620012bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115620010f957620010f9620010cd565b634e487b7160e01b600052601260045260246000fd5b600082620013095762001309620012e1565b500490565b600082620013205762001320620012e1565b500690565b617b2b80620013356000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000ced578063dfb1a4d21462000d37578063e7f43c681462000d4e578063f7866ee31462000d6e57005b8063d372c07e1462000c69578063d5f394881462000c8e578063d861b0e81462000cb0578063d886f8a21462000cc857005b8063cb696f5411620000e5578063cb696f541462000be2578063ceaad4551462000c07578063cf9c57191462000c2c578063cfd19fb91462000c4457005b8063b66b3e791462000b72578063b7ab4db51462000b9a578063c2362dd51462000bb2578063c9d97af41462000bca57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000adc578063b2ea9adb1462000b03578063b3ecbadd1462000b28578063b46e55201462000b4d57005b8063a5d059ca1462000a44578063a8b2216e1462000a69578063a9059cbb1462000a90578063ab8f6ffe1462000ab557005b80639bb851c011620001d15780639bb851c014620009ca5780639c98e47114620009e25780639dc29fac14620009fa578063a515366a1462000a1f57005b8063872cf059146200092e5780638bac7dad146200094657806395d89b41146200096b57806396b477cb146200099957005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008ad578063833b1fce14620008c457806384467fdb14620008e4578063852c4849146200090957005b8063731b3a03146200076e57806377e741c71462000785578063784304b514620007aa57806379502c5514620007cf57005b80635f7d394911620002c95780635f7d394914620006ba5780636b5f444c14620006f85780636fd2c80b146200071d57806370a08231146200073457005b8063436459691462000631578063496ccd9b14620006485780634bb278f3146200066d578063520fdbbc146200069557005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005b1578063313ce56714620005c957806335be16e014620005e757806340c10f19146200060c57005b806318160ddd146200052a5780631904bb2e146200054157806323b872dd146200057557806329070c6d146200059a57005b80631122063311620003b55780631122063314620004b1578063114eaf5514620004c85780631250a28d14620004ed5780631604e416146200051257005b806306fdde0314620003f1578063095ea7b314620004355780630ae65e7a146200046b5780630d8e6e2c146200049057005b36620003ef57005b005b348015620003fe57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b6040516200042c9190620054fa565b60405180910390f35b3480156200044257600080fd5b506200045a620004543660046200552c565b62000d8e565b60405190151581526020016200042c565b3480156200047857600080fd5b50620003ef6200048a3660046200555b565b62000da7565b3480156200049d57600080fd5b50601c545b6040519081526020016200042c565b348015620004be57600080fd5b50600e54620004a2565b348015620004d557600080fd5b50620003ef620004e73660046200557b565b62000e3a565b348015620004fa57600080fd5b50620003ef6200050c3660046200555b565b62000e6c565b3480156200051f57600080fd5b50620004a260245481565b3480156200053757600080fd5b50602954620004a2565b3480156200054e57600080fd5b5062000566620005603660046200555b565b62000ebb565b6040516200042c9190620055ce565b3480156200058257600080fd5b506200045a6200059436600462005747565b62001169565b348015620005a757600080fd5b50600d54620004a2565b348015620005be57600080fd5b50620004a261271081565b348015620005d657600080fd5b50604051601281526020016200042c565b348015620005f457600080fd5b50620003ef620006063660046200578d565b620011c3565b3480156200061957600080fd5b50620003ef6200062b3660046200552c565b6200139f565b3480156200063e57600080fd5b50601a54620004a2565b3480156200065557600080fd5b50620003ef620006673660046200555b565b62001459565b3480156200067a57600080fd5b506200068562001563565b6040516200042c9291906200584e565b348015620006a257600080fd5b50620003ef620006b43660046200555b565b6200192a565b348015620006c757600080fd5b50620006df620006d93660046200586b565b62001b25565b6040516001600160a01b0390911681526020016200042c565b3480156200070557600080fd5b50620003ef620007173660046200557b565b62001d3c565b3480156200072a57600080fd5b50601054620004a2565b3480156200074157600080fd5b50620004a2620007533660046200555b565b6001600160a01b031660009081526027602052604090205490565b3480156200077b57600080fd5b50602054620004a2565b3480156200079257600080fd5b50620003ef620007a43660046200557b565b62001ec2565b348015620007b757600080fd5b50620003ef620007c936600462005939565b62001ef4565b348015620007dc57600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c546200089b939084565b6040516200042c94939291906200598f565b348015620008ba57600080fd5b50601b54620004a2565b348015620008d157600080fd5b506013546001600160a01b0316620006df565b348015620008f157600080fd5b50620003ef6200090336600462005a5e565b6200209f565b3480156200091657600080fd5b50620003ef620009283660046200552c565b620021ce565b3480156200093b57600080fd5b50620003ef6200235f565b3480156200095357600080fd5b50620003ef620009653660046200557b565b6200239b565b3480156200097857600080fd5b50604080518082019091526003815262272a2760e91b60208201526200041d565b348015620009a657600080fd5b50620004a2620009b83660046200557b565b6000908152601f602052604090205490565b348015620009d757600080fd5b50620004a260235481565b348015620009ef57600080fd5b50620004a260215481565b34801562000a0757600080fd5b50620003ef62000a193660046200552c565b6200241f565b34801562000a2c57600080fd5b50620003ef62000a3e3660046200552c565b62002535565b34801562000a5157600080fd5b50620003ef62000a633660046200552c565b62002608565b34801562000a7657600080fd5b5062000a816200269f565b6040516200042c919062005b07565b34801562000a9d57600080fd5b506200045a62000aaf3660046200552c565b62002782565b34801562000ac257600080fd5b5062000acd62002791565b6040516200042c919062005b6d565b34801562000ae957600080fd5b5062000af4620028a3565b6040516200042c919062005b82565b34801562000b1057600080fd5b50620003ef62000b2236600462005bd1565b62002ae9565b34801562000b3557600080fd5b50620003ef62000b473660046200555b565b62002b30565b34801562000b5a57600080fd5b50620003ef62000b6c3660046200555b565b62002b7f565b34801562000b7f57600080fd5b5062000b8a62002dbb565b6040516200042c92919062005c32565b34801562000ba757600080fd5b5062000af462002ef2565b34801562000bbf57600080fd5b50620004a260205481565b34801562000bd757600080fd5b50620004a2601e5481565b34801562000bef57600080fd5b50620003ef62000c013660046200557b565b62002f56565b34801562000c1457600080fd5b50620003ef62000c263660046200555b565b62002fb9565b34801562000c3957600080fd5b50620003ef62003008565b34801562000c5157600080fd5b50620003ef62000c633660046200555b565b6200305c565b34801562000c7657600080fd5b50620003ef62000c883660046200555b565b620030ab565b34801562000c9b57600080fd5b50602a54620006df906001600160a01b031681565b34801562000cbd57600080fd5b50620003ef620030fa565b34801562000cd557600080fd5b50620003ef62000ce73660046200555b565b6200313b565b34801562000cfa57600080fd5b50620004a262000d0c36600462005c64565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d4457600080fd5b50601954620004a2565b34801562000d5b57600080fd5b506018546001600160a01b0316620006df565b34801562000d7b57600080fd5b506011546001600160a01b0316620006df565b600062000d9d3384846200318a565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000df05760405162461bcd60e51b815260040162000de79062005ca2565b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000e2c5760405162461bcd60e51b815260040162000de79062005cd9565b62000e3781620032b3565b50565b6018546001600160a01b0316331462000e675760405162461bcd60e51b815260040162000de79062005d25565b601055565b6018546001600160a01b0316331462000e995760405162461bcd60e51b815260040162000de79062005d25565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62000ec5620052d3565b6001600160a01b038083166000818152602860205260409020600101549091161462000f055760405162461bcd60e51b815260040162000de79062005d5c565b6001600160a01b03808316600090815260286020908152604091829020825161028081018452815485168152600182015485169281019290925260028101549093169181019190915260038201805491929160608401919062000f689062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462000f969062005d93565b801562000fe75780601f1062000fbb5761010080835404028352916020019162000fe7565b820191906000526020600020905b81548152906001019060200180831162000fc957829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620010a39062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620010d19062005d93565b8015620011225780601f10620010f65761010080835404028352916020019162001122565b820191906000526020600020905b8154815290600101906020018083116200110457829003601f168201915b5050509183525050601382015460209091019060ff1660038111156200114c576200114c62005595565b600381111562001160576200116062005595565b90525092915050565b6000620011788484846200338a565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620011a990849062005de5565b9050620011b88533836200318a565b506001949350505050565b6012546001600160a01b031633146200122b5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000de7565b60006101208201356028826200124860408601602087016200555b565b6001600160a01b03166001600160a01b031681526020019081526020016000206009015462001278919062005de5565b60c0830135602860006200129360408701602088016200555b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620012c3919062005de5565b60a084013560286000620012de60408801602089016200555b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200130e919062005de5565b6200131a919062005dfb565b62001326919062005dfb565b6011546001600160a01b03166000908152602760205260408120805492935083929091906200135790849062005dfb565b90915550829050602860006200137460408401602085016200555b565b6001600160a01b03168152602081019190915260400160002062001399828262005ffd565b50505050565b6018546001600160a01b03163314620013cc5760405162461bcd60e51b815260040162000de79062005d25565b6001600160a01b03821660009081526027602052604081208054839290620013f690849062005dfb565b92505081905550806029600082825462001411919062005dfb565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620014865760405162461bcd60e51b815260040162000de79062005d25565b601380546001600160a01b0319166001600160a01b03838116918217909255601454604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620014e557600080fd5b505af1158015620014fa573d6000803e3d6000fd5b5050601654604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200154757600080fd5b505af11580156200155c573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620015965760405162461bcd60e51b815260040162000de79062006153565b601e54436000818152601f6020908152604082209390935560195492549092620015c09162005dfb565b6012546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200160b57600080fd5b505af115801562001620573d6000803e3d6000fd5b50505050801562001715576200163562003493565b6200163f6200387d565b620016496200396c565b600062001655620028a3565b60135460405163422811f960e11b81529192506001600160a01b03169063845023f2906200168890849060040162005b82565b600060405180830381600087803b158015620016a357600080fd5b505af1158015620016b8573d6000803e3d6000fd5b50505050436020819055506001601e6000828254620016d8919062005dfb565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b60135460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001787919062006196565b9050801562001803576014546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620017fb575060408051601f3d908101601f19168201909252620017f89181019062006196565b60015b156200180357505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b828210156200191a576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620018829062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b09062005d93565b8015620019015780601f10620018d55761010080835404028352916020019162001901565b820191906000526020600020905b815481529060010190602001808311620018e357829003601f168201915b505050505081525050815260200190600101906200182c565b5050505090509350935050509091565b6018546001600160a01b03163314620019575760405162461bcd60e51b815260040162000de79062005d25565b601880546001600160a01b0319166001600160a01b0383811691821790925560135460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b158015620019b657600080fd5b505af1158015620019cb573d6000803e3d6000fd5b505060145460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a1757600080fd5b505af115801562001a2c573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a7857600080fd5b505af115801562001a8d573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ad957600080fd5b505af115801562001aee573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb91506024016200152c565b600080805b60225481101562001b81576022818154811062001b4b5762001b4b620061ba565b9060005260206000209060030201600101548262001b6a919062005dfb565b91508062001b7881620061d0565b91505062001b2a565b508060000362001bd45760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000de7565b60008362001be4606387620061ec565b62001bf0919062005dfb565b905060008160405160200162001c0891815260200190565b60408051601f1981840301815291905280516020909101209050600062001c3084836200621c565b90506000805b60225481101562001ce0576022818154811062001c575762001c57620061ba565b9060005260206000209060030201600101548262001c76919062005dfb565b915062001c8560018362005de5565b831162001ccb576022818154811062001ca25762001ca2620061ba565b60009182526020909120600390910201546001600160a01b0316965062000da195505050505050565b8062001cd781620061d0565b91505062001c36565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000de7565b6018546001600160a01b0316331462001d695760405162461bcd60e51b815260040162000de79062005d25565b60195481101562001e20578060205462001d84919062005dfb565b431062001e205760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000de7565b6019819055601254604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562001e6c57600080fd5b505af115801562001e81573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162001eb791815260200190565b60405180910390a150565b6018546001600160a01b0316331462001eef5760405162461bcd60e51b815260040162000de79062005d25565b600d55565b6001600160a01b03808316600081815260286020526040902060018101549092161462001f355760405162461bcd60e51b815260040162000de79062005d5c565b80546001600160a01b0316331462001f615760405162461bcd60e51b815260040162000de79062006233565b62001f6c8362003a8b565b1562001fc65760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840162000de7565b60008062001fd48462003afc565b925090508115620020165760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b60018301546001600160a01b03828116911614620020875760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840162000de7565b6003830162002097858262006282565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200160008152602001848152602001600060038111156200216e576200216e62005595565b905290506200217e818362003b41565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021bf92339289918b916200634b565b60405180910390a15050505050565b6001600160a01b03808316600081815260286020526040902060010154909116146200220e5760405162461bcd60e51b815260040162000de79062005ca2565b6001600160a01b038281166000908152602860205260409020541633146200224a5760405162461bcd60e51b815260040162000de79062005cd9565b6127108111156200229e5760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000de7565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200231790849062005dfb565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b031633146200238c5760405162461bcd60e51b815260040162000de79062005d25565b6002805460ff19166001179055565b6018546001600160a01b03163314620023c85760405162461bcd60e51b815260040162000de79062005d25565b600081116200241a5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000de7565b601b55565b6018546001600160a01b031633146200244c5760405162461bcd60e51b815260040162000de79062005d25565b6001600160a01b038216600090815260276020526040902054811115620024af5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b03821660009081526027602052604081208054839290620024d990849062005de5565b925050819055508060296000828254620024f4919062005de5565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020016200144d565b6001600160a01b0380831660008181526028602052604090206001015490911614620025755760405162461bcd60e51b815260040162000de79062005d5c565b6001600160a01b03821660009081526028602052604081206013015460ff166003811115620025a857620025a862005595565b14620025f75760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000de7565b6200260482823362003f9b565b5050565b6001600160a01b0380831660008181526028602052604090206001015490911614620026485760405162461bcd60e51b815260040162000de79062005d5c565b60008111620026925760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000de7565b6200260482823362004187565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002779578382906000526020600020018054620026e59062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620027139062005d93565b8015620027645780601f10620027385761010080835404028352916020019162002764565b820191906000526020600020905b8154815290600101906020018083116200274657829003601f168201915b505050505081526020019060010190620026c3565b50505050905090565b600062000d9d3384846200338a565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002779576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916200280b9062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620028399062005d93565b80156200288a5780601f106200285e576101008083540402835291602001916200288a565b820191906000526020600020905b8154815290600101906020018083116200286c57829003601f168201915b50505050508152505081526020019060010190620027b5565b602a546060906001600160a01b03163314620028d35760405162461bcd60e51b815260040162000de79062006153565b601d54620029245760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000de7565b6200292e620053a3565b601b546080820152601d81526028602082015260226040820152602160608201526200295a81620044ba565b6200296860256000620053c1565b60225480620029af5760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000de7565b60008167ffffffffffffffff811115620029cd57620029cd6200588e565b604051908082528060200260200182016040528015620029f7578160200160208202803683370190505b50905060005b8281101562002ae1576000602860006022848154811062002a225762002a22620061ba565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c019062002a8a9083018262006394565b50600281015483516001600160a01b039091169084908490811062002ab35762002ab3620061ba565b6001600160a01b0390921660209283029190910190910152508062002ad881620061d0565b915050620029fd565b509250505090565b6018546001600160a01b0316331462002b165760405162461bcd60e51b815260040162000de79062005d25565b62002b23600083620044d5565b62002604600182620044d5565b6018546001600160a01b0316331462002b5d5760405162461bcd60e51b815260040162000de79062005d25565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602860205260409020600101549091161462002bbf5760405162461bcd60e51b815260040162000de79062005ca2565b6001600160a01b0380821660009081526028602052604090208054909116331462002bfe5760405162461bcd60e51b815260040162000de79062006233565b6000601382015460ff16600381111562002c1c5762002c1c62005595565b0362002c6b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000de7565b6002601382015460ff16600381111562002c895762002c8962005595565b14801562002c9a5750438160100154115b1562002ce95760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000de7565b6003601382015460ff16600381111562002d075762002d0762005595565b0362002d565760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000de7565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002da6919062005dfb565b60405190815260200160405180910390a35050565b6060806000600181805462002dd09062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462002dfe9062005d93565b801562002e4f5780601f1062002e235761010080835404028352916020019162002e4f565b820191906000526020600020905b81548152906001019060200180831162002e3157829003601f168201915b5050505050915080805462002e649062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462002e929062005d93565b801562002ee35780601f1062002eb75761010080835404028352916020019162002ee3565b820191906000526020600020905b81548152906001019060200180831162002ec557829003601f168201915b50505050509050915091509091565b6060601d80548060200260200160405190810160405280929190818152602001828054801562002f4c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002f2d575b5050505050905090565b6018546001600160a01b0316331462002f835760405162461bcd60e51b815260040162000de79062005d25565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162001eb7565b6018546001600160a01b0316331462002fe65760405162461bcd60e51b815260040162000de79062005d25565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030355760405162461bcd60e51b815260040162000de79062005d25565b62003042600080620053e1565b6200305060016000620053e1565b6002805460ff19169055565b6018546001600160a01b03163314620030895760405162461bcd60e51b815260040162000de79062005d25565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030d85760405162461bcd60e51b815260040162000de79062005d25565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b602a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000de79062006153565b620031316200387d565b62000e37620028a3565b6018546001600160a01b03163314620031685760405162461bcd60e51b815260040162000de79062005d25565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620031ee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000de7565b6001600160a01b038216620032515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000de7565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff166003811115620032e857620032e862005595565b14620033375760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000de7565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002da6919062005dfb565b6001600160a01b038316600090815260276020526040902054811115620033ed5760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b038316600090815260276020526040812080548392906200341790849062005de5565b90915550506001600160a01b038216600090815260276020526040812080548392906200344690849062005dfb565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620032a691815260200190565b476000036200349e57565b600d544790600090670de0b6b3a764000090620034bd908490620061ec565b620034c9919062006472565b9050801562003547576011546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003521576040519150601f19603f3d011682016040523d82523d6000602084013e62003526565b606091505b5090915050801515600103620035455762003542828462005de5565b92505b505b81602360008282546200355b919062005dfb565b90915550600090505b6022548110156200387857600060286000602284815481106200358b576200358b620061ba565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060215460228054929450909187919086908110620035d657620035d6620061ba565b906000526020600020906003020160010154620035f49190620061ec565b62003600919062006472565b9050801562003860576002601383015460ff16600381111562003627576200362762005595565b14806200364f57506003601383015460ff1660038111156200364d576200364d62005595565b145b15620036f757601254602280546001600160a01b0390921691631de9d9b691849187908110620036835762003683620061ba565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b0390911660048201526024016000604051808303818588803b158015620036d557600080fd5b505af1158015620036ea573d6000803e3d6000fd5b5050505050505062003863565b60008260050154828460080154620037109190620061ec565b6200371c919062006472565b905060006200372c828462005de5565b90508115620037915783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d806000811462003788576040519150601f19603f3d011682016040523d82523d6000602084013e6200378d565b606091505b5050505b8015620038195783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af1158015620037f0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003817919062006489565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b806200386f81620061d0565b91505062003564565b505050565b6004545b600554811015620038aa57620038a4816200389c81620061d0565b925062004628565b62003881565b5060055460045560085460075403620038bf57565b6009545b600854811015620038ec57620038e681620038de81620061d0565b92506200484f565b620038c3565b50600854600955600754805b60085481101562003966576010546000828152600660205260409020600401544391620039259162005dfb565b116200394b57620039368162004b4a565b6200394360018362005dfb565b915062003951565b62003966565b806200395d81620061d0565b915050620038f8565b50600755565b600c54600b54101562003a8957600b546000908152600a60205260409020601054600182015443916200399f9162005dfb565b1115620039a95750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003a04920190815260200190565b600060405180830381600087803b15801562003a1f57600080fd5b505af115801562003a34573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003a7c90849062005dfb565b909155506200396c915050565b565b6000805b60225481101562003af3576022818154811062003ab05762003ab0620061ba565b60009182526020909120600390910201546001600160a01b039081169084160362003ade5750600192915050565b8062003aea81620061d0565b91505062003a8f565b50600092915050565b60008062003b0962005420565b60008060ff9050604083875160208901845afa62003b2657600080fd5b50508051602090910151600160601b90910494909350915050565b60e281511462003b8b5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000de7565b6030826102400151511462003be35760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000de7565b62003bee8262004c95565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003c51920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003c71835162004dc2565b8360405160200162003c8693929190620064a3565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003cde898262003cd860416002620061ec565b62004ee3565b9050600062003cfd8a62003cf560416002620061ec565b606062004ee3565b905060205b825181101562003dce5762003d18838262004ffc565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003d74573d6000803e3d6000fd5b5050604051601f19015190508762003d8e60418462006472565b8151811062003da15762003da1620061ba565b6001600160a01b039092166020928302919091019091015262003dc660418262005dfb565b905062003d02565b508a602001516001600160a01b03168660008151811062003df35762003df3620061ba565b60200260200101516001600160a01b03161462003e655760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000de7565b8a604001516001600160a01b03168660018151811062003e895762003e89620061ba565b60200260200101516001600160a01b03161462003efd5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000de7565b600162003f158c6102400151838e6000015162005033565b1462003f835760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000de7565b62003f8e8b620050a2565b5050505050505050505050565b6000821162003ff95760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000de7565b6001600160a01b038116600090815260276020526040902054821115620040635760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000de7565b6001600160a01b038116600090815260276020526040812080548492906200408d90849062005de5565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200411983620061d0565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b0380841660009081526028602052604090208054909183811691161480620042fd57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa158015620041fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004224919062006489565b9050848110156200428c5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000de7565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b158015620042dd57600080fd5b505af1158015620042f2573d6000803e3d6000fd5b505050505062004390565b8382600b0154836008015462004314919062005de5565b1015620043745760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000de7565b8382600b0160008282546200438a919062005dfb565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff1990951694909417929092179092558054916200446483620061d0565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620041789291909115158252602082015260400190565b60fa60a06000808285855af462003878573d6000803e3d6000fd5b815460026001808316156101000203821604825180820160208110602084100160028114620045845760018114620045aa578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200456d57815184556001840193506020820191506200454e565b815191036101000a9081900402909155506200461f565b60028302826020036101000a846020036101000a6020890151040201850187556200461f565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156200460d5781518455600184019350602082019150620045ee565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff1660038111156200466e576200466e62005595565b146200470e57600282015482546001600160a01b031660009081526027602052604081208054909190620046a490849062005dfb565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462004701946001600160a01b0391821694911692909160ff90911690620064ec565b60405180910390a1505050565b805482546001600160a01b039081169116146200480b57600080826008015483600501546200473e919062005de5565b9050806000036200475657836002015491506200477c565b80846002015484600d01546200476d9190620061ec565b62004779919062006472565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620047ce57600080fd5b505af1158015620047e3573d6000803e3d6000fd5b505050508183600d016000828254620047fd919062005dfb565b909155506200482b92505050565b816002015481600801600082825462004825919062005dfb565b90915550505b816002015481600501600082825462004845919062005dfb565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662004a43576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b158015620048e457600080fd5b505af1158015620048f9573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200494f57600080fd5b505af115801562004964573d6000803e3d6000fd5b5050505060008360080154846005015462004980919062005de5565b600d850154909150620049948284620061ec565b620049a0919062006472565b92508184600d016000828254620049b8919062005de5565b90915550506006840154600003620049d75760038501839055620049ff565b60068401546007850154620049ed9085620061ec565b620049f9919062006472565b60038601555b8284600601600082825462004a15919062005dfb565b9091555050600385015460078501805460009062004a3590849062005dfb565b9091555062004b1892505050565b506002820154600882015481111562004a5d575060088101545b816009015460000362004a77576003830181905562004a9f565b6009820154600a83015462004a8d9083620061ec565b62004a99919062006472565b60038401555b8082600901600082825462004ab5919062005dfb565b90915550506003830154600a8301805460009062004ad590849062005dfb565b925050819055508082600801600082825462004af2919062005de5565b90915550506002830154600b8301805460009062004b1290849062005de5565b90915550505b6005808401805460ff191660011790558201805482919060009062004b3f90849062005de5565b909155505050505050565b6000818152600660205260408120600381015490910362004b69575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff1662004c055781600701548260060154846003015462004bb59190620061ec565b62004bc1919062006472565b90508082600601600082825462004bd9919062005de5565b9091555050600383015460078301805460009062004bf990849062005de5565b9091555062004c6a9050565b81600a01548260090154846003015462004c209190620061ec565b62004c2c919062006472565b90508082600901600082825462004c44919062005de5565b90915550506003830154600a8301805460009062004c6490849062005de5565b90915550505b82546001600160a01b03166000908152602760205260408120805483929062004b3f90849062005dfb565b600062004ca6826060015162003afc565b6001600160a01b0390911660208401529050801562004cf65760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b6020808301516001600160a01b0390811660009081526028909252604090912060010154161562004d6a5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000de7565b61271082608001511115620026045760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000de7565b60608160000362004dea5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004e1a578062004e0181620061d0565b915062004e129050600a8362006472565b915062004dee565b60008167ffffffffffffffff81111562004e385762004e386200588e565b6040519080825280601f01601f19166020018201604052801562004e63576020820181803683370190505b5090505b841562004edb5762004e7b60018362005de5565b915062004e8a600a866200621c565b62004e9790603062005dfb565b60f81b81838151811062004eaf5762004eaf620061ba565b60200101906001600160f81b031916908160001a90535062004ed3600a8662006472565b945062004e67565b949350505050565b60608162004ef381601f62005dfb565b101562004f345760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000de7565b62004f40828462005dfb565b8451101562004f865760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000de7565b60608215801562004fa7576040519150600082526020820160405262004ff3565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562004fe257805183526020928301920162004fc8565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156200502c5762005029601b826200651a565b90505b9250925092565b60006200503f6200543e565b6000858585604051602001620050589392919062006536565b6040516020818303038152906040529050600060fb905060008251602062005081919062005dfb565b90506020848285855afa6200509557600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200512557601d54600090620050c79062004dc2565b905081602001518260000151836080015183604051620050e7906200545c565b620050f6949392919062006585565b604051809103906000f08015801562005113573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620051d7908262006282565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620052a1908262006282565b5061026082015160138201805460ff19166001836003811115620052c957620052c962005595565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600060038111156200539e576200539e62005595565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000e3791906200546a565b508054620053ef9062005d93565b6000825580601f1062005400575050565b601f01602090049060005260206000209081019062000e3791906200548f565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b61153180620065c583390190565b808211156200548b576000620054818282620053e1565b506001016200546a565b5090565b5b808211156200548b576000815560010162005490565b60005b83811015620054c3578181015183820152602001620054a9565b50506000910152565b60008151808452620054e6816020860160208601620054a6565b601f01601f19169290920160200192915050565b6020815260006200550f6020830184620054cc565b9392505050565b6001600160a01b038116811462000e3757600080fd5b600080604083850312156200554057600080fd5b82356200554d8162005516565b946020939093013593505050565b6000602082840312156200556e57600080fd5b81356200550f8162005516565b6000602082840312156200558e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110620055ca57634e487b7160e01b600052602160045260246000fd5b9052565b60208152620055e96020820183516001600160a01b03169052565b600060208301516200560660408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516102808060808501526200563a6102a0850183620054cc565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620056c2818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620057268483620054cc565b9350808701519150506200573d82860182620055ab565b5090949350505050565b6000806000606084860312156200575d57600080fd5b83356200576a8162005516565b925060208401356200577c8162005516565b929592945050506040919091013590565b600060208284031215620057a057600080fd5b813567ffffffffffffffff811115620057b857600080fd5b820161028081850312156200550f57600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005841578284038952815180516001600160a01b0316855285810151868601526040908101516060918601829052906200582c81870183620054cc565b9a87019a9550505090840190600101620057ea565b5091979650505050505050565b821515815260406020820152600062004edb6040830184620057cc565b600080604083850312156200587f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620058b657600080fd5b813567ffffffffffffffff80821115620058d457620058d46200588e565b604051601f8301601f19908116603f01168101908282118183101715620058ff57620058ff6200588e565b816040528381528660208588010111156200591957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200594d57600080fd5b82356200595a8162005516565b9150602083013567ffffffffffffffff8111156200597757600080fd5b6200598585828601620058a4565b9150509250929050565b845181526020808601518183015260408087015181840152606080880151818501526080808901516001600160a01b03908116828701528851811660a08088019190915294890151811660c087015292880151831660e08601529087015182166101008501528601511661012083015284015161020082019062005a1f6101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b6000806000806080858703121562005a7557600080fd5b843567ffffffffffffffff8082111562005a8e57600080fd5b62005a9c88838901620058a4565b95506020870135915062005ab08262005516565b9093506040860135908082111562005ac757600080fd5b62005ad588838901620058a4565b9350606087013591508082111562005aec57600080fd5b5062005afb87828801620058a4565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005b6057603f1988860301845262005b4d858351620054cc565b9450928501929085019060010162005b2e565b5092979650505050505050565b6020815260006200550f6020830184620057cc565b6020808252825182820181905260009190848201906040850190845b8181101562005bc55783516001600160a01b03168352928401929184019160010162005b9e565b50909695505050505050565b6000806040838503121562005be557600080fd5b823567ffffffffffffffff8082111562005bfe57600080fd5b62005c0c86838701620058a4565b9350602085013591508082111562005c2357600080fd5b506200598585828601620058a4565b60408152600062005c476040830185620054cc565b828103602084015262005c5b8185620054cc565b95945050505050565b6000806040838503121562005c7857600080fd5b823562005c858162005516565b9150602083013562005c978162005516565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005da857607f821691505b60208210810362005dc957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000da15762000da162005dcf565b8082018082111562000da15762000da162005dcf565b6000813562000da18162005516565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005e5857600080fd5b83018035915067ffffffffffffffff82111562005e7457600080fd5b60200191503681900382131562005e8a57600080fd5b9250929050565b601f8211156200387857600081815260208120601f850160051c8101602086101562005eba5750805b601f850160051c820191505b81811015620020975782815560010162005ec6565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005f0b5762005f0b6200588e565b62005f238362005f1c835462005d93565b8362005e91565b6000601f84116001811462005f56576000851562005f415750838201355b62005f4d868262005edb565b8455506200155c565b600083815260209020601f19861690835b8281101562005f89578685013582556020948501946001909201910162005f67565b508682101562005fa75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000da157600080fd5b6004821062005fea57634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b620060136200600c8362005e11565b8262005e20565b6200602f620060256020840162005e11565b6001830162005e20565b6200604b620060416040840162005e11565b6002830162005e20565b6200605a606083018362005e40565b6200606a81836003860162005ef0565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b820155620060dd620060d3610180840162005e11565b600c830162005e20565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200612461024083018362005e40565b6200613481836012860162005ef0565b50506200260462006149610260840162005fb9565b6013830162005fcb565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620061a957600080fd5b815180151581146200550f57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201620061e557620061e562005dcf565b5060010190565b808202811582820484141762000da15762000da162005dcf565b634e487b7160e01b600052601260045260246000fd5b6000826200622e576200622e62006206565b500690565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b815167ffffffffffffffff8111156200629f576200629f6200588e565b620062b781620062b0845462005d93565b8462005e91565b602080601f831160018114620062eb5760008415620062d65750858301515b620062e2858262005edb565b86555062002097565b600085815260208120601f198616915b828110156200631c57888601518255948401946001909101908401620062fb565b50858210156200633b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018060a01b0380881683528087166020840152808616604084015260a060608401526200637f60a0840186620054cc565b91508084166080840152509695505050505050565b818103620063a0575050565b620063ac825462005d93565b67ffffffffffffffff811115620063c757620063c76200588e565b620063d881620062b0845462005d93565b6000601f8211600181146200640b5760008315620063f65750848201545b62006402848262005edb565b8555506200155c565b600085815260209020601f19841690600086815260209020845b8381101562006447578286015482556001958601959091019060200162006425565b50858310156200633b5793015460001960f8600387901b161c19169092555050600190811b01905550565b60008262006484576200648462006206565b500490565b6000602082840312156200649c57600080fd5b5051919050565b60008451620064b7818460208901620054a6565b845190830190620064cd818360208901620054a6565b8451910190620064e2818360208801620054a6565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005c5b6060830184620055ab565b60ff818116838216019081111562000da15762000da162005dcf565b600084516200654a818460208901620054a6565b84519083019062006560818360208901620054a6565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065ba90830184620054cc565b969550505050505056fe60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033a2646970667358221220e86ac280dc044e89f28e6e9b674a490bb8d1c4c77f1e2630bf05467afe366c0264736f6c6343000815003360806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b506040516200aacc3803806200aacc8339810160408190526200003e9162000e9e565b601e546000036200006757602e80546001600160a01b031916331790556200006782826200006f565b50506200135f565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000442576000838281518110620001a257620001a2620010db565b602002602001015160a0015190506000848381518110620001c757620001c7620010db565b60200260200101516101a00181815250506000848381518110620001ef57620001ef620010db565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200022b576200022b620010db565b602002602001015160a00181815250506000848381518110620002525762000252620010db565b60209081029190910101516101c00152600f5484518590849081106200027c576200027c620010db565b602002602001015160800181815250506000848381518110620002a357620002a3620010db565b602002602001015161026001906003811115620002c457620002c4620010f1565b90816003811115620002da57620002da620010f1565b815250506000848381518110620002f557620002f5620010db565b6020026020010151610160018181525050620003338483815181106200031f576200031f620010db565b60200260200101516200044760201b60201c565b620003608483815181106200034c576200034c620010db565b60200260200101516200058260201b60201c565b80602a60008685815181106200037a576200037a620010db565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003b791906200111d565b9250508190555080602c6000828254620003d291906200111d565b925050819055506200042c848381518110620003f257620003f2620010db565b60200260200101516020015182868581518110620004145762000414620010db565b602002602001015160000151620007b360201b60201c565b5080620004398162001139565b91505062000181565b505050565b60006200045e82606001516200099e60201b60201c565b6001600160a01b03909116602084015290508015620004b25760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620005265760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620004a9565b612710826080015111156200057e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620004a9565b5050565b6101808101516001600160a01b03166200060557601f54600090620005a790620009ec565b905081602001518260000151836080015183604051620005c79062000b0c565b620005d6949392919062001155565b604051809103906000f080158015620005f3573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006b7908262001239565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062000781908262001239565b5061026082015160138201805460ff19166001836003811115620007a957620007a9620010f1565b0217905550505050565b60008211620008115760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620004a9565b6001600160a01b0381166000908152602a60205260409020548211156200087b5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620004a9565b6001600160a01b0381166000908152602a602052604081208054849290620008a590849062001305565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620009318362001139565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b600080620009ab62000b1a565b60008060ff9050604083875160208901845afa620009c857600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000a145750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a44578062000a2b8162001139565b915062000a3c9050600a8362001331565b915062000a18565b6000816001600160401b0381111562000a615762000a6162000b38565b6040519080825280601f01601f19166020018201604052801562000a8c576020820181803683370190505b5090505b841562000b045762000aa460018362001305565b915062000ab3600a8662001348565b62000ac09060306200111d565b60f81b81838151811062000ad85762000ad8620010db565b60200101906001600160f81b031916908160001a90535062000afc600a8662001331565b945062000a90565b949350505050565b61186f806200925d83390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b735762000b7362000b38565b60405290565b60405160c081016001600160401b038111828210171562000b735762000b7362000b38565b60405161028081016001600160401b038111828210171562000b735762000b7362000b38565b604051601f8201601f191681016001600160401b038111828210171562000bef5762000bef62000b38565b604052919050565b6001600160a01b038116811462000c0d57600080fd5b50565b805162000c1d8162000bf7565b919050565b60005b8381101562000c3f57818101518382015260200162000c25565b50506000910152565b600082601f83011262000c5a57600080fd5b81516001600160401b0381111562000c765762000c7662000b38565b62000c8b601f8201601f191660200162000bc4565b81815284602083860101111562000ca157600080fd5b62000b0482602083016020870162000c22565b80516004811062000c1d57600080fd5b600060e0828403121562000cd757600080fd5b60405160e081016001600160401b038111828210171562000cfc5762000cfc62000b38565b8060405250809150825162000d118162000bf7565b8152602083015162000d238162000bf7565b6020820152604083015162000d388162000bf7565b6040820152606083015162000d4d8162000bf7565b606082015262000d606080840162000c10565b608082015262000d7360a0840162000c10565b60a082015262000d8660c0840162000c10565b60c08201525092915050565b60006080828403121562000da557600080fd5b62000daf62000b4e565b9050815162000dbe8162000bf7565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361024081121562000dfb57600080fd5b62000e0562000b4e565b915060c081121562000e1657600080fd5b5062000e2162000b79565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015162000e5d8162000bf7565b60a0820152815262000e738360c0840162000cc4565b602082015262000e88836101a0840162000d92565b6040820152610220820151606082015292915050565b60008061026080848603121562000eb457600080fd5b83516001600160401b038082111562000ecc57600080fd5b818601915086601f83011262000ee157600080fd5b815160208282111562000ef85762000ef862000b38565b8160051b62000f0982820162000bc4565b928352848101820192828101908b85111562000f2457600080fd5b83870192505b84831015620010b95782518681111562000f4357600080fd5b8701610280818e03601f1901121562000f5b57600080fd5b62000f6562000b9e565b62000f7286830162000c10565b815262000f826040830162000c10565b8682015262000f946060830162000c10565b604082015260808201518881111562000fac57600080fd5b62000fbc8f888386010162000c48565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e08201526101208201516101008201526101408201516101208201526101608201516101408201526101808201516101608201526200102a6101a0830162000c10565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e082015261022082015161020082015261024082015161022082015289820151888111156200107e57600080fd5b6200108e8f888386010162000c48565b61024083015250620010a4610280830162000cb4565b818b0152835250918301919083019062000f2a565b809950505050620010cd89828a0162000de6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562001133576200113362001107565b92915050565b6000600182016200114e576200114e62001107565b5060010190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620011948160a085016020870162000c22565b601f01601f19169190910160a00195945050505050565b600181811c90821680620011c057607f821691505b602082108103620011e157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044257600081815260208120601f850160051c81016020861015620012105750805b601f850160051c820191505b8181101562001231578281556001016200121c565b505050505050565b81516001600160401b0381111562001255576200125562000b38565b6200126d81620012668454620011ab565b84620011e7565b602080601f831160018114620012a557600084156200128c5750858301515b600019600386901b1c1916600185901b17855562001231565b600085815260208120601f198616915b82811015620012d657888601518255948401946001909101908401620012b5565b5085821015620012f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562001133576200113362001107565b634e487b7160e01b600052601260045260246000fd5b6000826200134357620013436200131b565b500490565b6000826200135a576200135a6200131b565b500690565b617eee806200136f6000396000f3fe608060405260043610620003ff5760003560e01c80638bac7dad116200020f578063b7ab4db51162000123578063d5f3948811620000b3578063dfb1a4d21162000081578063dfb1a4d21462000e14578063e7f43c681462000e2b578063e98712b21462000e4b578063f03b959d1462000e63578063f7866ee31462000e8857005b8063d5f394881462000d6b578063d861b0e81462000d8d578063d886f8a21462000da5578063dd62ed3e1462000dca57005b8063ceaad45511620000f1578063ceaad4551462000ce4578063cf9c57191462000d09578063cfd19fb91462000d21578063d372c07e1462000d4657005b8063b7ab4db51462000c77578063c2362dd51462000c8f578063c9d97af41462000ca7578063cb696f541462000cbf57005b8063a8b2216e116200019f578063b2ea9adb116200016d578063b2ea9adb1462000be0578063b3ecbadd1462000c05578063b46e55201462000c2a578063b66b3e791462000c4f57005b8063a8b2216e1462000b46578063a9059cbb1462000b6d578063ab8f6ffe1462000b92578063ae1f5fa01462000bb957005b80639c98e47111620001dd5780639c98e4711462000abf5780639dc29fac1462000ad7578063a515366a1462000afc578063a5d059ca1462000b2157005b80638bac7dad1462000a2357806395d89b411462000a4857806396b477cb1462000a765780639ac310741462000aa757005b8063436459691162000313578063731b3a0311620002a3578063833b1fce1162000271578063833b1fce146200098957806384467fdb14620009a9578063852c484914620009ce578063872cf05914620009f357806389c614b81462000a0b57005b8063731b3a03146200078657806377e741c7146200079d57806379502c5514620007c2578063819b6463146200097257005b80635f7d394911620002e15780635f7d394914620006d25780636b5f444c14620007105780636fd2c80b146200073557806370a08231146200074c57005b8063436459691462000649578063496ccd9b14620006605780634bb278f31462000685578063520fdbbc14620006ad57005b806318160ddd116200038f5780632f2c3f2e116200035d5780632f2c3f2e14620005c9578063313ce56714620005e157806335be16e014620005ff57806340c10f19146200062457005b806318160ddd14620005425780631904bb2e146200055957806323b872dd146200058d57806329070c6d14620005b257005b80631122063311620003cd5780631122063314620004c9578063114eaf5514620004e05780631250a28d14620005055780631604e416146200052a57005b806306fdde031462000409578063095ea7b3146200044d5780630ae65e7a14620004835780630d8e6e2c14620004a857005b366200040757005b005b3480156200041657600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b604051620004449190620056ba565b60405180910390f35b3480156200045a57600080fd5b50620004726200046c366004620056ec565b62000ea8565b604051901515815260200162000444565b3480156200049057600080fd5b5062000407620004a23660046200571b565b62000ec1565b348015620004b557600080fd5b50601e545b60405190815260200162000444565b348015620004d657600080fd5b50600e54620004ba565b348015620004ed57600080fd5b5062000407620004ff3660046200573b565b62000f54565b3480156200051257600080fd5b5062000407620005243660046200571b565b62000f86565b3480156200053757600080fd5b50620004ba60275481565b3480156200054f57600080fd5b50602c54620004ba565b3480156200056657600080fd5b506200057e620005783660046200571b565b62000fd5565b6040516200044491906200578e565b3480156200059a57600080fd5b5062000472620005ac36600462005907565b62001283565b348015620005bf57600080fd5b50600d54620004ba565b348015620005d657600080fd5b50620004ba61271081565b348015620005ee57600080fd5b506040516012815260200162000444565b3480156200060c57600080fd5b50620004076200061e3660046200594d565b6200132b565b3480156200063157600080fd5b506200040762000643366004620056ec565b62001507565b3480156200065657600080fd5b50601c54620004ba565b3480156200066d57600080fd5b50620004076200067f3660046200571b565b62001544565b3480156200069257600080fd5b506200069d6200164e565b6040516200044492919062005a0e565b348015620006ba57600080fd5b5062000407620006cc3660046200571b565b62001ae0565b348015620006df57600080fd5b50620006f7620006f136600462005a2b565b62001cdb565b6040516001600160a01b03909116815260200162000444565b3480156200071d57600080fd5b50620004076200072f3660046200573b565b62001ef2565b3480156200074257600080fd5b50601054620004ba565b3480156200075957600080fd5b50620004ba6200076b3660046200571b565b6001600160a01b03166000908152602a602052604090205490565b3480156200079357600080fd5b50602254620004ba565b348015620007aa57600080fd5b5062000407620007bc3660046200573b565b62002078565b348015620007cf57600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008a4939084565b6040805185518152602080870151818301528683015182840152606080880151818401526080808901518185015260a0988901516001600160a01b039081168a8601528851811660c080870191909152848a0151821660e0870152898701518216610100870152838a0151821661012087015291890151811661014086015298880151891661016085015290960151871661018083015284519096166101a0820152948301516101c08601528201516101e08501529101516102008301526102208201526102400162000444565b3480156200097f57600080fd5b50601d54620004ba565b3480156200099657600080fd5b506014546001600160a01b0316620006f7565b348015620009b657600080fd5b5062000407620009c836600462005af9565b620020aa565b348015620009db57600080fd5b5062000407620009ed366004620056ec565b620021d9565b34801562000a0057600080fd5b50620004076200236a565b34801562000a1857600080fd5b50620004ba60235481565b34801562000a3057600080fd5b506200040762000a423660046200573b565b620023a6565b34801562000a5557600080fd5b50604080518082019091526003815262272a2760e91b602082015262000435565b34801562000a8357600080fd5b50620004ba62000a953660046200573b565b60009081526021602052604090205490565b34801562000ab457600080fd5b50620004ba602d5481565b34801562000acc57600080fd5b50620004ba60245481565b34801562000ae457600080fd5b506200040762000af6366004620056ec565b6200242a565b34801562000b0957600080fd5b506200040762000b1b366004620056ec565b62002547565b34801562000b2e57600080fd5b506200040762000b40366004620056ec565b62002616565b34801562000b5357600080fd5b5062000b5e620026ad565b60405162000444919062005ba2565b34801562000b7a57600080fd5b506200047262000b8c366004620056ec565b62002790565b34801562000b9f57600080fd5b5062000baa620027e8565b60405162000444919062005c08565b34801562000bc657600080fd5b5062000bd1620028fa565b60405162000444919062005c1d565b34801562000bed57600080fd5b506200040762000bff36600462005c6c565b62002b40565b34801562000c1257600080fd5b506200040762000c243660046200571b565b62002b87565b34801562000c3757600080fd5b506200040762000c493660046200571b565b62002bd6565b34801562000c5c57600080fd5b5062000c6762002e59565b6040516200044492919062005cd7565b34801562000c8457600080fd5b5062000bd162002f90565b34801562000c9c57600080fd5b50620004ba60225481565b34801562000cb457600080fd5b50620004ba60205481565b34801562000ccc57600080fd5b506200040762000cde3660046200573b565b62002ff4565b34801562000cf157600080fd5b506200040762000d033660046200571b565b62003057565b34801562000d1657600080fd5b5062000407620030a6565b34801562000d2e57600080fd5b506200040762000d403660046200571b565b620030fa565b34801562000d5357600080fd5b506200040762000d653660046200571b565b62003149565b34801562000d7857600080fd5b50602e54620006f7906001600160a01b031681565b34801562000d9a57600080fd5b506200040762003198565b34801562000db257600080fd5b506200040762000dc43660046200571b565b620031e0565b34801562000dd757600080fd5b50620004ba62000de936600462005d09565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000e2157600080fd5b50601b54620004ba565b34801562000e3857600080fd5b50601a546001600160a01b0316620006f7565b34801562000e5857600080fd5b50620004ba60265481565b34801562000e7057600080fd5b506200040762000e823660046200571b565b6200322f565b34801562000e9557600080fd5b506012546001600160a01b0316620006f7565b600062000eb73384846200327e565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000f0a5760405162461bcd60e51b815260040162000f019062005d47565b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f465760405162461bcd60e51b815260040162000f019062005d7e565b62000f5181620033a6565b50565b601a546001600160a01b0316331462000f815760405162461bcd60e51b815260040162000f019062005dca565b601055565b601a546001600160a01b0316331462000fb35760405162461bcd60e51b815260040162000f019062005dca565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b62000fdf62005493565b6001600160a01b038083166000818152602b6020526040902060010154909116146200101f5760405162461bcd60e51b815260040162000f019062005e01565b6001600160a01b038083166000908152602b60209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010829062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b09062005e38565b8015620011015780601f10620010d55761010080835404028352916020019162001101565b820191906000526020600020905b815481529060010190602001808311620010e357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011bd9062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620011eb9062005e38565b80156200123c5780601f1062001210576101008083540402835291602001916200123c565b820191906000526020600020905b8154815290600101906020018083116200121e57829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001266576200126662005755565b60038111156200127a576200127a62005755565b90525092915050565b6000620012928484846200347d565b6001600160a01b0384166000908152602960209081526040808320338452909152812054620012c390849062005e8a565b9050620012d28533836200327e565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200131891815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620013935760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000f01565b6000610120820135602b82620013b060408601602087016200571b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013e0919062005e8a565b60c0830135602b6000620013fb60408701602088016200571b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200142b919062005e8a565b60a0840135602b60006200144660408801602089016200571b565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015462001476919062005e8a565b62001482919062005ea0565b6200148e919062005ea0565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620014bf90849062005ea0565b90915550829050602b6000620014dc60408401602085016200571b565b6001600160a01b031681526020810191909152604001600020620015018282620060aa565b50505050565b601a546001600160a01b03163314620015345760405162461bcd60e51b815260040162000f019062005dca565b62001540828262003543565b5050565b601a546001600160a01b03163314620015715760405162461bcd60e51b815260040162000f019062005dca565b601480546001600160a01b0319166001600160a01b03838116918217909255601554604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620015d057600080fd5b505af1158015620015e5573d6000803e3d6000fd5b5050601754604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200163257600080fd5b505af115801562001647573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620016815760405162461bcd60e51b815260040162000f019062006200565b6020805443600081815260219093526040832091909155601b54602254620016aa919062005ea0565b6013546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620016f557600080fd5b505af11580156200170a573d6000803e3d6000fd5b505050508015620018cb57601954602c54602d546023546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062006243565b905080602d541015620017b55750602d545b620017c1308262003543565b80602d6000828254620017d5919062005e8a565b90915550620017e790504782620035c9565b620017f162003ab3565b620017fb62003ba2565b600062001807620028fa565b60145460405163422811f960e11b81529192506001600160a01b03169063845023f2906200183a90849060040162005c1d565b600060405180830381600087803b1580156200185557600080fd5b505af11580156200186a573d6000803e3d6000fd5b50504360225550504260235560208054600191906000906200188e90849062005ea0565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b60145460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193d91906200625d565b90508015620019b9576015546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620019b1575060408051601f3d908101601f19168201909252620019ae918101906200625d565b60015b15620019b957505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001ad0576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001a389062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462001a669062005e38565b801562001ab75780601f1062001a8b5761010080835404028352916020019162001ab7565b820191906000526020600020905b81548152906001019060200180831162001a9957829003601f168201915b50505050508152505081526020019060010190620019e2565b5050505090509350935050509091565b601a546001600160a01b0316331462001b0d5760405162461bcd60e51b815260040162000f019062005dca565b601a80546001600160a01b0319166001600160a01b0383811691821790925560145460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001b6c57600080fd5b505af115801562001b81573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001bcd57600080fd5b505af115801562001be2573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c2e57600080fd5b505af115801562001c43573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c8f57600080fd5b505af115801562001ca4573d6000803e3d6000fd5b505060185460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb915060240162001617565b600080805b60255481101562001d37576025818154811062001d015762001d0162006281565b9060005260206000209060030201600101548262001d20919062005ea0565b91508062001d2e8162006297565b91505062001ce0565b508060000362001d8a5760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000f01565b60008362001d9a606387620062b3565b62001da6919062005ea0565b905060008160405160200162001dbe91815260200190565b60408051601f1981840301815291905280516020909101209050600062001de68483620062e3565b90506000805b60255481101562001e96576025818154811062001e0d5762001e0d62006281565b9060005260206000209060030201600101548262001e2c919062005ea0565b915062001e3b60018362005e8a565b831162001e81576025818154811062001e585762001e5862006281565b60009182526020909120600390910201546001600160a01b0316965062000ebb95505050505050565b8062001e8d8162006297565b91505062001dec565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000f01565b601a546001600160a01b0316331462001f1f5760405162461bcd60e51b815260040162000f019062005dca565b601b5481101562001fd6578060225462001f3a919062005ea0565b431062001fd65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000f01565b601b819055601354604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200202257600080fd5b505af115801562002037573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200206d91815260200190565b60405180910390a150565b601a546001600160a01b03163314620020a55760405162461bcd60e51b815260040162000f019062005dca565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562002179576200217962005755565b9052905062002189818362003cc1565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021ca92339289918b91620062fa565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620022195760405162461bcd60e51b815260040162000f019062005d47565b6001600160a01b038281166000908152602b6020526040902054163314620022555760405162461bcd60e51b815260040162000f019062005d7e565b612710811115620022a95760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000f01565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200232290849062005ea0565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620023975760405162461bcd60e51b815260040162000f019062005dca565b6002805460ff19166001179055565b601a546001600160a01b03163314620023d35760405162461bcd60e51b815260040162000f019062005dca565b60008111620024255760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000f01565b601d55565b601a546001600160a01b03163314620024575760405162461bcd60e51b815260040162000f019062005dca565b6001600160a01b0382166000908152602a6020526040902054811115620024ba5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0382166000908152602a602052604081208054839290620024e490849062005e8a565b9250508190555080602c6000828254620024ff919062005e8a565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025875760405162461bcd60e51b815260040162000f019062005e01565b6001600160a01b0382166000908152602b602052604081206013015460ff166003811115620025ba57620025ba62005755565b14620026095760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000f01565b620015408282336200411b565b6001600160a01b038083166000818152602b602052604090206001015490911614620026565760405162461bcd60e51b815260040162000f019062005e01565b60008111620026a05760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000f01565b6200154082823362004307565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002787578382906000526020600020018054620026f39062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620027219062005e38565b8015620027725780601f10620027465761010080835404028352916020019162002772565b820191906000526020600020905b8154815290600101906020018083116200275457829003601f168201915b505050505081526020019060010190620026d1565b50505050905090565b60006200279f3384846200347d565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002787576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620028629062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620028909062005e38565b8015620028e15780601f10620028b557610100808354040283529160200191620028e1565b820191906000526020600020905b815481529060010190602001808311620028c357829003601f168201915b505050505081525050815260200190600101906200280c565b602e546060906001600160a01b031633146200292a5760405162461bcd60e51b815260040162000f019062006200565b601f546200297b5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000f01565b6200298562005563565b601d546080820152601f8152602b60208201526025604082015260246060820152620029b1816200463a565b620029bf6028600062005581565b6025548062002a065760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000f01565b60008167ffffffffffffffff81111562002a245762002a2462005a4e565b60405190808252806020026020018201604052801562002a4e578160200160208202803683370190505b50905060005b8281101562002b38576000602b60006025848154811062002a795762002a7962006281565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5019062002ae19083018262006343565b50600281015483516001600160a01b039091169084908490811062002b0a5762002b0a62006281565b6001600160a01b0390921660209283029190910190910152508062002b2f8162006297565b91505062002a54565b509250505090565b601a546001600160a01b0316331462002b6d5760405162461bcd60e51b815260040162000f019062005dca565b62002b7a6000836200465a565b620015406001826200465a565b601a546001600160a01b0316331462002bb45760405162461bcd60e51b815260040162000f019062005dca565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b60205260409020600101549091161462002c165760405162461bcd60e51b815260040162000f019062005d47565b6001600160a01b038082166000908152602b602052604090208054909116331462002c9c5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606482015260840162000f01565b6000601382015460ff16600381111562002cba5762002cba62005755565b0362002d095760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000f01565b6002601382015460ff16600381111562002d275762002d2762005755565b14801562002d385750438160100154115b1562002d875760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000f01565b6003601382015460ff16600381111562002da55762002da562005755565b0362002df45760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000f01565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002e44919062005ea0565b60405190815260200160405180910390a35050565b6060806000600181805462002e6e9062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462002e9c9062005e38565b801562002eed5780601f1062002ec15761010080835404028352916020019162002eed565b820191906000526020600020905b81548152906001019060200180831162002ecf57829003601f168201915b5050505050915080805462002f029062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462002f309062005e38565b801562002f815780601f1062002f555761010080835404028352916020019162002f81565b820191906000526020600020905b81548152906001019060200180831162002f6357829003601f168201915b50505050509050915091509091565b6060601f80548060200260200160405190810160405280929190818152602001828054801562002fea57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002fcb575b5050505050905090565b601a546001600160a01b03163314620030215760405162461bcd60e51b815260040162000f019062005dca565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd389128906020016200206d565b601a546001600160a01b03163314620030845760405162461bcd60e51b815260040162000f019062005dca565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620030d35760405162461bcd60e51b815260040162000f019062005dca565b620030e0600080620055a1565b620030ee60016000620055a1565b6002805460ff19169055565b601a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000f019062005dca565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620031765760405162461bcd60e51b815260040162000f019062005dca565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620031c55760405162461bcd60e51b815260040162000f019062006200565b620031cf62003ab3565b620031d9620028fa565b5042602355565b601a546001600160a01b031633146200320d5760405162461bcd60e51b815260040162000f019062005dca565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200325c5760405162461bcd60e51b815260040162000f019062005dca565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620032e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000f01565b6001600160a01b038216620033455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000f01565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff166003811115620033db57620033db62005755565b146200342a5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000f01565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002e44919062005ea0565b6001600160a01b0383166000908152602a6020526040902054811115620034e05760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0383166000908152602a6020526040812080548392906200350a90849062005e8a565b90915550506001600160a01b0382166000908152602a6020526040812080548392906200353990849062005ea0565b9091555050505050565b6001600160a01b0382166000908152602a6020526040812080548392906200356d90849062005ea0565b9250508190555080602c600082825462003588919062005ea0565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016200253b565b81158015620035d6575080155b15620035e0575050565b600d54600090670de0b6b3a764000090620035fd908590620062b3565b6200360991906200642c565b9050801562003687576012546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003661576040519150601f19603f3d011682016040523d82523d6000602084013e62003666565b606091505b5090915050801515600103620036855762003682828562005e8a565b93505b505b82602660008282546200369b919062005ea0565b90915550600090505b60255481101562001501576000602b600060258481548110620036cb57620036cb62006281565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206024546025805492945090918891908690811062003716576200371662006281565b906000526020600020906003020160010154620037349190620062b3565b6200374091906200642c565b9050600060245486602586815481106200375e576200375e62006281565b9060005260206000209060030201600101546200377c9190620062b3565b6200378891906200642c565b905060008211806200379a5750600081115b1562003a9a576002601384015460ff166003811115620037be57620037be62005755565b1480620037e657506003601384015460ff166003811115620037e457620037e462005755565b145b15620038b057601354620038069030906001600160a01b0316836200347d565b601354602580546001600160a01b039092169163a8031a1d9185918890811062003834576200383462006281565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b1580156200388d57600080fd5b505af1158015620038a2573d6000803e3d6000fd5b505050505050505062003a9e565b60008360050154838560080154620038c99190620062b3565b620038d591906200642c565b905080156200393a5783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d806000811462003931576040519150601f19603f3d011682016040523d82523d6000602084013e62003936565b606091505b5050505b60008460050154838660080154620039539190620062b3565b6200395f91906200642c565b9050801562003981578454620039819030906001600160a01b0316836200347d565b60006200398f828562005e8a565b905060006200399f848762005e8a565b90506000811180620039b15750600082115b1562003a4b57600c870154620039d39030906001600160a01b0316846200347d565b600c87015460405163a0ce552d60e01b8152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562003a21573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003a48919062006443565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b8062003aaa8162006297565b915050620036a4565b6004545b60055481101562003ae05762003ada8162003ad28162006297565b9250620047ad565b62003ab7565b506005546004556008546007540362003af557565b6009545b60085481101562003b225762003b1c8162003b148162006297565b9250620049ca565b62003af9565b50600854600955600754805b60085481101562003b9c57601054600082815260066020526040902060040154439162003b5b9162005ea0565b1162003b815762003b6c8162004cc5565b62003b7960018362005ea0565b915062003b87565b62003b9c565b8062003b938162006297565b91505062003b2e565b50600755565b600c54600b54101562003cbf57600b546000908152600a602052604090206010546001820154439162003bd59162005ea0565b111562003bdf5750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003c3a920190815260200190565b600060405180830381600087803b15801562003c5557600080fd5b505af115801562003c6a573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003cb290849062005ea0565b9091555062003ba2915050565b565b60e281511462003d0b5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000f01565b6030826102400151511462003d635760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000f01565b62003d6e8262004e10565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003dd1920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003df1835162004f3d565b8360405160200162003e069392919062006468565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003e5e898262003e5860416002620062b3565b6200505e565b9050600062003e7d8a62003e7560416002620062b3565b60606200505e565b905060205b825181101562003f4e5762003e98838262005177565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003ef4573d6000803e3d6000fd5b5050604051601f19015190508762003f0e6041846200642c565b8151811062003f215762003f2162006281565b6001600160a01b039092166020928302919091019091015262003f4660418262005ea0565b905062003e82565b508a602001516001600160a01b03168660008151811062003f735762003f7362006281565b60200260200101516001600160a01b03161462003fe55760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000f01565b8a604001516001600160a01b03168660018151811062004009576200400962006281565b60200260200101516001600160a01b0316146200407d5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000f01565b6001620040958c6102400151838e60000151620051ae565b14620041035760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000f01565b6200410e8b6200521d565b5050505050505050505050565b60008211620041795760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000f01565b6001600160a01b0381166000908152602a6020526040902054821115620041e35760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000f01565b6001600160a01b0381166000908152602a6020526040812080548492906200420d90849062005e8a565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620042998362006297565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b6020526040902080549091838116911614806200447d57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa1580156200437e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620043a4919062006243565b9050848110156200440c5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000f01565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b1580156200445d57600080fd5b505af115801562004472573d6000803e3d6000fd5b505050505062004510565b8382600b0154836008015462004494919062005e8a565b1015620044f45760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000f01565b8382600b0160008282546200450a919062005ea0565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff199095169490941792909217909255805491620045e48362006297565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620042f89291909115158252602082015260400190565b60fa60a06000808285855af462004655573d6000803e3d6000fd5b505050565b8154600260018083161561010002038216048251808201602081106020841001600281146200470957600181146200472f578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015620046f25781518455600184019350602082019150620046d3565b815191036101000a908190040290915550620047a4565b60028302826020036101000a846020036101000a602089015104020185018755620047a4565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562004792578151845560018401935060208201915062004773565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff166003811115620047f357620047f362005755565b146200489357600282015482546001600160a01b03166000908152602a6020526040812080549091906200482990849062005ea0565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462004886946001600160a01b0391821694911692909160ff90911690620064b1565b60405180910390a1505050565b805482546001600160a01b03908116911614620049905760008082600801548360050154620048c3919062005e8a565b905080600003620048db578360020154915062004901565b80846002015484600d0154620048f29190620062b3565b620048fe91906200642c565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b1580156200495357600080fd5b505af115801562004968573d6000803e3d6000fd5b505050508183600d01600082825462004982919062005ea0565b90915550620049b092505050565b8160020154816008016000828254620049aa919062005ea0565b90915550505b816002015481600501600082825462003539919062005ea0565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff1662004bbe576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801562004a5f57600080fd5b505af115801562004a74573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801562004aca57600080fd5b505af115801562004adf573d6000803e3d6000fd5b5050505060008360080154846005015462004afb919062005e8a565b600d85015490915062004b0f8284620062b3565b62004b1b91906200642c565b92508184600d01600082825462004b33919062005e8a565b9091555050600684015460000362004b52576003850183905562004b7a565b6006840154600785015462004b689085620062b3565b62004b7491906200642c565b60038601555b8284600601600082825462004b90919062005ea0565b9091555050600385015460078501805460009062004bb090849062005ea0565b9091555062004c9392505050565b506002820154600882015481111562004bd8575060088101545b816009015460000362004bf2576003830181905562004c1a565b6009820154600a83015462004c089083620062b3565b62004c1491906200642c565b60038401555b8082600901600082825462004c30919062005ea0565b90915550506003830154600a8301805460009062004c5090849062005ea0565b925050819055508082600801600082825462004c6d919062005e8a565b90915550506002830154600b8301805460009062004c8d90849062005e8a565b90915550505b6005808401805460ff191660011790558201805482919060009062004cba90849062005e8a565b909155505050505050565b6000818152600660205260408120600381015490910362004ce4575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff1662004d805781600701548260060154846003015462004d309190620062b3565b62004d3c91906200642c565b90508082600601600082825462004d54919062005e8a565b9091555050600383015460078301805460009062004d7490849062005e8a565b9091555062004de59050565b81600a01548260090154846003015462004d9b9190620062b3565b62004da791906200642c565b90508082600901600082825462004dbf919062005e8a565b90915550506003830154600a8301805460009062004ddf90849062005e8a565b90915550505b82546001600160a01b03166000908152602a60205260408120805483929062004cba90849062005ea0565b600062004e2182606001516200544e565b6001600160a01b0390911660208401529050801562004e715760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000f01565b6020808301516001600160a01b039081166000908152602b909252604090912060010154161562004ee55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000f01565b61271082608001511115620015405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000f01565b60608160000362004f655750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004f95578062004f7c8162006297565b915062004f8d9050600a836200642c565b915062004f69565b60008167ffffffffffffffff81111562004fb35762004fb362005a4e565b6040519080825280601f01601f19166020018201604052801562004fde576020820181803683370190505b5090505b8415620050565762004ff660018362005e8a565b915062005005600a86620062e3565b6200501290603062005ea0565b60f81b8183815181106200502a576200502a62006281565b60200101906001600160f81b031916908160001a9053506200504e600a866200642c565b945062004fe2565b949350505050565b6060816200506e81601f62005ea0565b1015620050af5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000f01565b620050bb828462005ea0565b84511015620051015760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000f01565b6060821580156200512257604051915060008252602082016040526200516e565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156200515d57805183526020928301920162005143565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620051a757620051a4601b82620064df565b90505b9250925092565b6000620051ba620055e0565b6000858585604051602001620051d393929190620064fb565b6040516020818303038152906040529050600060fb9050600082516020620051fc919062005ea0565b90506020848285855afa6200521057600080fd5b5050905195945050505050565b6101808101516001600160a01b0316620052a057601f54600090620052429062004f3d565b9050816020015182600001518360800151836040516200526290620055fe565b6200527194939291906200654a565b604051809103906000f0801580156200528e573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b9095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005352908262006589565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182015561024082015160128201906200541c908262006589565b5061026082015160138201805460ff1916600183600381111562005444576200544462005755565b0217905550505050565b6000806200545b6200560c565b60008060ff9050604083875160208901845afa6200547857600080fd5b50508051602090910151600160601b90910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600060038111156200555e576200555e62005755565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f5191906200562a565b508054620055af9062005e38565b6000825580601f10620055c0575050565b601f01602090049060005260206000209081019062000f5191906200564f565b60405180602001604052806001906020820280368337509192915050565b61186f806200664a83390190565b60405180604001604052806002906020820280368337509192915050565b808211156200564b576000620056418282620055a1565b506001016200562a565b5090565b5b808211156200564b576000815560010162005650565b60005b838110156200568357818101518382015260200162005669565b50506000910152565b60008151808452620056a681602086016020860162005666565b601f01601f19169290920160200192915050565b602081526000620056cf60208301846200568c565b9392505050565b6001600160a01b038116811462000f5157600080fd5b600080604083850312156200570057600080fd5b82356200570d81620056d6565b946020939093013593505050565b6000602082840312156200572e57600080fd5b8135620056cf81620056d6565b6000602082840312156200574e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600481106200578a57634e487b7160e01b600052602160045260246000fd5b9052565b60208152620057a96020820183516001600160a01b03169052565b60006020830151620057c660408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620057fa6102a08501836200568c565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a062005882818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620058e684836200568c565b935080870151915050620058fd828601826200576b565b5090949350505050565b6000806000606084860312156200591d57600080fd5b83356200592a81620056d6565b925060208401356200593c81620056d6565b929592945050506040919091013590565b6000602082840312156200596057600080fd5b813567ffffffffffffffff8111156200597857600080fd5b82016102808185031215620056cf57600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005a01578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620059ec818701836200568c565b9a87019a9550505090840190600101620059aa565b5091979650505050505050565b82151581526040602082015260006200505660408301846200598c565b6000806040838503121562005a3f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262005a7657600080fd5b813567ffffffffffffffff8082111562005a945762005a9462005a4e565b604051601f8301601f19908116603f0116810190828211818310171562005abf5762005abf62005a4e565b8160405283815286602085880101111562005ad957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121562005b1057600080fd5b843567ffffffffffffffff8082111562005b2957600080fd5b62005b378883890162005a64565b95506020870135915062005b4b82620056d6565b9093506040860135908082111562005b6257600080fd5b62005b708883890162005a64565b9350606087013591508082111562005b8757600080fd5b5062005b968782880162005a64565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005bfb57603f1988860301845262005be88583516200568c565b9450928501929085019060010162005bc9565b5092979650505050505050565b602081526000620056cf60208301846200598c565b6020808252825182820181905260009190848201906040850190845b8181101562005c605783516001600160a01b03168352928401929184019160010162005c39565b50909695505050505050565b6000806040838503121562005c8057600080fd5b823567ffffffffffffffff8082111562005c9957600080fd5b62005ca78683870162005a64565b9350602085013591508082111562005cbe57600080fd5b5062005ccd8582860162005a64565b9150509250929050565b60408152600062005cec60408301856200568c565b828103602084015262005d0081856200568c565b95945050505050565b6000806040838503121562005d1d57600080fd5b823562005d2a81620056d6565b9150602083013562005d3c81620056d6565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005e4d57607f821691505b60208210810362005e6e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000ebb5762000ebb62005e74565b8082018082111562000ebb5762000ebb62005e74565b6000813562000ebb81620056d6565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005efd57600080fd5b83018035915067ffffffffffffffff82111562005f1957600080fd5b60200191503681900382131562005f2f57600080fd5b9250929050565b601f8211156200465557600081815260208120601f850160051c8101602086101562005f5f5750805b601f850160051c820191505b8181101562005f805782815560010162005f6b565b505050505050565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005fb85762005fb862005a4e565b62005fd08362005fc9835462005e38565b8362005f36565b6000601f84116001811462006003576000851562005fee5750838201355b62005ffa868262005f88565b84555062001647565b600083815260209020601f19861690835b8281101562006036578685013582556020948501946001909201910162006014565b5086821015620060545760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000ebb57600080fd5b600482106200609757634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b620060c0620060b98362005eb6565b8262005ec5565b620060dc620060d26020840162005eb6565b6001830162005ec5565b620060f8620060ee6040840162005eb6565b6002830162005ec5565b62006107606083018362005ee5565b6200611781836003860162005f9d565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b8201556200618a62006180610180840162005eb6565b600c830162005ec5565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f82015561020082013560108201556102208201356011820155620061d161024083018362005ee5565b620061e181836012860162005f9d565b505062001540620061f6610260840162006066565b6013830162006078565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b6000602082840312156200625657600080fd5b5051919050565b6000602082840312156200627057600080fd5b81518015158114620056cf57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201620062ac57620062ac62005e74565b5060010190565b808202811582820484141762000ebb5762000ebb62005e74565b634e487b7160e01b600052601260045260246000fd5b600082620062f557620062f5620062cd565b500690565b600060018060a01b0380881683528087166020840152808616604084015260a060608401526200632e60a08401866200568c565b91508084166080840152509695505050505050565b8181036200634f575050565b6200635b825462005e38565b67ffffffffffffffff81111562006376576200637662005a4e565b6200638e8162006387845462005e38565b8462005f36565b6000601f821160018114620063c15760008315620063ac5750848201545b620063b8848262005f88565b85555062001647565b600085815260209020601f19841690600086815260209020845b83811015620063fd5782860154825560019586019590910190602001620063db565b50858310156200641c5781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200643e576200643e620062cd565b500490565b600080604083850312156200645757600080fd5b505080516020909101519092909150565b600084516200647c81846020890162005666565b8451908301906200649281836020890162005666565b8451910190620064a781836020880162005666565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005d0060608301846200576b565b60ff818116838216019081111562000ebb5762000ebb62005e74565b600084516200650f81846020890162005666565b8451908301906200652581836020890162005666565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906200657f908301846200568c565b9695505050505050565b815167ffffffffffffffff811115620065a657620065a662005a4e565b620065b78162006387845462005e38565b602080601f831160018114620065eb5760008415620065d65750858301515b620065e2858262005f88565b86555062005f80565b600085815260208120601f198616915b828110156200661c57888601518255948401946001909101908401620065fb565b50858210156200641c57939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033a2646970667358221220e1fff5a9ee04a351306563fb0b0cd6c390ad299e1e5ee87e83e4ed842e1a53a564736f6c6343000815003360806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // AutonityABI is the input ABI used to generate the binding from. @@ -2422,6 +2436,37 @@ func (_Autonity *AutonityCallerSession) Allowance(owner common.Address, spender return _Autonity.Contract.Allowance(&_Autonity.CallOpts, owner, spender) } +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_Autonity *AutonityCaller) AtnTotalRedistributed(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Autonity.contract.Call(opts, &out, "atnTotalRedistributed") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_Autonity *AutonitySession) AtnTotalRedistributed() (*big.Int, error) { + return _Autonity.Contract.AtnTotalRedistributed(&_Autonity.CallOpts) +} + +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_Autonity *AutonityCallerSession) AtnTotalRedistributed() (*big.Int, error) { + return _Autonity.Contract.AtnTotalRedistributed(&_Autonity.CallOpts) +} + // BalanceOf is a free data retrieval call binding the contract method 0x70a08231. // // Solidity: function balanceOf(address _addr) view returns(uint256) @@ -2455,7 +2500,7 @@ func (_Autonity *AutonityCallerSession) BalanceOf(_addr common.Address) (*big.In // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_Autonity *AutonityCaller) Config(opts *bind.CallOpts) (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -2486,7 +2531,7 @@ func (_Autonity *AutonityCaller) Config(opts *bind.CallOpts) (struct { // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_Autonity *AutonitySession) Config() (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -2498,7 +2543,7 @@ func (_Autonity *AutonitySession) Config() (struct { // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_Autonity *AutonityCallerSession) Config() (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -3222,6 +3267,37 @@ func (_Autonity *AutonityCallerSession) GetVersion() (*big.Int, error) { return _Autonity.Contract.GetVersion(&_Autonity.CallOpts) } +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_Autonity *AutonityCaller) InflationReserve(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Autonity.contract.Call(opts, &out, "inflationReserve") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_Autonity *AutonitySession) InflationReserve() (*big.Int, error) { + return _Autonity.Contract.InflationReserve(&_Autonity.CallOpts) +} + +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_Autonity *AutonityCallerSession) InflationReserve() (*big.Int, error) { + return _Autonity.Contract.InflationReserve(&_Autonity.CallOpts) +} + // LastEpochBlock is a free data retrieval call binding the contract method 0xc2362dd5. // // Solidity: function lastEpochBlock() view returns(uint256) @@ -3253,6 +3329,37 @@ func (_Autonity *AutonityCallerSession) LastEpochBlock() (*big.Int, error) { return _Autonity.Contract.LastEpochBlock(&_Autonity.CallOpts) } +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_Autonity *AutonityCaller) LastEpochTime(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Autonity.contract.Call(opts, &out, "lastEpochTime") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_Autonity *AutonitySession) LastEpochTime() (*big.Int, error) { + return _Autonity.Contract.LastEpochTime(&_Autonity.CallOpts) +} + +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_Autonity *AutonityCallerSession) LastEpochTime() (*big.Int, error) { + return _Autonity.Contract.LastEpochTime(&_Autonity.CallOpts) +} + // Name is a free data retrieval call binding the contract method 0x06fdde03. // // Solidity: function name() pure returns(string) @@ -3315,37 +3422,6 @@ func (_Autonity *AutonityCallerSession) Symbol() (string, error) { return _Autonity.Contract.Symbol(&_Autonity.CallOpts) } -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_Autonity *AutonityCaller) TotalRedistributed(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _Autonity.contract.Call(opts, &out, "totalRedistributed") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_Autonity *AutonitySession) TotalRedistributed() (*big.Int, error) { - return _Autonity.Contract.TotalRedistributed(&_Autonity.CallOpts) -} - -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_Autonity *AutonityCallerSession) TotalRedistributed() (*big.Int, error) { - return _Autonity.Contract.TotalRedistributed(&_Autonity.CallOpts) -} - // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. // // Solidity: function totalSupply() view returns(uint256) @@ -3734,6 +3810,27 @@ func (_Autonity *AutonityTransactorSession) SetEpochPeriod(_period *big.Int) (*t return _Autonity.Contract.SetEpochPeriod(&_Autonity.TransactOpts, _period) } +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_Autonity *AutonityTransactor) SetInflationControllerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _Autonity.contract.Transact(opts, "setInflationControllerContract", _address) +} + +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_Autonity *AutonitySession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) { + return _Autonity.Contract.SetInflationControllerContract(&_Autonity.TransactOpts, _address) +} + +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_Autonity *AutonityTransactorSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) { + return _Autonity.Contract.SetInflationControllerContract(&_Autonity.TransactOpts, _address) +} + // SetMinimumBaseFee is a paid mutator transaction binding the contract method 0xcb696f54. // // Solidity: function setMinimumBaseFee(uint256 _price) returns() @@ -3946,23 +4043,23 @@ func (_Autonity *AutonityTransactorSession) Transfer(_recipient common.Address, // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_Autonity *AutonityTransactor) TransferFrom(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _Autonity.contract.Transact(opts, "transferFrom", sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_Autonity *AutonityTransactor) TransferFrom(opts *bind.TransactOpts, _sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _Autonity.contract.Transact(opts, "transferFrom", _sender, _recipient, _amount) } // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_Autonity *AutonitySession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_Autonity *AutonitySession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, _sender, _recipient, _amount) } // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_Autonity *AutonityTransactorSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_Autonity *AutonityTransactorSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, _sender, _recipient, _amount) } // Unbond is a paid mutator transaction binding the contract method 0xa5d059ca. @@ -6044,14 +6141,15 @@ func (it *AutonityRewardedIterator) Close() error { // AutonityRewarded represents a Rewarded event raised by the Autonity contract. type AutonityRewarded struct { - Addr common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos + Addr common.Address + AtnAmount *big.Int + NtnAmount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterRewarded is a free log retrieval operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// FilterRewarded is a free log retrieval operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *AutonityFilterer) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityRewardedIterator, error) { var addrRule []interface{} @@ -6066,9 +6164,9 @@ func (_Autonity *AutonityFilterer) FilterRewarded(opts *bind.FilterOpts, addr [] return &AutonityRewardedIterator{contract: _Autonity.contract, event: "Rewarded", logs: logs, sub: sub}, nil } -// WatchRewarded is a free log subscription operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// WatchRewarded is a free log subscription operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *AutonityFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityRewarded, addr []common.Address) (event.Subscription, error) { var addrRule []interface{} @@ -6108,9 +6206,9 @@ func (_Autonity *AutonityFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan }), nil } -// ParseRewarded is a log parse operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// ParseRewarded is a log parse operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *AutonityFilterer) ParseRewarded(log types.Log) (*AutonityRewarded, error) { event := new(AutonityRewarded) if err := _Autonity.contract.UnpackLog(event, "Rewarded", log); err != nil { @@ -6276,12 +6374,13 @@ func (_Autonity *AutonityFilterer) ParseTransfer(log types.Log) (*AutonityTransf // AutonityUpgradeTestMetaData contains all meta data concerning the AutonityUpgradeTest contract. var AutonityUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atnTotalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "b46e5520": "activateValidator(address)", "dd62ed3e": "allowance(address,address)", "095ea7b3": "approve(address,uint256)", + "e98712b2": "atnTotalRedistributed()", "70a08231": "balanceOf(address)", "a515366a": "bond(address,uint256)", "9dc29fac": "burn(address,uint256)", @@ -6314,7 +6413,9 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "9ac31074": "inflationReserve()", "c2362dd5": "lastEpochBlock()", + "89c614b8": "lastEpochTime()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", @@ -6324,6 +6425,7 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", + "f03b959d": "setInflationControllerContract(address)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", @@ -6334,7 +6436,6 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "114eaf55": "setUnbondingPeriod(uint256)", "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", - "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", @@ -6343,7 +6444,7 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", }, - Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d4e565b815260200190600190039081620000335790505b506040805161012081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e08601526011546001600160a01b039081166101008701529385528551908101865260125484168152601354841660208281019190915260145485168288015260155485166060808401919091526016548616838601526017548616938301939093528086019190915285519283018652601854909316825260195492820192909252601a5481850152601b548183015292820192909252601c54918101829052906000036200014c57602a80546001600160a01b031916331790556200014c828262000169565b5050601c546001036200016357620001636200051f565b6200115e565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b82518110156200051a5760008382815181106200027a576200027a62000ebd565b602002602001015160a00151905060008483815181106200029f576200029f62000ebd565b60200260200101516101a00181815250506000848381518110620002c757620002c762000ebd565b602002602001015161018001906001600160a01b031690816001600160a01b031681525050600084838151811062000303576200030362000ebd565b602002602001015160a001818152505060008483815181106200032a576200032a62000ebd565b60209081029190910101516101c00152600f54845185908490811062000354576200035462000ebd565b6020026020010151608001818152505060008483815181106200037b576200037b62000ebd565b6020026020010151610260019060038111156200039c576200039c62000ed3565b90816003811115620003b257620003b262000ed3565b815250506000848381518110620003cd57620003cd62000ebd565b60200260200101516101600181815250506200040b848381518110620003f757620003f762000ebd565b60200260200101516200068d60201b60201c565b6200043884838151811062000424576200042462000ebd565b6020026020010151620007c460201b60201c565b806027600086858151811062000452576200045262000ebd565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200048f919062000eff565b925050819055508060296000828254620004aa919062000eff565b9250508190555062000504848381518110620004ca57620004ca62000ebd565b60200260200101516020015182868581518110620004ec57620004ec62000ebd565b602002602001015160000151620009f560201b60201c565b5080620005118162000f1b565b91505062000259565b505050565b602a546001600160a01b031633146200058b5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b600260286000601d600181548110620005a857620005a862000ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400181206005018054909190620005e190849062000f4d565b92505081905550600260286000601d60018154811062000605576200060562000ebd565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200063e90849062000f4d565b90915550506002601c556018546001600160a01b031660009081526027602052604081206103e8905562000673908062000e1e565b620006816001600062000e1e565b6002805460ff19169055565b6000620006a4826060015162000be060201b60201c565b6001600160a01b03909116602084015290508015620006f45760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000582565b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620007685760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000582565b61271082608001511115620007c05760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000582565b5050565b6101808101516001600160a01b03166200084757601d54600090620007e99062000c2e565b905081602001518260000151836080015183604051620008099062000e60565b62000818949392919062000f64565b604051809103906000f08015801562000835573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620008f9908262001065565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009c3908262001065565b5061026082015160138201805460ff19166001836003811115620009eb57620009eb62000ed3565b0217905550505050565b6000821162000a535760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000582565b6001600160a01b03811660009081526027602052604090205482111562000abd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000582565b6001600160a01b0381166000908152602760205260408120805484929062000ae790849062001131565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000b738362000f1b565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000bed62000e6e565b60008060ff9050604083875160208901845afa62000c0a57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c565750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000c86578062000c6d8162000f1b565b915062000c7e9050600a8362000f4d565b915062000c5a565b6000816001600160401b0381111562000ca35762000ca362000ea7565b6040519080825280601f01601f19166020018201604052801562000cce576020820181803683370190505b5090505b841562000d465762000ce660018362001131565b915062000cf5600a8662001147565b62000d0290603062000eff565b60f81b81838151811062000d1a5762000d1a62000ebd565b60200101906001600160f81b031916908160001a90535062000d3e600a8662000f4d565b945062000cd2565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e195762000e1962000ed3565b905290565b50805462000e2c9062000fd7565b6000825580601f1062000e3d575050565b601f01602090049060005260206000209081019062000e5d919062000e8c565b50565b6115318062008cc283390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000ea3576000815560010162000e8d565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f155762000f1562000ee9565b92915050565b60006001820162000f305762000f3062000ee9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f5f5762000f5f62000f37565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000fb35785810182015185820160a00152810162000f95565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c9082168062000fec57607f821691505b6020821081036200100d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200051a57600081815260208120601f850160051c810160208610156200103c5750805b601f850160051c820191505b818110156200105d5782815560010162001048565b505050505050565b81516001600160401b0381111562001081576200108162000ea7565b620010998162001092845462000fd7565b8462001013565b602080601f831160018114620010d15760008415620010b85750858301515b600019600386901b1c1916600185901b1785556200105d565b600085815260208120601f198616915b828110156200110257888601518255948401946001909101908401620010e1565b5085821015620011215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f155762000f1562000ee9565b60008262001159576200115962000f37565b500690565b617b54806200116e6000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000ced578063dfb1a4d21462000d37578063e7f43c681462000d4e578063f7866ee31462000d6e57005b8063d372c07e1462000c69578063d5f394881462000c8e578063d861b0e81462000cb0578063d886f8a21462000cc857005b8063cb696f5411620000e5578063cb696f541462000be2578063ceaad4551462000c07578063cf9c57191462000c2c578063cfd19fb91462000c4457005b8063b66b3e791462000b72578063b7ab4db51462000b9a578063c2362dd51462000bb2578063c9d97af41462000bca57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000adc578063b2ea9adb1462000b03578063b3ecbadd1462000b28578063b46e55201462000b4d57005b8063a5d059ca1462000a44578063a8b2216e1462000a69578063a9059cbb1462000a90578063ab8f6ffe1462000ab557005b80639bb851c011620001d15780639bb851c014620009ca5780639c98e47114620009e25780639dc29fac14620009fa578063a515366a1462000a1f57005b8063872cf059146200092e5780638bac7dad146200094657806395d89b41146200096b57806396b477cb146200099957005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008ad578063833b1fce14620008c457806384467fdb14620008e4578063852c4849146200090957005b8063731b3a03146200076e57806377e741c71462000785578063784304b514620007aa57806379502c5514620007cf57005b80635f7d394911620002c95780635f7d394914620006ba5780636b5f444c14620006f85780636fd2c80b146200071d57806370a08231146200073457005b8063436459691462000631578063496ccd9b14620006485780634bb278f3146200066d578063520fdbbc146200069557005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005b1578063313ce56714620005c957806335be16e014620005e757806340c10f19146200060c57005b806318160ddd146200052a5780631904bb2e146200054157806323b872dd146200057557806329070c6d146200059a57005b80631122063311620003b55780631122063314620004b1578063114eaf5514620004c85780631250a28d14620004ed5780631604e416146200051257005b806306fdde0314620003f1578063095ea7b314620004355780630ae65e7a146200046b5780630d8e6e2c146200049057005b36620003ef57005b005b348015620003fe57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b6040516200042c919062005523565b60405180910390f35b3480156200044257600080fd5b506200045a6200045436600462005555565b62000d8e565b60405190151581526020016200042c565b3480156200047857600080fd5b50620003ef6200048a36600462005584565b62000da7565b3480156200049d57600080fd5b50601c545b6040519081526020016200042c565b348015620004be57600080fd5b50600e54620004a2565b348015620004d557600080fd5b50620003ef620004e7366004620055a4565b62000e3a565b348015620004fa57600080fd5b50620003ef6200050c36600462005584565b62000e6c565b3480156200051f57600080fd5b50620004a260245481565b3480156200053757600080fd5b50602954620004a2565b3480156200054e57600080fd5b50620005666200056036600462005584565b62000ebb565b6040516200042c9190620055f7565b3480156200058257600080fd5b506200045a6200059436600462005770565b62001169565b348015620005a757600080fd5b50600d54620004a2565b348015620005be57600080fd5b50620004a261271081565b348015620005d657600080fd5b50604051601281526020016200042c565b348015620005f457600080fd5b50620003ef62000606366004620057b6565b620011c3565b3480156200061957600080fd5b50620003ef6200062b36600462005555565b6200139f565b3480156200063e57600080fd5b50601a54620004a2565b3480156200065557600080fd5b50620003ef6200066736600462005584565b62001459565b3480156200067a57600080fd5b506200068562001563565b6040516200042c92919062005877565b348015620006a257600080fd5b50620003ef620006b436600462005584565b6200192a565b348015620006c757600080fd5b50620006df620006d936600462005894565b62001b25565b6040516001600160a01b0390911681526020016200042c565b3480156200070557600080fd5b50620003ef62000717366004620055a4565b62001d3c565b3480156200072a57600080fd5b50601054620004a2565b3480156200074157600080fd5b50620004a26200075336600462005584565b6001600160a01b031660009081526027602052604090205490565b3480156200077b57600080fd5b50602054620004a2565b3480156200079257600080fd5b50620003ef620007a4366004620055a4565b62001ec2565b348015620007b757600080fd5b50620003ef620007c936600462005962565b62001ef4565b348015620007dc57600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c546200089b939084565b6040516200042c9493929190620059b8565b348015620008ba57600080fd5b50601b54620004a2565b348015620008d157600080fd5b506013546001600160a01b0316620006df565b348015620008f157600080fd5b50620003ef6200090336600462005a87565b6200209f565b3480156200091657600080fd5b50620003ef6200092836600462005555565b620021ce565b3480156200093b57600080fd5b50620003ef6200235f565b3480156200095357600080fd5b50620003ef62000965366004620055a4565b6200239b565b3480156200097857600080fd5b50604080518082019091526003815262272a2760e91b60208201526200041d565b348015620009a657600080fd5b50620004a2620009b8366004620055a4565b6000908152601f602052604090205490565b348015620009d757600080fd5b50620004a260235481565b348015620009ef57600080fd5b50620004a260215481565b34801562000a0757600080fd5b50620003ef62000a1936600462005555565b6200241f565b34801562000a2c57600080fd5b50620003ef62000a3e36600462005555565b62002535565b34801562000a5157600080fd5b50620003ef62000a6336600462005555565b62002608565b34801562000a7657600080fd5b5062000a816200269f565b6040516200042c919062005b30565b34801562000a9d57600080fd5b506200045a62000aaf36600462005555565b62002782565b34801562000ac257600080fd5b5062000acd62002791565b6040516200042c919062005b96565b34801562000ae957600080fd5b5062000af4620028a3565b6040516200042c919062005bab565b34801562000b1057600080fd5b50620003ef62000b2236600462005bfa565b62002ae9565b34801562000b3557600080fd5b50620003ef62000b4736600462005584565b62002b30565b34801562000b5a57600080fd5b50620003ef62000b6c36600462005584565b62002b7f565b34801562000b7f57600080fd5b5062000b8a62002dbb565b6040516200042c92919062005c5b565b34801562000ba757600080fd5b5062000af462002ef2565b34801562000bbf57600080fd5b50620004a260205481565b34801562000bd757600080fd5b50620004a2601e5481565b34801562000bef57600080fd5b50620003ef62000c01366004620055a4565b62002f56565b34801562000c1457600080fd5b50620003ef62000c2636600462005584565b62002fb9565b34801562000c3957600080fd5b50620003ef62003008565b34801562000c5157600080fd5b50620003ef62000c6336600462005584565b6200305c565b34801562000c7657600080fd5b50620003ef62000c8836600462005584565b620030ab565b34801562000c9b57600080fd5b50602a54620006df906001600160a01b031681565b34801562000cbd57600080fd5b50620003ef620030fa565b34801562000cd557600080fd5b50620003ef62000ce736600462005584565b6200313b565b34801562000cfa57600080fd5b50620004a262000d0c36600462005c8d565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d4457600080fd5b50601954620004a2565b34801562000d5b57600080fd5b506018546001600160a01b0316620006df565b34801562000d7b57600080fd5b506011546001600160a01b0316620006df565b600062000d9d3384846200318a565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000df05760405162461bcd60e51b815260040162000de79062005ccb565b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000e2c5760405162461bcd60e51b815260040162000de79062005d02565b62000e3781620032b3565b50565b6018546001600160a01b0316331462000e675760405162461bcd60e51b815260040162000de79062005d4e565b601055565b6018546001600160a01b0316331462000e995760405162461bcd60e51b815260040162000de79062005d4e565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62000ec5620052fc565b6001600160a01b038083166000818152602860205260409020600101549091161462000f055760405162461bcd60e51b815260040162000de79062005d85565b6001600160a01b03808316600090815260286020908152604091829020825161028081018452815485168152600182015485169281019290925260028101549093169181019190915260038201805491929160608401919062000f689062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462000f969062005dbc565b801562000fe75780601f1062000fbb5761010080835404028352916020019162000fe7565b820191906000526020600020905b81548152906001019060200180831162000fc957829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620010a39062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620010d19062005dbc565b8015620011225780601f10620010f65761010080835404028352916020019162001122565b820191906000526020600020905b8154815290600101906020018083116200110457829003601f168201915b5050509183525050601382015460209091019060ff1660038111156200114c576200114c620055be565b6003811115620011605762001160620055be565b90525092915050565b6000620011788484846200338a565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620011a990849062005e0e565b9050620011b88533836200318a565b506001949350505050565b6012546001600160a01b031633146200122b5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000de7565b600061012082013560288262001248604086016020870162005584565b6001600160a01b03166001600160a01b031681526020019081526020016000206009015462001278919062005e0e565b60c08301356028600062001293604087016020880162005584565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620012c3919062005e0e565b60a084013560286000620012de604088016020890162005584565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200130e919062005e0e565b6200131a919062005e24565b62001326919062005e24565b6011546001600160a01b03166000908152602760205260408120805492935083929091906200135790849062005e24565b909155508290506028600062001374604084016020850162005584565b6001600160a01b03168152602081019190915260400160002062001399828262006026565b50505050565b6018546001600160a01b03163314620013cc5760405162461bcd60e51b815260040162000de79062005d4e565b6001600160a01b03821660009081526027602052604081208054839290620013f690849062005e24565b92505081905550806029600082825462001411919062005e24565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620014865760405162461bcd60e51b815260040162000de79062005d4e565b601380546001600160a01b0319166001600160a01b03838116918217909255601454604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620014e557600080fd5b505af1158015620014fa573d6000803e3d6000fd5b5050601654604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200154757600080fd5b505af11580156200155c573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620015965760405162461bcd60e51b815260040162000de7906200617c565b601e54436000818152601f6020908152604082209390935560195492549092620015c09162005e24565b6012546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200160b57600080fd5b505af115801562001620573d6000803e3d6000fd5b505050508015620017155762001635620034bc565b6200163f620038a6565b6200164962003995565b600062001655620028a3565b60135460405163422811f960e11b81529192506001600160a01b03169063845023f2906200168890849060040162005bab565b600060405180830381600087803b158015620016a357600080fd5b505af1158015620016b8573d6000803e3d6000fd5b50505050436020819055506001601e6000828254620016d8919062005e24565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b60135460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017879190620061bf565b9050801562001803576014546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620017fb575060408051601f3d908101601f19168201909252620017f891810190620061bf565b60015b156200180357505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b828210156200191a576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620018829062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b09062005dbc565b8015620019015780601f10620018d55761010080835404028352916020019162001901565b820191906000526020600020905b815481529060010190602001808311620018e357829003601f168201915b505050505081525050815260200190600101906200182c565b5050505090509350935050509091565b6018546001600160a01b03163314620019575760405162461bcd60e51b815260040162000de79062005d4e565b601880546001600160a01b0319166001600160a01b0383811691821790925560135460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b158015620019b657600080fd5b505af1158015620019cb573d6000803e3d6000fd5b505060145460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a1757600080fd5b505af115801562001a2c573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a7857600080fd5b505af115801562001a8d573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ad957600080fd5b505af115801562001aee573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb91506024016200152c565b600080805b60225481101562001b81576022818154811062001b4b5762001b4b620061e3565b9060005260206000209060030201600101548262001b6a919062005e24565b91508062001b7881620061f9565b91505062001b2a565b508060000362001bd45760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000de7565b60008362001be460638762006215565b62001bf0919062005e24565b905060008160405160200162001c0891815260200190565b60408051601f1981840301815291905280516020909101209050600062001c30848362006245565b90506000805b60225481101562001ce0576022818154811062001c575762001c57620061e3565b9060005260206000209060030201600101548262001c76919062005e24565b915062001c8560018362005e0e565b831162001ccb576022818154811062001ca25762001ca2620061e3565b60009182526020909120600390910201546001600160a01b0316965062000da195505050505050565b8062001cd781620061f9565b91505062001c36565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000de7565b6018546001600160a01b0316331462001d695760405162461bcd60e51b815260040162000de79062005d4e565b60195481101562001e20578060205462001d84919062005e24565b431062001e205760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000de7565b6019819055601254604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562001e6c57600080fd5b505af115801562001e81573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162001eb791815260200190565b60405180910390a150565b6018546001600160a01b0316331462001eef5760405162461bcd60e51b815260040162000de79062005d4e565b600d55565b6001600160a01b03808316600081815260286020526040902060018101549092161462001f355760405162461bcd60e51b815260040162000de79062005d85565b80546001600160a01b0316331462001f615760405162461bcd60e51b815260040162000de7906200625c565b62001f6c8362003ab4565b1562001fc65760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840162000de7565b60008062001fd48462003b25565b925090508115620020165760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b60018301546001600160a01b03828116911614620020875760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840162000de7565b60038301620020978582620062ab565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200160008152602001848152602001600060038111156200216e576200216e620055be565b905290506200217e818362003b6a565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021bf92339289918b9162006374565b60405180910390a15050505050565b6001600160a01b03808316600081815260286020526040902060010154909116146200220e5760405162461bcd60e51b815260040162000de79062005ccb565b6001600160a01b038281166000908152602860205260409020541633146200224a5760405162461bcd60e51b815260040162000de79062005d02565b6127108111156200229e5760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000de7565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200231790849062005e24565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b031633146200238c5760405162461bcd60e51b815260040162000de79062005d4e565b6002805460ff19166001179055565b6018546001600160a01b03163314620023c85760405162461bcd60e51b815260040162000de79062005d4e565b600081116200241a5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000de7565b601b55565b6018546001600160a01b031633146200244c5760405162461bcd60e51b815260040162000de79062005d4e565b6001600160a01b038216600090815260276020526040902054811115620024af5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b03821660009081526027602052604081208054839290620024d990849062005e0e565b925050819055508060296000828254620024f4919062005e0e565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020016200144d565b6001600160a01b0380831660008181526028602052604090206001015490911614620025755760405162461bcd60e51b815260040162000de79062005d85565b6001600160a01b03821660009081526028602052604081206013015460ff166003811115620025a857620025a8620055be565b14620025f75760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000de7565b6200260482823362003fc4565b5050565b6001600160a01b0380831660008181526028602052604090206001015490911614620026485760405162461bcd60e51b815260040162000de79062005d85565b60008111620026925760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000de7565b62002604828233620041b0565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002779578382906000526020600020018054620026e59062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620027139062005dbc565b8015620027645780601f10620027385761010080835404028352916020019162002764565b820191906000526020600020905b8154815290600101906020018083116200274657829003601f168201915b505050505081526020019060010190620026c3565b50505050905090565b600062000d9d3384846200338a565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002779576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916200280b9062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620028399062005dbc565b80156200288a5780601f106200285e576101008083540402835291602001916200288a565b820191906000526020600020905b8154815290600101906020018083116200286c57829003601f168201915b50505050508152505081526020019060010190620027b5565b602a546060906001600160a01b03163314620028d35760405162461bcd60e51b815260040162000de7906200617c565b601d54620029245760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000de7565b6200292e620053cc565b601b546080820152601d81526028602082015260226040820152602160608201526200295a81620044e3565b6200296860256000620053ea565b60225480620029af5760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000de7565b60008167ffffffffffffffff811115620029cd57620029cd620058b7565b604051908082528060200260200182016040528015620029f7578160200160208202803683370190505b50905060005b8281101562002ae1576000602860006022848154811062002a225762002a22620061e3565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c019062002a8a90830182620063bd565b50600281015483516001600160a01b039091169084908490811062002ab35762002ab3620061e3565b6001600160a01b0390921660209283029190910190910152508062002ad881620061f9565b915050620029fd565b509250505090565b6018546001600160a01b0316331462002b165760405162461bcd60e51b815260040162000de79062005d4e565b62002b23600083620044fe565b62002604600182620044fe565b6018546001600160a01b0316331462002b5d5760405162461bcd60e51b815260040162000de79062005d4e565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602860205260409020600101549091161462002bbf5760405162461bcd60e51b815260040162000de79062005ccb565b6001600160a01b0380821660009081526028602052604090208054909116331462002bfe5760405162461bcd60e51b815260040162000de7906200625c565b6000601382015460ff16600381111562002c1c5762002c1c620055be565b0362002c6b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000de7565b6002601382015460ff16600381111562002c895762002c89620055be565b14801562002c9a5750438160100154115b1562002ce95760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000de7565b6003601382015460ff16600381111562002d075762002d07620055be565b0362002d565760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000de7565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002da6919062005e24565b60405190815260200160405180910390a35050565b6060806000600181805462002dd09062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462002dfe9062005dbc565b801562002e4f5780601f1062002e235761010080835404028352916020019162002e4f565b820191906000526020600020905b81548152906001019060200180831162002e3157829003601f168201915b5050505050915080805462002e649062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462002e929062005dbc565b801562002ee35780601f1062002eb75761010080835404028352916020019162002ee3565b820191906000526020600020905b81548152906001019060200180831162002ec557829003601f168201915b50505050509050915091509091565b6060601d80548060200260200160405190810160405280929190818152602001828054801562002f4c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002f2d575b5050505050905090565b6018546001600160a01b0316331462002f835760405162461bcd60e51b815260040162000de79062005d4e565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162001eb7565b6018546001600160a01b0316331462002fe65760405162461bcd60e51b815260040162000de79062005d4e565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030355760405162461bcd60e51b815260040162000de79062005d4e565b620030426000806200540a565b62003050600160006200540a565b6002805460ff19169055565b6018546001600160a01b03163314620030895760405162461bcd60e51b815260040162000de79062005d4e565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030d85760405162461bcd60e51b815260040162000de79062005d4e565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b602a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000de7906200617c565b62003131620038a6565b62000e37620028a3565b6018546001600160a01b03163314620031685760405162461bcd60e51b815260040162000de79062005d4e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620031ee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000de7565b6001600160a01b038216620032515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000de7565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff166003811115620032e857620032e8620055be565b14620033375760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000de7565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002da6919062005e24565b6001600160a01b038316600090815260276020526040902054811115620033ed5760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b038316600090815260276020526040812080548392906200341790849062005e0e565b92505081905550806029600082825462003432919062005e24565b9091555062003445905081600262006215565b6001600160a01b038316600090815260276020526040812080549091906200346f90849062005e24565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620032a691815260200190565b47600003620034c757565b600d544790600090670de0b6b3a764000090620034e690849062006215565b620034f291906200649b565b9050801562003570576011546040516000916001600160a01b03169083908381818185875af1925050503d80600081146200354a576040519150601f19603f3d011682016040523d82523d6000602084013e6200354f565b606091505b50909150508015156001036200356e576200356b828462005e0e565b92505b505b816023600082825462003584919062005e24565b90915550600090505b602254811015620038a15760006028600060228481548110620035b457620035b4620061e3565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060215460228054929450909187919086908110620035ff57620035ff620061e3565b9060005260206000209060030201600101546200361d919062006215565b6200362991906200649b565b9050801562003889576002601383015460ff166003811115620036505762003650620055be565b14806200367857506003601383015460ff166003811115620036765762003676620055be565b145b156200372057601254602280546001600160a01b0390921691631de9d9b691849187908110620036ac57620036ac620061e3565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b0390911660048201526024016000604051808303818588803b158015620036fe57600080fd5b505af115801562003713573d6000803e3d6000fd5b505050505050506200388c565b6000826005015482846008015462003739919062006215565b6200374591906200649b565b9050600062003755828462005e0e565b90508115620037ba5783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d8060008114620037b1576040519150601f19603f3d011682016040523d82523d6000602084013e620037b6565b606091505b5050505b8015620038425783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af115801562003819573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620038409190620064b2565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b806200389881620061f9565b9150506200358d565b505050565b6004545b600554811015620038d357620038cd81620038c581620061f9565b925062004651565b620038aa565b5060055460045560085460075403620038e857565b6009545b60085481101562003915576200390f816200390781620061f9565b925062004878565b620038ec565b50600854600955600754805b6008548110156200398f5760105460008281526006602052604090206004015443916200394e9162005e24565b1162003974576200395f8162004b73565b6200396c60018362005e24565b91506200397a565b6200398f565b806200398681620061f9565b91505062003921565b50600755565b600c54600b54101562003ab257600b546000908152600a6020526040902060105460018201544391620039c89162005e24565b1115620039d25750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003a2d920190815260200190565b600060405180830381600087803b15801562003a4857600080fd5b505af115801562003a5d573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003aa590849062005e24565b9091555062003995915050565b565b6000805b60225481101562003b1c576022818154811062003ad95762003ad9620061e3565b60009182526020909120600390910201546001600160a01b039081169084160362003b075750600192915050565b8062003b1381620061f9565b91505062003ab8565b50600092915050565b60008062003b3262005449565b60008060ff9050604083875160208901845afa62003b4f57600080fd5b50508051602090910151600160601b90910494909350915050565b60e281511462003bb45760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000de7565b6030826102400151511462003c0c5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000de7565b62003c178262004cbe565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003c7a920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003c9a835162004deb565b8360405160200162003caf93929190620064cc565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003d07898262003d016041600262006215565b62004f0c565b9050600062003d268a62003d1e6041600262006215565b606062004f0c565b905060205b825181101562003df75762003d41838262005025565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003d9d573d6000803e3d6000fd5b5050604051601f19015190508762003db76041846200649b565b8151811062003dca5762003dca620061e3565b6001600160a01b039092166020928302919091019091015262003def60418262005e24565b905062003d2b565b508a602001516001600160a01b03168660008151811062003e1c5762003e1c620061e3565b60200260200101516001600160a01b03161462003e8e5760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000de7565b8a604001516001600160a01b03168660018151811062003eb25762003eb2620061e3565b60200260200101516001600160a01b03161462003f265760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000de7565b600162003f3e8c6102400151838e600001516200505c565b1462003fac5760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000de7565b62003fb78b620050cb565b5050505050505050505050565b60008211620040225760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000de7565b6001600160a01b0381166000908152602760205260409020548211156200408c5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000de7565b6001600160a01b03811660009081526027602052604081208054849290620040b690849062005e0e565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200414283620061f9565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b03808416600090815260286020526040902080549091838116911614806200432657600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200424d9190620064b2565b905084811015620042b55760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000de7565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b1580156200430657600080fd5b505af11580156200431b573d6000803e3d6000fd5b5050505050620043b9565b8382600b015483600801546200433d919062005e0e565b10156200439d5760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000de7565b8382600b016000828254620043b3919062005e24565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff1990951694909417929092179092558054916200448d83620061f9565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620041a19291909115158252602082015260400190565b60fa60a06000808285855af4620038a1573d6000803e3d6000fd5b815460026001808316156101000203821604825180820160208110602084100160028114620045ad5760018114620045d3578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101562004596578151845560018401935060208201915062004577565b815191036101000a90819004029091555062004648565b60028302826020036101000a846020036101000a60208901510402018501875562004648565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562004636578151845560018401935060208201915062004617565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff166003811115620046975762004697620055be565b146200473757600282015482546001600160a01b031660009081526027602052604081208054909190620046cd90849062005e24565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342946200472a946001600160a01b0391821694911692909160ff9091169062006515565b60405180910390a1505050565b805482546001600160a01b0390811691161462004834576000808260080154836005015462004767919062005e0e565b9050806000036200477f5783600201549150620047a5565b80846002015484600d015462004796919062006215565b620047a291906200649b565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620047f757600080fd5b505af11580156200480c573d6000803e3d6000fd5b505050508183600d01600082825462004826919062005e24565b909155506200485492505050565b81600201548160080160008282546200484e919062005e24565b90915550505b81600201548160050160008282546200486e919062005e24565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662004a6c576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200490d57600080fd5b505af115801562004922573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200497857600080fd5b505af11580156200498d573d6000803e3d6000fd5b50505050600083600801548460050154620049a9919062005e0e565b600d850154909150620049bd828462006215565b620049c991906200649b565b92508184600d016000828254620049e1919062005e0e565b9091555050600684015460000362004a00576003850183905562004a28565b6006840154600785015462004a16908562006215565b62004a2291906200649b565b60038601555b8284600601600082825462004a3e919062005e24565b9091555050600385015460078501805460009062004a5e90849062005e24565b9091555062004b4192505050565b506002820154600882015481111562004a86575060088101545b816009015460000362004aa0576003830181905562004ac8565b6009820154600a83015462004ab6908362006215565b62004ac291906200649b565b60038401555b8082600901600082825462004ade919062005e24565b90915550506003830154600a8301805460009062004afe90849062005e24565b925050819055508082600801600082825462004b1b919062005e0e565b90915550506002830154600b8301805460009062004b3b90849062005e0e565b90915550505b6005808401805460ff191660011790558201805482919060009062004b6890849062005e0e565b909155505050505050565b6000818152600660205260408120600381015490910362004b92575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff1662004c2e5781600701548260060154846003015462004bde919062006215565b62004bea91906200649b565b90508082600601600082825462004c02919062005e0e565b9091555050600383015460078301805460009062004c2290849062005e0e565b9091555062004c939050565b81600a01548260090154846003015462004c49919062006215565b62004c5591906200649b565b90508082600901600082825462004c6d919062005e0e565b90915550506003830154600a8301805460009062004c8d90849062005e0e565b90915550505b82546001600160a01b03166000908152602760205260408120805483929062004b6890849062005e24565b600062004ccf826060015162003b25565b6001600160a01b0390911660208401529050801562004d1f5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b6020808301516001600160a01b0390811660009081526028909252604090912060010154161562004d935760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000de7565b61271082608001511115620026045760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000de7565b60608160000362004e135750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004e43578062004e2a81620061f9565b915062004e3b9050600a836200649b565b915062004e17565b60008167ffffffffffffffff81111562004e615762004e61620058b7565b6040519080825280601f01601f19166020018201604052801562004e8c576020820181803683370190505b5090505b841562004f045762004ea460018362005e0e565b915062004eb3600a8662006245565b62004ec090603062005e24565b60f81b81838151811062004ed85762004ed8620061e3565b60200101906001600160f81b031916908160001a90535062004efc600a866200649b565b945062004e90565b949350505050565b60608162004f1c81601f62005e24565b101562004f5d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000de7565b62004f69828462005e24565b8451101562004faf5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000de7565b60608215801562004fd057604051915060008252602082016040526200501c565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156200500b57805183526020928301920162004ff1565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620050555762005052601b8262006543565b90505b9250925092565b60006200506862005467565b600085858560405160200162005081939291906200655f565b6040516020818303038152906040529050600060fb9050600082516020620050aa919062005e24565b90506020848285855afa620050be57600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200514e57601d54600090620050f09062004deb565b905081602001518260000151836080015183604051620051109062005485565b6200511f9493929190620065ae565b604051809103906000f0801580156200513c573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620052009082620062ab565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620052ca9082620062ab565b5061026082015160138201805460ff19166001836003811115620052f257620052f2620055be565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006003811115620053c757620053c7620055be565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000e37919062005493565b508054620054189062005dbc565b6000825580601f1062005429575050565b601f01602090049060005260206000209081019062000e379190620054b8565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b61153180620065ee83390190565b80821115620054b4576000620054aa82826200540a565b5060010162005493565b5090565b5b80821115620054b45760008155600101620054b9565b60005b83811015620054ec578181015183820152602001620054d2565b50506000910152565b600081518084526200550f816020860160208601620054cf565b601f01601f19169290920160200192915050565b602081526000620055386020830184620054f5565b9392505050565b6001600160a01b038116811462000e3757600080fd5b600080604083850312156200556957600080fd5b823562005576816200553f565b946020939093013593505050565b6000602082840312156200559757600080fd5b813562005538816200553f565b600060208284031215620055b757600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110620055f357634e487b7160e01b600052602160045260246000fd5b9052565b60208152620056126020820183516001600160a01b03169052565b600060208301516200562f60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620056636102a0850183620054f5565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620056eb818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506200574f8483620054f5565b9350808701519150506200576682860182620055d4565b5090949350505050565b6000806000606084860312156200578657600080fd5b833562005793816200553f565b92506020840135620057a5816200553f565b929592945050506040919091013590565b600060208284031215620057c957600080fd5b813567ffffffffffffffff811115620057e157600080fd5b820161028081850312156200553857600080fd5b600081518084526020808501808196508360051b8101915082860160005b858110156200586a578284038952815180516001600160a01b0316855285810151868601526040908101516060918601829052906200585581870183620054f5565b9a87019a955050509084019060010162005813565b5091979650505050505050565b821515815260406020820152600062004f046040830184620057f5565b60008060408385031215620058a857600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620058df57600080fd5b813567ffffffffffffffff80821115620058fd57620058fd620058b7565b604051601f8301601f19908116603f01168101908282118183101715620059285762005928620058b7565b816040528381528660208588010111156200594257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200597657600080fd5b823562005983816200553f565b9150602083013567ffffffffffffffff811115620059a057600080fd5b620059ae85828601620058cd565b9150509250929050565b845181526020808601518183015260408087015181840152606080880151818501526080808901516001600160a01b03908116828701528851811660a08088019190915294890151811660c087015292880151831660e08601529087015182166101008501528601511661012083015284015161020082019062005a486101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b6000806000806080858703121562005a9e57600080fd5b843567ffffffffffffffff8082111562005ab757600080fd5b62005ac588838901620058cd565b95506020870135915062005ad9826200553f565b9093506040860135908082111562005af057600080fd5b62005afe88838901620058cd565b9350606087013591508082111562005b1557600080fd5b5062005b2487828801620058cd565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005b8957603f1988860301845262005b76858351620054f5565b9450928501929085019060010162005b57565b5092979650505050505050565b602081526000620055386020830184620057f5565b6020808252825182820181905260009190848201906040850190845b8181101562005bee5783516001600160a01b03168352928401929184019160010162005bc7565b50909695505050505050565b6000806040838503121562005c0e57600080fd5b823567ffffffffffffffff8082111562005c2757600080fd5b62005c3586838701620058cd565b9350602085013591508082111562005c4c57600080fd5b50620059ae85828601620058cd565b60408152600062005c706040830185620054f5565b828103602084015262005c848185620054f5565b95945050505050565b6000806040838503121562005ca157600080fd5b823562005cae816200553f565b9150602083013562005cc0816200553f565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005dd157607f821691505b60208210810362005df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000da15762000da162005df8565b8082018082111562000da15762000da162005df8565b6000813562000da1816200553f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005e8157600080fd5b83018035915067ffffffffffffffff82111562005e9d57600080fd5b60200191503681900382131562005eb357600080fd5b9250929050565b601f821115620038a157600081815260208120601f850160051c8101602086101562005ee35750805b601f850160051c820191505b81811015620020975782815560010162005eef565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005f345762005f34620058b7565b62005f4c8362005f45835462005dbc565b8362005eba565b6000601f84116001811462005f7f576000851562005f6a5750838201355b62005f76868262005f04565b8455506200155c565b600083815260209020601f19861690835b8281101562005fb2578685013582556020948501946001909201910162005f90565b508682101562005fd05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000da157600080fd5b600482106200601357634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6200603c620060358362005e3a565b8262005e49565b620060586200604e6020840162005e3a565b6001830162005e49565b620060746200606a6040840162005e3a565b6002830162005e49565b62006083606083018362005e69565b6200609381836003860162005f19565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006106620060fc610180840162005e3a565b600c830162005e49565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200614d61024083018362005e69565b6200615d81836012860162005f19565b50506200260462006172610260840162005fe2565b6013830162005ff4565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620061d257600080fd5b815180151581146200553857600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016200620e576200620e62005df8565b5060010190565b808202811582820484141762000da15762000da162005df8565b634e487b7160e01b600052601260045260246000fd5b6000826200625757620062576200622f565b500690565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b815167ffffffffffffffff811115620062c857620062c8620058b7565b620062e081620062d9845462005dbc565b8462005eba565b602080601f831160018114620063145760008415620062ff5750858301515b6200630b858262005f04565b86555062002097565b600085815260208120601f198616915b82811015620063455788860151825594840194600190910190840162006324565b5085821015620063645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018060a01b0380881683528087166020840152808616604084015260a06060840152620063a860a0840186620054f5565b91508084166080840152509695505050505050565b818103620063c9575050565b620063d5825462005dbc565b67ffffffffffffffff811115620063f057620063f0620058b7565b6200640181620062d9845462005dbc565b6000601f8211600181146200643457600083156200641f5750848201545b6200642b848262005f04565b8555506200155c565b600085815260209020601f19841690600086815260209020845b838110156200647057828601548255600195860195909101906020016200644e565b5085831015620063645793015460001960f8600387901b161c19169092555050600190811b01905550565b600082620064ad57620064ad6200622f565b500490565b600060208284031215620064c557600080fd5b5051919050565b60008451620064e0818460208901620054cf565b845190830190620064f6818360208901620054cf565b84519101906200650b818360208801620054cf565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005c846060830184620055d4565b60ff818116838216019081111562000da15762000da162005df8565b6000845162006573818460208901620054cf565b84519083019062006589818360208901620054cf565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065e390830184620054f5565b969550505050505056fe60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033a2646970667358221220e3c70bb89ff64e43018ee74be10bdec5ad6bd7d966312e293f9796dc1d79159564736f6c6343000815003360806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d86565b815260200190600190039081620000335790505b506040805161014081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e0808701919091526011546101008701526012546001600160a01b039081166101208801529486528651908101875260135485168152601454851660208281019190915260155486168289015260165486166060808401919091526017548716838701526018548716948301949094526019548616928201929092528186015285519283018652601a549093168252601b5492820192909252601c5481850152601d548183015292820192909252601e54918101829052906000036200016257602e80546001600160a01b031916331790556200016282826200017f565b5050601e5460010362000179576200017962000557565b62001196565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000552576000838281518110620002b257620002b262000ef5565b602002602001015160a0015190506000848381518110620002d757620002d762000ef5565b60200260200101516101a00181815250506000848381518110620002ff57620002ff62000ef5565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200033b576200033b62000ef5565b602002602001015160a0018181525050600084838151811062000362576200036262000ef5565b60209081029190910101516101c00152600f5484518590849081106200038c576200038c62000ef5565b602002602001015160800181815250506000848381518110620003b357620003b362000ef5565b602002602001015161026001906003811115620003d457620003d462000f0b565b90816003811115620003ea57620003ea62000f0b565b81525050600084838151811062000405576200040562000ef5565b6020026020010151610160018181525050620004438483815181106200042f576200042f62000ef5565b6020026020010151620006c560201b60201c565b620004708483815181106200045c576200045c62000ef5565b6020026020010151620007fc60201b60201c565b80602a60008685815181106200048a576200048a62000ef5565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620004c7919062000f37565b9250508190555080602c6000828254620004e2919062000f37565b925050819055506200053c84838151811062000502576200050262000ef5565b6020026020010151602001518286858151811062000524576200052462000ef5565b60200260200101516000015162000a2d60201b60201c565b5080620005498162000f53565b91505062000291565b505050565b602e546001600160a01b03163314620005c35760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b6002602b6000601f600181548110620005e057620005e062000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060050180549091906200061990849062000f85565b925050819055506002602b6000601f6001815481106200063d576200063d62000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200067690849062000f85565b90915550506002601e55601a546001600160a01b03166000908152602a602052604081206103e89055620006ab908062000e56565b620006b96001600062000e56565b6002805460ff19169055565b6000620006dc826060015162000c1860201b60201c565b6001600160a01b039091166020840152905080156200072c5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b6044820152606401620005ba565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620007a05760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620005ba565b61271082608001511115620007f85760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620005ba565b5050565b6101808101516001600160a01b03166200087f57601f54600090620008219062000c66565b905081602001518260000151836080015183604051620008419062000e98565b62000850949392919062000f9c565b604051809103906000f0801580156200086d573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b909552604091829020865181548716908516178155935190840180548616918416919091179055840151600283018054909416911617909155606082015182919060038201906200093190826200109d565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009fb90826200109d565b5061026082015160138201805460ff1916600183600381111562000a235762000a2362000f0b565b0217905550505050565b6000821162000a8b5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620005ba565b6001600160a01b0381166000908152602a602052604090205482111562000af55760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620005ba565b6001600160a01b0381166000908152602a60205260408120805484929062000b1f90849062001169565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000bab8362000f53565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000c2562000ea6565b60008060ff9050604083875160208901845afa62000c4257600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c8e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000cbe578062000ca58162000f53565b915062000cb69050600a8362000f85565b915062000c92565b6000816001600160401b0381111562000cdb5762000cdb62000edf565b6040519080825280601f01601f19166020018201604052801562000d06576020820181803683370190505b5090505b841562000d7e5762000d1e60018362001169565b915062000d2d600a866200117f565b62000d3a90603062000f37565b60f81b81838151811062000d525762000d5262000ef5565b60200101906001600160f81b031916908160001a90535062000d76600a8662000f85565b945062000d0a565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e515762000e5162000f0b565b905290565b50805462000e64906200100f565b6000825580601f1062000e75575050565b601f01602090049060005260206000209081019062000e95919062000ec4565b50565b61186f806200910b83390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000edb576000815560010162000ec5565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f4d5762000f4d62000f21565b92915050565b60006001820162000f685762000f6862000f21565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f975762000f9762000f6f565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000feb5785810182015185820160a00152810162000fcd565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c908216806200102457607f821691505b6020821081036200104557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055257600081815260208120601f850160051c81016020861015620010745750805b601f850160051c820191505b81811015620010955782815560010162001080565b505050505050565b81516001600160401b03811115620010b957620010b962000edf565b620010d181620010ca84546200100f565b846200104b565b602080601f831160018114620011095760008415620010f05750858301515b600019600386901b1c1916600185901b17855562001095565b600085815260208120601f198616915b828110156200113a5788860151825594840194600190910190840162001119565b5085821015620011595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f4d5762000f4d62000f21565b60008262001191576200119162000f6f565b500690565b617f6580620011a66000396000f3fe608060405260043610620003ff5760003560e01c80638bac7dad116200020f578063b7ab4db51162000123578063d5f3948811620000b3578063dfb1a4d21162000081578063dfb1a4d21462000e14578063e7f43c681462000e2b578063e98712b21462000e4b578063f03b959d1462000e63578063f7866ee31462000e8857005b8063d5f394881462000d6b578063d861b0e81462000d8d578063d886f8a21462000da5578063dd62ed3e1462000dca57005b8063ceaad45511620000f1578063ceaad4551462000ce4578063cf9c57191462000d09578063cfd19fb91462000d21578063d372c07e1462000d4657005b8063b7ab4db51462000c77578063c2362dd51462000c8f578063c9d97af41462000ca7578063cb696f541462000cbf57005b8063a8b2216e116200019f578063b2ea9adb116200016d578063b2ea9adb1462000be0578063b3ecbadd1462000c05578063b46e55201462000c2a578063b66b3e791462000c4f57005b8063a8b2216e1462000b46578063a9059cbb1462000b6d578063ab8f6ffe1462000b92578063ae1f5fa01462000bb957005b80639c98e47111620001dd5780639c98e4711462000abf5780639dc29fac1462000ad7578063a515366a1462000afc578063a5d059ca1462000b2157005b80638bac7dad1462000a2357806395d89b411462000a4857806396b477cb1462000a765780639ac310741462000aa757005b8063436459691162000313578063731b3a0311620002a3578063833b1fce1162000271578063833b1fce146200098957806384467fdb14620009a9578063852c484914620009ce578063872cf05914620009f357806389c614b81462000a0b57005b8063731b3a03146200078657806377e741c7146200079d57806379502c5514620007c2578063819b6463146200097257005b80635f7d394911620002e15780635f7d394914620006d25780636b5f444c14620007105780636fd2c80b146200073557806370a08231146200074c57005b8063436459691462000649578063496ccd9b14620006605780634bb278f31462000685578063520fdbbc14620006ad57005b806318160ddd116200038f5780632f2c3f2e116200035d5780632f2c3f2e14620005c9578063313ce56714620005e157806335be16e014620005ff57806340c10f19146200062457005b806318160ddd14620005425780631904bb2e146200055957806323b872dd146200058d57806329070c6d14620005b257005b80631122063311620003cd5780631122063314620004c9578063114eaf5514620004e05780631250a28d14620005055780631604e416146200052a57005b806306fdde031462000409578063095ea7b3146200044d5780630ae65e7a14620004835780630d8e6e2c14620004a857005b366200040757005b005b3480156200041657600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b60405162000444919062005731565b60405180910390f35b3480156200045a57600080fd5b50620004726200046c36600462005763565b62000ea8565b604051901515815260200162000444565b3480156200049057600080fd5b5062000407620004a236600462005792565b62000ec1565b348015620004b557600080fd5b50601e545b60405190815260200162000444565b348015620004d657600080fd5b50600e54620004ba565b348015620004ed57600080fd5b5062000407620004ff366004620057b2565b62000f54565b3480156200051257600080fd5b50620004076200052436600462005792565b62000f86565b3480156200053757600080fd5b50620004ba60275481565b3480156200054f57600080fd5b50602c54620004ba565b3480156200056657600080fd5b506200057e6200057836600462005792565b62000fd5565b60405162000444919062005805565b3480156200059a57600080fd5b5062000472620005ac3660046200597e565b62001283565b348015620005bf57600080fd5b50600d54620004ba565b348015620005d657600080fd5b50620004ba61271081565b348015620005ee57600080fd5b506040516012815260200162000444565b3480156200060c57600080fd5b50620004076200061e366004620059c4565b6200132b565b3480156200063157600080fd5b50620004076200064336600462005763565b62001507565b3480156200065657600080fd5b50601c54620004ba565b3480156200066d57600080fd5b50620004076200067f36600462005792565b62001544565b3480156200069257600080fd5b506200069d6200164e565b6040516200044492919062005a85565b348015620006ba57600080fd5b5062000407620006cc36600462005792565b62001ae0565b348015620006df57600080fd5b50620006f7620006f136600462005aa2565b62001cdb565b6040516001600160a01b03909116815260200162000444565b3480156200071d57600080fd5b50620004076200072f366004620057b2565b62001ef2565b3480156200074257600080fd5b50601054620004ba565b3480156200075957600080fd5b50620004ba6200076b36600462005792565b6001600160a01b03166000908152602a602052604090205490565b3480156200079357600080fd5b50602254620004ba565b348015620007aa57600080fd5b5062000407620007bc366004620057b2565b62002078565b348015620007cf57600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008a4939084565b6040805185518152602080870151818301528683015182840152606080880151818401526080808901518185015260a0988901516001600160a01b039081168a8601528851811660c080870191909152848a0151821660e0870152898701518216610100870152838a0151821661012087015291890151811661014086015298880151891661016085015290960151871661018083015284519096166101a0820152948301516101c08601528201516101e08501529101516102008301526102208201526102400162000444565b3480156200097f57600080fd5b50601d54620004ba565b3480156200099657600080fd5b506014546001600160a01b0316620006f7565b348015620009b657600080fd5b5062000407620009c836600462005b70565b620020aa565b348015620009db57600080fd5b5062000407620009ed36600462005763565b620021d9565b34801562000a0057600080fd5b50620004076200236a565b34801562000a1857600080fd5b50620004ba60235481565b34801562000a3057600080fd5b506200040762000a42366004620057b2565b620023a6565b34801562000a5557600080fd5b50604080518082019091526003815262272a2760e91b602082015262000435565b34801562000a8357600080fd5b50620004ba62000a95366004620057b2565b60009081526021602052604090205490565b34801562000ab457600080fd5b50620004ba602d5481565b34801562000acc57600080fd5b50620004ba60245481565b34801562000ae457600080fd5b506200040762000af636600462005763565b6200242a565b34801562000b0957600080fd5b506200040762000b1b36600462005763565b62002547565b34801562000b2e57600080fd5b506200040762000b4036600462005763565b62002616565b34801562000b5357600080fd5b5062000b5e620026ad565b60405162000444919062005c19565b34801562000b7a57600080fd5b506200047262000b8c36600462005763565b62002790565b34801562000b9f57600080fd5b5062000baa620027e8565b60405162000444919062005c7f565b34801562000bc657600080fd5b5062000bd1620028fa565b60405162000444919062005c94565b34801562000bed57600080fd5b506200040762000bff36600462005ce3565b62002b40565b34801562000c1257600080fd5b506200040762000c2436600462005792565b62002b87565b34801562000c3757600080fd5b506200040762000c4936600462005792565b62002bd6565b34801562000c5c57600080fd5b5062000c6762002e59565b6040516200044492919062005d4e565b34801562000c8457600080fd5b5062000bd162002f90565b34801562000c9c57600080fd5b50620004ba60225481565b34801562000cb457600080fd5b50620004ba60205481565b34801562000ccc57600080fd5b506200040762000cde366004620057b2565b62002ff4565b34801562000cf157600080fd5b506200040762000d0336600462005792565b62003057565b34801562000d1657600080fd5b5062000407620030a6565b34801562000d2e57600080fd5b506200040762000d4036600462005792565b620030fa565b34801562000d5357600080fd5b506200040762000d6536600462005792565b62003149565b34801562000d7857600080fd5b50602e54620006f7906001600160a01b031681565b34801562000d9a57600080fd5b506200040762003198565b34801562000db257600080fd5b506200040762000dc436600462005792565b620031e0565b34801562000dd757600080fd5b50620004ba62000de936600462005d80565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000e2157600080fd5b50601b54620004ba565b34801562000e3857600080fd5b50601a546001600160a01b0316620006f7565b34801562000e5857600080fd5b50620004ba60265481565b34801562000e7057600080fd5b506200040762000e8236600462005792565b6200322f565b34801562000e9557600080fd5b506012546001600160a01b0316620006f7565b600062000eb73384846200327e565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000f0a5760405162461bcd60e51b815260040162000f019062005dbe565b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f465760405162461bcd60e51b815260040162000f019062005df5565b62000f5181620033a7565b50565b601a546001600160a01b0316331462000f815760405162461bcd60e51b815260040162000f019062005e41565b601055565b601a546001600160a01b0316331462000fb35760405162461bcd60e51b815260040162000f019062005e41565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b62000fdf6200550a565b6001600160a01b038083166000818152602b6020526040902060010154909116146200101f5760405162461bcd60e51b815260040162000f019062005e78565b6001600160a01b038083166000908152602b60209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010829062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b09062005eaf565b8015620011015780601f10620010d55761010080835404028352916020019162001101565b820191906000526020600020905b815481529060010190602001808311620010e357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011bd9062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620011eb9062005eaf565b80156200123c5780601f1062001210576101008083540402835291602001916200123c565b820191906000526020600020905b8154815290600101906020018083116200121e57829003601f168201915b5050509183525050601382015460209091019060ff166003811115620012665762001266620057cc565b60038111156200127a576200127a620057cc565b90525092915050565b6000620012928484846200347e565b6001600160a01b0384166000908152602960209081526040808320338452909152812054620012c390849062005f01565b9050620012d28533836200327e565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200131891815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620013935760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000f01565b6000610120820135602b82620013b0604086016020870162005792565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013e0919062005f01565b60c0830135602b6000620013fb604087016020880162005792565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200142b919062005f01565b60a0840135602b600062001446604088016020890162005792565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015462001476919062005f01565b62001482919062005f17565b6200148e919062005f17565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620014bf90849062005f17565b90915550829050602b6000620014dc604084016020850162005792565b6001600160a01b03168152602081019190915260400160002062001501828262006121565b50505050565b601a546001600160a01b03163314620015345760405162461bcd60e51b815260040162000f019062005e41565b620015408282620035b0565b5050565b601a546001600160a01b03163314620015715760405162461bcd60e51b815260040162000f019062005e41565b601480546001600160a01b0319166001600160a01b03838116918217909255601554604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620015d057600080fd5b505af1158015620015e5573d6000803e3d6000fd5b5050601754604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200163257600080fd5b505af115801562001647573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620016815760405162461bcd60e51b815260040162000f019062006277565b6020805443600081815260219093526040832091909155601b54602254620016aa919062005f17565b6013546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620016f557600080fd5b505af11580156200170a573d6000803e3d6000fd5b505050508015620018cb57601954602c54602d546023546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a39190620062ba565b905080602d541015620017b55750602d545b620017c13082620035b0565b80602d6000828254620017d5919062005f01565b90915550620017e79050478262003636565b620017f162003b20565b620017fb62003c0f565b600062001807620028fa565b60145460405163422811f960e11b81529192506001600160a01b03169063845023f2906200183a90849060040162005c94565b600060405180830381600087803b1580156200185557600080fd5b505af11580156200186a573d6000803e3d6000fd5b50504360225550504260235560208054600191906000906200188e90849062005f17565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b60145460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193d9190620062d4565b90508015620019b9576015546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620019b1575060408051601f3d908101601f19168201909252620019ae91810190620062d4565b60015b15620019b957505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001ad0576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001a389062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462001a669062005eaf565b801562001ab75780601f1062001a8b5761010080835404028352916020019162001ab7565b820191906000526020600020905b81548152906001019060200180831162001a9957829003601f168201915b50505050508152505081526020019060010190620019e2565b5050505090509350935050509091565b601a546001600160a01b0316331462001b0d5760405162461bcd60e51b815260040162000f019062005e41565b601a80546001600160a01b0319166001600160a01b0383811691821790925560145460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001b6c57600080fd5b505af115801562001b81573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001bcd57600080fd5b505af115801562001be2573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c2e57600080fd5b505af115801562001c43573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c8f57600080fd5b505af115801562001ca4573d6000803e3d6000fd5b505060185460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb915060240162001617565b600080805b60255481101562001d37576025818154811062001d015762001d01620062f8565b9060005260206000209060030201600101548262001d20919062005f17565b91508062001d2e816200630e565b91505062001ce0565b508060000362001d8a5760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000f01565b60008362001d9a6063876200632a565b62001da6919062005f17565b905060008160405160200162001dbe91815260200190565b60408051601f1981840301815291905280516020909101209050600062001de684836200635a565b90506000805b60255481101562001e96576025818154811062001e0d5762001e0d620062f8565b9060005260206000209060030201600101548262001e2c919062005f17565b915062001e3b60018362005f01565b831162001e81576025818154811062001e585762001e58620062f8565b60009182526020909120600390910201546001600160a01b0316965062000ebb95505050505050565b8062001e8d816200630e565b91505062001dec565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000f01565b601a546001600160a01b0316331462001f1f5760405162461bcd60e51b815260040162000f019062005e41565b601b5481101562001fd6578060225462001f3a919062005f17565b431062001fd65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000f01565b601b819055601354604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200202257600080fd5b505af115801562002037573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200206d91815260200190565b60405180910390a150565b601a546001600160a01b03163314620020a55760405162461bcd60e51b815260040162000f019062005e41565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200143815260200160008152602001600081526020016000815260200184815260200160006003811115620021795762002179620057cc565b9052905062002189818362003d2e565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021ca92339289918b9162006371565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620022195760405162461bcd60e51b815260040162000f019062005dbe565b6001600160a01b038281166000908152602b6020526040902054163314620022555760405162461bcd60e51b815260040162000f019062005df5565b612710811115620022a95760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000f01565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200232290849062005f17565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620023975760405162461bcd60e51b815260040162000f019062005e41565b6002805460ff19166001179055565b601a546001600160a01b03163314620023d35760405162461bcd60e51b815260040162000f019062005e41565b60008111620024255760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000f01565b601d55565b601a546001600160a01b03163314620024575760405162461bcd60e51b815260040162000f019062005e41565b6001600160a01b0382166000908152602a6020526040902054811115620024ba5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0382166000908152602a602052604081208054839290620024e490849062005f01565b9250508190555080602c6000828254620024ff919062005f01565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025875760405162461bcd60e51b815260040162000f019062005e78565b6001600160a01b0382166000908152602b602052604081206013015460ff166003811115620025ba57620025ba620057cc565b14620026095760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000f01565b6200154082823362004188565b6001600160a01b038083166000818152602b602052604090206001015490911614620026565760405162461bcd60e51b815260040162000f019062005e78565b60008111620026a05760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000f01565b6200154082823362004374565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002787578382906000526020600020018054620026f39062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620027219062005eaf565b8015620027725780601f10620027465761010080835404028352916020019162002772565b820191906000526020600020905b8154815290600101906020018083116200275457829003601f168201915b505050505081526020019060010190620026d1565b50505050905090565b60006200279f3384846200347e565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002787576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620028629062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620028909062005eaf565b8015620028e15780601f10620028b557610100808354040283529160200191620028e1565b820191906000526020600020905b815481529060010190602001808311620028c357829003601f168201915b505050505081525050815260200190600101906200280c565b602e546060906001600160a01b031633146200292a5760405162461bcd60e51b815260040162000f019062006277565b601f546200297b5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000f01565b62002985620055da565b601d546080820152601f8152602b60208201526025604082015260246060820152620029b181620046a7565b620029bf60286000620055f8565b6025548062002a065760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000f01565b60008167ffffffffffffffff81111562002a245762002a2462005ac5565b60405190808252806020026020018201604052801562002a4e578160200160208202803683370190505b50905060005b8281101562002b38576000602b60006025848154811062002a795762002a79620062f8565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5019062002ae190830182620063ba565b50600281015483516001600160a01b039091169084908490811062002b0a5762002b0a620062f8565b6001600160a01b0390921660209283029190910190910152508062002b2f816200630e565b91505062002a54565b509250505090565b601a546001600160a01b0316331462002b6d5760405162461bcd60e51b815260040162000f019062005e41565b62002b7a600083620046c7565b62001540600182620046c7565b601a546001600160a01b0316331462002bb45760405162461bcd60e51b815260040162000f019062005e41565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b60205260409020600101549091161462002c165760405162461bcd60e51b815260040162000f019062005dbe565b6001600160a01b038082166000908152602b602052604090208054909116331462002c9c5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606482015260840162000f01565b6000601382015460ff16600381111562002cba5762002cba620057cc565b0362002d095760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000f01565b6002601382015460ff16600381111562002d275762002d27620057cc565b14801562002d385750438160100154115b1562002d875760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000f01565b6003601382015460ff16600381111562002da55762002da5620057cc565b0362002df45760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000f01565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002e44919062005f17565b60405190815260200160405180910390a35050565b6060806000600181805462002e6e9062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462002e9c9062005eaf565b801562002eed5780601f1062002ec15761010080835404028352916020019162002eed565b820191906000526020600020905b81548152906001019060200180831162002ecf57829003601f168201915b5050505050915080805462002f029062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462002f309062005eaf565b801562002f815780601f1062002f555761010080835404028352916020019162002f81565b820191906000526020600020905b81548152906001019060200180831162002f6357829003601f168201915b50505050509050915091509091565b6060601f80548060200260200160405190810160405280929190818152602001828054801562002fea57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002fcb575b5050505050905090565b601a546001600160a01b03163314620030215760405162461bcd60e51b815260040162000f019062005e41565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd389128906020016200206d565b601a546001600160a01b03163314620030845760405162461bcd60e51b815260040162000f019062005e41565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620030d35760405162461bcd60e51b815260040162000f019062005e41565b620030e060008062005618565b620030ee6001600062005618565b6002805460ff19169055565b601a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000f019062005e41565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620031765760405162461bcd60e51b815260040162000f019062005e41565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620031c55760405162461bcd60e51b815260040162000f019062006277565b620031cf62003b20565b620031d9620028fa565b5042602355565b601a546001600160a01b031633146200320d5760405162461bcd60e51b815260040162000f019062005e41565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200325c5760405162461bcd60e51b815260040162000f019062005e41565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620032e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000f01565b6001600160a01b038216620033455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000f01565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff166003811115620033dc57620033dc620057cc565b146200342b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000f01565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002e44919062005f17565b6001600160a01b0383166000908152602a6020526040902054811115620034e15760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0383166000908152602a6020526040812080548392906200350b90849062005f01565b9250508190555080602c600082825462003526919062005f17565b909155506200353990508160026200632a565b6001600160a01b0383166000908152602a6020526040812080549091906200356390849062005f17565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200339a91815260200190565b6001600160a01b0382166000908152602a602052604081208054839290620035da90849062005f17565b9250508190555080602c6000828254620035f5919062005f17565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016200253b565b8115801562003643575080155b156200364d575050565b600d54600090670de0b6b3a7640000906200366a9085906200632a565b620036769190620064a3565b90508015620036f4576012546040516000916001600160a01b03169083908381818185875af1925050503d8060008114620036ce576040519150601f19603f3d011682016040523d82523d6000602084013e620036d3565b606091505b5090915050801515600103620036f257620036ef828562005f01565b93505b505b826026600082825462003708919062005f17565b90915550600090505b60255481101562001501576000602b600060258481548110620037385762003738620062f8565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060245460258054929450909188919086908110620037835762003783620062f8565b906000526020600020906003020160010154620037a191906200632a565b620037ad9190620064a3565b905060006024548660258681548110620037cb57620037cb620062f8565b906000526020600020906003020160010154620037e991906200632a565b620037f59190620064a3565b90506000821180620038075750600081115b1562003b07576002601384015460ff1660038111156200382b576200382b620057cc565b14806200385357506003601384015460ff166003811115620038515762003851620057cc565b145b156200391d57601354620038739030906001600160a01b0316836200347e565b601354602580546001600160a01b039092169163a8031a1d91859188908110620038a157620038a1620062f8565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b158015620038fa57600080fd5b505af11580156200390f573d6000803e3d6000fd5b505050505050505062003b0b565b600083600501548385600801546200393691906200632a565b620039429190620064a3565b90508015620039a75783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d80600081146200399e576040519150601f19603f3d011682016040523d82523d6000602084013e620039a3565b606091505b5050505b60008460050154838660080154620039c091906200632a565b620039cc9190620064a3565b90508015620039ee578454620039ee9030906001600160a01b0316836200347e565b6000620039fc828562005f01565b9050600062003a0c848762005f01565b9050600081118062003a1e5750600082115b1562003ab857600c87015462003a409030906001600160a01b0316846200347e565b600c87015460405163a0ce552d60e01b8152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562003a8e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003ab59190620064ba565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b8062003b17816200630e565b91505062003711565b6004545b60055481101562003b4d5762003b478162003b3f816200630e565b92506200481a565b62003b24565b506005546004556008546007540362003b6257565b6009545b60085481101562003b8f5762003b898162003b81816200630e565b925062004a41565b62003b66565b50600854600955600754805b60085481101562003c0957601054600082815260066020526040902060040154439162003bc89162005f17565b1162003bee5762003bd98162004d3c565b62003be660018362005f17565b915062003bf4565b62003c09565b8062003c00816200630e565b91505062003b9b565b50600755565b600c54600b54101562003d2c57600b546000908152600a602052604090206010546001820154439162003c429162005f17565b111562003c4c5750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003ca7920190815260200190565b600060405180830381600087803b15801562003cc257600080fd5b505af115801562003cd7573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003d1f90849062005f17565b9091555062003c0f915050565b565b60e281511462003d785760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000f01565b6030826102400151511462003dd05760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000f01565b62003ddb8262004e87565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003e3e920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003e5e835162004fb4565b8360405160200162003e7393929190620064df565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003ecb898262003ec5604160026200632a565b620050d5565b9050600062003eea8a62003ee2604160026200632a565b6060620050d5565b905060205b825181101562003fbb5762003f058382620051ee565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003f61573d6000803e3d6000fd5b5050604051601f19015190508762003f7b604184620064a3565b8151811062003f8e5762003f8e620062f8565b6001600160a01b039092166020928302919091019091015262003fb360418262005f17565b905062003eef565b508a602001516001600160a01b03168660008151811062003fe05762003fe0620062f8565b60200260200101516001600160a01b031614620040525760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000f01565b8a604001516001600160a01b031686600181518110620040765762004076620062f8565b60200260200101516001600160a01b031614620040ea5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000f01565b6001620041028c6102400151838e6000015162005225565b14620041705760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000f01565b6200417b8b62005294565b5050505050505050505050565b60008211620041e65760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000f01565b6001600160a01b0381166000908152602a6020526040902054821115620042505760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000f01565b6001600160a01b0381166000908152602a6020526040812080548492906200427a90849062005f01565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004306836200630e565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b602052604090208054909183811691161480620044ea57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa158015620043eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620044119190620062ba565b905084811015620044795760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000f01565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b158015620044ca57600080fd5b505af1158015620044df573d6000803e3d6000fd5b50505050506200457d565b8382600b0154836008015462004501919062005f01565b1015620045615760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000f01565b8382600b01600082825462004577919062005f17565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff19909516949094179290921790925580549162004651836200630e565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620043659291909115158252602082015260400190565b60fa60a06000808285855af4620046c2573d6000803e3d6000fd5b505050565b8154600260018083161561010002038216048251808201602081106020841001600281146200477657600181146200479c578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200475f578151845560018401935060208201915062004740565b815191036101000a90819004029091555062004811565b60028302826020036101000a846020036101000a60208901510402018501875562004811565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015620047ff5781518455600184019350602082019150620047e0565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff166003811115620048605762004860620057cc565b146200490057600282015482546001600160a01b03166000908152602a6020526040812080549091906200489690849062005f17565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f87834294620048f3946001600160a01b0391821694911692909160ff9091169062006528565b60405180910390a1505050565b805482546001600160a01b03908116911614620049fd576000808260080154836005015462004930919062005f01565b9050806000036200494857836002015491506200496e565b80846002015484600d01546200495f91906200632a565b6200496b9190620064a3565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620049c057600080fd5b505af1158015620049d5573d6000803e3d6000fd5b505050508183600d016000828254620049ef919062005f17565b9091555062004a1d92505050565b816002015481600801600082825462004a17919062005f17565b90915550505b816002015481600501600082825462004a37919062005f17565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff1662004c35576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801562004ad657600080fd5b505af115801562004aeb573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801562004b4157600080fd5b505af115801562004b56573d6000803e3d6000fd5b5050505060008360080154846005015462004b72919062005f01565b600d85015490915062004b8682846200632a565b62004b929190620064a3565b92508184600d01600082825462004baa919062005f01565b9091555050600684015460000362004bc9576003850183905562004bf1565b6006840154600785015462004bdf90856200632a565b62004beb9190620064a3565b60038601555b8284600601600082825462004c07919062005f17565b9091555050600385015460078501805460009062004c2790849062005f17565b9091555062004d0a92505050565b506002820154600882015481111562004c4f575060088101545b816009015460000362004c69576003830181905562004c91565b6009820154600a83015462004c7f90836200632a565b62004c8b9190620064a3565b60038401555b8082600901600082825462004ca7919062005f17565b90915550506003830154600a8301805460009062004cc790849062005f17565b925050819055508082600801600082825462004ce4919062005f01565b90915550506002830154600b8301805460009062004d0490849062005f01565b90915550505b6005808401805460ff191660011790558201805482919060009062004d3190849062005f01565b909155505050505050565b6000818152600660205260408120600381015490910362004d5b575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff1662004df75781600701548260060154846003015462004da791906200632a565b62004db39190620064a3565b90508082600601600082825462004dcb919062005f01565b9091555050600383015460078301805460009062004deb90849062005f01565b9091555062004e5c9050565b81600a01548260090154846003015462004e1291906200632a565b62004e1e9190620064a3565b90508082600901600082825462004e36919062005f01565b90915550506003830154600a8301805460009062004e5690849062005f01565b90915550505b82546001600160a01b03166000908152602a60205260408120805483929062004d3190849062005f17565b600062004e988260600151620054c5565b6001600160a01b0390911660208401529050801562004ee85760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000f01565b6020808301516001600160a01b039081166000908152602b909252604090912060010154161562004f5c5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000f01565b61271082608001511115620015405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000f01565b60608160000362004fdc5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200500c578062004ff3816200630e565b9150620050049050600a83620064a3565b915062004fe0565b60008167ffffffffffffffff8111156200502a576200502a62005ac5565b6040519080825280601f01601f19166020018201604052801562005055576020820181803683370190505b5090505b8415620050cd576200506d60018362005f01565b91506200507c600a866200635a565b6200508990603062005f17565b60f81b818381518110620050a157620050a1620062f8565b60200101906001600160f81b031916908160001a905350620050c5600a86620064a3565b945062005059565b949350505050565b606081620050e581601f62005f17565b1015620051265760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000f01565b62005132828462005f17565b84511015620051785760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000f01565b606082158015620051995760405191506000825260208201604052620051e5565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015620051d4578051835260209283019201620051ba565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156200521e576200521b601b8262006556565b90505b9250925092565b60006200523162005657565b60008585856040516020016200524a9392919062006572565b6040516020818303038152906040529050600060fb905060008251602062005273919062005f17565b90506020848285855afa6200528757600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200531757601f54600090620052b99062004fb4565b905081602001518260000151836080015183604051620052d99062005675565b620052e89493929190620065c1565b604051809103906000f08015801562005305573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620053c9908262006600565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005493908262006600565b5061026082015160138201805460ff19166001836003811115620054bb57620054bb620057cc565b0217905550505050565b600080620054d262005683565b60008060ff9050604083875160208901845afa620054ef57600080fd5b50508051602090910151600160601b90910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006003811115620055d557620055d5620057cc565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f519190620056a1565b508054620056269062005eaf565b6000825580601f1062005637575050565b601f01602090049060005260206000209081019062000f519190620056c6565b60405180602001604052806001906020820280368337509192915050565b61186f80620066c183390190565b60405180604001604052806002906020820280368337509192915050565b80821115620056c2576000620056b8828262005618565b50600101620056a1565b5090565b5b80821115620056c25760008155600101620056c7565b60005b83811015620056fa578181015183820152602001620056e0565b50506000910152565b600081518084526200571d816020860160208601620056dd565b601f01601f19169290920160200192915050565b60208152600062005746602083018462005703565b9392505050565b6001600160a01b038116811462000f5157600080fd5b600080604083850312156200577757600080fd5b823562005784816200574d565b946020939093013593505050565b600060208284031215620057a557600080fd5b813562005746816200574d565b600060208284031215620057c557600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600481106200580157634e487b7160e01b600052602160045260246000fd5b9052565b60208152620058206020820183516001600160a01b03169052565b600060208301516200583d60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620058716102a085018362005703565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620058f9818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506200595d848362005703565b9350808701519150506200597482860182620057e2565b5090949350505050565b6000806000606084860312156200599457600080fd5b8335620059a1816200574d565b92506020840135620059b3816200574d565b929592945050506040919091013590565b600060208284031215620059d757600080fd5b813567ffffffffffffffff811115620059ef57600080fd5b820161028081850312156200574657600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005a78578284038952815180516001600160a01b03168552858101518686015260409081015160609186018290529062005a638187018362005703565b9a87019a955050509084019060010162005a21565b5091979650505050505050565b8215158152604060208201526000620050cd604083018462005a03565b6000806040838503121562005ab657600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262005aed57600080fd5b813567ffffffffffffffff8082111562005b0b5762005b0b62005ac5565b604051601f8301601f19908116603f0116810190828211818310171562005b365762005b3662005ac5565b8160405283815286602085880101111562005b5057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121562005b8757600080fd5b843567ffffffffffffffff8082111562005ba057600080fd5b62005bae8883890162005adb565b95506020870135915062005bc2826200574d565b9093506040860135908082111562005bd957600080fd5b62005be78883890162005adb565b9350606087013591508082111562005bfe57600080fd5b5062005c0d8782880162005adb565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005c7257603f1988860301845262005c5f85835162005703565b9450928501929085019060010162005c40565b5092979650505050505050565b60208152600062005746602083018462005a03565b6020808252825182820181905260009190848201906040850190845b8181101562005cd75783516001600160a01b03168352928401929184019160010162005cb0565b50909695505050505050565b6000806040838503121562005cf757600080fd5b823567ffffffffffffffff8082111562005d1057600080fd5b62005d1e8683870162005adb565b9350602085013591508082111562005d3557600080fd5b5062005d448582860162005adb565b9150509250929050565b60408152600062005d63604083018562005703565b828103602084015262005d77818562005703565b95945050505050565b6000806040838503121562005d9457600080fd5b823562005da1816200574d565b9150602083013562005db3816200574d565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005ec457607f821691505b60208210810362005ee557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000ebb5762000ebb62005eeb565b8082018082111562000ebb5762000ebb62005eeb565b6000813562000ebb816200574d565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005f7457600080fd5b83018035915067ffffffffffffffff82111562005f9057600080fd5b60200191503681900382131562005fa657600080fd5b9250929050565b601f821115620046c257600081815260208120601f850160051c8101602086101562005fd65750805b601f850160051c820191505b8181101562005ff75782815560010162005fe2565b505050505050565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff8311156200602f576200602f62005ac5565b620060478362006040835462005eaf565b8362005fad565b6000601f8411600181146200607a5760008515620060655750838201355b62006071868262005fff565b84555062001647565b600083815260209020601f19861690835b82811015620060ad57868501358255602094850194600190920191016200608b565b5086821015620060cb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000ebb57600080fd5b600482106200610e57634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006137620061308362005f2d565b8262005f3c565b62006153620061496020840162005f2d565b6001830162005f3c565b6200616f620061656040840162005f2d565b6002830162005f3c565b6200617e606083018362005f5c565b6200618e81836003860162006014565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006201620061f7610180840162005f2d565b600c830162005f3c565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200624861024083018362005f5c565b6200625881836012860162006014565b5050620015406200626d6102608401620060dd565b60138301620060ef565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620062cd57600080fd5b5051919050565b600060208284031215620062e757600080fd5b815180151581146200574657600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001820162006323576200632362005eeb565b5060010190565b808202811582820484141762000ebb5762000ebb62005eeb565b634e487b7160e01b600052601260045260246000fd5b6000826200636c576200636c62006344565b500690565b600060018060a01b0380881683528087166020840152808616604084015260a06060840152620063a560a084018662005703565b91508084166080840152509695505050505050565b818103620063c6575050565b620063d2825462005eaf565b67ffffffffffffffff811115620063ed57620063ed62005ac5565b6200640581620063fe845462005eaf565b8462005fad565b6000601f821160018114620064385760008315620064235750848201545b6200642f848262005fff565b85555062001647565b600085815260209020601f19841690600086815260209020845b8381101562006474578286015482556001958601959091019060200162006452565b5085831015620064935781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620064b557620064b562006344565b500490565b60008060408385031215620064ce57600080fd5b505080516020909101519092909150565b60008451620064f3818460208901620056dd565b84519083019062006509818360208901620056dd565b84519101906200651e818360208801620056dd565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005d776060830184620057e2565b60ff818116838216019081111562000ebb5762000ebb62005eeb565b6000845162006586818460208901620056dd565b8451908301906200659c818360208901620056dd565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065f69083018462005703565b9695505050505050565b815167ffffffffffffffff8111156200661d576200661d62005ac5565b6200662e81620063fe845462005eaf565b602080601f8311600181146200666257600084156200664d5750858301515b62006659858262005fff565b86555062005ff7565b600085815260208120601f198616915b82811015620066935788860151825594840194600190910190840162006672565b50858210156200649357939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033a26469706673582212200ff36fae3c52149be139f47acd9ea62f7e12c0cbff14c35e3924a40e050d89f064736f6c6343000815003360806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // AutonityUpgradeTestABI is the input ABI used to generate the binding from. @@ -6579,6 +6680,37 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Allowance(owner co return _AutonityUpgradeTest.Contract.Allowance(&_AutonityUpgradeTest.CallOpts, owner, spender) } +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) AtnTotalRedistributed(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AutonityUpgradeTest.contract.Call(opts, &out, "atnTotalRedistributed") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestSession) AtnTotalRedistributed() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.AtnTotalRedistributed(&_AutonityUpgradeTest.CallOpts) +} + +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) AtnTotalRedistributed() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.AtnTotalRedistributed(&_AutonityUpgradeTest.CallOpts) +} + // BalanceOf is a free data retrieval call binding the contract method 0x70a08231. // // Solidity: function balanceOf(address _addr) view returns(uint256) @@ -6612,7 +6744,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) BalanceOf(_addr co // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Config(opts *bind.CallOpts) (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -6643,7 +6775,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Config(opts *bind.CallOpt // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Config() (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -6655,7 +6787,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Config() (struct { // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Config() (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -7379,6 +7511,37 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetVersion() (*big return _AutonityUpgradeTest.Contract.GetVersion(&_AutonityUpgradeTest.CallOpts) } +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) InflationReserve(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AutonityUpgradeTest.contract.Call(opts, &out, "inflationReserve") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestSession) InflationReserve() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.InflationReserve(&_AutonityUpgradeTest.CallOpts) +} + +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) InflationReserve() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.InflationReserve(&_AutonityUpgradeTest.CallOpts) +} + // LastEpochBlock is a free data retrieval call binding the contract method 0xc2362dd5. // // Solidity: function lastEpochBlock() view returns(uint256) @@ -7410,6 +7573,37 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) LastEpochBlock() ( return _AutonityUpgradeTest.Contract.LastEpochBlock(&_AutonityUpgradeTest.CallOpts) } +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) LastEpochTime(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AutonityUpgradeTest.contract.Call(opts, &out, "lastEpochTime") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestSession) LastEpochTime() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.LastEpochTime(&_AutonityUpgradeTest.CallOpts) +} + +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) LastEpochTime() (*big.Int, error) { + return _AutonityUpgradeTest.Contract.LastEpochTime(&_AutonityUpgradeTest.CallOpts) +} + // Name is a free data retrieval call binding the contract method 0x06fdde03. // // Solidity: function name() pure returns(string) @@ -7472,37 +7666,6 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Symbol() (string, return _AutonityUpgradeTest.Contract.Symbol(&_AutonityUpgradeTest.CallOpts) } -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) TotalRedistributed(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _AutonityUpgradeTest.contract.Call(opts, &out, "totalRedistributed") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_AutonityUpgradeTest *AutonityUpgradeTestSession) TotalRedistributed() (*big.Int, error) { - return _AutonityUpgradeTest.Contract.TotalRedistributed(&_AutonityUpgradeTest.CallOpts) -} - -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) TotalRedistributed() (*big.Int, error) { - return _AutonityUpgradeTest.Contract.TotalRedistributed(&_AutonityUpgradeTest.CallOpts) -} - // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. // // Solidity: function totalSupply() view returns(uint256) @@ -7891,6 +8054,27 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetEpochPeriod return _AutonityUpgradeTest.Contract.SetEpochPeriod(&_AutonityUpgradeTest.TransactOpts, _period) } +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetInflationControllerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _AutonityUpgradeTest.contract.Transact(opts, "setInflationControllerContract", _address) +} + +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) { + return _AutonityUpgradeTest.Contract.SetInflationControllerContract(&_AutonityUpgradeTest.TransactOpts, _address) +} + +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) { + return _AutonityUpgradeTest.Contract.SetInflationControllerContract(&_AutonityUpgradeTest.TransactOpts, _address) +} + // SetMinimumBaseFee is a paid mutator transaction binding the contract method 0xcb696f54. // // Solidity: function setMinimumBaseFee(uint256 _price) returns() @@ -8103,23 +8287,23 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Transfer(_reci // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) TransferFrom(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _AutonityUpgradeTest.contract.Transact(opts, "transferFrom", sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) TransferFrom(opts *bind.TransactOpts, _sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _AutonityUpgradeTest.contract.Transact(opts, "transferFrom", _sender, _recipient, _amount) } // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_AutonityUpgradeTest *AutonityUpgradeTestSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_AutonityUpgradeTest *AutonityUpgradeTestSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, _sender, _recipient, _amount) } // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) { - return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) { + return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, _sender, _recipient, _amount) } // Unbond is a paid mutator transaction binding the contract method 0xa5d059ca. @@ -10201,14 +10385,15 @@ func (it *AutonityUpgradeTestRewardedIterator) Close() error { // AutonityUpgradeTestRewarded represents a Rewarded event raised by the AutonityUpgradeTest contract. type AutonityUpgradeTestRewarded struct { - Addr common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos + Addr common.Address + AtnAmount *big.Int + NtnAmount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterRewarded is a free log retrieval operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// FilterRewarded is a free log retrieval operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityUpgradeTestRewardedIterator, error) { var addrRule []interface{} @@ -10223,9 +10408,9 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterRewarded(opts *bi return &AutonityUpgradeTestRewardedIterator{contract: _AutonityUpgradeTest.contract, event: "Rewarded", logs: logs, sub: sub}, nil } -// WatchRewarded is a free log subscription operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// WatchRewarded is a free log subscription operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestRewarded, addr []common.Address) (event.Subscription, error) { var addrRule []interface{} @@ -10265,9 +10450,9 @@ func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchRewarded(opts *bin }), nil } -// ParseRewarded is a log parse operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. +// ParseRewarded is a log parse operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // -// Solidity: event Rewarded(address indexed addr, uint256 amount) +// Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseRewarded(log types.Log) (*AutonityUpgradeTestRewarded, error) { event := new(AutonityUpgradeTestRewarded) if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Rewarded", log); err != nil { @@ -11002,9 +11187,9 @@ func (_IACU *IACUTransactorSession) Update() (*types.Transaction, error) { // IAccountabilityMetaData contains all meta data concerning the IAccountability contract. var IAccountabilityMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Sigs: map[string]string{ - "1de9d9b6": "distributeRewards(address)", + "a8031a1d": "distributeRewards(address,uint256)", "6c9789b0": "finalize(bool)", "6b5f444c": "setEpochPeriod(uint256)", }, @@ -11160,25 +11345,25 @@ func (_IAccountability *IAccountabilityTransactorRaw) Transact(opts *bind.Transa return _IAccountability.Contract.contract.Transact(opts, method, params...) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_IAccountability *IAccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _validator common.Address) (*types.Transaction, error) { - return _IAccountability.contract.Transact(opts, "distributeRewards", _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_IAccountability *IAccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _IAccountability.contract.Transact(opts, "distributeRewards", _validator, _ntnReward) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_IAccountability *IAccountabilitySession) DistributeRewards(_validator common.Address) (*types.Transaction, error) { - return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_IAccountability *IAccountabilitySession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator, _ntnReward) } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_IAccountability *IAccountabilityTransactorSession) DistributeRewards(_validator common.Address) (*types.Transaction, error) { - return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_IAccountability *IAccountabilityTransactorSession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) { + return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator, _ntnReward) } // Finalize is a paid mutator transaction binding the contract method 0x6c9789b0. @@ -12646,9 +12831,198 @@ func (_IERC20 *IERC20Filterer) ParseTransfer(log types.Log) (*IERC20Transfer, er return event, nil } +// IInflationControllerMetaData contains all meta data concerning the IInflationController contract. +var IInflationControllerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Sigs: map[string]string{ + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + }, +} + +// IInflationControllerABI is the input ABI used to generate the binding from. +// Deprecated: Use IInflationControllerMetaData.ABI instead. +var IInflationControllerABI = IInflationControllerMetaData.ABI + +// Deprecated: Use IInflationControllerMetaData.Sigs instead. +// IInflationControllerFuncSigs maps the 4-byte function signature to its string representation. +var IInflationControllerFuncSigs = IInflationControllerMetaData.Sigs + +// IInflationController is an auto generated Go binding around an Ethereum contract. +type IInflationController struct { + IInflationControllerCaller // Read-only binding to the contract + IInflationControllerTransactor // Write-only binding to the contract + IInflationControllerFilterer // Log filterer for contract events +} + +// IInflationControllerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IInflationControllerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInflationControllerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IInflationControllerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInflationControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IInflationControllerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IInflationControllerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IInflationControllerSession struct { + Contract *IInflationController // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IInflationControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IInflationControllerCallerSession struct { + Contract *IInflationControllerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IInflationControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IInflationControllerTransactorSession struct { + Contract *IInflationControllerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IInflationControllerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IInflationControllerRaw struct { + Contract *IInflationController // Generic contract binding to access the raw methods on +} + +// IInflationControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IInflationControllerCallerRaw struct { + Contract *IInflationControllerCaller // Generic read-only contract binding to access the raw methods on +} + +// IInflationControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IInflationControllerTransactorRaw struct { + Contract *IInflationControllerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIInflationController creates a new instance of IInflationController, bound to a specific deployed contract. +func NewIInflationController(address common.Address, backend bind.ContractBackend) (*IInflationController, error) { + contract, err := bindIInflationController(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IInflationController{IInflationControllerCaller: IInflationControllerCaller{contract: contract}, IInflationControllerTransactor: IInflationControllerTransactor{contract: contract}, IInflationControllerFilterer: IInflationControllerFilterer{contract: contract}}, nil +} + +// NewIInflationControllerCaller creates a new read-only instance of IInflationController, bound to a specific deployed contract. +func NewIInflationControllerCaller(address common.Address, caller bind.ContractCaller) (*IInflationControllerCaller, error) { + contract, err := bindIInflationController(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IInflationControllerCaller{contract: contract}, nil +} + +// NewIInflationControllerTransactor creates a new write-only instance of IInflationController, bound to a specific deployed contract. +func NewIInflationControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*IInflationControllerTransactor, error) { + contract, err := bindIInflationController(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IInflationControllerTransactor{contract: contract}, nil +} + +// NewIInflationControllerFilterer creates a new log filterer instance of IInflationController, bound to a specific deployed contract. +func NewIInflationControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*IInflationControllerFilterer, error) { + contract, err := bindIInflationController(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IInflationControllerFilterer{contract: contract}, nil +} + +// bindIInflationController binds a generic wrapper to an already deployed contract. +func bindIInflationController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(IInflationControllerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IInflationController *IInflationControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInflationController.Contract.IInflationControllerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IInflationController *IInflationControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInflationController.Contract.IInflationControllerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IInflationController *IInflationControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInflationController.Contract.IInflationControllerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IInflationController *IInflationControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IInflationController.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IInflationController *IInflationControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IInflationController.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IInflationController *IInflationControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IInflationController.Contract.contract.Transact(opts, method, params...) +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_IInflationController *IInflationControllerCaller) CalculateSupplyDelta(opts *bind.CallOpts, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + var out []interface{} + err := _IInflationController.contract.Call(opts, &out, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_IInflationController *IInflationControllerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + return _IInflationController.Contract.CalculateSupplyDelta(&_IInflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_IInflationController *IInflationControllerCallerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + return _IInflationController.Contract.CalculateSupplyDelta(&_IInflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) +} + // IOracleMetaData contains all meta data concerning the IOracle contract. var IOracleMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Sigs: map[string]string{ "4bb278f3": "finalize()", "9670c0bc": "getPrecision()", @@ -12879,7 +13253,7 @@ func (_IOracle *IOracleCallerSession) GetRound() (*big.Int, error) { // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int, _symbol string) (IOracleRoundData, error) { var out []interface{} err := _IOracle.contract.Call(opts, &out, "getRoundData", _round, _symbol) @@ -12896,14 +13270,14 @@ func (_IOracle *IOracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) { return _IOracle.Contract.GetRoundData(&_IOracle.CallOpts, _round, _symbol) } // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleCallerSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) { return _IOracle.Contract.GetRoundData(&_IOracle.CallOpts, _round, _symbol) } @@ -13003,7 +13377,7 @@ func (_IOracle *IOracleCallerSession) GetVoters() ([]common.Address, error) { // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol string) (IOracleRoundData, error) { var out []interface{} err := _IOracle.contract.Call(opts, &out, "latestRoundData", _symbol) @@ -13020,14 +13394,14 @@ func (_IOracle *IOracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol stri // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleSession) LatestRoundData(_symbol string) (IOracleRoundData, error) { return _IOracle.Contract.LatestRoundData(&_IOracle.CallOpts, _symbol) } // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracleCallerSession) LatestRoundData(_symbol string) (IOracleRoundData, error) { return _IOracle.Contract.LatestRoundData(&_IOracle.CallOpts, _symbol) } @@ -14365,9 +14739,281 @@ func (_ISupplyControl *ISupplyControlFilterer) ParseMint(log types.Log) (*ISuppl return event, nil } +// InflationControllerMetaData contains all meta data concerning the InflationController contract. +var InflationControllerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"SD59x18\",\"name\":\"iInit\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iTrans\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"aE\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"T\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iPerm\",\"type\":\"int256\"}],\"internalType\":\"structInflationController.Params\",\"name\":\"_params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Underflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Div_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Div_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp2_InputTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp_InputTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Mul_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Mul_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"SD59x18\",\"name\":\"iInit\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iTrans\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"aE\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"T\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iPerm\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Sigs: map[string]string{ + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + "cff0ab96": "params()", + }, + Bin: "0x608060405234801561001057600080fd5b506040516110c43803806110c483398101604081905261002f9161005c565b805160005560208101516001556040810151600255606081015160035560800151600455426005556100d9565b600060a0828403121561006e57600080fd5b60405160a081016001600160401b038111828210171561009e57634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b610fdc806100e86000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806392eff3cd1461003b578063cff0ab9614610061575b600080fd5b61004e610049366004610e97565b6100a3565b6040519081526020015b60405180910390f35b60005460015460025460035460045461007b949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610058565b6000806100bc600554856100b79190610edf565b610150565b905060006100d1600554856100b79190610edf565b60035490915081136100f1576100e88783836101da565b92505050610148565b60035482121561013857600061010d88846000600301546101da565b9050600061012188600060030154856102da565b905061012d8183610ef2565b945050505050610148565b6101438683836102da565b925050505b949350505050565b6000610168670de0b6b3a7640000600160ff1b610f1b565b821215610190576040516399474eeb60e01b8152600481018390526024015b60405180910390fd5b6101a9670de0b6b3a76400006001600160ff1b03610f1b565b8213156101cc57604051639d58109160e01b815260048101839052602401610187565b50670de0b6b3a76400000290565b6000806101f46000600201546101f06000610150565b1490565b156102305760005460015461022991906102249061021c9061021690846102fe565b8861030d565b6003546103d8565b610485565b90506102a2565b600061024461021c6000600201548761030d565b9050600061027c6102666102578461049a565b6102616001610150565b6102fe565b61027761025760006002015461049a565b6103d8565b60005460015491925061029d916102249061029790836102fe565b8461030d565b925050505b60006102c36102b9836102b489610150565b61030d565b6102b486886102fe565b90506102ce816104ef565b925050505b9392505050565b60006101486102f66102ee6102b987610150565b60045461030d565b6104ef565b90565b60006102d36102fb8385610f57565b60008282600160ff1b8214806103265750600160ff1b81145b156103445760405163a6070c2560e01b815260040160405180910390fd5b60008060008412610355578361035a565b836000035b91506000831261036a578261036f565b826000035b9050600061037d8383610503565b90506001600160ff1b038111156103b15760405163120b5b4360e01b81526004810189905260248101889052604401610187565b600019858518136103cb816103c7578260000390565b8290565b9998505050505050505050565b60008282600160ff1b8214806103f15750600160ff1b81145b1561040f576040516309fe2b4560e41b815260040160405180910390fd5b600080600084126104205783610425565b836000035b915060008312610435578261043a565b826000035b9050600061045183670de0b6b3a7640000846105b9565b90506001600160ff1b038111156103b15760405163d49c26b360e01b81526004810189905260248101889052604401610187565b60006102d36102fb8385610f7e565b92915050565b600081680736ea4425c11ac6308113156104ca5760405163ca7ec0c560e01b815260048101849052602401610187565b6714057b7ef767814f81026101486104ea670de0b6b3a7640000835b0590565b61068d565b6000610494670de0b6b3a764000083610f1b565b60008080600019848609848602925082811083820303915050806000036105375750670de0b6b3a764000090049050610494565b670de0b6b3a7640000811061056957604051635173648d60e01b81526004810186905260248101859052604401610187565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b60008080600019858709858702925082811083820303915050806000036105f3578382816105e9576105e9610f05565b04925050506102d3565b83811061062457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610187565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600081818112156106ea5768033dd1780914b97114198112156106b35750600092915050565b6106e36106c66102fb6104ea8460000390565b6ec097ce7bc90715b34b9f1000000000816104e6576104e6610f05565b9150610731565b680a688906bd8affffff81131561071657604051626c1a0560e31b815260048101849052602401610187565b670de0b6b3a7640000604082901b056101486102fb82610737565b50919050565b600160bf1b67ff000000000000008216156108445767800000000000000082161561076b5768016a09e667f3bcc9090260401c5b67400000000000000082161561078a576801306fe0a31b7152df0260401c5b6720000000000000008216156107a9576801172b83c7d517adce0260401c5b6710000000000000008216156107c85768010b5586cf9890f62a0260401c5b6708000000000000008216156107e7576801059b0d31585743ae0260401c5b67040000000000000082161561080657680102c9a3e778060ee70260401c5b6702000000000000008216156108255768010163da9fb33356d80260401c5b67010000000000000082161561084457680100b1afa5abcbed610260401c5b66ff0000000000008216156109435766800000000000008216156108715768010058c86da1c09ea20260401c5b664000000000000082161561088f576801002c605e2e8cec500260401c5b66200000000000008216156108ad57680100162f3904051fa10260401c5b66100000000000008216156108cb576801000b175effdc76ba0260401c5b66080000000000008216156108e957680100058ba01fb9f96d0260401c5b66040000000000008216156109075768010002c5cc37da94920260401c5b6602000000000000821615610925576801000162e525ee05470260401c5b66010000000000008216156109435768010000b17255775c040260401c5b65ff0000000000821615610a39576580000000000082161561096e576801000058b91b5bc9ae0260401c5b6540000000000082161561098b57680100002c5c89d5ec6d0260401c5b652000000000008216156109a85768010000162e43f4f8310260401c5b651000000000008216156109c557680100000b1721bcfc9a0260401c5b650800000000008216156109e25768010000058b90cf1e6e0260401c5b650400000000008216156109ff576801000002c5c863b73f0260401c5b65020000000000821615610a1c57680100000162e430e5a20260401c5b65010000000000821615610a39576801000000b1721835510260401c5b64ff00000000821615610b2657648000000000821615610a6257680100000058b90c0b490260401c5b644000000000821615610a7e5768010000002c5c8601cc0260401c5b642000000000821615610a9a576801000000162e42fff00260401c5b641000000000821615610ab65768010000000b17217fbb0260401c5b640800000000821615610ad2576801000000058b90bfce0260401c5b640400000000821615610aee57680100000002c5c85fe30260401c5b640200000000821615610b0a5768010000000162e42ff10260401c5b640100000000821615610b2657680100000000b17217f80260401c5b63ff000000821615610c0a576380000000821615610b4d5768010000000058b90bfc0260401c5b6340000000821615610b68576801000000002c5c85fe0260401c5b6320000000821615610b8357680100000000162e42ff0260401c5b6310000000821615610b9e576801000000000b17217f0260401c5b6308000000821615610bb957680100000000058b90c00260401c5b6304000000821615610bd45768010000000002c5c8600260401c5b6302000000821615610bef576801000000000162e4300260401c5b6301000000821615610c0a5768010000000000b172180260401c5b62ff0000821615610ce55762800000821615610c2f576801000000000058b90c0260401c5b62400000821615610c4957680100000000002c5c860260401c5b62200000821615610c635768010000000000162e430260401c5b62100000821615610c7d57680100000000000b17210260401c5b62080000821615610c975768010000000000058b910260401c5b62040000821615610cb1576801000000000002c5c80260401c5b62020000821615610ccb57680100000000000162e40260401c5b62010000821615610ce5576801000000000000b1720260401c5b61ff00821615610db757618000821615610d0857680100000000000058b90260401c5b614000821615610d215768010000000000002c5d0260401c5b612000821615610d3a576801000000000000162e0260401c5b611000821615610d535768010000000000000b170260401c5b610800821615610d6c576801000000000000058c0260401c5b610400821615610d8557680100000000000002c60260401c5b610200821615610d9e57680100000000000001630260401c5b610100821615610db757680100000000000000b10260401c5b60ff821615610e80576080821615610dd857680100000000000000590260401c5b6040821615610df0576801000000000000002c0260401c5b6020821615610e0857680100000000000000160260401c5b6010821615610e20576801000000000000000b0260401c5b6008821615610e3857680100000000000000060260401c5b6004821615610e5057680100000000000000030260401c5b6002821615610e6857680100000000000000010260401c5b6001821615610e8057680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60008060008060808587031215610ead57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561049457610494610ec9565b8082018082111561049457610494610ec9565b634e487b7160e01b600052601260045260246000fd5b600082610f3857634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610f5257610f52610ec9565b500590565b8181036000831280158383131683831282161715610f7757610f77610ec9565b5092915050565b8082018281126000831280158216821582161715610f9e57610f9e610ec9565b50509291505056fea2646970667358221220da0e48bf3bfe7850b153bfd6b81f3f55729293c43ccda4cc102849fead77522664736f6c63430008150033", +} + +// InflationControllerABI is the input ABI used to generate the binding from. +// Deprecated: Use InflationControllerMetaData.ABI instead. +var InflationControllerABI = InflationControllerMetaData.ABI + +// Deprecated: Use InflationControllerMetaData.Sigs instead. +// InflationControllerFuncSigs maps the 4-byte function signature to its string representation. +var InflationControllerFuncSigs = InflationControllerMetaData.Sigs + +// InflationControllerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use InflationControllerMetaData.Bin instead. +var InflationControllerBin = InflationControllerMetaData.Bin + +// DeployInflationController deploys a new Ethereum contract, binding an instance of InflationController to it. +func DeployInflationController(auth *bind.TransactOpts, backend bind.ContractBackend, _params InflationControllerParams) (common.Address, *types.Transaction, *InflationController, error) { + parsed, err := InflationControllerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(InflationControllerBin), backend, _params) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &InflationController{InflationControllerCaller: InflationControllerCaller{contract: contract}, InflationControllerTransactor: InflationControllerTransactor{contract: contract}, InflationControllerFilterer: InflationControllerFilterer{contract: contract}}, nil +} + +// InflationController is an auto generated Go binding around an Ethereum contract. +type InflationController struct { + InflationControllerCaller // Read-only binding to the contract + InflationControllerTransactor // Write-only binding to the contract + InflationControllerFilterer // Log filterer for contract events +} + +// InflationControllerCaller is an auto generated read-only Go binding around an Ethereum contract. +type InflationControllerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// InflationControllerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type InflationControllerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// InflationControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type InflationControllerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// InflationControllerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type InflationControllerSession struct { + Contract *InflationController // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// InflationControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type InflationControllerCallerSession struct { + Contract *InflationControllerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// InflationControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type InflationControllerTransactorSession struct { + Contract *InflationControllerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// InflationControllerRaw is an auto generated low-level Go binding around an Ethereum contract. +type InflationControllerRaw struct { + Contract *InflationController // Generic contract binding to access the raw methods on +} + +// InflationControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type InflationControllerCallerRaw struct { + Contract *InflationControllerCaller // Generic read-only contract binding to access the raw methods on +} + +// InflationControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type InflationControllerTransactorRaw struct { + Contract *InflationControllerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewInflationController creates a new instance of InflationController, bound to a specific deployed contract. +func NewInflationController(address common.Address, backend bind.ContractBackend) (*InflationController, error) { + contract, err := bindInflationController(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &InflationController{InflationControllerCaller: InflationControllerCaller{contract: contract}, InflationControllerTransactor: InflationControllerTransactor{contract: contract}, InflationControllerFilterer: InflationControllerFilterer{contract: contract}}, nil +} + +// NewInflationControllerCaller creates a new read-only instance of InflationController, bound to a specific deployed contract. +func NewInflationControllerCaller(address common.Address, caller bind.ContractCaller) (*InflationControllerCaller, error) { + contract, err := bindInflationController(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &InflationControllerCaller{contract: contract}, nil +} + +// NewInflationControllerTransactor creates a new write-only instance of InflationController, bound to a specific deployed contract. +func NewInflationControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*InflationControllerTransactor, error) { + contract, err := bindInflationController(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &InflationControllerTransactor{contract: contract}, nil +} + +// NewInflationControllerFilterer creates a new log filterer instance of InflationController, bound to a specific deployed contract. +func NewInflationControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*InflationControllerFilterer, error) { + contract, err := bindInflationController(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &InflationControllerFilterer{contract: contract}, nil +} + +// bindInflationController binds a generic wrapper to an already deployed contract. +func bindInflationController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(InflationControllerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_InflationController *InflationControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _InflationController.Contract.InflationControllerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_InflationController *InflationControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _InflationController.Contract.InflationControllerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_InflationController *InflationControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _InflationController.Contract.InflationControllerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_InflationController *InflationControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _InflationController.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_InflationController *InflationControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _InflationController.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_InflationController *InflationControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _InflationController.Contract.contract.Transact(opts, method, params...) +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_InflationController *InflationControllerCaller) CalculateSupplyDelta(opts *bind.CallOpts, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + var out []interface{} + err := _InflationController.contract.Call(opts, &out, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_InflationController *InflationControllerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + return _InflationController.Contract.CalculateSupplyDelta(&_InflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_InflationController *InflationControllerCallerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) { + return _InflationController.Contract.CalculateSupplyDelta(&_InflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(int256 iInit, int256 iTrans, int256 aE, int256 T, int256 iPerm) +func (_InflationController *InflationControllerCaller) Params(opts *bind.CallOpts) (struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int +}, error) { + var out []interface{} + err := _InflationController.contract.Call(opts, &out, "params") + + outstruct := new(struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.IInit = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.ITrans = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.AE = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.T = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.IPerm = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(int256 iInit, int256 iTrans, int256 aE, int256 T, int256 iPerm) +func (_InflationController *InflationControllerSession) Params() (struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int +}, error) { + return _InflationController.Contract.Params(&_InflationController.CallOpts) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(int256 iInit, int256 iTrans, int256 aE, int256 T, int256 iPerm) +func (_InflationController *InflationControllerCallerSession) Params() (struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int +}, error) { + return _InflationController.Contract.Params(&_InflationController.CallOpts) +} + // LiquidMetaData contains all meta data concerning the Liquid contract. var LiquidMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_unclaimedATN\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unclaimedNTN\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "187cf4d7": "FEE_FACTOR_UNIT_RECIP()", @@ -14382,7 +15028,7 @@ var LiquidMetaData = &bind.MetaData{ "59355736": "lockedBalanceOf(address)", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", - "fb489a7b": "redistribute()", + "a0ce552d": "redistribute(uint256)", "19fac8fd": "setCommissionRate(uint256)", "95d89b41": "symbol()", "18160ddd": "totalSupply()", @@ -14394,7 +15040,7 @@ var LiquidMetaData = &bind.MetaData{ "84955c88": "unlockedBalanceOf(address)", "3a5381b5": "validator()", }, - Bin: "0x60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // LiquidABI is the input ABI used to generate the binding from. @@ -14911,32 +15557,46 @@ func (_Liquid *LiquidCallerSession) Treasury() (common.Address, error) { // UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8. // -// Solidity: function unclaimedRewards(address _account) view returns(uint256) -func (_Liquid *LiquidCaller) UnclaimedRewards(opts *bind.CallOpts, _account common.Address) (*big.Int, error) { +// Solidity: function unclaimedRewards(address _account) view returns(uint256 _unclaimedATN, uint256 _unclaimedNTN) +func (_Liquid *LiquidCaller) UnclaimedRewards(opts *bind.CallOpts, _account common.Address) (struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int +}, error) { var out []interface{} err := _Liquid.contract.Call(opts, &out, "unclaimedRewards", _account) + outstruct := new(struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int + }) if err != nil { - return *new(*big.Int), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.UnclaimedATN = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.UnclaimedNTN = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) - return out0, err + return *outstruct, err } // UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8. // -// Solidity: function unclaimedRewards(address _account) view returns(uint256) -func (_Liquid *LiquidSession) UnclaimedRewards(_account common.Address) (*big.Int, error) { +// Solidity: function unclaimedRewards(address _account) view returns(uint256 _unclaimedATN, uint256 _unclaimedNTN) +func (_Liquid *LiquidSession) UnclaimedRewards(_account common.Address) (struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int +}, error) { return _Liquid.Contract.UnclaimedRewards(&_Liquid.CallOpts, _account) } // UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8. // -// Solidity: function unclaimedRewards(address _account) view returns(uint256) -func (_Liquid *LiquidCallerSession) UnclaimedRewards(_account common.Address) (*big.Int, error) { +// Solidity: function unclaimedRewards(address _account) view returns(uint256 _unclaimedATN, uint256 _unclaimedNTN) +func (_Liquid *LiquidCallerSession) UnclaimedRewards(_account common.Address) (struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int +}, error) { return _Liquid.Contract.UnclaimedRewards(&_Liquid.CallOpts, _account) } @@ -15107,25 +15767,25 @@ func (_Liquid *LiquidTransactorSession) Mint(_account common.Address, _amount *b return _Liquid.Contract.Mint(&_Liquid.TransactOpts, _account, _amount) } -// Redistribute is a paid mutator transaction binding the contract method 0xfb489a7b. +// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d. // -// Solidity: function redistribute() payable returns(uint256) -func (_Liquid *LiquidTransactor) Redistribute(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Liquid.contract.Transact(opts, "redistribute") +// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256, uint256) +func (_Liquid *LiquidTransactor) Redistribute(opts *bind.TransactOpts, _ntnReward *big.Int) (*types.Transaction, error) { + return _Liquid.contract.Transact(opts, "redistribute", _ntnReward) } -// Redistribute is a paid mutator transaction binding the contract method 0xfb489a7b. +// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d. // -// Solidity: function redistribute() payable returns(uint256) -func (_Liquid *LiquidSession) Redistribute() (*types.Transaction, error) { - return _Liquid.Contract.Redistribute(&_Liquid.TransactOpts) +// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256, uint256) +func (_Liquid *LiquidSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) { + return _Liquid.Contract.Redistribute(&_Liquid.TransactOpts, _ntnReward) } -// Redistribute is a paid mutator transaction binding the contract method 0xfb489a7b. +// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d. // -// Solidity: function redistribute() payable returns(uint256) -func (_Liquid *LiquidTransactorSession) Redistribute() (*types.Transaction, error) { - return _Liquid.Contract.Redistribute(&_Liquid.TransactOpts) +// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256, uint256) +func (_Liquid *LiquidTransactorSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) { + return _Liquid.Contract.Redistribute(&_Liquid.TransactOpts, _ntnReward) } // SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd. @@ -15522,7 +16182,7 @@ func (_Liquid *LiquidFilterer) ParseTransfer(log types.Log) (*LiquidTransfer, er // OracleMetaData contains all meta data concerning the Oracle contract. var OracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRoundBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVoterUpdateRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"newSymbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reports\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"round\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbolUpdatedRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"symbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"votingInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isVoter\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRoundBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVoterUpdateRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"newSymbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reports\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"round\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbolUpdatedRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"symbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"votingInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isVoter\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "4bb278f3": "finalize()", "9670c0bc": "getPrecision()", @@ -15546,7 +16206,7 @@ var OracleMetaData = &bind.MetaData{ "a7813587": "votePeriod()", "5412b3ae": "votingInfo(address)", }, - Bin: "0x6080604052600160ff1b600755600160ff1b6008553480156200002157600080fd5b5060405162002d3438038062002d34833981016040819052620000449162000639565b600280546001600160a01b038087166001600160a01b03199283161790925560038054928616929091169190911790558151620000899060009060208501906200035f565b5081516200009f9060019060208501906200035f565b5080600981905550620000c485600060018851620000be91906200074e565b62000181565b8451620000d9906004906020880190620003bc565b508451620000ef906005906020880190620003bc565b5060016006819055600d8054909101815560009081525b855181101562000175576001600b60008884815181106200012b576200012b6200076a565b6020908102919091018101516001600160a01b03168252810191909152604001600020600201805460ff1916911515919091179055806200016c8162000780565b91505062000106565b505050505050620009c3565b8082126200018e57505050565b81816000856002620001a185856200079c565b620001ad9190620007c6565b620001b9908762000806565b81518110620001cc57620001cc6200076a565b602002602001015190505b8183136200032b575b806001600160a01b0316868481518110620001ff57620001ff6200076a565b60200260200101516001600160a01b031610156200022c5782620002238162000831565b935050620001e0565b806001600160a01b03168683815181106200024b576200024b6200076a565b60200260200101516001600160a01b031611156200027857816200026f816200084c565b9250506200022c565b81831362000325578582815181106200029557620002956200076a565b6020026020010151868481518110620002b257620002b26200076a565b6020026020010151878581518110620002cf57620002cf6200076a565b60200260200101888581518110620002eb57620002eb6200076a565b6001600160a01b0393841660209182029290920101529116905282620003118162000831565b935050818062000321906200084c565b9250505b620001d7565b8185121562000341576200034186868462000181565b8383121562000357576200035786848662000181565b505050505050565b828054828255906000526020600020908101928215620003aa579160200282015b82811115620003aa5782518290620003999082620008f7565b509160200191906001019062000380565b50620003b892915062000422565b5090565b82805482825590600052602060002090810192821562000414579160200282015b828111156200041457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003dd565b50620003b892915062000443565b80821115620003b85760006200043982826200045a565b5060010162000422565b5b80821115620003b8576000815560010162000444565b50805462000468906200086c565b6000825580601f1062000479575050565b601f01602090049060005260206000209081019062000499919062000443565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620004dd57620004dd6200049c565b604052919050565b60006001600160401b038211156200050157620005016200049c565b5060051b60200190565b80516001600160a01b03811681146200052357600080fd5b919050565b6000601f83818401126200053b57600080fd5b82516020620005546200054e83620004e5565b620004b2565b82815260059290921b850181019181810190878411156200057457600080fd5b8287015b848110156200062d5780516001600160401b03808211156200059a5760008081fd5b818a0191508a603f830112620005b05760008081fd5b8582015181811115620005c757620005c76200049c565b620005da818a01601f19168801620004b2565b915080825260408c81838601011115620005f45760008081fd5b60005b8281101562000614578481018201518482018a01528801620005f7565b5050600090820187015284525091830191830162000578565b50979650505050505050565b600080600080600060a086880312156200065257600080fd5b85516001600160401b03808211156200066a57600080fd5b818801915088601f8301126200067f57600080fd5b81516020620006926200054e83620004e5565b82815260059290921b8401810191818101908c841115620006b257600080fd5b948201945b83861015620006db57620006cb866200050b565b82529482019490820190620006b7565b9950620006ec90508a82016200050b565b97505050620006fe604089016200050b565b945060608801519150808211156200071557600080fd5b50620007248882890162000528565b925050608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000764576200076462000738565b92915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000795576200079562000738565b5060010190565b8181036000831280158383131683831282161715620007bf57620007bf62000738565b5092915050565b600082620007e457634e487b7160e01b600052601260045260246000fd5b600160ff1b82146000198414161562000801576200080162000738565b500590565b808201828112600083128015821682158216171562000829576200082962000738565b505092915050565b60006001600160ff1b01820162000795576200079562000738565b6000600160ff1b820162000864576200086462000738565b506000190190565b600181811c908216806200088157607f821691505b602082108103620008a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008f257600081815260208120601f850160051c81016020861015620008d15750805b601f850160051c820191505b818110156200035757828155600101620008dd565b505050565b81516001600160401b038111156200091357620009136200049c565b6200092b816200092484546200086c565b84620008a8565b602080601f8311600181146200096357600084156200094a5750858301515b600019600386901b1c1916600185901b17855562000357565b600085815260208120601f198616915b82811015620009945788860151825594840194600190910190840162000973565b5085821015620009b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61236180620009d36000396000f3fe6080604052600436106101225760003560e01c80638d4f75d2116100a5578063b3ab15fb1161006c578063b3ab15fb1461038c578063b78dec52146103ac578063ccce413b146103c1578063cdd72253146103e1578063df7f710e14610403578063e6a02a281461042557005b80638d4f75d2146103155780639670c0bc146103355780639f8743f71461034b578063a781358714610360578063aa2f89b51461037657005b80634bb278f3116100e95780634bb278f3146101ff5780634c56ea56146102245780635281b5c61461026c5780635412b3ae14610299578063845023f2146102f557005b806308f21ff51461012b578063146ca53114610154578063307de9b61461016a57806333f98c771461018a5780633c8510fd146101df57005b3661012957005b005b34801561013757600080fd5b5061014160085481565b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061014160065481565b34801561017657600080fd5b5061012961018536600461198c565b61043b565b34801561019657600080fd5b506101aa6101a5366004611ac8565b610682565b60405161014b919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b3480156101eb57600080fd5b506101aa6101fa366004611afd565b61076c565b34801561020b57600080fd5b5061021461082d565b604051901515815260200161014b565b34801561023057600080fd5b5061014161023f366004611b60565b8151602081840181018051600c825292820194820194909420919093529091526000908152604090205481565b34801561027857600080fd5b5061028c610287366004611bae565b6109d0565b60405161014b9190611c17565b3480156102a557600080fd5b506102d86102b4366004611c31565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161014b565b34801561030157600080fd5b50610129610310366004611c70565b610a7c565b34801561032157600080fd5b50610129610330366004611d0d565b610b25565b34801561034157600080fd5b5062989680610141565b34801561035757600080fd5b50600654610141565b34801561036c57600080fd5b5061014160095481565b34801561038257600080fd5b5061014160075481565b34801561039857600080fd5b506101296103a7366004611c31565b610c95565b3480156103b857600080fd5b50600954610141565b3480156103cd57600080fd5b5061028c6103dc366004611bae565b610ce1565b3480156103ed57600080fd5b506103f6610cf1565b60405161014b9190611dbe565b34801561040f57600080fd5b50610418610d53565b60405161014b9190611e60565b34801561043157600080fd5b50610141600a5481565b336000908152600b602052604090206002015460ff166104a25760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f746572730000000000000060448201526064015b60405180910390fd5b600654336000908152600b6020526040902054036104f25760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610499565b336000908152600b602052604081206001810180549087905581546006549092559181900361052257505061067c565b600054841461053257505061067c565b60016006546105419190611e89565b8114158061057e5750848484336040516020016105619493929190611e9c565b6040516020818303038152906040528051906020012060001c8214155b156105fa5760005b6000548110156105f2576001600160ff1b03600c600083815481106105ad576105ad611ee7565b906000526020600020016040516105c49190611f37565b90815260408051602092819003830190203360009081529252902055806105ea81611fad565b915050610586565b50505061067c565b60005b848110156106785785858281811061061757610617611ee7565b90506020020135600c6000838154811061063357610633611ee7565b9060005260206000200160405161064a9190611f37565b908152604080516020928190038301902033600090815292529020558061067081611fad565b9150506105fd565b5050505b50505050565b6106af60405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000600d60016006546106c29190611e89565b815481106106d2576106d2611ee7565b90600052602060002001836040516106ea9190611fc6565b90815260408051918290036020908101832060608401835280548452600180820154928501929092526002015460ff16151583830152815160808101909252600654929350600092829161073d91611e89565b815260200183600001518152602001836020015181526020018360400151151581525090508092505050919050565b61079960405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000600d84815481106107ae576107ae611ee7565b90600052602060002001836040516107c69190611fc6565b9081526040805191829003602090810183206060808501845281548552600182015485840190815260029092015460ff16151585850190815284516080810186528a8152955193860193909352905192840192909252511515908201529150505b92915050565b6002546000906001600160a01b0316331461085a5760405162461bcd60e51b815260040161049990611fe2565b600954600a5461086a9190612025565b43106109ca5760005b6000548110156108985761088681610f11565b610891600182612025565b9050610873565b50600654600754036109155760005b600554811015610913576001600b6000600584815481106108ca576108ca611ee7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805460ff19169115159190911790558061090b81611fad565b9150506108a7565b505b600654600754610926906001612038565b0361093357610933611218565b43600a8190555060016006600082825461094d9190612025565b9091555050600854610960906002612038565b6006540361097a5760018054610978916000916117de565b505b60065460095460408051928352436020840152429083015260608201527fb5d8636ab45e6cac7a4a61cb7c77f77f61a454d73aa2e6139ff8dcaf463537e59060800160405180910390a150600190565b50600090565b600181815481106109e057600080fd5b9060005260206000200160009150905080546109fb90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2790611efd565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b505050505081565b6002546001600160a01b03163314610aa65760405162461bcd60e51b815260040161049990611fe2565b8051600003610aef5760405162461bcd60e51b8152602060048201526015602482015274566f746572732063616e277420626520656d70747960581b6044820152606401610499565b610b0881600060018451610b039190611e89565b6113f5565b8051610b1b906005906020840190611836565b5050600654600755565b6003546001600160a01b03163314610b785760405162461bcd60e51b81526020600482015260166024820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b6044820152606401610499565b8051600003610bc25760405162461bcd60e51b815260206004820152601660248201527573796d626f6c732063616e277420626520656d70747960501b6044820152606401610499565b600654600854610bd3906001612038565b14158015610be5575060065460085414155b610c315760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e6400006044820152606401610499565b8051610c44906001906020840190611897565b5060065460088190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d908290610c7c906001612025565b604051610c8a929190612060565b60405180910390a150565b6002546001600160a01b03163314610cbf5760405162461bcd60e51b815260040161049990611fe2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081815481106109e057600080fd5b60606005805480602002602001604051908101604052809291908181526020018280548015610d4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d2b575b5050505050905090565b60606006546008546001610d679190612038565b03610e43576001805480602002602001604051908101604052809291908181526020016000905b82821015610e3a578382906000526020600020018054610dad90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd990611efd565b8015610e265780601f10610dfb57610100808354040283529160200191610e26565b820191906000526020600020905b815481529060010190602001808311610e0957829003601f168201915b505050505081526020019060010190610d8e565b50505050905090565b6000805480602002602001604051908101604052809291908181526020016000905b82821015610e3a578382906000526020600020018054610e8490611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb090611efd565b8015610efd5780601f10610ed257610100808354040283529160200191610efd565b820191906000526020600020905b815481529060010190602001808311610ee057829003601f168201915b505050505081526020019060010190610e65565b6000808281548110610f2557610f25611ee7565b906000526020600020018054610f3a90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690611efd565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b50505050509050600060048054905067ffffffffffffffff811115610fda57610fda611a11565b604051908082528060200260200182016040528015611003578160200160208202803683370190505b5090506000805b60045481101561111a5760006004828154811061102957611029611ee7565b60009182526020808320909101546006546001600160a01b03909116808452600b90925260409092205490925014158061109d57506001600160ff1b03600c866040516110769190611fc6565b90815260408051602092819003830190206001600160a01b03851660009081529252902054145b156110a85750611108565b600c856040516110b89190611fc6565b90815260408051602092819003830190206001600160a01b0384166000908152925290205484846110e881611fad565b9550815181106110fa576110fa611ee7565b602002602001018181525050505b8061111281611fad565b91505061100a565b506000600d600160065461112e9190611e89565b8154811061113e5761113e611ee7565b90600052602060002001846040516111569190611fc6565b908152604051908190036020019020549050600082156111815761117a84846115a2565b9150600190505b600d80546001018082556000829052604080516060810182528581524260208201528415159181019190915260065490929181106111c1576111c1611ee7565b90600052602060002001866040516111d99190611fc6565b90815260408051602092819003830190208351815591830151600183015591909101516002909101805460ff1916911515919091179055505050505050565b6000805b6004548210801561122e575060055481105b15611373576005818154811061124657611246611ee7565b600091825260209091200154600480546001600160a01b03909216918490811061127257611272611ee7565b6000918252602090912001546001600160a01b0316036112ac578161129681611fad565b92505080806112a490611fad565b91505061121c565b600581815481106112bf576112bf611ee7565b600091825260209091200154600480546001600160a01b0390921691849081106112eb576112eb611ee7565b6000918252602090912001546001600160a01b0316101561136957600b60006004848154811061131d5761131d611ee7565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff191690558161136181611fad565b92505061121c565b806112a481611fad565b6004548210156113e057600b60006004848154811061139457611394611ee7565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff19169055816113d881611fad565b925050611373565b600580546113f0916004916118dd565b505050565b80821261140157505050565b818160008560026114128585612082565b61141c91906120bf565b6114269087612038565b8151811061143657611436611ee7565b602002602001015190505b818313611574575b806001600160a01b031686848151811061146557611465611ee7565b60200260200101516001600160a01b0316101561148e5782611486816120ed565b935050611449565b806001600160a01b03168683815181106114aa576114aa611ee7565b60200260200101516001600160a01b031611156114d357816114cb81612105565b92505061148e565b81831361156f578582815181106114ec576114ec611ee7565b602002602001015186848151811061150657611506611ee7565b602002602001015187858151811061152057611520611ee7565b6020026020010188858151811061153957611539611ee7565b6001600160a01b039384166020918202929092010152911690528261155d816120ed565b935050818061156b90612105565b9250505b611441565b81851215611587576115878686846113f5565b8383121561159a5761159a8684866113f5565b505050505050565b6000816000036115b457506000610827565b6115ca8360006115c5600186611e89565b611666565b60006115d7600284612122565b90506115e4600284612136565b15611608578381815181106115fb576115fb611ee7565b602002602001015161165e565b600284828151811061161c5761161c611ee7565b6020026020010151856001846116329190611e89565b8151811061164257611642611ee7565b60200260200101516116549190612038565b61165e91906120bf565b949350505050565b8181808203611676575050505050565b60008560026116858787612082565b61168f91906120bf565b6116999087612038565b815181106116a9576116a9611ee7565b602002602001015190505b8183136117b8575b808684815181106116cf576116cf611ee7565b602002602001015112156116ef57826116e7816120ed565b9350506116bc565b85828151811061170157611701611ee7565b6020026020010151811215611722578161171a81612105565b9250506116ef565b8183136117b35785828151811061173b5761173b611ee7565b602002602001015186848151811061175557611755611ee7565b602002602001015187858151811061176f5761176f611ee7565b6020026020010188858151811061178857611788611ee7565b602090810291909101019190915252816117a181612105565b92505082806117af906120ed565b9350505b6116b4565b818512156117cb576117cb868684611666565b8383121561159a5761159a868486611666565b8280548282559060005260206000209081019282156118265760005260206000209182015b8281111561182657816118168482612190565b5091600101919060010190611803565b5061183292915061191d565b5090565b82805482825590600052602060002090810192821561188b579160200282015b8281111561188b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611856565b5061183292915061193a565b828054828255906000526020600020908101928215611826579160200282015b8281111561182657825182906118cd9082612271565b50916020019190600101906118b7565b82805482825590600052602060002090810192821561188b5760005260206000209182015b8281111561188b578254825591600101919060010190611902565b80821115611832576000611931828261194f565b5060010161191d565b5b80821115611832576000815560010161193b565b50805461195b90611efd565b6000825580601f1061196b575050565b601f016020900490600052602060002090810190611989919061193a565b50565b600080600080606085870312156119a257600080fd5b84359350602085013567ffffffffffffffff808211156119c157600080fd5b818701915087601f8301126119d557600080fd5b8135818111156119e457600080fd5b8860208260051b85010111156119f957600080fd5b95986020929092019750949560400135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5057611a50611a11565b604052919050565b600082601f830112611a6957600080fd5b813567ffffffffffffffff811115611a8357611a83611a11565b611a96601f8201601f1916602001611a27565b818152846020838601011115611aab57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ada57600080fd5b813567ffffffffffffffff811115611af157600080fd5b61165e84828501611a58565b60008060408385031215611b1057600080fd5b82359150602083013567ffffffffffffffff811115611b2e57600080fd5b611b3a85828601611a58565b9150509250929050565b80356001600160a01b0381168114611b5b57600080fd5b919050565b60008060408385031215611b7357600080fd5b823567ffffffffffffffff811115611b8a57600080fd5b611b9685828601611a58565b925050611ba560208401611b44565b90509250929050565b600060208284031215611bc057600080fd5b5035919050565b60005b83811015611be2578181015183820152602001611bca565b50506000910152565b60008151808452611c03816020860160208601611bc7565b601f01601f19169290920160200192915050565b602081526000611c2a6020830184611beb565b9392505050565b600060208284031215611c4357600080fd5b611c2a82611b44565b600067ffffffffffffffff821115611c6657611c66611a11565b5060051b60200190565b60006020808385031215611c8357600080fd5b823567ffffffffffffffff811115611c9a57600080fd5b8301601f81018513611cab57600080fd5b8035611cbe611cb982611c4c565b611a27565b81815260059190911b82018301908381019087831115611cdd57600080fd5b928401925b82841015611d0257611cf384611b44565b82529284019290840190611ce2565b979650505050505050565b60006020808385031215611d2057600080fd5b823567ffffffffffffffff80821115611d3857600080fd5b818501915085601f830112611d4c57600080fd5b8135611d5a611cb982611c4c565b81815260059190911b83018401908481019088831115611d7957600080fd5b8585015b83811015611db157803585811115611d955760008081fd5b611da38b89838a0101611a58565b845250918601918601611d7d565b5098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611dff5783516001600160a01b031683529284019291840191600101611dda565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611e53578284038952611e41848351611beb565b98850198935090840190600101611e29565b5091979650505050505050565b602081526000611c2a6020830184611e0b565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082757610827611e73565b60008186825b87811015611ec0578135835260209283019290910190600101611ea2565b5050938452505060601b6bffffffffffffffffffffffff1916602082015260340192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611f1157607f821691505b602082108103611f3157634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354611f4581611efd565b60018281168015611f5d5760018114611f7257611fa1565b60ff1984168752821515830287019450611fa1565b8760005260208060002060005b85811015611f985781548a820152908401908201611f7f565b50505082870194505b50929695505050505050565b600060018201611fbf57611fbf611e73565b5060010190565b60008251611fd8818460208701611bc7565b9190910192915050565b60208082526023908201527f7265737472696374656420746f20746865206175746f6e69747920636f6e74726040820152621858dd60ea1b606082015260800190565b8082018082111561082757610827611e73565b808201828112600083128015821682158216171561205857612058611e73565b505092915050565b6040815260006120736040830185611e0b565b90508260208301529392505050565b81810360008312801583831316838312821617156120a2576120a2611e73565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826120ce576120ce6120a9565b600160ff1b8214600019841416156120e8576120e8611e73565b500590565b60006001600160ff1b018201611fbf57611fbf611e73565b6000600160ff1b820161211a5761211a611e73565b506000190190565b600082612131576121316120a9565b500490565b600082612145576121456120a9565b500690565b601f8211156113f057600081815260208120601f850160051c810160208610156121715750805b601f850160051c820191505b8181101561159a5782815560010161217d565b81810361219b575050565b6121a58254611efd565b67ffffffffffffffff8111156121bd576121bd611a11565b6121d1816121cb8454611efd565b8461214a565b6000601f82116001811461220557600083156121ed5750848201545b600019600385901b1c1916600184901b17845561226a565b600085815260209020601f19841690600086815260209020845b8381101561223f578286015482556001958601959091019060200161221f565b508583101561225d5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b815167ffffffffffffffff81111561228b5761228b611a11565b612299816121cb8454611efd565b602080601f8311600181146122ce57600084156122b65750858301515b600019600386901b1c1916600185901b17855561159a565b600085815260208120601f198616915b828110156122fd578886015182559484019460019091019084016122de565b508582101561231b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212203c20d60b3688c4746f988dc74b8b4238d2ea704a050cfa1eb51d85c8e28d03b264736f6c63430008150033", + Bin: "0x6080604052600160ff1b600755600160ff1b6008553480156200002157600080fd5b5060405162002df838038062002df8833981016040819052620000449162000639565b600280546001600160a01b038087166001600160a01b03199283161790925560038054928616929091169190911790558151620000899060009060208501906200035f565b5081516200009f9060019060208501906200035f565b5080600981905550620000c485600060018851620000be91906200074e565b62000181565b8451620000d9906004906020880190620003bc565b508451620000ef906005906020880190620003bc565b5060016006819055600d8054909101815560009081525b855181101562000175576001600b60008884815181106200012b576200012b6200076a565b6020908102919091018101516001600160a01b03168252810191909152604001600020600201805460ff1916911515919091179055806200016c8162000780565b91505062000106565b505050505050620009c3565b8082126200018e57505050565b81816000856002620001a185856200079c565b620001ad9190620007c6565b620001b9908762000806565b81518110620001cc57620001cc6200076a565b602002602001015190505b8183136200032b575b806001600160a01b0316868481518110620001ff57620001ff6200076a565b60200260200101516001600160a01b031610156200022c5782620002238162000831565b935050620001e0565b806001600160a01b03168683815181106200024b576200024b6200076a565b60200260200101516001600160a01b031611156200027857816200026f816200084c565b9250506200022c565b81831362000325578582815181106200029557620002956200076a565b6020026020010151868481518110620002b257620002b26200076a565b6020026020010151878581518110620002cf57620002cf6200076a565b60200260200101888581518110620002eb57620002eb6200076a565b6001600160a01b0393841660209182029290920101529116905282620003118162000831565b935050818062000321906200084c565b9250505b620001d7565b8185121562000341576200034186868462000181565b8383121562000357576200035786848662000181565b505050505050565b828054828255906000526020600020908101928215620003aa579160200282015b82811115620003aa5782518290620003999082620008f7565b509160200191906001019062000380565b50620003b892915062000422565b5090565b82805482825590600052602060002090810192821562000414579160200282015b828111156200041457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003dd565b50620003b892915062000443565b80821115620003b85760006200043982826200045a565b5060010162000422565b5b80821115620003b8576000815560010162000444565b50805462000468906200086c565b6000825580601f1062000479575050565b601f01602090049060005260206000209081019062000499919062000443565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620004dd57620004dd6200049c565b604052919050565b60006001600160401b038211156200050157620005016200049c565b5060051b60200190565b80516001600160a01b03811681146200052357600080fd5b919050565b6000601f83818401126200053b57600080fd5b82516020620005546200054e83620004e5565b620004b2565b82815260059290921b850181019181810190878411156200057457600080fd5b8287015b848110156200062d5780516001600160401b03808211156200059a5760008081fd5b818a0191508a603f830112620005b05760008081fd5b8582015181811115620005c757620005c76200049c565b620005da818a01601f19168801620004b2565b915080825260408c81838601011115620005f45760008081fd5b60005b8281101562000614578481018201518482018a01528801620005f7565b5050600090820187015284525091830191830162000578565b50979650505050505050565b600080600080600060a086880312156200065257600080fd5b85516001600160401b03808211156200066a57600080fd5b818801915088601f8301126200067f57600080fd5b81516020620006926200054e83620004e5565b82815260059290921b8401810191818101908c841115620006b257600080fd5b948201945b83861015620006db57620006cb866200050b565b82529482019490820190620006b7565b9950620006ec90508a82016200050b565b97505050620006fe604089016200050b565b945060608801519150808211156200071557600080fd5b50620007248882890162000528565b925050608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000764576200076462000738565b92915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000795576200079562000738565b5060010190565b8181036000831280158383131683831282161715620007bf57620007bf62000738565b5092915050565b600082620007e457634e487b7160e01b600052601260045260246000fd5b600160ff1b82146000198414161562000801576200080162000738565b500590565b808201828112600083128015821682158216171562000829576200082962000738565b505092915050565b60006001600160ff1b01820162000795576200079562000738565b6000600160ff1b820162000864576200086462000738565b506000190190565b600181811c908216806200088157607f821691505b602082108103620008a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008f257600081815260208120601f850160051c81016020861015620008d15750805b601f850160051c820191505b818110156200035757828155600101620008dd565b505050565b81516001600160401b038111156200091357620009136200049c565b6200092b816200092484546200086c565b84620008a8565b602080601f8311600181146200096357600084156200094a5750858301515b600019600386901b1c1916600185901b17855562000357565b600085815260208120601f198616915b82811015620009945788860151825594840194600190910190840162000973565b5085821015620009b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61242580620009d36000396000f3fe6080604052600436106101225760003560e01c80638d4f75d2116100a5578063b3ab15fb1161006c578063b3ab15fb1461038a578063b78dec52146103aa578063ccce413b146103bf578063cdd72253146103df578063df7f710e14610401578063e6a02a281461042357005b80638d4f75d2146103135780639670c0bc146103335780639f8743f714610349578063a78135871461035e578063aa2f89b51461037457005b80634bb278f3116100e95780634bb278f3146101fd5780634c56ea56146102225780635281b5c61461026a5780635412b3ae14610297578063845023f2146102f357005b806308f21ff51461012b578063146ca53114610154578063307de9b61461016a57806333f98c771461018a5780633c8510fd146101dd57005b3661012957005b005b34801561013757600080fd5b5061014160085481565b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061014160065481565b34801561017657600080fd5b50610129610185366004611a3a565b610439565b34801561019657600080fd5b506101aa6101a5366004611b76565b610680565b60405161014b91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156101e957600080fd5b506101aa6101f8366004611bab565b6107a3565b34801561020957600080fd5b506102126108ad565b604051901515815260200161014b565b34801561022e57600080fd5b5061014161023d366004611c0e565b8151602081840181018051600c825292820194820194909420919093529091526000908152604090205481565b34801561027657600080fd5b5061028a610285366004611c5c565b610a50565b60405161014b9190611cc5565b3480156102a357600080fd5b506102d66102b2366004611cdf565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161014b565b3480156102ff57600080fd5b5061012961030e366004611d1e565b610afc565b34801561031f57600080fd5b5061012961032e366004611dbb565b610ba5565b34801561033f57600080fd5b5062989680610141565b34801561035557600080fd5b50600654610141565b34801561036a57600080fd5b5061014160095481565b34801561038057600080fd5b5061014160075481565b34801561039657600080fd5b506101296103a5366004611cdf565b610d15565b3480156103b657600080fd5b50600954610141565b3480156103cb57600080fd5b5061028a6103da366004611c5c565b610d61565b3480156103eb57600080fd5b506103f4610d71565b60405161014b9190611e6c565b34801561040d57600080fd5b50610416610dd3565b60405161014b9190611f0e565b34801561042f57600080fd5b50610141600a5481565b336000908152600b602052604090206002015460ff166104a05760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f746572730000000000000060448201526064015b60405180910390fd5b600654336000908152600b6020526040902054036104f05760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610497565b336000908152600b602052604081206001810180549087905581546006549092559181900361052057505061067a565b600054841461053057505061067a565b600160065461053f9190611f37565b8114158061057c57508484843360405160200161055f9493929190611f4a565b6040516020818303038152906040528051906020012060001c8214155b156105f85760005b6000548110156105f0576001600160ff1b03600c600083815481106105ab576105ab611f95565b906000526020600020016040516105c29190611fe5565b90815260408051602092819003830190203360009081529252902055806105e88161205b565b915050610584565b50505061067a565b60005b848110156106765785858281811061061557610615611f95565b90506020020135600c6000838154811061063157610631611f95565b906000526020600020016040516106489190611fe5565b908152604080516020928190038301902033600090815292529020558061066e8161205b565b9150506105fb565b5050505b50505050565b6106ab6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000600d60016006546106be9190611f37565b815481106106ce576106ce611f95565b90600052602060002001836040516106e69190612074565b908152602001604051809103902060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff16600181111561073757610737612090565b600181111561074857610748612090565b81525050905060006040518060800160405280600160065461076a9190611f37565b815260200183600001518152602001836020015181526020018360400151600181111561079957610799612090565b9052949350505050565b6107ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000600d84815481106107e3576107e3611f95565b90600052602060002001836040516107fb9190612074565b908152602001604051809103902060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff16600181111561084c5761084c612090565b600181111561085d5761085d612090565b815250509050600060405180608001604052808681526020018360000151815260200183602001518152602001836040015160018111156108a0576108a0612090565b9052925050505b92915050565b6002546000906001600160a01b031633146108da5760405162461bcd60e51b8152600401610497906120a6565b600954600a546108ea91906120e9565b4310610a4a5760005b6000548110156109185761090681610f91565b6109116001826120e9565b90506108f3565b50600654600754036109955760005b600554811015610993576001600b60006005848154811061094a5761094a611f95565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805460ff19169115159190911790558061098b8161205b565b915050610927565b505b6006546007546109a69060016120fc565b036109b3576109b36112c6565b43600a819055506001600660008282546109cd91906120e9565b90915550506008546109e09060026120fc565b600654036109fa57600180546109f89160009161188c565b505b60065460095460408051928352436020840152429083015260608201527fb5d8636ab45e6cac7a4a61cb7c77f77f61a454d73aa2e6139ff8dcaf463537e59060800160405180910390a150600190565b50600090565b60018181548110610a6057600080fd5b906000526020600020016000915090508054610a7b90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa790611fab565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b505050505081565b6002546001600160a01b03163314610b265760405162461bcd60e51b8152600401610497906120a6565b8051600003610b6f5760405162461bcd60e51b8152602060048201526015602482015274566f746572732063616e277420626520656d70747960581b6044820152606401610497565b610b8881600060018451610b839190611f37565b6114a3565b8051610b9b9060059060208401906118e4565b5050600654600755565b6003546001600160a01b03163314610bf85760405162461bcd60e51b81526020600482015260166024820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b6044820152606401610497565b8051600003610c425760405162461bcd60e51b815260206004820152601660248201527573796d626f6c732063616e277420626520656d70747960501b6044820152606401610497565b600654600854610c539060016120fc565b14158015610c65575060065460085414155b610cb15760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e6400006044820152606401610497565b8051610cc4906001906020840190611945565b5060065460088190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d908290610cfc9060016120e9565b604051610d0a929190612124565b60405180910390a150565b6002546001600160a01b03163314610d3f5760405162461bcd60e51b8152600401610497906120a6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60008181548110610a6057600080fd5b60606005805480602002602001604051908101604052809291908181526020018280548015610dc957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dab575b5050505050905090565b60606006546008546001610de791906120fc565b03610ec3576001805480602002602001604051908101604052809291908181526020016000905b82821015610eba578382906000526020600020018054610e2d90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990611fab565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081526020019060010190610e0e565b50505050905090565b6000805480602002602001604051908101604052809291908181526020016000905b82821015610eba578382906000526020600020018054610f0490611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090611fab565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081526020019060010190610ee5565b6000808281548110610fa557610fa5611f95565b906000526020600020018054610fba90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe690611fab565b80156110335780601f1061100857610100808354040283529160200191611033565b820191906000526020600020905b81548152906001019060200180831161101657829003601f168201915b50505050509050600060048054905067ffffffffffffffff81111561105a5761105a611abf565b604051908082528060200260200182016040528015611083578160200160208202803683370190505b5090506000805b60045481101561119a576000600482815481106110a9576110a9611f95565b60009182526020808320909101546006546001600160a01b03909116808452600b90925260409092205490925014158061111d57506001600160ff1b03600c866040516110f69190612074565b90815260408051602092819003830190206001600160a01b03851660009081529252902054145b156111285750611188565b600c856040516111389190612074565b90815260408051602092819003830190206001600160a01b0384166000908152925290205484846111688161205b565b95508151811061117a5761117a611f95565b602002602001018181525050505b806111928161205b565b91505061108a565b506000600d60016006546111ae9190611f37565b815481106111be576111be611f95565b90600052602060002001846040516111d69190612074565b90815260405190819003602001902054905060018215611201576111fa8484611650565b9150600090505b600d805460019081018255600091909152604080516060810182528481524260208201529190820190839081111561123b5761123b612090565b815250600d6006548154811061125357611253611f95565b906000526020600020018660405161126b9190612074565b9081526020016040518091039020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908360018111156112b7576112b7612090565b02179055505050505050505050565b6000805b600454821080156112dc575060055481105b1561142157600581815481106112f4576112f4611f95565b600091825260209091200154600480546001600160a01b03909216918490811061132057611320611f95565b6000918252602090912001546001600160a01b03160361135a57816113448161205b565b92505080806113529061205b565b9150506112ca565b6005818154811061136d5761136d611f95565b600091825260209091200154600480546001600160a01b03909216918490811061139957611399611f95565b6000918252602090912001546001600160a01b0316101561141757600b6000600484815481106113cb576113cb611f95565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff191690558161140f8161205b565b9250506112ca565b806113528161205b565b60045482101561148e57600b60006004848154811061144257611442611f95565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff19169055816114868161205b565b925050611421565b6005805461149e9160049161198b565b505050565b8082126114af57505050565b818160008560026114c08585612146565b6114ca9190612183565b6114d490876120fc565b815181106114e4576114e4611f95565b602002602001015190505b818313611622575b806001600160a01b031686848151811061151357611513611f95565b60200260200101516001600160a01b0316101561153c5782611534816121b1565b9350506114f7565b806001600160a01b031686838151811061155857611558611f95565b60200260200101516001600160a01b031611156115815781611579816121c9565b92505061153c565b81831361161d5785828151811061159a5761159a611f95565b60200260200101518684815181106115b4576115b4611f95565b60200260200101518785815181106115ce576115ce611f95565b602002602001018885815181106115e7576115e7611f95565b6001600160a01b039384166020918202929092010152911690528261160b816121b1565b9350508180611619906121c9565b9250505b6114ef565b81851215611635576116358686846114a3565b83831215611648576116488684866114a3565b505050505050565b600081600003611662575060006108a7565b611678836000611673600186611f37565b611714565b60006116856002846121e6565b90506116926002846121fa565b156116b6578381815181106116a9576116a9611f95565b602002602001015161170c565b60028482815181106116ca576116ca611f95565b6020026020010151856001846116e09190611f37565b815181106116f0576116f0611f95565b602002602001015161170291906120fc565b61170c9190612183565b949350505050565b8181808203611724575050505050565b60008560026117338787612146565b61173d9190612183565b61174790876120fc565b8151811061175757611757611f95565b602002602001015190505b818313611866575b8086848151811061177d5761177d611f95565b6020026020010151121561179d5782611795816121b1565b93505061176a565b8582815181106117af576117af611f95565b60200260200101518112156117d057816117c8816121c9565b92505061179d565b818313611861578582815181106117e9576117e9611f95565b602002602001015186848151811061180357611803611f95565b602002602001015187858151811061181d5761181d611f95565b6020026020010188858151811061183657611836611f95565b6020908102919091010191909152528161184f816121c9565b925050828061185d906121b1565b9350505b611762565b8185121561187957611879868684611714565b8383121561164857611648868486611714565b8280548282559060005260206000209081019282156118d45760005260206000209182015b828111156118d457816118c48482612254565b50916001019190600101906118b1565b506118e09291506119cb565b5090565b828054828255906000526020600020908101928215611939579160200282015b8281111561193957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611904565b506118e09291506119e8565b8280548282559060005260206000209081019282156118d4579160200282015b828111156118d4578251829061197b9082612335565b5091602001919060010190611965565b8280548282559060005260206000209081019282156119395760005260206000209182015b828111156119395782548255916001019190600101906119b0565b808211156118e05760006119df82826119fd565b506001016119cb565b5b808211156118e057600081556001016119e9565b508054611a0990611fab565b6000825580601f10611a19575050565b601f016020900490600052602060002090810190611a3791906119e8565b50565b60008060008060608587031215611a5057600080fd5b84359350602085013567ffffffffffffffff80821115611a6f57600080fd5b818701915087601f830112611a8357600080fd5b813581811115611a9257600080fd5b8860208260051b8501011115611aa757600080fd5b95986020929092019750949560400135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611afe57611afe611abf565b604052919050565b600082601f830112611b1757600080fd5b813567ffffffffffffffff811115611b3157611b31611abf565b611b44601f8201601f1916602001611ad5565b818152846020838601011115611b5957600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611b8857600080fd5b813567ffffffffffffffff811115611b9f57600080fd5b61170c84828501611b06565b60008060408385031215611bbe57600080fd5b82359150602083013567ffffffffffffffff811115611bdc57600080fd5b611be885828601611b06565b9150509250929050565b80356001600160a01b0381168114611c0957600080fd5b919050565b60008060408385031215611c2157600080fd5b823567ffffffffffffffff811115611c3857600080fd5b611c4485828601611b06565b925050611c5360208401611bf2565b90509250929050565b600060208284031215611c6e57600080fd5b5035919050565b60005b83811015611c90578181015183820152602001611c78565b50506000910152565b60008151808452611cb1816020860160208601611c75565b601f01601f19169290920160200192915050565b602081526000611cd86020830184611c99565b9392505050565b600060208284031215611cf157600080fd5b611cd882611bf2565b600067ffffffffffffffff821115611d1457611d14611abf565b5060051b60200190565b60006020808385031215611d3157600080fd5b823567ffffffffffffffff811115611d4857600080fd5b8301601f81018513611d5957600080fd5b8035611d6c611d6782611cfa565b611ad5565b81815260059190911b82018301908381019087831115611d8b57600080fd5b928401925b82841015611db057611da184611bf2565b82529284019290840190611d90565b979650505050505050565b60006020808385031215611dce57600080fd5b823567ffffffffffffffff80821115611de657600080fd5b818501915085601f830112611dfa57600080fd5b8135611e08611d6782611cfa565b81815260059190911b83018401908481019088831115611e2757600080fd5b8585015b83811015611e5f57803585811115611e435760008081fd5b611e518b89838a0101611b06565b845250918601918601611e2b565b5098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ead5783516001600160a01b031683529284019291840191600101611e88565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611f01578284038952611eef848351611c99565b98850198935090840190600101611ed7565b5091979650505050505050565b602081526000611cd86020830184611eb9565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a7576108a7611f21565b60008186825b87811015611f6e578135835260209283019290910190600101611f50565b5050938452505060601b6bffffffffffffffffffffffff1916602082015260340192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611fbf57607f821691505b602082108103611fdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354611ff381611fab565b6001828116801561200b57600181146120205761204f565b60ff198416875282151583028701945061204f565b8760005260208060002060005b858110156120465781548a82015290840190820161202d565b50505082870194505b50929695505050505050565b60006001820161206d5761206d611f21565b5060010190565b60008251612086818460208701611c75565b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b60208082526023908201527f7265737472696374656420746f20746865206175746f6e69747920636f6e74726040820152621858dd60ea1b606082015260800190565b808201808211156108a7576108a7611f21565b808201828112600083128015821682158216171561211c5761211c611f21565b505092915050565b6040815260006121376040830185611eb9565b90508260208301529392505050565b818103600083128015838313168383128216171561216657612166611f21565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826121925761219261216d565b600160ff1b8214600019841416156121ac576121ac611f21565b500590565b60006001600160ff1b01820161206d5761206d611f21565b6000600160ff1b82016121de576121de611f21565b506000190190565b6000826121f5576121f561216d565b500490565b6000826122095761220961216d565b500690565b601f82111561149e57600081815260208120601f850160051c810160208610156122355750805b601f850160051c820191505b8181101561164857828155600101612241565b81810361225f575050565b6122698254611fab565b67ffffffffffffffff81111561228157612281611abf565b6122958161228f8454611fab565b8461220e565b6000601f8211600181146122c957600083156122b15750848201545b600019600385901b1c1916600184901b17845561232e565b600085815260209020601f19841690600086815260209020845b8381101561230357828601548255600195860195909101906020016122e3565b50858310156123215781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b815167ffffffffffffffff81111561234f5761234f611abf565b61235d8161228f8454611fab565b602080601f831160018114612392576000841561237a5750858301515b600019600386901b1c1916600185901b178555611648565b600085815260208120601f198616915b828110156123c1578886015182559484019460019091019084016123a2565b50858210156123df5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122068031b136be48d163f8475c337216a54400c89da096cc3efb3384bf7d9c52f0d64736f6c63430008150033", } // OracleABI is the input ABI used to generate the binding from. @@ -15784,7 +16444,7 @@ func (_Oracle *OracleCallerSession) GetRound() (*big.Int, error) { // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int, _symbol string) (IOracleRoundData, error) { var out []interface{} err := _Oracle.contract.Call(opts, &out, "getRoundData", _round, _symbol) @@ -15801,14 +16461,14 @@ func (_Oracle *OracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int, // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) { return _Oracle.Contract.GetRoundData(&_Oracle.CallOpts, _round, _symbol) } // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleCallerSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) { return _Oracle.Contract.GetRoundData(&_Oracle.CallOpts, _round, _symbol) } @@ -15970,7 +16630,7 @@ func (_Oracle *OracleCallerSession) LastVoterUpdateRound() (*big.Int, error) { // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol string) (IOracleRoundData, error) { var out []interface{} err := _Oracle.contract.Call(opts, &out, "latestRoundData", _symbol) @@ -15987,14 +16647,14 @@ func (_Oracle *OracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol string // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleSession) LatestRoundData(_symbol string) (IOracleRoundData, error) { return _Oracle.Contract.LatestRoundData(&_Oracle.CallOpts, _symbol) } // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *OracleCallerSession) LatestRoundData(_symbol string) (IOracleRoundData, error) { return _Oracle.Contract.LatestRoundData(&_Oracle.CallOpts, _symbol) } @@ -17264,7 +17924,7 @@ var StabilizationMetaData = &bind.MetaData{ "fbbe6991": "underCollateralized(uint256,uint256,uint256,uint256)", "2e1a7d4d": "withdraw(uint256)", }, - Bin: "0x60806040523480156200001157600080fd5b506040516200270b3803806200270b83398101604081905262000034916200012e565b8560400151806000036200005b57604051630309cb8760e51b815260040160405180910390fd5b866020015187604001518082106200008657604051630309cb8760e51b815260040160405180910390fd5b5050865160005550602086015160015560408601516002556060860151600355608090950151600455600780546001600160a01b03199081166001600160a01b039687161790915560088054821694861694909417909355600a8054841692851692909217909155600b8054831691841691909117905560098054909116919092161790556200021c565b80516001600160a01b03811681146200012957600080fd5b919050565b6000806000806000808688036101408112156200014a57600080fd5b60a08112156200015957600080fd5b5060405160a081016001600160401b03811182821017156200018b57634e487b7160e01b600052604160045260246000fd5b8060405250875181526020880151602082015260408801516040820152606088015160608201526080880151608082015280965050620001ce60a0880162000111565b9450620001de60c0880162000111565b9350620001ee60e0880162000111565b9250620001ff610100880162000111565b915062000210610120880162000111565b90509295509295509295565b6124df806200022c6000396000f3fe6080604052600436106101665760003560e01c806368cd03f6116100d1578063946ce8cd1161008a578063c5ebeaec11610064578063c5ebeaec1461046b578063ce4b5bbe1461048b578063eced5526146104a0578063fbbe6991146104b557600080fd5b8063946ce8cd1461040b578063b3ab15fb1461042b578063b6b55f251461044b57600080fd5b806368cd03f6146102d857806379502c55146102fa5780637adbf973146103495780637b44646a1461036957806383baa17414610389578063840c7e24146103a957600080fd5b806350bf06bf1161012357806350bf06bf1461022b57806352e5a0501461024b57806353afe81d1461026b57806354a9f42c1461028b5780635891de72146102ab5780635dcc9391146102c057600080fd5b8063042e02cf1461016b57806308796696146101a057806315184245146101ce5780632e1a7d4d146101ee5780632f86556814610210578063402d888314610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461211b565b6104d5565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612136565b61051d565b604051908152602001610197565b3480156101da57600080fd5b506101c06101e9366004612162565b610587565b3480156101fa57600080fd5b5061020e610209366004612194565b610617565b005b61020e61021e36600461211b565b6107e5565b61020e610a27565b34801561023757600080fd5b506101c06102463660046121ad565b610bff565b34801561025757600080fd5b5061020e61026636600461211b565b610c6b565b34801561027757600080fd5b5061020e610286366004612194565b610cb7565b34801561029757600080fd5b506101c06102a636600461211b565b610ce6565b3480156102b757600080fd5b506101c0610d5d565b3480156102cc57600080fd5b506101c06301e1338081565b3480156102e457600080fd5b506102ed610ffc565b60405161019791906121d7565b34801561030657600080fd5b50600054600154600254600354600454610321949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610197565b34801561035557600080fd5b5061020e61036436600461211b565b61105e565b34801561037557600080fd5b5061020e610384366004612194565b6110aa565b34801561039557600080fd5b506101c06103a4366004612162565b611122565b3480156103b557600080fd5b506103eb6103c436600461211b565b60056020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610197565b34801561041757600080fd5b5061020e610426366004612194565b611178565b34801561043757600080fd5b5061020e61044636600461211b565b6111ce565b34801561045757600080fd5b5061020e610466366004612194565b61121a565b34801561047757600080fd5b5061020e610486366004612194565b611419565b34801561049757600080fd5b506101c06115e5565b3480156104ac57600080fd5b506101c0601281565b3480156104c157600080fd5b5061018b6104d0366004612162565b6115f4565b6001600160a01b0381166000908152600560205260408120816104f8824261164b565b509050610515826001015461050b610d5d565b60015484906115f4565b949350505050565b600082806000036105405760405162bfc92160e01b815260040160405180910390fd5b83158061054b575082155b1561056957604051630309cb8760e51b815260040160405180910390fd5b83610574848761223a565b61057e9190612267565b95945050505050565b6000818311156105aa57604051630309cb8760e51b815260040160405180910390fd5b848460006105cc6301e133806105c66105c38989612289565b90565b906116c1565b905060006105e26105dd84846116e0565b6116ef565b905060006106096106026105fb6105c36012600a612380565b8490611742565b86906116e0565b9a9950505050505050505050565b80806000036106395760405163162908e360e11b815260040160405180910390fd5b336000908152600560205260409020600181015483111561066d5760405163162908e360e11b815260040160405180910390fd5b6000610679824261164b565b5090506000610686610d5d565b905061069d836001015482846000600101546115f4565b156106bb57604051636229415360e01b815260040160405180910390fd5b6106cf83600201548260006002015461051d565b8584600101546106df9190612289565b10156106fe57604051633a23d82560e01b815260040160405180910390fd5b848360010160008282546107129190612289565b909155505060095460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c919061239c565b6107a9576040516312171d8360e31b815260040160405180910390fd5b60405185815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050505050565b3460000361080657604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b0381166000908152600560205260408120600281015490910361084357604051638aa5baf360e01b815260040160405180910390fd5b600080610850834261164b565b9150915061086e8360010154610864610d5d565b60015485906115f4565b61088b57604051636ef5bcdd60e11b815260040160405180910390fd5b60006108978334612289565b905060018401805442865560009182905560028601829055600386019190915560095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061239c565b610949576040516312171d8360e31b815260040160405180910390fd5b600b546001600160a01b03166344df8e706109648587612289565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050505060008211156109e057604051339083156108fc029084906000818181858888f193505050501580156109de573d6000803e3d6000fd5b505b6040513381526001600160a01b038716907fc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4906020015b60405180910390a2505050505050565b34600003610a4857604051637c946ed760e01b815260040160405180910390fd5b3360009081526005602052604081206002810154909103610a7c57604051638aa5baf360e01b815260040160405180910390fd5b600080610a89834261164b565b915091508134108015610aa65750600354610aa43484612289565b105b15610ac45760405163e6bd447960e01b815260040160405180910390fd5b80836003016000828254610ad891906123b7565b909155505042835560008080610aee8634611751565b92509250925081866002016000828254610b089190612289565b9250508190555082866003016000828254610b239190612289565b90915550508115610b9857600b60009054906101000a90046001600160a01b03166001600160a01b03166344df8e70836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7e57600080fd5b505af1158015610b92573d6000803e3d6000fd5b50505050505b8015610bcd57604051339082156108fc029083906000818181858888f19350505050158015610bcb573d6000803e3d6000fd5b505b60405134815233907f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a59423190602001610a17565b6001600160a01b0382166000908152600560205260408120805484918491821015610c3d57604051630309cb8760e51b815260040160405180910390fd5b6001600160a01b0386166000908152600560205260409020610c5f818761164b565b50979650505050505050565b6008546001600160a01b03163314610c95576040516282b42960e81b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610ce1576040516282b42960e81b815260040160405180910390fd5b600355565b6040516350bf06bf60e01b81526001600160a01b038216600482015242602482015260009030906350bf06bf90604401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5791906123ca565b92915050565b600a546040805180820182526007815266272a2716a0aa2760c91b602082015290516333f98c7760e01b815260009283926001600160a01b03909116916333f98c7791610dac916004016123e3565b608060405180830381865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190612431565b90508060600151610e115760405163cb08be8160e01b815260040160405180910390fd5b6000816020015113610e355760405162bfc92160e01b815260040160405180910390fd5b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906123ca565b610eb86012600a612380565b1115610f6057600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906123ca565b610f416012600a612380565b610f4b9190612267565b8160200151610f5a919061223a565b91505090565b610f6c6012600a612380565b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906123ca565b610fed9190612267565b8160200151610f5a9190612267565b6060600680548060200260200160405190810160405280929190818152602001828054801561105457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611036575b5050505050905090565b6007546001600160a01b03163314611088576040516282b42960e81b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b80806000036110cc57604051630309cb8760e51b815260040160405180910390fd5b600154828082106110f057604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b0316331461111a576040516282b42960e81b815260040160405180910390fd5b505050600255565b600083158061112f575081155b1561114d57604051630309cb8760e51b815260040160405180910390fd5b6111596012600a612380565b611163908361223a565b8361116e868861223a565b610574919061223a565b600254819080821061119d57604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b031633146111c7576040516282b42960e81b815260040160405180910390fd5b5050600155565b6007546001600160a01b031633146111f8576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b808060000361123c5760405163162908e360e11b815260040160405180910390fd5b600954604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae91906123ca565b10156112cd576040516313be252b60e01b815260040160405180910390fd5b336000908152600560205260408120805490910361132857600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b4281556001810180548491906000906113429084906123b7565b90915550506009546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c2919061239c565b6113df576040516312171d8360e31b815260040160405180910390fd5b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2505050565b808060000361143b5760405163162908e360e11b815260040160405180910390fd5b3360009081526005602052604081209080611456834261164b565b909250905061146585836123b7565b60035490925082101561148b5760405163e6bd447960e01b815260040160405180910390fd5b6000611495610d5d565b90506114ac846001015482856000600101546115f4565b156114ca57604051636229415360e01b815260040160405180910390fd5b60006114e6856001015483600060040154600060020154611122565b90508084111561150957604051633a23d82560e01b815260040160405180910390fd5b4285556002850180548891906000906115239084906123b7565b925050819055508285600301600082825461153e91906123b7565b9091555050600b546040516340c10f1960e01b8152336004820152602481018990526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b50506040518981523392507fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750915060200160405180910390a250505050505050565b6115f16012600a612380565b81565b600083806000036116175760405162bfc92160e01b815260040160405180910390fd5b836000036116285760009150611642565b8284611634878961223a565b61163e9190612267565b1091505b50949350505050565b6000808260000361166f57604051630309cb8760e51b815260040160405180910390fd5b60008460030154856002015461168591906123b7565b8554909150840361169957600091506116ad565b60005485546116aa91839187610587565b91505b6116b782826123b7565b9250509250929050565b60006116d96105c384670de0b6b3a7640000856117c5565b9392505050565b60006116d96105c38484611898565b600081680736ea4425c11ac63081111561172457604051630d7b1d6560e11b8152600481018490526024015b60405180910390fd5b6714057b7ef767814f8102610515670de0b6b3a7640000820461194e565b60006116d96105c38385612289565b6000806000808560030154866002015461176b91906123b7565b905085600301548510611782578560030154611784565b845b93508085106117975785600201546117a1565b6117a18486612289565b92508085116117b15760006117bb565b6117bb8186612289565b9150509250925092565b60008080600019858709858702925082811083820303915050806000036117ff578382816117f5576117f5612251565b04925050506116d9565b83811061183057604051630c740aef60e31b815260048101879052602481018690526044810185905260640161171b565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008080600019848609848602925082811083820303915050806000036118cc5750670de0b6b3a764000090049050610d57565b670de0b6b3a764000081106118fe57604051635173648d60e01b8152600481018690526024810185905260440161171b565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600081680a688906bd8affffff81111561197e5760405163b3b6ba1f60e01b81526004810184905260240161171b565b6000611996670de0b6b3a7640000604084901b612267565b90506105156105c382600160bf1b67ff00000000000000821615611aac576780000000000000008216156119d35768016a09e667f3bcc9090260401c5b6740000000000000008216156119f2576801306fe0a31b7152df0260401c5b672000000000000000821615611a11576801172b83c7d517adce0260401c5b671000000000000000821615611a305768010b5586cf9890f62a0260401c5b670800000000000000821615611a4f576801059b0d31585743ae0260401c5b670400000000000000821615611a6e57680102c9a3e778060ee70260401c5b670200000000000000821615611a8d5768010163da9fb33356d80260401c5b670100000000000000821615611aac57680100b1afa5abcbed610260401c5b66ff000000000000821615611bab576680000000000000821615611ad95768010058c86da1c09ea20260401c5b6640000000000000821615611af7576801002c605e2e8cec500260401c5b6620000000000000821615611b1557680100162f3904051fa10260401c5b6610000000000000821615611b33576801000b175effdc76ba0260401c5b6608000000000000821615611b5157680100058ba01fb9f96d0260401c5b6604000000000000821615611b6f5768010002c5cc37da94920260401c5b6602000000000000821615611b8d576801000162e525ee05470260401c5b6601000000000000821615611bab5768010000b17255775c040260401c5b65ff0000000000821615611ca15765800000000000821615611bd6576801000058b91b5bc9ae0260401c5b65400000000000821615611bf357680100002c5c89d5ec6d0260401c5b65200000000000821615611c105768010000162e43f4f8310260401c5b65100000000000821615611c2d57680100000b1721bcfc9a0260401c5b65080000000000821615611c4a5768010000058b90cf1e6e0260401c5b65040000000000821615611c67576801000002c5c863b73f0260401c5b65020000000000821615611c8457680100000162e430e5a20260401c5b65010000000000821615611ca1576801000000b1721835510260401c5b64ff00000000821615611d8e57648000000000821615611cca57680100000058b90c0b490260401c5b644000000000821615611ce65768010000002c5c8601cc0260401c5b642000000000821615611d02576801000000162e42fff00260401c5b641000000000821615611d1e5768010000000b17217fbb0260401c5b640800000000821615611d3a576801000000058b90bfce0260401c5b640400000000821615611d5657680100000002c5c85fe30260401c5b640200000000821615611d725768010000000162e42ff10260401c5b640100000000821615611d8e57680100000000b17217f80260401c5b63ff000000821615611e72576380000000821615611db55768010000000058b90bfc0260401c5b6340000000821615611dd0576801000000002c5c85fe0260401c5b6320000000821615611deb57680100000000162e42ff0260401c5b6310000000821615611e06576801000000000b17217f0260401c5b6308000000821615611e2157680100000000058b90c00260401c5b6304000000821615611e3c5768010000000002c5c8600260401c5b6302000000821615611e57576801000000000162e4300260401c5b6301000000821615611e725768010000000000b172180260401c5b62ff0000821615611f4d5762800000821615611e97576801000000000058b90c0260401c5b62400000821615611eb157680100000000002c5c860260401c5b62200000821615611ecb5768010000000000162e430260401c5b62100000821615611ee557680100000000000b17210260401c5b62080000821615611eff5768010000000000058b910260401c5b62040000821615611f19576801000000000002c5c80260401c5b62020000821615611f3357680100000000000162e40260401c5b62010000821615611f4d576801000000000000b1720260401c5b61ff0082161561201f57618000821615611f7057680100000000000058b90260401c5b614000821615611f895768010000000000002c5d0260401c5b612000821615611fa2576801000000000000162e0260401c5b611000821615611fbb5768010000000000000b170260401c5b610800821615611fd4576801000000000000058c0260401c5b610400821615611fed57680100000000000002c60260401c5b61020082161561200657680100000000000001630260401c5b61010082161561201f57680100000000000000b10260401c5b60ff8216156120e857608082161561204057680100000000000000590260401c5b6040821615612058576801000000000000002c0260401c5b602082161561207057680100000000000000160260401c5b6010821615612088576801000000000000000b0260401c5b60088216156120a057680100000000000000060260401c5b60048216156120b857680100000000000000030260401c5b60028216156120d057680100000000000000010260401c5b60018216156120e857680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b038116811461211657600080fd5b919050565b60006020828403121561212d57600080fd5b6116d9826120ff565b60008060006060848603121561214b57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561217857600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156121a657600080fd5b5035919050565b600080604083850312156121c057600080fd5b6121c9836120ff565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156122185783516001600160a01b0316835292840192918401916001016121f3565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d5757610d57612224565b634e487b7160e01b600052601260045260246000fd5b60008261228457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d5757610d57612224565b600181815b808511156122d75781600019048211156122bd576122bd612224565b808516156122ca57918102915b93841c93908002906122a1565b509250929050565b6000826122ee57506001610d57565b816122fb57506000610d57565b8160018114612311576002811461231b57612337565b6001915050610d57565b60ff84111561232c5761232c612224565b50506001821b610d57565b5060208310610133831016604e8410600b841016171561235a575081810a610d57565b612364838361229c565b806000190482111561237857612378612224565b029392505050565b60006116d983836122df565b8051801515811461211657600080fd5b6000602082840312156123ae57600080fd5b6116d98261238c565b80820180821115610d5757610d57612224565b6000602082840312156123dc57600080fd5b5051919050565b600060208083528351808285015260005b81811015612410578581018301518582016040015282016123f4565b506000604082860101526040601f19601f8301168501019250505092915050565b60006080828403121561244357600080fd5b6040516080810181811067ffffffffffffffff8211171561247457634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015261249d6060840161238c565b6060820152939250505056fea26469706673582212205e4bfdf4203cb01af8837cfd66ec92911a19965cd9945a1f62ad7f992027f06c64736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b50604051620027013803806200270183398101604081905262000034916200012e565b8560400151806000036200005b57604051630309cb8760e51b815260040160405180910390fd5b866020015187604001518082106200008657604051630309cb8760e51b815260040160405180910390fd5b5050865160005550602086015160015560408601516002556060860151600355608090950151600455600780546001600160a01b03199081166001600160a01b039687161790915560088054821694861694909417909355600a8054841692851692909217909155600b8054831691841691909117905560098054909116919092161790556200021c565b80516001600160a01b03811681146200012957600080fd5b919050565b6000806000806000808688036101408112156200014a57600080fd5b60a08112156200015957600080fd5b5060405160a081016001600160401b03811182821017156200018b57634e487b7160e01b600052604160045260246000fd5b8060405250875181526020880151602082015260408801516040820152606088015160608201526080880151608082015280965050620001ce60a0880162000111565b9450620001de60c0880162000111565b9350620001ee60e0880162000111565b9250620001ff610100880162000111565b915062000210610120880162000111565b90509295509295509295565b6124d5806200022c6000396000f3fe6080604052600436106101665760003560e01c806368cd03f6116100d1578063946ce8cd1161008a578063c5ebeaec11610064578063c5ebeaec1461046b578063ce4b5bbe1461048b578063eced5526146104a0578063fbbe6991146104b557600080fd5b8063946ce8cd1461040b578063b3ab15fb1461042b578063b6b55f251461044b57600080fd5b806368cd03f6146102d857806379502c55146102fa5780637adbf973146103495780637b44646a1461036957806383baa17414610389578063840c7e24146103a957600080fd5b806350bf06bf1161012357806350bf06bf1461022b57806352e5a0501461024b57806353afe81d1461026b57806354a9f42c1461028b5780635891de72146102ab5780635dcc9391146102c057600080fd5b8063042e02cf1461016b57806308796696146101a057806315184245146101ce5780632e1a7d4d146101ee5780632f86556814610210578063402d888314610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461211e565b6104d5565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612139565b61051d565b604051908152602001610197565b3480156101da57600080fd5b506101c06101e9366004612165565b610587565b3480156101fa57600080fd5b5061020e610209366004612197565b610617565b005b61020e61021e36600461211e565b6107e5565b61020e610a27565b34801561023757600080fd5b506101c06102463660046121b0565b610bff565b34801561025757600080fd5b5061020e61026636600461211e565b610c6b565b34801561027757600080fd5b5061020e610286366004612197565b610cb7565b34801561029757600080fd5b506101c06102a636600461211e565b610ce6565b3480156102b757600080fd5b506101c0610d5d565b3480156102cc57600080fd5b506101c06301e1338081565b3480156102e457600080fd5b506102ed610fff565b60405161019791906121da565b34801561030657600080fd5b50600054600154600254600354600454610321949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610197565b34801561035557600080fd5b5061020e61036436600461211e565b611061565b34801561037557600080fd5b5061020e610384366004612197565b6110ad565b34801561039557600080fd5b506101c06103a4366004612165565b611125565b3480156103b557600080fd5b506103eb6103c436600461211e565b60056020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610197565b34801561041757600080fd5b5061020e610426366004612197565b61117b565b34801561043757600080fd5b5061020e61044636600461211e565b6111d1565b34801561045757600080fd5b5061020e610466366004612197565b61121d565b34801561047757600080fd5b5061020e610486366004612197565b61141c565b34801561049757600080fd5b506101c06115e8565b3480156104ac57600080fd5b506101c0601281565b3480156104c157600080fd5b5061018b6104d0366004612165565b6115f7565b6001600160a01b0381166000908152600560205260408120816104f8824261164e565b509050610515826001015461050b610d5d565b60015484906115f7565b949350505050565b600082806000036105405760405162bfc92160e01b815260040160405180910390fd5b83158061054b575082155b1561056957604051630309cb8760e51b815260040160405180910390fd5b83610574848761223d565b61057e919061226a565b95945050505050565b6000818311156105aa57604051630309cb8760e51b815260040160405180910390fd5b848460006105cc6301e133806105c66105c3898961228c565b90565b906116c4565b905060006105e26105dd84846116e3565b6116f2565b905060006106096106026105fb6105c36012600a612383565b8490611745565b86906116e3565b9a9950505050505050505050565b80806000036106395760405163162908e360e11b815260040160405180910390fd5b336000908152600560205260409020600181015483111561066d5760405163162908e360e11b815260040160405180910390fd5b6000610679824261164e565b5090506000610686610d5d565b905061069d836001015482846000600101546115f7565b156106bb57604051636229415360e01b815260040160405180910390fd5b6106cf83600201548260006002015461051d565b8584600101546106df919061228c565b10156106fe57604051633a23d82560e01b815260040160405180910390fd5b84836001016000828254610712919061228c565b909155505060095460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c919061238f565b6107a9576040516312171d8360e31b815260040160405180910390fd5b60405185815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050505050565b3460000361080657604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b0381166000908152600560205260408120600281015490910361084357604051638aa5baf360e01b815260040160405180910390fd5b600080610850834261164e565b9150915061086e8360010154610864610d5d565b60015485906115f7565b61088b57604051636ef5bcdd60e11b815260040160405180910390fd5b6000610897833461228c565b905060018401805442865560009182905560028601829055600386019190915560095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061238f565b610949576040516312171d8360e31b815260040160405180910390fd5b600b546001600160a01b03166344df8e70610964858761228c565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050505060008211156109e057604051339083156108fc029084906000818181858888f193505050501580156109de573d6000803e3d6000fd5b505b6040513381526001600160a01b038716907fc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4906020015b60405180910390a2505050505050565b34600003610a4857604051637c946ed760e01b815260040160405180910390fd5b3360009081526005602052604081206002810154909103610a7c57604051638aa5baf360e01b815260040160405180910390fd5b600080610a89834261164e565b915091508134108015610aa65750600354610aa4348461228c565b105b15610ac45760405163e6bd447960e01b815260040160405180910390fd5b80836003016000828254610ad891906123b1565b909155505042835560008080610aee8634611754565b92509250925081866002016000828254610b08919061228c565b9250508190555082866003016000828254610b23919061228c565b90915550508115610b9857600b60009054906101000a90046001600160a01b03166001600160a01b03166344df8e70836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7e57600080fd5b505af1158015610b92573d6000803e3d6000fd5b50505050505b8015610bcd57604051339082156108fc029083906000818181858888f19350505050158015610bcb573d6000803e3d6000fd5b505b60405134815233907f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a59423190602001610a17565b6001600160a01b0382166000908152600560205260408120805484918491821015610c3d57604051630309cb8760e51b815260040160405180910390fd5b6001600160a01b0386166000908152600560205260409020610c5f818761164e565b50979650505050505050565b6008546001600160a01b03163314610c95576040516282b42960e81b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610ce1576040516282b42960e81b815260040160405180910390fd5b600355565b6040516350bf06bf60e01b81526001600160a01b038216600482015242602482015260009030906350bf06bf90604401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5791906123c4565b92915050565b600a546040805180820182526007815266272a2716a0aa2760c91b602082015290516333f98c7760e01b815260009283926001600160a01b03909116916333f98c7791610dac916004016123dd565b608060405180830381865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded919061242b565b90508060600151600014610e145760405163cb08be8160e01b815260040160405180910390fd5b6000816020015113610e385760405162bfc92160e01b815260040160405180910390fd5b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf91906123c4565b610ebb6012600a612383565b1115610f6357600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906123c4565b610f446012600a612383565b610f4e919061226a565b8160200151610f5d919061223d565b91505090565b610f6f6012600a612383565b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe691906123c4565b610ff0919061226a565b8160200151610f5d919061226a565b6060600680548060200260200160405190810160405280929190818152602001828054801561105757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611039575b5050505050905090565b6007546001600160a01b0316331461108b576040516282b42960e81b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b80806000036110cf57604051630309cb8760e51b815260040160405180910390fd5b600154828082106110f357604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b0316331461111d576040516282b42960e81b815260040160405180910390fd5b505050600255565b6000831580611132575081155b1561115057604051630309cb8760e51b815260040160405180910390fd5b61115c6012600a612383565b611166908361223d565b83611171868861223d565b610574919061223d565b60025481908082106111a057604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b031633146111ca576040516282b42960e81b815260040160405180910390fd5b5050600155565b6007546001600160a01b031633146111fb576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b808060000361123f5760405163162908e360e11b815260040160405180910390fd5b600954604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b191906123c4565b10156112d0576040516313be252b60e01b815260040160405180910390fd5b336000908152600560205260408120805490910361132b57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b4281556001810180548491906000906113459084906123b1565b90915550506009546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c5919061238f565b6113e2576040516312171d8360e31b815260040160405180910390fd5b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2505050565b808060000361143e5760405163162908e360e11b815260040160405180910390fd5b3360009081526005602052604081209080611459834261164e565b909250905061146885836123b1565b60035490925082101561148e5760405163e6bd447960e01b815260040160405180910390fd5b6000611498610d5d565b90506114af846001015482856000600101546115f7565b156114cd57604051636229415360e01b815260040160405180910390fd5b60006114e9856001015483600060040154600060020154611125565b90508084111561150c57604051633a23d82560e01b815260040160405180910390fd5b4285556002850180548891906000906115269084906123b1565b925050819055508285600301600082825461154191906123b1565b9091555050600b546040516340c10f1960e01b8152336004820152602481018990526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b50506040518981523392507fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750915060200160405180910390a250505050505050565b6115f46012600a612383565b81565b6000838060000361161a5760405162bfc92160e01b815260040160405180910390fd5b8360000361162b5760009150611645565b8284611637878961223d565b611641919061226a565b1091505b50949350505050565b6000808260000361167257604051630309cb8760e51b815260040160405180910390fd5b60008460030154856002015461168891906123b1565b8554909150840361169c57600091506116b0565b60005485546116ad91839187610587565b91505b6116ba82826123b1565b9250509250929050565b60006116dc6105c384670de0b6b3a7640000856117c8565b9392505050565b60006116dc6105c3848461189b565b600081680736ea4425c11ac63081111561172757604051630d7b1d6560e11b8152600481018490526024015b60405180910390fd5b6714057b7ef767814f8102610515670de0b6b3a76400008204611951565b60006116dc6105c3838561228c565b6000806000808560030154866002015461176e91906123b1565b905085600301548510611785578560030154611787565b845b935080851061179a5785600201546117a4565b6117a4848661228c565b92508085116117b45760006117be565b6117be818661228c565b9150509250925092565b6000808060001985870985870292508281108382030391505080600003611802578382816117f8576117f8612254565b04925050506116dc565b83811061183357604051630c740aef60e31b815260048101879052602481018690526044810185905260640161171e565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008080600019848609848602925082811083820303915050806000036118cf5750670de0b6b3a764000090049050610d57565b670de0b6b3a7640000811061190157604051635173648d60e01b8152600481018690526024810185905260440161171e565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600081680a688906bd8affffff8111156119815760405163b3b6ba1f60e01b81526004810184905260240161171e565b6000611999670de0b6b3a7640000604084901b61226a565b90506105156105c382600160bf1b67ff00000000000000821615611aaf576780000000000000008216156119d65768016a09e667f3bcc9090260401c5b6740000000000000008216156119f5576801306fe0a31b7152df0260401c5b672000000000000000821615611a14576801172b83c7d517adce0260401c5b671000000000000000821615611a335768010b5586cf9890f62a0260401c5b670800000000000000821615611a52576801059b0d31585743ae0260401c5b670400000000000000821615611a7157680102c9a3e778060ee70260401c5b670200000000000000821615611a905768010163da9fb33356d80260401c5b670100000000000000821615611aaf57680100b1afa5abcbed610260401c5b66ff000000000000821615611bae576680000000000000821615611adc5768010058c86da1c09ea20260401c5b6640000000000000821615611afa576801002c605e2e8cec500260401c5b6620000000000000821615611b1857680100162f3904051fa10260401c5b6610000000000000821615611b36576801000b175effdc76ba0260401c5b6608000000000000821615611b5457680100058ba01fb9f96d0260401c5b6604000000000000821615611b725768010002c5cc37da94920260401c5b6602000000000000821615611b90576801000162e525ee05470260401c5b6601000000000000821615611bae5768010000b17255775c040260401c5b65ff0000000000821615611ca45765800000000000821615611bd9576801000058b91b5bc9ae0260401c5b65400000000000821615611bf657680100002c5c89d5ec6d0260401c5b65200000000000821615611c135768010000162e43f4f8310260401c5b65100000000000821615611c3057680100000b1721bcfc9a0260401c5b65080000000000821615611c4d5768010000058b90cf1e6e0260401c5b65040000000000821615611c6a576801000002c5c863b73f0260401c5b65020000000000821615611c8757680100000162e430e5a20260401c5b65010000000000821615611ca4576801000000b1721835510260401c5b64ff00000000821615611d9157648000000000821615611ccd57680100000058b90c0b490260401c5b644000000000821615611ce95768010000002c5c8601cc0260401c5b642000000000821615611d05576801000000162e42fff00260401c5b641000000000821615611d215768010000000b17217fbb0260401c5b640800000000821615611d3d576801000000058b90bfce0260401c5b640400000000821615611d5957680100000002c5c85fe30260401c5b640200000000821615611d755768010000000162e42ff10260401c5b640100000000821615611d9157680100000000b17217f80260401c5b63ff000000821615611e75576380000000821615611db85768010000000058b90bfc0260401c5b6340000000821615611dd3576801000000002c5c85fe0260401c5b6320000000821615611dee57680100000000162e42ff0260401c5b6310000000821615611e09576801000000000b17217f0260401c5b6308000000821615611e2457680100000000058b90c00260401c5b6304000000821615611e3f5768010000000002c5c8600260401c5b6302000000821615611e5a576801000000000162e4300260401c5b6301000000821615611e755768010000000000b172180260401c5b62ff0000821615611f505762800000821615611e9a576801000000000058b90c0260401c5b62400000821615611eb457680100000000002c5c860260401c5b62200000821615611ece5768010000000000162e430260401c5b62100000821615611ee857680100000000000b17210260401c5b62080000821615611f025768010000000000058b910260401c5b62040000821615611f1c576801000000000002c5c80260401c5b62020000821615611f3657680100000000000162e40260401c5b62010000821615611f50576801000000000000b1720260401c5b61ff0082161561202257618000821615611f7357680100000000000058b90260401c5b614000821615611f8c5768010000000000002c5d0260401c5b612000821615611fa5576801000000000000162e0260401c5b611000821615611fbe5768010000000000000b170260401c5b610800821615611fd7576801000000000000058c0260401c5b610400821615611ff057680100000000000002c60260401c5b61020082161561200957680100000000000001630260401c5b61010082161561202257680100000000000000b10260401c5b60ff8216156120eb57608082161561204357680100000000000000590260401c5b604082161561205b576801000000000000002c0260401c5b602082161561207357680100000000000000160260401c5b601082161561208b576801000000000000000b0260401c5b60088216156120a357680100000000000000060260401c5b60048216156120bb57680100000000000000030260401c5b60028216156120d357680100000000000000010260401c5b60018216156120eb57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b038116811461211957600080fd5b919050565b60006020828403121561213057600080fd5b6116dc82612102565b60008060006060848603121561214e57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561217b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156121a957600080fd5b5035919050565b600080604083850312156121c357600080fd5b6121cc83612102565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561221b5783516001600160a01b0316835292840192918401916001016121f6565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d5757610d57612227565b634e487b7160e01b600052601260045260246000fd5b60008261228757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d5757610d57612227565b600181815b808511156122da5781600019048211156122c0576122c0612227565b808516156122cd57918102915b93841c93908002906122a4565b509250929050565b6000826122f157506001610d57565b816122fe57506000610d57565b8160018114612314576002811461231e5761233a565b6001915050610d57565b60ff84111561232f5761232f612227565b50506001821b610d57565b5060208310610133831016604e8410600b841016171561235d575081810a610d57565b612367838361229f565b806000190482111561237b5761237b612227565b029392505050565b60006116dc83836122e2565b6000602082840312156123a157600080fd5b815180151581146116dc57600080fd5b80820180821115610d5757610d57612227565b6000602082840312156123d657600080fd5b5051919050565b600060208083528351808285015260005b8181101561240a578581018301518582016040015282016123ee565b506000604082860101526040601f19601f8301168501019250505092915050565b60006080828403121561243d57600080fd5b6040516080810181811067ffffffffffffffff8211171561246e57634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015260608301516060820152809150509291505056fea26469706673582212205e76940183cf0f9ee63393d5c96d3129f42207d506dafc89e2104ea4228d5bda64736f6c63430008150033", } // StabilizationABI is the input ABI used to generate the binding from. @@ -19519,7 +20179,7 @@ var TestBaseMetaData = &bind.MetaData{ Sigs: map[string]string{ "bfb4ebcf": "Foo()", }, - Bin: "0x608060405234801561001057600080fd5b5060405161041238038061041283398101604081905261002f91610058565b600061003b82826101aa565b5050610269565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561006b57600080fd5b82516001600160401b038082111561008257600080fd5b818501915085601f83011261009657600080fd5b8151818111156100a8576100a8610042565b604051601f8201601f19908116603f011681019083821181831017156100d0576100d0610042565b8160405282815288868487010111156100e857600080fd5b600093505b8284101561010a57848401860151818501870152928501926100ed565b600086848301015280965050505050505092915050565b600181811c9082168061013557607f821691505b60208210810361015557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101a557600081815260208120601f850160051c810160208610156101825750805b601f850160051c820191505b818110156101a15782815560010161018e565b5050505b505050565b81516001600160401b038111156101c3576101c3610042565b6101d7816101d18454610121565b8461015b565b602080601f83116001811461020c57600084156101f45750858301515b600019600386901b1c1916600185901b1785556101a1565b600085815260208120601f198616915b8281101561023b5788860151825594840194600190910190840161021c565b50858210156102595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61019a806102786000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bfb4ebcf14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6000805461005b9061012a565b80601f01602080910402602001604051908101604052809291908181526020018280546100879061012a565b80156100d45780601f106100a9576101008083540402835291602001916100d4565b820191906000526020600020905b8154815290600101906020018083116100b757829003601f168201915b505050505081565b600060208083528351808285015260005b81811015610109578581018301518582016040015282016100ed565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061013e57607f821691505b60208210810361015e57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220d2da252a147919cdcf7706a0fb0a0be7102961e3bc5ad257f50784b9f01770b864736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5060405161041238038061041283398101604081905261002f91610058565b600061003b82826101aa565b5050610269565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561006b57600080fd5b82516001600160401b038082111561008257600080fd5b818501915085601f83011261009657600080fd5b8151818111156100a8576100a8610042565b604051601f8201601f19908116603f011681019083821181831017156100d0576100d0610042565b8160405282815288868487010111156100e857600080fd5b600093505b8284101561010a57848401860151818501870152928501926100ed565b600086848301015280965050505050505092915050565b600181811c9082168061013557607f821691505b60208210810361015557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101a557600081815260208120601f850160051c810160208610156101825750805b601f850160051c820191505b818110156101a15782815560010161018e565b5050505b505050565b81516001600160401b038111156101c3576101c3610042565b6101d7816101d18454610121565b8461015b565b602080601f83116001811461020c57600084156101f45750858301515b600019600386901b1c1916600185901b1785556101a1565b600085815260208120601f198616915b8281101561023b5788860151825594840194600190910190840161021c565b50858210156102595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61019a806102786000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bfb4ebcf14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6000805461005b9061012a565b80601f01602080910402602001604051908101604052809291908181526020018280546100879061012a565b80156100d45780601f106100a9576101008083540402835291602001916100d4565b820191906000526020600020905b8154815290600101906020018083116100b757829003601f168201915b505050505081565b600060208083528351808285015260005b81811015610109578581018301518582016040015282016100ed565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061013e57607f821691505b60208210810361015e57634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212209cf439377144d04690c521a420a683288adebcb0331b1db8c2897f7a16be2ecb64736f6c63430008150033", } // TestBaseABI is the input ABI used to generate the binding from. @@ -19732,7 +20392,7 @@ var TestUpgradedMetaData = &bind.MetaData{ "bfb4ebcf": "Foo()", "1e4f3395": "FooBar(string)", }, - Bin: "0x608060405234801561001057600080fd5b5060405161068838038061068883398101604081905261002f9161010e565b80600061003c82826101fa565b506001905061004b83826101fa565b5050506102b9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007a57600080fd5b81516001600160401b038082111561009457610094610053565b604051601f8301601f19908116603f011681019082821181831017156100bc576100bc610053565b816040528381526020925086838588010111156100d857600080fd5b600091505b838210156100fa57858201830151818301840152908201906100dd565b600093810190920192909252949350505050565b6000806040838503121561012157600080fd5b82516001600160401b038082111561013857600080fd5b61014486838701610069565b9350602085015191508082111561015a57600080fd5b5061016785828601610069565b9150509250929050565b600181811c9082168061018557607f821691505b6020821081036101a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f557600081815260208120601f850160051c810160208610156101d25750805b601f850160051c820191505b818110156101f1578281556001016101de565b5050505b505050565b81516001600160401b0381111561021357610213610053565b610227816102218454610171565b846101ab565b602080601f83116001811461025c57600084156102445750858301515b600019600386901b1c1916600185901b1785556101f1565b600085815260208120601f198616915b8281101561028b5788860151825594840194600190910190840161026c565b50858210156102a95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6103c0806102c86000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631e4f339514610046578063b0a378b01461005b578063bfb4ebcf14610079575b600080fd5b610059610054366004610142565b610081565b005b610063610091565b60405161007091906101f3565b60405180910390f35b61006361011f565b600061008d82826102ca565b5050565b6001805461009e90610241565b80601f01602080910402602001604051908101604052809291908181526020018280546100ca90610241565b80156101175780601f106100ec57610100808354040283529160200191610117565b820191906000526020600020905b8154815290600101906020018083116100fa57829003601f168201915b505050505081565b6000805461009e90610241565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561015457600080fd5b813567ffffffffffffffff8082111561016c57600080fd5b818401915084601f83011261018057600080fd5b8135818111156101925761019261012c565b604051601f8201601f19908116603f011681019083821181831017156101ba576101ba61012c565b816040528281528760208487010111156101d357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561022057858101830151858201604001528201610204565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061025557607f821691505b60208210810361027557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102c557600081815260208120601f850160051c810160208610156102a25750805b601f850160051c820191505b818110156102c1578281556001016102ae565b5050505b505050565b815167ffffffffffffffff8111156102e4576102e461012c565b6102f8816102f28454610241565b8461027b565b602080601f83116001811461032d57600084156103155750858301515b600019600386901b1c1916600185901b1785556102c1565b600085815260208120601f198616915b8281101561035c5788860151825594840194600190910190840161033d565b508582101561037a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220861a136edbfbb81795ebe88b9f360e258cf2eefe90d25b8440b6ce190b8b4c9964736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5060405161068838038061068883398101604081905261002f9161010e565b80600061003c82826101fa565b506001905061004b83826101fa565b5050506102b9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007a57600080fd5b81516001600160401b038082111561009457610094610053565b604051601f8301601f19908116603f011681019082821181831017156100bc576100bc610053565b816040528381526020925086838588010111156100d857600080fd5b600091505b838210156100fa57858201830151818301840152908201906100dd565b600093810190920192909252949350505050565b6000806040838503121561012157600080fd5b82516001600160401b038082111561013857600080fd5b61014486838701610069565b9350602085015191508082111561015a57600080fd5b5061016785828601610069565b9150509250929050565b600181811c9082168061018557607f821691505b6020821081036101a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f557600081815260208120601f850160051c810160208610156101d25750805b601f850160051c820191505b818110156101f1578281556001016101de565b5050505b505050565b81516001600160401b0381111561021357610213610053565b610227816102218454610171565b846101ab565b602080601f83116001811461025c57600084156102445750858301515b600019600386901b1c1916600185901b1785556101f1565b600085815260208120601f198616915b8281101561028b5788860151825594840194600190910190840161026c565b50858210156102a95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6103c0806102c86000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631e4f339514610046578063b0a378b01461005b578063bfb4ebcf14610079575b600080fd5b610059610054366004610142565b610081565b005b610063610091565b60405161007091906101f3565b60405180910390f35b61006361011f565b600061008d82826102ca565b5050565b6001805461009e90610241565b80601f01602080910402602001604051908101604052809291908181526020018280546100ca90610241565b80156101175780601f106100ec57610100808354040283529160200191610117565b820191906000526020600020905b8154815290600101906020018083116100fa57829003601f168201915b505050505081565b6000805461009e90610241565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561015457600080fd5b813567ffffffffffffffff8082111561016c57600080fd5b818401915084601f83011261018057600080fd5b8135818111156101925761019261012c565b604051601f8201601f19908116603f011681019083821181831017156101ba576101ba61012c565b816040528281528760208487010111156101d357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561022057858101830151858201604001528201610204565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061025557607f821691505b60208210810361027557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102c557600081815260208120601f850160051c810160208610156102a25750805b601f850160051c820191505b818110156102c1578281556001016102ae565b5050505b505050565b815167ffffffffffffffff8111156102e4576102e461012c565b6102f8816102f28454610241565b8461027b565b602080601f83116001811461032d57600084156103155750858301515b600019600386901b1c1916600185901b1785556102c1565b600085815260208120601f198616915b8281101561035c5788860151825594840194600190910190840161033d565b508582101561037a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212209e9f65a89870480e079f3b2fa977b80612adba0464ab76606144938f61a6a1a764736f6c63430008150033", } // TestUpgradedABI is the input ABI used to generate the binding from. diff --git a/autonity/calls.go b/autonity/calls.go index 63190dda08..a91ee5a817 100644 --- a/autonity/calls.go +++ b/autonity/calls.go @@ -47,6 +47,9 @@ func DeployContracts(genesisConfig *params.ChainConfig, genesisBonds GenesisBond if err := DeployUpgradeManagerContract(genesisConfig, evmContracts); err != nil { return fmt.Errorf("error when deploying the upgrade manager contract: %w", err) } + if err := DeployInflationControllerContract(genesisConfig, evmContracts); err != nil { + return fmt.Errorf("error when deploying the upgrade manager contract: %w", err) + } return nil } @@ -125,6 +128,28 @@ func DeploySupplyControlContract(config *params.ChainConfig, evmContracts *Genes return nil } +func DeployInflationControllerContract(config *params.ChainConfig, evmContracts *GenesisEVMContracts) error { + if config.InflationContractConfig == nil { + log.Info("Config missing, using default parameters for the Inflation Controller contract") + config.InflationContractConfig = params.DefaultInflationControllerGenesis + } else { + config.InflationContractConfig.SetDefaults() + } + param := InflationControllerParams{ + IInit: (*big.Int)(config.InflationContractConfig.IInit), + ITrans: (*big.Int)(config.InflationContractConfig.ITrans), + AE: (*big.Int)(config.InflationContractConfig.Ae), + T: (*big.Int)(config.InflationContractConfig.T), + IPerm: (*big.Int)(config.InflationContractConfig.IPerm), + } + if err := evmContracts.DeployInflationControllerContract(generated.InflationControllerBytecode, param); err != nil { + log.Error("DeployInflationControllerContract failed", "err", err) + return fmt.Errorf("failed to deploy inflation controller contract: %w", err) + } + log.Info("Deployed inflation controller contract", "address", params.InflationControllerContractAddress) + return nil +} + func DeployACUContract(config *params.ChainConfig, evmContracts *GenesisEVMContracts) error { if config.ASM.ACUContractConfig == nil { log.Info("Config missing, using default parameters for the ACU contract") @@ -182,19 +207,21 @@ func DeployAccountabilityContract(config *params.AccountabilityGenesis, evmContr func DeployAutonityContract(genesisConfig *params.AutonityContractGenesis, genesisBonds GenesisBonds, evmContracts *GenesisEVMContracts) error { contractConfig := AutonityConfig{ Policy: AutonityPolicy{ - TreasuryFee: new(big.Int).SetUint64(genesisConfig.TreasuryFee), - MinBaseFee: new(big.Int).SetUint64(genesisConfig.MinBaseFee), - DelegationRate: new(big.Int).SetUint64(genesisConfig.DelegationRate), - UnbondingPeriod: new(big.Int).SetUint64(genesisConfig.UnbondingPeriod), - TreasuryAccount: genesisConfig.Treasury, + TreasuryFee: new(big.Int).SetUint64(genesisConfig.TreasuryFee), + MinBaseFee: new(big.Int).SetUint64(genesisConfig.MinBaseFee), + DelegationRate: new(big.Int).SetUint64(genesisConfig.DelegationRate), + UnbondingPeriod: new(big.Int).SetUint64(genesisConfig.UnbondingPeriod), + InitialInflationReserve: (*big.Int)(genesisConfig.InitialInflationReserve), + TreasuryAccount: genesisConfig.Treasury, }, Contracts: AutonityContracts{ - AccountabilityContract: params.AccountabilityContractAddress, - OracleContract: params.OracleContractAddress, - AcuContract: params.ACUContractAddress, - SupplyControlContract: params.SupplyControlContractAddress, - StabilizationContract: params.StabilizationContractAddress, - UpgradeManagerContract: params.UpgradeManagerContractAddress, + AccountabilityContract: params.AccountabilityContractAddress, + OracleContract: params.OracleContractAddress, + AcuContract: params.ACUContractAddress, + SupplyControlContract: params.SupplyControlContractAddress, + StabilizationContract: params.StabilizationContractAddress, + UpgradeManagerContract: params.UpgradeManagerContractAddress, + InflationControllerContract: params.InflationControllerContractAddress, }, Protocol: AutonityProtocol{ OperatorAccount: genesisConfig.Operator, diff --git a/autonity/solidity/ape-config.yaml b/autonity/solidity/ape-config.yaml index 47e67f68fa..e6e81f10b0 100644 --- a/autonity/solidity/ape-config.yaml +++ b/autonity/solidity/ape-config.yaml @@ -18,3 +18,4 @@ compiler: - "*package-lock.json" - "*tsconfig.json" - "bindings.sol" + - "./*.sol" \ No newline at end of file diff --git a/autonity/solidity/contracts/Accountability.sol b/autonity/solidity/contracts/Accountability.sol index 93098e9f9e..d6231dc259 100644 --- a/autonity/solidity/contracts/Accountability.sol +++ b/autonity/solidity/contracts/Accountability.sol @@ -110,11 +110,22 @@ contract Accountability is IAccountability { } } - function distributeRewards(address _validator) payable external onlyAutonity { + /** + * @notice called by the Autonity Contract at block finalization, to reward the reporter of + * a valid proof. + * @param _validator validator account which got slashed. + * @param _ntnReward total amount of ntn to be transferred to the repoter. MUST BE AVAILABLE + * in the accountability contract balance. + */ + function distributeRewards(address _validator, uint256 _ntnReward) payable external onlyAutonity { // There is an edge-case scenario where slashing events for the // same accused validator are created during the same epoch. // In this case we only reward the last reporter. address _reporterTreasury = autonity.getValidator(beneficiaries[_validator]).treasury; + + try autonity.transfer(_reporterTreasury, _ntnReward) {} + catch {} + // if for some reasons, funds can't be transferred to the reporter treasury (sneaky contract) (bool ok, ) = _reporterTreasury.call{value:msg.value, gas: 2300}(""); // well, too bad, it goes to the autonity global treasury. diff --git a/autonity/solidity/contracts/Autonity.sol b/autonity/solidity/contracts/Autonity.sol index 8ce25c7611..6bbbaa5e47 100644 --- a/autonity/solidity/contracts/Autonity.sol +++ b/autonity/solidity/contracts/Autonity.sol @@ -15,6 +15,7 @@ import "./asm/IStabilization.sol"; import "./interfaces/IAccountability.sol"; import "./interfaces/IOracle.sol"; import "./interfaces/IAutonity.sol"; +import "./interfaces/IInflationController.sol"; /** @title Proof-of-Stake Autonity Contract */ enum ValidatorState {active, paused, jailed, jailbound} @@ -108,6 +109,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { ISupplyControl supplyControlContract; IStabilization stabilizationContract; UpgradeManager upgradeManagerContract; + IInflationController inflationControllerContract; } struct Policy { @@ -115,6 +117,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { uint256 minBaseFee; uint256 delegationRate; uint256 unbondingPeriod; + uint256 initialInflationReserve; address payable treasuryAccount; } @@ -139,10 +142,11 @@ contract Autonity is IAutonity, IERC20, Upgradeable { uint256 public epochID; mapping(uint256 => uint256) internal blockEpochMap; uint256 public lastEpochBlock; + uint256 public lastEpochTime; uint256 public epochTotalBondedStake; CommitteeMember[] internal committee; - uint256 public totalRedistributed; + uint256 public atnTotalRedistributed; uint256 public epochReward; string[] internal committeeNodes; mapping(address => mapping(address => uint256)) internal allowances; @@ -152,6 +156,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { mapping(address => uint256) internal accounts; mapping(address => Validator) internal validators; uint256 internal stakeSupply; + uint256 public inflationReserve; /* We're saving the address of who is deploying the contract and we use it @@ -193,7 +198,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidContract); event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock); event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock); - event Rewarded(address indexed addr, uint256 amount); + event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount); event EpochPeriodUpdated(uint256 period); event NewEpoch(uint256 epoch); @@ -216,7 +221,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { Config memory _config ) internal { config = _config; - + inflationReserve = config.policy.initialInflationReserve; /* We are sharing the same Validator data structure for both genesis initialization and runtime. It's not an ideal solution but it avoids us adding more complexity to the contract and running into @@ -246,6 +251,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { function finalizeInitialization() onlyProtocol public { _stakingOperations(); computeCommittee(); + lastEpochTime = block.timestamp; } /** @@ -548,6 +554,14 @@ contract Autonity is IAutonity, IERC20, Upgradeable { config.contracts.stabilizationContract = _address; } + /* + * @notice Set the Inflation Controller contract address. Restricted to the Operator account. + * @param _address the contract address + */ + function setInflationControllerContract(IInflationController _address) public virtual onlyOperator { + config.contracts.inflationControllerContract = _address; + } + /* * @notice Set the Upgrade Manager contract address. Restricted to the Operator account. * It is only meant to be used for internal testing purposes. Anything different than @@ -563,9 +577,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { * @dev emit a MintStake event. */ function mint(address _addr, uint256 _amount) public virtual onlyOperator { - accounts[_addr] += _amount; - stakeSupply += _amount; - emit MintedStake(_addr, _amount); + _mint(_addr, _amount); } /** @@ -588,6 +600,7 @@ contract Autonity is IAutonity, IERC20, Upgradeable { */ function transfer(address _recipient, uint256 _amount) external virtual override returns (bool) { _transfer(msg.sender, _recipient, _amount); + emit Transfer(msg.sender, _recipient, _amount); return true; } @@ -615,10 +628,13 @@ contract Autonity is IAutonity, IERC20, Upgradeable { * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ - function transferFrom(address sender, address recipient, uint256 amount) external virtual override returns (bool){ - _transfer(sender, recipient, amount); - uint256 newAllowance = allowances[sender][msg.sender] - amount; - _approve(sender, msg.sender, newAllowance); + function transferFrom(address _sender, address _recipient, uint256 _amount) external virtual override returns (bool){ + //TODO URGENT require(allowances[_sender][msg.sender] > 0, "no allowance"); + //require(allowances[_sender][msg.sender] >= _amount, "unsufficient allowance"); + _transfer(_sender, _recipient, _amount); + uint256 newAllowance = allowances[_sender][msg.sender] - _amount; + _approve(_sender, msg.sender, newAllowance); + emit Transfer(_sender, _recipient, _amount); return true; } @@ -636,20 +652,38 @@ contract Autonity is IAutonity, IERC20, Upgradeable { * @return upgrade Set to true if an autonity contract upgrade is available. * @return committee The next block consensus committee. */ - function finalize() external virtual onlyProtocol - returns (bool, CommitteeMember[] memory) { + function finalize() external virtual onlyProtocol returns (bool, CommitteeMember[] memory) { blockEpochMap[block.number] = epochID; bool epochEnded = lastEpochBlock + config.protocol.epochPeriod == block.number; config.contracts.accountabilityContract.finalize(epochEnded); if (epochEnded) { - _performRedistribution(); + // We first calculate the new NTN injected supply for this epoch + uint256 _inflationReward = config.contracts.inflationControllerContract.calculateSupplyDelta( + stakeSupply, + inflationReserve, + lastEpochTime, + block.timestamp + ); + if (inflationReserve < _inflationReward){ + // If this code path is taken there is something deeply wrong happening in the inflation controller + // contract. + _inflationReward = inflationReserve; + } + // mint inflation NTN with the AC recipient + // all rewards belong to the Autonity Contract before redistribution. + _mint(address(this), _inflationReward); + inflationReserve -= _inflationReward; + // redistribute ATN tx fees and newly minted NTN inflation reward + _performRedistribution(address(this).balance, _inflationReward); + // end of epoch here _stakingOperations(); _applyNewCommissionRates(); - address[] memory voters = computeCommittee(); - config.contracts.oracleContract.setVoters(voters); + address[] memory _voters = computeCommittee(); + config.contracts.oracleContract.setVoters(_voters); lastEpochBlock = block.number; + lastEpochTime = block.timestamp; epochID += 1; emit NewEpoch(epochID); } @@ -908,59 +942,81 @@ contract Autonity is IAutonity, IERC20, Upgradeable { */ /** - * @notice Perform Auton reward distribution. The transaction fees + * @notice Perform ATN and NTN reward distribution. The rewards fees * are simply re-distributed to all stake-holders, including validators, * pro-rata the amount of stake held. * @dev Emit a {Rewarded} event for every account that collected rewards. + * @param _atn: Amount of ATN to be redistributed. The source funds will be taken from + * this contract balance. + * @param _ntn: Amount of NTN to be redistributed. The source funds will be minted here. */ - function _performRedistribution() internal virtual { - if (address(this).balance == 0) { + function _performRedistribution(uint256 _atn, uint256 _ntn) internal virtual { + // exit early if nothing to redistribute. + if (_atn == 0 && _ntn == 0) { return; } - uint256 _amount = address(this).balance; - // take treasury fee. - uint256 _treasuryReward = (config.policy.treasuryFee * _amount) / 10 ** 18; - if (_treasuryReward > 0) { + // Take ATN treasury fee. + uint256 _atnTreasuryReward = (config.policy.treasuryFee * _atn) / 10 ** 18; + if (_atnTreasuryReward > 0) { // Using "call" to let the treasury contract do any kind of computation on receive. - (bool sent,) = config.policy.treasuryAccount.call{value: _treasuryReward}(""); + (bool sent,) = config.policy.treasuryAccount.call{value: _atnTreasuryReward}(""); if (sent == true) { - _amount -= _treasuryReward; + _atn -= _atnTreasuryReward; } } // Redistribute fees through the Liquid Newton contract - totalRedistributed += _amount; + atnTotalRedistributed += _atn; for (uint256 i = 0; i < committee.length; i++) { Validator storage _val = validators[committee[i].addr]; // votingPower in the committee struct is the amount of bonded-stake pre-slashing event. - uint256 _reward = (committee[i].votingPower * _amount) / epochTotalBondedStake; - if (_reward > 0) { + uint256 _atnReward = (committee[i].votingPower * _atn) / epochTotalBondedStake; + uint256 _ntnReward = (committee[i].votingPower * _ntn) / epochTotalBondedStake; + if (_atnReward > 0 || _ntnReward > 0) { // committee members in the jailed state were just found guilty in the current epoch. // committee members in jailbound state are permanently jailed if (_val.state == ValidatorState.jailed || _val.state == ValidatorState.jailbound) { - config.contracts.accountabilityContract.distributeRewards{value: _reward}(committee[i].addr); + _transfer(address(this), address(config.contracts.accountabilityContract), _ntnReward); + config.contracts.accountabilityContract.distributeRewards{value: _atnReward}(committee[i].addr, _ntnReward); continue; } // non-jailed validators have a strict amount of bonded newton. // the distribution account for the PAS ratio post-slashing. - uint256 _selfReward = (_val.selfBondedStake * _reward) / _val.bondedStake; - uint256 _delegationReward = _reward - _selfReward; - if (_selfReward > 0) { + uint256 _atnSelfReward = (_val.selfBondedStake * _atnReward) / _val.bondedStake; + if (_atnSelfReward > 0) { // todo: handle failure scenario here although not critical. - _val.treasury.call{value: _selfReward, gas: 2300}(""); + _val.treasury.call{value: _atnSelfReward, gas: 2300}(""); + } + uint256 _ntnSelfReward = (_val.selfBondedStake * _ntnReward) / _val.bondedStake; + if (_ntnSelfReward > 0) { + _transfer(address(this), _val.treasury, _ntnSelfReward); } - if (_delegationReward > 0) { - _val.liquidContract.redistribute{value: _delegationReward}(); + uint256 _ntnDelegationReward = _ntnReward - _ntnSelfReward; + uint256 _atnDelegationReward = _atnReward - _atnSelfReward; + if (_atnDelegationReward > 0 || _ntnDelegationReward > 0) { + _transfer(address(this), address(_val.liquidContract), _ntnDelegationReward); + _val.liquidContract.redistribute{value: _atnDelegationReward}(_ntnDelegationReward); } - emit Rewarded(_val.nodeAddress, _reward); + // TODO: This has to be reconsidered - I feel it is too expensive + // to emit an event per validator. But what is our recommend way to track rewards + // from a user perspective then ? + emit Rewarded(_val.nodeAddress, _atnReward, _ntnReward); } } } + // @dev No side effects on this function, so safe to be called in the middle of something (but may revert). + // We may want to switch to OZ's ERC20 at one point to deal with callbacks + // but we'll have to deal with re-entrency stuff in this case. For the time being we are conservative. function _transfer(address _sender, address _recipient, uint256 _amount) internal virtual { require(accounts[_sender] >= _amount, "amount exceeds balance"); accounts[_sender] -= _amount; accounts[_recipient] += _amount; - emit Transfer(_sender, _recipient, _amount); + } + + function _mint(address _addr, uint256 _amount) internal virtual { + accounts[_addr] += _amount; + stakeSupply += _amount; + emit MintedStake(_addr, _amount); } /** diff --git a/autonity/solidity/contracts/InflationController.sol b/autonity/solidity/contracts/InflationController.sol new file mode 100644 index 0000000000..0da8767a40 --- /dev/null +++ b/autonity/solidity/contracts/InflationController.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import {SD59x18, sd, convert} from "./lib/prb-math-4.0.1/SD59x18.sol"; +import {IInflationController} from "./interfaces/IInflationController.sol"; + + +contract InflationController is IInflationController { + struct Params { + // Initial inflation rate + SD59x18 iInit; + // Transition inflation rate + SD59x18 iTrans; + // Convexity Parameter + SD59x18 aE; + // Transition Period + SD59x18 T; + // Constant IR post T + SD59x18 iPerm; + // Note: All time related parameters MUST be denominated in seconds. + } + + Params public params; + + uint256 internal genesisTime; + + constructor(Params memory _params){ + params = _params; + genesisTime = block.timestamp; + } + + /** + * @notice Main function. Calculate NTN inflation. + */ + function calculateSupplyDelta( + uint256 _currentSupply, + uint256 _inflationReserve, + uint256 _lastEpochTime, + uint256 _currentEpochTime + ) + external + view + returns (uint256) + { + SD59x18 _lastTime = convert(int256(_lastEpochTime - genesisTime)); + SD59x18 _currentTime = convert(int256(_currentEpochTime - genesisTime)); + if (_currentTime <= params.T) { + return calculateTransitionRegime(_currentSupply, _lastTime, _currentTime); + } + // _currentTime > params.T from here + if (_lastTime < params.T){ + uint256 _untilT = calculateTransitionRegime(_currentSupply, _lastTime, params.T); + uint256 _afterT = calculatePermanentRegime(_inflationReserve, params.T, _currentTime); + return _untilT + _afterT; + } + return calculatePermanentRegime(_inflationReserve, _lastTime, _currentTime); + } + + /** + * @notice Calculate inflation before transition. + */ + function calculateTransitionRegime( + uint256 _currentSupply, + SD59x18 _lastEpochTime, + SD59x18 _currentEpochTime + ) + internal + view + returns (uint256) + { + SD59x18 _rate; + if (params.aE == convert(0)){ + _rate = params.iInit + (params.iTrans - params.iInit) * _lastEpochTime / params.T; + } else { + SD59x18 _lExp = (params.aE * _lastEpochTime)/params.T; + SD59x18 _rFact = (_lExp.exp() - convert(1))/ (params.aE.exp() - convert(1)); + _rate = params.iInit + (params.iTrans - params.iInit) * _rFact; + } + SD59x18 _result = _rate * convert(int256(_currentSupply)) * (_currentEpochTime - _lastEpochTime); + return uint256(convert(_result)); + } + + /** + * @notice Calculate inflation after transition. + */ + function calculatePermanentRegime( + uint256 _inflationReserve, + SD59x18 _lastEpochTime, + SD59x18 _currentEpochTime + ) + internal + view + returns (uint256) + { + return uint256(convert( + convert(int256(_inflationReserve)) * (_currentEpochTime - _lastEpochTime) * params.iPerm + )); + } + +} diff --git a/autonity/solidity/contracts/Liquid.sol b/autonity/solidity/contracts/Liquid.sol index 69ec1e14dc..1eae1386e1 100644 --- a/autonity/solidity/contracts/Liquid.sol +++ b/autonity/solidity/contracts/Liquid.sol @@ -41,7 +41,7 @@ import {DECIMALS} from "./Autonity.sol"; contract Liquid is IERC20 { - address autonityContract; //not hardcoded for testing purposes + IERC20 internal autonityContract; //not hardcoded for testing purposes // TODO: Better solution to address the fractional terms in fee // computations? @@ -57,9 +57,12 @@ contract Liquid is IERC20 mapping(address => mapping (address => uint256)) private allowances; uint256 private supply; - mapping(address => uint256) private realisedFees; - mapping(address => uint256) private unrealisedFeeFactors; - uint256 private lastUnrealisedFeeFactor; + mapping(address => uint256) private atnRealisedFees; + mapping(address => uint256) private atnUnrealisedFeeFactors; + uint256 private atnLastUnrealisedFeeFactor; + mapping(address => uint256) private ntnRealisedFees; + mapping(address => uint256) private ntnUnrealisedFeeFactors; + uint256 private ntnLastUnrealisedFeeFactor; string private _name; string private _symbol; @@ -82,7 +85,7 @@ contract Liquid is IERC20 commissionRate = _commissionRate; _name = string.concat("LNTN-", _index); _symbol = string.concat("LNTN-", _index); - autonityContract = msg.sender; + autonityContract = IERC20(msg.sender); } /** @@ -90,31 +93,35 @@ contract Liquid is IERC20 * Update lastUnrealisedFeeFactor and transfer treasury fees. * @dev Restricted to the autonity contract. */ - function redistribute() external payable onlyAutonity returns (uint256) + function redistribute(uint256 _ntnReward) external payable onlyAutonity returns (uint256, uint256) { - uint256 _reward = msg.value; + uint256 _atnReward = msg.value; // Step 1 : transfer entitled amount of fees to validator's // treasury account. - uint256 _validatorReward = - (_reward * commissionRate) / COMMISSION_RATE_PRECISION; - require(_validatorReward <= _reward, "invalid validator reward"); - _reward -= _validatorReward; + uint256 _atnValidatorReward = (_atnReward * commissionRate) / COMMISSION_RATE_PRECISION; + require(_atnValidatorReward <= _atnReward, "invalid atn validator reward"); + _atnReward -= _atnValidatorReward; + // TODO: handle failure. + treasury.call{value: _atnValidatorReward, gas:2300}(""); - // TODO: handle failure - treasury.call{value: _validatorReward, gas:2300}(""); + uint256 _ntnValidatorReward = (_ntnReward * commissionRate) / COMMISSION_RATE_PRECISION; + require(_ntnValidatorReward <= _ntnReward, "invalid ntn validator reward"); + _ntnReward -= _ntnValidatorReward; + autonityContract.transfer(treasury,_ntnValidatorReward); // Step 2 : perform redistribution amongst liquid stake token // holders for this validator. - uint256 _feeFactorThisReward = - ((_reward * FEE_FACTOR_UNIT_RECIP) / supply); - lastUnrealisedFeeFactor = - lastUnrealisedFeeFactor + _feeFactorThisReward; + uint256 _atnFeeFactorThisReward = (_atnReward * FEE_FACTOR_UNIT_RECIP) / supply; + atnLastUnrealisedFeeFactor = atnLastUnrealisedFeeFactor + _atnFeeFactorThisReward; + + uint256 _ntnFeeFactorThisReward = (_ntnReward * FEE_FACTOR_UNIT_RECIP) / supply; + ntnLastUnrealisedFeeFactor = ntnLastUnrealisedFeeFactor + _ntnFeeFactorThisReward; // Compute the maximum amount that can be claimed after // rounding. - uint256 _maxClaimable = - (_feeFactorThisReward * supply) / FEE_FACTOR_UNIT_RECIP; - return _validatorReward + _maxClaimable; + uint256 _atnMaxClaimable = (_atnFeeFactorThisReward * supply) / FEE_FACTOR_UNIT_RECIP; + uint256 _ntnMaxClaimable = (_ntnFeeFactorThisReward * supply) / FEE_FACTOR_UNIT_RECIP; + return (_atnValidatorReward + _atnMaxClaimable, _ntnValidatorReward + _ntnMaxClaimable); } /** @@ -141,9 +148,11 @@ contract Liquid is IERC20 * @notice Returns the total claimable fees (AUT) earned by the delegator to-date. * @param _account the delegator account. */ - function unclaimedRewards(address _account) external view returns(uint256) + function unclaimedRewards(address _account) external view returns(uint256 _unclaimedATN, uint256 _unclaimedNTN) { - return realisedFees[_account] + _computeUnrealisedFees(_account); + (uint256 _atnUnrealisedFee, uint256 _ntnUnrealisedFee) = _computeUnrealisedFees(_account); + _unclaimedATN = atnRealisedFees[_account] + _atnUnrealisedFee; + _unclaimedNTN = ntnRealisedFees[_account] + _ntnUnrealisedFee; } /** @@ -151,13 +160,18 @@ contract Liquid is IERC20 */ function claimRewards() external { - uint256 totalFees = _realiseFees(msg.sender); - delete realisedFees[msg.sender]; + (uint256 _atnRealisedFees, uint256 _ntnRealisedFees) = _realiseFees(msg.sender); + delete atnRealisedFees[msg.sender]; + delete ntnRealisedFees[msg.sender]; // Send the AUT // solhint-disable-next-line avoid-low-level-calls - (bool sent, ) = msg.sender.call{value: totalFees}(""); - require(sent, "Failed to send Auton"); + (bool sent, ) = msg.sender.call{value: _atnRealisedFees}(""); + require(sent, "Failed to send ATN"); + + // Send the NTN + sent = autonityContract.transfer(msg.sender,_ntnRealisedFees); + require(sent, "Failed to send NTN"); } /** @@ -336,7 +350,8 @@ contract Liquid is IERC20 if (_value == _balance) { // aka balances[_delegator] == 0 // get back some gas - delete unrealisedFeeFactors[_delegator]; + delete atnUnrealisedFeeFactors[_delegator]; + delete ntnUnrealisedFeeFactors[_delegator]; } // when transferring, this value will just be increased // again by the same amount. @@ -351,20 +366,27 @@ contract Liquid is IERC20 * delegator, so should not be called if the delegators balance is * known to be zero (or the caller should handle this case itself). * @param _delegator, the target account to compute fees. - * @return _realisedFees that is the calculated amount of AUT that + * @return _atnRealisedFees that is the calculated amount of AUT that + * the delegator is entitled to withdraw. + * @return _ntnRealisedFees that is the calculated amount of NTN that * the delegator is entitled to withdraw. */ function _realiseFees(address _delegator) private - returns (uint256 _realisedFees) + returns (uint256 _atnRealisedFees, uint256 _ntnRealisedFees) { - uint256 _unrealisedFees = _computeUnrealisedFees(_delegator); - _realisedFees = realisedFees[_delegator] + _unrealisedFees; - realisedFees[_delegator] = _realisedFees; - unrealisedFeeFactors[_delegator] = lastUnrealisedFeeFactor; + (uint256 _atnUnrealisedFee, uint256 _ntnUnrealisedFee) = _computeUnrealisedFees(_delegator); + + _atnRealisedFees = atnRealisedFees[_delegator] + _atnUnrealisedFee; + atnRealisedFees[_delegator] = _atnRealisedFees; + atnUnrealisedFeeFactors[_delegator] = atnLastUnrealisedFeeFactor; + + _ntnRealisedFees = ntnRealisedFees[_delegator] + _ntnUnrealisedFee; + ntnRealisedFees[_delegator] = _ntnRealisedFees; + ntnUnrealisedFeeFactors[_delegator] = ntnLastUnrealisedFeeFactor; } function _computeUnrealisedFees(address _delegator) - private view returns (uint256) + private view returns (uint256 _atnUnrealisedFee, uint256 _ntnUnrealisedFee) { // TODO: save looking up the LNEW balance multiple times by passing it // in here. @@ -373,7 +395,7 @@ contract Liquid is IERC20 // Early out if _lnewBalance == 0 if (_stakerBalance == 0) { - return 0; + return (0,0); } // If the delegator has a non-zero balance, there should @@ -384,14 +406,14 @@ contract Liquid is IERC20 // Unrealised fees are: // balance x (f_{last_epoch} - f_{deposit_epoch}) - uint256 _unrealisedFeeFactor = - lastUnrealisedFeeFactor - unrealisedFeeFactors[_delegator]; + uint256 _atnUnrealisedFeeFactor = + atnLastUnrealisedFeeFactor - atnUnrealisedFeeFactors[_delegator]; + uint256 _ntnUnrealisedFeeFactor = + ntnLastUnrealisedFeeFactor - ntnUnrealisedFeeFactors[_delegator]; // FEE_FACTOR_UNIT_RECIP = 10^9 won't cause overflow - uint256 _unrealisedFee = - (_unrealisedFeeFactor * _stakerBalance) / FEE_FACTOR_UNIT_RECIP; - - return _unrealisedFee; + _atnUnrealisedFee = (_atnUnrealisedFeeFactor * _stakerBalance) / FEE_FACTOR_UNIT_RECIP; + _ntnUnrealisedFee = (_ntnUnrealisedFeeFactor * _stakerBalance) / FEE_FACTOR_UNIT_RECIP; } /** @@ -426,7 +448,7 @@ contract Liquid is IERC20 modifier onlyAutonity { require( - msg.sender == autonityContract, + msg.sender == address(autonityContract), "Call restricted to the Autonity Contract"); _; } diff --git a/autonity/solidity/contracts/bindings.sol b/autonity/solidity/contracts/bindings.sol index 7de29bf310..4bb7732445 100644 --- a/autonity/solidity/contracts/bindings.sol +++ b/autonity/solidity/contracts/bindings.sol @@ -17,3 +17,4 @@ import "./asm/SupplyControl.sol"; import "./AutonityUpgradeTest.sol"; import "./Tests.sol"; import "./UpgradeManager.sol"; +import "./InflationController.sol"; diff --git a/autonity/solidity/contracts/interfaces/IAccountability.sol b/autonity/solidity/contracts/interfaces/IAccountability.sol index 30ee07722f..9d6d2d6027 100644 --- a/autonity/solidity/contracts/interfaces/IAccountability.sol +++ b/autonity/solidity/contracts/interfaces/IAccountability.sol @@ -13,7 +13,7 @@ interface IAccountability { * @notice distribute slashing rewards to reporters. * @param _validator the address of the validator node being slashed. */ - function distributeRewards(address _validator) external payable; + function distributeRewards(address _validator, uint256 _ntnReward) external payable; /** * @notice called by the Autonity Contract when the epoch period is updated. diff --git a/autonity/solidity/contracts/interfaces/IAutonity.sol b/autonity/solidity/contracts/interfaces/IAutonity.sol index a70f8a6006..66b42f81d4 100644 --- a/autonity/solidity/contracts/interfaces/IAutonity.sol +++ b/autonity/solidity/contracts/interfaces/IAutonity.sol @@ -16,4 +16,5 @@ interface IAutonity { * @notice Returns the current Oracle account. */ function getOracle() external view returns (address); + } diff --git a/autonity/solidity/contracts/interfaces/IInflationController.sol b/autonity/solidity/contracts/interfaces/IInflationController.sol new file mode 100644 index 0000000000..0b03cead9e --- /dev/null +++ b/autonity/solidity/contracts/interfaces/IInflationController.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.2 ; +/** + * @dev Interface of the Inflation Controller Contract + */ +interface IInflationController { + + /** + * @notice Main function. Calculate NTN current supply delta. + */ + function calculateSupplyDelta( + uint256 _currentSupply, + uint256 _inflationReserve, + uint256 _lastEpochTime, + uint256 _currentEpochTime + ) + external + view + returns (uint256); + +} diff --git a/autonity/solidity/test/autonity/genesis-tendermint.json b/autonity/solidity/test/autonity/genesis-tendermint.json index 451eaf62cc..2f839076a2 100644 --- a/autonity/solidity/test/autonity/genesis-tendermint.json +++ b/autonity/solidity/test/autonity/genesis-tendermint.json @@ -11,6 +11,7 @@ "treasury": "0x4b07239bd581d21aefcdee0c6db38070f9a5fd2d", "treasuryFee": 150000000, "operator": "0x4b07239bd581d21aefcdee0c6db38070f9a5fd2d", + "initialInflationReserve": "0x2116545850052128000000", "validators": [ { "enode": "enode://e766ac390e2d99b559aef773c3656fa8d50df2310496ac26ca6c3fc84e21dabb8a0162cc8e34f938d45e0a8ed04955f8ddf1c380182f8ef17a3f08885064505f@172.25.0.11:30303", @@ -36,7 +37,7 @@ "testMode": true }, "nonce": "0x0", - "timestamp": "0x0", + "timestamp": "0x66428631", "baseFee": "15000000000", "gasLimit": "0xffffffffffff", "difficulty": "0x0", diff --git a/autonity/solidity/test/config.js b/autonity/solidity/test/config.js index aa6692746c..87e3f49137 100644 --- a/autonity/solidity/test/config.js +++ b/autonity/solidity/test/config.js @@ -6,6 +6,7 @@ const EPOCH_PERIOD = 30; const DELEGATION_RATE = 100; const UN_BONDING_PERIOD = 60; const TREASURY_FEE = "10000000000000000"; +const INITIAL_INFLATION_RESERVE = "40000000000000000000000000"; const MIN_EPOCH_PERIOD = 30; const VERSION = 0; const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; @@ -61,6 +62,22 @@ const GENESIS_PRIVATE_KEYS = [ "0c8698f456533170fe07c6dcb753d47bef8bedd46443efa57a859c989887b56b", ]; +const INFLATION_CONTROLLER_CONFIG = { + "iInit": "0x8dc0fa1e", + "iTrans": "0x67f3ea9f", + "aE": "0x13d4d3edc8088000", + "T": "0x685807f13a9c4278000000", + "iPerm": "0x147820d72", +} + +const STABILIZATION_CONFIG = { + "borrowInterestRate" : 0, + "liquidationRatio" : 1, + "minCollateralizationRatio" : 2, + "minDebtRequirement" : 0, + "targetPrice" : 0, +} + function autonityConfig(operator, treasuryAccount) { return { "policy": { @@ -69,6 +86,7 @@ function autonityConfig(operator, treasuryAccount) { "delegationRate": DELEGATION_RATE, "unbondingPeriod" : UN_BONDING_PERIOD, "treasuryAccount": treasuryAccount, + "initialInflationReserve": INITIAL_INFLATION_RESERVE, }, "contracts": { "oracleContract" : ZERO_ADDRESS, // gets updated in deployContracts() @@ -77,6 +95,7 @@ function autonityConfig(operator, treasuryAccount) { "supplyControlContract" :ZERO_ADDRESS, "stabilizationContract" :ZERO_ADDRESS, "upgradeManagerContract" :ZERO_ADDRESS, + "inflationControllerContract" :ZERO_ADDRESS, }, "protocol": { "operatorAccount": operator, @@ -136,6 +155,8 @@ module.exports = { GENESIS_NODE_ADDRESSES: GENESIS_NODE_ADDRESSES, BASE_VALIDATOR: BASE_VALIDATOR, GENESIS_PRIVATE_KEYS: GENESIS_PRIVATE_KEYS, + INFLATION_CONTROLLER_CONFIG: INFLATION_CONTROLLER_CONFIG, + STABILIZATION_CONFIG: STABILIZATION_CONFIG, autonityConfig: autonityConfig, validators: validators, }; \ No newline at end of file diff --git a/autonity/solidity/test/utils.js b/autonity/solidity/test/utils.js index bc4170ca7e..3281942c3a 100644 --- a/autonity/solidity/test/utils.js +++ b/autonity/solidity/test/utils.js @@ -1,5 +1,6 @@ const assert = require('assert'); const util = require('util'); +const config = require('./config'); const exec = util.promisify(require('child_process').exec); const Autonity = artifacts.require("Autonity"); const Accountability = artifacts.require("Accountability"); @@ -8,6 +9,7 @@ const Oracle = artifacts.require("Oracle") const Acu = artifacts.require("ACU") const SupplyControl = artifacts.require("SupplyControl") const Stabilization = artifacts.require("Stabilization") +const InflationController = artifacts.require("InflationController") const AutonityTest = artifacts.require("AutonityTest"); const mockEnodeVerifier = artifacts.require("MockEnodeVerifier") const mockCommitteeSelector = artifacts.require("MockCommitteeSelector") @@ -234,16 +236,10 @@ async function initialize(autonity, autonityConfig, validators, accountabilityCo const supplyControl = await SupplyControl.new(autonity.address,operator,"0x0000000000000000000000000000000000000000",{from:deployer,value:1}) // stabilization contract, random temporary config and zeroAddress as collateral token - config = { - "borrowInterestRate" : 0, - "liquidationRatio" : 1, - "minCollateralizationRatio" : 2, - "minDebtRequirement" : 0, - "targetPrice" : 0, - } - const stabilization = await Stabilization.new(config,autonity.address,operator,oracle.address,supplyControl.address,"0x0000000000000000000000000000000000000000",{from:deployer}) + + const stabilization = await Stabilization.new(config.STABILIZATION_CONFIG,autonity.address,operator,oracle.address,supplyControl.address,"0x0000000000000000000000000000000000000000",{from:deployer}) const upgradeManager = await UpgradeManager.new(autonity.address,operator,{from:deployer}) - // setters + await supplyControl.setStabilizer(stabilization.address,{from:operator}); await autonity.setAccountabilityContract(accountability.address, {from:operator}); @@ -252,20 +248,30 @@ async function initialize(autonity, autonityConfig, validators, accountabilityCo await autonity.setStabilizationContract(acu.address, {from: operator}); await autonity.setOracleContract(oracle.address, {from:operator}); await autonity.setUpgradeManagerContract(upgradeManager.address, {from:operator}); + await shortenEpochPeriod(autonity, autonityConfig.protocol.epochPeriod, operator, deployer); } // deploys protocol contracts const deployContracts = async (validators, autonityConfig, accountabilityConfig, deployer, operator) => { + // we deploy first the inflation controller contract because it requires a genesis timestamp + // greater than the one of the autonity contract. This is obviously not going to happen for a real network but + // we can't really simulate a proper genesis sequence with truffle. As consequence all calculations + // regarding the inflation rate will be wrong here which should be tested using the native go framework. + const inflationController = await InflationController.new(config.INFLATION_CONTROLLER_CONFIG ,{from:deployer}) // autonity contract const autonity = await createAutonityContract(validators, autonityConfig, {from: deployer}); + await autonity.setInflationControllerContract(inflationController.address, {from:operator}); await initialize(autonity, autonityConfig, validators, accountabilityConfig, deployer, operator); + return autonity; }; // deploys AutonityTest, a contract inheriting Autonity and exposing the "_applyNewCommissionRates" function const deployAutonityTestContract = async (validators, autonityConfig, accountabilityConfig, deployer, operator) => { + const inflationController = await InflationController.new(config.INFLATION_CONTROLLER_CONFIG,{from:deployer}) const autonityTest = await createAutonityTestContract(validators, autonityConfig, {from: deployer}); + await autonityTest.setInflationControllerContract(inflationController.address, {from:operator}); await initialize(autonityTest, autonityConfig, validators, accountabilityConfig, deployer, operator); return autonityTest; }; diff --git a/autonity/tests/base.go b/autonity/tests/base.go index a919ea3f0b..7529697134 100644 --- a/autonity/tests/base.go +++ b/autonity/tests/base.go @@ -5,6 +5,7 @@ import ( "math" "math/big" "testing" + "time" "github.com/stretchr/testify/require" @@ -17,22 +18,26 @@ import ( ) var ( + operator = &runOptions{origin: defaultAutonityConfig.Protocol.OperatorAccount} + // todo: replicate truffle tests default config. defaultAutonityConfig = AutonityConfig{ Policy: AutonityPolicy{ - TreasuryFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.TreasuryFee), - MinBaseFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.MinBaseFee), - DelegationRate: new(big.Int).SetUint64(params.TestAutonityContractConfig.DelegationRate), - UnbondingPeriod: new(big.Int).SetUint64(params.TestAutonityContractConfig.UnbondingPeriod), - TreasuryAccount: params.TestAutonityContractConfig.Operator, + TreasuryFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.TreasuryFee), + MinBaseFee: new(big.Int).SetUint64(params.TestAutonityContractConfig.MinBaseFee), + DelegationRate: new(big.Int).SetUint64(params.TestAutonityContractConfig.DelegationRate), + UnbondingPeriod: new(big.Int).SetUint64(params.TestAutonityContractConfig.UnbondingPeriod), + InitialInflationReserve: (*big.Int)(params.TestAutonityContractConfig.InitialInflationReserve), + TreasuryAccount: params.TestAutonityContractConfig.Operator, }, Contracts: AutonityContracts{ - AccountabilityContract: params.AccountabilityContractAddress, - OracleContract: params.OracleContractAddress, - AcuContract: params.ACUContractAddress, - SupplyControlContract: params.SupplyControlContractAddress, - StabilizationContract: params.StabilizationContractAddress, - UpgradeManagerContract: params.UpgradeManagerContractAddress, + AccountabilityContract: params.AccountabilityContractAddress, + OracleContract: params.OracleContractAddress, + AcuContract: params.ACUContractAddress, + SupplyControlContract: params.SupplyControlContractAddress, + StabilizationContract: params.StabilizationContractAddress, + UpgradeManagerContract: params.UpgradeManagerContractAddress, + InflationControllerContract: params.InflationControllerContractAddress, }, Protocol: AutonityProtocol{ OperatorAccount: params.TestAutonityContractConfig.Operator, @@ -75,13 +80,16 @@ type runner struct { // protocol contracts // todo: see if genesis deployment flow can be abstracted somehow - autonity *Autonity - accountability *Accountability - oracle *Oracle - acu *ACU - supplyControl *SupplyControl - stabilization *Stabilization - UpgradeManager *UpgradeManager + autonity *Autonity + accountability *Accountability + oracle *Oracle + acu *ACU + supplyControl *SupplyControl + stabilization *Stabilization + upgradeManager *UpgradeManager + inflationController *InflationController + + validators []AutonityValidator // genesis validators for easy access } func (r *runner) call(opts *runOptions, addr common.Address, input []byte) ([]byte, uint64, error) { @@ -149,6 +157,7 @@ func (r *runner) waitNBlocks(n int) { //nolint // consider monitoring gas cost here and fail if it's too much require.NoError(r.t, err, "finalize function error in waitNblocks", i) r.evm.Context.BlockNumber = new(big.Int).Add(big.NewInt(int64(i+1)), start) + r.evm.Context.Time = new(big.Int).Add(r.evm.Context.Time, common.Big1) } } @@ -159,7 +168,7 @@ func (r *runner) waitNextEpoch() { //nolint require.NoError(r.t, err) nextEpochBlock := new(big.Int).Add(epochPeriod, lastEpochBlock) diff := new(big.Int).Sub(nextEpochBlock, r.evm.Context.BlockNumber) - r.waitNBlocks(int(diff.Uint64())) + r.waitNBlocks(int(diff.Uint64() + 1)) } func (r *runner) sendAUT(sender, recipient common.Address, value *big.Int) { //nolint @@ -177,6 +186,7 @@ func initalizeEVM() (*vm.EVM, error) { Transfer: func(vm.StateDB, common.Address, common.Address, *big.Int) {}, CanTransfer: func(vm.StateDB, common.Address, *big.Int) bool { return true }, BlockNumber: common.Big0, + Time: big.NewInt(time.Now().Unix()), } txContext := vm.TxContext{ Origin: common.Address{}, @@ -203,11 +213,11 @@ func setup(t *testing.T, _ *params.ChainConfig) *runner { // // Step 1: Autonity Contract Deployment // - validators := make([]AutonityValidator, 0, len(params.TestAutonityContractConfig.Validators)) + r.validators = make([]AutonityValidator, 0, len(params.TestAutonityContractConfig.Validators)) for _, v := range params.TestAutonityContractConfig.Validators { - validators = append(validators, genesisToAutonityVal(v)) + r.validators = append(r.validators, genesisToAutonityVal(v)) } - _, _, r.autonity, err = r.deployAutonity(nil, validators, defaultAutonityConfig) + _, _, r.autonity, err = r.deployAutonity(nil, r.validators, defaultAutonityConfig) require.NoError(t, err) require.Equal(t, r.autonity.address, params.AutonityContractAddress) _, err = r.autonity.FinalizeInitialization(nil) @@ -288,11 +298,27 @@ func setup(t *testing.T, _ *params.ChainConfig) *runner { // // Step 7: Upgrade Manager contract deployment // - _, _, r.UpgradeManager, err = r.deployUpgradeManager(nil, + _, _, r.upgradeManager, err = r.deployUpgradeManager(nil, r.autonity.address, defaultAutonityConfig.Protocol.OperatorAccount) require.NoError(t, err) - require.Equal(t, r.UpgradeManager.address, params.UpgradeManagerContractAddress) + require.Equal(t, r.upgradeManager.address, params.UpgradeManagerContractAddress) + + // + // Step 8: Deploy Inflation Controller + // + p := &InflationControllerParams{ + IInit: (*big.Int)(params.DefaultInflationControllerGenesis.IInit), + ITrans: (*big.Int)(params.DefaultInflationControllerGenesis.ITrans), + AE: (*big.Int)(params.DefaultInflationControllerGenesis.Ae), + T: (*big.Int)(params.DefaultInflationControllerGenesis.T), + IPerm: (*big.Int)(params.DefaultInflationControllerGenesis.IPerm), + } + _, _, r.inflationController, err = r.deployInflationController(nil, *p) + require.NoError(r.t, err) + + r.evm.Context.BlockNumber = common.Big1 + r.evm.Context.Time = new(big.Int).Add(r.evm.Context.Time, common.Big1) return r } diff --git a/autonity/tests/bindings.go b/autonity/tests/bindings.go index 9d6acdfca7..9afec8e577 100644 --- a/autonity/tests/bindings.go +++ b/autonity/tests/bindings.go @@ -72,21 +72,23 @@ type AutonityConfig struct { // AutonityContracts is an auto generated low-level Go binding around an user-defined struct. type AutonityContracts struct { - AccountabilityContract common.Address - OracleContract common.Address - AcuContract common.Address - SupplyControlContract common.Address - StabilizationContract common.Address - UpgradeManagerContract common.Address + AccountabilityContract common.Address + OracleContract common.Address + AcuContract common.Address + SupplyControlContract common.Address + StabilizationContract common.Address + UpgradeManagerContract common.Address + InflationControllerContract common.Address } // AutonityPolicy is an auto generated low-level Go binding around an user-defined struct. type AutonityPolicy struct { - TreasuryFee *big.Int - MinBaseFee *big.Int - DelegationRate *big.Int - UnbondingPeriod *big.Int - TreasuryAccount common.Address + TreasuryFee *big.Int + MinBaseFee *big.Int + DelegationRate *big.Int + UnbondingPeriod *big.Int + InitialInflationReserve *big.Int + TreasuryAccount common.Address } // AutonityProtocol is an auto generated low-level Go binding around an user-defined struct. @@ -126,7 +128,16 @@ type IOracleRoundData struct { Round *big.Int Price *big.Int Timestamp *big.Int - Success bool + Status *big.Int +} + +// InflationControllerParams is an auto generated low-level Go binding around an user-defined struct. +type InflationControllerParams struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int } // StabilizationConfig is an auto generated low-level Go binding around an user-defined struct. @@ -153,7 +164,7 @@ var ACUMetaData = &bind.MetaData{ "a2e62045": "update()", "3fa4f245": "value()", }, - Bin: "0x60806040523480156200001157600080fd5b50604051620018ee380380620018ee83398101604081905262000034916200036d565b858580518251146200005957604051634ff799c560e01b815260040160405180910390fd5b60005b8151811015620000c0576001600160ff1b038282815181106200008357620000836200052c565b60200260200101511115620000ab57604051634ff799c560e01b815260040160405180910390fd5b80620000b78162000558565b9150506200005c565b508751620000d69060039060208b01906200014b565b508651620000ec9060049060208a0190620001a8565b506001869055620000ff86600a62000673565b6002555050600680546001600160a01b039485166001600160a01b03199182161790915560078054938516938216939093179092556008805491909316911617905550620007e3915050565b82805482825590600052602060002090810192821562000196579160200282015b8281111562000196578251829062000185908262000717565b50916020019190600101906200016c565b50620001a4929150620001f4565b5090565b828054828255906000526020600020908101928215620001e6579160200282015b82811115620001e6578251825591602001919060010190620001c9565b50620001a492915062000215565b80821115620001a45760006200020b82826200022c565b50600101620001f4565b5b80821115620001a4576000815560010162000216565b5080546200023a9062000688565b6000825580601f106200024b575050565b601f0160209004906000526020600020908101906200026b919062000215565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002af57620002af6200026e565b604052919050565b60006001600160401b03821115620002d357620002d36200026e565b5060051b60200190565b600082601f830112620002ef57600080fd5b81516020620003086200030283620002b7565b62000284565b82815260059290921b840181019181810190868411156200032857600080fd5b8286015b848110156200034557805183529183019183016200032c565b509695505050505050565b80516001600160a01b03811681146200036857600080fd5b919050565b60008060008060008060c087890312156200038757600080fd5b86516001600160401b038111156200039e57600080fd5b8701601f81018913620003b057600080fd5b8051620003c16200030282620002b7565b808282526020820191508b60208460051b8601011115620003e157600080fd5b602084015b60208460051b860101811015620004b85780516001600160401b038111156200040e57600080fd5b8d603f82880101126200042057600080fd5b858101602001516001600160401b038111156200044157620004416200026e565b62000456601f8201601f191660200162000284565b8181528f604083858b01010111156200046e57600080fd5b60005b828110156200049657604081858b010101516020828401015260208101905062000471565b50600060208383010152808652505050602083019250602081019050620003e6565b5060208b0151909950925050506001600160401b03811115620004da57600080fd5b620004e889828a01620002dd565b95505060408701519350620005006060880162000350565b9250620005106080880162000350565b91506200052060a0880162000350565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200056d576200056d62000542565b5060010190565b600181815b80851115620005b557816000190482111562000599576200059962000542565b80851615620005a757918102915b93841c939080029062000579565b509250929050565b600082620005ce575060016200066d565b81620005dd575060006200066d565b8160018114620005f65760028114620006015762000621565b60019150506200066d565b60ff84111562000615576200061562000542565b50506001821b6200066d565b5060208310610133831016604e8410600b841016171562000646575081810a6200066d565b62000652838362000574565b806000190482111562000669576200066962000542565b0290505b92915050565b6000620006818383620005bd565b9392505050565b600181811c908216806200069d57607f821691505b602082108103620006be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620006ed5750805b601f850160051c820191505b818110156200070e57828155600101620006f9565b5050505b505050565b81516001600160401b038111156200073357620007336200026e565b6200074b8162000744845462000688565b84620006c4565b602080601f8311600181146200078357600084156200076a5750858301515b600019600386901b1c1916600185901b1785556200070e565b600085815260208120601f198616915b82811015620007b45788860151825594840194600190910190840162000793565b5085821015620007d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110fb80620007f36000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637adbf973116100665780637adbf973146100fe578063a2e6204514610111578063b3ab15fb14610129578063d54d27991461013c578063f51e181a1461015157600080fd5b806307039ff9146100a3578063146ca531146100c15780633fa4f245146100d857806344b4708a146100e0578063683dd191146100f5575b600080fd5b6100ab61015a565b6040516100b8919061093c565b60405180910390f35b6100ca60005481565b6040519081526020016100b8565b6100ca610233565b6100f36100ee366004610a2c565b61025e565b005b6100ca60025481565b6100f361010c366004610b5e565b61038a565b6101196103d6565b60405190151581526020016100b8565b6100f3610137366004610b5e565b610704565b610144610750565b6040516100b89190610bc2565b6100ca60015481565b60606003805480602002602001604051908101604052809291908181526020016000905b8282101561022a57838290600052602060002001805461019d90610bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546101c990610bd5565b80156102165780601f106101eb57610100808354040283529160200191610216565b820191906000526020600020905b8154815290600101906020018083116101f957829003601f168201915b50505050508152602001906001019061017e565b50505050905090565b6000805460000361025757604051631d3e00bb60e11b815260040160405180910390fd5b5060055490565b8282805182511461028257604051634ff799c560e01b815260040160405180910390fd5b60005b81518110156102e1576001600160ff1b038282815181106102a8576102a8610c0f565b602002602001015111156102cf57604051634ff799c560e01b815260040160405180910390fd5b806102d981610c3b565b915050610285565b506007546001600160a01b0316331461030c576040516282b42960e81b815260040160405180910390fd5b845161031f9060039060208801906107a8565b5083516103339060049060208701906107fe565b50600183905561034483600a610d3a565b6002556040517fdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c099061037b90879087908790610d46565b60405180910390a15050505050565b6006546001600160a01b031633146103b4576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610403576040516282b42960e81b815260040160405180910390fd5b60006001600860009054906101000a90046001600160a01b03166001600160a01b0316639f8743f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190610d7c565b6104889190610d95565b9050806000541061049b57600091505090565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105159190610d7c565b905060005b60035481101561069f57604051661554d10b5554d160ca1b6020820152600090602701604051602081830303815290604052805190602001206003838154811061056657610566610c0f565b906000526020600020016040516020016105809190610da8565b60405160208183030381529060405280519060200120036105a2575081610656565b600854600380546000926001600160a01b031691633c8510fd91899190879081106105cf576105cf610c0f565b906000526020600020016040518363ffffffff1660e01b81526004016105f6929190610e1e565b608060405180830381865afa158015610613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106379190610eb1565b9050806060015161064f576000965050505050505090565b6020015190505b6004828154811061066957610669610c0f565b90600052602060002001548161067f9190610f22565b6106899085610f52565b935050808061069790610c3b565b91505061051a565b506106aa8183610f7a565b60058190556000849055604080514381524260208201528082018690526060810192909252517f23f161ca67071b3e902d4fa7afade82672c6160677e89d373a830145bdda6d269181900360800190a16001935050505090565b6006546001600160a01b0316331461072e576040516282b42960e81b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480548060200260200160405190810160405280929190818152602001828054801561079e57602002820191906000526020600020905b81548152602001906001019080831161078a575b5050505050905090565b8280548282559060005260206000209081019282156107ee579160200282015b828111156107ee57825182906107de9082611005565b50916020019190600101906107c8565b506107fa929150610845565b5090565b828054828255906000526020600020908101928215610839579160200282015b8281111561083957825182559160200191906001019061081e565b506107fa929150610862565b808211156107fa5760006108598282610877565b50600101610845565b5b808211156107fa5760008155600101610863565b50805461088390610bd5565b6000825580601f10610893575050565b601f0160209004906000526020600020908101906108b19190610862565b50565b600082825180855260208086019550808260051b8401018186016000805b8581101561092e57601f1980888603018b5283518051808752845b81811015610908578281018901518882018a015288016108ed565b5086810188018590529b87019b601f0190911690940185019350918401916001016108d2565b509198975050505050505050565b60208152600061094f60208301846108b4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099557610995610956565b604052919050565b600067ffffffffffffffff8211156109b7576109b7610956565b5060051b60200190565b600082601f8301126109d257600080fd5b813560206109e76109e28361099d565b61096c565b82815260059290921b84018101918181019086841115610a0657600080fd5b8286015b84811015610a215780358352918301918301610a0a565b509695505050505050565b600080600060608486031215610a4157600080fd5b833567ffffffffffffffff80821115610a5957600080fd5b818601915086601f830112610a6d57600080fd5b81356020610a7d6109e28361099d565b82815260059290921b8401810191818101908a841115610a9c57600080fd5b8286015b84811015610b2957803586811115610ab85760008081fd5b8701603f81018d13610aca5760008081fd5b84810135604088821115610ae057610ae0610956565b610af2601f8301601f1916880161096c565b8281528f82848601011115610b075760008081fd5b8282850189830137600092810188019290925250845250918301918301610aa0565b5097505087013592505080821115610b4057600080fd5b50610b4d868287016109c1565b925050604084013590509250925092565b600060208284031215610b7057600080fd5b81356001600160a01b038116811461094f57600080fd5b600081518084526020808501945080840160005b83811015610bb757815187529582019590820190600101610b9b565b509495945050505050565b60208152600061094f6020830184610b87565b600181811c90821680610be957607f821691505b602082108103610c0957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610c4d57610c4d610c25565b5060010190565b600181815b80851115610c8f578160001904821115610c7557610c75610c25565b80851615610c8257918102915b93841c9390800290610c59565b509250929050565b600082610ca657506001610d34565b81610cb357506000610d34565b8160018114610cc95760028114610cd357610cef565b6001915050610d34565b60ff841115610ce457610ce4610c25565b50506001821b610d34565b5060208310610133831016604e8410600b8410161715610d12575081810a610d34565b610d1c8383610c54565b8060001904821115610d3057610d30610c25565b0290505b92915050565b600061094f8383610c97565b606081526000610d5960608301866108b4565b8281036020840152610d6b8186610b87565b915050826040830152949350505050565b600060208284031215610d8e57600080fd5b5051919050565b81810381811115610d3457610d34610c25565b6000808354610db681610bd5565b60018281168015610dce5760018114610de357610e12565b60ff1984168752821515830287019450610e12565b8760005260208060002060005b85811015610e095781548a820152908401908201610df0565b50505082870194505b50929695505050505050565b8281526000602060408184015260008454610e3881610bd5565b8060408701526060600180841660008114610e5a5760018114610e7457610ea2565b60ff1985168984015283151560051b890183019550610ea2565b896000528660002060005b85811015610e9a5781548b8201860152908301908801610e7f565b8a0184019650505b50939998505050505050505050565b600060808284031215610ec357600080fd5b6040516080810181811067ffffffffffffffff82111715610ee657610ee6610956565b806040525082518152602083015160208201526040830151604082015260608301518015158114610f1657600080fd5b60608201529392505050565b80820260008212600160ff1b84141615610f3e57610f3e610c25565b8181058314821517610d3457610d34610c25565b8082018281126000831280158216821582161715610f7257610f72610c25565b505092915050565b600082610f9757634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610fb157610fb1610c25565b500590565b601f82111561100057600081815260208120601f850160051c81016020861015610fdd5750805b601f850160051c820191505b81811015610ffc57828155600101610fe9565b5050505b505050565b815167ffffffffffffffff81111561101f5761101f610956565b6110338161102d8454610bd5565b84610fb6565b602080601f83116001811461106857600084156110505750858301515b600019600386901b1c1916600185901b178555610ffc565b600085815260208120601f198616915b8281101561109757888601518255948401946001909101908401611078565b50858210156110b55787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220c25476da0b15fed74e3b9e9171c129acdb415ba224e67b3a1d0b383c8772037764736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b50604051620018e6380380620018e683398101604081905262000034916200036d565b858580518251146200005957604051634ff799c560e01b815260040160405180910390fd5b60005b8151811015620000c0576001600160ff1b038282815181106200008357620000836200052c565b60200260200101511115620000ab57604051634ff799c560e01b815260040160405180910390fd5b80620000b78162000558565b9150506200005c565b508751620000d69060039060208b01906200014b565b508651620000ec9060049060208a0190620001a8565b506001869055620000ff86600a62000673565b6002555050600680546001600160a01b039485166001600160a01b03199182161790915560078054938516938216939093179092556008805491909316911617905550620007e3915050565b82805482825590600052602060002090810192821562000196579160200282015b8281111562000196578251829062000185908262000717565b50916020019190600101906200016c565b50620001a4929150620001f4565b5090565b828054828255906000526020600020908101928215620001e6579160200282015b82811115620001e6578251825591602001919060010190620001c9565b50620001a492915062000215565b80821115620001a45760006200020b82826200022c565b50600101620001f4565b5b80821115620001a4576000815560010162000216565b5080546200023a9062000688565b6000825580601f106200024b575050565b601f0160209004906000526020600020908101906200026b919062000215565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002af57620002af6200026e565b604052919050565b60006001600160401b03821115620002d357620002d36200026e565b5060051b60200190565b600082601f830112620002ef57600080fd5b81516020620003086200030283620002b7565b62000284565b82815260059290921b840181019181810190868411156200032857600080fd5b8286015b848110156200034557805183529183019183016200032c565b509695505050505050565b80516001600160a01b03811681146200036857600080fd5b919050565b60008060008060008060c087890312156200038757600080fd5b86516001600160401b038111156200039e57600080fd5b8701601f81018913620003b057600080fd5b8051620003c16200030282620002b7565b808282526020820191508b60208460051b8601011115620003e157600080fd5b602084015b60208460051b860101811015620004b85780516001600160401b038111156200040e57600080fd5b8d603f82880101126200042057600080fd5b858101602001516001600160401b038111156200044157620004416200026e565b62000456601f8201601f191660200162000284565b8181528f604083858b01010111156200046e57600080fd5b60005b828110156200049657604081858b010101516020828401015260208101905062000471565b50600060208383010152808652505050602083019250602081019050620003e6565b5060208b0151909950925050506001600160401b03811115620004da57600080fd5b620004e889828a01620002dd565b95505060408701519350620005006060880162000350565b9250620005106080880162000350565b91506200052060a0880162000350565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200056d576200056d62000542565b5060010190565b600181815b80851115620005b557816000190482111562000599576200059962000542565b80851615620005a757918102915b93841c939080029062000579565b509250929050565b600082620005ce575060016200066d565b81620005dd575060006200066d565b8160018114620005f65760028114620006015762000621565b60019150506200066d565b60ff84111562000615576200061562000542565b50506001821b6200066d565b5060208310610133831016604e8410600b841016171562000646575081810a6200066d565b62000652838362000574565b806000190482111562000669576200066962000542565b0290505b92915050565b6000620006818383620005bd565b9392505050565b600181811c908216806200069d57607f821691505b602082108103620006be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620006ed5750805b601f850160051c820191505b818110156200070e57828155600101620006f9565b5050505b505050565b81516001600160401b038111156200073357620007336200026e565b6200074b8162000744845462000688565b84620006c4565b602080601f8311600181146200078357600084156200076a5750858301515b600019600386901b1c1916600185901b1785556200070e565b600085815260208120601f198616915b82811015620007b45788860151825594840194600190910190840162000793565b5085821015620007d35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6110f380620007f36000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637adbf973116100665780637adbf973146100fe578063a2e6204514610111578063b3ab15fb14610129578063d54d27991461013c578063f51e181a1461015157600080fd5b806307039ff9146100a3578063146ca531146100c15780633fa4f245146100d857806344b4708a146100e0578063683dd191146100f5575b600080fd5b6100ab61015a565b6040516100b8919061093f565b60405180910390f35b6100ca60005481565b6040519081526020016100b8565b6100ca610233565b6100f36100ee366004610a2f565b61025e565b005b6100ca60025481565b6100f361010c366004610b61565b61038a565b6101196103d6565b60405190151581526020016100b8565b6100f3610137366004610b61565b610707565b610144610753565b6040516100b89190610bc5565b6100ca60015481565b60606003805480602002602001604051908101604052809291908181526020016000905b8282101561022a57838290600052602060002001805461019d90610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546101c990610bd8565b80156102165780601f106101eb57610100808354040283529160200191610216565b820191906000526020600020905b8154815290600101906020018083116101f957829003601f168201915b50505050508152602001906001019061017e565b50505050905090565b6000805460000361025757604051631d3e00bb60e11b815260040160405180910390fd5b5060055490565b8282805182511461028257604051634ff799c560e01b815260040160405180910390fd5b60005b81518110156102e1576001600160ff1b038282815181106102a8576102a8610c12565b602002602001015111156102cf57604051634ff799c560e01b815260040160405180910390fd5b806102d981610c3e565b915050610285565b506007546001600160a01b0316331461030c576040516282b42960e81b815260040160405180910390fd5b845161031f9060039060208801906107ab565b508351610333906004906020870190610801565b50600183905561034483600a610d3d565b6002556040517fdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c099061037b90879087908790610d49565b60405180910390a15050505050565b6006546001600160a01b031633146103b4576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546000906001600160a01b03163314610403576040516282b42960e81b815260040160405180910390fd5b60006001600860009054906101000a90046001600160a01b03166001600160a01b0316639f8743f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190610d7f565b6104889190610d98565b9050806000541061049b57600091505090565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105159190610d7f565b905060005b6003548110156106a257604051661554d10b5554d160ca1b6020820152600090602701604051602081830303815290604052805190602001206003838154811061056657610566610c12565b906000526020600020016040516020016105809190610dab565b60405160208183030381529060405280519060200120036105a2575081610659565b600854600380546000926001600160a01b031691633c8510fd91899190879081106105cf576105cf610c12565b906000526020600020016040518363ffffffff1660e01b81526004016105f6929190610e21565b608060405180830381865afa158015610613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106379190610eb4565b90508060600151600014610652576000965050505050505090565b6020015190505b6004828154811061066c5761066c610c12565b9060005260206000200154816106829190610f1a565b61068c9085610f4a565b935050808061069a90610c3e565b91505061051a565b506106ad8183610f72565b60058190556000849055604080514381524260208201528082018690526060810192909252517f23f161ca67071b3e902d4fa7afade82672c6160677e89d373a830145bdda6d269181900360800190a16001935050505090565b6006546001600160a01b03163314610731576040516282b42960e81b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054806020026020016040519081016040528092919081815260200182805480156107a157602002820191906000526020600020905b81548152602001906001019080831161078d575b5050505050905090565b8280548282559060005260206000209081019282156107f1579160200282015b828111156107f157825182906107e19082610ffd565b50916020019190600101906107cb565b506107fd929150610848565b5090565b82805482825590600052602060002090810192821561083c579160200282015b8281111561083c578251825591602001919060010190610821565b506107fd929150610865565b808211156107fd57600061085c828261087a565b50600101610848565b5b808211156107fd5760008155600101610866565b50805461088690610bd8565b6000825580601f10610896575050565b601f0160209004906000526020600020908101906108b49190610865565b50565b600082825180855260208086019550808260051b8401018186016000805b8581101561093157601f1980888603018b5283518051808752845b8181101561090b578281018901518882018a015288016108f0565b5086810188018590529b87019b601f0190911690940185019350918401916001016108d5565b509198975050505050505050565b60208152600061095260208301846108b7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561099857610998610959565b604052919050565b600067ffffffffffffffff8211156109ba576109ba610959565b5060051b60200190565b600082601f8301126109d557600080fd5b813560206109ea6109e5836109a0565b61096f565b82815260059290921b84018101918181019086841115610a0957600080fd5b8286015b84811015610a245780358352918301918301610a0d565b509695505050505050565b600080600060608486031215610a4457600080fd5b833567ffffffffffffffff80821115610a5c57600080fd5b818601915086601f830112610a7057600080fd5b81356020610a806109e5836109a0565b82815260059290921b8401810191818101908a841115610a9f57600080fd5b8286015b84811015610b2c57803586811115610abb5760008081fd5b8701603f81018d13610acd5760008081fd5b84810135604088821115610ae357610ae3610959565b610af5601f8301601f1916880161096f565b8281528f82848601011115610b0a5760008081fd5b8282850189830137600092810188019290925250845250918301918301610aa3565b5097505087013592505080821115610b4357600080fd5b50610b50868287016109c4565b925050604084013590509250925092565b600060208284031215610b7357600080fd5b81356001600160a01b038116811461095257600080fd5b600081518084526020808501945080840160005b83811015610bba57815187529582019590820190600101610b9e565b509495945050505050565b6020815260006109526020830184610b8a565b600181811c90821680610bec57607f821691505b602082108103610c0c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610c5057610c50610c28565b5060010190565b600181815b80851115610c92578160001904821115610c7857610c78610c28565b80851615610c8557918102915b93841c9390800290610c5c565b509250929050565b600082610ca957506001610d37565b81610cb657506000610d37565b8160018114610ccc5760028114610cd657610cf2565b6001915050610d37565b60ff841115610ce757610ce7610c28565b50506001821b610d37565b5060208310610133831016604e8410600b8410161715610d15575081810a610d37565b610d1f8383610c57565b8060001904821115610d3357610d33610c28565b0290505b92915050565b60006109528383610c9a565b606081526000610d5c60608301866108b7565b8281036020840152610d6e8186610b8a565b915050826040830152949350505050565b600060208284031215610d9157600080fd5b5051919050565b81810381811115610d3757610d37610c28565b6000808354610db981610bd8565b60018281168015610dd15760018114610de657610e15565b60ff1984168752821515830287019450610e15565b8760005260208060002060005b85811015610e0c5781548a820152908401908201610df3565b50505082870194505b50929695505050505050565b8281526000602060408184015260008454610e3b81610bd8565b8060408701526060600180841660008114610e5d5760018114610e7757610ea5565b60ff1985168984015283151560051b890183019550610ea5565b896000528660002060005b85811015610e9d5781548b8201860152908301908801610e82565b8a0184019650505b50939998505050505050505050565b600060808284031215610ec657600080fd5b6040516080810181811067ffffffffffffffff82111715610ee957610ee9610959565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b80820260008212600160ff1b84141615610f3657610f36610c28565b8181058314821517610d3757610d37610c28565b8082018281126000831280158216821582161715610f6a57610f6a610c28565b505092915050565b600082610f8f57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610fa957610fa9610c28565b500590565b601f821115610ff857600081815260208120601f850160051c81016020861015610fd55750805b601f850160051c820191505b81811015610ff457828155600101610fe1565b5050505b505050565b815167ffffffffffffffff81111561101757611017610959565b61102b816110258454610bd8565b84610fae565b602080601f83116001811461106057600084156110485750858301515b600019600386901b1c1916600185901b178555610ff4565b600085815260208120601f198616915b8281101561108f57888601518255948401946001909101908401611070565b50858210156110ad5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122090a9b0d0854200a11135cda6f702d02a3d6c311a3a5d80dc2547b2edb0dca66864736f6c63430008150033", } // ACUABI is the input ABI used to generate the binding from. @@ -605,13 +616,13 @@ func (_ACU *ACU) Update(opts *runOptions) (uint64, error) { // AccountabilityMetaData contains all meta data concerning the Accountability contract. var AccountabilityMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"beneficiaries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"slashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"beneficiaries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateLow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRateMid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collusionFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"historyFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRatePrecision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"chunks\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"chunkId\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"slashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", Sigs: map[string]string{ "01567739": "beneficiaries(address)", "7ccecadd": "canAccuse(address,uint8,uint256)", "4108a95a": "canSlash(address,uint8,uint256)", "79502c55": "config()", - "1de9d9b6": "distributeRewards(address)", + "a8031a1d": "distributeRewards(address,uint256)", "b5b7a184": "epochPeriod()", "0b791430": "events(uint256)", "6c9789b0": "finalize(bool)", @@ -621,7 +632,7 @@ var AccountabilityMetaData = &bind.MetaData{ "6b5f444c": "setEpochPeriod(uint256)", "e7bb0b52": "slashingHistory(address,uint256)", }, - Bin: "0x608060405260006011553480156200001657600080fd5b5060405162003d8f38038062003d8f8339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b613ba680620001e96000396000f3fe6080604052600436106100c25760003560e01c806379502c551161007f578063b5b7a18411610059578063b5b7a1841461029f578063bebaa8fc146102c3578063c50d21f0146102f0578063e7bb0b521461031057600080fd5b806379502c55146101d75780637ccecadd1461023b5780639cb22b061461027257600080fd5b806301567739146100c75780630b7914301461011a5780631de9d9b6146101525780634108a95a146101675780636b5f444c146101975780636c9789b0146101b7575b600080fd5b3480156100d357600080fd5b506100fd6100e2366004612f7e565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012657600080fd5b5061013a610135366004612fa2565b610348565b6040516101119c9b9a99989796959493929190613045565b610165610160366004612f7e565b61045b565b005b34801561017357600080fd5b506101876101823660046130e0565b61066a565b6040519015158152602001610111565b3480156101a357600080fd5b506101656101b2366004612fa2565b61071a565b3480156101c357600080fd5b506101656101d236600461311e565b610749565b3480156101e357600080fd5b506003546004546005546006546007546008546009546102069695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610111565b34801561024757600080fd5b5061025b6102563660046130e0565b61078c565b604080519215158352602083019190915201610111565b34801561027e57600080fd5b5061029261028d366004612f7e565b6108e1565b6040516101119190613216565b3480156102ab57600080fd5b506102b560005481565b604051908152602001610111565b3480156102cf57600080fd5b506102e36102de366004612f7e565b610b08565b6040516101119190613229565b3480156102fc57600080fd5b5061016561030b3660046133be565b610da7565b34801561031c57600080fd5b506102b561032b3660046134ca565b600e60209081526000928352604080842090915290825290205481565b6002818154811061035857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b03600160201b9093048316949216929091906103ba906134f6565b80601f01602080910402602001604051908101604052809291908181526020018280546103e6906134f6565b80156104335780601f1061040857610100808354040283529160200191610433565b820191906000526020600020905b81548152906001019060200180831161041657829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6001546001600160a01b0316331461048e5760405162461bcd60e51b815260040161048590613530565b60405180910390fd5b6001546001600160a01b038281166000908152600a6020526040808220549051630c825d9760e11b8152908316600482015290929190911690631904bb2e90602401600060405180830381865afa1580156104ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051591908101906135db565b516040519091506000906001600160a01b038316906108fc90349084818181858888f193505050503d8060008114610569576040519150601f19603f3d011682016040523d82523d6000602084013e61056e565b606091505b505090508061064157600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ee9190613759565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b5050505b50506001600160a01b03166000908152600a6020526040902080546001600160a01b0319169055565b60008061067684611114565b6001546040516396b477cb60e01b8152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e99190613776565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b031633146107445760405162461bcd60e51b815260040161048590613530565b600055565b6001546001600160a01b031633146107735760405162461bcd60e51b815260040161048590613530565b61077b61117f565b8015610789576107896114d7565b50565b600080600061079a85611114565b6001546040516396b477cb60e01b8152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156107e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080d9190613776565b6001600160a01b0388166000908152600e6020908152604080832084845290915290205490915082116108475760009350600092506108d7565b6001600160a01b0387166000908152600c6020526040902054156108ce576001600160a01b0387166000908152600c602052604081205460029061088d906001906137a5565b8154811061089d5761089d6137b8565b906000526020600020906008020190506000945060036000015481600401546108c691906137ce565b9350506108d7565b60019350600092505b5050935093915050565b6108e9612e91565b6001600160a01b0382166000908152600c602052604090205461093e5760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b6044820152606401610485565b6001600160a01b0382166000908152600c6020526040902054600290610966906001906137a5565b81548110610976576109766137b8565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156109cb576109cb612fbb565b60028111156109dc576109dc612fbb565b815281546020909101906301000000900460ff166009811115610a0157610a01612fbb565b6009811115610a1257610a12612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610a4d906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a79906134f6565b8015610ac65780601f10610a9b57610100808354040283529160200191610ac6565b820191906000526020600020905b815481529060010190602001808311610aa957829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610b3d57610b3d61328b565b604051908082528060200260200182016040528015610b7657816020015b610b63612e91565b815260200190600190039081610b5b5790505b50905060005b6001600160a01b0384166000908152600b6020526040902054811015610da0576001600160a01b0384166000908152600b6020526040902080546002919083908110610bca57610bca6137b8565b906000526020600020015481548110610be557610be56137b8565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610c3a57610c3a612fbb565b6002811115610c4b57610c4b612fbb565b815281546020909101906301000000900460ff166009811115610c7057610c70612fbb565b6009811115610c8157610c81612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610cbc906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce8906134f6565b8015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110610d8257610d826137b8565b60200260200101819052508080610d98906137e1565b915050610b7c565b5092915050565b600154604051630c825d9760e11b81523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1891908101906135db565b60208101519091506001600160a01b03163314610e8d5760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201526c3932b2103b30b634b230ba37b960991b6064820152608401610485565b60808201516001600160a01b03163314610ee95760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610485565b6001826000015160ff16111561109e576000610f04836117b9565b905080610f1057505050565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610f6457610f64612fbb565b6002811115610f7557610f75612fbb565b815281546020909101906301000000900460ff166009811115610f9a57610f9a612fbb565b6009811115610fab57610fab612fbb565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610fe6906134f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611012906134f6565b801561105f5780601f106110345761010080835404028352916020019161105f565b820191906000526020600020905b81548152906001019060200180831161104257829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b6000826040015160028111156110b6576110b6612fbb565b036110c8576110c4826119f2565b5050565b6001826040015160028111156110e0576110e0612fbb565b036110ee576110c482611bf8565b60028260400151600281111561110657611106612fbb565b036110c4576110c482611d67565b6000600982600981111561112a5761112a612fbb565b036111385760025b92915050565b600082600981111561114c5761114c612fbb565b03611158576002611132565b600182600981111561116c5761116c612fbb565b03611178576002611132565b6002611132565b6011545b6010548110156114d2576000601082815481106111a2576111a26137b8565b90600052602060002001549050806000036111bd57506114c0565b6111c86001826137a5565b90506000600282815481106111df576111df6137b8565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561123457611234612fbb565b600281111561124557611245612fbb565b815281546020909101906301000000900460ff16600981111561126a5761126a612fbb565b600981111561127b5761127b612fbb565b815281546001600160a01b03600160201b9091048116602083015260018301541660408201526002820180546060909201916112b6906134f6565b80601f01602080910402602001604051908101604052809291908181526020018280546112e2906134f6565b801561132f5780601f106113045761010080835404028352916020019161132f565b820191906000526020600020905b81548152906001019060200180831161131257829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090504360036000015482610140015161138391906137ce565b1115611390575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516113bd90611114565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116113fb575050506114c0565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806114ca816137e1565b915050611183565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115519190613776565b905060005b600f548110156115c857816002600f8381548110611576576115766137b8565b906000526020600020015481548110611591576115916137b8565b906000526020600020906008020160050154036115b6576115b36001846137ce565b92505b806115c0816137e1565b915050611556565b5060005b600f548110156117ac5761179a6002600f83815481106115ee576115ee6137b8565b906000526020600020015481548110611609576116096137b8565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561165e5761165e612fbb565b600281111561166f5761166f612fbb565b815281546020909101906301000000900460ff16600981111561169457611694612fbb565b60098111156116a5576116a5612fbb565b815281546001600160a01b03600160201b9091048116602083015260018301541660408201526002820180546060909201916116e0906134f6565b80601f016020809104026020016040519081016040528092919081815260200182805461170c906134f6565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505084611ea7565b806117a4816137e1565b9150506115cc565b506110c4600f6000612f04565b6000816020015160ff166000036118ee57336000908152600d6020908152604091829020845181549286015160ff9081166101000261ffff1990941691161791909117808255918401518492829062ff000019166201000083600281111561182357611823612fbb565b021790555060608201518154829063ff0000001916630100000083600981111561184f5761184f612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906118ad9082613845565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff9182169161191c916101009004166001613905565b60ff161461196c5760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610485565b336000908152600d6020526040902060c083015161198d9160020190612441565b336000908152600d6020526040902080546001919082906119b7908290610100900460ff16613905565b92506101000a81548160ff021916908360ff160217905550816000015160ff16826020015160016119e89190613905565b60ff161492915050565b6000806000806000611a0960fe8760c0015161258b565b9450945094509450945084611a605760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611a955760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611aab57611aab612fbb565b8314611ac95760405162461bcd60e51b815260040161048590613949565b438210611b115760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610485565b60008211611b575760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b6044820152606401610485565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc59190613776565b610100880184905261012088018190524361014089015261016088018390529050611bef876125f2565b50505050505050565b6000806000806000611c0f60fc8760c0015161258b565b9450945094509450945084611c665760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611c9b5760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611cb157611cb1612fbb565b8314611ccf5760405162461bcd60e51b815260040161048590613949565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190613776565b610100880184905261012088018190524361014089015261016088018390529050611bef87612876565b6000806000806000611d7e60fd8760c0015161258b565b9450945094509450945084611dd55760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610485565b8560a001516001600160a01b0316846001600160a01b031614611e0a5760405162461bcd60e51b81526004016104859061391e565b85606001516009811115611e2057611e20612fbb565b8314611e3e5760405162461bcd60e51b815260040161048590613949565b438210611e865760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610485565b61010086018290526101608601819052611e9f86612b2d565b505050505050565b60015460a0830151604051630c825d9760e11b81526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f2291908101906135db565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080546001600160a01b03191691909216179055905060038161026001516003811115611f7357611f73612fbb565b03611f7d57505050565b6000611f94611f8f8560600151611114565b612e38565b61022083015160075491925090600090611fae9083613973565b600654611fbb9087613973565b611fc590856137ce565b611fcf91906137ce565b600954909150811115611fe157506009545b60008461012001518560c001518660a00151611ffd91906137ce565b61200791906137ce565b60095490915060009061201a8385613973565b612024919061398a565b905060008111801561203557508181145b1561216557600060a087018190526101008701819052610120870181905260c08701526101e08601805182919061206d9083906137ce565b90525061022086018051600191906120869083906137ce565b905250600361026087015260006102008701526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e0906120c99089906004016139bc565b600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b610120860151819081116121925780876101200181815161218691906137a5565b905250600090506121ad565b6101208701516121a290826137a5565b600061012089015290505b801561222a5780876101000151106121f5578087610100018181516121d291906137a5565b90525060a0870180518291906121e99083906137a5565b9052506000905061222a565b61010087015161220590826137a5565b90508661010001518760a00181815161221e91906137a5565b90525060006101008801525b60008111801561224d575060008760a001518860c0015161224b91906137ce565b115b156122f95760008760a001518860c0015161226891906137ce565b60c08901516122779084613973565b612281919061398a565b905060008860a001518960c0015161229991906137ce565b60a08a01516122a89085613973565b6122b2919061398a565b9050818960c0018181516122c691906137a5565b90525060a0890180518291906122dd9083906137a5565b9052506122ea81836137ce565b6122f490846137a5565b925050505b61230381836137a5565b915081876101e00181815161231891906137ce565b90525061022087018051600191906123319083906137ce565b90525060005461022088015160085461234a9190613973565b6123549190613973565b61235e90436137ce565b61020088015260026102608801526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e09061239c908a906004016139bc565b600060405180830381600087803b1580156123b657600080fd5b505af11580156123ca573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b8154600260018083161561010002038216048251808201602081106020841001600281146124eb5760018114612510578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156124d557815184556001840193506020820191506124b8565b815191036101000a908190040290915550611bef565b60028302826020036101000a846020036101000a602089015104020185018755611bef565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156125715781518455600184019350602082019150612554565b815191036101000a90819004029091555050505050505050565b600080600080600080865160206125a291906137ce565b90506125ac612f22565b60a081838a8c5afa6125bd57600080fd5b80516001036125cb57600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b60006126018260600151611114565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161264f5760405162461bcd60e51b815260040161048590613b2c565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff00001990911690620100009084908111156126dc576126dc612fbb565b021790555060608201518154829063ff0000001916630100000083600981111561270857612708612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906127669082613845565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f9161286a91858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c6020526040902054156128e05760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610485565b60006128ef8260600151611114565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161293d5760405162461bcd60e51b815260040161048590613b2c565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff00001990911690620100009084908111156129ca576129ca612fbb565b021790555060608201518154829063ff000000191663010000008360098111156129f6576129f6612fbb565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c08201516002820190612a549082613845565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612a9c9060016137ce565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612acc9060016137ce565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351910161286a565b60a08101516001600160a01b03166000908152600c602052604081205490819003612b9a5760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610485565b81606001516009811115612bb057612bb0612fbb565b6002612bbd6001846137a5565b81548110612bcd57612bcd6137b8565b60009182526020909120600890910201546301000000900460ff166009811115612bf957612bf9612fbb565b14612c565760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b6064820152608401610485565b6101008201516002612c696001846137a5565b81548110612c7957612c796137b8565b90600052602060002090600802016004015414612ce65760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b6064820152608401610485565b6101608201516002612cf96001846137a5565b81548110612d0957612d096137b8565b90600052602060002090600802016007015414612d745760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b6064820152608401610485565b6011545b601054811015612dde578160108281548110612d9657612d966137b8565b906000526020600020015403612dcc57600060108281548110612dbb57612dbb6137b8565b600091825260209091200155612dde565b80612dd6816137e1565b915050612d78565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f910161286a565b600081612e4757505060055490565b60018203612e5757505060055490565b60028203612e6757505060055490565b60038203612e7757505060055490565b60048203612e885750612710919050565b50612710919050565b6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906107899190612f40565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612f555760008155600101612f41565b5090565b6001600160a01b038116811461078957600080fd5b8035612f7981612f59565b919050565b600060208284031215612f9057600080fd5b8135612f9b81612f59565b9392505050565b600060208284031215612fb457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60038110612fe157612fe1612fbb565b9052565b600a8110612fe157612fe1612fbb565b60005b83811015613010578181015183820152602001612ff8565b50506000910152565b60008151808452613031816020860160208601612ff5565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e166020840152613066604084018e612fd1565b613073606084018d612fe5565b6001600160a01b038b811660808501528a1660a084015260c0830181905261309d8184018a613019565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a8110612f7957600080fd5b6000806000606084860312156130f557600080fd5b833561310081612f59565b925061310e602085016130d1565b9150604084013590509250925092565b60006020828403121561313057600080fd5b81358015158114612f9b57600080fd5b805160ff16825260006101806020830151613160602086018260ff169052565b5060408301516131736040860182612fd1565b5060608301516131866060860182612fe5565b5060808301516131a160808601826001600160a01b03169052565b5060a08301516131bc60a08601826001600160a01b03169052565b5060c08301518160c08601526131d482860182613019565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b602081526000612f9b6020830184613140565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561327e57603f1988860301845261326c858351613140565b94509285019290850190600101613250565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156132c5576132c561328b565b60405290565b604051610280810167ffffffffffffffff811182821017156132c5576132c561328b565b604051601f8201601f1916810167ffffffffffffffff811182821017156133185761331861328b565b604052919050565b803560ff81168114612f7957600080fd5b803560038110612f7957600080fd5b600067ffffffffffffffff82111561335a5761335a61328b565b50601f01601f191660200190565b600082601f83011261337957600080fd5b813561338c61338782613340565b6132ef565b8181528460208386010111156133a157600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156133d057600080fd5b813567ffffffffffffffff808211156133e857600080fd5b9083019061018082860312156133fd57600080fd5b6134056132a1565b61340e83613320565b815261341c60208401613320565b602082015261342d60408401613331565b604082015261343e606084016130d1565b606082015261344f60808401612f6e565b608082015261346060a08401612f6e565b60a082015260c08301358281111561347757600080fd5b61348387828601613368565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b600080604083850312156134dd57600080fd5b82356134e881612f59565b946020939093013593505050565b600181811c9082168061350a57607f821691505b60208210810361352a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460408201526330ba37b960e11b606082015260800190565b8051612f7981612f59565b600082601f83011261359057600080fd5b815161359e61338782613340565b8181528460208386010111156135b357600080fd5b6135c4826020830160208701612ff5565b949350505050565b805160048110612f7957600080fd5b6000602082840312156135ed57600080fd5b815167ffffffffffffffff8082111561360557600080fd5b90830190610280828603121561361a57600080fd5b6136226132cb565b61362b83613574565b815261363960208401613574565b602082015261364a60408401613574565b604082015260608301518281111561366157600080fd5b61366d8782860161357f565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101806136d9818501613574565b908201526101a083810151908201526101c080840151908201526101e0808401519082015261020080840151908201526102208084015190820152610240808401518381111561372857600080fd5b6137348882870161357f565b828401525050610260915061374a8284016135cc565b91810191909152949350505050565b60006020828403121561376b57600080fd5b8151612f9b81612f59565b60006020828403121561378857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156111325761113261378f565b634e487b7160e01b600052603260045260246000fd5b808201808211156111325761113261378f565b6000600182016137f3576137f361378f565b5060010190565b601f82111561384057600081815260208120601f850160051c810160208610156138215750805b601f850160051c820191505b81811015611e9f5782815560010161382d565b505050565b815167ffffffffffffffff81111561385f5761385f61328b565b6138738161386d84546134f6565b846137fa565b602080601f8311600181146138a857600084156138905750858301515b600019600386901b1c1916600185901b178555611e9f565b600085815260208120601f198616915b828110156138d7578886015182559484019460019091019084016138b8565b50858210156138f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff81811683821601908111156111325761113261378f565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b80820281158282048414176111325761113261378f565b6000826139a757634e487b7160e01b600052601260045260246000fd5b500490565b60048110612fe157612fe1612fbb565b602081526139d66020820183516001600160a01b03169052565b600060208301516139f260408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152613a246102a0850183613019565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0613aab818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150613b0d8483613019565b935080870151915050613b22828601826139ac565b5090949350505050565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b60608201526080019056fea2646970667358221220c3f5c249d65d7b7ea67a4c4c8dc80f94c9086be5886e05e03017b5f9ccf1d43264736f6c63430008150033", + Bin: "0x608060405260006011553480156200001657600080fd5b5060405162003e2d38038062003e2d8339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b613c4480620001e96000396000f3fe6080604052600436106100c25760003560e01c80637ccecadd1161007f578063b5b7a18411610059578063b5b7a1841461029f578063bebaa8fc146102c3578063c50d21f0146102f0578063e7bb0b521461031057600080fd5b80637ccecadd146102285780639cb22b061461025f578063a8031a1d1461028c57600080fd5b806301567739146100c75780630b7914301461011a5780634108a95a146101525780636b5f444c146101825780636c9789b0146101a457806379502c55146101c4575b600080fd5b3480156100d357600080fd5b506100fd6100e2366004612ff6565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012657600080fd5b5061013a61013536600461301a565b610348565b6040516101119c9b9a999897969594939291906130bd565b34801561015e57600080fd5b5061017261016d366004613158565b61045b565b6040519015158152602001610111565b34801561018e57600080fd5b506101a261019d36600461301a565b61050b565b005b3480156101b057600080fd5b506101a26101bf3660046131a4565b610543565b3480156101d057600080fd5b506003546004546005546006546007546008546009546101f39695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610111565b34801561023457600080fd5b50610248610243366004613158565b610586565b604080519215158352602083019190915201610111565b34801561026b57600080fd5b5061027f61027a366004612ff6565b6106db565b6040516101119190613297565b6101a261029a3660046132aa565b610902565b3480156102ab57600080fd5b506102b560005481565b604051908152602001610111565b3480156102cf57600080fd5b506102e36102de366004612ff6565b610b80565b60405161011191906132d6565b3480156102fc57600080fd5b506101a261030b36600461346b565b610e1f565b34801561031c57600080fd5b506102b561032b3660046132aa565b600e60209081526000928352604080842090915290825290205481565b6002818154811061035857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b03600160201b9093048316949216929091906103ba90613577565b80601f01602080910402602001604051908101604052809291908181526020018280546103e690613577565b80156104335780601f1061040857610100808354040283529160200191610433565b820191906000526020600020905b81548152906001019060200180831161041657829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6000806104678461118c565b6001546040516396b477cb60e01b8152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156104b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104da91906135b1565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b0316331461053e5760405162461bcd60e51b8152600401610535906135ca565b60405180910390fd5b600055565b6001546001600160a01b0316331461056d5760405162461bcd60e51b8152600401610535906135ca565b6105756111f7565b80156105835761058361154f565b50565b60008060006105948561118c565b6001546040516396b477cb60e01b8152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156105e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060791906135b1565b6001600160a01b0388166000908152600e6020908152604080832084845290915290205490915082116106415760009350600092506106d1565b6001600160a01b0387166000908152600c6020526040902054156106c8576001600160a01b0387166000908152600c602052604081205460029061068790600190613624565b8154811061069757610697613637565b906000526020600020906008020190506000945060036000015481600401546106c0919061364d565b9350506106d1565b60019350600092505b5050935093915050565b6106e3612f09565b6001600160a01b0382166000908152600c60205260409020546107385760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b6044820152606401610535565b6001600160a01b0382166000908152600c602052604090205460029061076090600190613624565b8154811061077057610770613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156107c5576107c5613033565b60028111156107d6576107d6613033565b815281546020909101906301000000900460ff1660098111156107fb576107fb613033565b600981111561080c5761080c613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161084790613577565b80601f016020809104026020016040519081016040528092919081815260200182805461087390613577565b80156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001546001600160a01b0316331461092c5760405162461bcd60e51b8152600401610535906135ca565b6001546001600160a01b038381166000908152600a6020526040808220549051630c825d9760e11b8152908316600482015290929190911690631904bb2e90602401600060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b391908101906136c7565b5160015460405163a9059cbb60e01b81526001600160a01b0380841660048301526024820186905292935091169063a9059cbb906044016020604051808303816000875af1925050508015610a25575060408051601f3d908101601f19168201909252610a2291810190613845565b60015b15610a2c57505b6000816001600160a01b0316346108fc90604051600060405180830381858888f193505050503d8060008114610a7e576040519150601f19603f3d011682016040523d82523d6000602084013e610a83565b606091505b5050905080610b5657600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b039190613862565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610b4d576040519150601f19603f3d011682016040523d82523d6000602084013e610b52565b606091505b5050505b5050506001600160a01b03166000908152600a6020526040902080546001600160a01b0319169055565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610bb557610bb5613338565b604051908082528060200260200182016040528015610bee57816020015b610bdb612f09565b815260200190600190039081610bd35790505b50905060005b6001600160a01b0384166000908152600b6020526040902054811015610e18576001600160a01b0384166000908152600b6020526040902080546002919083908110610c4257610c42613637565b906000526020600020015481548110610c5d57610c5d613637565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610cb257610cb2613033565b6002811115610cc357610cc3613033565b815281546020909101906301000000900460ff166009811115610ce857610ce8613033565b6009811115610cf957610cf9613033565b815281546001600160a01b03600160201b909104811660208301526001830154166040820152600282018054606090920191610d3490613577565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6090613577565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110610dfa57610dfa613637565b60200260200101819052508080610e109061387f565b915050610bf4565b5092915050565b600154604051630c825d9760e11b81523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015610e68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e9091908101906136c7565b60208101519091506001600160a01b03163314610f055760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201526c3932b2103b30b634b230ba37b960991b6064820152608401610535565b60808201516001600160a01b03163314610f615760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610535565b6001826000015160ff161115611116576000610f7c83611831565b905080610f8857505050565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610fdc57610fdc613033565b6002811115610fed57610fed613033565b815281546020909101906301000000900460ff16600981111561101257611012613033565b600981111561102357611023613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161105e90613577565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613577565b80156110d75780601f106110ac576101008083540402835291602001916110d7565b820191906000526020600020905b8154815290600101906020018083116110ba57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b60008260400151600281111561112e5761112e613033565b036111405761113c82611a6a565b5050565b60018260400151600281111561115857611158613033565b036111665761113c82611c70565b60028260400151600281111561117e5761117e613033565b0361113c5761113c82611ddf565b600060098260098111156111a2576111a2613033565b036111b05760025b92915050565b60008260098111156111c4576111c4613033565b036111d05760026111aa565b60018260098111156111e4576111e4613033565b036111f05760026111aa565b60026111aa565b6011545b60105481101561154a5760006010828154811061121a5761121a613637565b90600052602060002001549050806000036112355750611538565b611240600182613624565b905060006002828154811061125757611257613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156112ac576112ac613033565b60028111156112bd576112bd613033565b815281546020909101906301000000900460ff1660098111156112e2576112e2613033565b60098111156112f3576112f3613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161132e90613577565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90613577565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050436003600001548261014001516113fb919061364d565b1115611408575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516114359061118c565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161147357505050611538565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806115428161387f565b9150506111fb565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c991906135b1565b905060005b600f5481101561164057816002600f83815481106115ee576115ee613637565b90600052602060002001548154811061160957611609613637565b9060005260206000209060080201600501540361162e5761162b60018461364d565b92505b806116388161387f565b9150506115ce565b5060005b600f54811015611824576118126002600f838154811061166657611666613637565b90600052602060002001548154811061168157611681613637565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156116d6576116d6613033565b60028111156116e7576116e7613033565b815281546020909101906301000000900460ff16600981111561170c5761170c613033565b600981111561171d5761171d613033565b815281546001600160a01b03600160201b90910481166020830152600183015416604082015260028201805460609092019161175890613577565b80601f016020809104026020016040519081016040528092919081815260200182805461178490613577565b80156117d15780601f106117a6576101008083540402835291602001916117d1565b820191906000526020600020905b8154815290600101906020018083116117b457829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505084611f1f565b8061181c8161387f565b915050611644565b5061113c600f6000612f7c565b6000816020015160ff1660000361196657336000908152600d6020908152604091829020845181549286015160ff9081166101000261ffff1990941691161791909117808255918401518492829062ff000019166201000083600281111561189b5761189b613033565b021790555060608201518154829063ff000000191663010000008360098111156118c7576118c7613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c0820151600282019061192590826138e3565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff918216916119949161010090041660016139a3565b60ff16146119e45760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610535565b336000908152600d6020526040902060c0830151611a0591600201906124b9565b336000908152600d602052604090208054600191908290611a2f908290610100900460ff166139a3565b92506101000a81548160ff021916908360ff160217905550816000015160ff1682602001516001611a6091906139a3565b60ff161492915050565b6000806000806000611a8160fe8760c00151612603565b9450945094509450945084611ad85760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611b0d5760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611b2357611b23613033565b8314611b415760405162461bcd60e51b8152600401610535906139e7565b438210611b895760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610535565b60008211611bcf5760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b6044820152606401610535565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d91906135b1565b610100880184905261012088018190524361014089015261016088018390529050611c678761266a565b50505050505050565b6000806000806000611c8760fc8760c00151612603565b9450945094509450945084611cde5760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611d135760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611d2957611d29613033565b8314611d475760405162461bcd60e51b8152600401610535906139e7565b6001546040516396b477cb60e01b8152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db591906135b1565b610100880184905261012088018190524361014089015261016088018390529050611c67876128ee565b6000806000806000611df660fd8760c00151612603565b9450945094509450945084611e4d5760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610535565b8560a001516001600160a01b0316846001600160a01b031614611e825760405162461bcd60e51b8152600401610535906139bc565b85606001516009811115611e9857611e98613033565b8314611eb65760405162461bcd60e51b8152600401610535906139e7565b438210611efe5760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610535565b61010086018290526101608601819052611f1786612ba5565b505050505050565b60015460a0830151604051630c825d9760e11b81526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015611f72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f9a91908101906136c7565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080546001600160a01b03191691909216179055905060038161026001516003811115611feb57611feb613033565b03611ff557505050565b600061200c612007856060015161118c565b612eb0565b610220830151600754919250906000906120269083613a11565b6006546120339087613a11565b61203d908561364d565b612047919061364d565b60095490915081111561205957506009545b60008461012001518560c001518660a00151612075919061364d565b61207f919061364d565b6009549091506000906120928385613a11565b61209c9190613a28565b90506000811180156120ad57508181145b156121dd57600060a087018190526101008701819052610120870181905260c08701526101e0860180518291906120e590839061364d565b90525061022086018051600191906120fe90839061364d565b905250600361026087015260006102008701526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e090612141908990600401613a5a565b600060405180830381600087803b15801561215b57600080fd5b505af115801561216f573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b6101208601518190811161220a578087610120018181516121fe9190613624565b90525060009050612225565b61012087015161221a9082613624565b600061012089015290505b80156122a257808761010001511061226d5780876101000181815161224a9190613624565b90525060a087018051829190612261908390613624565b905250600090506122a2565b61010087015161227d9082613624565b90508661010001518760a0018181516122969190613624565b90525060006101008801525b6000811180156122c5575060008760a001518860c001516122c3919061364d565b115b156123715760008760a001518860c001516122e0919061364d565b60c08901516122ef9084613a11565b6122f99190613a28565b905060008860a001518960c00151612311919061364d565b60a08a01516123209085613a11565b61232a9190613a28565b9050818960c00181815161233e9190613624565b90525060a089018051829190612355908390613624565b905250612362818361364d565b61236c9084613624565b925050505b61237b8183613624565b915081876101e001818151612390919061364d565b90525061022087018051600191906123a990839061364d565b9052506000546102208801516008546123c29190613a11565b6123cc9190613a11565b6123d6904361364d565b61020088015260026102608801526001546040516301adf0b760e51b81526001600160a01b03909116906335be16e090612414908a90600401613a5a565b600060405180830381600087803b15801561242e57600080fd5b505af1158015612442573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b8154600260018083161561010002038216048251808201602081106020841001600281146125635760018114612588578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101561254d5781518455600184019350602082019150612530565b815191036101000a908190040290915550611c67565b60028302826020036101000a846020036101000a602089015104020185018755611c67565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156125e957815184556001840193506020820191506125cc565b815191036101000a90819004029091555050505050505050565b6000806000806000808651602061261a919061364d565b9050612624612f9a565b60a081838a8c5afa61263557600080fd5b805160010361264357600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b6000612679826060015161118c565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116126c75760405162461bcd60e51b815260040161053590613bca565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff000019909116906201000090849081111561275457612754613033565b021790555060608201518154829063ff0000001916630100000083600981111561278057612780613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c082015160028201906127de90826138e3565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f916128e291858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c6020526040902054156129585760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610535565b6000612967826060015161118c565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116129b55760405162461bcd60e51b815260040161053590613bca565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff9081166101000261ffff1990921693169290921791909117808255604085015185939091839162ff0000199091169062010000908490811115612a4257612a42613033565b021790555060608201518154829063ff00000019166301000000836009811115612a6e57612a6e613033565b021790555060808201518154640100000000600160c01b031916600160201b6001600160a01b039283160217825560a08301516001830180546001600160a01b0319169190921617905560c08201516002820190612acc90826138e3565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612b1490600161364d565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612b4490600161364d565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba4035191016128e2565b60a08101516001600160a01b03166000908152600c602052604081205490819003612c125760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610535565b81606001516009811115612c2857612c28613033565b6002612c35600184613624565b81548110612c4557612c45613637565b60009182526020909120600890910201546301000000900460ff166009811115612c7157612c71613033565b14612cce5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b6064820152608401610535565b6101008201516002612ce1600184613624565b81548110612cf157612cf1613637565b90600052602060002090600802016004015414612d5e5760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b6064820152608401610535565b6101608201516002612d71600184613624565b81548110612d8157612d81613637565b90600052602060002090600802016007015414612dec5760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b6064820152608401610535565b6011545b601054811015612e56578160108281548110612e0e57612e0e613637565b906000526020600020015403612e4457600060108281548110612e3357612e33613637565b600091825260209091200155612e56565b80612e4e8161387f565b915050612df0565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f91016128e2565b600081612ebf57505060055490565b60018203612ecf57505060055490565b60028203612edf57505060055490565b60038203612eef57505060055490565b60048203612f005750612710919050565b50612710919050565b6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906105839190612fb8565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612fcd5760008155600101612fb9565b5090565b6001600160a01b038116811461058357600080fd5b8035612ff181612fd1565b919050565b60006020828403121561300857600080fd5b813561301381612fd1565b9392505050565b60006020828403121561302c57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6003811061305957613059613033565b9052565b600a811061305957613059613033565b60005b83811015613088578181015183820152602001613070565b50506000910152565b600081518084526130a981602086016020860161306d565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e1660208401526130de604084018e613049565b6130eb606084018d61305d565b6001600160a01b038b811660808501528a1660a084015260c083018190526131158184018a613091565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a8110612ff157600080fd5b60008060006060848603121561316d57600080fd5b833561317881612fd1565b925061318660208501613149565b9150604084013590509250925092565b801515811461058357600080fd5b6000602082840312156131b657600080fd5b813561301381613196565b805160ff168252600061018060208301516131e1602086018260ff169052565b5060408301516131f46040860182613049565b506060830151613207606086018261305d565b50608083015161322260808601826001600160a01b03169052565b5060a083015161323d60a08601826001600160a01b03169052565b5060c08301518160c086015261325582860182613091565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b60208152600061301360208301846131c1565b600080604083850312156132bd57600080fd5b82356132c881612fd1565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561332b57603f198886030184526133198583516131c1565b945092850192908501906001016132fd565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561337257613372613338565b60405290565b604051610280810167ffffffffffffffff8111828210171561337257613372613338565b604051601f8201601f1916810167ffffffffffffffff811182821017156133c5576133c5613338565b604052919050565b803560ff81168114612ff157600080fd5b803560038110612ff157600080fd5b600067ffffffffffffffff82111561340757613407613338565b50601f01601f191660200190565b600082601f83011261342657600080fd5b8135613439613434826133ed565b61339c565b81815284602083860101111561344e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561347d57600080fd5b813567ffffffffffffffff8082111561349557600080fd5b9083019061018082860312156134aa57600080fd5b6134b261334e565b6134bb836133cd565b81526134c9602084016133cd565b60208201526134da604084016133de565b60408201526134eb60608401613149565b60608201526134fc60808401612fe6565b608082015261350d60a08401612fe6565b60a082015260c08301358281111561352457600080fd5b61353087828601613415565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b600181811c9082168061358b57607f821691505b6020821081036135ab57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156135c357600080fd5b5051919050565b60208082526024908201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460408201526330ba37b960e11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156111aa576111aa61360e565b634e487b7160e01b600052603260045260246000fd5b808201808211156111aa576111aa61360e565b8051612ff181612fd1565b600082601f83011261367c57600080fd5b815161368a613434826133ed565b81815284602083860101111561369f57600080fd5b6136b082602083016020870161306d565b949350505050565b805160048110612ff157600080fd5b6000602082840312156136d957600080fd5b815167ffffffffffffffff808211156136f157600080fd5b90830190610280828603121561370657600080fd5b61370e613378565b61371783613660565b815261372560208401613660565b602082015261373660408401613660565b604082015260608301518281111561374d57600080fd5b6137598782860161366b565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101208084015181830152506101408084015181830152506101608084015181830152506101806137c5818501613660565b908201526101a083810151908201526101c080840151908201526101e0808401519082015261020080840151908201526102208084015190820152610240808401518381111561381457600080fd5b6138208882870161366b565b82840152505061026091506138368284016136b8565b91810191909152949350505050565b60006020828403121561385757600080fd5b815161301381613196565b60006020828403121561387457600080fd5b815161301381612fd1565b6000600182016138915761389161360e565b5060010190565b601f8211156138de57600081815260208120601f850160051c810160208610156138bf5750805b601f850160051c820191505b81811015611f17578281556001016138cb565b505050565b815167ffffffffffffffff8111156138fd576138fd613338565b6139118161390b8454613577565b84613898565b602080601f831160018114613946576000841561392e5750858301515b600019600386901b1c1916600185901b178555611f17565b600085815260208120601f198616915b8281101561397557888601518255948401946001909101908401613956565b50858210156139935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60ff81811683821601908111156111aa576111aa61360e565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b80820281158282048414176111aa576111aa61360e565b600082613a4557634e487b7160e01b600052601260045260246000fd5b500490565b6004811061305957613059613033565b60208152613a746020820183516001600160a01b03169052565b60006020830151613a9060408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152613ac26102a0850183613091565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0613b49818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150613bab8483613091565b935080870151915050613bc082860182613a4a565b5090949350505050565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b60608201526080019056fea2646970667358221220f6799acaca7e1582ac3ade1f96d6478ae068ca0d3c5ba2c5c9c046b04e18b86a64736f6c63430008150033", } // AccountabilityABI is the input ABI used to generate the binding from. @@ -862,11 +873,11 @@ func (_Accountability *Accountability) SlashingHistory(opts *runOptions, arg0 co } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_Accountability *Accountability) DistributeRewards(opts *runOptions, _validator common.Address) (uint64, error) { - _, consumed, err := _Accountability.call(opts, "distributeRewards", _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_Accountability *Accountability) DistributeRewards(opts *runOptions, _validator common.Address, _ntnReward *big.Int) (uint64, error) { + _, consumed, err := _Accountability.call(opts, "distributeRewards", _validator, _ntnReward) return consumed, err } @@ -1489,12 +1500,13 @@ func (_Accountability *Accountability) SetEpochPeriod(opts *runOptions, _newPeri // AutonityMetaData contains all meta data concerning the Autonity contract. var AutonityMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator[]\",\"name\":\"_validators\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator[]\",\"name\":\"_validators\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atnTotalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "b46e5520": "activateValidator(address)", "dd62ed3e": "allowance(address,address)", "095ea7b3": "approve(address,uint256)", + "e98712b2": "atnTotalRedistributed()", "70a08231": "balanceOf(address)", "a515366a": "bond(address,uint256)", "9dc29fac": "burn(address,uint256)", @@ -1527,7 +1539,9 @@ var AutonityMetaData = &bind.MetaData{ "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "9ac31074": "inflationReserve()", "c2362dd5": "lastEpochBlock()", + "89c614b8": "lastEpochTime()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", @@ -1537,6 +1551,7 @@ var AutonityMetaData = &bind.MetaData{ "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", + "f03b959d": "setInflationControllerContract(address)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", @@ -1547,7 +1562,6 @@ var AutonityMetaData = &bind.MetaData{ "114eaf55": "setUnbondingPeriod(uint256)", "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", - "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", @@ -1556,7 +1570,7 @@ var AutonityMetaData = &bind.MetaData{ "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", }, - Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b506040516200a3913803806200a3918339810160408190526200003e9162000e64565b601c546000036200006757602a80546001600160a01b031916331790556200006782826200006f565b505062001325565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b825181101562000420576000838281518110620001805762000180620010a1565b602002602001015160a0015190506000848381518110620001a557620001a5620010a1565b60200260200101516101a00181815250506000848381518110620001cd57620001cd620010a1565b602002602001015161018001906001600160a01b031690816001600160a01b0316815250506000848381518110620002095762000209620010a1565b602002602001015160a00181815250506000848381518110620002305762000230620010a1565b60209081029190910101516101c00152600f5484518590849081106200025a576200025a620010a1565b602002602001015160800181815250506000848381518110620002815762000281620010a1565b602002602001015161026001906003811115620002a257620002a2620010b7565b90816003811115620002b857620002b8620010b7565b815250506000848381518110620002d357620002d3620010a1565b602002602001015161016001818152505062000311848381518110620002fd57620002fd620010a1565b60200260200101516200042560201b60201c565b6200033e8483815181106200032a576200032a620010a1565b60200260200101516200056060201b60201c565b8060276000868581518110620003585762000358620010a1565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003959190620010e3565b925050819055508060296000828254620003b09190620010e3565b925050819055506200040a848381518110620003d057620003d0620010a1565b60200260200101516020015182868581518110620003f257620003f2620010a1565b6020026020010151600001516200079160201b60201c565b50806200041781620010ff565b9150506200015f565b505050565b60006200043c82606001516200097c60201b60201c565b6001600160a01b03909116602084015290508015620004905760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620005045760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000487565b612710826080015111156200055c5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000487565b5050565b6101808101516001600160a01b0316620005e357601d546000906200058590620009ca565b905081602001518260000151836080015183604051620005a59062000aea565b620005b494939291906200111b565b604051809103906000f080158015620005d1573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006959082620011ff565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182015561024082015160128201906200075f9082620011ff565b5061026082015160138201805460ff19166001836003811115620007875762000787620010b7565b0217905550505050565b60008211620007ef5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000487565b6001600160a01b038116600090815260276020526040902054821115620008595760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000487565b6001600160a01b0381166000908152602760205260408120805484929062000883908490620012cb565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200090f83620010ff565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b6000806200098962000af8565b60008060ff9050604083875160208901845afa620009a657600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003620009f25750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a22578062000a0981620010ff565b915062000a1a9050600a83620012f7565b9150620009f6565b6000816001600160401b0381111562000a3f5762000a3f62000b16565b6040519080825280601f01601f19166020018201604052801562000a6a576020820181803683370190505b5090505b841562000ae25762000a82600183620012cb565b915062000a91600a866200130e565b62000a9e906030620010e3565b60f81b81838151811062000ab65762000ab6620010a1565b60200101906001600160f81b031916908160001a90535062000ada600a86620012f7565b945062000a6e565b949350505050565b6115318062008e6083390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b515762000b5162000b16565b60405290565b60405160a081016001600160401b038111828210171562000b515762000b5162000b16565b60405161028081016001600160401b038111828210171562000b515762000b5162000b16565b604051601f8201601f191681016001600160401b038111828210171562000bcd5762000bcd62000b16565b604052919050565b6001600160a01b038116811462000beb57600080fd5b50565b805162000bfb8162000bd5565b919050565b60005b8381101562000c1d57818101518382015260200162000c03565b50506000910152565b600082601f83011262000c3857600080fd5b81516001600160401b0381111562000c545762000c5462000b16565b62000c69601f8201601f191660200162000ba2565b81815284602083860101111562000c7f57600080fd5b62000ae282602083016020870162000c00565b80516004811062000bfb57600080fd5b600060c0828403121562000cb557600080fd5b60405160c081016001600160401b038111828210171562000cda5762000cda62000b16565b8060405250809150825162000cef8162000bd5565b8152602083015162000d018162000bd5565b6020820152604083015162000d168162000bd5565b6040820152606083015162000d2b8162000bd5565b6060820152608083015162000d408162000bd5565b608082015260a083015162000d558162000bd5565b60a0919091015292915050565b60006080828403121562000d7557600080fd5b62000d7f62000b2c565b9050815162000d8e8162000bd5565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361020081121562000dcb57600080fd5b62000dd562000b2c565b915060a081121562000de657600080fd5b5062000df162000b57565b82518152602083015160208201526040830151604082015260608301516060820152608083015162000e238162000bd5565b6080820152815262000e398360a0840162000ca2565b602082015262000e4e83610160840162000d62565b60408201526101e0820151606082015292915050565b60008061022080848603121562000e7a57600080fd5b83516001600160401b038082111562000e9257600080fd5b818601915086601f83011262000ea757600080fd5b815160208282111562000ebe5762000ebe62000b16565b8160051b62000ecf82820162000ba2565b928352848101820192828101908b85111562000eea57600080fd5b83870192505b848310156200107f5782518681111562000f0957600080fd5b8701610280818e03601f1901121562000f2157600080fd5b62000f2b62000b7c565b62000f3886830162000bee565b815262000f486040830162000bee565b8682015262000f5a6060830162000bee565b604082015260808201518881111562000f7257600080fd5b62000f828f888386010162000c26565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015161014082015261018082015161016082015262000ff06101a0830162000bee565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e0820152898201516102008201526102408201518a820152610260820151888111156200104257600080fd5b620010528f888386010162000c26565b6102408301525062001068610280830162000c92565b610260820152835250918301919083019062000ef0565b8099505050506200109389828a0162000db6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620010f957620010f9620010cd565b92915050565b600060018201620011145762001114620010cd565b5060010190565b600060018060a01b0380871683528086166020840152508360408301526080606083015282518060808401526200115a8160a085016020870162000c00565b601f01601f19169190910160a00195945050505050565b600181811c908216806200118657607f821691505b602082108103620011a757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042057600081815260208120601f850160051c81016020861015620011d65750805b601f850160051c820191505b81811015620011f757828155600101620011e2565b505050505050565b81516001600160401b038111156200121b576200121b62000b16565b62001233816200122c845462001171565b84620011ad565b602080601f8311600181146200126b5760008415620012525750858301515b600019600386901b1c1916600185901b178555620011f7565b600085815260208120601f198616915b828110156200129c578886015182559484019460019091019084016200127b565b5085821015620012bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115620010f957620010f9620010cd565b634e487b7160e01b600052601260045260246000fd5b600082620013095762001309620012e1565b500490565b600082620013205762001320620012e1565b500690565b617b2b80620013356000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000ced578063dfb1a4d21462000d37578063e7f43c681462000d4e578063f7866ee31462000d6e57005b8063d372c07e1462000c69578063d5f394881462000c8e578063d861b0e81462000cb0578063d886f8a21462000cc857005b8063cb696f5411620000e5578063cb696f541462000be2578063ceaad4551462000c07578063cf9c57191462000c2c578063cfd19fb91462000c4457005b8063b66b3e791462000b72578063b7ab4db51462000b9a578063c2362dd51462000bb2578063c9d97af41462000bca57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000adc578063b2ea9adb1462000b03578063b3ecbadd1462000b28578063b46e55201462000b4d57005b8063a5d059ca1462000a44578063a8b2216e1462000a69578063a9059cbb1462000a90578063ab8f6ffe1462000ab557005b80639bb851c011620001d15780639bb851c014620009ca5780639c98e47114620009e25780639dc29fac14620009fa578063a515366a1462000a1f57005b8063872cf059146200092e5780638bac7dad146200094657806395d89b41146200096b57806396b477cb146200099957005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008ad578063833b1fce14620008c457806384467fdb14620008e4578063852c4849146200090957005b8063731b3a03146200076e57806377e741c71462000785578063784304b514620007aa57806379502c5514620007cf57005b80635f7d394911620002c95780635f7d394914620006ba5780636b5f444c14620006f85780636fd2c80b146200071d57806370a08231146200073457005b8063436459691462000631578063496ccd9b14620006485780634bb278f3146200066d578063520fdbbc146200069557005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005b1578063313ce56714620005c957806335be16e014620005e757806340c10f19146200060c57005b806318160ddd146200052a5780631904bb2e146200054157806323b872dd146200057557806329070c6d146200059a57005b80631122063311620003b55780631122063314620004b1578063114eaf5514620004c85780631250a28d14620004ed5780631604e416146200051257005b806306fdde0314620003f1578063095ea7b314620004355780630ae65e7a146200046b5780630d8e6e2c146200049057005b36620003ef57005b005b348015620003fe57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b6040516200042c9190620054fa565b60405180910390f35b3480156200044257600080fd5b506200045a620004543660046200552c565b62000d8e565b60405190151581526020016200042c565b3480156200047857600080fd5b50620003ef6200048a3660046200555b565b62000da7565b3480156200049d57600080fd5b50601c545b6040519081526020016200042c565b348015620004be57600080fd5b50600e54620004a2565b348015620004d557600080fd5b50620003ef620004e73660046200557b565b62000e3a565b348015620004fa57600080fd5b50620003ef6200050c3660046200555b565b62000e6c565b3480156200051f57600080fd5b50620004a260245481565b3480156200053757600080fd5b50602954620004a2565b3480156200054e57600080fd5b5062000566620005603660046200555b565b62000ebb565b6040516200042c9190620055ce565b3480156200058257600080fd5b506200045a6200059436600462005747565b62001169565b348015620005a757600080fd5b50600d54620004a2565b348015620005be57600080fd5b50620004a261271081565b348015620005d657600080fd5b50604051601281526020016200042c565b348015620005f457600080fd5b50620003ef620006063660046200578d565b620011c3565b3480156200061957600080fd5b50620003ef6200062b3660046200552c565b6200139f565b3480156200063e57600080fd5b50601a54620004a2565b3480156200065557600080fd5b50620003ef620006673660046200555b565b62001459565b3480156200067a57600080fd5b506200068562001563565b6040516200042c9291906200584e565b348015620006a257600080fd5b50620003ef620006b43660046200555b565b6200192a565b348015620006c757600080fd5b50620006df620006d93660046200586b565b62001b25565b6040516001600160a01b0390911681526020016200042c565b3480156200070557600080fd5b50620003ef620007173660046200557b565b62001d3c565b3480156200072a57600080fd5b50601054620004a2565b3480156200074157600080fd5b50620004a2620007533660046200555b565b6001600160a01b031660009081526027602052604090205490565b3480156200077b57600080fd5b50602054620004a2565b3480156200079257600080fd5b50620003ef620007a43660046200557b565b62001ec2565b348015620007b757600080fd5b50620003ef620007c936600462005939565b62001ef4565b348015620007dc57600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c546200089b939084565b6040516200042c94939291906200598f565b348015620008ba57600080fd5b50601b54620004a2565b348015620008d157600080fd5b506013546001600160a01b0316620006df565b348015620008f157600080fd5b50620003ef6200090336600462005a5e565b6200209f565b3480156200091657600080fd5b50620003ef620009283660046200552c565b620021ce565b3480156200093b57600080fd5b50620003ef6200235f565b3480156200095357600080fd5b50620003ef620009653660046200557b565b6200239b565b3480156200097857600080fd5b50604080518082019091526003815262272a2760e91b60208201526200041d565b348015620009a657600080fd5b50620004a2620009b83660046200557b565b6000908152601f602052604090205490565b348015620009d757600080fd5b50620004a260235481565b348015620009ef57600080fd5b50620004a260215481565b34801562000a0757600080fd5b50620003ef62000a193660046200552c565b6200241f565b34801562000a2c57600080fd5b50620003ef62000a3e3660046200552c565b62002535565b34801562000a5157600080fd5b50620003ef62000a633660046200552c565b62002608565b34801562000a7657600080fd5b5062000a816200269f565b6040516200042c919062005b07565b34801562000a9d57600080fd5b506200045a62000aaf3660046200552c565b62002782565b34801562000ac257600080fd5b5062000acd62002791565b6040516200042c919062005b6d565b34801562000ae957600080fd5b5062000af4620028a3565b6040516200042c919062005b82565b34801562000b1057600080fd5b50620003ef62000b2236600462005bd1565b62002ae9565b34801562000b3557600080fd5b50620003ef62000b473660046200555b565b62002b30565b34801562000b5a57600080fd5b50620003ef62000b6c3660046200555b565b62002b7f565b34801562000b7f57600080fd5b5062000b8a62002dbb565b6040516200042c92919062005c32565b34801562000ba757600080fd5b5062000af462002ef2565b34801562000bbf57600080fd5b50620004a260205481565b34801562000bd757600080fd5b50620004a2601e5481565b34801562000bef57600080fd5b50620003ef62000c013660046200557b565b62002f56565b34801562000c1457600080fd5b50620003ef62000c263660046200555b565b62002fb9565b34801562000c3957600080fd5b50620003ef62003008565b34801562000c5157600080fd5b50620003ef62000c633660046200555b565b6200305c565b34801562000c7657600080fd5b50620003ef62000c883660046200555b565b620030ab565b34801562000c9b57600080fd5b50602a54620006df906001600160a01b031681565b34801562000cbd57600080fd5b50620003ef620030fa565b34801562000cd557600080fd5b50620003ef62000ce73660046200555b565b6200313b565b34801562000cfa57600080fd5b50620004a262000d0c36600462005c64565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d4457600080fd5b50601954620004a2565b34801562000d5b57600080fd5b506018546001600160a01b0316620006df565b34801562000d7b57600080fd5b506011546001600160a01b0316620006df565b600062000d9d3384846200318a565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000df05760405162461bcd60e51b815260040162000de79062005ca2565b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000e2c5760405162461bcd60e51b815260040162000de79062005cd9565b62000e3781620032b3565b50565b6018546001600160a01b0316331462000e675760405162461bcd60e51b815260040162000de79062005d25565b601055565b6018546001600160a01b0316331462000e995760405162461bcd60e51b815260040162000de79062005d25565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62000ec5620052d3565b6001600160a01b038083166000818152602860205260409020600101549091161462000f055760405162461bcd60e51b815260040162000de79062005d5c565b6001600160a01b03808316600090815260286020908152604091829020825161028081018452815485168152600182015485169281019290925260028101549093169181019190915260038201805491929160608401919062000f689062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462000f969062005d93565b801562000fe75780601f1062000fbb5761010080835404028352916020019162000fe7565b820191906000526020600020905b81548152906001019060200180831162000fc957829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620010a39062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620010d19062005d93565b8015620011225780601f10620010f65761010080835404028352916020019162001122565b820191906000526020600020905b8154815290600101906020018083116200110457829003601f168201915b5050509183525050601382015460209091019060ff1660038111156200114c576200114c62005595565b600381111562001160576200116062005595565b90525092915050565b6000620011788484846200338a565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620011a990849062005de5565b9050620011b88533836200318a565b506001949350505050565b6012546001600160a01b031633146200122b5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000de7565b60006101208201356028826200124860408601602087016200555b565b6001600160a01b03166001600160a01b031681526020019081526020016000206009015462001278919062005de5565b60c0830135602860006200129360408701602088016200555b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620012c3919062005de5565b60a084013560286000620012de60408801602089016200555b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200130e919062005de5565b6200131a919062005dfb565b62001326919062005dfb565b6011546001600160a01b03166000908152602760205260408120805492935083929091906200135790849062005dfb565b90915550829050602860006200137460408401602085016200555b565b6001600160a01b03168152602081019190915260400160002062001399828262005ffd565b50505050565b6018546001600160a01b03163314620013cc5760405162461bcd60e51b815260040162000de79062005d25565b6001600160a01b03821660009081526027602052604081208054839290620013f690849062005dfb565b92505081905550806029600082825462001411919062005dfb565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620014865760405162461bcd60e51b815260040162000de79062005d25565b601380546001600160a01b0319166001600160a01b03838116918217909255601454604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620014e557600080fd5b505af1158015620014fa573d6000803e3d6000fd5b5050601654604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200154757600080fd5b505af11580156200155c573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620015965760405162461bcd60e51b815260040162000de79062006153565b601e54436000818152601f6020908152604082209390935560195492549092620015c09162005dfb565b6012546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200160b57600080fd5b505af115801562001620573d6000803e3d6000fd5b50505050801562001715576200163562003493565b6200163f6200387d565b620016496200396c565b600062001655620028a3565b60135460405163422811f960e11b81529192506001600160a01b03169063845023f2906200168890849060040162005b82565b600060405180830381600087803b158015620016a357600080fd5b505af1158015620016b8573d6000803e3d6000fd5b50505050436020819055506001601e6000828254620016d8919062005dfb565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b60135460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001787919062006196565b9050801562001803576014546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620017fb575060408051601f3d908101601f19168201909252620017f89181019062006196565b60015b156200180357505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b828210156200191a576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620018829062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b09062005d93565b8015620019015780601f10620018d55761010080835404028352916020019162001901565b820191906000526020600020905b815481529060010190602001808311620018e357829003601f168201915b505050505081525050815260200190600101906200182c565b5050505090509350935050509091565b6018546001600160a01b03163314620019575760405162461bcd60e51b815260040162000de79062005d25565b601880546001600160a01b0319166001600160a01b0383811691821790925560135460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b158015620019b657600080fd5b505af1158015620019cb573d6000803e3d6000fd5b505060145460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a1757600080fd5b505af115801562001a2c573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a7857600080fd5b505af115801562001a8d573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ad957600080fd5b505af115801562001aee573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb91506024016200152c565b600080805b60225481101562001b81576022818154811062001b4b5762001b4b620061ba565b9060005260206000209060030201600101548262001b6a919062005dfb565b91508062001b7881620061d0565b91505062001b2a565b508060000362001bd45760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000de7565b60008362001be4606387620061ec565b62001bf0919062005dfb565b905060008160405160200162001c0891815260200190565b60408051601f1981840301815291905280516020909101209050600062001c3084836200621c565b90506000805b60225481101562001ce0576022818154811062001c575762001c57620061ba565b9060005260206000209060030201600101548262001c76919062005dfb565b915062001c8560018362005de5565b831162001ccb576022818154811062001ca25762001ca2620061ba565b60009182526020909120600390910201546001600160a01b0316965062000da195505050505050565b8062001cd781620061d0565b91505062001c36565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000de7565b6018546001600160a01b0316331462001d695760405162461bcd60e51b815260040162000de79062005d25565b60195481101562001e20578060205462001d84919062005dfb565b431062001e205760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000de7565b6019819055601254604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562001e6c57600080fd5b505af115801562001e81573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162001eb791815260200190565b60405180910390a150565b6018546001600160a01b0316331462001eef5760405162461bcd60e51b815260040162000de79062005d25565b600d55565b6001600160a01b03808316600081815260286020526040902060018101549092161462001f355760405162461bcd60e51b815260040162000de79062005d5c565b80546001600160a01b0316331462001f615760405162461bcd60e51b815260040162000de79062006233565b62001f6c8362003a8b565b1562001fc65760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840162000de7565b60008062001fd48462003afc565b925090508115620020165760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b60018301546001600160a01b03828116911614620020875760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840162000de7565b6003830162002097858262006282565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200160008152602001848152602001600060038111156200216e576200216e62005595565b905290506200217e818362003b41565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021bf92339289918b916200634b565b60405180910390a15050505050565b6001600160a01b03808316600081815260286020526040902060010154909116146200220e5760405162461bcd60e51b815260040162000de79062005ca2565b6001600160a01b038281166000908152602860205260409020541633146200224a5760405162461bcd60e51b815260040162000de79062005cd9565b6127108111156200229e5760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000de7565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200231790849062005dfb565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b031633146200238c5760405162461bcd60e51b815260040162000de79062005d25565b6002805460ff19166001179055565b6018546001600160a01b03163314620023c85760405162461bcd60e51b815260040162000de79062005d25565b600081116200241a5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000de7565b601b55565b6018546001600160a01b031633146200244c5760405162461bcd60e51b815260040162000de79062005d25565b6001600160a01b038216600090815260276020526040902054811115620024af5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b03821660009081526027602052604081208054839290620024d990849062005de5565b925050819055508060296000828254620024f4919062005de5565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020016200144d565b6001600160a01b0380831660008181526028602052604090206001015490911614620025755760405162461bcd60e51b815260040162000de79062005d5c565b6001600160a01b03821660009081526028602052604081206013015460ff166003811115620025a857620025a862005595565b14620025f75760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000de7565b6200260482823362003f9b565b5050565b6001600160a01b0380831660008181526028602052604090206001015490911614620026485760405162461bcd60e51b815260040162000de79062005d5c565b60008111620026925760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000de7565b6200260482823362004187565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002779578382906000526020600020018054620026e59062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620027139062005d93565b8015620027645780601f10620027385761010080835404028352916020019162002764565b820191906000526020600020905b8154815290600101906020018083116200274657829003601f168201915b505050505081526020019060010190620026c3565b50505050905090565b600062000d9d3384846200338a565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002779576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916200280b9062005d93565b80601f0160208091040260200160405190810160405280929190818152602001828054620028399062005d93565b80156200288a5780601f106200285e576101008083540402835291602001916200288a565b820191906000526020600020905b8154815290600101906020018083116200286c57829003601f168201915b50505050508152505081526020019060010190620027b5565b602a546060906001600160a01b03163314620028d35760405162461bcd60e51b815260040162000de79062006153565b601d54620029245760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000de7565b6200292e620053a3565b601b546080820152601d81526028602082015260226040820152602160608201526200295a81620044ba565b6200296860256000620053c1565b60225480620029af5760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000de7565b60008167ffffffffffffffff811115620029cd57620029cd6200588e565b604051908082528060200260200182016040528015620029f7578160200160208202803683370190505b50905060005b8281101562002ae1576000602860006022848154811062002a225762002a22620061ba565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c019062002a8a9083018262006394565b50600281015483516001600160a01b039091169084908490811062002ab35762002ab3620061ba565b6001600160a01b0390921660209283029190910190910152508062002ad881620061d0565b915050620029fd565b509250505090565b6018546001600160a01b0316331462002b165760405162461bcd60e51b815260040162000de79062005d25565b62002b23600083620044d5565b62002604600182620044d5565b6018546001600160a01b0316331462002b5d5760405162461bcd60e51b815260040162000de79062005d25565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602860205260409020600101549091161462002bbf5760405162461bcd60e51b815260040162000de79062005ca2565b6001600160a01b0380821660009081526028602052604090208054909116331462002bfe5760405162461bcd60e51b815260040162000de79062006233565b6000601382015460ff16600381111562002c1c5762002c1c62005595565b0362002c6b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000de7565b6002601382015460ff16600381111562002c895762002c8962005595565b14801562002c9a5750438160100154115b1562002ce95760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000de7565b6003601382015460ff16600381111562002d075762002d0762005595565b0362002d565760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000de7565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002da6919062005dfb565b60405190815260200160405180910390a35050565b6060806000600181805462002dd09062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462002dfe9062005d93565b801562002e4f5780601f1062002e235761010080835404028352916020019162002e4f565b820191906000526020600020905b81548152906001019060200180831162002e3157829003601f168201915b5050505050915080805462002e649062005d93565b80601f016020809104026020016040519081016040528092919081815260200182805462002e929062005d93565b801562002ee35780601f1062002eb75761010080835404028352916020019162002ee3565b820191906000526020600020905b81548152906001019060200180831162002ec557829003601f168201915b50505050509050915091509091565b6060601d80548060200260200160405190810160405280929190818152602001828054801562002f4c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002f2d575b5050505050905090565b6018546001600160a01b0316331462002f835760405162461bcd60e51b815260040162000de79062005d25565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162001eb7565b6018546001600160a01b0316331462002fe65760405162461bcd60e51b815260040162000de79062005d25565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030355760405162461bcd60e51b815260040162000de79062005d25565b62003042600080620053e1565b6200305060016000620053e1565b6002805460ff19169055565b6018546001600160a01b03163314620030895760405162461bcd60e51b815260040162000de79062005d25565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030d85760405162461bcd60e51b815260040162000de79062005d25565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b602a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000de79062006153565b620031316200387d565b62000e37620028a3565b6018546001600160a01b03163314620031685760405162461bcd60e51b815260040162000de79062005d25565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620031ee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000de7565b6001600160a01b038216620032515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000de7565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff166003811115620032e857620032e862005595565b14620033375760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000de7565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002da6919062005dfb565b6001600160a01b038316600090815260276020526040902054811115620033ed5760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b038316600090815260276020526040812080548392906200341790849062005de5565b90915550506001600160a01b038216600090815260276020526040812080548392906200344690849062005dfb565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620032a691815260200190565b476000036200349e57565b600d544790600090670de0b6b3a764000090620034bd908490620061ec565b620034c9919062006472565b9050801562003547576011546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003521576040519150601f19603f3d011682016040523d82523d6000602084013e62003526565b606091505b5090915050801515600103620035455762003542828462005de5565b92505b505b81602360008282546200355b919062005dfb565b90915550600090505b6022548110156200387857600060286000602284815481106200358b576200358b620061ba565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060215460228054929450909187919086908110620035d657620035d6620061ba565b906000526020600020906003020160010154620035f49190620061ec565b62003600919062006472565b9050801562003860576002601383015460ff16600381111562003627576200362762005595565b14806200364f57506003601383015460ff1660038111156200364d576200364d62005595565b145b15620036f757601254602280546001600160a01b0390921691631de9d9b691849187908110620036835762003683620061ba565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b0390911660048201526024016000604051808303818588803b158015620036d557600080fd5b505af1158015620036ea573d6000803e3d6000fd5b5050505050505062003863565b60008260050154828460080154620037109190620061ec565b6200371c919062006472565b905060006200372c828462005de5565b90508115620037915783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d806000811462003788576040519150601f19603f3d011682016040523d82523d6000602084013e6200378d565b606091505b5050505b8015620038195783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af1158015620037f0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003817919062006489565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b806200386f81620061d0565b91505062003564565b505050565b6004545b600554811015620038aa57620038a4816200389c81620061d0565b925062004628565b62003881565b5060055460045560085460075403620038bf57565b6009545b600854811015620038ec57620038e681620038de81620061d0565b92506200484f565b620038c3565b50600854600955600754805b60085481101562003966576010546000828152600660205260409020600401544391620039259162005dfb565b116200394b57620039368162004b4a565b6200394360018362005dfb565b915062003951565b62003966565b806200395d81620061d0565b915050620038f8565b50600755565b600c54600b54101562003a8957600b546000908152600a60205260409020601054600182015443916200399f9162005dfb565b1115620039a95750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003a04920190815260200190565b600060405180830381600087803b15801562003a1f57600080fd5b505af115801562003a34573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003a7c90849062005dfb565b909155506200396c915050565b565b6000805b60225481101562003af3576022818154811062003ab05762003ab0620061ba565b60009182526020909120600390910201546001600160a01b039081169084160362003ade5750600192915050565b8062003aea81620061d0565b91505062003a8f565b50600092915050565b60008062003b0962005420565b60008060ff9050604083875160208901845afa62003b2657600080fd5b50508051602090910151600160601b90910494909350915050565b60e281511462003b8b5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000de7565b6030826102400151511462003be35760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000de7565b62003bee8262004c95565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003c51920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003c71835162004dc2565b8360405160200162003c8693929190620064a3565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003cde898262003cd860416002620061ec565b62004ee3565b9050600062003cfd8a62003cf560416002620061ec565b606062004ee3565b905060205b825181101562003dce5762003d18838262004ffc565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003d74573d6000803e3d6000fd5b5050604051601f19015190508762003d8e60418462006472565b8151811062003da15762003da1620061ba565b6001600160a01b039092166020928302919091019091015262003dc660418262005dfb565b905062003d02565b508a602001516001600160a01b03168660008151811062003df35762003df3620061ba565b60200260200101516001600160a01b03161462003e655760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000de7565b8a604001516001600160a01b03168660018151811062003e895762003e89620061ba565b60200260200101516001600160a01b03161462003efd5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000de7565b600162003f158c6102400151838e6000015162005033565b1462003f835760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000de7565b62003f8e8b620050a2565b5050505050505050505050565b6000821162003ff95760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000de7565b6001600160a01b038116600090815260276020526040902054821115620040635760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000de7565b6001600160a01b038116600090815260276020526040812080548492906200408d90849062005de5565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200411983620061d0565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b0380841660009081526028602052604090208054909183811691161480620042fd57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa158015620041fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004224919062006489565b9050848110156200428c5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000de7565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b158015620042dd57600080fd5b505af1158015620042f2573d6000803e3d6000fd5b505050505062004390565b8382600b0154836008015462004314919062005de5565b1015620043745760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000de7565b8382600b0160008282546200438a919062005dfb565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff1990951694909417929092179092558054916200446483620061d0565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620041789291909115158252602082015260400190565b60fa60a06000808285855af462003878573d6000803e3d6000fd5b815460026001808316156101000203821604825180820160208110602084100160028114620045845760018114620045aa578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200456d57815184556001840193506020820191506200454e565b815191036101000a9081900402909155506200461f565b60028302826020036101000a846020036101000a6020890151040201850187556200461f565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156200460d5781518455600184019350602082019150620045ee565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff1660038111156200466e576200466e62005595565b146200470e57600282015482546001600160a01b031660009081526027602052604081208054909190620046a490849062005dfb565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462004701946001600160a01b0391821694911692909160ff90911690620064ec565b60405180910390a1505050565b805482546001600160a01b039081169116146200480b57600080826008015483600501546200473e919062005de5565b9050806000036200475657836002015491506200477c565b80846002015484600d01546200476d9190620061ec565b62004779919062006472565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620047ce57600080fd5b505af1158015620047e3573d6000803e3d6000fd5b505050508183600d016000828254620047fd919062005dfb565b909155506200482b92505050565b816002015481600801600082825462004825919062005dfb565b90915550505b816002015481600501600082825462004845919062005dfb565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662004a43576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b158015620048e457600080fd5b505af1158015620048f9573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200494f57600080fd5b505af115801562004964573d6000803e3d6000fd5b5050505060008360080154846005015462004980919062005de5565b600d850154909150620049948284620061ec565b620049a0919062006472565b92508184600d016000828254620049b8919062005de5565b90915550506006840154600003620049d75760038501839055620049ff565b60068401546007850154620049ed9085620061ec565b620049f9919062006472565b60038601555b8284600601600082825462004a15919062005dfb565b9091555050600385015460078501805460009062004a3590849062005dfb565b9091555062004b1892505050565b506002820154600882015481111562004a5d575060088101545b816009015460000362004a77576003830181905562004a9f565b6009820154600a83015462004a8d9083620061ec565b62004a99919062006472565b60038401555b8082600901600082825462004ab5919062005dfb565b90915550506003830154600a8301805460009062004ad590849062005dfb565b925050819055508082600801600082825462004af2919062005de5565b90915550506002830154600b8301805460009062004b1290849062005de5565b90915550505b6005808401805460ff191660011790558201805482919060009062004b3f90849062005de5565b909155505050505050565b6000818152600660205260408120600381015490910362004b69575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff1662004c055781600701548260060154846003015462004bb59190620061ec565b62004bc1919062006472565b90508082600601600082825462004bd9919062005de5565b9091555050600383015460078301805460009062004bf990849062005de5565b9091555062004c6a9050565b81600a01548260090154846003015462004c209190620061ec565b62004c2c919062006472565b90508082600901600082825462004c44919062005de5565b90915550506003830154600a8301805460009062004c6490849062005de5565b90915550505b82546001600160a01b03166000908152602760205260408120805483929062004b3f90849062005dfb565b600062004ca6826060015162003afc565b6001600160a01b0390911660208401529050801562004cf65760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b6020808301516001600160a01b0390811660009081526028909252604090912060010154161562004d6a5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000de7565b61271082608001511115620026045760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000de7565b60608160000362004dea5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004e1a578062004e0181620061d0565b915062004e129050600a8362006472565b915062004dee565b60008167ffffffffffffffff81111562004e385762004e386200588e565b6040519080825280601f01601f19166020018201604052801562004e63576020820181803683370190505b5090505b841562004edb5762004e7b60018362005de5565b915062004e8a600a866200621c565b62004e9790603062005dfb565b60f81b81838151811062004eaf5762004eaf620061ba565b60200101906001600160f81b031916908160001a90535062004ed3600a8662006472565b945062004e67565b949350505050565b60608162004ef381601f62005dfb565b101562004f345760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000de7565b62004f40828462005dfb565b8451101562004f865760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000de7565b60608215801562004fa7576040519150600082526020820160405262004ff3565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562004fe257805183526020928301920162004fc8565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156200502c5762005029601b826200651a565b90505b9250925092565b60006200503f6200543e565b6000858585604051602001620050589392919062006536565b6040516020818303038152906040529050600060fb905060008251602062005081919062005dfb565b90506020848285855afa6200509557600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200512557601d54600090620050c79062004dc2565b905081602001518260000151836080015183604051620050e7906200545c565b620050f6949392919062006585565b604051809103906000f08015801562005113573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620051d7908262006282565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620052a1908262006282565b5061026082015160138201805460ff19166001836003811115620052c957620052c962005595565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600060038111156200539e576200539e62005595565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000e3791906200546a565b508054620053ef9062005d93565b6000825580601f1062005400575050565b601f01602090049060005260206000209081019062000e3791906200548f565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b61153180620065c583390190565b808211156200548b576000620054818282620053e1565b506001016200546a565b5090565b5b808211156200548b576000815560010162005490565b60005b83811015620054c3578181015183820152602001620054a9565b50506000910152565b60008151808452620054e6816020860160208601620054a6565b601f01601f19169290920160200192915050565b6020815260006200550f6020830184620054cc565b9392505050565b6001600160a01b038116811462000e3757600080fd5b600080604083850312156200554057600080fd5b82356200554d8162005516565b946020939093013593505050565b6000602082840312156200556e57600080fd5b81356200550f8162005516565b6000602082840312156200558e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110620055ca57634e487b7160e01b600052602160045260246000fd5b9052565b60208152620055e96020820183516001600160a01b03169052565b600060208301516200560660408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516102808060808501526200563a6102a0850183620054cc565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620056c2818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620057268483620054cc565b9350808701519150506200573d82860182620055ab565b5090949350505050565b6000806000606084860312156200575d57600080fd5b83356200576a8162005516565b925060208401356200577c8162005516565b929592945050506040919091013590565b600060208284031215620057a057600080fd5b813567ffffffffffffffff811115620057b857600080fd5b820161028081850312156200550f57600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005841578284038952815180516001600160a01b0316855285810151868601526040908101516060918601829052906200582c81870183620054cc565b9a87019a9550505090840190600101620057ea565b5091979650505050505050565b821515815260406020820152600062004edb6040830184620057cc565b600080604083850312156200587f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620058b657600080fd5b813567ffffffffffffffff80821115620058d457620058d46200588e565b604051601f8301601f19908116603f01168101908282118183101715620058ff57620058ff6200588e565b816040528381528660208588010111156200591957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200594d57600080fd5b82356200595a8162005516565b9150602083013567ffffffffffffffff8111156200597757600080fd5b6200598585828601620058a4565b9150509250929050565b845181526020808601518183015260408087015181840152606080880151818501526080808901516001600160a01b03908116828701528851811660a08088019190915294890151811660c087015292880151831660e08601529087015182166101008501528601511661012083015284015161020082019062005a1f6101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b6000806000806080858703121562005a7557600080fd5b843567ffffffffffffffff8082111562005a8e57600080fd5b62005a9c88838901620058a4565b95506020870135915062005ab08262005516565b9093506040860135908082111562005ac757600080fd5b62005ad588838901620058a4565b9350606087013591508082111562005aec57600080fd5b5062005afb87828801620058a4565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005b6057603f1988860301845262005b4d858351620054cc565b9450928501929085019060010162005b2e565b5092979650505050505050565b6020815260006200550f6020830184620057cc565b6020808252825182820181905260009190848201906040850190845b8181101562005bc55783516001600160a01b03168352928401929184019160010162005b9e565b50909695505050505050565b6000806040838503121562005be557600080fd5b823567ffffffffffffffff8082111562005bfe57600080fd5b62005c0c86838701620058a4565b9350602085013591508082111562005c2357600080fd5b506200598585828601620058a4565b60408152600062005c476040830185620054cc565b828103602084015262005c5b8185620054cc565b95945050505050565b6000806040838503121562005c7857600080fd5b823562005c858162005516565b9150602083013562005c978162005516565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005da857607f821691505b60208210810362005dc957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000da15762000da162005dcf565b8082018082111562000da15762000da162005dcf565b6000813562000da18162005516565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005e5857600080fd5b83018035915067ffffffffffffffff82111562005e7457600080fd5b60200191503681900382131562005e8a57600080fd5b9250929050565b601f8211156200387857600081815260208120601f850160051c8101602086101562005eba5750805b601f850160051c820191505b81811015620020975782815560010162005ec6565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005f0b5762005f0b6200588e565b62005f238362005f1c835462005d93565b8362005e91565b6000601f84116001811462005f56576000851562005f415750838201355b62005f4d868262005edb565b8455506200155c565b600083815260209020601f19861690835b8281101562005f89578685013582556020948501946001909201910162005f67565b508682101562005fa75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000da157600080fd5b6004821062005fea57634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b620060136200600c8362005e11565b8262005e20565b6200602f620060256020840162005e11565b6001830162005e20565b6200604b620060416040840162005e11565b6002830162005e20565b6200605a606083018362005e40565b6200606a81836003860162005ef0565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b820155620060dd620060d3610180840162005e11565b600c830162005e20565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200612461024083018362005e40565b6200613481836012860162005ef0565b50506200260462006149610260840162005fb9565b6013830162005fcb565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620061a957600080fd5b815180151581146200550f57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201620061e557620061e562005dcf565b5060010190565b808202811582820484141762000da15762000da162005dcf565b634e487b7160e01b600052601260045260246000fd5b6000826200622e576200622e62006206565b500690565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b815167ffffffffffffffff8111156200629f576200629f6200588e565b620062b781620062b0845462005d93565b8462005e91565b602080601f831160018114620062eb5760008415620062d65750858301515b620062e2858262005edb565b86555062002097565b600085815260208120601f198616915b828110156200631c57888601518255948401946001909101908401620062fb565b50858210156200633b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018060a01b0380881683528087166020840152808616604084015260a060608401526200637f60a0840186620054cc565b91508084166080840152509695505050505050565b818103620063a0575050565b620063ac825462005d93565b67ffffffffffffffff811115620063c757620063c76200588e565b620063d881620062b0845462005d93565b6000601f8211600181146200640b5760008315620063f65750848201545b62006402848262005edb565b8555506200155c565b600085815260209020601f19841690600086815260209020845b8381101562006447578286015482556001958601959091019060200162006425565b50858310156200633b5793015460001960f8600387901b161c19169092555050600190811b01905550565b60008262006484576200648462006206565b500490565b6000602082840312156200649c57600080fd5b5051919050565b60008451620064b7818460208901620054a6565b845190830190620064cd818360208901620054a6565b8451910190620064e2818360208801620054a6565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005c5b6060830184620055ab565b60ff818116838216019081111562000da15762000da162005dcf565b600084516200654a818460208901620054a6565b84519083019062006560818360208901620054a6565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065ba90830184620054cc565b969550505050505056fe60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033a2646970667358221220e86ac280dc044e89f28e6e9b674a490bb8d1c4c77f1e2630bf05467afe366c0264736f6c6343000815003360806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b506040516200aacc3803806200aacc8339810160408190526200003e9162000e9e565b601e546000036200006757602e80546001600160a01b031916331790556200006782826200006f565b50506200135f565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000442576000838281518110620001a257620001a2620010db565b602002602001015160a0015190506000848381518110620001c757620001c7620010db565b60200260200101516101a00181815250506000848381518110620001ef57620001ef620010db565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200022b576200022b620010db565b602002602001015160a00181815250506000848381518110620002525762000252620010db565b60209081029190910101516101c00152600f5484518590849081106200027c576200027c620010db565b602002602001015160800181815250506000848381518110620002a357620002a3620010db565b602002602001015161026001906003811115620002c457620002c4620010f1565b90816003811115620002da57620002da620010f1565b815250506000848381518110620002f557620002f5620010db565b6020026020010151610160018181525050620003338483815181106200031f576200031f620010db565b60200260200101516200044760201b60201c565b620003608483815181106200034c576200034c620010db565b60200260200101516200058260201b60201c565b80602a60008685815181106200037a576200037a620010db565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003b791906200111d565b9250508190555080602c6000828254620003d291906200111d565b925050819055506200042c848381518110620003f257620003f2620010db565b60200260200101516020015182868581518110620004145762000414620010db565b602002602001015160000151620007b360201b60201c565b5080620004398162001139565b91505062000181565b505050565b60006200045e82606001516200099e60201b60201c565b6001600160a01b03909116602084015290508015620004b25760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620005265760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620004a9565b612710826080015111156200057e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620004a9565b5050565b6101808101516001600160a01b03166200060557601f54600090620005a790620009ec565b905081602001518260000151836080015183604051620005c79062000b0c565b620005d6949392919062001155565b604051809103906000f080158015620005f3573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006b7908262001239565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062000781908262001239565b5061026082015160138201805460ff19166001836003811115620007a957620007a9620010f1565b0217905550505050565b60008211620008115760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620004a9565b6001600160a01b0381166000908152602a60205260409020548211156200087b5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620004a9565b6001600160a01b0381166000908152602a602052604081208054849290620008a590849062001305565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620009318362001139565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b600080620009ab62000b1a565b60008060ff9050604083875160208901845afa620009c857600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000a145750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a44578062000a2b8162001139565b915062000a3c9050600a8362001331565b915062000a18565b6000816001600160401b0381111562000a615762000a6162000b38565b6040519080825280601f01601f19166020018201604052801562000a8c576020820181803683370190505b5090505b841562000b045762000aa460018362001305565b915062000ab3600a8662001348565b62000ac09060306200111d565b60f81b81838151811062000ad85762000ad8620010db565b60200101906001600160f81b031916908160001a90535062000afc600a8662001331565b945062000a90565b949350505050565b61186f806200925d83390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b735762000b7362000b38565b60405290565b60405160c081016001600160401b038111828210171562000b735762000b7362000b38565b60405161028081016001600160401b038111828210171562000b735762000b7362000b38565b604051601f8201601f191681016001600160401b038111828210171562000bef5762000bef62000b38565b604052919050565b6001600160a01b038116811462000c0d57600080fd5b50565b805162000c1d8162000bf7565b919050565b60005b8381101562000c3f57818101518382015260200162000c25565b50506000910152565b600082601f83011262000c5a57600080fd5b81516001600160401b0381111562000c765762000c7662000b38565b62000c8b601f8201601f191660200162000bc4565b81815284602083860101111562000ca157600080fd5b62000b0482602083016020870162000c22565b80516004811062000c1d57600080fd5b600060e0828403121562000cd757600080fd5b60405160e081016001600160401b038111828210171562000cfc5762000cfc62000b38565b8060405250809150825162000d118162000bf7565b8152602083015162000d238162000bf7565b6020820152604083015162000d388162000bf7565b6040820152606083015162000d4d8162000bf7565b606082015262000d606080840162000c10565b608082015262000d7360a0840162000c10565b60a082015262000d8660c0840162000c10565b60c08201525092915050565b60006080828403121562000da557600080fd5b62000daf62000b4e565b9050815162000dbe8162000bf7565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361024081121562000dfb57600080fd5b62000e0562000b4e565b915060c081121562000e1657600080fd5b5062000e2162000b79565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015162000e5d8162000bf7565b60a0820152815262000e738360c0840162000cc4565b602082015262000e88836101a0840162000d92565b6040820152610220820151606082015292915050565b60008061026080848603121562000eb457600080fd5b83516001600160401b038082111562000ecc57600080fd5b818601915086601f83011262000ee157600080fd5b815160208282111562000ef85762000ef862000b38565b8160051b62000f0982820162000bc4565b928352848101820192828101908b85111562000f2457600080fd5b83870192505b84831015620010b95782518681111562000f4357600080fd5b8701610280818e03601f1901121562000f5b57600080fd5b62000f6562000b9e565b62000f7286830162000c10565b815262000f826040830162000c10565b8682015262000f946060830162000c10565b604082015260808201518881111562000fac57600080fd5b62000fbc8f888386010162000c48565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e08201526101208201516101008201526101408201516101208201526101608201516101408201526101808201516101608201526200102a6101a0830162000c10565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e082015261022082015161020082015261024082015161022082015289820151888111156200107e57600080fd5b6200108e8f888386010162000c48565b61024083015250620010a4610280830162000cb4565b818b0152835250918301919083019062000f2a565b809950505050620010cd89828a0162000de6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562001133576200113362001107565b92915050565b6000600182016200114e576200114e62001107565b5060010190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620011948160a085016020870162000c22565b601f01601f19169190910160a00195945050505050565b600181811c90821680620011c057607f821691505b602082108103620011e157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044257600081815260208120601f850160051c81016020861015620012105750805b601f850160051c820191505b8181101562001231578281556001016200121c565b505050505050565b81516001600160401b0381111562001255576200125562000b38565b6200126d81620012668454620011ab565b84620011e7565b602080601f831160018114620012a557600084156200128c5750858301515b600019600386901b1c1916600185901b17855562001231565b600085815260208120601f198616915b82811015620012d657888601518255948401946001909101908401620012b5565b5085821015620012f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562001133576200113362001107565b634e487b7160e01b600052601260045260246000fd5b6000826200134357620013436200131b565b500490565b6000826200135a576200135a6200131b565b500690565b617eee806200136f6000396000f3fe608060405260043610620003ff5760003560e01c80638bac7dad116200020f578063b7ab4db51162000123578063d5f3948811620000b3578063dfb1a4d21162000081578063dfb1a4d21462000e14578063e7f43c681462000e2b578063e98712b21462000e4b578063f03b959d1462000e63578063f7866ee31462000e8857005b8063d5f394881462000d6b578063d861b0e81462000d8d578063d886f8a21462000da5578063dd62ed3e1462000dca57005b8063ceaad45511620000f1578063ceaad4551462000ce4578063cf9c57191462000d09578063cfd19fb91462000d21578063d372c07e1462000d4657005b8063b7ab4db51462000c77578063c2362dd51462000c8f578063c9d97af41462000ca7578063cb696f541462000cbf57005b8063a8b2216e116200019f578063b2ea9adb116200016d578063b2ea9adb1462000be0578063b3ecbadd1462000c05578063b46e55201462000c2a578063b66b3e791462000c4f57005b8063a8b2216e1462000b46578063a9059cbb1462000b6d578063ab8f6ffe1462000b92578063ae1f5fa01462000bb957005b80639c98e47111620001dd5780639c98e4711462000abf5780639dc29fac1462000ad7578063a515366a1462000afc578063a5d059ca1462000b2157005b80638bac7dad1462000a2357806395d89b411462000a4857806396b477cb1462000a765780639ac310741462000aa757005b8063436459691162000313578063731b3a0311620002a3578063833b1fce1162000271578063833b1fce146200098957806384467fdb14620009a9578063852c484914620009ce578063872cf05914620009f357806389c614b81462000a0b57005b8063731b3a03146200078657806377e741c7146200079d57806379502c5514620007c2578063819b6463146200097257005b80635f7d394911620002e15780635f7d394914620006d25780636b5f444c14620007105780636fd2c80b146200073557806370a08231146200074c57005b8063436459691462000649578063496ccd9b14620006605780634bb278f31462000685578063520fdbbc14620006ad57005b806318160ddd116200038f5780632f2c3f2e116200035d5780632f2c3f2e14620005c9578063313ce56714620005e157806335be16e014620005ff57806340c10f19146200062457005b806318160ddd14620005425780631904bb2e146200055957806323b872dd146200058d57806329070c6d14620005b257005b80631122063311620003cd5780631122063314620004c9578063114eaf5514620004e05780631250a28d14620005055780631604e416146200052a57005b806306fdde031462000409578063095ea7b3146200044d5780630ae65e7a14620004835780630d8e6e2c14620004a857005b366200040757005b005b3480156200041657600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b604051620004449190620056ba565b60405180910390f35b3480156200045a57600080fd5b50620004726200046c366004620056ec565b62000ea8565b604051901515815260200162000444565b3480156200049057600080fd5b5062000407620004a23660046200571b565b62000ec1565b348015620004b557600080fd5b50601e545b60405190815260200162000444565b348015620004d657600080fd5b50600e54620004ba565b348015620004ed57600080fd5b5062000407620004ff3660046200573b565b62000f54565b3480156200051257600080fd5b5062000407620005243660046200571b565b62000f86565b3480156200053757600080fd5b50620004ba60275481565b3480156200054f57600080fd5b50602c54620004ba565b3480156200056657600080fd5b506200057e620005783660046200571b565b62000fd5565b6040516200044491906200578e565b3480156200059a57600080fd5b5062000472620005ac36600462005907565b62001283565b348015620005bf57600080fd5b50600d54620004ba565b348015620005d657600080fd5b50620004ba61271081565b348015620005ee57600080fd5b506040516012815260200162000444565b3480156200060c57600080fd5b50620004076200061e3660046200594d565b6200132b565b3480156200063157600080fd5b506200040762000643366004620056ec565b62001507565b3480156200065657600080fd5b50601c54620004ba565b3480156200066d57600080fd5b50620004076200067f3660046200571b565b62001544565b3480156200069257600080fd5b506200069d6200164e565b6040516200044492919062005a0e565b348015620006ba57600080fd5b5062000407620006cc3660046200571b565b62001ae0565b348015620006df57600080fd5b50620006f7620006f136600462005a2b565b62001cdb565b6040516001600160a01b03909116815260200162000444565b3480156200071d57600080fd5b50620004076200072f3660046200573b565b62001ef2565b3480156200074257600080fd5b50601054620004ba565b3480156200075957600080fd5b50620004ba6200076b3660046200571b565b6001600160a01b03166000908152602a602052604090205490565b3480156200079357600080fd5b50602254620004ba565b348015620007aa57600080fd5b5062000407620007bc3660046200573b565b62002078565b348015620007cf57600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008a4939084565b6040805185518152602080870151818301528683015182840152606080880151818401526080808901518185015260a0988901516001600160a01b039081168a8601528851811660c080870191909152848a0151821660e0870152898701518216610100870152838a0151821661012087015291890151811661014086015298880151891661016085015290960151871661018083015284519096166101a0820152948301516101c08601528201516101e08501529101516102008301526102208201526102400162000444565b3480156200097f57600080fd5b50601d54620004ba565b3480156200099657600080fd5b506014546001600160a01b0316620006f7565b348015620009b657600080fd5b5062000407620009c836600462005af9565b620020aa565b348015620009db57600080fd5b5062000407620009ed366004620056ec565b620021d9565b34801562000a0057600080fd5b50620004076200236a565b34801562000a1857600080fd5b50620004ba60235481565b34801562000a3057600080fd5b506200040762000a423660046200573b565b620023a6565b34801562000a5557600080fd5b50604080518082019091526003815262272a2760e91b602082015262000435565b34801562000a8357600080fd5b50620004ba62000a953660046200573b565b60009081526021602052604090205490565b34801562000ab457600080fd5b50620004ba602d5481565b34801562000acc57600080fd5b50620004ba60245481565b34801562000ae457600080fd5b506200040762000af6366004620056ec565b6200242a565b34801562000b0957600080fd5b506200040762000b1b366004620056ec565b62002547565b34801562000b2e57600080fd5b506200040762000b40366004620056ec565b62002616565b34801562000b5357600080fd5b5062000b5e620026ad565b60405162000444919062005ba2565b34801562000b7a57600080fd5b506200047262000b8c366004620056ec565b62002790565b34801562000b9f57600080fd5b5062000baa620027e8565b60405162000444919062005c08565b34801562000bc657600080fd5b5062000bd1620028fa565b60405162000444919062005c1d565b34801562000bed57600080fd5b506200040762000bff36600462005c6c565b62002b40565b34801562000c1257600080fd5b506200040762000c243660046200571b565b62002b87565b34801562000c3757600080fd5b506200040762000c493660046200571b565b62002bd6565b34801562000c5c57600080fd5b5062000c6762002e59565b6040516200044492919062005cd7565b34801562000c8457600080fd5b5062000bd162002f90565b34801562000c9c57600080fd5b50620004ba60225481565b34801562000cb457600080fd5b50620004ba60205481565b34801562000ccc57600080fd5b506200040762000cde3660046200573b565b62002ff4565b34801562000cf157600080fd5b506200040762000d033660046200571b565b62003057565b34801562000d1657600080fd5b5062000407620030a6565b34801562000d2e57600080fd5b506200040762000d403660046200571b565b620030fa565b34801562000d5357600080fd5b506200040762000d653660046200571b565b62003149565b34801562000d7857600080fd5b50602e54620006f7906001600160a01b031681565b34801562000d9a57600080fd5b506200040762003198565b34801562000db257600080fd5b506200040762000dc43660046200571b565b620031e0565b34801562000dd757600080fd5b50620004ba62000de936600462005d09565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000e2157600080fd5b50601b54620004ba565b34801562000e3857600080fd5b50601a546001600160a01b0316620006f7565b34801562000e5857600080fd5b50620004ba60265481565b34801562000e7057600080fd5b506200040762000e823660046200571b565b6200322f565b34801562000e9557600080fd5b506012546001600160a01b0316620006f7565b600062000eb73384846200327e565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000f0a5760405162461bcd60e51b815260040162000f019062005d47565b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f465760405162461bcd60e51b815260040162000f019062005d7e565b62000f5181620033a6565b50565b601a546001600160a01b0316331462000f815760405162461bcd60e51b815260040162000f019062005dca565b601055565b601a546001600160a01b0316331462000fb35760405162461bcd60e51b815260040162000f019062005dca565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b62000fdf62005493565b6001600160a01b038083166000818152602b6020526040902060010154909116146200101f5760405162461bcd60e51b815260040162000f019062005e01565b6001600160a01b038083166000908152602b60209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010829062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b09062005e38565b8015620011015780601f10620010d55761010080835404028352916020019162001101565b820191906000526020600020905b815481529060010190602001808311620010e357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011bd9062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620011eb9062005e38565b80156200123c5780601f1062001210576101008083540402835291602001916200123c565b820191906000526020600020905b8154815290600101906020018083116200121e57829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001266576200126662005755565b60038111156200127a576200127a62005755565b90525092915050565b6000620012928484846200347d565b6001600160a01b0384166000908152602960209081526040808320338452909152812054620012c390849062005e8a565b9050620012d28533836200327e565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200131891815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620013935760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000f01565b6000610120820135602b82620013b060408601602087016200571b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013e0919062005e8a565b60c0830135602b6000620013fb60408701602088016200571b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200142b919062005e8a565b60a0840135602b60006200144660408801602089016200571b565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015462001476919062005e8a565b62001482919062005ea0565b6200148e919062005ea0565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620014bf90849062005ea0565b90915550829050602b6000620014dc60408401602085016200571b565b6001600160a01b031681526020810191909152604001600020620015018282620060aa565b50505050565b601a546001600160a01b03163314620015345760405162461bcd60e51b815260040162000f019062005dca565b62001540828262003543565b5050565b601a546001600160a01b03163314620015715760405162461bcd60e51b815260040162000f019062005dca565b601480546001600160a01b0319166001600160a01b03838116918217909255601554604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620015d057600080fd5b505af1158015620015e5573d6000803e3d6000fd5b5050601754604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200163257600080fd5b505af115801562001647573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620016815760405162461bcd60e51b815260040162000f019062006200565b6020805443600081815260219093526040832091909155601b54602254620016aa919062005ea0565b6013546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620016f557600080fd5b505af11580156200170a573d6000803e3d6000fd5b505050508015620018cb57601954602c54602d546023546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a3919062006243565b905080602d541015620017b55750602d545b620017c1308262003543565b80602d6000828254620017d5919062005e8a565b90915550620017e790504782620035c9565b620017f162003ab3565b620017fb62003ba2565b600062001807620028fa565b60145460405163422811f960e11b81529192506001600160a01b03169063845023f2906200183a90849060040162005c1d565b600060405180830381600087803b1580156200185557600080fd5b505af11580156200186a573d6000803e3d6000fd5b50504360225550504260235560208054600191906000906200188e90849062005ea0565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b60145460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193d91906200625d565b90508015620019b9576015546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620019b1575060408051601f3d908101601f19168201909252620019ae918101906200625d565b60015b15620019b957505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001ad0576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001a389062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462001a669062005e38565b801562001ab75780601f1062001a8b5761010080835404028352916020019162001ab7565b820191906000526020600020905b81548152906001019060200180831162001a9957829003601f168201915b50505050508152505081526020019060010190620019e2565b5050505090509350935050509091565b601a546001600160a01b0316331462001b0d5760405162461bcd60e51b815260040162000f019062005dca565b601a80546001600160a01b0319166001600160a01b0383811691821790925560145460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001b6c57600080fd5b505af115801562001b81573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001bcd57600080fd5b505af115801562001be2573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c2e57600080fd5b505af115801562001c43573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c8f57600080fd5b505af115801562001ca4573d6000803e3d6000fd5b505060185460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb915060240162001617565b600080805b60255481101562001d37576025818154811062001d015762001d0162006281565b9060005260206000209060030201600101548262001d20919062005ea0565b91508062001d2e8162006297565b91505062001ce0565b508060000362001d8a5760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000f01565b60008362001d9a606387620062b3565b62001da6919062005ea0565b905060008160405160200162001dbe91815260200190565b60408051601f1981840301815291905280516020909101209050600062001de68483620062e3565b90506000805b60255481101562001e96576025818154811062001e0d5762001e0d62006281565b9060005260206000209060030201600101548262001e2c919062005ea0565b915062001e3b60018362005e8a565b831162001e81576025818154811062001e585762001e5862006281565b60009182526020909120600390910201546001600160a01b0316965062000ebb95505050505050565b8062001e8d8162006297565b91505062001dec565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000f01565b601a546001600160a01b0316331462001f1f5760405162461bcd60e51b815260040162000f019062005dca565b601b5481101562001fd6578060225462001f3a919062005ea0565b431062001fd65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000f01565b601b819055601354604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200202257600080fd5b505af115801562002037573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200206d91815260200190565b60405180910390a150565b601a546001600160a01b03163314620020a55760405162461bcd60e51b815260040162000f019062005dca565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562002179576200217962005755565b9052905062002189818362003cc1565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021ca92339289918b91620062fa565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620022195760405162461bcd60e51b815260040162000f019062005d47565b6001600160a01b038281166000908152602b6020526040902054163314620022555760405162461bcd60e51b815260040162000f019062005d7e565b612710811115620022a95760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000f01565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200232290849062005ea0565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620023975760405162461bcd60e51b815260040162000f019062005dca565b6002805460ff19166001179055565b601a546001600160a01b03163314620023d35760405162461bcd60e51b815260040162000f019062005dca565b60008111620024255760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000f01565b601d55565b601a546001600160a01b03163314620024575760405162461bcd60e51b815260040162000f019062005dca565b6001600160a01b0382166000908152602a6020526040902054811115620024ba5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0382166000908152602a602052604081208054839290620024e490849062005e8a565b9250508190555080602c6000828254620024ff919062005e8a565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025875760405162461bcd60e51b815260040162000f019062005e01565b6001600160a01b0382166000908152602b602052604081206013015460ff166003811115620025ba57620025ba62005755565b14620026095760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000f01565b620015408282336200411b565b6001600160a01b038083166000818152602b602052604090206001015490911614620026565760405162461bcd60e51b815260040162000f019062005e01565b60008111620026a05760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000f01565b6200154082823362004307565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002787578382906000526020600020018054620026f39062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620027219062005e38565b8015620027725780601f10620027465761010080835404028352916020019162002772565b820191906000526020600020905b8154815290600101906020018083116200275457829003601f168201915b505050505081526020019060010190620026d1565b50505050905090565b60006200279f3384846200347d565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002787576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620028629062005e38565b80601f0160208091040260200160405190810160405280929190818152602001828054620028909062005e38565b8015620028e15780601f10620028b557610100808354040283529160200191620028e1565b820191906000526020600020905b815481529060010190602001808311620028c357829003601f168201915b505050505081525050815260200190600101906200280c565b602e546060906001600160a01b031633146200292a5760405162461bcd60e51b815260040162000f019062006200565b601f546200297b5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000f01565b6200298562005563565b601d546080820152601f8152602b60208201526025604082015260246060820152620029b1816200463a565b620029bf6028600062005581565b6025548062002a065760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000f01565b60008167ffffffffffffffff81111562002a245762002a2462005a4e565b60405190808252806020026020018201604052801562002a4e578160200160208202803683370190505b50905060005b8281101562002b38576000602b60006025848154811062002a795762002a7962006281565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5019062002ae19083018262006343565b50600281015483516001600160a01b039091169084908490811062002b0a5762002b0a62006281565b6001600160a01b0390921660209283029190910190910152508062002b2f8162006297565b91505062002a54565b509250505090565b601a546001600160a01b0316331462002b6d5760405162461bcd60e51b815260040162000f019062005dca565b62002b7a6000836200465a565b620015406001826200465a565b601a546001600160a01b0316331462002bb45760405162461bcd60e51b815260040162000f019062005dca565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b60205260409020600101549091161462002c165760405162461bcd60e51b815260040162000f019062005d47565b6001600160a01b038082166000908152602b602052604090208054909116331462002c9c5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606482015260840162000f01565b6000601382015460ff16600381111562002cba5762002cba62005755565b0362002d095760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000f01565b6002601382015460ff16600381111562002d275762002d2762005755565b14801562002d385750438160100154115b1562002d875760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000f01565b6003601382015460ff16600381111562002da55762002da562005755565b0362002df45760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000f01565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002e44919062005ea0565b60405190815260200160405180910390a35050565b6060806000600181805462002e6e9062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462002e9c9062005e38565b801562002eed5780601f1062002ec15761010080835404028352916020019162002eed565b820191906000526020600020905b81548152906001019060200180831162002ecf57829003601f168201915b5050505050915080805462002f029062005e38565b80601f016020809104026020016040519081016040528092919081815260200182805462002f309062005e38565b801562002f815780601f1062002f555761010080835404028352916020019162002f81565b820191906000526020600020905b81548152906001019060200180831162002f6357829003601f168201915b50505050509050915091509091565b6060601f80548060200260200160405190810160405280929190818152602001828054801562002fea57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002fcb575b5050505050905090565b601a546001600160a01b03163314620030215760405162461bcd60e51b815260040162000f019062005dca565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd389128906020016200206d565b601a546001600160a01b03163314620030845760405162461bcd60e51b815260040162000f019062005dca565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620030d35760405162461bcd60e51b815260040162000f019062005dca565b620030e0600080620055a1565b620030ee60016000620055a1565b6002805460ff19169055565b601a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000f019062005dca565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620031765760405162461bcd60e51b815260040162000f019062005dca565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620031c55760405162461bcd60e51b815260040162000f019062006200565b620031cf62003ab3565b620031d9620028fa565b5042602355565b601a546001600160a01b031633146200320d5760405162461bcd60e51b815260040162000f019062005dca565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200325c5760405162461bcd60e51b815260040162000f019062005dca565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620032e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000f01565b6001600160a01b038216620033455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000f01565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff166003811115620033db57620033db62005755565b146200342a5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000f01565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002e44919062005ea0565b6001600160a01b0383166000908152602a6020526040902054811115620034e05760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0383166000908152602a6020526040812080548392906200350a90849062005e8a565b90915550506001600160a01b0382166000908152602a6020526040812080548392906200353990849062005ea0565b9091555050505050565b6001600160a01b0382166000908152602a6020526040812080548392906200356d90849062005ea0565b9250508190555080602c600082825462003588919062005ea0565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016200253b565b81158015620035d6575080155b15620035e0575050565b600d54600090670de0b6b3a764000090620035fd908590620062b3565b6200360991906200642c565b9050801562003687576012546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003661576040519150601f19603f3d011682016040523d82523d6000602084013e62003666565b606091505b5090915050801515600103620036855762003682828562005e8a565b93505b505b82602660008282546200369b919062005ea0565b90915550600090505b60255481101562001501576000602b600060258481548110620036cb57620036cb62006281565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206024546025805492945090918891908690811062003716576200371662006281565b906000526020600020906003020160010154620037349190620062b3565b6200374091906200642c565b9050600060245486602586815481106200375e576200375e62006281565b9060005260206000209060030201600101546200377c9190620062b3565b6200378891906200642c565b905060008211806200379a5750600081115b1562003a9a576002601384015460ff166003811115620037be57620037be62005755565b1480620037e657506003601384015460ff166003811115620037e457620037e462005755565b145b15620038b057601354620038069030906001600160a01b0316836200347d565b601354602580546001600160a01b039092169163a8031a1d9185918890811062003834576200383462006281565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b1580156200388d57600080fd5b505af1158015620038a2573d6000803e3d6000fd5b505050505050505062003a9e565b60008360050154838560080154620038c99190620062b3565b620038d591906200642c565b905080156200393a5783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d806000811462003931576040519150601f19603f3d011682016040523d82523d6000602084013e62003936565b606091505b5050505b60008460050154838660080154620039539190620062b3565b6200395f91906200642c565b9050801562003981578454620039819030906001600160a01b0316836200347d565b60006200398f828562005e8a565b905060006200399f848762005e8a565b90506000811180620039b15750600082115b1562003a4b57600c870154620039d39030906001600160a01b0316846200347d565b600c87015460405163a0ce552d60e01b8152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562003a21573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003a48919062006443565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b8062003aaa8162006297565b915050620036a4565b6004545b60055481101562003ae05762003ada8162003ad28162006297565b9250620047ad565b62003ab7565b506005546004556008546007540362003af557565b6009545b60085481101562003b225762003b1c8162003b148162006297565b9250620049ca565b62003af9565b50600854600955600754805b60085481101562003b9c57601054600082815260066020526040902060040154439162003b5b9162005ea0565b1162003b815762003b6c8162004cc5565b62003b7960018362005ea0565b915062003b87565b62003b9c565b8062003b938162006297565b91505062003b2e565b50600755565b600c54600b54101562003cbf57600b546000908152600a602052604090206010546001820154439162003bd59162005ea0565b111562003bdf5750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003c3a920190815260200190565b600060405180830381600087803b15801562003c5557600080fd5b505af115801562003c6a573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003cb290849062005ea0565b9091555062003ba2915050565b565b60e281511462003d0b5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000f01565b6030826102400151511462003d635760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000f01565b62003d6e8262004e10565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003dd1920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003df1835162004f3d565b8360405160200162003e069392919062006468565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003e5e898262003e5860416002620062b3565b6200505e565b9050600062003e7d8a62003e7560416002620062b3565b60606200505e565b905060205b825181101562003f4e5762003e98838262005177565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003ef4573d6000803e3d6000fd5b5050604051601f19015190508762003f0e6041846200642c565b8151811062003f215762003f2162006281565b6001600160a01b039092166020928302919091019091015262003f4660418262005ea0565b905062003e82565b508a602001516001600160a01b03168660008151811062003f735762003f7362006281565b60200260200101516001600160a01b03161462003fe55760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000f01565b8a604001516001600160a01b03168660018151811062004009576200400962006281565b60200260200101516001600160a01b0316146200407d5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000f01565b6001620040958c6102400151838e60000151620051ae565b14620041035760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000f01565b6200410e8b6200521d565b5050505050505050505050565b60008211620041795760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000f01565b6001600160a01b0381166000908152602a6020526040902054821115620041e35760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000f01565b6001600160a01b0381166000908152602a6020526040812080548492906200420d90849062005e8a565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620042998362006297565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b6020526040902080549091838116911614806200447d57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa1580156200437e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620043a4919062006243565b9050848110156200440c5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000f01565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b1580156200445d57600080fd5b505af115801562004472573d6000803e3d6000fd5b505050505062004510565b8382600b0154836008015462004494919062005e8a565b1015620044f45760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000f01565b8382600b0160008282546200450a919062005ea0565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff199095169490941792909217909255805491620045e48362006297565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620042f89291909115158252602082015260400190565b60fa60a06000808285855af462004655573d6000803e3d6000fd5b505050565b8154600260018083161561010002038216048251808201602081106020841001600281146200470957600181146200472f578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015620046f25781518455600184019350602082019150620046d3565b815191036101000a908190040290915550620047a4565b60028302826020036101000a846020036101000a602089015104020185018755620047a4565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562004792578151845560018401935060208201915062004773565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff166003811115620047f357620047f362005755565b146200489357600282015482546001600160a01b03166000908152602a6020526040812080549091906200482990849062005ea0565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462004886946001600160a01b0391821694911692909160ff90911690620064b1565b60405180910390a1505050565b805482546001600160a01b03908116911614620049905760008082600801548360050154620048c3919062005e8a565b905080600003620048db578360020154915062004901565b80846002015484600d0154620048f29190620062b3565b620048fe91906200642c565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b1580156200495357600080fd5b505af115801562004968573d6000803e3d6000fd5b505050508183600d01600082825462004982919062005ea0565b90915550620049b092505050565b8160020154816008016000828254620049aa919062005ea0565b90915550505b816002015481600501600082825462003539919062005ea0565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff1662004bbe576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801562004a5f57600080fd5b505af115801562004a74573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801562004aca57600080fd5b505af115801562004adf573d6000803e3d6000fd5b5050505060008360080154846005015462004afb919062005e8a565b600d85015490915062004b0f8284620062b3565b62004b1b91906200642c565b92508184600d01600082825462004b33919062005e8a565b9091555050600684015460000362004b52576003850183905562004b7a565b6006840154600785015462004b689085620062b3565b62004b7491906200642c565b60038601555b8284600601600082825462004b90919062005ea0565b9091555050600385015460078501805460009062004bb090849062005ea0565b9091555062004c9392505050565b506002820154600882015481111562004bd8575060088101545b816009015460000362004bf2576003830181905562004c1a565b6009820154600a83015462004c089083620062b3565b62004c1491906200642c565b60038401555b8082600901600082825462004c30919062005ea0565b90915550506003830154600a8301805460009062004c5090849062005ea0565b925050819055508082600801600082825462004c6d919062005e8a565b90915550506002830154600b8301805460009062004c8d90849062005e8a565b90915550505b6005808401805460ff191660011790558201805482919060009062004cba90849062005e8a565b909155505050505050565b6000818152600660205260408120600381015490910362004ce4575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff1662004d805781600701548260060154846003015462004d309190620062b3565b62004d3c91906200642c565b90508082600601600082825462004d54919062005e8a565b9091555050600383015460078301805460009062004d7490849062005e8a565b9091555062004de59050565b81600a01548260090154846003015462004d9b9190620062b3565b62004da791906200642c565b90508082600901600082825462004dbf919062005e8a565b90915550506003830154600a8301805460009062004ddf90849062005e8a565b90915550505b82546001600160a01b03166000908152602a60205260408120805483929062004cba90849062005ea0565b600062004e2182606001516200544e565b6001600160a01b0390911660208401529050801562004e715760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000f01565b6020808301516001600160a01b039081166000908152602b909252604090912060010154161562004ee55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000f01565b61271082608001511115620015405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000f01565b60608160000362004f655750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004f95578062004f7c8162006297565b915062004f8d9050600a836200642c565b915062004f69565b60008167ffffffffffffffff81111562004fb35762004fb362005a4e565b6040519080825280601f01601f19166020018201604052801562004fde576020820181803683370190505b5090505b8415620050565762004ff660018362005e8a565b915062005005600a86620062e3565b6200501290603062005ea0565b60f81b8183815181106200502a576200502a62006281565b60200101906001600160f81b031916908160001a9053506200504e600a866200642c565b945062004fe2565b949350505050565b6060816200506e81601f62005ea0565b1015620050af5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000f01565b620050bb828462005ea0565b84511015620051015760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000f01565b6060821580156200512257604051915060008252602082016040526200516e565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156200515d57805183526020928301920162005143565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620051a757620051a4601b82620064df565b90505b9250925092565b6000620051ba620055e0565b6000858585604051602001620051d393929190620064fb565b6040516020818303038152906040529050600060fb9050600082516020620051fc919062005ea0565b90506020848285855afa6200521057600080fd5b5050905195945050505050565b6101808101516001600160a01b0316620052a057601f54600090620052429062004f3d565b9050816020015182600001518360800151836040516200526290620055fe565b6200527194939291906200654a565b604051809103906000f0801580156200528e573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b9095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005352908262006589565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182015561024082015160128201906200541c908262006589565b5061026082015160138201805460ff1916600183600381111562005444576200544462005755565b0217905550505050565b6000806200545b6200560c565b60008060ff9050604083875160208901845afa6200547857600080fd5b50508051602090910151600160601b90910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600060038111156200555e576200555e62005755565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f5191906200562a565b508054620055af9062005e38565b6000825580601f10620055c0575050565b601f01602090049060005260206000209081019062000f5191906200564f565b60405180602001604052806001906020820280368337509192915050565b61186f806200664a83390190565b60405180604001604052806002906020820280368337509192915050565b808211156200564b576000620056418282620055a1565b506001016200562a565b5090565b5b808211156200564b576000815560010162005650565b60005b838110156200568357818101518382015260200162005669565b50506000910152565b60008151808452620056a681602086016020860162005666565b601f01601f19169290920160200192915050565b602081526000620056cf60208301846200568c565b9392505050565b6001600160a01b038116811462000f5157600080fd5b600080604083850312156200570057600080fd5b82356200570d81620056d6565b946020939093013593505050565b6000602082840312156200572e57600080fd5b8135620056cf81620056d6565b6000602082840312156200574e57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600481106200578a57634e487b7160e01b600052602160045260246000fd5b9052565b60208152620057a96020820183516001600160a01b03169052565b60006020830151620057c660408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620057fa6102a08501836200568c565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a062005882818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620058e684836200568c565b935080870151915050620058fd828601826200576b565b5090949350505050565b6000806000606084860312156200591d57600080fd5b83356200592a81620056d6565b925060208401356200593c81620056d6565b929592945050506040919091013590565b6000602082840312156200596057600080fd5b813567ffffffffffffffff8111156200597857600080fd5b82016102808185031215620056cf57600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005a01578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620059ec818701836200568c565b9a87019a9550505090840190600101620059aa565b5091979650505050505050565b82151581526040602082015260006200505660408301846200598c565b6000806040838503121562005a3f57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262005a7657600080fd5b813567ffffffffffffffff8082111562005a945762005a9462005a4e565b604051601f8301601f19908116603f0116810190828211818310171562005abf5762005abf62005a4e565b8160405283815286602085880101111562005ad957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121562005b1057600080fd5b843567ffffffffffffffff8082111562005b2957600080fd5b62005b378883890162005a64565b95506020870135915062005b4b82620056d6565b9093506040860135908082111562005b6257600080fd5b62005b708883890162005a64565b9350606087013591508082111562005b8757600080fd5b5062005b968782880162005a64565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005bfb57603f1988860301845262005be88583516200568c565b9450928501929085019060010162005bc9565b5092979650505050505050565b602081526000620056cf60208301846200598c565b6020808252825182820181905260009190848201906040850190845b8181101562005c605783516001600160a01b03168352928401929184019160010162005c39565b50909695505050505050565b6000806040838503121562005c8057600080fd5b823567ffffffffffffffff8082111562005c9957600080fd5b62005ca78683870162005a64565b9350602085013591508082111562005cbe57600080fd5b5062005ccd8582860162005a64565b9150509250929050565b60408152600062005cec60408301856200568c565b828103602084015262005d0081856200568c565b95945050505050565b6000806040838503121562005d1d57600080fd5b823562005d2a81620056d6565b9150602083013562005d3c81620056d6565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005e4d57607f821691505b60208210810362005e6e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000ebb5762000ebb62005e74565b8082018082111562000ebb5762000ebb62005e74565b6000813562000ebb81620056d6565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005efd57600080fd5b83018035915067ffffffffffffffff82111562005f1957600080fd5b60200191503681900382131562005f2f57600080fd5b9250929050565b601f8211156200465557600081815260208120601f850160051c8101602086101562005f5f5750805b601f850160051c820191505b8181101562005f805782815560010162005f6b565b505050505050565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005fb85762005fb862005a4e565b62005fd08362005fc9835462005e38565b8362005f36565b6000601f84116001811462006003576000851562005fee5750838201355b62005ffa868262005f88565b84555062001647565b600083815260209020601f19861690835b8281101562006036578685013582556020948501946001909201910162006014565b5086821015620060545760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000ebb57600080fd5b600482106200609757634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b620060c0620060b98362005eb6565b8262005ec5565b620060dc620060d26020840162005eb6565b6001830162005ec5565b620060f8620060ee6040840162005eb6565b6002830162005ec5565b62006107606083018362005ee5565b6200611781836003860162005f9d565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b8201556200618a62006180610180840162005eb6565b600c830162005ec5565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f82015561020082013560108201556102208201356011820155620061d161024083018362005ee5565b620061e181836012860162005f9d565b505062001540620061f6610260840162006066565b6013830162006078565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b6000602082840312156200625657600080fd5b5051919050565b6000602082840312156200627057600080fd5b81518015158114620056cf57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060018201620062ac57620062ac62005e74565b5060010190565b808202811582820484141762000ebb5762000ebb62005e74565b634e487b7160e01b600052601260045260246000fd5b600082620062f557620062f5620062cd565b500690565b600060018060a01b0380881683528087166020840152808616604084015260a060608401526200632e60a08401866200568c565b91508084166080840152509695505050505050565b8181036200634f575050565b6200635b825462005e38565b67ffffffffffffffff81111562006376576200637662005a4e565b6200638e8162006387845462005e38565b8462005f36565b6000601f821160018114620063c15760008315620063ac5750848201545b620063b8848262005f88565b85555062001647565b600085815260209020601f19841690600086815260209020845b83811015620063fd5782860154825560019586019590910190602001620063db565b50858310156200641c5781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200643e576200643e620062cd565b500490565b600080604083850312156200645757600080fd5b505080516020909101519092909150565b600084516200647c81846020890162005666565b8451908301906200649281836020890162005666565b8451910190620064a781836020880162005666565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005d0060608301846200576b565b60ff818116838216019081111562000ebb5762000ebb62005e74565b600084516200650f81846020890162005666565b8451908301906200652581836020890162005666565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906200657f908301846200568c565b9695505050505050565b815167ffffffffffffffff811115620065a657620065a662005a4e565b620065b78162006387845462005e38565b602080601f831160018114620065eb5760008415620065d65750858301515b620065e2858262005f88565b86555062005f80565b600085815260208120601f198616915b828110156200661c57888601518255948401946001909101908401620065fb565b50858210156200641c57939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033a2646970667358221220e1fff5a9ee04a351306563fb0b0cd6c390ad299e1e5ee87e83e4ed842e1a53a564736f6c6343000815003360806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // AutonityABI is the input ABI used to generate the binding from. @@ -1623,6 +1637,21 @@ func (_Autonity *Autonity) Allowance(opts *runOptions, owner common.Address, spe } +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_Autonity *Autonity) AtnTotalRedistributed(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _Autonity.call(opts, "atnTotalRedistributed") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // BalanceOf is a free data retrieval call binding the contract method 0x70a08231. // // Solidity: function balanceOf(address _addr) view returns(uint256) @@ -1640,7 +1669,7 @@ func (_Autonity *Autonity) BalanceOf(opts *runOptions, _addr common.Address) (*b // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_Autonity *Autonity) Config(opts *runOptions) (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -2013,6 +2042,21 @@ func (_Autonity *Autonity) GetVersion(opts *runOptions) (*big.Int, uint64, error } +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_Autonity *Autonity) InflationReserve(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _Autonity.call(opts, "inflationReserve") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // LastEpochBlock is a free data retrieval call binding the contract method 0xc2362dd5. // // Solidity: function lastEpochBlock() view returns(uint256) @@ -2028,6 +2072,21 @@ func (_Autonity *Autonity) LastEpochBlock(opts *runOptions) (*big.Int, uint64, e } +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_Autonity *Autonity) LastEpochTime(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _Autonity.call(opts, "lastEpochTime") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // Name is a free data retrieval call binding the contract method 0x06fdde03. // // Solidity: function name() pure returns(string) @@ -2058,21 +2117,6 @@ func (_Autonity *Autonity) Symbol(opts *runOptions) (string, uint64, error) { } -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_Autonity *Autonity) TotalRedistributed(opts *runOptions) (*big.Int, uint64, error) { - out, consumed, err := _Autonity.call(opts, "totalRedistributed") - - if err != nil { - return *new(*big.Int), consumed, err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - return out0, consumed, err - -} - // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. // // Solidity: function totalSupply() view returns(uint256) @@ -2224,6 +2268,14 @@ func (_Autonity *Autonity) SetEpochPeriod(opts *runOptions, _period *big.Int) (u return consumed, err } +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_Autonity *Autonity) SetInflationControllerContract(opts *runOptions, _address common.Address) (uint64, error) { + _, consumed, err := _Autonity.call(opts, "setInflationControllerContract", _address) + return consumed, err +} + // SetMinimumBaseFee is a paid mutator transaction binding the contract method 0xcb696f54. // // Solidity: function setMinimumBaseFee(uint256 _price) returns() @@ -2306,9 +2358,9 @@ func (_Autonity *Autonity) Transfer(opts *runOptions, _recipient common.Address, // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_Autonity *Autonity) TransferFrom(opts *runOptions, sender common.Address, recipient common.Address, amount *big.Int) (uint64, error) { - _, consumed, err := _Autonity.call(opts, "transferFrom", sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_Autonity *Autonity) TransferFrom(opts *runOptions, _sender common.Address, _recipient common.Address, _amount *big.Int) (uint64, error) { + _, consumed, err := _Autonity.call(opts, "transferFrom", _sender, _recipient, _amount) return consumed, err } @@ -4341,13 +4393,14 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { // AutonityRewarded represents a Rewarded event raised by the Autonity contract. type AutonityRewarded struct { Addr common.Address; - Amount *big.Int; + AtnAmount *big.Int; + NtnAmount *big.Int; Raw types.Log // Blockchain specific contextual infos } - // FilterRewarded is a free log retrieval operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // FilterRewarded is a free log retrieval operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *Autonity) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityRewardedIterator, error) { var addrRule []interface{} @@ -4356,6 +4409,7 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { } + logs, sub, err := _Autonity.contract.FilterLogs(opts, "Rewarded", addrRule) if err != nil { return nil, err @@ -4363,9 +4417,9 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { return &AutonityRewardedIterator{contract: _Autonity.contract, event: "Rewarded", logs: logs, sub: sub}, nil } - // WatchRewarded is a free log subscription operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // WatchRewarded is a free log subscription operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *Autonity) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityRewarded, addr []common.Address) (event.Subscription, error) { var addrRule []interface{} @@ -4374,6 +4428,7 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { } + logs, sub, err := _Autonity.contract.WatchLogs(opts, "Rewarded", addrRule) if err != nil { return nil, err @@ -4406,9 +4461,9 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { }), nil } - // ParseRewarded is a log parse operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // ParseRewarded is a log parse operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_Autonity *Autonity) ParseRewarded(log types.Log) (*AutonityRewarded, error) { event := new(AutonityRewarded) if err := _Autonity.contract.UnpackLog(event, "Rewarded", log); err != nil { @@ -4577,12 +4632,13 @@ func (_Autonity *Autonity) Receive(opts *runOptions) (uint64, error) { // AutonityUpgradeTestMetaData contains all meta data concerning the AutonityUpgradeTest contract. var AutonityUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"}],\"name\":\"MinimumBaseFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"atnTotalRedistributed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCommittee\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"}],\"internalType\":\"structAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"}],\"internalType\":\"structAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deployer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"getProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIACU\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setMinimumBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIStabilization\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractISupplyControl\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractLiquid\",\"name\":\"liquidContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provableFaultCount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"internalType\":\"structAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"}],\"name\":\"updateValidatorAndTransferSlashedFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "b46e5520": "activateValidator(address)", "dd62ed3e": "allowance(address,address)", "095ea7b3": "approve(address,uint256)", + "e98712b2": "atnTotalRedistributed()", "70a08231": "balanceOf(address)", "a515366a": "bond(address,uint256)", "9dc29fac": "burn(address,uint256)", @@ -4615,7 +4671,9 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "9ac31074": "inflationReserve()", "c2362dd5": "lastEpochBlock()", + "89c614b8": "lastEpochTime()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", @@ -4625,6 +4683,7 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", + "f03b959d": "setInflationControllerContract(address)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", @@ -4635,7 +4694,6 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "114eaf55": "setUnbondingPeriod(uint256)", "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", - "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", @@ -4644,7 +4702,7 @@ var AutonityUpgradeTestMetaData = &bind.MetaData{ "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", }, - Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d4e565b815260200190600190039081620000335790505b506040805161012081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e08601526011546001600160a01b039081166101008701529385528551908101865260125484168152601354841660208281019190915260145485168288015260155485166060808401919091526016548616838601526017548616938301939093528086019190915285519283018652601854909316825260195492820192909252601a5481850152601b548183015292820192909252601c54918101829052906000036200014c57602a80546001600160a01b031916331790556200014c828262000169565b5050601c546001036200016357620001636200051f565b6200115e565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b82518110156200051a5760008382815181106200027a576200027a62000ebd565b602002602001015160a00151905060008483815181106200029f576200029f62000ebd565b60200260200101516101a00181815250506000848381518110620002c757620002c762000ebd565b602002602001015161018001906001600160a01b031690816001600160a01b031681525050600084838151811062000303576200030362000ebd565b602002602001015160a001818152505060008483815181106200032a576200032a62000ebd565b60209081029190910101516101c00152600f54845185908490811062000354576200035462000ebd565b6020026020010151608001818152505060008483815181106200037b576200037b62000ebd565b6020026020010151610260019060038111156200039c576200039c62000ed3565b90816003811115620003b257620003b262000ed3565b815250506000848381518110620003cd57620003cd62000ebd565b60200260200101516101600181815250506200040b848381518110620003f757620003f762000ebd565b60200260200101516200068d60201b60201c565b6200043884838151811062000424576200042462000ebd565b6020026020010151620007c460201b60201c565b806027600086858151811062000452576200045262000ebd565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200048f919062000eff565b925050819055508060296000828254620004aa919062000eff565b9250508190555062000504848381518110620004ca57620004ca62000ebd565b60200260200101516020015182868581518110620004ec57620004ec62000ebd565b602002602001015160000151620009f560201b60201c565b5080620005118162000f1b565b91505062000259565b505050565b602a546001600160a01b031633146200058b5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b600260286000601d600181548110620005a857620005a862000ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400181206005018054909190620005e190849062000f4d565b92505081905550600260286000601d60018154811062000605576200060562000ebd565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200063e90849062000f4d565b90915550506002601c556018546001600160a01b031660009081526027602052604081206103e8905562000673908062000e1e565b620006816001600062000e1e565b6002805460ff19169055565b6000620006a4826060015162000be060201b60201c565b6001600160a01b03909116602084015290508015620006f45760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000582565b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620007685760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000582565b61271082608001511115620007c05760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000582565b5050565b6101808101516001600160a01b03166200084757601d54600090620007e99062000c2e565b905081602001518260000151836080015183604051620008099062000e60565b62000818949392919062000f64565b604051809103906000f08015801562000835573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620008f9908262001065565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009c3908262001065565b5061026082015160138201805460ff19166001836003811115620009eb57620009eb62000ed3565b0217905550505050565b6000821162000a535760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000582565b6001600160a01b03811660009081526027602052604090205482111562000abd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000582565b6001600160a01b0381166000908152602760205260408120805484929062000ae790849062001131565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000b738362000f1b565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000bed62000e6e565b60008060ff9050604083875160208901845afa62000c0a57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c565750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000c86578062000c6d8162000f1b565b915062000c7e9050600a8362000f4d565b915062000c5a565b6000816001600160401b0381111562000ca35762000ca362000ea7565b6040519080825280601f01601f19166020018201604052801562000cce576020820181803683370190505b5090505b841562000d465762000ce660018362001131565b915062000cf5600a8662001147565b62000d0290603062000eff565b60f81b81838151811062000d1a5762000d1a62000ebd565b60200101906001600160f81b031916908160001a90535062000d3e600a8662000f4d565b945062000cd2565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e195762000e1962000ed3565b905290565b50805462000e2c9062000fd7565b6000825580601f1062000e3d575050565b601f01602090049060005260206000209081019062000e5d919062000e8c565b50565b6115318062008cc283390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000ea3576000815560010162000e8d565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f155762000f1562000ee9565b92915050565b60006001820162000f305762000f3062000ee9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f5f5762000f5f62000f37565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000fb35785810182015185820160a00152810162000f95565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c9082168062000fec57607f821691505b6020821081036200100d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200051a57600081815260208120601f850160051c810160208610156200103c5750805b601f850160051c820191505b818110156200105d5782815560010162001048565b505050505050565b81516001600160401b0381111562001081576200108162000ea7565b620010998162001092845462000fd7565b8462001013565b602080601f831160018114620010d15760008415620010b85750858301515b600019600386901b1c1916600185901b1785556200105d565b600085815260208120601f198616915b828110156200110257888601518255948401946001909101908401620010e1565b5085821015620011215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f155762000f1562000ee9565b60008262001159576200115962000f37565b500690565b617b54806200116e6000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000ced578063dfb1a4d21462000d37578063e7f43c681462000d4e578063f7866ee31462000d6e57005b8063d372c07e1462000c69578063d5f394881462000c8e578063d861b0e81462000cb0578063d886f8a21462000cc857005b8063cb696f5411620000e5578063cb696f541462000be2578063ceaad4551462000c07578063cf9c57191462000c2c578063cfd19fb91462000c4457005b8063b66b3e791462000b72578063b7ab4db51462000b9a578063c2362dd51462000bb2578063c9d97af41462000bca57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000adc578063b2ea9adb1462000b03578063b3ecbadd1462000b28578063b46e55201462000b4d57005b8063a5d059ca1462000a44578063a8b2216e1462000a69578063a9059cbb1462000a90578063ab8f6ffe1462000ab557005b80639bb851c011620001d15780639bb851c014620009ca5780639c98e47114620009e25780639dc29fac14620009fa578063a515366a1462000a1f57005b8063872cf059146200092e5780638bac7dad146200094657806395d89b41146200096b57806396b477cb146200099957005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008ad578063833b1fce14620008c457806384467fdb14620008e4578063852c4849146200090957005b8063731b3a03146200076e57806377e741c71462000785578063784304b514620007aa57806379502c5514620007cf57005b80635f7d394911620002c95780635f7d394914620006ba5780636b5f444c14620006f85780636fd2c80b146200071d57806370a08231146200073457005b8063436459691462000631578063496ccd9b14620006485780634bb278f3146200066d578063520fdbbc146200069557005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005b1578063313ce56714620005c957806335be16e014620005e757806340c10f19146200060c57005b806318160ddd146200052a5780631904bb2e146200054157806323b872dd146200057557806329070c6d146200059a57005b80631122063311620003b55780631122063314620004b1578063114eaf5514620004c85780631250a28d14620004ed5780631604e416146200051257005b806306fdde0314620003f1578063095ea7b314620004355780630ae65e7a146200046b5780630d8e6e2c146200049057005b36620003ef57005b005b348015620003fe57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b6040516200042c919062005523565b60405180910390f35b3480156200044257600080fd5b506200045a6200045436600462005555565b62000d8e565b60405190151581526020016200042c565b3480156200047857600080fd5b50620003ef6200048a36600462005584565b62000da7565b3480156200049d57600080fd5b50601c545b6040519081526020016200042c565b348015620004be57600080fd5b50600e54620004a2565b348015620004d557600080fd5b50620003ef620004e7366004620055a4565b62000e3a565b348015620004fa57600080fd5b50620003ef6200050c36600462005584565b62000e6c565b3480156200051f57600080fd5b50620004a260245481565b3480156200053757600080fd5b50602954620004a2565b3480156200054e57600080fd5b50620005666200056036600462005584565b62000ebb565b6040516200042c9190620055f7565b3480156200058257600080fd5b506200045a6200059436600462005770565b62001169565b348015620005a757600080fd5b50600d54620004a2565b348015620005be57600080fd5b50620004a261271081565b348015620005d657600080fd5b50604051601281526020016200042c565b348015620005f457600080fd5b50620003ef62000606366004620057b6565b620011c3565b3480156200061957600080fd5b50620003ef6200062b36600462005555565b6200139f565b3480156200063e57600080fd5b50601a54620004a2565b3480156200065557600080fd5b50620003ef6200066736600462005584565b62001459565b3480156200067a57600080fd5b506200068562001563565b6040516200042c92919062005877565b348015620006a257600080fd5b50620003ef620006b436600462005584565b6200192a565b348015620006c757600080fd5b50620006df620006d936600462005894565b62001b25565b6040516001600160a01b0390911681526020016200042c565b3480156200070557600080fd5b50620003ef62000717366004620055a4565b62001d3c565b3480156200072a57600080fd5b50601054620004a2565b3480156200074157600080fd5b50620004a26200075336600462005584565b6001600160a01b031660009081526027602052604090205490565b3480156200077b57600080fd5b50602054620004a2565b3480156200079257600080fd5b50620003ef620007a4366004620055a4565b62001ec2565b348015620007b757600080fd5b50620003ef620007c936600462005962565b62001ef4565b348015620007dc57600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c546200089b939084565b6040516200042c9493929190620059b8565b348015620008ba57600080fd5b50601b54620004a2565b348015620008d157600080fd5b506013546001600160a01b0316620006df565b348015620008f157600080fd5b50620003ef6200090336600462005a87565b6200209f565b3480156200091657600080fd5b50620003ef6200092836600462005555565b620021ce565b3480156200093b57600080fd5b50620003ef6200235f565b3480156200095357600080fd5b50620003ef62000965366004620055a4565b6200239b565b3480156200097857600080fd5b50604080518082019091526003815262272a2760e91b60208201526200041d565b348015620009a657600080fd5b50620004a2620009b8366004620055a4565b6000908152601f602052604090205490565b348015620009d757600080fd5b50620004a260235481565b348015620009ef57600080fd5b50620004a260215481565b34801562000a0757600080fd5b50620003ef62000a1936600462005555565b6200241f565b34801562000a2c57600080fd5b50620003ef62000a3e36600462005555565b62002535565b34801562000a5157600080fd5b50620003ef62000a6336600462005555565b62002608565b34801562000a7657600080fd5b5062000a816200269f565b6040516200042c919062005b30565b34801562000a9d57600080fd5b506200045a62000aaf36600462005555565b62002782565b34801562000ac257600080fd5b5062000acd62002791565b6040516200042c919062005b96565b34801562000ae957600080fd5b5062000af4620028a3565b6040516200042c919062005bab565b34801562000b1057600080fd5b50620003ef62000b2236600462005bfa565b62002ae9565b34801562000b3557600080fd5b50620003ef62000b4736600462005584565b62002b30565b34801562000b5a57600080fd5b50620003ef62000b6c36600462005584565b62002b7f565b34801562000b7f57600080fd5b5062000b8a62002dbb565b6040516200042c92919062005c5b565b34801562000ba757600080fd5b5062000af462002ef2565b34801562000bbf57600080fd5b50620004a260205481565b34801562000bd757600080fd5b50620004a2601e5481565b34801562000bef57600080fd5b50620003ef62000c01366004620055a4565b62002f56565b34801562000c1457600080fd5b50620003ef62000c2636600462005584565b62002fb9565b34801562000c3957600080fd5b50620003ef62003008565b34801562000c5157600080fd5b50620003ef62000c6336600462005584565b6200305c565b34801562000c7657600080fd5b50620003ef62000c8836600462005584565b620030ab565b34801562000c9b57600080fd5b50602a54620006df906001600160a01b031681565b34801562000cbd57600080fd5b50620003ef620030fa565b34801562000cd557600080fd5b50620003ef62000ce736600462005584565b6200313b565b34801562000cfa57600080fd5b50620004a262000d0c36600462005c8d565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d4457600080fd5b50601954620004a2565b34801562000d5b57600080fd5b506018546001600160a01b0316620006df565b34801562000d7b57600080fd5b506011546001600160a01b0316620006df565b600062000d9d3384846200318a565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000df05760405162461bcd60e51b815260040162000de79062005ccb565b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000e2c5760405162461bcd60e51b815260040162000de79062005d02565b62000e3781620032b3565b50565b6018546001600160a01b0316331462000e675760405162461bcd60e51b815260040162000de79062005d4e565b601055565b6018546001600160a01b0316331462000e995760405162461bcd60e51b815260040162000de79062005d4e565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b62000ec5620052fc565b6001600160a01b038083166000818152602860205260409020600101549091161462000f055760405162461bcd60e51b815260040162000de79062005d85565b6001600160a01b03808316600090815260286020908152604091829020825161028081018452815485168152600182015485169281019290925260028101549093169181019190915260038201805491929160608401919062000f689062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462000f969062005dbc565b801562000fe75780601f1062000fbb5761010080835404028352916020019162000fe7565b820191906000526020600020905b81548152906001019060200180831162000fc957829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620010a39062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620010d19062005dbc565b8015620011225780601f10620010f65761010080835404028352916020019162001122565b820191906000526020600020905b8154815290600101906020018083116200110457829003601f168201915b5050509183525050601382015460209091019060ff1660038111156200114c576200114c620055be565b6003811115620011605762001160620055be565b90525092915050565b6000620011788484846200338a565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620011a990849062005e0e565b9050620011b88533836200318a565b506001949350505050565b6012546001600160a01b031633146200122b5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000de7565b600061012082013560288262001248604086016020870162005584565b6001600160a01b03166001600160a01b031681526020019081526020016000206009015462001278919062005e0e565b60c08301356028600062001293604087016020880162005584565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620012c3919062005e0e565b60a084013560286000620012de604088016020890162005584565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200130e919062005e0e565b6200131a919062005e24565b62001326919062005e24565b6011546001600160a01b03166000908152602760205260408120805492935083929091906200135790849062005e24565b909155508290506028600062001374604084016020850162005584565b6001600160a01b03168152602081019190915260400160002062001399828262006026565b50505050565b6018546001600160a01b03163314620013cc5760405162461bcd60e51b815260040162000de79062005d4e565b6001600160a01b03821660009081526027602052604081208054839290620013f690849062005e24565b92505081905550806029600082825462001411919062005e24565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620014865760405162461bcd60e51b815260040162000de79062005d4e565b601380546001600160a01b0319166001600160a01b03838116918217909255601454604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620014e557600080fd5b505af1158015620014fa573d6000803e3d6000fd5b5050601654604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200154757600080fd5b505af11580156200155c573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620015965760405162461bcd60e51b815260040162000de7906200617c565b601e54436000818152601f6020908152604082209390935560195492549092620015c09162005e24565b6012546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200160b57600080fd5b505af115801562001620573d6000803e3d6000fd5b505050508015620017155762001635620034bc565b6200163f620038a6565b6200164962003995565b600062001655620028a3565b60135460405163422811f960e11b81529192506001600160a01b03169063845023f2906200168890849060040162005bab565b600060405180830381600087803b158015620016a357600080fd5b505af1158015620016b8573d6000803e3d6000fd5b50505050436020819055506001601e6000828254620016d8919062005e24565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b60135460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017879190620061bf565b9050801562001803576014546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620017fb575060408051601f3d908101601f19168201909252620017f891810190620061bf565b60015b156200180357505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b828210156200191a576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620018829062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b09062005dbc565b8015620019015780601f10620018d55761010080835404028352916020019162001901565b820191906000526020600020905b815481529060010190602001808311620018e357829003601f168201915b505050505081525050815260200190600101906200182c565b5050505090509350935050509091565b6018546001600160a01b03163314620019575760405162461bcd60e51b815260040162000de79062005d4e565b601880546001600160a01b0319166001600160a01b0383811691821790925560135460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b158015620019b657600080fd5b505af1158015620019cb573d6000803e3d6000fd5b505060145460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a1757600080fd5b505af115801562001a2c573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001a7857600080fd5b505af115801562001a8d573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ad957600080fd5b505af115801562001aee573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb91506024016200152c565b600080805b60225481101562001b81576022818154811062001b4b5762001b4b620061e3565b9060005260206000209060030201600101548262001b6a919062005e24565b91508062001b7881620061f9565b91505062001b2a565b508060000362001bd45760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000de7565b60008362001be460638762006215565b62001bf0919062005e24565b905060008160405160200162001c0891815260200190565b60408051601f1981840301815291905280516020909101209050600062001c30848362006245565b90506000805b60225481101562001ce0576022818154811062001c575762001c57620061e3565b9060005260206000209060030201600101548262001c76919062005e24565b915062001c8560018362005e0e565b831162001ccb576022818154811062001ca25762001ca2620061e3565b60009182526020909120600390910201546001600160a01b0316965062000da195505050505050565b8062001cd781620061f9565b91505062001c36565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000de7565b6018546001600160a01b0316331462001d695760405162461bcd60e51b815260040162000de79062005d4e565b60195481101562001e20578060205462001d84919062005e24565b431062001e205760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000de7565b6019819055601254604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562001e6c57600080fd5b505af115801562001e81573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162001eb791815260200190565b60405180910390a150565b6018546001600160a01b0316331462001eef5760405162461bcd60e51b815260040162000de79062005d4e565b600d55565b6001600160a01b03808316600081815260286020526040902060018101549092161462001f355760405162461bcd60e51b815260040162000de79062005d85565b80546001600160a01b0316331462001f615760405162461bcd60e51b815260040162000de7906200625c565b62001f6c8362003ab4565b1562001fc65760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840162000de7565b60008062001fd48462003b25565b925090508115620020165760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b60018301546001600160a01b03828116911614620020875760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840162000de7565b60038301620020978582620062ab565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200160008152602001848152602001600060038111156200216e576200216e620055be565b905290506200217e818362003b6a565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021bf92339289918b9162006374565b60405180910390a15050505050565b6001600160a01b03808316600081815260286020526040902060010154909116146200220e5760405162461bcd60e51b815260040162000de79062005ccb565b6001600160a01b038281166000908152602860205260409020541633146200224a5760405162461bcd60e51b815260040162000de79062005d02565b6127108111156200229e5760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000de7565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200231790849062005e24565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b031633146200238c5760405162461bcd60e51b815260040162000de79062005d4e565b6002805460ff19166001179055565b6018546001600160a01b03163314620023c85760405162461bcd60e51b815260040162000de79062005d4e565b600081116200241a5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000de7565b601b55565b6018546001600160a01b031633146200244c5760405162461bcd60e51b815260040162000de79062005d4e565b6001600160a01b038216600090815260276020526040902054811115620024af5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b03821660009081526027602052604081208054839290620024d990849062005e0e565b925050819055508060296000828254620024f4919062005e0e565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020016200144d565b6001600160a01b0380831660008181526028602052604090206001015490911614620025755760405162461bcd60e51b815260040162000de79062005d85565b6001600160a01b03821660009081526028602052604081206013015460ff166003811115620025a857620025a8620055be565b14620025f75760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000de7565b6200260482823362003fc4565b5050565b6001600160a01b0380831660008181526028602052604090206001015490911614620026485760405162461bcd60e51b815260040162000de79062005d85565b60008111620026925760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000de7565b62002604828233620041b0565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002779578382906000526020600020018054620026e59062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620027139062005dbc565b8015620027645780601f10620027385761010080835404028352916020019162002764565b820191906000526020600020905b8154815290600101906020018083116200274657829003601f168201915b505050505081526020019060010190620026c3565b50505050905090565b600062000d9d3384846200338a565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002779576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916200280b9062005dbc565b80601f0160208091040260200160405190810160405280929190818152602001828054620028399062005dbc565b80156200288a5780601f106200285e576101008083540402835291602001916200288a565b820191906000526020600020905b8154815290600101906020018083116200286c57829003601f168201915b50505050508152505081526020019060010190620027b5565b602a546060906001600160a01b03163314620028d35760405162461bcd60e51b815260040162000de7906200617c565b601d54620029245760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000de7565b6200292e620053cc565b601b546080820152601d81526028602082015260226040820152602160608201526200295a81620044e3565b6200296860256000620053ea565b60225480620029af5760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000de7565b60008167ffffffffffffffff811115620029cd57620029cd620058b7565b604051908082528060200260200182016040528015620029f7578160200160208202803683370190505b50905060005b8281101562002ae1576000602860006022848154811062002a225762002a22620061e3565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c019062002a8a90830182620063bd565b50600281015483516001600160a01b039091169084908490811062002ab35762002ab3620061e3565b6001600160a01b0390921660209283029190910190910152508062002ad881620061f9565b915050620029fd565b509250505090565b6018546001600160a01b0316331462002b165760405162461bcd60e51b815260040162000de79062005d4e565b62002b23600083620044fe565b62002604600182620044fe565b6018546001600160a01b0316331462002b5d5760405162461bcd60e51b815260040162000de79062005d4e565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602860205260409020600101549091161462002bbf5760405162461bcd60e51b815260040162000de79062005ccb565b6001600160a01b0380821660009081526028602052604090208054909116331462002bfe5760405162461bcd60e51b815260040162000de7906200625c565b6000601382015460ff16600381111562002c1c5762002c1c620055be565b0362002c6b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000de7565b6002601382015460ff16600381111562002c895762002c89620055be565b14801562002c9a5750438160100154115b1562002ce95760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000de7565b6003601382015460ff16600381111562002d075762002d07620055be565b0362002d565760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000de7565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002da6919062005e24565b60405190815260200160405180910390a35050565b6060806000600181805462002dd09062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462002dfe9062005dbc565b801562002e4f5780601f1062002e235761010080835404028352916020019162002e4f565b820191906000526020600020905b81548152906001019060200180831162002e3157829003601f168201915b5050505050915080805462002e649062005dbc565b80601f016020809104026020016040519081016040528092919081815260200182805462002e929062005dbc565b801562002ee35780601f1062002eb75761010080835404028352916020019162002ee3565b820191906000526020600020905b81548152906001019060200180831162002ec557829003601f168201915b50505050509050915091509091565b6060601d80548060200260200160405190810160405280929190818152602001828054801562002f4c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002f2d575b5050505050905090565b6018546001600160a01b0316331462002f835760405162461bcd60e51b815260040162000de79062005d4e565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162001eb7565b6018546001600160a01b0316331462002fe65760405162461bcd60e51b815260040162000de79062005d4e565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030355760405162461bcd60e51b815260040162000de79062005d4e565b620030426000806200540a565b62003050600160006200540a565b6002805460ff19169055565b6018546001600160a01b03163314620030895760405162461bcd60e51b815260040162000de79062005d4e565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620030d85760405162461bcd60e51b815260040162000de79062005d4e565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b602a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000de7906200617c565b62003131620038a6565b62000e37620028a3565b6018546001600160a01b03163314620031685760405162461bcd60e51b815260040162000de79062005d4e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620031ee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000de7565b6001600160a01b038216620032515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000de7565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff166003811115620032e857620032e8620055be565b14620033375760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000de7565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002da6919062005e24565b6001600160a01b038316600090815260276020526040902054811115620033ed5760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000de7565b6001600160a01b038316600090815260276020526040812080548392906200341790849062005e0e565b92505081905550806029600082825462003432919062005e24565b9091555062003445905081600262006215565b6001600160a01b038316600090815260276020526040812080549091906200346f90849062005e24565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620032a691815260200190565b47600003620034c757565b600d544790600090670de0b6b3a764000090620034e690849062006215565b620034f291906200649b565b9050801562003570576011546040516000916001600160a01b03169083908381818185875af1925050503d80600081146200354a576040519150601f19603f3d011682016040523d82523d6000602084013e6200354f565b606091505b50909150508015156001036200356e576200356b828462005e0e565b92505b505b816023600082825462003584919062005e24565b90915550600090505b602254811015620038a15760006028600060228481548110620035b457620035b4620061e3565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060215460228054929450909187919086908110620035ff57620035ff620061e3565b9060005260206000209060030201600101546200361d919062006215565b6200362991906200649b565b9050801562003889576002601383015460ff166003811115620036505762003650620055be565b14806200367857506003601383015460ff166003811115620036765762003676620055be565b145b156200372057601254602280546001600160a01b0390921691631de9d9b691849187908110620036ac57620036ac620061e3565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b0390911660048201526024016000604051808303818588803b158015620036fe57600080fd5b505af115801562003713573d6000803e3d6000fd5b505050505050506200388c565b6000826005015482846008015462003739919062006215565b6200374591906200649b565b9050600062003755828462005e0e565b90508115620037ba5783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d8060008114620037b1576040519150601f19603f3d011682016040523d82523d6000602084013e620037b6565b606091505b5050505b8015620038425783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af115801562003819573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620038409190620064b2565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b806200389881620061f9565b9150506200358d565b505050565b6004545b600554811015620038d357620038cd81620038c581620061f9565b925062004651565b620038aa565b5060055460045560085460075403620038e857565b6009545b60085481101562003915576200390f816200390781620061f9565b925062004878565b620038ec565b50600854600955600754805b6008548110156200398f5760105460008281526006602052604090206004015443916200394e9162005e24565b1162003974576200395f8162004b73565b6200396c60018362005e24565b91506200397a565b6200398f565b806200398681620061f9565b91505062003921565b50600755565b600c54600b54101562003ab257600b546000908152600a6020526040902060105460018201544391620039c89162005e24565b1115620039d25750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003a2d920190815260200190565b600060405180830381600087803b15801562003a4857600080fd5b505af115801562003a5d573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003aa590849062005e24565b9091555062003995915050565b565b6000805b60225481101562003b1c576022818154811062003ad95762003ad9620061e3565b60009182526020909120600390910201546001600160a01b039081169084160362003b075750600192915050565b8062003b1381620061f9565b91505062003ab8565b50600092915050565b60008062003b3262005449565b60008060ff9050604083875160208901845afa62003b4f57600080fd5b50508051602090910151600160601b90910494909350915050565b60e281511462003bb45760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000de7565b6030826102400151511462003c0c5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000de7565b62003c178262004cbe565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003c7a920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003c9a835162004deb565b8360405160200162003caf93929190620064cc565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003d07898262003d016041600262006215565b62004f0c565b9050600062003d268a62003d1e6041600262006215565b606062004f0c565b905060205b825181101562003df75762003d41838262005025565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003d9d573d6000803e3d6000fd5b5050604051601f19015190508762003db76041846200649b565b8151811062003dca5762003dca620061e3565b6001600160a01b039092166020928302919091019091015262003def60418262005e24565b905062003d2b565b508a602001516001600160a01b03168660008151811062003e1c5762003e1c620061e3565b60200260200101516001600160a01b03161462003e8e5760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000de7565b8a604001516001600160a01b03168660018151811062003eb25762003eb2620061e3565b60200260200101516001600160a01b03161462003f265760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000de7565b600162003f3e8c6102400151838e600001516200505c565b1462003fac5760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000de7565b62003fb78b620050cb565b5050505050505050505050565b60008211620040225760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000de7565b6001600160a01b0381166000908152602760205260409020548211156200408c5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000de7565b6001600160a01b03811660009081526027602052604081208054849290620040b690849062005e0e565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200414283620061f9565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b03808416600090815260286020526040902080549091838116911614806200432657600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200424d9190620064b2565b905084811015620042b55760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000de7565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b1580156200430657600080fd5b505af11580156200431b573d6000803e3d6000fd5b5050505050620043b9565b8382600b015483600801546200433d919062005e0e565b10156200439d5760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000de7565b8382600b016000828254620043b3919062005e24565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff1990951694909417929092179092558054916200448d83620061f9565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620041a19291909115158252602082015260400190565b60fa60a06000808285855af4620038a1573d6000803e3d6000fd5b815460026001808316156101000203821604825180820160208110602084100160028114620045ad5760018114620045d3578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101562004596578151845560018401935060208201915062004577565b815191036101000a90819004029091555062004648565b60028302826020036101000a846020036101000a60208901510402018501875562004648565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562004636578151845560018401935060208201915062004617565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff166003811115620046975762004697620055be565b146200473757600282015482546001600160a01b031660009081526027602052604081208054909190620046cd90849062005e24565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342946200472a946001600160a01b0391821694911692909160ff9091169062006515565b60405180910390a1505050565b805482546001600160a01b0390811691161462004834576000808260080154836005015462004767919062005e0e565b9050806000036200477f5783600201549150620047a5565b80846002015484600d015462004796919062006215565b620047a291906200649b565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620047f757600080fd5b505af11580156200480c573d6000803e3d6000fd5b505050508183600d01600082825462004826919062005e24565b909155506200485492505050565b81600201548160080160008282546200484e919062005e24565b90915550505b81600201548160050160008282546200486e919062005e24565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662004a6c576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200490d57600080fd5b505af115801562004922573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200497857600080fd5b505af11580156200498d573d6000803e3d6000fd5b50505050600083600801548460050154620049a9919062005e0e565b600d850154909150620049bd828462006215565b620049c991906200649b565b92508184600d016000828254620049e1919062005e0e565b9091555050600684015460000362004a00576003850183905562004a28565b6006840154600785015462004a16908562006215565b62004a2291906200649b565b60038601555b8284600601600082825462004a3e919062005e24565b9091555050600385015460078501805460009062004a5e90849062005e24565b9091555062004b4192505050565b506002820154600882015481111562004a86575060088101545b816009015460000362004aa0576003830181905562004ac8565b6009820154600a83015462004ab6908362006215565b62004ac291906200649b565b60038401555b8082600901600082825462004ade919062005e24565b90915550506003830154600a8301805460009062004afe90849062005e24565b925050819055508082600801600082825462004b1b919062005e0e565b90915550506002830154600b8301805460009062004b3b90849062005e0e565b90915550505b6005808401805460ff191660011790558201805482919060009062004b6890849062005e0e565b909155505050505050565b6000818152600660205260408120600381015490910362004b92575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff1662004c2e5781600701548260060154846003015462004bde919062006215565b62004bea91906200649b565b90508082600601600082825462004c02919062005e0e565b9091555050600383015460078301805460009062004c2290849062005e0e565b9091555062004c939050565b81600a01548260090154846003015462004c49919062006215565b62004c5591906200649b565b90508082600901600082825462004c6d919062005e0e565b90915550506003830154600a8301805460009062004c8d90849062005e0e565b90915550505b82546001600160a01b03166000908152602760205260408120805483929062004b6890849062005e24565b600062004ccf826060015162003b25565b6001600160a01b0390911660208401529050801562004d1f5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000de7565b6020808301516001600160a01b0390811660009081526028909252604090912060010154161562004d935760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000de7565b61271082608001511115620026045760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000de7565b60608160000362004e135750506040805180820190915260018152600360fc1b602082015290565b8160005b811562004e43578062004e2a81620061f9565b915062004e3b9050600a836200649b565b915062004e17565b60008167ffffffffffffffff81111562004e615762004e61620058b7565b6040519080825280601f01601f19166020018201604052801562004e8c576020820181803683370190505b5090505b841562004f045762004ea460018362005e0e565b915062004eb3600a8662006245565b62004ec090603062005e24565b60f81b81838151811062004ed85762004ed8620061e3565b60200101906001600160f81b031916908160001a90535062004efc600a866200649b565b945062004e90565b949350505050565b60608162004f1c81601f62005e24565b101562004f5d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000de7565b62004f69828462005e24565b8451101562004faf5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000de7565b60608215801562004fd057604051915060008252602082016040526200501c565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156200500b57805183526020928301920162004ff1565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620050555762005052601b8262006543565b90505b9250925092565b60006200506862005467565b600085858560405160200162005081939291906200655f565b6040516020818303038152906040529050600060fb9050600082516020620050aa919062005e24565b90506020848285855afa620050be57600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200514e57601d54600090620050f09062004deb565b905081602001518260000151836080015183604051620051109062005485565b6200511f9493929190620065ae565b604051809103906000f0801580156200513c573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620052009082620062ab565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620052ca9082620062ab565b5061026082015160138201805460ff19166001836003811115620052f257620052f2620055be565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006003811115620053c757620053c7620055be565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000e37919062005493565b508054620054189062005dbc565b6000825580601f1062005429575050565b601f01602090049060005260206000209081019062000e379190620054b8565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b61153180620065ee83390190565b80821115620054b4576000620054aa82826200540a565b5060010162005493565b5090565b5b80821115620054b45760008155600101620054b9565b60005b83811015620054ec578181015183820152602001620054d2565b50506000910152565b600081518084526200550f816020860160208601620054cf565b601f01601f19169290920160200192915050565b602081526000620055386020830184620054f5565b9392505050565b6001600160a01b038116811462000e3757600080fd5b600080604083850312156200556957600080fd5b823562005576816200553f565b946020939093013593505050565b6000602082840312156200559757600080fd5b813562005538816200553f565b600060208284031215620055b757600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60048110620055f357634e487b7160e01b600052602160045260246000fd5b9052565b60208152620056126020820183516001600160a01b03169052565b600060208301516200562f60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620056636102a0850183620054f5565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620056eb818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506200574f8483620054f5565b9350808701519150506200576682860182620055d4565b5090949350505050565b6000806000606084860312156200578657600080fd5b833562005793816200553f565b92506020840135620057a5816200553f565b929592945050506040919091013590565b600060208284031215620057c957600080fd5b813567ffffffffffffffff811115620057e157600080fd5b820161028081850312156200553857600080fd5b600081518084526020808501808196508360051b8101915082860160005b858110156200586a578284038952815180516001600160a01b0316855285810151868601526040908101516060918601829052906200585581870183620054f5565b9a87019a955050509084019060010162005813565b5091979650505050505050565b821515815260406020820152600062004f046040830184620057f5565b60008060408385031215620058a857600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620058df57600080fd5b813567ffffffffffffffff80821115620058fd57620058fd620058b7565b604051601f8301601f19908116603f01168101908282118183101715620059285762005928620058b7565b816040528381528660208588010111156200594257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200597657600080fd5b823562005983816200553f565b9150602083013567ffffffffffffffff811115620059a057600080fd5b620059ae85828601620058cd565b9150509250929050565b845181526020808601518183015260408087015181840152606080880151818501526080808901516001600160a01b03908116828701528851811660a08088019190915294890151811660c087015292880151831660e08601529087015182166101008501528601511661012083015284015161020082019062005a486101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b6000806000806080858703121562005a9e57600080fd5b843567ffffffffffffffff8082111562005ab757600080fd5b62005ac588838901620058cd565b95506020870135915062005ad9826200553f565b9093506040860135908082111562005af057600080fd5b62005afe88838901620058cd565b9350606087013591508082111562005b1557600080fd5b5062005b2487828801620058cd565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005b8957603f1988860301845262005b76858351620054f5565b9450928501929085019060010162005b57565b5092979650505050505050565b602081526000620055386020830184620057f5565b6020808252825182820181905260009190848201906040850190845b8181101562005bee5783516001600160a01b03168352928401929184019160010162005bc7565b50909695505050505050565b6000806040838503121562005c0e57600080fd5b823567ffffffffffffffff8082111562005c2757600080fd5b62005c3586838701620058cd565b9350602085013591508082111562005c4c57600080fd5b50620059ae85828601620058cd565b60408152600062005c706040830185620054f5565b828103602084015262005c848185620054f5565b95945050505050565b6000806040838503121562005ca157600080fd5b823562005cae816200553f565b9150602083013562005cc0816200553f565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005dd157607f821691505b60208210810362005df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000da15762000da162005df8565b8082018082111562000da15762000da162005df8565b6000813562000da1816200553f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005e8157600080fd5b83018035915067ffffffffffffffff82111562005e9d57600080fd5b60200191503681900382131562005eb357600080fd5b9250929050565b601f821115620038a157600081815260208120601f850160051c8101602086101562005ee35750805b601f850160051c820191505b81811015620020975782815560010162005eef565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff83111562005f345762005f34620058b7565b62005f4c8362005f45835462005dbc565b8362005eba565b6000601f84116001811462005f7f576000851562005f6a5750838201355b62005f76868262005f04565b8455506200155c565b600083815260209020601f19861690835b8281101562005fb2578685013582556020948501946001909201910162005f90565b508682101562005fd05760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000da157600080fd5b600482106200601357634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b6200603c620060358362005e3a565b8262005e49565b620060586200604e6020840162005e3a565b6001830162005e49565b620060746200606a6040840162005e3a565b6002830162005e49565b62006083606083018362005e69565b6200609381836003860162005f19565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006106620060fc610180840162005e3a565b600c830162005e49565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200614d61024083018362005e69565b6200615d81836012860162005f19565b50506200260462006172610260840162005fe2565b6013830162005ff4565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620061d257600080fd5b815180151581146200553857600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016200620e576200620e62005df8565b5060010190565b808202811582820484141762000da15762000da162005df8565b634e487b7160e01b600052601260045260246000fd5b6000826200625757620062576200622f565b500690565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b815167ffffffffffffffff811115620062c857620062c8620058b7565b620062e081620062d9845462005dbc565b8462005eba565b602080601f831160018114620063145760008415620062ff5750858301515b6200630b858262005f04565b86555062002097565b600085815260208120601f198616915b82811015620063455788860151825594840194600190910190840162006324565b5085821015620063645787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018060a01b0380881683528087166020840152808616604084015260a06060840152620063a860a0840186620054f5565b91508084166080840152509695505050505050565b818103620063c9575050565b620063d5825462005dbc565b67ffffffffffffffff811115620063f057620063f0620058b7565b6200640181620062d9845462005dbc565b6000601f8211600181146200643457600083156200641f5750848201545b6200642b848262005f04565b8555506200155c565b600085815260209020601f19841690600086815260209020845b838110156200647057828601548255600195860195909101906020016200644e565b5085831015620063645793015460001960f8600387901b161c19169092555050600190811b01905550565b600082620064ad57620064ad6200622f565b500490565b600060208284031215620064c557600080fd5b5051919050565b60008451620064e0818460208901620054cf565b845190830190620064f6818360208901620054cf565b84519101906200650b818360208801620054cf565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005c846060830184620055d4565b60ff818116838216019081111562000da15762000da162005df8565b6000845162006573818460208901620054cf565b84519083019062006589818360208901620054cf565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065e390830184620054f5565b969550505050505056fe60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033a2646970667358221220e3c70bb89ff64e43018ee74be10bdec5ad6bd7d966312e293f9796dc1d79159564736f6c6343000815003360806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d86565b815260200190600190039081620000335790505b506040805161014081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e0808701919091526011546101008701526012546001600160a01b039081166101208801529486528651908101875260135485168152601454851660208281019190915260155486168289015260165486166060808401919091526017548716838701526018548716948301949094526019548616928201929092528186015285519283018652601a549093168252601b5492820192909252601c5481850152601d548183015292820192909252601e54918101829052906000036200016257602e80546001600160a01b031916331790556200016282826200017f565b5050601e5460010362000179576200017962000557565b62001196565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000552576000838281518110620002b257620002b262000ef5565b602002602001015160a0015190506000848381518110620002d757620002d762000ef5565b60200260200101516101a00181815250506000848381518110620002ff57620002ff62000ef5565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200033b576200033b62000ef5565b602002602001015160a0018181525050600084838151811062000362576200036262000ef5565b60209081029190910101516101c00152600f5484518590849081106200038c576200038c62000ef5565b602002602001015160800181815250506000848381518110620003b357620003b362000ef5565b602002602001015161026001906003811115620003d457620003d462000f0b565b90816003811115620003ea57620003ea62000f0b565b81525050600084838151811062000405576200040562000ef5565b6020026020010151610160018181525050620004438483815181106200042f576200042f62000ef5565b6020026020010151620006c560201b60201c565b620004708483815181106200045c576200045c62000ef5565b6020026020010151620007fc60201b60201c565b80602a60008685815181106200048a576200048a62000ef5565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620004c7919062000f37565b9250508190555080602c6000828254620004e2919062000f37565b925050819055506200053c84838151811062000502576200050262000ef5565b6020026020010151602001518286858151811062000524576200052462000ef5565b60200260200101516000015162000a2d60201b60201c565b5080620005498162000f53565b91505062000291565b505050565b602e546001600160a01b03163314620005c35760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b6002602b6000601f600181548110620005e057620005e062000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060050180549091906200061990849062000f85565b925050819055506002602b6000601f6001815481106200063d576200063d62000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200067690849062000f85565b90915550506002601e55601a546001600160a01b03166000908152602a602052604081206103e89055620006ab908062000e56565b620006b96001600062000e56565b6002805460ff19169055565b6000620006dc826060015162000c1860201b60201c565b6001600160a01b039091166020840152905080156200072c5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b6044820152606401620005ba565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620007a05760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620005ba565b61271082608001511115620007f85760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620005ba565b5050565b6101808101516001600160a01b03166200087f57601f54600090620008219062000c66565b905081602001518260000151836080015183604051620008419062000e98565b62000850949392919062000f9c565b604051809103906000f0801580156200086d573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b909552604091829020865181548716908516178155935190840180548616918416919091179055840151600283018054909416911617909155606082015182919060038201906200093190826200109d565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009fb90826200109d565b5061026082015160138201805460ff1916600183600381111562000a235762000a2362000f0b565b0217905550505050565b6000821162000a8b5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620005ba565b6001600160a01b0381166000908152602a602052604090205482111562000af55760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620005ba565b6001600160a01b0381166000908152602a60205260408120805484929062000b1f90849062001169565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000bab8362000f53565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000c2562000ea6565b60008060ff9050604083875160208901845afa62000c4257600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c8e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000cbe578062000ca58162000f53565b915062000cb69050600a8362000f85565b915062000c92565b6000816001600160401b0381111562000cdb5762000cdb62000edf565b6040519080825280601f01601f19166020018201604052801562000d06576020820181803683370190505b5090505b841562000d7e5762000d1e60018362001169565b915062000d2d600a866200117f565b62000d3a90603062000f37565b60f81b81838151811062000d525762000d5262000ef5565b60200101906001600160f81b031916908160001a90535062000d76600a8662000f85565b945062000d0a565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e515762000e5162000f0b565b905290565b50805462000e64906200100f565b6000825580601f1062000e75575050565b601f01602090049060005260206000209081019062000e95919062000ec4565b50565b61186f806200910b83390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000edb576000815560010162000ec5565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f4d5762000f4d62000f21565b92915050565b60006001820162000f685762000f6862000f21565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f975762000f9762000f6f565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000feb5785810182015185820160a00152810162000fcd565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c908216806200102457607f821691505b6020821081036200104557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055257600081815260208120601f850160051c81016020861015620010745750805b601f850160051c820191505b81811015620010955782815560010162001080565b505050505050565b81516001600160401b03811115620010b957620010b962000edf565b620010d181620010ca84546200100f565b846200104b565b602080601f831160018114620011095760008415620010f05750858301515b600019600386901b1c1916600185901b17855562001095565b600085815260208120601f198616915b828110156200113a5788860151825594840194600190910190840162001119565b5085821015620011595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f4d5762000f4d62000f21565b60008262001191576200119162000f6f565b500690565b617f6580620011a66000396000f3fe608060405260043610620003ff5760003560e01c80638bac7dad116200020f578063b7ab4db51162000123578063d5f3948811620000b3578063dfb1a4d21162000081578063dfb1a4d21462000e14578063e7f43c681462000e2b578063e98712b21462000e4b578063f03b959d1462000e63578063f7866ee31462000e8857005b8063d5f394881462000d6b578063d861b0e81462000d8d578063d886f8a21462000da5578063dd62ed3e1462000dca57005b8063ceaad45511620000f1578063ceaad4551462000ce4578063cf9c57191462000d09578063cfd19fb91462000d21578063d372c07e1462000d4657005b8063b7ab4db51462000c77578063c2362dd51462000c8f578063c9d97af41462000ca7578063cb696f541462000cbf57005b8063a8b2216e116200019f578063b2ea9adb116200016d578063b2ea9adb1462000be0578063b3ecbadd1462000c05578063b46e55201462000c2a578063b66b3e791462000c4f57005b8063a8b2216e1462000b46578063a9059cbb1462000b6d578063ab8f6ffe1462000b92578063ae1f5fa01462000bb957005b80639c98e47111620001dd5780639c98e4711462000abf5780639dc29fac1462000ad7578063a515366a1462000afc578063a5d059ca1462000b2157005b80638bac7dad1462000a2357806395d89b411462000a4857806396b477cb1462000a765780639ac310741462000aa757005b8063436459691162000313578063731b3a0311620002a3578063833b1fce1162000271578063833b1fce146200098957806384467fdb14620009a9578063852c484914620009ce578063872cf05914620009f357806389c614b81462000a0b57005b8063731b3a03146200078657806377e741c7146200079d57806379502c5514620007c2578063819b6463146200097257005b80635f7d394911620002e15780635f7d394914620006d25780636b5f444c14620007105780636fd2c80b146200073557806370a08231146200074c57005b8063436459691462000649578063496ccd9b14620006605780634bb278f31462000685578063520fdbbc14620006ad57005b806318160ddd116200038f5780632f2c3f2e116200035d5780632f2c3f2e14620005c9578063313ce56714620005e157806335be16e014620005ff57806340c10f19146200062457005b806318160ddd14620005425780631904bb2e146200055957806323b872dd146200058d57806329070c6d14620005b257005b80631122063311620003cd5780631122063314620004c9578063114eaf5514620004e05780631250a28d14620005055780631604e416146200052a57005b806306fdde031462000409578063095ea7b3146200044d5780630ae65e7a14620004835780630d8e6e2c14620004a857005b366200040757005b005b3480156200041657600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b60405162000444919062005731565b60405180910390f35b3480156200045a57600080fd5b50620004726200046c36600462005763565b62000ea8565b604051901515815260200162000444565b3480156200049057600080fd5b5062000407620004a236600462005792565b62000ec1565b348015620004b557600080fd5b50601e545b60405190815260200162000444565b348015620004d657600080fd5b50600e54620004ba565b348015620004ed57600080fd5b5062000407620004ff366004620057b2565b62000f54565b3480156200051257600080fd5b50620004076200052436600462005792565b62000f86565b3480156200053757600080fd5b50620004ba60275481565b3480156200054f57600080fd5b50602c54620004ba565b3480156200056657600080fd5b506200057e6200057836600462005792565b62000fd5565b60405162000444919062005805565b3480156200059a57600080fd5b5062000472620005ac3660046200597e565b62001283565b348015620005bf57600080fd5b50600d54620004ba565b348015620005d657600080fd5b50620004ba61271081565b348015620005ee57600080fd5b506040516012815260200162000444565b3480156200060c57600080fd5b50620004076200061e366004620059c4565b6200132b565b3480156200063157600080fd5b50620004076200064336600462005763565b62001507565b3480156200065657600080fd5b50601c54620004ba565b3480156200066d57600080fd5b50620004076200067f36600462005792565b62001544565b3480156200069257600080fd5b506200069d6200164e565b6040516200044492919062005a85565b348015620006ba57600080fd5b5062000407620006cc36600462005792565b62001ae0565b348015620006df57600080fd5b50620006f7620006f136600462005aa2565b62001cdb565b6040516001600160a01b03909116815260200162000444565b3480156200071d57600080fd5b50620004076200072f366004620057b2565b62001ef2565b3480156200074257600080fd5b50601054620004ba565b3480156200075957600080fd5b50620004ba6200076b36600462005792565b6001600160a01b03166000908152602a602052604090205490565b3480156200079357600080fd5b50602254620004ba565b348015620007aa57600080fd5b5062000407620007bc366004620057b2565b62002078565b348015620007cf57600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008a4939084565b6040805185518152602080870151818301528683015182840152606080880151818401526080808901518185015260a0988901516001600160a01b039081168a8601528851811660c080870191909152848a0151821660e0870152898701518216610100870152838a0151821661012087015291890151811661014086015298880151891661016085015290960151871661018083015284519096166101a0820152948301516101c08601528201516101e08501529101516102008301526102208201526102400162000444565b3480156200097f57600080fd5b50601d54620004ba565b3480156200099657600080fd5b506014546001600160a01b0316620006f7565b348015620009b657600080fd5b5062000407620009c836600462005b70565b620020aa565b348015620009db57600080fd5b5062000407620009ed36600462005763565b620021d9565b34801562000a0057600080fd5b50620004076200236a565b34801562000a1857600080fd5b50620004ba60235481565b34801562000a3057600080fd5b506200040762000a42366004620057b2565b620023a6565b34801562000a5557600080fd5b50604080518082019091526003815262272a2760e91b602082015262000435565b34801562000a8357600080fd5b50620004ba62000a95366004620057b2565b60009081526021602052604090205490565b34801562000ab457600080fd5b50620004ba602d5481565b34801562000acc57600080fd5b50620004ba60245481565b34801562000ae457600080fd5b506200040762000af636600462005763565b6200242a565b34801562000b0957600080fd5b506200040762000b1b36600462005763565b62002547565b34801562000b2e57600080fd5b506200040762000b4036600462005763565b62002616565b34801562000b5357600080fd5b5062000b5e620026ad565b60405162000444919062005c19565b34801562000b7a57600080fd5b506200047262000b8c36600462005763565b62002790565b34801562000b9f57600080fd5b5062000baa620027e8565b60405162000444919062005c7f565b34801562000bc657600080fd5b5062000bd1620028fa565b60405162000444919062005c94565b34801562000bed57600080fd5b506200040762000bff36600462005ce3565b62002b40565b34801562000c1257600080fd5b506200040762000c2436600462005792565b62002b87565b34801562000c3757600080fd5b506200040762000c4936600462005792565b62002bd6565b34801562000c5c57600080fd5b5062000c6762002e59565b6040516200044492919062005d4e565b34801562000c8457600080fd5b5062000bd162002f90565b34801562000c9c57600080fd5b50620004ba60225481565b34801562000cb457600080fd5b50620004ba60205481565b34801562000ccc57600080fd5b506200040762000cde366004620057b2565b62002ff4565b34801562000cf157600080fd5b506200040762000d0336600462005792565b62003057565b34801562000d1657600080fd5b5062000407620030a6565b34801562000d2e57600080fd5b506200040762000d4036600462005792565b620030fa565b34801562000d5357600080fd5b506200040762000d6536600462005792565b62003149565b34801562000d7857600080fd5b50602e54620006f7906001600160a01b031681565b34801562000d9a57600080fd5b506200040762003198565b34801562000db257600080fd5b506200040762000dc436600462005792565b620031e0565b34801562000dd757600080fd5b50620004ba62000de936600462005d80565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000e2157600080fd5b50601b54620004ba565b34801562000e3857600080fd5b50601a546001600160a01b0316620006f7565b34801562000e5857600080fd5b50620004ba60265481565b34801562000e7057600080fd5b506200040762000e8236600462005792565b6200322f565b34801562000e9557600080fd5b506012546001600160a01b0316620006f7565b600062000eb73384846200327e565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000f0a5760405162461bcd60e51b815260040162000f019062005dbe565b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f465760405162461bcd60e51b815260040162000f019062005df5565b62000f5181620033a7565b50565b601a546001600160a01b0316331462000f815760405162461bcd60e51b815260040162000f019062005e41565b601055565b601a546001600160a01b0316331462000fb35760405162461bcd60e51b815260040162000f019062005e41565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b62000fdf6200550a565b6001600160a01b038083166000818152602b6020526040902060010154909116146200101f5760405162461bcd60e51b815260040162000f019062005e78565b6001600160a01b038083166000908152602b60209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010829062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620010b09062005eaf565b8015620011015780601f10620010d55761010080835404028352916020019162001101565b820191906000526020600020905b815481529060010190602001808311620010e357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011bd9062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620011eb9062005eaf565b80156200123c5780601f1062001210576101008083540402835291602001916200123c565b820191906000526020600020905b8154815290600101906020018083116200121e57829003601f168201915b5050509183525050601382015460209091019060ff166003811115620012665762001266620057cc565b60038111156200127a576200127a620057cc565b90525092915050565b6000620012928484846200347e565b6001600160a01b0384166000908152602960209081526040808320338452909152812054620012c390849062005f01565b9050620012d28533836200327e565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200131891815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620013935760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e74726044820152621858dd60ea1b606482015260840162000f01565b6000610120820135602b82620013b0604086016020870162005792565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013e0919062005f01565b60c0830135602b6000620013fb604087016020880162005792565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200142b919062005f01565b60a0840135602b600062001446604088016020890162005792565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015462001476919062005f01565b62001482919062005f17565b6200148e919062005f17565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620014bf90849062005f17565b90915550829050602b6000620014dc604084016020850162005792565b6001600160a01b03168152602081019190915260400160002062001501828262006121565b50505050565b601a546001600160a01b03163314620015345760405162461bcd60e51b815260040162000f019062005e41565b620015408282620035b0565b5050565b601a546001600160a01b03163314620015715760405162461bcd60e51b815260040162000f019062005e41565b601480546001600160a01b0319166001600160a01b03838116918217909255601554604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620015d057600080fd5b505af1158015620015e5573d6000803e3d6000fd5b5050601754604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200163257600080fd5b505af115801562001647573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620016815760405162461bcd60e51b815260040162000f019062006277565b6020805443600081815260219093526040832091909155601b54602254620016aa919062005f17565b6013546040516306c9789b60e41b8152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620016f557600080fd5b505af11580156200170a573d6000803e3d6000fd5b505050508015620018cb57601954602c54602d546023546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa1580156200177d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a39190620062ba565b905080602d541015620017b55750602d545b620017c13082620035b0565b80602d6000828254620017d5919062005f01565b90915550620017e79050478262003636565b620017f162003b20565b620017fb62003c0f565b600062001807620028fa565b60145460405163422811f960e11b81529192506001600160a01b03169063845023f2906200183a90849060040162005c94565b600060405180830381600087803b1580156200185557600080fd5b505af11580156200186a573d6000803e3d6000fd5b50504360225550504260235560208054600191906000906200188e90849062005f17565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b60145460408051634bb278f360e01b815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001917573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200193d9190620062d4565b90508015620019b9576015546040805163a2e6204560e01b815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af1925050508015620019b1575060408051601f3d908101601f19168201909252620019ae91810190620062d4565b60015b15620019b957505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001ad0576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001a389062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462001a669062005eaf565b801562001ab75780601f1062001a8b5761010080835404028352916020019162001ab7565b820191906000526020600020905b81548152906001019060200180831162001a9957829003601f168201915b50505050508152505081526020019060010190620019e2565b5050505090509350935050509091565b601a546001600160a01b0316331462001b0d5760405162461bcd60e51b815260040162000f019062005e41565b601a80546001600160a01b0319166001600160a01b0383811691821790925560145460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001b6c57600080fd5b505af115801562001b81573d6000803e3d6000fd5b505060155460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001bcd57600080fd5b505af115801562001be2573d6000803e3d6000fd5b505060165460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c2e57600080fd5b505af115801562001c43573d6000803e3d6000fd5b505060175460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001c8f57600080fd5b505af115801562001ca4573d6000803e3d6000fd5b505060185460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb915060240162001617565b600080805b60255481101562001d37576025818154811062001d015762001d01620062f8565b9060005260206000209060030201600101548262001d20919062005f17565b91508062001d2e816200630e565b91505062001ce0565b508060000362001d8a5760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000f01565b60008362001d9a6063876200632a565b62001da6919062005f17565b905060008160405160200162001dbe91815260200190565b60408051601f1981840301815291905280516020909101209050600062001de684836200635a565b90506000805b60255481101562001e96576025818154811062001e0d5762001e0d620062f8565b9060005260206000209060030201600101548262001e2c919062005f17565b915062001e3b60018362005f01565b831162001e81576025818154811062001e585762001e58620062f8565b60009182526020909120600390910201546001600160a01b0316965062000ebb95505050505050565b8062001e8d816200630e565b91505062001dec565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201526865206e6574776f726b60b81b606482015260840162000f01565b601a546001600160a01b0316331462001f1f5760405162461bcd60e51b815260040162000f019062005e41565b601b5481101562001fd6578060225462001f3a919062005f17565b431062001fd65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000f01565b601b819055601354604051631ad7d11360e21b8152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200202257600080fd5b505af115801562002037573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200206d91815260200190565b60405180910390a150565b601a546001600160a01b03163314620020a55760405162461bcd60e51b815260040162000f019062005e41565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200143815260200160008152602001600081526020016000815260200184815260200160006003811115620021795762002179620057cc565b9052905062002189818362003d2e565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92620021ca92339289918b9162006371565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620022195760405162461bcd60e51b815260040162000f019062005dbe565b6001600160a01b038281166000908152602b6020526040902054163314620022555760405162461bcd60e51b815260040162000f019062005df5565b612710811115620022a95760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000f01565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906200232290849062005f17565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620023975760405162461bcd60e51b815260040162000f019062005e41565b6002805460ff19166001179055565b601a546001600160a01b03163314620023d35760405162461bcd60e51b815260040162000f019062005e41565b60008111620024255760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000f01565b601d55565b601a546001600160a01b03163314620024575760405162461bcd60e51b815260040162000f019062005e41565b6001600160a01b0382166000908152602a6020526040902054811115620024ba5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0382166000908152602a602052604081208054839290620024e490849062005f01565b9250508190555080602c6000828254620024ff919062005f01565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025875760405162461bcd60e51b815260040162000f019062005e78565b6001600160a01b0382166000908152602b602052604081206013015460ff166003811115620025ba57620025ba620057cc565b14620026095760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000f01565b6200154082823362004188565b6001600160a01b038083166000818152602b602052604090206001015490911614620026565760405162461bcd60e51b815260040162000f019062005e78565b60008111620026a05760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640162000f01565b6200154082823362004374565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002787578382906000526020600020018054620026f39062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620027219062005eaf565b8015620027725780601f10620027465761010080835404028352916020019162002772565b820191906000526020600020905b8154815290600101906020018083116200275457829003601f168201915b505050505081526020019060010190620026d1565b50505050905090565b60006200279f3384846200347e565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002787576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620028629062005eaf565b80601f0160208091040260200160405190810160405280929190818152602001828054620028909062005eaf565b8015620028e15780601f10620028b557610100808354040283529160200191620028e1565b820191906000526020600020905b815481529060010190602001808311620028c357829003601f168201915b505050505081525050815260200190600101906200280c565b602e546060906001600160a01b031633146200292a5760405162461bcd60e51b815260040162000f019062006277565b601f546200297b5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000f01565b62002985620055da565b601d546080820152601f8152602b60208201526025604082015260246060820152620029b181620046a7565b620029bf60286000620055f8565b6025548062002a065760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640162000f01565b60008167ffffffffffffffff81111562002a245762002a2462005ac5565b60405190808252806020026020018201604052801562002a4e578160200160208202803683370190505b50905060005b8281101562002b38576000602b60006025848154811062002a795762002a79620062f8565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5019062002ae190830182620063ba565b50600281015483516001600160a01b039091169084908490811062002b0a5762002b0a620062f8565b6001600160a01b0390921660209283029190910190910152508062002b2f816200630e565b91505062002a54565b509250505090565b601a546001600160a01b0316331462002b6d5760405162461bcd60e51b815260040162000f019062005e41565b62002b7a600083620046c7565b62001540600182620046c7565b601a546001600160a01b0316331462002bb45760405162461bcd60e51b815260040162000f019062005e41565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b60205260409020600101549091161462002c165760405162461bcd60e51b815260040162000f019062005dbe565b6001600160a01b038082166000908152602b602052604090208054909116331462002c9c5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606482015260840162000f01565b6000601382015460ff16600381111562002cba5762002cba620057cc565b0362002d095760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000f01565b6002601382015460ff16600381111562002d275762002d27620057cc565b14801562002d385750438160100154115b1562002d875760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000f01565b6003601382015460ff16600381111562002da55762002da5620057cc565b0362002df45760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000f01565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162002e44919062005f17565b60405190815260200160405180910390a35050565b6060806000600181805462002e6e9062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462002e9c9062005eaf565b801562002eed5780601f1062002ec15761010080835404028352916020019162002eed565b820191906000526020600020905b81548152906001019060200180831162002ecf57829003601f168201915b5050505050915080805462002f029062005eaf565b80601f016020809104026020016040519081016040528092919081815260200182805462002f309062005eaf565b801562002f815780601f1062002f555761010080835404028352916020019162002f81565b820191906000526020600020905b81548152906001019060200180831162002f6357829003601f168201915b50505050509050915091509091565b6060601f80548060200260200160405190810160405280929190818152602001828054801562002fea57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162002fcb575b5050505050905090565b601a546001600160a01b03163314620030215760405162461bcd60e51b815260040162000f019062005e41565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd389128906020016200206d565b601a546001600160a01b03163314620030845760405162461bcd60e51b815260040162000f019062005e41565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620030d35760405162461bcd60e51b815260040162000f019062005e41565b620030e060008062005618565b620030ee6001600062005618565b6002805460ff19169055565b601a546001600160a01b03163314620031275760405162461bcd60e51b815260040162000f019062005e41565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620031765760405162461bcd60e51b815260040162000f019062005e41565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620031c55760405162461bcd60e51b815260040162000f019062006277565b620031cf62003b20565b620031d9620028fa565b5042602355565b601a546001600160a01b031633146200320d5760405162461bcd60e51b815260040162000f019062005e41565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200325c5760405162461bcd60e51b815260040162000f019062005e41565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620032e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000f01565b6001600160a01b038216620033455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000f01565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff166003811115620033dc57620033dc620057cc565b146200342b5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000f01565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162002e44919062005f17565b6001600160a01b0383166000908152602a6020526040902054811115620034e15760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640162000f01565b6001600160a01b0383166000908152602a6020526040812080548392906200350b90849062005f01565b9250508190555080602c600082825462003526919062005f17565b909155506200353990508160026200632a565b6001600160a01b0383166000908152602a6020526040812080549091906200356390849062005f17565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200339a91815260200190565b6001600160a01b0382166000908152602a602052604081208054839290620035da90849062005f17565b9250508190555080602c6000828254620035f5919062005f17565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016200253b565b8115801562003643575080155b156200364d575050565b600d54600090670de0b6b3a7640000906200366a9085906200632a565b620036769190620064a3565b90508015620036f4576012546040516000916001600160a01b03169083908381818185875af1925050503d8060008114620036ce576040519150601f19603f3d011682016040523d82523d6000602084013e620036d3565b606091505b5090915050801515600103620036f257620036ef828562005f01565b93505b505b826026600082825462003708919062005f17565b90915550600090505b60255481101562001501576000602b600060258481548110620037385762003738620062f8565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001812060245460258054929450909188919086908110620037835762003783620062f8565b906000526020600020906003020160010154620037a191906200632a565b620037ad9190620064a3565b905060006024548660258681548110620037cb57620037cb620062f8565b906000526020600020906003020160010154620037e991906200632a565b620037f59190620064a3565b90506000821180620038075750600081115b1562003b07576002601384015460ff1660038111156200382b576200382b620057cc565b14806200385357506003601384015460ff166003811115620038515762003851620057cc565b145b156200391d57601354620038739030906001600160a01b0316836200347e565b601354602580546001600160a01b039092169163a8031a1d91859188908110620038a157620038a1620062f8565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b158015620038fa57600080fd5b505af11580156200390f573d6000803e3d6000fd5b505050505050505062003b0b565b600083600501548385600801546200393691906200632a565b620039429190620064a3565b90508015620039a75783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d80600081146200399e576040519150601f19603f3d011682016040523d82523d6000602084013e620039a3565b606091505b5050505b60008460050154838660080154620039c091906200632a565b620039cc9190620064a3565b90508015620039ee578454620039ee9030906001600160a01b0316836200347e565b6000620039fc828562005f01565b9050600062003a0c848762005f01565b9050600081118062003a1e5750600082115b1562003ab857600c87015462003a409030906001600160a01b0316846200347e565b600c87015460405163a0ce552d60e01b8152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562003a8e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003ab59190620064ba565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b8062003b17816200630e565b91505062003711565b6004545b60055481101562003b4d5762003b478162003b3f816200630e565b92506200481a565b62003b24565b506005546004556008546007540362003b6257565b6009545b60085481101562003b8f5762003b898162003b81816200630e565b925062004a41565b62003b66565b50600854600955600754805b60085481101562003c0957601054600082815260066020526040902060040154439162003bc89162005f17565b1162003bee5762003bd98162004d3c565b62003be660018362005f17565b915062003bf4565b62003c09565b8062003c00816200630e565b91505062003b9b565b50600755565b600c54600b54101562003d2c57600b546000908152600a602052604090206010546001820154439162003c429162005f17565b111562003c4c5750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490516319fac8fd60e01b81529216926319fac8fd9262003ca7920190815260200190565b600060405180830381600087803b15801562003cc257600080fd5b505af115801562003cd7573d6000803e3d6000fd5b5050600b80546000908152600a6020526040812080546001600160a01b03191681556001808201839055600290910182905582549094509192509062003d1f90849062005f17565b9091555062003c0f915050565b565b60e281511462003d785760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640162000f01565b6030826102400151511462003dd05760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000f01565b62003ddb8262004e87565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262003e3e920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008262003e5e835162004fb4565b8360405160200162003e7393929190620064df565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808062003ecb898262003ec5604160026200632a565b620050d5565b9050600062003eea8a62003ee2604160026200632a565b6060620050d5565b905060205b825181101562003fbb5762003f058382620051ee565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562003f61573d6000803e3d6000fd5b5050604051601f19015190508762003f7b604184620064a3565b8151811062003f8e5762003f8e620062f8565b6001600160a01b039092166020928302919091019091015262003fb360418262005f17565b905062003eef565b508a602001516001600160a01b03168660008151811062003fe05762003fe0620062f8565b60200260200101516001600160a01b031614620040525760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840162000f01565b8a604001516001600160a01b031686600181518110620040765762004076620062f8565b60200260200101516001600160a01b031614620040ea5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840162000f01565b6001620041028c6102400151838e6000015162005225565b14620041705760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840162000f01565b6200417b8b62005294565b5050505050505050505050565b60008211620041e65760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000f01565b6001600160a01b0381166000908152602a6020526040902054821115620042505760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000f01565b6001600160a01b0381166000908152602a6020526040812080548492906200427a90849062005f01565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004306836200630e565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b602052604090208054909183811691161480620044ea57600c820154604051631092ab9160e31b81526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa158015620043eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620044119190620062ba565b905084811015620044795760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840162000f01565b600c83015460405163282d3fdf60e01b81526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b158015620044ca57600080fd5b505af1158015620044df573d6000803e3d6000fd5b50505050506200457d565b8382600b0154836008015462004501919062005f01565b1015620045615760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840162000f01565b8382600b01600082825462004577919062005f17565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a019081526008805486526006909752998420985189549089166001600160a01b0319918216178a55965160018a01805491909916971696909617909655915160028701559051600386015592516004850155905160059093018054945115156101000261ff00199415159490941661ffff19909516949094179290921790925580549162004651836200630e565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620043659291909115158252602082015260400190565b60fa60a06000808285855af4620046c2573d6000803e3d6000fd5b505050565b8154600260018083161561010002038216048251808201602081106020841001600281146200477657600181146200479c578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200475f578151845560018401935060208201915062004740565b815191036101000a90819004029091555062004811565b60028302826020036101000a846020036101000a60208901510402018501875562004811565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015620047ff5781518455600184019350602082019150620047e0565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff166003811115620048605762004860620057cc565b146200490057600282015482546001600160a01b03166000908152602a6020526040812080549091906200489690849062005f17565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f87834294620048f3946001600160a01b0391821694911692909160ff9091169062006528565b60405180910390a1505050565b805482546001600160a01b03908116911614620049fd576000808260080154836005015462004930919062005f01565b9050806000036200494857836002015491506200496e565b80846002015484600d01546200495f91906200632a565b6200496b9190620064a3565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620049c057600080fd5b505af1158015620049d5573d6000803e3d6000fd5b505050508183600d016000828254620049ef919062005f17565b9091555062004a1d92505050565b816002015481600801600082825462004a17919062005f17565b90915550505b816002015481600501600082825462004a37919062005f17565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff1662004c35576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801562004ad657600080fd5b505af115801562004aeb573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801562004b4157600080fd5b505af115801562004b56573d6000803e3d6000fd5b5050505060008360080154846005015462004b72919062005f01565b600d85015490915062004b8682846200632a565b62004b929190620064a3565b92508184600d01600082825462004baa919062005f01565b9091555050600684015460000362004bc9576003850183905562004bf1565b6006840154600785015462004bdf90856200632a565b62004beb9190620064a3565b60038601555b8284600601600082825462004c07919062005f17565b9091555050600385015460078501805460009062004c2790849062005f17565b9091555062004d0a92505050565b506002820154600882015481111562004c4f575060088101545b816009015460000362004c69576003830181905562004c91565b6009820154600a83015462004c7f90836200632a565b62004c8b9190620064a3565b60038401555b8082600901600082825462004ca7919062005f17565b90915550506003830154600a8301805460009062004cc790849062005f17565b925050819055508082600801600082825462004ce4919062005f01565b90915550506002830154600b8301805460009062004d0490849062005f01565b90915550505b6005808401805460ff191660011790558201805482919060009062004d3190849062005f01565b909155505050505050565b6000818152600660205260408120600381015490910362004d5b575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff1662004df75781600701548260060154846003015462004da791906200632a565b62004db39190620064a3565b90508082600601600082825462004dcb919062005f01565b9091555050600383015460078301805460009062004deb90849062005f01565b9091555062004e5c9050565b81600a01548260090154846003015462004e1291906200632a565b62004e1e9190620064a3565b90508082600901600082825462004e36919062005f01565b90915550506003830154600a8301805460009062004e5690849062005f01565b90915550505b82546001600160a01b03166000908152602a60205260408120805483929062004d3190849062005f17565b600062004e988260600151620054c5565b6001600160a01b0390911660208401529050801562004ee85760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000f01565b6020808301516001600160a01b039081166000908152602b909252604090912060010154161562004f5c5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000f01565b61271082608001511115620015405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000f01565b60608160000362004fdc5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200500c578062004ff3816200630e565b9150620050049050600a83620064a3565b915062004fe0565b60008167ffffffffffffffff8111156200502a576200502a62005ac5565b6040519080825280601f01601f19166020018201604052801562005055576020820181803683370190505b5090505b8415620050cd576200506d60018362005f01565b91506200507c600a866200635a565b6200508990603062005f17565b60f81b818381518110620050a157620050a1620062f8565b60200101906001600160f81b031916908160001a905350620050c5600a86620064a3565b945062005059565b949350505050565b606081620050e581601f62005f17565b1015620051265760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640162000f01565b62005132828462005f17565b84511015620051785760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640162000f01565b606082158015620051995760405191506000825260208201604052620051e5565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015620051d4578051835260209283019201620051ba565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156200521e576200521b601b8262006556565b90505b9250925092565b60006200523162005657565b60008585856040516020016200524a9392919062006572565b6040516020818303038152906040529050600060fb905060008251602062005273919062005f17565b90506020848285855afa6200528757600080fd5b5050905195945050505050565b6101808101516001600160a01b03166200531757601f54600090620052b99062004fb4565b905081602001518260000151836080015183604051620052d99062005675565b620052e89493929190620065c1565b604051809103906000f08015801562005305573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620053c9908262006600565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005493908262006600565b5061026082015160138201805460ff19166001836003811115620054bb57620054bb620057cc565b0217905550505050565b600080620054d262005683565b60008060ff9050604083875160208901845afa620054ef57600080fd5b50508051602090910151600160601b90910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006003811115620055d557620055d5620057cc565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f519190620056a1565b508054620056269062005eaf565b6000825580601f1062005637575050565b601f01602090049060005260206000209081019062000f519190620056c6565b60405180602001604052806001906020820280368337509192915050565b61186f80620066c183390190565b60405180604001604052806002906020820280368337509192915050565b80821115620056c2576000620056b8828262005618565b50600101620056a1565b5090565b5b80821115620056c25760008155600101620056c7565b60005b83811015620056fa578181015183820152602001620056e0565b50506000910152565b600081518084526200571d816020860160208601620056dd565b601f01601f19169290920160200192915050565b60208152600062005746602083018462005703565b9392505050565b6001600160a01b038116811462000f5157600080fd5b600080604083850312156200577757600080fd5b823562005784816200574d565b946020939093013593505050565b600060208284031215620057a557600080fd5b813562005746816200574d565b600060208284031215620057c557600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600481106200580157634e487b7160e01b600052602160045260246000fd5b9052565b60208152620058206020820183516001600160a01b03169052565b600060208301516200583d60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620058716102a085018362005703565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620058f9818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506200595d848362005703565b9350808701519150506200597482860182620057e2565b5090949350505050565b6000806000606084860312156200599457600080fd5b8335620059a1816200574d565b92506020840135620059b3816200574d565b929592945050506040919091013590565b600060208284031215620059d757600080fd5b813567ffffffffffffffff811115620059ef57600080fd5b820161028081850312156200574657600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562005a78578284038952815180516001600160a01b03168552858101518686015260409081015160609186018290529062005a638187018362005703565b9a87019a955050509084019060010162005a21565b5091979650505050505050565b8215158152604060208201526000620050cd604083018462005a03565b6000806040838503121562005ab657600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262005aed57600080fd5b813567ffffffffffffffff8082111562005b0b5762005b0b62005ac5565b604051601f8301601f19908116603f0116810190828211818310171562005b365762005b3662005ac5565b8160405283815286602085880101111562005b5057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121562005b8757600080fd5b843567ffffffffffffffff8082111562005ba057600080fd5b62005bae8883890162005adb565b95506020870135915062005bc2826200574d565b9093506040860135908082111562005bd957600080fd5b62005be78883890162005adb565b9350606087013591508082111562005bfe57600080fd5b5062005c0d8782880162005adb565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562005c7257603f1988860301845262005c5f85835162005703565b9450928501929085019060010162005c40565b5092979650505050505050565b60208152600062005746602083018462005a03565b6020808252825182820181905260009190848201906040850190845b8181101562005cd75783516001600160a01b03168352928401929184019160010162005cb0565b50909695505050505050565b6000806040838503121562005cf757600080fd5b823567ffffffffffffffff8082111562005d1057600080fd5b62005d1e8683870162005adb565b9350602085013591508082111562005d3557600080fd5b5062005d448582860162005adb565b9150509250929050565b60408152600062005d63604083018562005703565b828103602084015262005d77818562005703565b95945050505050565b6000806040838503121562005d9457600080fd5b823562005da1816200574d565b9150602083013562005db3816200574d565b809150509250929050565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b600181811c9082168062005ec457607f821691505b60208210810362005ee557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000ebb5762000ebb62005eeb565b8082018082111562000ebb5762000ebb62005eeb565b6000813562000ebb816200574d565b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808335601e1984360301811262005f7457600080fd5b83018035915067ffffffffffffffff82111562005f9057600080fd5b60200191503681900382131562005fa657600080fd5b9250929050565b601f821115620046c257600081815260208120601f850160051c8101602086101562005fd65750805b601f850160051c820191505b8181101562005ff75782815560010162005fe2565b505050505050565b600019600383901b1c191660019190911b1790565b67ffffffffffffffff8311156200602f576200602f62005ac5565b620060478362006040835462005eaf565b8362005fad565b6000601f8411600181146200607a5760008515620060655750838201355b62006071868262005fff565b84555062001647565b600083815260209020601f19861690835b82811015620060ad57868501358255602094850194600190920191016200608b565b5086821015620060cb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000ebb57600080fd5b600482106200610e57634e487b7160e01b600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006137620061308362005f2d565b8262005f3c565b62006153620061496020840162005f2d565b6001830162005f3c565b6200616f620061656040840162005f2d565b6002830162005f3c565b6200617e606083018362005f5c565b6200618e81836003860162006014565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006201620061f7610180840162005f2d565b600c830162005f3c565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200624861024083018362005f5c565b6200625881836012860162006014565b5050620015406200626d6102608401620060dd565b60138301620060ef565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b600060208284031215620062cd57600080fd5b5051919050565b600060208284031215620062e757600080fd5b815180151581146200574657600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001820162006323576200632362005eeb565b5060010190565b808202811582820484141762000ebb5762000ebb62005eeb565b634e487b7160e01b600052601260045260246000fd5b6000826200636c576200636c62006344565b500690565b600060018060a01b0380881683528087166020840152808616604084015260a06060840152620063a560a084018662005703565b91508084166080840152509695505050505050565b818103620063c6575050565b620063d2825462005eaf565b67ffffffffffffffff811115620063ed57620063ed62005ac5565b6200640581620063fe845462005eaf565b8462005fad565b6000601f821160018114620064385760008315620064235750848201545b6200642f848262005fff565b85555062001647565b600085815260209020601f19841690600086815260209020845b8381101562006474578286015482556001958601959091019060200162006452565b5085831015620064935781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620064b557620064b562006344565b500490565b60008060408385031215620064ce57600080fd5b505080516020909101519092909150565b60008451620064f3818460208901620056dd565b84519083019062006509818360208901620056dd565b84519101906200651e818360208801620056dd565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162005d776060830184620057e2565b60ff818116838216019081111562000ebb5762000ebb62005eeb565b6000845162006586818460208901620056dd565b8451908301906200659c818360208901620056dd565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090620065f69083018462005703565b9695505050505050565b815167ffffffffffffffff8111156200661d576200661d62005ac5565b6200662e81620063fe845462005eaf565b602080601f8311600181146200666257600084156200664d5750858301515b62006659858262005fff565b86555062005ff7565b600085815260208120601f198616915b82811015620066935788860151825594840194600190910190840162006672565b50858210156200649357939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033a26469706673582212200ff36fae3c52149be139f47acd9ea62f7e12c0cbff14c35e3924a40e050d89f064736f6c6343000815003360806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // AutonityUpgradeTestABI is the input ABI used to generate the binding from. @@ -4711,6 +4769,21 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Allowance(opts *runOptions, own } +// AtnTotalRedistributed is a free data retrieval call binding the contract method 0xe98712b2. +// +// Solidity: function atnTotalRedistributed() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTest) AtnTotalRedistributed(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _AutonityUpgradeTest.call(opts, "atnTotalRedistributed") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // BalanceOf is a free data retrieval call binding the contract method 0x70a08231. // // Solidity: function balanceOf(address _addr) view returns(uint256) @@ -4728,7 +4801,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) BalanceOf(opts *runOptions, _ad // Config is a free data retrieval call binding the contract method 0x79502c55. // -// Solidity: function config() view returns((uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) +// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,address) policy, (address,address,address,address,address,address,address) contracts, (address,uint256,uint256,uint256) protocol, uint256 contractVersion) func (_AutonityUpgradeTest *AutonityUpgradeTest) Config(opts *runOptions) (struct { Policy AutonityPolicy Contracts AutonityContracts @@ -5101,6 +5174,21 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) GetVersion(opts *runOptions) (* } +// InflationReserve is a free data retrieval call binding the contract method 0x9ac31074. +// +// Solidity: function inflationReserve() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTest) InflationReserve(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _AutonityUpgradeTest.call(opts, "inflationReserve") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // LastEpochBlock is a free data retrieval call binding the contract method 0xc2362dd5. // // Solidity: function lastEpochBlock() view returns(uint256) @@ -5116,6 +5204,21 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) LastEpochBlock(opts *runOptions } +// LastEpochTime is a free data retrieval call binding the contract method 0x89c614b8. +// +// Solidity: function lastEpochTime() view returns(uint256) +func (_AutonityUpgradeTest *AutonityUpgradeTest) LastEpochTime(opts *runOptions) (*big.Int, uint64, error) { + out, consumed, err := _AutonityUpgradeTest.call(opts, "lastEpochTime") + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + // Name is a free data retrieval call binding the contract method 0x06fdde03. // // Solidity: function name() pure returns(string) @@ -5146,21 +5249,6 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Symbol(opts *runOptions) (strin } -// TotalRedistributed is a free data retrieval call binding the contract method 0x9bb851c0. -// -// Solidity: function totalRedistributed() view returns(uint256) -func (_AutonityUpgradeTest *AutonityUpgradeTest) TotalRedistributed(opts *runOptions) (*big.Int, uint64, error) { - out, consumed, err := _AutonityUpgradeTest.call(opts, "totalRedistributed") - - if err != nil { - return *new(*big.Int), consumed, err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - return out0, consumed, err - -} - // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. // // Solidity: function totalSupply() view returns(uint256) @@ -5312,6 +5400,14 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) SetEpochPeriod(opts *runOptions return consumed, err } +// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d. +// +// Solidity: function setInflationControllerContract(address _address) returns() +func (_AutonityUpgradeTest *AutonityUpgradeTest) SetInflationControllerContract(opts *runOptions, _address common.Address) (uint64, error) { + _, consumed, err := _AutonityUpgradeTest.call(opts, "setInflationControllerContract", _address) + return consumed, err +} + // SetMinimumBaseFee is a paid mutator transaction binding the contract method 0xcb696f54. // // Solidity: function setMinimumBaseFee(uint256 _price) returns() @@ -5394,9 +5490,9 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Transfer(opts *runOptions, _rec // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. // -// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool) -func (_AutonityUpgradeTest *AutonityUpgradeTest) TransferFrom(opts *runOptions, sender common.Address, recipient common.Address, amount *big.Int) (uint64, error) { - _, consumed, err := _AutonityUpgradeTest.call(opts, "transferFrom", sender, recipient, amount) +// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool) +func (_AutonityUpgradeTest *AutonityUpgradeTest) TransferFrom(opts *runOptions, _sender common.Address, _recipient common.Address, _amount *big.Int) (uint64, error) { + _, consumed, err := _AutonityUpgradeTest.call(opts, "transferFrom", _sender, _recipient, _amount) return consumed, err } @@ -7429,13 +7525,14 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Receive(opts *runOptions) (uint // AutonityUpgradeTestRewarded represents a Rewarded event raised by the AutonityUpgradeTest contract. type AutonityUpgradeTestRewarded struct { Addr common.Address; - Amount *big.Int; + AtnAmount *big.Int; + NtnAmount *big.Int; Raw types.Log // Blockchain specific contextual infos } - // FilterRewarded is a free log retrieval operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // FilterRewarded is a free log retrieval operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTest) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityUpgradeTestRewardedIterator, error) { var addrRule []interface{} @@ -7444,6 +7541,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Receive(opts *runOptions) (uint } + logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "Rewarded", addrRule) if err != nil { return nil, err @@ -7451,9 +7549,9 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Receive(opts *runOptions) (uint return &AutonityUpgradeTestRewardedIterator{contract: _AutonityUpgradeTest.contract, event: "Rewarded", logs: logs, sub: sub}, nil } - // WatchRewarded is a free log subscription operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // WatchRewarded is a free log subscription operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTest) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestRewarded, addr []common.Address) (event.Subscription, error) { var addrRule []interface{} @@ -7462,6 +7560,7 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Receive(opts *runOptions) (uint } + logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "Rewarded", addrRule) if err != nil { return nil, err @@ -7494,9 +7593,9 @@ func (_AutonityUpgradeTest *AutonityUpgradeTest) Receive(opts *runOptions) (uint }), nil } - // ParseRewarded is a log parse operation binding the contract event 0xb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe563. + // ParseRewarded is a log parse operation binding the contract event 0x291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91. // - // Solidity: event Rewarded(address indexed addr, uint256 amount) + // Solidity: event Rewarded(address indexed addr, uint256 atnAmount, uint256 ntnAmount) func (_AutonityUpgradeTest *AutonityUpgradeTest) ParseRewarded(log types.Log) (*AutonityUpgradeTestRewarded, error) { event := new(AutonityUpgradeTestRewarded) if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Rewarded", log); err != nil { @@ -7796,9 +7895,9 @@ func (_IACU *IACU) Update(opts *runOptions) (uint64, error) { // IAccountabilityMetaData contains all meta data concerning the IAccountability contract. var IAccountabilityMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Sigs: map[string]string{ - "1de9d9b6": "distributeRewards(address)", + "a8031a1d": "distributeRewards(address,uint256)", "6c9789b0": "finalize(bool)", "6b5f444c": "setEpochPeriod(uint256)", }, @@ -7817,11 +7916,11 @@ type IAccountability struct { *contract } -// DistributeRewards is a paid mutator transaction binding the contract method 0x1de9d9b6. +// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d. // -// Solidity: function distributeRewards(address _validator) payable returns() -func (_IAccountability *IAccountability) DistributeRewards(opts *runOptions, _validator common.Address) (uint64, error) { - _, consumed, err := _IAccountability.call(opts, "distributeRewards", _validator) +// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns() +func (_IAccountability *IAccountability) DistributeRewards(opts *runOptions, _validator common.Address, _ntnReward *big.Int) (uint64, error) { + _, consumed, err := _IAccountability.call(opts, "distributeRewards", _validator, _ntnReward) return consumed, err } @@ -8897,9 +8996,49 @@ func (_IERC20 *IERC20) TransferFrom(opts *runOptions, sender common.Address, rec */ +// IInflationControllerMetaData contains all meta data concerning the IInflationController contract. +var IInflationControllerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Sigs: map[string]string{ + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + }, +} + +// IInflationControllerABI is the input ABI used to generate the binding from. +// Deprecated: Use IInflationControllerMetaData.ABI instead. +var IInflationControllerABI = IInflationControllerMetaData.ABI + +// Deprecated: Use IInflationControllerMetaData.Sigs instead. +// IInflationControllerFuncSigs maps the 4-byte function signature to its string representation. +var IInflationControllerFuncSigs = IInflationControllerMetaData.Sigs + +// IInflationController is an auto generated Go binding around an Ethereum contract. +type IInflationController struct { + *contract +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_IInflationController *IInflationController) CalculateSupplyDelta(opts *runOptions, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, uint64, error) { + out, consumed, err := _IInflationController.call(opts, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + +/* EVENTS ARE NOT YET SUPPORTED + + */ + // IOracleMetaData contains all meta data concerning the IOracle contract. var IOracleMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", Sigs: map[string]string{ "4bb278f3": "finalize()", "9670c0bc": "getPrecision()", @@ -8961,7 +9100,7 @@ func (_IOracle *IOracle) GetRound(opts *runOptions) (*big.Int, uint64, error) { // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracle) GetRoundData(opts *runOptions, _round *big.Int, _symbol string) (IOracleRoundData, uint64, error) { out, consumed, err := _IOracle.call(opts, "getRoundData", _round, _symbol) @@ -9021,7 +9160,7 @@ func (_IOracle *IOracle) GetVoters(opts *runOptions) ([]common.Address, uint64, // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_IOracle *IOracle) LatestRoundData(opts *runOptions, _symbol string) (IOracleRoundData, uint64, error) { out, consumed, err := _IOracle.call(opts, "latestRoundData", _symbol) @@ -9932,9 +10071,104 @@ func (_ISupplyControl *ISupplyControl) SetStabilizer(opts *runOptions, stabilize */ +// InflationControllerMetaData contains all meta data concerning the InflationController contract. +var InflationControllerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"SD59x18\",\"name\":\"iInit\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iTrans\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"aE\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"T\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iPerm\",\"type\":\"int256\"}],\"internalType\":\"structInflationController.Params\",\"name\":\"_params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Underflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Div_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Div_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp2_InputTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp_InputTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Mul_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Mul_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"SD59x18\",\"name\":\"iInit\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iTrans\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"aE\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"T\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"iPerm\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Sigs: map[string]string{ + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + "cff0ab96": "params()", + }, + Bin: "0x608060405234801561001057600080fd5b506040516110c43803806110c483398101604081905261002f9161005c565b805160005560208101516001556040810151600255606081015160035560800151600455426005556100d9565b600060a0828403121561006e57600080fd5b60405160a081016001600160401b038111828210171561009e57634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b610fdc806100e86000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806392eff3cd1461003b578063cff0ab9614610061575b600080fd5b61004e610049366004610e97565b6100a3565b6040519081526020015b60405180910390f35b60005460015460025460035460045461007b949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610058565b6000806100bc600554856100b79190610edf565b610150565b905060006100d1600554856100b79190610edf565b60035490915081136100f1576100e88783836101da565b92505050610148565b60035482121561013857600061010d88846000600301546101da565b9050600061012188600060030154856102da565b905061012d8183610ef2565b945050505050610148565b6101438683836102da565b925050505b949350505050565b6000610168670de0b6b3a7640000600160ff1b610f1b565b821215610190576040516399474eeb60e01b8152600481018390526024015b60405180910390fd5b6101a9670de0b6b3a76400006001600160ff1b03610f1b565b8213156101cc57604051639d58109160e01b815260048101839052602401610187565b50670de0b6b3a76400000290565b6000806101f46000600201546101f06000610150565b1490565b156102305760005460015461022991906102249061021c9061021690846102fe565b8861030d565b6003546103d8565b610485565b90506102a2565b600061024461021c6000600201548761030d565b9050600061027c6102666102578461049a565b6102616001610150565b6102fe565b61027761025760006002015461049a565b6103d8565b60005460015491925061029d916102249061029790836102fe565b8461030d565b925050505b60006102c36102b9836102b489610150565b61030d565b6102b486886102fe565b90506102ce816104ef565b925050505b9392505050565b60006101486102f66102ee6102b987610150565b60045461030d565b6104ef565b90565b60006102d36102fb8385610f57565b60008282600160ff1b8214806103265750600160ff1b81145b156103445760405163a6070c2560e01b815260040160405180910390fd5b60008060008412610355578361035a565b836000035b91506000831261036a578261036f565b826000035b9050600061037d8383610503565b90506001600160ff1b038111156103b15760405163120b5b4360e01b81526004810189905260248101889052604401610187565b600019858518136103cb816103c7578260000390565b8290565b9998505050505050505050565b60008282600160ff1b8214806103f15750600160ff1b81145b1561040f576040516309fe2b4560e41b815260040160405180910390fd5b600080600084126104205783610425565b836000035b915060008312610435578261043a565b826000035b9050600061045183670de0b6b3a7640000846105b9565b90506001600160ff1b038111156103b15760405163d49c26b360e01b81526004810189905260248101889052604401610187565b60006102d36102fb8385610f7e565b92915050565b600081680736ea4425c11ac6308113156104ca5760405163ca7ec0c560e01b815260048101849052602401610187565b6714057b7ef767814f81026101486104ea670de0b6b3a7640000835b0590565b61068d565b6000610494670de0b6b3a764000083610f1b565b60008080600019848609848602925082811083820303915050806000036105375750670de0b6b3a764000090049050610494565b670de0b6b3a7640000811061056957604051635173648d60e01b81526004810186905260248101859052604401610187565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b60008080600019858709858702925082811083820303915050806000036105f3578382816105e9576105e9610f05565b04925050506102d3565b83811061062457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610187565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600081818112156106ea5768033dd1780914b97114198112156106b35750600092915050565b6106e36106c66102fb6104ea8460000390565b6ec097ce7bc90715b34b9f1000000000816104e6576104e6610f05565b9150610731565b680a688906bd8affffff81131561071657604051626c1a0560e31b815260048101849052602401610187565b670de0b6b3a7640000604082901b056101486102fb82610737565b50919050565b600160bf1b67ff000000000000008216156108445767800000000000000082161561076b5768016a09e667f3bcc9090260401c5b67400000000000000082161561078a576801306fe0a31b7152df0260401c5b6720000000000000008216156107a9576801172b83c7d517adce0260401c5b6710000000000000008216156107c85768010b5586cf9890f62a0260401c5b6708000000000000008216156107e7576801059b0d31585743ae0260401c5b67040000000000000082161561080657680102c9a3e778060ee70260401c5b6702000000000000008216156108255768010163da9fb33356d80260401c5b67010000000000000082161561084457680100b1afa5abcbed610260401c5b66ff0000000000008216156109435766800000000000008216156108715768010058c86da1c09ea20260401c5b664000000000000082161561088f576801002c605e2e8cec500260401c5b66200000000000008216156108ad57680100162f3904051fa10260401c5b66100000000000008216156108cb576801000b175effdc76ba0260401c5b66080000000000008216156108e957680100058ba01fb9f96d0260401c5b66040000000000008216156109075768010002c5cc37da94920260401c5b6602000000000000821615610925576801000162e525ee05470260401c5b66010000000000008216156109435768010000b17255775c040260401c5b65ff0000000000821615610a39576580000000000082161561096e576801000058b91b5bc9ae0260401c5b6540000000000082161561098b57680100002c5c89d5ec6d0260401c5b652000000000008216156109a85768010000162e43f4f8310260401c5b651000000000008216156109c557680100000b1721bcfc9a0260401c5b650800000000008216156109e25768010000058b90cf1e6e0260401c5b650400000000008216156109ff576801000002c5c863b73f0260401c5b65020000000000821615610a1c57680100000162e430e5a20260401c5b65010000000000821615610a39576801000000b1721835510260401c5b64ff00000000821615610b2657648000000000821615610a6257680100000058b90c0b490260401c5b644000000000821615610a7e5768010000002c5c8601cc0260401c5b642000000000821615610a9a576801000000162e42fff00260401c5b641000000000821615610ab65768010000000b17217fbb0260401c5b640800000000821615610ad2576801000000058b90bfce0260401c5b640400000000821615610aee57680100000002c5c85fe30260401c5b640200000000821615610b0a5768010000000162e42ff10260401c5b640100000000821615610b2657680100000000b17217f80260401c5b63ff000000821615610c0a576380000000821615610b4d5768010000000058b90bfc0260401c5b6340000000821615610b68576801000000002c5c85fe0260401c5b6320000000821615610b8357680100000000162e42ff0260401c5b6310000000821615610b9e576801000000000b17217f0260401c5b6308000000821615610bb957680100000000058b90c00260401c5b6304000000821615610bd45768010000000002c5c8600260401c5b6302000000821615610bef576801000000000162e4300260401c5b6301000000821615610c0a5768010000000000b172180260401c5b62ff0000821615610ce55762800000821615610c2f576801000000000058b90c0260401c5b62400000821615610c4957680100000000002c5c860260401c5b62200000821615610c635768010000000000162e430260401c5b62100000821615610c7d57680100000000000b17210260401c5b62080000821615610c975768010000000000058b910260401c5b62040000821615610cb1576801000000000002c5c80260401c5b62020000821615610ccb57680100000000000162e40260401c5b62010000821615610ce5576801000000000000b1720260401c5b61ff00821615610db757618000821615610d0857680100000000000058b90260401c5b614000821615610d215768010000000000002c5d0260401c5b612000821615610d3a576801000000000000162e0260401c5b611000821615610d535768010000000000000b170260401c5b610800821615610d6c576801000000000000058c0260401c5b610400821615610d8557680100000000000002c60260401c5b610200821615610d9e57680100000000000001630260401c5b610100821615610db757680100000000000000b10260401c5b60ff821615610e80576080821615610dd857680100000000000000590260401c5b6040821615610df0576801000000000000002c0260401c5b6020821615610e0857680100000000000000160260401c5b6010821615610e20576801000000000000000b0260401c5b6008821615610e3857680100000000000000060260401c5b6004821615610e5057680100000000000000030260401c5b6002821615610e6857680100000000000000010260401c5b6001821615610e8057680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60008060008060808587031215610ead57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561049457610494610ec9565b8082018082111561049457610494610ec9565b634e487b7160e01b600052601260045260246000fd5b600082610f3857634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610f5257610f52610ec9565b500590565b8181036000831280158383131683831282161715610f7757610f77610ec9565b5092915050565b8082018281126000831280158216821582161715610f9e57610f9e610ec9565b50509291505056fea2646970667358221220da0e48bf3bfe7850b153bfd6b81f3f55729293c43ccda4cc102849fead77522664736f6c63430008150033", +} + +// InflationControllerABI is the input ABI used to generate the binding from. +// Deprecated: Use InflationControllerMetaData.ABI instead. +var InflationControllerABI = InflationControllerMetaData.ABI + +// Deprecated: Use InflationControllerMetaData.Sigs instead. +// InflationControllerFuncSigs maps the 4-byte function signature to its string representation. +var InflationControllerFuncSigs = InflationControllerMetaData.Sigs + +// InflationControllerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use InflationControllerMetaData.Bin instead. +var InflationControllerBin = InflationControllerMetaData.Bin + +// DeployInflationController deploys a new Ethereum contract, binding an instance of InflationController to it. +func (r *runner) deployInflationController(opts *runOptions, _params InflationControllerParams) (common.Address, uint64, *InflationController, error) { + parsed, err := InflationControllerMetaData.GetAbi() + if err != nil { + return common.Address{}, 0, nil, err + } + if parsed == nil { + return common.Address{}, 0, nil, errors.New("GetABI returned nil") + } + + address, gasConsumed, c, err := r.deployContract(opts, parsed, common.FromHex(InflationControllerBin), _params) + if err != nil { + return common.Address{}, 0, nil, err + } + return address, gasConsumed, &InflationController{contract: c}, nil +} + +// InflationController is an auto generated Go binding around an Ethereum contract. +type InflationController struct { + *contract +} + +// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd. +// +// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256) +func (_InflationController *InflationController) CalculateSupplyDelta(opts *runOptions, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, uint64, error) { + out, consumed, err := _InflationController.call(opts, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime) + + if err != nil { + return *new(*big.Int), consumed, err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + return out0, consumed, err + +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(int256 iInit, int256 iTrans, int256 aE, int256 T, int256 iPerm) +func (_InflationController *InflationController) Params(opts *runOptions) (struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int +}, uint64, error) { + out, consumed, err := _InflationController.call(opts, "params") + + outstruct := new(struct { + IInit *big.Int + ITrans *big.Int + AE *big.Int + T *big.Int + IPerm *big.Int + }) + if err != nil { + return *outstruct, consumed, err + } + + outstruct.IInit = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.ITrans = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.AE = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.T = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.IPerm = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + return *outstruct, consumed, err + +} + +/* EVENTS ARE NOT YET SUPPORTED + + */ + // LiquidMetaData contains all meta data concerning the Liquid contract. var LiquidMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_unclaimedATN\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unclaimedNTN\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", Sigs: map[string]string{ "2f2c3f2e": "COMMISSION_RATE_PRECISION()", "187cf4d7": "FEE_FACTOR_UNIT_RECIP()", @@ -9949,7 +10183,7 @@ var LiquidMetaData = &bind.MetaData{ "59355736": "lockedBalanceOf(address)", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", - "fb489a7b": "redistribute()", + "a0ce552d": "redistribute(uint256)", "19fac8fd": "setCommissionRate(uint256)", "95d89b41": "symbol()", "18160ddd": "totalSupply()", @@ -9961,7 +10195,7 @@ var LiquidMetaData = &bind.MetaData{ "84955c88": "unlockedBalanceOf(address)", "3a5381b5": "validator()", }, - Bin: "0x60806040523480156200001157600080fd5b506040516200153138038062001531833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61115980620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103e55780639dc29fac146103fa578063a9059cbb1461041a578063dd62ed3e1461043a578063fb489a7b1461048057600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b50610165610488565b6040516101729190610ece565b60405180910390f35b34801561018757600080fd5b5061019b610196366004610f38565b61051a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd366004610f62565b610531565b005b34801561021057600080fd5b5061019b61021f366004610f7b565b610569565b34801561023057600080fd5b5061020261023f366004610f38565b61065c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610741565b34801561029757600080fd5b50600a546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004610f38565b6107ef565b3480156102ef57600080fd5b506101bc6102fe366004610fb7565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600c5481565b34801561033b57600080fd5b50600b546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a366004610fb7565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004610f38565b610857565b3480156103b157600080fd5b506101bc6103c0366004610fb7565b61091d565b3480156103d157600080fd5b506101bc6103e0366004610fb7565b61094b565b3480156103f157600080fd5b50610165610979565b34801561040657600080fd5b50610202610415366004610f38565b610988565b34801561042657600080fd5b5061019b610435366004610f38565b6109e8565b34801561044657600080fd5b506101bc610455366004610fd9565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101bc610a35565b6060600880546104979061100c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c39061100c565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610527338484610b9d565b5060015b92915050565b6000546001600160a01b031633146105645760405162461bcd60e51b815260040161055b90611046565b60405180910390fd5b600c55565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156105ee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055b565b61060285336105fd86856110a4565b610b9d565b61060c8584610cc1565b6106168484610da9565b836001600160a01b0316856001600160a01b03166000805160206111048339815191528560405161064991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106865760405162461bcd60e51b815260040161055b90611046565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106b6916110a4565b10156107105760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110b7565b90915550505050565b600061074c33610df4565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461079e576040519150601f19603f3d011682016040523d82523d6000602084013e6107a3565b606091505b50509050806107eb5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321020baba37b760611b604482015260640161055b565b5050565b6000546001600160a01b031633146108195760405162461bcd60e51b815260040161055b90611046565b6108238282610da9565b6040518181526001600160a01b03831690600090600080516020611104833981519152906020015b60405180910390a35050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161055b90611046565b6001600160a01b0382166000908152600260205260409020548111156108f55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161055b565b6001600160a01b038216600090815260026020526040812080548392906107389084906110a4565b6001600160a01b038116600090815260026020908152604080832054600190925282205461052b91906110a4565b600061095682610e59565b6001600160a01b03831660009081526005602052604090205461052b91906110b7565b6060600980546104979061100c565b6000546001600160a01b031633146109b25760405162461bcd60e51b815260040161055b90611046565b6109bc8282610cc1565b6040518181526000906001600160a01b038416906000805160206111048339815191529060200161084b565b60006109f43383610cc1565b6109fe8383610da9565b6040518281526001600160a01b0384169033906000805160206111048339815191529060200160405180910390a350600192915050565b600080546001600160a01b03163314610a605760405162461bcd60e51b815260040161055b90611046565b600c54349060009061271090610a7690846110ca565b610a8091906110e1565b905081811115610ad25760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f72207265776172640000000000000000604482015260640161055b565b610adc81836110a4565b600b546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610b2f576040519150601f19603f3d011682016040523d82523d6000602084013e610b34565b606091505b505060045460009150610b4b633b9aca00856110ca565b610b5591906110e1565b905080600754610b6591906110b7565b600755600454600090633b9aca0090610b7e90846110ca565b610b8891906110e1565b9050610b9481846110b7565b94505050505090565b6001600160a01b038316610bff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055b565b6001600160a01b038216610c605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610cca82610df4565b506001600160a01b038216600090815260016020908152604080832054600290925290912054610cfa90826110a4565b821115610d495760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161055b565b610d5382826110a4565b6001600160a01b038416600090815260016020526040902055808203610d8d576001600160a01b0383166000908152600660205260408120555b8160046000828254610d9f91906110a4565b9091555050505050565b610db282610df4565b506001600160a01b03821660009081526001602052604081208054839290610ddb9084906110b7565b92505081905550806004600082825461073891906110b7565b600080610e0083610e59565b6001600160a01b038416600090815260056020526040902054909150610e279082906110b7565b6001600160a01b0390931660009081526005602090815260408083208690556007546006909252909120555090919050565b6001600160a01b038116600090815260016020526040812054808203610e825750600092915050565b6001600160a01b038316600090815260066020526040812054600754610ea891906110a4565b90506000633b9aca00610ebb84846110ca565b610ec591906110e1565b95945050505050565b600060208083528351808285015260005b81811015610efb57858101830151858201604001528201610edf565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f3357600080fd5b919050565b60008060408385031215610f4b57600080fd5b610f5483610f1c565b946020939093013593505050565b600060208284031215610f7457600080fd5b5035919050565b600080600060608486031215610f9057600080fd5b610f9984610f1c565b9250610fa760208501610f1c565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610fd282610f1c565b9392505050565b60008060408385031215610fec57600080fd5b610ff583610f1c565b915061100360208401610f1c565b90509250929050565b600181811c9082168061102057607f821691505b60208210810361104057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052b5761052b61108e565b8082018082111561052b5761052b61108e565b808202811582820484141761052b5761052b61108e565b6000826110fe57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203b15b8c2adaa7ca73276134abcab943aef095d8d467422bc0d96aff9928f822664736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b506040516200186f3803806200186f833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61149780620003d86000396000f3fe60806040526004361061014b5760003560e01c806359355736116100b6578063949813b81161006f578063949813b8146103c557806395d89b41146103fa5780639dc29fac1461040f578063a0ce552d1461042f578063a9059cbb14610442578063dd62ed3e1461046257600080fd5b806359355736146102e35780635ea1d6f81461031957806361d027b31461032f57806370a082311461034f5780637eee288d1461038557806384955c88146103a557600080fd5b8063282d3fdf11610108578063282d3fdf146102245780632f2c3f2e14610244578063313ce5671461025a578063372500ab146102765780633a5381b51461028b57806340c10f19146102c357600080fd5b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101ab578063187cf4d7146101ca57806319fac8fd146101e257806323b872dd14610204575b600080fd5b34801561015c57600080fd5b506101656104a8565b60405161017291906111ea565b60405180910390f35b34801561018757600080fd5b5061019b610196366004611254565b61053a565b6040519015158152602001610172565b3480156101b757600080fd5b506004545b604051908152602001610172565b3480156101d657600080fd5b506101bc633b9aca0081565b3480156101ee57600080fd5b506102026101fd36600461127e565b610551565b005b34801561021057600080fd5b5061019b61021f366004611297565b610589565b34801561023057600080fd5b5061020261023f366004611254565b61067c565b34801561025057600080fd5b506101bc61271081565b34801561026657600080fd5b5060405160128152602001610172565b34801561028257600080fd5b50610202610761565b34801561029757600080fd5b50600d546102ab906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b3480156102cf57600080fd5b506102026102de366004611254565b6108d9565b3480156102ef57600080fd5b506101bc6102fe3660046112d3565b6001600160a01b031660009081526002602052604090205490565b34801561032557600080fd5b506101bc600f5481565b34801561033b57600080fd5b50600e546102ab906001600160a01b031681565b34801561035b57600080fd5b506101bc61036a3660046112d3565b6001600160a01b031660009081526001602052604090205490565b34801561039157600080fd5b506102026103a0366004611254565b610941565b3480156103b157600080fd5b506101bc6103c03660046112d3565b610a07565b3480156103d157600080fd5b506103e56103e03660046112d3565b610a35565b60408051928352602083019190915201610172565b34801561040657600080fd5b50610165610a9d565b34801561041b57600080fd5b5061020261042a366004611254565b610aac565b6103e561043d36600461127e565b610b0c565b34801561044e57600080fd5b5061019b61045d366004611254565b610dce565b34801561046e57600080fd5b506101bc61047d3660046112f5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6060600b80546104b790611328565b80601f01602080910402602001604051908101604052809291908181526020018280546104e390611328565b80156105305780601f1061050557610100808354040283529160200191610530565b820191906000526020600020905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b6000610547338484610e1b565b5060015b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b815260040161057b90611362565b60405180910390fd5b600f55565b6001600160a01b03831660009081526003602090815260408083203384529091528120548281101561060e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161057b565b610622853361061d86856113c0565b610e1b565b61062c8584610f3f565b6106368484611035565b836001600160a01b0316856001600160a01b03166000805160206114428339815191528560405161066991815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260040161057b90611362565b6001600160a01b03821660009081526002602090815260408083205460019092529091205482916106d6916113c0565b10156107305760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113d3565b90915550505050565b60008061076d33611081565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146107d0576040519150601f19603f3d011682016040523d82523d6000602084013e6107d5565b606091505b505090508061081b5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b604482015260640161057b565b60005460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561086c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089091906113e6565b9050806108d45760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b73210272a2760711b604482015260640161057b565b505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260040161057b90611362565b61090d8282611035565b6040518181526001600160a01b03831690600090600080516020611442833981519152906020015b60405180910390a35050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b815260040161057b90611362565b6001600160a01b0382166000908152600260205260409020548111156109df5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b606482015260840161057b565b6001600160a01b038216600090815260026020526040812080548392906107589084906113c0565b6001600160a01b038116600090815260026020908152604080832054600190925282205461054b91906113c0565b600080600080610a448561112b565b6001600160a01b0387166000908152600560205260409020549193509150610a6d9083906113d3565b6001600160a01b038616600090815260086020526040902054909450610a949082906113d3565b92505050915091565b6060600c80546104b790611328565b6000546001600160a01b03163314610ad65760405162461bcd60e51b815260040161057b90611362565b610ae08282610f3f565b6040518181526000906001600160a01b0384169060008051602061144283398151915290602001610935565b6000805481906001600160a01b03163314610b395760405162461bcd60e51b815260040161057b90611362565b600f54349060009061271090610b4f9084611408565b610b59919061141f565b905081811115610bab5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f722072657761726400000000604482015260640161057b565b610bb581836113c0565b600e546040519193506001600160a01b0316906108fc9083906000818181858888f193505050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050506000612710600f5487610c239190611408565b610c2d919061141f565b905085811115610c7f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f722072657761726400000000604482015260640161057b565b610c8981876113c0565b600054600e5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0491906113e6565b50600454600090610d19633b9aca0086611408565b610d23919061141f565b905080600754610d3391906113d3565b600755600454600090610d4a633b9aca008a611408565b610d54919061141f565b905080600a54610d6491906113d3565b600a55600454600090633b9aca0090610d7d9085611408565b610d87919061141f565b90506000633b9aca0060045484610d9e9190611408565b610da8919061141f565b9050610db482876113d3565b610dbe82876113d3565b9850985050505050505050915091565b6000610dda3383610f3f565b610de48383611035565b6040518281526001600160a01b0384169033906000805160206114428339815191529060200160405180910390a350600192915050565b6001600160a01b038316610e7d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057b565b6001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f4882611081565b50506001600160a01b038216600090815260016020908152604080832054600290925290912054610f7990826113c0565b821115610fc85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e64730000000000604482015260640161057b565b610fd282826113c0565b6001600160a01b038416600090815260016020526040902055808203611019576001600160a01b038316600090815260066020908152604080832083905560099091528120555b816004600082825461102b91906113c0565b9091555050505050565b61103e82611081565b50506001600160a01b038216600090815260016020526040812080548392906110689084906113d3565b92505081905550806004600082825461075891906113d3565b6000806000806110908561112b565b6001600160a01b03871660009081526005602052604090205491935091506110b99083906113d3565b6001600160a01b0386166000908152600560209081526040808320849055600754600683528184205560089091529020549094506110f89082906113d3565b6001600160a01b039095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b6001600160a01b03811660009081526001602052604081205481908082036111595750600093849350915050565b6001600160a01b03841660009081526006602052604081205460075461117f91906113c0565b6001600160a01b038616600090815260096020526040812054600a5492935090916111aa91906113c0565b9050633b9aca006111bb8484611408565b6111c5919061141f565b9450633b9aca006111d68483611408565b6111e0919061141f565b9350505050915091565b600060208083528351808285015260005b81811015611217578581018301518582016040015282016111fb565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461124f57600080fd5b919050565b6000806040838503121561126757600080fd5b61127083611238565b946020939093013593505050565b60006020828403121561129057600080fd5b5035919050565b6000806000606084860312156112ac57600080fd5b6112b584611238565b92506112c360208501611238565b9150604084013590509250925092565b6000602082840312156112e557600080fd5b6112ee82611238565b9392505050565b6000806040838503121561130857600080fd5b61131183611238565b915061131f60208401611238565b90509250929050565b600181811c9082168061133c57607f821691505b60208210810361135c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561054b5761054b6113aa565b8082018082111561054b5761054b6113aa565b6000602082840312156113f857600080fd5b815180151581146112ee57600080fd5b808202811582820484141761054b5761054b6113aa565b60008261143c57634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220792ac46942e6656f39a3cb826c3199f43c9648a70989f1bee840e3a6239c515964736f6c63430008150033", } // LiquidABI is the input ABI used to generate the binding from. @@ -10165,16 +10399,24 @@ func (_Liquid *Liquid) Treasury(opts *runOptions) (common.Address, uint64, error // UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8. // -// Solidity: function unclaimedRewards(address _account) view returns(uint256) -func (_Liquid *Liquid) UnclaimedRewards(opts *runOptions, _account common.Address) (*big.Int, uint64, error) { +// Solidity: function unclaimedRewards(address _account) view returns(uint256 _unclaimedATN, uint256 _unclaimedNTN) +func (_Liquid *Liquid) UnclaimedRewards(opts *runOptions, _account common.Address) (struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int +}, uint64, error) { out, consumed, err := _Liquid.call(opts, "unclaimedRewards", _account) + outstruct := new(struct { + UnclaimedATN *big.Int + UnclaimedNTN *big.Int + }) if err != nil { - return *new(*big.Int), consumed, err + return *outstruct, consumed, err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - return out0, consumed, err + outstruct.UnclaimedATN = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.UnclaimedNTN = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + return *outstruct, consumed, err } @@ -10248,11 +10490,11 @@ func (_Liquid *Liquid) Mint(opts *runOptions, _account common.Address, _amount * return consumed, err } -// Redistribute is a paid mutator transaction binding the contract method 0xfb489a7b. +// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d. // -// Solidity: function redistribute() payable returns(uint256) -func (_Liquid *Liquid) Redistribute(opts *runOptions) (uint64, error) { - _, consumed, err := _Liquid.call(opts, "redistribute") +// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256, uint256) +func (_Liquid *Liquid) Redistribute(opts *runOptions, _ntnReward *big.Int) (uint64, error) { + _, consumed, err := _Liquid.call(opts, "redistribute", _ntnReward) return consumed, err } @@ -10602,7 +10844,7 @@ func (_Liquid *Liquid) Unlock(opts *runOptions, _account common.Address, _amount // OracleMetaData contains all meta data concerning the Oracle contract. var OracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRoundBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVoterUpdateRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"newSymbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reports\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"round\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbolUpdatedRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"symbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"votingInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isVoter\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"_votes\",\"type\":\"int256[]\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrecision\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastRoundBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVoterUpdateRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"price\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"newSymbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reports\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"round\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbolUpdatedRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"symbols\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"_reports\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"votingInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isVoter\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Sigs: map[string]string{ "4bb278f3": "finalize()", "9670c0bc": "getPrecision()", @@ -10626,7 +10868,7 @@ var OracleMetaData = &bind.MetaData{ "a7813587": "votePeriod()", "5412b3ae": "votingInfo(address)", }, - Bin: "0x6080604052600160ff1b600755600160ff1b6008553480156200002157600080fd5b5060405162002d3438038062002d34833981016040819052620000449162000639565b600280546001600160a01b038087166001600160a01b03199283161790925560038054928616929091169190911790558151620000899060009060208501906200035f565b5081516200009f9060019060208501906200035f565b5080600981905550620000c485600060018851620000be91906200074e565b62000181565b8451620000d9906004906020880190620003bc565b508451620000ef906005906020880190620003bc565b5060016006819055600d8054909101815560009081525b855181101562000175576001600b60008884815181106200012b576200012b6200076a565b6020908102919091018101516001600160a01b03168252810191909152604001600020600201805460ff1916911515919091179055806200016c8162000780565b91505062000106565b505050505050620009c3565b8082126200018e57505050565b81816000856002620001a185856200079c565b620001ad9190620007c6565b620001b9908762000806565b81518110620001cc57620001cc6200076a565b602002602001015190505b8183136200032b575b806001600160a01b0316868481518110620001ff57620001ff6200076a565b60200260200101516001600160a01b031610156200022c5782620002238162000831565b935050620001e0565b806001600160a01b03168683815181106200024b576200024b6200076a565b60200260200101516001600160a01b031611156200027857816200026f816200084c565b9250506200022c565b81831362000325578582815181106200029557620002956200076a565b6020026020010151868481518110620002b257620002b26200076a565b6020026020010151878581518110620002cf57620002cf6200076a565b60200260200101888581518110620002eb57620002eb6200076a565b6001600160a01b0393841660209182029290920101529116905282620003118162000831565b935050818062000321906200084c565b9250505b620001d7565b8185121562000341576200034186868462000181565b8383121562000357576200035786848662000181565b505050505050565b828054828255906000526020600020908101928215620003aa579160200282015b82811115620003aa5782518290620003999082620008f7565b509160200191906001019062000380565b50620003b892915062000422565b5090565b82805482825590600052602060002090810192821562000414579160200282015b828111156200041457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003dd565b50620003b892915062000443565b80821115620003b85760006200043982826200045a565b5060010162000422565b5b80821115620003b8576000815560010162000444565b50805462000468906200086c565b6000825580601f1062000479575050565b601f01602090049060005260206000209081019062000499919062000443565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620004dd57620004dd6200049c565b604052919050565b60006001600160401b038211156200050157620005016200049c565b5060051b60200190565b80516001600160a01b03811681146200052357600080fd5b919050565b6000601f83818401126200053b57600080fd5b82516020620005546200054e83620004e5565b620004b2565b82815260059290921b850181019181810190878411156200057457600080fd5b8287015b848110156200062d5780516001600160401b03808211156200059a5760008081fd5b818a0191508a603f830112620005b05760008081fd5b8582015181811115620005c757620005c76200049c565b620005da818a01601f19168801620004b2565b915080825260408c81838601011115620005f45760008081fd5b60005b8281101562000614578481018201518482018a01528801620005f7565b5050600090820187015284525091830191830162000578565b50979650505050505050565b600080600080600060a086880312156200065257600080fd5b85516001600160401b03808211156200066a57600080fd5b818801915088601f8301126200067f57600080fd5b81516020620006926200054e83620004e5565b82815260059290921b8401810191818101908c841115620006b257600080fd5b948201945b83861015620006db57620006cb866200050b565b82529482019490820190620006b7565b9950620006ec90508a82016200050b565b97505050620006fe604089016200050b565b945060608801519150808211156200071557600080fd5b50620007248882890162000528565b925050608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000764576200076462000738565b92915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000795576200079562000738565b5060010190565b8181036000831280158383131683831282161715620007bf57620007bf62000738565b5092915050565b600082620007e457634e487b7160e01b600052601260045260246000fd5b600160ff1b82146000198414161562000801576200080162000738565b500590565b808201828112600083128015821682158216171562000829576200082962000738565b505092915050565b60006001600160ff1b01820162000795576200079562000738565b6000600160ff1b820162000864576200086462000738565b506000190190565b600181811c908216806200088157607f821691505b602082108103620008a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008f257600081815260208120601f850160051c81016020861015620008d15750805b601f850160051c820191505b818110156200035757828155600101620008dd565b505050565b81516001600160401b038111156200091357620009136200049c565b6200092b816200092484546200086c565b84620008a8565b602080601f8311600181146200096357600084156200094a5750858301515b600019600386901b1c1916600185901b17855562000357565b600085815260208120601f198616915b82811015620009945788860151825594840194600190910190840162000973565b5085821015620009b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61236180620009d36000396000f3fe6080604052600436106101225760003560e01c80638d4f75d2116100a5578063b3ab15fb1161006c578063b3ab15fb1461038c578063b78dec52146103ac578063ccce413b146103c1578063cdd72253146103e1578063df7f710e14610403578063e6a02a281461042557005b80638d4f75d2146103155780639670c0bc146103355780639f8743f71461034b578063a781358714610360578063aa2f89b51461037657005b80634bb278f3116100e95780634bb278f3146101ff5780634c56ea56146102245780635281b5c61461026c5780635412b3ae14610299578063845023f2146102f557005b806308f21ff51461012b578063146ca53114610154578063307de9b61461016a57806333f98c771461018a5780633c8510fd146101df57005b3661012957005b005b34801561013757600080fd5b5061014160085481565b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061014160065481565b34801561017657600080fd5b5061012961018536600461198c565b61043b565b34801561019657600080fd5b506101aa6101a5366004611ac8565b610682565b60405161014b919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b3480156101eb57600080fd5b506101aa6101fa366004611afd565b61076c565b34801561020b57600080fd5b5061021461082d565b604051901515815260200161014b565b34801561023057600080fd5b5061014161023f366004611b60565b8151602081840181018051600c825292820194820194909420919093529091526000908152604090205481565b34801561027857600080fd5b5061028c610287366004611bae565b6109d0565b60405161014b9190611c17565b3480156102a557600080fd5b506102d86102b4366004611c31565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161014b565b34801561030157600080fd5b50610129610310366004611c70565b610a7c565b34801561032157600080fd5b50610129610330366004611d0d565b610b25565b34801561034157600080fd5b5062989680610141565b34801561035757600080fd5b50600654610141565b34801561036c57600080fd5b5061014160095481565b34801561038257600080fd5b5061014160075481565b34801561039857600080fd5b506101296103a7366004611c31565b610c95565b3480156103b857600080fd5b50600954610141565b3480156103cd57600080fd5b5061028c6103dc366004611bae565b610ce1565b3480156103ed57600080fd5b506103f6610cf1565b60405161014b9190611dbe565b34801561040f57600080fd5b50610418610d53565b60405161014b9190611e60565b34801561043157600080fd5b50610141600a5481565b336000908152600b602052604090206002015460ff166104a25760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f746572730000000000000060448201526064015b60405180910390fd5b600654336000908152600b6020526040902054036104f25760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610499565b336000908152600b602052604081206001810180549087905581546006549092559181900361052257505061067c565b600054841461053257505061067c565b60016006546105419190611e89565b8114158061057e5750848484336040516020016105619493929190611e9c565b6040516020818303038152906040528051906020012060001c8214155b156105fa5760005b6000548110156105f2576001600160ff1b03600c600083815481106105ad576105ad611ee7565b906000526020600020016040516105c49190611f37565b90815260408051602092819003830190203360009081529252902055806105ea81611fad565b915050610586565b50505061067c565b60005b848110156106785785858281811061061757610617611ee7565b90506020020135600c6000838154811061063357610633611ee7565b9060005260206000200160405161064a9190611f37565b908152604080516020928190038301902033600090815292529020558061067081611fad565b9150506105fd565b5050505b50505050565b6106af60405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000600d60016006546106c29190611e89565b815481106106d2576106d2611ee7565b90600052602060002001836040516106ea9190611fc6565b90815260408051918290036020908101832060608401835280548452600180820154928501929092526002015460ff16151583830152815160808101909252600654929350600092829161073d91611e89565b815260200183600001518152602001836020015181526020018360400151151581525090508092505050919050565b61079960405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000600d84815481106107ae576107ae611ee7565b90600052602060002001836040516107c69190611fc6565b9081526040805191829003602090810183206060808501845281548552600182015485840190815260029092015460ff16151585850190815284516080810186528a8152955193860193909352905192840192909252511515908201529150505b92915050565b6002546000906001600160a01b0316331461085a5760405162461bcd60e51b815260040161049990611fe2565b600954600a5461086a9190612025565b43106109ca5760005b6000548110156108985761088681610f11565b610891600182612025565b9050610873565b50600654600754036109155760005b600554811015610913576001600b6000600584815481106108ca576108ca611ee7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805460ff19169115159190911790558061090b81611fad565b9150506108a7565b505b600654600754610926906001612038565b0361093357610933611218565b43600a8190555060016006600082825461094d9190612025565b9091555050600854610960906002612038565b6006540361097a5760018054610978916000916117de565b505b60065460095460408051928352436020840152429083015260608201527fb5d8636ab45e6cac7a4a61cb7c77f77f61a454d73aa2e6139ff8dcaf463537e59060800160405180910390a150600190565b50600090565b600181815481106109e057600080fd5b9060005260206000200160009150905080546109fb90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2790611efd565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b505050505081565b6002546001600160a01b03163314610aa65760405162461bcd60e51b815260040161049990611fe2565b8051600003610aef5760405162461bcd60e51b8152602060048201526015602482015274566f746572732063616e277420626520656d70747960581b6044820152606401610499565b610b0881600060018451610b039190611e89565b6113f5565b8051610b1b906005906020840190611836565b5050600654600755565b6003546001600160a01b03163314610b785760405162461bcd60e51b81526020600482015260166024820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b6044820152606401610499565b8051600003610bc25760405162461bcd60e51b815260206004820152601660248201527573796d626f6c732063616e277420626520656d70747960501b6044820152606401610499565b600654600854610bd3906001612038565b14158015610be5575060065460085414155b610c315760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e6400006044820152606401610499565b8051610c44906001906020840190611897565b5060065460088190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d908290610c7c906001612025565b604051610c8a929190612060565b60405180910390a150565b6002546001600160a01b03163314610cbf5760405162461bcd60e51b815260040161049990611fe2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081815481106109e057600080fd5b60606005805480602002602001604051908101604052809291908181526020018280548015610d4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d2b575b5050505050905090565b60606006546008546001610d679190612038565b03610e43576001805480602002602001604051908101604052809291908181526020016000905b82821015610e3a578382906000526020600020018054610dad90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd990611efd565b8015610e265780601f10610dfb57610100808354040283529160200191610e26565b820191906000526020600020905b815481529060010190602001808311610e0957829003601f168201915b505050505081526020019060010190610d8e565b50505050905090565b6000805480602002602001604051908101604052809291908181526020016000905b82821015610e3a578382906000526020600020018054610e8490611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb090611efd565b8015610efd5780601f10610ed257610100808354040283529160200191610efd565b820191906000526020600020905b815481529060010190602001808311610ee057829003601f168201915b505050505081526020019060010190610e65565b6000808281548110610f2557610f25611ee7565b906000526020600020018054610f3a90611efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6690611efd565b8015610fb35780601f10610f8857610100808354040283529160200191610fb3565b820191906000526020600020905b815481529060010190602001808311610f9657829003601f168201915b50505050509050600060048054905067ffffffffffffffff811115610fda57610fda611a11565b604051908082528060200260200182016040528015611003578160200160208202803683370190505b5090506000805b60045481101561111a5760006004828154811061102957611029611ee7565b60009182526020808320909101546006546001600160a01b03909116808452600b90925260409092205490925014158061109d57506001600160ff1b03600c866040516110769190611fc6565b90815260408051602092819003830190206001600160a01b03851660009081529252902054145b156110a85750611108565b600c856040516110b89190611fc6565b90815260408051602092819003830190206001600160a01b0384166000908152925290205484846110e881611fad565b9550815181106110fa576110fa611ee7565b602002602001018181525050505b8061111281611fad565b91505061100a565b506000600d600160065461112e9190611e89565b8154811061113e5761113e611ee7565b90600052602060002001846040516111569190611fc6565b908152604051908190036020019020549050600082156111815761117a84846115a2565b9150600190505b600d80546001018082556000829052604080516060810182528581524260208201528415159181019190915260065490929181106111c1576111c1611ee7565b90600052602060002001866040516111d99190611fc6565b90815260408051602092819003830190208351815591830151600183015591909101516002909101805460ff1916911515919091179055505050505050565b6000805b6004548210801561122e575060055481105b15611373576005818154811061124657611246611ee7565b600091825260209091200154600480546001600160a01b03909216918490811061127257611272611ee7565b6000918252602090912001546001600160a01b0316036112ac578161129681611fad565b92505080806112a490611fad565b91505061121c565b600581815481106112bf576112bf611ee7565b600091825260209091200154600480546001600160a01b0390921691849081106112eb576112eb611ee7565b6000918252602090912001546001600160a01b0316101561136957600b60006004848154811061131d5761131d611ee7565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff191690558161136181611fad565b92505061121c565b806112a481611fad565b6004548210156113e057600b60006004848154811061139457611394611ee7565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff19169055816113d881611fad565b925050611373565b600580546113f0916004916118dd565b505050565b80821261140157505050565b818160008560026114128585612082565b61141c91906120bf565b6114269087612038565b8151811061143657611436611ee7565b602002602001015190505b818313611574575b806001600160a01b031686848151811061146557611465611ee7565b60200260200101516001600160a01b0316101561148e5782611486816120ed565b935050611449565b806001600160a01b03168683815181106114aa576114aa611ee7565b60200260200101516001600160a01b031611156114d357816114cb81612105565b92505061148e565b81831361156f578582815181106114ec576114ec611ee7565b602002602001015186848151811061150657611506611ee7565b602002602001015187858151811061152057611520611ee7565b6020026020010188858151811061153957611539611ee7565b6001600160a01b039384166020918202929092010152911690528261155d816120ed565b935050818061156b90612105565b9250505b611441565b81851215611587576115878686846113f5565b8383121561159a5761159a8684866113f5565b505050505050565b6000816000036115b457506000610827565b6115ca8360006115c5600186611e89565b611666565b60006115d7600284612122565b90506115e4600284612136565b15611608578381815181106115fb576115fb611ee7565b602002602001015161165e565b600284828151811061161c5761161c611ee7565b6020026020010151856001846116329190611e89565b8151811061164257611642611ee7565b60200260200101516116549190612038565b61165e91906120bf565b949350505050565b8181808203611676575050505050565b60008560026116858787612082565b61168f91906120bf565b6116999087612038565b815181106116a9576116a9611ee7565b602002602001015190505b8183136117b8575b808684815181106116cf576116cf611ee7565b602002602001015112156116ef57826116e7816120ed565b9350506116bc565b85828151811061170157611701611ee7565b6020026020010151811215611722578161171a81612105565b9250506116ef565b8183136117b35785828151811061173b5761173b611ee7565b602002602001015186848151811061175557611755611ee7565b602002602001015187858151811061176f5761176f611ee7565b6020026020010188858151811061178857611788611ee7565b602090810291909101019190915252816117a181612105565b92505082806117af906120ed565b9350505b6116b4565b818512156117cb576117cb868684611666565b8383121561159a5761159a868486611666565b8280548282559060005260206000209081019282156118265760005260206000209182015b8281111561182657816118168482612190565b5091600101919060010190611803565b5061183292915061191d565b5090565b82805482825590600052602060002090810192821561188b579160200282015b8281111561188b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611856565b5061183292915061193a565b828054828255906000526020600020908101928215611826579160200282015b8281111561182657825182906118cd9082612271565b50916020019190600101906118b7565b82805482825590600052602060002090810192821561188b5760005260206000209182015b8281111561188b578254825591600101919060010190611902565b80821115611832576000611931828261194f565b5060010161191d565b5b80821115611832576000815560010161193b565b50805461195b90611efd565b6000825580601f1061196b575050565b601f016020900490600052602060002090810190611989919061193a565b50565b600080600080606085870312156119a257600080fd5b84359350602085013567ffffffffffffffff808211156119c157600080fd5b818701915087601f8301126119d557600080fd5b8135818111156119e457600080fd5b8860208260051b85010111156119f957600080fd5b95986020929092019750949560400135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5057611a50611a11565b604052919050565b600082601f830112611a6957600080fd5b813567ffffffffffffffff811115611a8357611a83611a11565b611a96601f8201601f1916602001611a27565b818152846020838601011115611aab57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611ada57600080fd5b813567ffffffffffffffff811115611af157600080fd5b61165e84828501611a58565b60008060408385031215611b1057600080fd5b82359150602083013567ffffffffffffffff811115611b2e57600080fd5b611b3a85828601611a58565b9150509250929050565b80356001600160a01b0381168114611b5b57600080fd5b919050565b60008060408385031215611b7357600080fd5b823567ffffffffffffffff811115611b8a57600080fd5b611b9685828601611a58565b925050611ba560208401611b44565b90509250929050565b600060208284031215611bc057600080fd5b5035919050565b60005b83811015611be2578181015183820152602001611bca565b50506000910152565b60008151808452611c03816020860160208601611bc7565b601f01601f19169290920160200192915050565b602081526000611c2a6020830184611beb565b9392505050565b600060208284031215611c4357600080fd5b611c2a82611b44565b600067ffffffffffffffff821115611c6657611c66611a11565b5060051b60200190565b60006020808385031215611c8357600080fd5b823567ffffffffffffffff811115611c9a57600080fd5b8301601f81018513611cab57600080fd5b8035611cbe611cb982611c4c565b611a27565b81815260059190911b82018301908381019087831115611cdd57600080fd5b928401925b82841015611d0257611cf384611b44565b82529284019290840190611ce2565b979650505050505050565b60006020808385031215611d2057600080fd5b823567ffffffffffffffff80821115611d3857600080fd5b818501915085601f830112611d4c57600080fd5b8135611d5a611cb982611c4c565b81815260059190911b83018401908481019088831115611d7957600080fd5b8585015b83811015611db157803585811115611d955760008081fd5b611da38b89838a0101611a58565b845250918601918601611d7d565b5098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611dff5783516001600160a01b031683529284019291840191600101611dda565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611e53578284038952611e41848351611beb565b98850198935090840190600101611e29565b5091979650505050505050565b602081526000611c2a6020830184611e0b565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082757610827611e73565b60008186825b87811015611ec0578135835260209283019290910190600101611ea2565b5050938452505060601b6bffffffffffffffffffffffff1916602082015260340192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611f1157607f821691505b602082108103611f3157634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354611f4581611efd565b60018281168015611f5d5760018114611f7257611fa1565b60ff1984168752821515830287019450611fa1565b8760005260208060002060005b85811015611f985781548a820152908401908201611f7f565b50505082870194505b50929695505050505050565b600060018201611fbf57611fbf611e73565b5060010190565b60008251611fd8818460208701611bc7565b9190910192915050565b60208082526023908201527f7265737472696374656420746f20746865206175746f6e69747920636f6e74726040820152621858dd60ea1b606082015260800190565b8082018082111561082757610827611e73565b808201828112600083128015821682158216171561205857612058611e73565b505092915050565b6040815260006120736040830185611e0b565b90508260208301529392505050565b81810360008312801583831316838312821617156120a2576120a2611e73565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826120ce576120ce6120a9565b600160ff1b8214600019841416156120e8576120e8611e73565b500590565b60006001600160ff1b018201611fbf57611fbf611e73565b6000600160ff1b820161211a5761211a611e73565b506000190190565b600082612131576121316120a9565b500490565b600082612145576121456120a9565b500690565b601f8211156113f057600081815260208120601f850160051c810160208610156121715750805b601f850160051c820191505b8181101561159a5782815560010161217d565b81810361219b575050565b6121a58254611efd565b67ffffffffffffffff8111156121bd576121bd611a11565b6121d1816121cb8454611efd565b8461214a565b6000601f82116001811461220557600083156121ed5750848201545b600019600385901b1c1916600184901b17845561226a565b600085815260209020601f19841690600086815260209020845b8381101561223f578286015482556001958601959091019060200161221f565b508583101561225d5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b815167ffffffffffffffff81111561228b5761228b611a11565b612299816121cb8454611efd565b602080601f8311600181146122ce57600084156122b65750858301515b600019600386901b1c1916600185901b17855561159a565b600085815260208120601f198616915b828110156122fd578886015182559484019460019091019084016122de565b508582101561231b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212203c20d60b3688c4746f988dc74b8b4238d2ea704a050cfa1eb51d85c8e28d03b264736f6c63430008150033", + Bin: "0x6080604052600160ff1b600755600160ff1b6008553480156200002157600080fd5b5060405162002df838038062002df8833981016040819052620000449162000639565b600280546001600160a01b038087166001600160a01b03199283161790925560038054928616929091169190911790558151620000899060009060208501906200035f565b5081516200009f9060019060208501906200035f565b5080600981905550620000c485600060018851620000be91906200074e565b62000181565b8451620000d9906004906020880190620003bc565b508451620000ef906005906020880190620003bc565b5060016006819055600d8054909101815560009081525b855181101562000175576001600b60008884815181106200012b576200012b6200076a565b6020908102919091018101516001600160a01b03168252810191909152604001600020600201805460ff1916911515919091179055806200016c8162000780565b91505062000106565b505050505050620009c3565b8082126200018e57505050565b81816000856002620001a185856200079c565b620001ad9190620007c6565b620001b9908762000806565b81518110620001cc57620001cc6200076a565b602002602001015190505b8183136200032b575b806001600160a01b0316868481518110620001ff57620001ff6200076a565b60200260200101516001600160a01b031610156200022c5782620002238162000831565b935050620001e0565b806001600160a01b03168683815181106200024b576200024b6200076a565b60200260200101516001600160a01b031611156200027857816200026f816200084c565b9250506200022c565b81831362000325578582815181106200029557620002956200076a565b6020026020010151868481518110620002b257620002b26200076a565b6020026020010151878581518110620002cf57620002cf6200076a565b60200260200101888581518110620002eb57620002eb6200076a565b6001600160a01b0393841660209182029290920101529116905282620003118162000831565b935050818062000321906200084c565b9250505b620001d7565b8185121562000341576200034186868462000181565b8383121562000357576200035786848662000181565b505050505050565b828054828255906000526020600020908101928215620003aa579160200282015b82811115620003aa5782518290620003999082620008f7565b509160200191906001019062000380565b50620003b892915062000422565b5090565b82805482825590600052602060002090810192821562000414579160200282015b828111156200041457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003dd565b50620003b892915062000443565b80821115620003b85760006200043982826200045a565b5060010162000422565b5b80821115620003b8576000815560010162000444565b50805462000468906200086c565b6000825580601f1062000479575050565b601f01602090049060005260206000209081019062000499919062000443565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620004dd57620004dd6200049c565b604052919050565b60006001600160401b038211156200050157620005016200049c565b5060051b60200190565b80516001600160a01b03811681146200052357600080fd5b919050565b6000601f83818401126200053b57600080fd5b82516020620005546200054e83620004e5565b620004b2565b82815260059290921b850181019181810190878411156200057457600080fd5b8287015b848110156200062d5780516001600160401b03808211156200059a5760008081fd5b818a0191508a603f830112620005b05760008081fd5b8582015181811115620005c757620005c76200049c565b620005da818a01601f19168801620004b2565b915080825260408c81838601011115620005f45760008081fd5b60005b8281101562000614578481018201518482018a01528801620005f7565b5050600090820187015284525091830191830162000578565b50979650505050505050565b600080600080600060a086880312156200065257600080fd5b85516001600160401b03808211156200066a57600080fd5b818801915088601f8301126200067f57600080fd5b81516020620006926200054e83620004e5565b82815260059290921b8401810191818101908c841115620006b257600080fd5b948201945b83861015620006db57620006cb866200050b565b82529482019490820190620006b7565b9950620006ec90508a82016200050b565b97505050620006fe604089016200050b565b945060608801519150808211156200071557600080fd5b50620007248882890162000528565b925050608086015190509295509295909350565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000764576200076462000738565b92915050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000795576200079562000738565b5060010190565b8181036000831280158383131683831282161715620007bf57620007bf62000738565b5092915050565b600082620007e457634e487b7160e01b600052601260045260246000fd5b600160ff1b82146000198414161562000801576200080162000738565b500590565b808201828112600083128015821682158216171562000829576200082962000738565b505092915050565b60006001600160ff1b01820162000795576200079562000738565b6000600160ff1b820162000864576200086462000738565b506000190190565b600181811c908216806200088157607f821691505b602082108103620008a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008f257600081815260208120601f850160051c81016020861015620008d15750805b601f850160051c820191505b818110156200035757828155600101620008dd565b505050565b81516001600160401b038111156200091357620009136200049c565b6200092b816200092484546200086c565b84620008a8565b602080601f8311600181146200096357600084156200094a5750858301515b600019600386901b1c1916600185901b17855562000357565b600085815260208120601f198616915b82811015620009945788860151825594840194600190910190840162000973565b5085821015620009b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61242580620009d36000396000f3fe6080604052600436106101225760003560e01c80638d4f75d2116100a5578063b3ab15fb1161006c578063b3ab15fb1461038a578063b78dec52146103aa578063ccce413b146103bf578063cdd72253146103df578063df7f710e14610401578063e6a02a281461042357005b80638d4f75d2146103135780639670c0bc146103335780639f8743f714610349578063a78135871461035e578063aa2f89b51461037457005b80634bb278f3116100e95780634bb278f3146101fd5780634c56ea56146102225780635281b5c61461026a5780635412b3ae14610297578063845023f2146102f357005b806308f21ff51461012b578063146ca53114610154578063307de9b61461016a57806333f98c771461018a5780633c8510fd146101dd57005b3661012957005b005b34801561013757600080fd5b5061014160085481565b6040519081526020015b60405180910390f35b34801561016057600080fd5b5061014160065481565b34801561017657600080fd5b50610129610185366004611a3a565b610439565b34801561019657600080fd5b506101aa6101a5366004611b76565b610680565b60405161014b91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b3480156101e957600080fd5b506101aa6101f8366004611bab565b6107a3565b34801561020957600080fd5b506102126108ad565b604051901515815260200161014b565b34801561022e57600080fd5b5061014161023d366004611c0e565b8151602081840181018051600c825292820194820194909420919093529091526000908152604090205481565b34801561027657600080fd5b5061028a610285366004611c5c565b610a50565b60405161014b9190611cc5565b3480156102a357600080fd5b506102d66102b2366004611cdf565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161014b565b3480156102ff57600080fd5b5061012961030e366004611d1e565b610afc565b34801561031f57600080fd5b5061012961032e366004611dbb565b610ba5565b34801561033f57600080fd5b5062989680610141565b34801561035557600080fd5b50600654610141565b34801561036a57600080fd5b5061014160095481565b34801561038057600080fd5b5061014160075481565b34801561039657600080fd5b506101296103a5366004611cdf565b610d15565b3480156103b657600080fd5b50600954610141565b3480156103cb57600080fd5b5061028a6103da366004611c5c565b610d61565b3480156103eb57600080fd5b506103f4610d71565b60405161014b9190611e6c565b34801561040d57600080fd5b50610416610dd3565b60405161014b9190611f0e565b34801561042f57600080fd5b50610141600a5481565b336000908152600b602052604090206002015460ff166104a05760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f746572730000000000000060448201526064015b60405180910390fd5b600654336000908152600b6020526040902054036104f05760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610497565b336000908152600b602052604081206001810180549087905581546006549092559181900361052057505061067a565b600054841461053057505061067a565b600160065461053f9190611f37565b8114158061057c57508484843360405160200161055f9493929190611f4a565b6040516020818303038152906040528051906020012060001c8214155b156105f85760005b6000548110156105f0576001600160ff1b03600c600083815481106105ab576105ab611f95565b906000526020600020016040516105c29190611fe5565b90815260408051602092819003830190203360009081529252902055806105e88161205b565b915050610584565b50505061067a565b60005b848110156106765785858281811061061557610615611f95565b90506020020135600c6000838154811061063157610631611f95565b906000526020600020016040516106489190611fe5565b908152604080516020928190038301902033600090815292529020558061066e8161205b565b9150506105fb565b5050505b50505050565b6106ab6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000600d60016006546106be9190611f37565b815481106106ce576106ce611f95565b90600052602060002001836040516106e69190612074565b908152602001604051809103902060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff16600181111561073757610737612090565b600181111561074857610748612090565b81525050905060006040518060800160405280600160065461076a9190611f37565b815260200183600001518152602001836020015181526020018360400151600181111561079957610799612090565b9052949350505050565b6107ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000600d84815481106107e3576107e3611f95565b90600052602060002001836040516107fb9190612074565b908152602001604051809103902060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff16600181111561084c5761084c612090565b600181111561085d5761085d612090565b815250509050600060405180608001604052808681526020018360000151815260200183602001518152602001836040015160018111156108a0576108a0612090565b9052925050505b92915050565b6002546000906001600160a01b031633146108da5760405162461bcd60e51b8152600401610497906120a6565b600954600a546108ea91906120e9565b4310610a4a5760005b6000548110156109185761090681610f91565b6109116001826120e9565b90506108f3565b50600654600754036109955760005b600554811015610993576001600b60006005848154811061094a5761094a611f95565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600201805460ff19169115159190911790558061098b8161205b565b915050610927565b505b6006546007546109a69060016120fc565b036109b3576109b36112c6565b43600a819055506001600660008282546109cd91906120e9565b90915550506008546109e09060026120fc565b600654036109fa57600180546109f89160009161188c565b505b60065460095460408051928352436020840152429083015260608201527fb5d8636ab45e6cac7a4a61cb7c77f77f61a454d73aa2e6139ff8dcaf463537e59060800160405180910390a150600190565b50600090565b60018181548110610a6057600080fd5b906000526020600020016000915090508054610a7b90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa790611fab565b8015610af45780601f10610ac957610100808354040283529160200191610af4565b820191906000526020600020905b815481529060010190602001808311610ad757829003601f168201915b505050505081565b6002546001600160a01b03163314610b265760405162461bcd60e51b8152600401610497906120a6565b8051600003610b6f5760405162461bcd60e51b8152602060048201526015602482015274566f746572732063616e277420626520656d70747960581b6044820152606401610497565b610b8881600060018451610b839190611f37565b6114a3565b8051610b9b9060059060208401906118e4565b5050600654600755565b6003546001600160a01b03163314610bf85760405162461bcd60e51b81526020600482015260166024820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b6044820152606401610497565b8051600003610c425760405162461bcd60e51b815260206004820152601660248201527573796d626f6c732063616e277420626520656d70747960501b6044820152606401610497565b600654600854610c539060016120fc565b14158015610c65575060065460085414155b610cb15760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e6400006044820152606401610497565b8051610cc4906001906020840190611945565b5060065460088190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d908290610cfc9060016120e9565b604051610d0a929190612124565b60405180910390a150565b6002546001600160a01b03163314610d3f5760405162461bcd60e51b8152600401610497906120a6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60008181548110610a6057600080fd5b60606005805480602002602001604051908101604052809291908181526020018280548015610dc957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dab575b5050505050905090565b60606006546008546001610de791906120fc565b03610ec3576001805480602002602001604051908101604052809291908181526020016000905b82821015610eba578382906000526020600020018054610e2d90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5990611fab565b8015610ea65780601f10610e7b57610100808354040283529160200191610ea6565b820191906000526020600020905b815481529060010190602001808311610e8957829003601f168201915b505050505081526020019060010190610e0e565b50505050905090565b6000805480602002602001604051908101604052809291908181526020016000905b82821015610eba578382906000526020600020018054610f0490611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090611fab565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081526020019060010190610ee5565b6000808281548110610fa557610fa5611f95565b906000526020600020018054610fba90611fab565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe690611fab565b80156110335780601f1061100857610100808354040283529160200191611033565b820191906000526020600020905b81548152906001019060200180831161101657829003601f168201915b50505050509050600060048054905067ffffffffffffffff81111561105a5761105a611abf565b604051908082528060200260200182016040528015611083578160200160208202803683370190505b5090506000805b60045481101561119a576000600482815481106110a9576110a9611f95565b60009182526020808320909101546006546001600160a01b03909116808452600b90925260409092205490925014158061111d57506001600160ff1b03600c866040516110f69190612074565b90815260408051602092819003830190206001600160a01b03851660009081529252902054145b156111285750611188565b600c856040516111389190612074565b90815260408051602092819003830190206001600160a01b0384166000908152925290205484846111688161205b565b95508151811061117a5761117a611f95565b602002602001018181525050505b806111928161205b565b91505061108a565b506000600d60016006546111ae9190611f37565b815481106111be576111be611f95565b90600052602060002001846040516111d69190612074565b90815260405190819003602001902054905060018215611201576111fa8484611650565b9150600090505b600d805460019081018255600091909152604080516060810182528481524260208201529190820190839081111561123b5761123b612090565b815250600d6006548154811061125357611253611f95565b906000526020600020018660405161126b9190612074565b9081526020016040518091039020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908360018111156112b7576112b7612090565b02179055505050505050505050565b6000805b600454821080156112dc575060055481105b1561142157600581815481106112f4576112f4611f95565b600091825260209091200154600480546001600160a01b03909216918490811061132057611320611f95565b6000918252602090912001546001600160a01b03160361135a57816113448161205b565b92505080806113529061205b565b9150506112ca565b6005818154811061136d5761136d611f95565b600091825260209091200154600480546001600160a01b03909216918490811061139957611399611f95565b6000918252602090912001546001600160a01b0316101561141757600b6000600484815481106113cb576113cb611f95565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff191690558161140f8161205b565b9250506112ca565b806113528161205b565b60045482101561148e57600b60006004848154811061144257611442611f95565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810191909155600201805460ff19169055816114868161205b565b925050611421565b6005805461149e9160049161198b565b505050565b8082126114af57505050565b818160008560026114c08585612146565b6114ca9190612183565b6114d490876120fc565b815181106114e4576114e4611f95565b602002602001015190505b818313611622575b806001600160a01b031686848151811061151357611513611f95565b60200260200101516001600160a01b0316101561153c5782611534816121b1565b9350506114f7565b806001600160a01b031686838151811061155857611558611f95565b60200260200101516001600160a01b031611156115815781611579816121c9565b92505061153c565b81831361161d5785828151811061159a5761159a611f95565b60200260200101518684815181106115b4576115b4611f95565b60200260200101518785815181106115ce576115ce611f95565b602002602001018885815181106115e7576115e7611f95565b6001600160a01b039384166020918202929092010152911690528261160b816121b1565b9350508180611619906121c9565b9250505b6114ef565b81851215611635576116358686846114a3565b83831215611648576116488684866114a3565b505050505050565b600081600003611662575060006108a7565b611678836000611673600186611f37565b611714565b60006116856002846121e6565b90506116926002846121fa565b156116b6578381815181106116a9576116a9611f95565b602002602001015161170c565b60028482815181106116ca576116ca611f95565b6020026020010151856001846116e09190611f37565b815181106116f0576116f0611f95565b602002602001015161170291906120fc565b61170c9190612183565b949350505050565b8181808203611724575050505050565b60008560026117338787612146565b61173d9190612183565b61174790876120fc565b8151811061175757611757611f95565b602002602001015190505b818313611866575b8086848151811061177d5761177d611f95565b6020026020010151121561179d5782611795816121b1565b93505061176a565b8582815181106117af576117af611f95565b60200260200101518112156117d057816117c8816121c9565b92505061179d565b818313611861578582815181106117e9576117e9611f95565b602002602001015186848151811061180357611803611f95565b602002602001015187858151811061181d5761181d611f95565b6020026020010188858151811061183657611836611f95565b6020908102919091010191909152528161184f816121c9565b925050828061185d906121b1565b9350505b611762565b8185121561187957611879868684611714565b8383121561164857611648868486611714565b8280548282559060005260206000209081019282156118d45760005260206000209182015b828111156118d457816118c48482612254565b50916001019190600101906118b1565b506118e09291506119cb565b5090565b828054828255906000526020600020908101928215611939579160200282015b8281111561193957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611904565b506118e09291506119e8565b8280548282559060005260206000209081019282156118d4579160200282015b828111156118d4578251829061197b9082612335565b5091602001919060010190611965565b8280548282559060005260206000209081019282156119395760005260206000209182015b828111156119395782548255916001019190600101906119b0565b808211156118e05760006119df82826119fd565b506001016119cb565b5b808211156118e057600081556001016119e9565b508054611a0990611fab565b6000825580601f10611a19575050565b601f016020900490600052602060002090810190611a3791906119e8565b50565b60008060008060608587031215611a5057600080fd5b84359350602085013567ffffffffffffffff80821115611a6f57600080fd5b818701915087601f830112611a8357600080fd5b813581811115611a9257600080fd5b8860208260051b8501011115611aa757600080fd5b95986020929092019750949560400135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611afe57611afe611abf565b604052919050565b600082601f830112611b1757600080fd5b813567ffffffffffffffff811115611b3157611b31611abf565b611b44601f8201601f1916602001611ad5565b818152846020838601011115611b5957600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611b8857600080fd5b813567ffffffffffffffff811115611b9f57600080fd5b61170c84828501611b06565b60008060408385031215611bbe57600080fd5b82359150602083013567ffffffffffffffff811115611bdc57600080fd5b611be885828601611b06565b9150509250929050565b80356001600160a01b0381168114611c0957600080fd5b919050565b60008060408385031215611c2157600080fd5b823567ffffffffffffffff811115611c3857600080fd5b611c4485828601611b06565b925050611c5360208401611bf2565b90509250929050565b600060208284031215611c6e57600080fd5b5035919050565b60005b83811015611c90578181015183820152602001611c78565b50506000910152565b60008151808452611cb1816020860160208601611c75565b601f01601f19169290920160200192915050565b602081526000611cd86020830184611c99565b9392505050565b600060208284031215611cf157600080fd5b611cd882611bf2565b600067ffffffffffffffff821115611d1457611d14611abf565b5060051b60200190565b60006020808385031215611d3157600080fd5b823567ffffffffffffffff811115611d4857600080fd5b8301601f81018513611d5957600080fd5b8035611d6c611d6782611cfa565b611ad5565b81815260059190911b82018301908381019087831115611d8b57600080fd5b928401925b82841015611db057611da184611bf2565b82529284019290840190611d90565b979650505050505050565b60006020808385031215611dce57600080fd5b823567ffffffffffffffff80821115611de657600080fd5b818501915085601f830112611dfa57600080fd5b8135611e08611d6782611cfa565b81815260059190911b83018401908481019088831115611e2757600080fd5b8585015b83811015611e5f57803585811115611e435760008081fd5b611e518b89838a0101611b06565b845250918601918601611e2b565b5098975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611ead5783516001600160a01b031683529284019291840191600101611e88565b50909695505050505050565b600081518084526020808501808196508360051b8101915082860160005b85811015611f01578284038952611eef848351611c99565b98850198935090840190600101611ed7565b5091979650505050505050565b602081526000611cd86020830184611eb9565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a7576108a7611f21565b60008186825b87811015611f6e578135835260209283019290910190600101611f50565b5050938452505060601b6bffffffffffffffffffffffff1916602082015260340192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680611fbf57607f821691505b602082108103611fdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354611ff381611fab565b6001828116801561200b57600181146120205761204f565b60ff198416875282151583028701945061204f565b8760005260208060002060005b858110156120465781548a82015290840190820161202d565b50505082870194505b50929695505050505050565b60006001820161206d5761206d611f21565b5060010190565b60008251612086818460208701611c75565b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b60208082526023908201527f7265737472696374656420746f20746865206175746f6e69747920636f6e74726040820152621858dd60ea1b606082015260800190565b808201808211156108a7576108a7611f21565b808201828112600083128015821682158216171561211c5761211c611f21565b505092915050565b6040815260006121376040830185611eb9565b90508260208301529392505050565b818103600083128015838313168383128216171561216657612166611f21565b5092915050565b634e487b7160e01b600052601260045260246000fd5b6000826121925761219261216d565b600160ff1b8214600019841416156121ac576121ac611f21565b500590565b60006001600160ff1b01820161206d5761206d611f21565b6000600160ff1b82016121de576121de611f21565b506000190190565b6000826121f5576121f561216d565b500490565b6000826122095761220961216d565b500690565b601f82111561149e57600081815260208120601f850160051c810160208610156122355750805b601f850160051c820191505b8181101561164857828155600101612241565b81810361225f575050565b6122698254611fab565b67ffffffffffffffff81111561228157612281611abf565b6122958161228f8454611fab565b8461220e565b6000601f8211600181146122c957600083156122b15750848201545b600019600385901b1c1916600184901b17845561232e565b600085815260209020601f19841690600086815260209020845b8381101561230357828601548255600195860195909101906020016122e3565b50858310156123215781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b815167ffffffffffffffff81111561234f5761234f611abf565b61235d8161228f8454611fab565b602080601f831160018114612392576000841561237a5750858301515b600019600386901b1c1916600185901b178555611648565b600085815260208120601f198616915b828110156123c1578886015182559484019460019091019084016123a2565b50858210156123df5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122068031b136be48d163f8475c337216a54400c89da096cc3efb3384bf7d9c52f0d64736f6c63430008150033", } // OracleABI is the input ABI used to generate the binding from. @@ -10695,7 +10937,7 @@ func (_Oracle *Oracle) GetRound(opts *runOptions) (*big.Int, uint64, error) { // GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd. // -// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *Oracle) GetRoundData(opts *runOptions, _round *big.Int, _symbol string) (IOracleRoundData, uint64, error) { out, consumed, err := _Oracle.call(opts, "getRoundData", _round, _symbol) @@ -10785,7 +11027,7 @@ func (_Oracle *Oracle) LastVoterUpdateRound(opts *runOptions) (*big.Int, uint64, // LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77. // -// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,bool) data) +// Solidity: function latestRoundData(string _symbol) view returns((uint256,int256,uint256,uint256) data) func (_Oracle *Oracle) LatestRoundData(opts *runOptions, _symbol string) (IOracleRoundData, uint64, error) { out, consumed, err := _Oracle.call(opts, "latestRoundData", _symbol) @@ -11607,7 +11849,7 @@ var StabilizationMetaData = &bind.MetaData{ "fbbe6991": "underCollateralized(uint256,uint256,uint256,uint256)", "2e1a7d4d": "withdraw(uint256)", }, - Bin: "0x60806040523480156200001157600080fd5b506040516200270b3803806200270b83398101604081905262000034916200012e565b8560400151806000036200005b57604051630309cb8760e51b815260040160405180910390fd5b866020015187604001518082106200008657604051630309cb8760e51b815260040160405180910390fd5b5050865160005550602086015160015560408601516002556060860151600355608090950151600455600780546001600160a01b03199081166001600160a01b039687161790915560088054821694861694909417909355600a8054841692851692909217909155600b8054831691841691909117905560098054909116919092161790556200021c565b80516001600160a01b03811681146200012957600080fd5b919050565b6000806000806000808688036101408112156200014a57600080fd5b60a08112156200015957600080fd5b5060405160a081016001600160401b03811182821017156200018b57634e487b7160e01b600052604160045260246000fd5b8060405250875181526020880151602082015260408801516040820152606088015160608201526080880151608082015280965050620001ce60a0880162000111565b9450620001de60c0880162000111565b9350620001ee60e0880162000111565b9250620001ff610100880162000111565b915062000210610120880162000111565b90509295509295509295565b6124df806200022c6000396000f3fe6080604052600436106101665760003560e01c806368cd03f6116100d1578063946ce8cd1161008a578063c5ebeaec11610064578063c5ebeaec1461046b578063ce4b5bbe1461048b578063eced5526146104a0578063fbbe6991146104b557600080fd5b8063946ce8cd1461040b578063b3ab15fb1461042b578063b6b55f251461044b57600080fd5b806368cd03f6146102d857806379502c55146102fa5780637adbf973146103495780637b44646a1461036957806383baa17414610389578063840c7e24146103a957600080fd5b806350bf06bf1161012357806350bf06bf1461022b57806352e5a0501461024b57806353afe81d1461026b57806354a9f42c1461028b5780635891de72146102ab5780635dcc9391146102c057600080fd5b8063042e02cf1461016b57806308796696146101a057806315184245146101ce5780632e1a7d4d146101ee5780632f86556814610210578063402d888314610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461211b565b6104d5565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612136565b61051d565b604051908152602001610197565b3480156101da57600080fd5b506101c06101e9366004612162565b610587565b3480156101fa57600080fd5b5061020e610209366004612194565b610617565b005b61020e61021e36600461211b565b6107e5565b61020e610a27565b34801561023757600080fd5b506101c06102463660046121ad565b610bff565b34801561025757600080fd5b5061020e61026636600461211b565b610c6b565b34801561027757600080fd5b5061020e610286366004612194565b610cb7565b34801561029757600080fd5b506101c06102a636600461211b565b610ce6565b3480156102b757600080fd5b506101c0610d5d565b3480156102cc57600080fd5b506101c06301e1338081565b3480156102e457600080fd5b506102ed610ffc565b60405161019791906121d7565b34801561030657600080fd5b50600054600154600254600354600454610321949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610197565b34801561035557600080fd5b5061020e61036436600461211b565b61105e565b34801561037557600080fd5b5061020e610384366004612194565b6110aa565b34801561039557600080fd5b506101c06103a4366004612162565b611122565b3480156103b557600080fd5b506103eb6103c436600461211b565b60056020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610197565b34801561041757600080fd5b5061020e610426366004612194565b611178565b34801561043757600080fd5b5061020e61044636600461211b565b6111ce565b34801561045757600080fd5b5061020e610466366004612194565b61121a565b34801561047757600080fd5b5061020e610486366004612194565b611419565b34801561049757600080fd5b506101c06115e5565b3480156104ac57600080fd5b506101c0601281565b3480156104c157600080fd5b5061018b6104d0366004612162565b6115f4565b6001600160a01b0381166000908152600560205260408120816104f8824261164b565b509050610515826001015461050b610d5d565b60015484906115f4565b949350505050565b600082806000036105405760405162bfc92160e01b815260040160405180910390fd5b83158061054b575082155b1561056957604051630309cb8760e51b815260040160405180910390fd5b83610574848761223a565b61057e9190612267565b95945050505050565b6000818311156105aa57604051630309cb8760e51b815260040160405180910390fd5b848460006105cc6301e133806105c66105c38989612289565b90565b906116c1565b905060006105e26105dd84846116e0565b6116ef565b905060006106096106026105fb6105c36012600a612380565b8490611742565b86906116e0565b9a9950505050505050505050565b80806000036106395760405163162908e360e11b815260040160405180910390fd5b336000908152600560205260409020600181015483111561066d5760405163162908e360e11b815260040160405180910390fd5b6000610679824261164b565b5090506000610686610d5d565b905061069d836001015482846000600101546115f4565b156106bb57604051636229415360e01b815260040160405180910390fd5b6106cf83600201548260006002015461051d565b8584600101546106df9190612289565b10156106fe57604051633a23d82560e01b815260040160405180910390fd5b848360010160008282546107129190612289565b909155505060095460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c919061239c565b6107a9576040516312171d8360e31b815260040160405180910390fd5b60405185815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050505050565b3460000361080657604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b0381166000908152600560205260408120600281015490910361084357604051638aa5baf360e01b815260040160405180910390fd5b600080610850834261164b565b9150915061086e8360010154610864610d5d565b60015485906115f4565b61088b57604051636ef5bcdd60e11b815260040160405180910390fd5b60006108978334612289565b905060018401805442865560009182905560028601829055600386019190915560095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061239c565b610949576040516312171d8360e31b815260040160405180910390fd5b600b546001600160a01b03166344df8e706109648587612289565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050505060008211156109e057604051339083156108fc029084906000818181858888f193505050501580156109de573d6000803e3d6000fd5b505b6040513381526001600160a01b038716907fc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4906020015b60405180910390a2505050505050565b34600003610a4857604051637c946ed760e01b815260040160405180910390fd5b3360009081526005602052604081206002810154909103610a7c57604051638aa5baf360e01b815260040160405180910390fd5b600080610a89834261164b565b915091508134108015610aa65750600354610aa43484612289565b105b15610ac45760405163e6bd447960e01b815260040160405180910390fd5b80836003016000828254610ad891906123b7565b909155505042835560008080610aee8634611751565b92509250925081866002016000828254610b089190612289565b9250508190555082866003016000828254610b239190612289565b90915550508115610b9857600b60009054906101000a90046001600160a01b03166001600160a01b03166344df8e70836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7e57600080fd5b505af1158015610b92573d6000803e3d6000fd5b50505050505b8015610bcd57604051339082156108fc029083906000818181858888f19350505050158015610bcb573d6000803e3d6000fd5b505b60405134815233907f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a59423190602001610a17565b6001600160a01b0382166000908152600560205260408120805484918491821015610c3d57604051630309cb8760e51b815260040160405180910390fd5b6001600160a01b0386166000908152600560205260409020610c5f818761164b565b50979650505050505050565b6008546001600160a01b03163314610c95576040516282b42960e81b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610ce1576040516282b42960e81b815260040160405180910390fd5b600355565b6040516350bf06bf60e01b81526001600160a01b038216600482015242602482015260009030906350bf06bf90604401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5791906123ca565b92915050565b600a546040805180820182526007815266272a2716a0aa2760c91b602082015290516333f98c7760e01b815260009283926001600160a01b03909116916333f98c7791610dac916004016123e3565b608060405180830381865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190612431565b90508060600151610e115760405163cb08be8160e01b815260040160405180910390fd5b6000816020015113610e355760405162bfc92160e01b815260040160405180910390fd5b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac91906123ca565b610eb86012600a612380565b1115610f6057600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3591906123ca565b610f416012600a612380565b610f4b9190612267565b8160200151610f5a919061223a565b91505090565b610f6c6012600a612380565b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906123ca565b610fed9190612267565b8160200151610f5a9190612267565b6060600680548060200260200160405190810160405280929190818152602001828054801561105457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611036575b5050505050905090565b6007546001600160a01b03163314611088576040516282b42960e81b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b80806000036110cc57604051630309cb8760e51b815260040160405180910390fd5b600154828082106110f057604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b0316331461111a576040516282b42960e81b815260040160405180910390fd5b505050600255565b600083158061112f575081155b1561114d57604051630309cb8760e51b815260040160405180910390fd5b6111596012600a612380565b611163908361223a565b8361116e868861223a565b610574919061223a565b600254819080821061119d57604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b031633146111c7576040516282b42960e81b815260040160405180910390fd5b5050600155565b6007546001600160a01b031633146111f8576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b808060000361123c5760405163162908e360e11b815260040160405180910390fd5b600954604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae91906123ca565b10156112cd576040516313be252b60e01b815260040160405180910390fd5b336000908152600560205260408120805490910361132857600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b4281556001810180548491906000906113429084906123b7565b90915550506009546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c2919061239c565b6113df576040516312171d8360e31b815260040160405180910390fd5b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2505050565b808060000361143b5760405163162908e360e11b815260040160405180910390fd5b3360009081526005602052604081209080611456834261164b565b909250905061146585836123b7565b60035490925082101561148b5760405163e6bd447960e01b815260040160405180910390fd5b6000611495610d5d565b90506114ac846001015482856000600101546115f4565b156114ca57604051636229415360e01b815260040160405180910390fd5b60006114e6856001015483600060040154600060020154611122565b90508084111561150957604051633a23d82560e01b815260040160405180910390fd5b4285556002850180548891906000906115239084906123b7565b925050819055508285600301600082825461153e91906123b7565b9091555050600b546040516340c10f1960e01b8152336004820152602481018990526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b50506040518981523392507fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750915060200160405180910390a250505050505050565b6115f16012600a612380565b81565b600083806000036116175760405162bfc92160e01b815260040160405180910390fd5b836000036116285760009150611642565b8284611634878961223a565b61163e9190612267565b1091505b50949350505050565b6000808260000361166f57604051630309cb8760e51b815260040160405180910390fd5b60008460030154856002015461168591906123b7565b8554909150840361169957600091506116ad565b60005485546116aa91839187610587565b91505b6116b782826123b7565b9250509250929050565b60006116d96105c384670de0b6b3a7640000856117c5565b9392505050565b60006116d96105c38484611898565b600081680736ea4425c11ac63081111561172457604051630d7b1d6560e11b8152600481018490526024015b60405180910390fd5b6714057b7ef767814f8102610515670de0b6b3a7640000820461194e565b60006116d96105c38385612289565b6000806000808560030154866002015461176b91906123b7565b905085600301548510611782578560030154611784565b845b93508085106117975785600201546117a1565b6117a18486612289565b92508085116117b15760006117bb565b6117bb8186612289565b9150509250925092565b60008080600019858709858702925082811083820303915050806000036117ff578382816117f5576117f5612251565b04925050506116d9565b83811061183057604051630c740aef60e31b815260048101879052602481018690526044810185905260640161171b565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008080600019848609848602925082811083820303915050806000036118cc5750670de0b6b3a764000090049050610d57565b670de0b6b3a764000081106118fe57604051635173648d60e01b8152600481018690526024810185905260440161171b565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600081680a688906bd8affffff81111561197e5760405163b3b6ba1f60e01b81526004810184905260240161171b565b6000611996670de0b6b3a7640000604084901b612267565b90506105156105c382600160bf1b67ff00000000000000821615611aac576780000000000000008216156119d35768016a09e667f3bcc9090260401c5b6740000000000000008216156119f2576801306fe0a31b7152df0260401c5b672000000000000000821615611a11576801172b83c7d517adce0260401c5b671000000000000000821615611a305768010b5586cf9890f62a0260401c5b670800000000000000821615611a4f576801059b0d31585743ae0260401c5b670400000000000000821615611a6e57680102c9a3e778060ee70260401c5b670200000000000000821615611a8d5768010163da9fb33356d80260401c5b670100000000000000821615611aac57680100b1afa5abcbed610260401c5b66ff000000000000821615611bab576680000000000000821615611ad95768010058c86da1c09ea20260401c5b6640000000000000821615611af7576801002c605e2e8cec500260401c5b6620000000000000821615611b1557680100162f3904051fa10260401c5b6610000000000000821615611b33576801000b175effdc76ba0260401c5b6608000000000000821615611b5157680100058ba01fb9f96d0260401c5b6604000000000000821615611b6f5768010002c5cc37da94920260401c5b6602000000000000821615611b8d576801000162e525ee05470260401c5b6601000000000000821615611bab5768010000b17255775c040260401c5b65ff0000000000821615611ca15765800000000000821615611bd6576801000058b91b5bc9ae0260401c5b65400000000000821615611bf357680100002c5c89d5ec6d0260401c5b65200000000000821615611c105768010000162e43f4f8310260401c5b65100000000000821615611c2d57680100000b1721bcfc9a0260401c5b65080000000000821615611c4a5768010000058b90cf1e6e0260401c5b65040000000000821615611c67576801000002c5c863b73f0260401c5b65020000000000821615611c8457680100000162e430e5a20260401c5b65010000000000821615611ca1576801000000b1721835510260401c5b64ff00000000821615611d8e57648000000000821615611cca57680100000058b90c0b490260401c5b644000000000821615611ce65768010000002c5c8601cc0260401c5b642000000000821615611d02576801000000162e42fff00260401c5b641000000000821615611d1e5768010000000b17217fbb0260401c5b640800000000821615611d3a576801000000058b90bfce0260401c5b640400000000821615611d5657680100000002c5c85fe30260401c5b640200000000821615611d725768010000000162e42ff10260401c5b640100000000821615611d8e57680100000000b17217f80260401c5b63ff000000821615611e72576380000000821615611db55768010000000058b90bfc0260401c5b6340000000821615611dd0576801000000002c5c85fe0260401c5b6320000000821615611deb57680100000000162e42ff0260401c5b6310000000821615611e06576801000000000b17217f0260401c5b6308000000821615611e2157680100000000058b90c00260401c5b6304000000821615611e3c5768010000000002c5c8600260401c5b6302000000821615611e57576801000000000162e4300260401c5b6301000000821615611e725768010000000000b172180260401c5b62ff0000821615611f4d5762800000821615611e97576801000000000058b90c0260401c5b62400000821615611eb157680100000000002c5c860260401c5b62200000821615611ecb5768010000000000162e430260401c5b62100000821615611ee557680100000000000b17210260401c5b62080000821615611eff5768010000000000058b910260401c5b62040000821615611f19576801000000000002c5c80260401c5b62020000821615611f3357680100000000000162e40260401c5b62010000821615611f4d576801000000000000b1720260401c5b61ff0082161561201f57618000821615611f7057680100000000000058b90260401c5b614000821615611f895768010000000000002c5d0260401c5b612000821615611fa2576801000000000000162e0260401c5b611000821615611fbb5768010000000000000b170260401c5b610800821615611fd4576801000000000000058c0260401c5b610400821615611fed57680100000000000002c60260401c5b61020082161561200657680100000000000001630260401c5b61010082161561201f57680100000000000000b10260401c5b60ff8216156120e857608082161561204057680100000000000000590260401c5b6040821615612058576801000000000000002c0260401c5b602082161561207057680100000000000000160260401c5b6010821615612088576801000000000000000b0260401c5b60088216156120a057680100000000000000060260401c5b60048216156120b857680100000000000000030260401c5b60028216156120d057680100000000000000010260401c5b60018216156120e857680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b038116811461211657600080fd5b919050565b60006020828403121561212d57600080fd5b6116d9826120ff565b60008060006060848603121561214b57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561217857600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156121a657600080fd5b5035919050565b600080604083850312156121c057600080fd5b6121c9836120ff565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156122185783516001600160a01b0316835292840192918401916001016121f3565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d5757610d57612224565b634e487b7160e01b600052601260045260246000fd5b60008261228457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d5757610d57612224565b600181815b808511156122d75781600019048211156122bd576122bd612224565b808516156122ca57918102915b93841c93908002906122a1565b509250929050565b6000826122ee57506001610d57565b816122fb57506000610d57565b8160018114612311576002811461231b57612337565b6001915050610d57565b60ff84111561232c5761232c612224565b50506001821b610d57565b5060208310610133831016604e8410600b841016171561235a575081810a610d57565b612364838361229c565b806000190482111561237857612378612224565b029392505050565b60006116d983836122df565b8051801515811461211657600080fd5b6000602082840312156123ae57600080fd5b6116d98261238c565b80820180821115610d5757610d57612224565b6000602082840312156123dc57600080fd5b5051919050565b600060208083528351808285015260005b81811015612410578581018301518582016040015282016123f4565b506000604082860101526040601f19601f8301168501019250505092915050565b60006080828403121561244357600080fd5b6040516080810181811067ffffffffffffffff8211171561247457634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015261249d6060840161238c565b6060820152939250505056fea26469706673582212205e4bfdf4203cb01af8837cfd66ec92911a19965cd9945a1f62ad7f992027f06c64736f6c63430008150033", + Bin: "0x60806040523480156200001157600080fd5b50604051620027013803806200270183398101604081905262000034916200012e565b8560400151806000036200005b57604051630309cb8760e51b815260040160405180910390fd5b866020015187604001518082106200008657604051630309cb8760e51b815260040160405180910390fd5b5050865160005550602086015160015560408601516002556060860151600355608090950151600455600780546001600160a01b03199081166001600160a01b039687161790915560088054821694861694909417909355600a8054841692851692909217909155600b8054831691841691909117905560098054909116919092161790556200021c565b80516001600160a01b03811681146200012957600080fd5b919050565b6000806000806000808688036101408112156200014a57600080fd5b60a08112156200015957600080fd5b5060405160a081016001600160401b03811182821017156200018b57634e487b7160e01b600052604160045260246000fd5b8060405250875181526020880151602082015260408801516040820152606088015160608201526080880151608082015280965050620001ce60a0880162000111565b9450620001de60c0880162000111565b9350620001ee60e0880162000111565b9250620001ff610100880162000111565b915062000210610120880162000111565b90509295509295509295565b6124d5806200022c6000396000f3fe6080604052600436106101665760003560e01c806368cd03f6116100d1578063946ce8cd1161008a578063c5ebeaec11610064578063c5ebeaec1461046b578063ce4b5bbe1461048b578063eced5526146104a0578063fbbe6991146104b557600080fd5b8063946ce8cd1461040b578063b3ab15fb1461042b578063b6b55f251461044b57600080fd5b806368cd03f6146102d857806379502c55146102fa5780637adbf973146103495780637b44646a1461036957806383baa17414610389578063840c7e24146103a957600080fd5b806350bf06bf1161012357806350bf06bf1461022b57806352e5a0501461024b57806353afe81d1461026b57806354a9f42c1461028b5780635891de72146102ab5780635dcc9391146102c057600080fd5b8063042e02cf1461016b57806308796696146101a057806315184245146101ce5780632e1a7d4d146101ee5780632f86556814610210578063402d888314610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461211e565b6104d5565b60405190151581526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004612139565b61051d565b604051908152602001610197565b3480156101da57600080fd5b506101c06101e9366004612165565b610587565b3480156101fa57600080fd5b5061020e610209366004612197565b610617565b005b61020e61021e36600461211e565b6107e5565b61020e610a27565b34801561023757600080fd5b506101c06102463660046121b0565b610bff565b34801561025757600080fd5b5061020e61026636600461211e565b610c6b565b34801561027757600080fd5b5061020e610286366004612197565b610cb7565b34801561029757600080fd5b506101c06102a636600461211e565b610ce6565b3480156102b757600080fd5b506101c0610d5d565b3480156102cc57600080fd5b506101c06301e1338081565b3480156102e457600080fd5b506102ed610fff565b60405161019791906121da565b34801561030657600080fd5b50600054600154600254600354600454610321949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610197565b34801561035557600080fd5b5061020e61036436600461211e565b611061565b34801561037557600080fd5b5061020e610384366004612197565b6110ad565b34801561039557600080fd5b506101c06103a4366004612165565b611125565b3480156103b557600080fd5b506103eb6103c436600461211e565b60056020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610197565b34801561041757600080fd5b5061020e610426366004612197565b61117b565b34801561043757600080fd5b5061020e61044636600461211e565b6111d1565b34801561045757600080fd5b5061020e610466366004612197565b61121d565b34801561047757600080fd5b5061020e610486366004612197565b61141c565b34801561049757600080fd5b506101c06115e8565b3480156104ac57600080fd5b506101c0601281565b3480156104c157600080fd5b5061018b6104d0366004612165565b6115f7565b6001600160a01b0381166000908152600560205260408120816104f8824261164e565b509050610515826001015461050b610d5d565b60015484906115f7565b949350505050565b600082806000036105405760405162bfc92160e01b815260040160405180910390fd5b83158061054b575082155b1561056957604051630309cb8760e51b815260040160405180910390fd5b83610574848761223d565b61057e919061226a565b95945050505050565b6000818311156105aa57604051630309cb8760e51b815260040160405180910390fd5b848460006105cc6301e133806105c66105c3898961228c565b90565b906116c4565b905060006105e26105dd84846116e3565b6116f2565b905060006106096106026105fb6105c36012600a612383565b8490611745565b86906116e3565b9a9950505050505050505050565b80806000036106395760405163162908e360e11b815260040160405180910390fd5b336000908152600560205260409020600181015483111561066d5760405163162908e360e11b815260040160405180910390fd5b6000610679824261164e565b5090506000610686610d5d565b905061069d836001015482846000600101546115f7565b156106bb57604051636229415360e01b815260040160405180910390fd5b6106cf83600201548260006002015461051d565b8584600101546106df919061228c565b10156106fe57604051633a23d82560e01b815260040160405180910390fd5b84836001016000828254610712919061228c565b909155505060095460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c919061238f565b6107a9576040516312171d8360e31b815260040160405180910390fd5b60405185815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050505050565b3460000361080657604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b0381166000908152600560205260408120600281015490910361084357604051638aa5baf360e01b815260040160405180910390fd5b600080610850834261164e565b9150915061086e8360010154610864610d5d565b60015485906115f7565b61088b57604051636ef5bcdd60e11b815260040160405180910390fd5b6000610897833461228c565b905060018401805442865560009182905560028601829055600386019190915560095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c919061238f565b610949576040516312171d8360e31b815260040160405180910390fd5b600b546001600160a01b03166344df8e70610964858761228c565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561098f57600080fd5b505af11580156109a3573d6000803e3d6000fd5b505050505060008211156109e057604051339083156108fc029084906000818181858888f193505050501580156109de573d6000803e3d6000fd5b505b6040513381526001600160a01b038716907fc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4906020015b60405180910390a2505050505050565b34600003610a4857604051637c946ed760e01b815260040160405180910390fd5b3360009081526005602052604081206002810154909103610a7c57604051638aa5baf360e01b815260040160405180910390fd5b600080610a89834261164e565b915091508134108015610aa65750600354610aa4348461228c565b105b15610ac45760405163e6bd447960e01b815260040160405180910390fd5b80836003016000828254610ad891906123b1565b909155505042835560008080610aee8634611754565b92509250925081866002016000828254610b08919061228c565b9250508190555082866003016000828254610b23919061228c565b90915550508115610b9857600b60009054906101000a90046001600160a01b03166001600160a01b03166344df8e70836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b7e57600080fd5b505af1158015610b92573d6000803e3d6000fd5b50505050505b8015610bcd57604051339082156108fc029083906000818181858888f19350505050158015610bcb573d6000803e3d6000fd5b505b60405134815233907f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a59423190602001610a17565b6001600160a01b0382166000908152600560205260408120805484918491821015610c3d57604051630309cb8760e51b815260040160405180910390fd5b6001600160a01b0386166000908152600560205260409020610c5f818761164e565b50979650505050505050565b6008546001600160a01b03163314610c95576040516282b42960e81b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610ce1576040516282b42960e81b815260040160405180910390fd5b600355565b6040516350bf06bf60e01b81526001600160a01b038216600482015242602482015260009030906350bf06bf90604401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5791906123c4565b92915050565b600a546040805180820182526007815266272a2716a0aa2760c91b602082015290516333f98c7760e01b815260009283926001600160a01b03909116916333f98c7791610dac916004016123dd565b608060405180830381865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded919061242b565b90508060600151600014610e145760405163cb08be8160e01b815260040160405180910390fd5b6000816020015113610e385760405162bfc92160e01b815260040160405180910390fd5b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf91906123c4565b610ebb6012600a612383565b1115610f6357600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906123c4565b610f446012600a612383565b610f4e919061226a565b8160200151610f5d919061223d565b91505090565b610f6f6012600a612383565b600a60009054906101000a90046001600160a01b03166001600160a01b0316639670c0bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe691906123c4565b610ff0919061226a565b8160200151610f5d919061226a565b6060600680548060200260200160405190810160405280929190818152602001828054801561105757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611039575b5050505050905090565b6007546001600160a01b0316331461108b576040516282b42960e81b815260040160405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b80806000036110cf57604051630309cb8760e51b815260040160405180910390fd5b600154828082106110f357604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b0316331461111d576040516282b42960e81b815260040160405180910390fd5b505050600255565b6000831580611132575081155b1561115057604051630309cb8760e51b815260040160405180910390fd5b61115c6012600a612383565b611166908361223d565b83611171868861223d565b610574919061223d565b60025481908082106111a057604051630309cb8760e51b815260040160405180910390fd5b6008546001600160a01b031633146111ca576040516282b42960e81b815260040160405180910390fd5b5050600155565b6007546001600160a01b031633146111fb576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b808060000361123f5760405163162908e360e11b815260040160405180910390fd5b600954604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e90604401602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b191906123c4565b10156112d0576040516313be252b60e01b815260040160405180910390fd5b336000908152600560205260408120805490910361132b57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790555b4281556001810180548491906000906113459084906123b1565b90915550506009546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c5919061238f565b6113e2576040516312171d8360e31b815260040160405180910390fd5b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2505050565b808060000361143e5760405163162908e360e11b815260040160405180910390fd5b3360009081526005602052604081209080611459834261164e565b909250905061146885836123b1565b60035490925082101561148e5760405163e6bd447960e01b815260040160405180910390fd5b6000611498610d5d565b90506114af846001015482856000600101546115f7565b156114cd57604051636229415360e01b815260040160405180910390fd5b60006114e9856001015483600060040154600060020154611125565b90508084111561150c57604051633a23d82560e01b815260040160405180910390fd5b4285556002850180548891906000906115269084906123b1565b925050819055508285600301600082825461154191906123b1565b9091555050600b546040516340c10f1960e01b8152336004820152602481018990526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b50506040518981523392507fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750915060200160405180910390a250505050505050565b6115f46012600a612383565b81565b6000838060000361161a5760405162bfc92160e01b815260040160405180910390fd5b8360000361162b5760009150611645565b8284611637878961223d565b611641919061226a565b1091505b50949350505050565b6000808260000361167257604051630309cb8760e51b815260040160405180910390fd5b60008460030154856002015461168891906123b1565b8554909150840361169c57600091506116b0565b60005485546116ad91839187610587565b91505b6116ba82826123b1565b9250509250929050565b60006116dc6105c384670de0b6b3a7640000856117c8565b9392505050565b60006116dc6105c3848461189b565b600081680736ea4425c11ac63081111561172757604051630d7b1d6560e11b8152600481018490526024015b60405180910390fd5b6714057b7ef767814f8102610515670de0b6b3a76400008204611951565b60006116dc6105c3838561228c565b6000806000808560030154866002015461176e91906123b1565b905085600301548510611785578560030154611787565b845b935080851061179a5785600201546117a4565b6117a4848661228c565b92508085116117b45760006117be565b6117be818661228c565b9150509250925092565b6000808060001985870985870292508281108382030391505080600003611802578382816117f8576117f8612254565b04925050506116dc565b83811061183357604051630c740aef60e31b815260048101879052602481018690526044810185905260640161171e565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008080600019848609848602925082811083820303915050806000036118cf5750670de0b6b3a764000090049050610d57565b670de0b6b3a7640000811061190157604051635173648d60e01b8152600481018690526024810185905260440161171e565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600081680a688906bd8affffff8111156119815760405163b3b6ba1f60e01b81526004810184905260240161171e565b6000611999670de0b6b3a7640000604084901b61226a565b90506105156105c382600160bf1b67ff00000000000000821615611aaf576780000000000000008216156119d65768016a09e667f3bcc9090260401c5b6740000000000000008216156119f5576801306fe0a31b7152df0260401c5b672000000000000000821615611a14576801172b83c7d517adce0260401c5b671000000000000000821615611a335768010b5586cf9890f62a0260401c5b670800000000000000821615611a52576801059b0d31585743ae0260401c5b670400000000000000821615611a7157680102c9a3e778060ee70260401c5b670200000000000000821615611a905768010163da9fb33356d80260401c5b670100000000000000821615611aaf57680100b1afa5abcbed610260401c5b66ff000000000000821615611bae576680000000000000821615611adc5768010058c86da1c09ea20260401c5b6640000000000000821615611afa576801002c605e2e8cec500260401c5b6620000000000000821615611b1857680100162f3904051fa10260401c5b6610000000000000821615611b36576801000b175effdc76ba0260401c5b6608000000000000821615611b5457680100058ba01fb9f96d0260401c5b6604000000000000821615611b725768010002c5cc37da94920260401c5b6602000000000000821615611b90576801000162e525ee05470260401c5b6601000000000000821615611bae5768010000b17255775c040260401c5b65ff0000000000821615611ca45765800000000000821615611bd9576801000058b91b5bc9ae0260401c5b65400000000000821615611bf657680100002c5c89d5ec6d0260401c5b65200000000000821615611c135768010000162e43f4f8310260401c5b65100000000000821615611c3057680100000b1721bcfc9a0260401c5b65080000000000821615611c4d5768010000058b90cf1e6e0260401c5b65040000000000821615611c6a576801000002c5c863b73f0260401c5b65020000000000821615611c8757680100000162e430e5a20260401c5b65010000000000821615611ca4576801000000b1721835510260401c5b64ff00000000821615611d9157648000000000821615611ccd57680100000058b90c0b490260401c5b644000000000821615611ce95768010000002c5c8601cc0260401c5b642000000000821615611d05576801000000162e42fff00260401c5b641000000000821615611d215768010000000b17217fbb0260401c5b640800000000821615611d3d576801000000058b90bfce0260401c5b640400000000821615611d5957680100000002c5c85fe30260401c5b640200000000821615611d755768010000000162e42ff10260401c5b640100000000821615611d9157680100000000b17217f80260401c5b63ff000000821615611e75576380000000821615611db85768010000000058b90bfc0260401c5b6340000000821615611dd3576801000000002c5c85fe0260401c5b6320000000821615611dee57680100000000162e42ff0260401c5b6310000000821615611e09576801000000000b17217f0260401c5b6308000000821615611e2457680100000000058b90c00260401c5b6304000000821615611e3f5768010000000002c5c8600260401c5b6302000000821615611e5a576801000000000162e4300260401c5b6301000000821615611e755768010000000000b172180260401c5b62ff0000821615611f505762800000821615611e9a576801000000000058b90c0260401c5b62400000821615611eb457680100000000002c5c860260401c5b62200000821615611ece5768010000000000162e430260401c5b62100000821615611ee857680100000000000b17210260401c5b62080000821615611f025768010000000000058b910260401c5b62040000821615611f1c576801000000000002c5c80260401c5b62020000821615611f3657680100000000000162e40260401c5b62010000821615611f50576801000000000000b1720260401c5b61ff0082161561202257618000821615611f7357680100000000000058b90260401c5b614000821615611f8c5768010000000000002c5d0260401c5b612000821615611fa5576801000000000000162e0260401c5b611000821615611fbe5768010000000000000b170260401c5b610800821615611fd7576801000000000000058c0260401c5b610400821615611ff057680100000000000002c60260401c5b61020082161561200957680100000000000001630260401c5b61010082161561202257680100000000000000b10260401c5b60ff8216156120eb57608082161561204357680100000000000000590260401c5b604082161561205b576801000000000000002c0260401c5b602082161561207357680100000000000000160260401c5b601082161561208b576801000000000000000b0260401c5b60088216156120a357680100000000000000060260401c5b60048216156120bb57680100000000000000030260401c5b60028216156120d357680100000000000000010260401c5b60018216156120eb57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b038116811461211957600080fd5b919050565b60006020828403121561213057600080fd5b6116dc82612102565b60008060006060848603121561214e57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561217b57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156121a957600080fd5b5035919050565b600080604083850312156121c357600080fd5b6121cc83612102565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561221b5783516001600160a01b0316835292840192918401916001016121f6565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610d5757610d57612227565b634e487b7160e01b600052601260045260246000fd5b60008261228757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d5757610d57612227565b600181815b808511156122da5781600019048211156122c0576122c0612227565b808516156122cd57918102915b93841c93908002906122a4565b509250929050565b6000826122f157506001610d57565b816122fe57506000610d57565b8160018114612314576002811461231e5761233a565b6001915050610d57565b60ff84111561232f5761232f612227565b50506001821b610d57565b5060208310610133831016604e8410600b841016171561235d575081810a610d57565b612367838361229f565b806000190482111561237b5761237b612227565b029392505050565b60006116dc83836122e2565b6000602082840312156123a157600080fd5b815180151581146116dc57600080fd5b80820180821115610d5757610d57612227565b6000602082840312156123d657600080fd5b5051919050565b600060208083528351808285015260005b8181101561240a578581018301518582016040015282016123ee565b506000604082860101526040601f19601f8301168501019250505092915050565b60006080828403121561243d57600080fd5b6040516080810181811067ffffffffffffffff8211171561246e57634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015260608301516060820152809150509291505056fea26469706673582212205e76940183cf0f9ee63393d5c96d3129f42207d506dafc89e2104ea4228d5bda64736f6c63430008150033", } // StabilizationABI is the input ABI used to generate the binding from. @@ -13113,7 +13355,7 @@ var TestBaseMetaData = &bind.MetaData{ Sigs: map[string]string{ "bfb4ebcf": "Foo()", }, - Bin: "0x608060405234801561001057600080fd5b5060405161041238038061041283398101604081905261002f91610058565b600061003b82826101aa565b5050610269565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561006b57600080fd5b82516001600160401b038082111561008257600080fd5b818501915085601f83011261009657600080fd5b8151818111156100a8576100a8610042565b604051601f8201601f19908116603f011681019083821181831017156100d0576100d0610042565b8160405282815288868487010111156100e857600080fd5b600093505b8284101561010a57848401860151818501870152928501926100ed565b600086848301015280965050505050505092915050565b600181811c9082168061013557607f821691505b60208210810361015557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101a557600081815260208120601f850160051c810160208610156101825750805b601f850160051c820191505b818110156101a15782815560010161018e565b5050505b505050565b81516001600160401b038111156101c3576101c3610042565b6101d7816101d18454610121565b8461015b565b602080601f83116001811461020c57600084156101f45750858301515b600019600386901b1c1916600185901b1785556101a1565b600085815260208120601f198616915b8281101561023b5788860151825594840194600190910190840161021c565b50858210156102595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61019a806102786000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bfb4ebcf14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6000805461005b9061012a565b80601f01602080910402602001604051908101604052809291908181526020018280546100879061012a565b80156100d45780601f106100a9576101008083540402835291602001916100d4565b820191906000526020600020905b8154815290600101906020018083116100b757829003601f168201915b505050505081565b600060208083528351808285015260005b81811015610109578581018301518582016040015282016100ed565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061013e57607f821691505b60208210810361015e57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220d2da252a147919cdcf7706a0fb0a0be7102961e3bc5ad257f50784b9f01770b864736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5060405161041238038061041283398101604081905261002f91610058565b600061003b82826101aa565b5050610269565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561006b57600080fd5b82516001600160401b038082111561008257600080fd5b818501915085601f83011261009657600080fd5b8151818111156100a8576100a8610042565b604051601f8201601f19908116603f011681019083821181831017156100d0576100d0610042565b8160405282815288868487010111156100e857600080fd5b600093505b8284101561010a57848401860151818501870152928501926100ed565b600086848301015280965050505050505092915050565b600181811c9082168061013557607f821691505b60208210810361015557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101a557600081815260208120601f850160051c810160208610156101825750805b601f850160051c820191505b818110156101a15782815560010161018e565b5050505b505050565b81516001600160401b038111156101c3576101c3610042565b6101d7816101d18454610121565b8461015b565b602080601f83116001811461020c57600084156101f45750858301515b600019600386901b1c1916600185901b1785556101a1565b600085815260208120601f198616915b8281101561023b5788860151825594840194600190910190840161021c565b50858210156102595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61019a806102786000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bfb4ebcf14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6000805461005b9061012a565b80601f01602080910402602001604051908101604052809291908181526020018280546100879061012a565b80156100d45780601f106100a9576101008083540402835291602001916100d4565b820191906000526020600020905b8154815290600101906020018083116100b757829003601f168201915b505050505081565b600060208083528351808285015260005b81811015610109578581018301518582016040015282016100ed565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061013e57607f821691505b60208210810361015e57634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212209cf439377144d04690c521a420a683288adebcb0331b1db8c2897f7a16be2ecb64736f6c63430008150033", } // TestBaseABI is the input ABI used to generate the binding from. @@ -13177,7 +13419,7 @@ var TestUpgradedMetaData = &bind.MetaData{ "bfb4ebcf": "Foo()", "1e4f3395": "FooBar(string)", }, - Bin: "0x608060405234801561001057600080fd5b5060405161068838038061068883398101604081905261002f9161010e565b80600061003c82826101fa565b506001905061004b83826101fa565b5050506102b9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007a57600080fd5b81516001600160401b038082111561009457610094610053565b604051601f8301601f19908116603f011681019082821181831017156100bc576100bc610053565b816040528381526020925086838588010111156100d857600080fd5b600091505b838210156100fa57858201830151818301840152908201906100dd565b600093810190920192909252949350505050565b6000806040838503121561012157600080fd5b82516001600160401b038082111561013857600080fd5b61014486838701610069565b9350602085015191508082111561015a57600080fd5b5061016785828601610069565b9150509250929050565b600181811c9082168061018557607f821691505b6020821081036101a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f557600081815260208120601f850160051c810160208610156101d25750805b601f850160051c820191505b818110156101f1578281556001016101de565b5050505b505050565b81516001600160401b0381111561021357610213610053565b610227816102218454610171565b846101ab565b602080601f83116001811461025c57600084156102445750858301515b600019600386901b1c1916600185901b1785556101f1565b600085815260208120601f198616915b8281101561028b5788860151825594840194600190910190840161026c565b50858210156102a95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6103c0806102c86000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631e4f339514610046578063b0a378b01461005b578063bfb4ebcf14610079575b600080fd5b610059610054366004610142565b610081565b005b610063610091565b60405161007091906101f3565b60405180910390f35b61006361011f565b600061008d82826102ca565b5050565b6001805461009e90610241565b80601f01602080910402602001604051908101604052809291908181526020018280546100ca90610241565b80156101175780601f106100ec57610100808354040283529160200191610117565b820191906000526020600020905b8154815290600101906020018083116100fa57829003601f168201915b505050505081565b6000805461009e90610241565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561015457600080fd5b813567ffffffffffffffff8082111561016c57600080fd5b818401915084601f83011261018057600080fd5b8135818111156101925761019261012c565b604051601f8201601f19908116603f011681019083821181831017156101ba576101ba61012c565b816040528281528760208487010111156101d357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561022057858101830151858201604001528201610204565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061025557607f821691505b60208210810361027557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102c557600081815260208120601f850160051c810160208610156102a25750805b601f850160051c820191505b818110156102c1578281556001016102ae565b5050505b505050565b815167ffffffffffffffff8111156102e4576102e461012c565b6102f8816102f28454610241565b8461027b565b602080601f83116001811461032d57600084156103155750858301515b600019600386901b1c1916600185901b1785556102c1565b600085815260208120601f198616915b8281101561035c5788860151825594840194600190910190840161033d565b508582101561037a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220861a136edbfbb81795ebe88b9f360e258cf2eefe90d25b8440b6ce190b8b4c9964736f6c63430008150033", + Bin: "0x608060405234801561001057600080fd5b5060405161068838038061068883398101604081905261002f9161010e565b80600061003c82826101fa565b506001905061004b83826101fa565b5050506102b9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007a57600080fd5b81516001600160401b038082111561009457610094610053565b604051601f8301601f19908116603f011681019082821181831017156100bc576100bc610053565b816040528381526020925086838588010111156100d857600080fd5b600091505b838210156100fa57858201830151818301840152908201906100dd565b600093810190920192909252949350505050565b6000806040838503121561012157600080fd5b82516001600160401b038082111561013857600080fd5b61014486838701610069565b9350602085015191508082111561015a57600080fd5b5061016785828601610069565b9150509250929050565b600181811c9082168061018557607f821691505b6020821081036101a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f557600081815260208120601f850160051c810160208610156101d25750805b601f850160051c820191505b818110156101f1578281556001016101de565b5050505b505050565b81516001600160401b0381111561021357610213610053565b610227816102218454610171565b846101ab565b602080601f83116001811461025c57600084156102445750858301515b600019600386901b1c1916600185901b1785556101f1565b600085815260208120601f198616915b8281101561028b5788860151825594840194600190910190840161026c565b50858210156102a95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6103c0806102c86000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631e4f339514610046578063b0a378b01461005b578063bfb4ebcf14610079575b600080fd5b610059610054366004610142565b610081565b005b610063610091565b60405161007091906101f3565b60405180910390f35b61006361011f565b600061008d82826102ca565b5050565b6001805461009e90610241565b80601f01602080910402602001604051908101604052809291908181526020018280546100ca90610241565b80156101175780601f106100ec57610100808354040283529160200191610117565b820191906000526020600020905b8154815290600101906020018083116100fa57829003601f168201915b505050505081565b6000805461009e90610241565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561015457600080fd5b813567ffffffffffffffff8082111561016c57600080fd5b818401915084601f83011261018057600080fd5b8135818111156101925761019261012c565b604051601f8201601f19908116603f011681019083821181831017156101ba576101ba61012c565b816040528281528760208487010111156101d357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b8181101561022057858101830151858201604001528201610204565b506000604082860101526040601f19601f8301168501019250505092915050565b600181811c9082168061025557607f821691505b60208210810361027557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102c557600081815260208120601f850160051c810160208610156102a25750805b601f850160051c820191505b818110156102c1578281556001016102ae565b5050505b505050565b815167ffffffffffffffff8111156102e4576102e461012c565b6102f8816102f28454610241565b8461027b565b602080601f83116001811461032d57600084156103155750858301515b600019600386901b1c1916600185901b1785556102c1565b600085815260208120601f198616915b8281101561035c5788860151825594840194600190910190840161033d565b508582101561037a5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212209e9f65a89870480e079f3b2fa977b80612adba0464ab76606144938f61a6a1a764736f6c63430008150033", } // TestUpgradedABI is the input ABI used to generate the binding from. diff --git a/autonity/tests/inflation_test.go b/autonity/tests/inflation_test.go new file mode 100644 index 0000000000..e54d70bcf4 --- /dev/null +++ b/autonity/tests/inflation_test.go @@ -0,0 +1,127 @@ +package tests + +import ( + "fmt" + "math/big" + "testing" + "time" + + "github.com/ALTree/bigfloat" + "github.com/stretchr/testify/require" + + "github.com/autonity/autonity/params" +) + +var ( + GoFloatPrecision = uint(100) +) + +// goParams mimics the Params struct in the Inflation Controller contract using go's big.Float +type goParams struct { + iInit *big.Float + iTrans *big.Float + aE *big.Float + t *big.Float + genesisTime *big.Int +} + +func newGoParams(p *InflationControllerParams, genesisTime *big.Int) goParams { + denomination := new(big.Float).SetPrec(GoFloatPrecision).SetInt(params.DecimalFactor) + return goParams{ + iInit: new(big.Float).Quo(new(big.Float).SetPrec(GoFloatPrecision).SetInt(p.IInit), denomination), + iTrans: new(big.Float).Quo(new(big.Float).SetPrec(GoFloatPrecision).SetInt(p.ITrans), denomination), + aE: new(big.Float).Quo(new(big.Float).SetPrec(GoFloatPrecision).SetInt(p.AE), denomination), + t: new(big.Float).Quo(new(big.Float).SetPrec(GoFloatPrecision).SetInt(p.T), denomination), + genesisTime: genesisTime, + } +} + +func (p goParams) calculateSupplyDelta(currentSupply, lastEpochTime, currentTime *big.Int) *big.Int { + one := new(big.Float).SetPrec(GoFloatPrecision).SetInt64(1) + + t0 := new(big.Float).SetPrec(GoFloatPrecision).SetInt(new(big.Int).Sub(lastEpochTime, p.genesisTime)) + t1 := new(big.Float).SetPrec(GoFloatPrecision).SetInt(new(big.Int).Sub(currentTime, p.genesisTime)) + + lExp0 := new(big.Float).SetPrec(GoFloatPrecision).Mul(p.aE, t0) + lExp0.Quo(lExp0, p.t) + + lExp1 := new(big.Float).SetPrec(GoFloatPrecision).Mul(p.aE, t1) + lExp1.Quo(lExp1, p.t) + + deltaT := new(big.Float).SetPrec(GoFloatPrecision).Sub(t1, t0) + expTerm1 := new(big.Float).SetPrec(GoFloatPrecision).Mul(p.iInit, deltaT) + + expTerm2 := new(big.Float).SetPrec(GoFloatPrecision).Sub(p.iInit, p.iTrans) + expTerm2.Mul(expTerm2, deltaT) + aEExp := bigfloat.Exp(p.aE) + temp3 := new(big.Float).SetPrec(GoFloatPrecision).Sub(aEExp, one) + expTerm2.Quo(expTerm2, temp3) + + expTerm1.Add(expTerm1, expTerm2) + + temp4 := bigfloat.Exp(lExp1) + temp5 := bigfloat.Exp(lExp0) + temp4.Sub(temp4, temp5) + temp4.Mul(temp4, p.t) + temp6 := new(big.Float).SetPrec(GoFloatPrecision).Sub(p.iTrans, p.iInit) + temp4.Mul(temp4, temp6) + temp3.Mul(temp3, p.aE) + temp4.Quo(temp4, temp3) + + expTerm1.Add(expTerm1, temp4) + expTerm1 = bigfloat.Exp(expTerm1) + + currentSupplyFloat := new(big.Float).SetPrec(GoFloatPrecision).SetInt(currentSupply) + expTerm1.Mul(expTerm1, currentSupplyFloat) + expTerm1.Sub(expTerm1, currentSupplyFloat) + + res, _ := expTerm1.Int(nil) + return res +} + +// todo: use approx formula from faical +//func (p goParams) calculateSupplyDeltaApprox() *big.Int { + +//} + +func TestInflationContract(t *testing.T) { + r := setup(t, nil) + T := big.NewInt(10 * params.SecondsInYear) + p := &InflationControllerParams{ + IInit: (*big.Int)(params.DefaultInflationControllerGenesis.IInit), + ITrans: (*big.Int)(params.DefaultInflationControllerGenesis.ITrans), + AE: (*big.Int)(params.DefaultInflationControllerGenesis.Ae), + T: (*big.Int)(params.DefaultInflationControllerGenesis.T), + IPerm: (*big.Int)(params.DefaultInflationControllerGenesis.IPerm), + } + inflationReserve := (*big.Int)(params.TestAutonityContractConfig.InitialInflationReserve) + genesisTime := r.evm.Context.Time + goP := newGoParams(p, genesisTime) + _, _, inflationControllerContract, err := r.deployInflationController(nil, *p) + require.NoError(r.t, err) + currentSupply := new(big.Int).Mul(big.NewInt(60_000_000), params.NTNDecimalFactor) // NTN precision is 18 + epochPeriod := big.NewInt(4 * 60 * 60) + epochCount := new(big.Int).Div(T, epochPeriod) + r.t.Log("total epoch", epochCount) + for i := uint64(0); i < epochCount.Uint64(); i++ { + lastEpochTime := new(big.Int).Add(genesisTime, new(big.Int).Mul(new(big.Int).SetUint64(i), epochPeriod)) + currentEpochTime := new(big.Int).Add(genesisTime, new(big.Int).Mul(new(big.Int).SetUint64(i+1), epochPeriod)) + currentTime := time.Unix(int64(currentEpochTime.Uint64()), 0) + days := currentTime.Day() + years := currentTime.Year() + + delta, gasConsumed, err := inflationControllerContract.CalculateSupplyDelta(nil, currentSupply, inflationReserve, lastEpochTime, currentEpochTime) + require.NoError(r.t, err) + require.LessOrEqual(r.t, gasConsumed, uint64(30_000)) + inflationReserve.Sub(inflationReserve, delta) + goDeltaComputation := goP.calculateSupplyDelta(currentSupply, lastEpochTime, currentEpochTime) + + // Compare the go implementation with the solidity one + diffSolWithGoBasis := new(big.Int).Quo(new(big.Int).Mul(new(big.Int).Sub(goDeltaComputation, delta), big.NewInt(10000)), delta) + + fmt.Println("y:", years, "d:", days, "b:", currentEpochTime, "supply:", currentSupply, "delta:", delta, "delta_ntn:", new(big.Int).Div(delta, params.NTNDecimalFactor), "go:", goDeltaComputation, "diffBpts:", diffSolWithGoBasis) + + currentSupply.Add(currentSupply, delta) + } + r.t.Log("final NTN supply", new(big.Int).Div(currentSupply, params.NTNDecimalFactor)) +} diff --git a/autonity/tests/liquid_test.go b/autonity/tests/liquid_test.go new file mode 100644 index 0000000000..954dae2b64 --- /dev/null +++ b/autonity/tests/liquid_test.go @@ -0,0 +1,35 @@ +package tests + +import ( + "math/big" + "testing" + + "github.com/autonity/autonity/common" + "github.com/autonity/autonity/params" +) + +var ( + staker1 = common.HexToAddress("0x1000000000000000000000000000000000000000") + staker2 = common.HexToAddress("0x2000000000000000000000000000000000000000") + staker3 = common.HexToAddress("0x3000000000000000000000000000000000000000") +) + +func TestClaimRewards(t *testing.T) { + // Test 1 validator 1 staker + r := setup(t, nil) + // Mint Newton to some few accounts + r.autonity.Mint(operator, staker1, params.Ntn10000) + r.autonity.Mint(operator, staker2, params.Ntn10000) + r.autonity.Mint(operator, staker3, params.Ntn10000) + r.autonity.Bond(&runOptions{origin: staker1}, r.validators[0].NodeAddress, params.Ntn10000) + r.autonity.Bond(&runOptions{origin: staker2}, r.validators[1].NodeAddress, params.Ntn10000) + r.autonity.Bond(&runOptions{origin: staker3}, r.validators[1].NodeAddress, new(big.Int).Mul(common.Big2, params.Ntn10000)) + + // create liquid staking contract per validator + r.waitNextEpoch() + // .. test here claiming rewards, checking if NTN/ATN reward is coherent and accurate. + // transactions fees can be simulated be sending atns directly to the autonity contract account. + // todo: Think about in base.go to assign at each epoch the current list of validators / committee + // in r.validators with the liquid stake contract bindings already prepared so that's easy to manipulate + // or maybe just create some helpers for it. +} diff --git a/autonity/tests/upgrade_manager_test.go b/autonity/tests/upgrade_manager_test.go index 68a0de485f..3434815e14 100644 --- a/autonity/tests/upgrade_manager_test.go +++ b/autonity/tests/upgrade_manager_test.go @@ -13,8 +13,7 @@ import ( ) var ( - operator = &runOptions{origin: defaultAutonityConfig.Protocol.OperatorAccount} - user = common.HexToAddress("0x99") + user = common.HexToAddress("0x99") ) func TestExample1(t *testing.T) { @@ -47,11 +46,11 @@ func TestExample2(t *testing.T) { func TestSetOperatorAccount(t *testing.T) { r := setup(t, nil) r.run("setOperatorAccount is restricted to Autonity contract", func(r *runner) { - _, err := r.UpgradeManager.SetOperator(&runOptions{origin: user}, user) + _, err := r.upgradeManager.SetOperator(&runOptions{origin: user}, user) require.ErrorIs(r.t, err, vm.ErrExecutionReverted) - _, err = r.UpgradeManager.SetOperator(operator, user) + _, err = r.upgradeManager.SetOperator(operator, user) require.ErrorIs(r.t, err, vm.ErrExecutionReverted) - _, err = r.UpgradeManager.SetOperator(&runOptions{origin: r.autonity.address}, user) + _, err = r.upgradeManager.SetOperator(&runOptions{origin: r.autonity.address}, user) require.NoError(r.t, err) }) } @@ -69,7 +68,7 @@ func TestUpgrade(t *testing.T) { } r := setup(t, nil) r.run("restricted to the operator", func(r *runner) { - _, err := r.UpgradeManager.Upgrade(&runOptions{origin: user}, r.autonity.address, "0x1111") + _, err := r.upgradeManager.Upgrade(&runOptions{origin: user}, r.autonity.address, "0x1111") require.ErrorIs(r.t, err, vm.ErrExecutionReverted) // maybe check revert reason }) r.run("upgrade target contract", func(r *runner) { @@ -80,7 +79,7 @@ func TestUpgrade(t *testing.T) { require.Equal(r.t, v1string, "v1") calldata := makeCalldata(TestUpgradedMetaData, "hello", "v2") // call the replace function - gas, err := r.UpgradeManager.Upgrade(operator, base.address, string(calldata)) + gas, err := r.upgradeManager.Upgrade(operator, base.address, string(calldata)) require.NoError(r.t, err) r.t.Log("gas consumed:", gas) // check if base has been updated @@ -91,7 +90,7 @@ func TestUpgrade(t *testing.T) { r.run("upgrade autonity contract", func(r *runner) { calldata := makeCalldata(AutonityUpgradeTestMetaData) r.t.Log("upgrade autonity: calldata size:", len(calldata)/1000, "kB") - gas, err := r.UpgradeManager.Upgrade(operator, r.autonity.address, string(calldata)) + gas, err := r.upgradeManager.Upgrade(operator, r.autonity.address, string(calldata)) require.NoError(r.t, err) r.t.Log("upgrade autonity: gas consumed:", gas) cfg, _, err := r.autonity.Config(nil) diff --git a/cmd/autonity/consolecmd_test.go b/cmd/autonity/consolecmd_test.go index 5a1c51e5c1..9e4846bfa7 100644 --- a/cmd/autonity/consolecmd_test.go +++ b/cmd/autonity/consolecmd_test.go @@ -58,6 +58,7 @@ var genesis = `{ "delegationRate" : 1000, "maxCommitteeSize" : 7, "epochPeriod": 30, + "initialInflationReserve": "0x20000000000", "validators" : [ { "enode": "enode://395f3b74b236bccde1684d50a715c2349ee66741d7a69a571c0b176d129ac4ee33acbc85456f7ada3cdc87e1a56f591ba624870a1381c266d41b34c9476c5bc4@172.25.0.11:30303", diff --git a/cmd/autonity/genesis_test.go b/cmd/autonity/genesis_test.go index 43142718da..02631b3da2 100644 --- a/cmd/autonity/genesis_test.go +++ b/cmd/autonity/genesis_test.go @@ -50,6 +50,7 @@ var genesisTest = struct { "maxCommitteeSize":7, "minBaseFee":10000000, "unbondingPeriod": 120, + "initialInflationReserve": "0x20000000000", "epochPeriod": 30, "validators" : [ { @@ -108,6 +109,7 @@ var genesisTest = struct { "epochPeriod": 30, "maxCommitteeSize":7, "minBaseFee":100000000, + "initialInflationReserve": "0x20000000000", "validators" : [ { "enode": "enode://395f3b74b236bccde1684d50a715c2349ee66741d7a69a571c0b176d129ac4ee33acbc85456f7ada3cdc87e1a56f591ba624870a1381c266d41b34c9476c5bc4@172.25.0.11:30303", @@ -143,6 +145,7 @@ var genesisTest = struct { "unbondingPeriod": 120, "epochPeriod": 30, "maxCommitteeSize":7, + "initialInflationReserve": "0x20000000000", "validators" : [ { "enode": "enode://395f3b74b236bccde1684d50a715c2349ee66741d7a69a571c0b176d129ac4ee33acbc85456f7ada3cdc87e1a56f591ba624870a1381c266d41b34c9476c5bc4@172.25.0.11:30303", diff --git a/consensus/tendermint/backend/engine.go b/consensus/tendermint/backend/engine.go index f8b6e69998..19172f1655 100644 --- a/consensus/tendermint/backend/engine.go +++ b/consensus/tendermint/backend/engine.go @@ -281,7 +281,7 @@ func (sb *Backend) Prepare(chain consensus.ChainHeaderReader, header *types.Head // set header's timestamp // todo: block period from contract - header.Time = new(big.Int).Add(big.NewInt(int64(parent.Time)), new(big.Int).SetUint64(1)).Uint64() + header.Time = parent.Time + 1 if int64(header.Time) < time.Now().Unix() { header.Time = uint64(time.Now().Unix()) } diff --git a/consensus/test/test_helpers_test.go b/consensus/test/test_helpers_test.go new file mode 100644 index 0000000000..690ea37ce9 --- /dev/null +++ b/consensus/test/test_helpers_test.go @@ -0,0 +1,372 @@ +package test + +import ( + "context" + "crypto/ecdsa" + "fmt" + "math" + "math/big" + "os" + "sort" + "strings" + "sync/atomic" + "testing" + "time" + + "github.com/autonity/autonity/crypto/blst" + + "github.com/stretchr/testify/require" + "golang.org/x/sync/errgroup" + + "github.com/autonity/autonity/core" + "github.com/autonity/autonity/core/types" + "github.com/autonity/autonity/crypto" + "github.com/autonity/autonity/eth/downloader" + "github.com/autonity/autonity/eth/ethconfig" + "github.com/autonity/autonity/log" + "github.com/autonity/autonity/miner" + "github.com/autonity/autonity/node" + "github.com/autonity/autonity/p2p" + "github.com/autonity/autonity/params" +) + +const defaultStake = 100 + +func makeGenesis(t *testing.T, nodes map[string]*testNode, names []string) *core.Genesis { + // generate genesis block + genesis := core.DefaultGenesisBlock() + genesis.ExtraData = nil + genesis.GasLimit = 10000000000 + genesis.GasUsed = 0 + genesis.Timestamp = uint64(time.Now().Unix()) + genesis.Nonce = 0 + genesis.Mixhash = types.BFTDigest + + genesis.Config = params.TestChainConfig + genesis.Config.Ethash = nil + genesis.Config.AutonityContractConfig.Validators = nil + genesis.Config.AutonityContractConfig.MaxCommitteeSize = 21 + genesis.Config.AutonityContractConfig.EpochPeriod = 60 + genesis.Alloc = core.GenesisAlloc{} + for _, validator := range nodes { + genesis.Alloc[crypto.PubkeyToAddress(validator.nodeKey.PublicKey)] = core.GenesisAccount{ + Balance: new(big.Int).Exp(big.NewInt(2), big.NewInt(128), nil), + } + } + + validators := make([]*params.Validator, 0, len(nodes)) + for _, name := range names { + stake := big.NewInt(defaultStake) + //stake := new(big.Int).Exp(big.NewInt(10), big.NewInt(50), nil) + if strings.HasPrefix(name, ValidatorPrefix) { + nodeAddr := crypto.PubkeyToAddress(nodes[name].nodeKey.PublicKey) + validators = append(validators, ¶ms.Validator{ + NodeAddress: &nodeAddr, + OracleAddress: crypto.PubkeyToAddress(nodes[name].oracleKey.PublicKey), + Enode: nodes[name].url, + Treasury: nodeAddr, + BondedStake: stake, + ConsensusKey: nodes[name].consensusKey.PublicKey().Marshal(), + CommissionRate: new(big.Int).SetUint64(0), + }) + } + } + + genesis.Config.AutonityContractConfig.Validators = validators + err := genesis.Config.AutonityContractConfig.Prepare() + require.NoError(t, err) + return genesis +} + +func makeNodeConfig(t *testing.T, genesis *core.Genesis, nodekey *ecdsa.PrivateKey, consensusKey blst.SecretKey, listenAddr, acnListenerAddr string, rpcPort int, inRate, outRate int64) (*node.Config, *ethconfig.Config) { + // Define the basic configurations for the Ethereum node + datadir, err := os.MkdirTemp("", "") + require.NoError(t, err) + + if listenAddr == "" { + listenAddr = "0.0.0.0:0" + } + + nodeConfig := &node.Config{ + ConsensusKey: consensusKey, + Name: "autonity", + Version: params.Version, + DataDir: datadir, + ExecutionP2P: p2p.Config{ + ListenAddr: listenAddr, + NoDiscovery: true, + PrivateKey: nodekey, + MaxPeers: 25, + }, + ConsensusP2P: p2p.Config{ + ListenAddr: acnListenerAddr, + NoDiscovery: true, + MaxPeers: 10000, + PrivateKey: nodekey, + }, + } + nodeConfig.HTTPHost = "127.0.0.1" + nodeConfig.HTTPPort = rpcPort + + if inRate != 0 || outRate != 0 { + nodeConfig.ExecutionP2P.IsRated = true + nodeConfig.ExecutionP2P.InRate = inRate + nodeConfig.ExecutionP2P.OutRate = outRate + } + + ethConfig := ðconfig.Config{ + Genesis: genesis, + NetworkID: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: core.DefaultTxPoolConfig, + Miner: miner.Config{Etherbase: crypto.PubkeyToAddress(nodekey.PublicKey)}, + } + return nodeConfig, ethConfig +} + +func startTestControllers(t *testing.T, test *testCase, peers map[string]*testNode, errorOnTx bool) { + const blocksToWait = 100 + + txs := make(map[uint64]int) // blockNumber to count + + test.validatorsCanBeStopped = new(int64) + wg, ctx := errgroup.WithContext(context.Background()) + + for index, peer := range peers { + index := index + peer := peer + + logger := log.New("addr", crypto.PubkeyToAddress(peer.nodeKey.PublicKey).String(), "idx", index) + + wg.Go(func() error { + return runNode(ctx, peer, test, peers, logger, index, blocksToWait, errorOnTx) + }) + } + err := wg.Wait() + if err != nil { + if test.topology != nil { + fmt.Println(test.topology.DumpTopology(peers)) + } + t.Fatal(err) + } + + keys := make([]int, 0, len(txs)) + for key := range txs { + keys = append(keys, int(key)) + } + sort.Ints(keys) + + for _, key := range keys { + count := txs[uint64(key)] + fmt.Printf("block %d has %d transactions\n", key, count) + } + + for index, peer := range peers { + peer.transactionsMu.Lock() + fmt.Printf("Validator %s has %d transactions\n", index, len(peer.transactions)) + peer.transactionsMu.Unlock() + } + + minHeight := checkAndReturnMinHeight(t, test, peers) + checkBlockConsistence(t, minHeight, peers, test) + fmt.Println("\nTransactions OK") +} + +func runHook(validatorHook hook, test *testCase, block *types.Block, validator *testNode, index string) error { + if validatorHook == nil { + return nil + } + + err := validatorHook(block, validator, test, time.Now()) + if err != nil { + return fmt.Errorf("error while executing hook for validator index %s and block %v, err %v", + index, block.NumberU64(), err) + } + + return nil +} + +func runNode(ctx context.Context, peer *testNode, test *testCase, peers map[string]*testNode, logger log.Logger, index string, blocksToWait int, errorOnTx bool) error { + var err error + testCanBeStopped := new(uint32) + + periodicChecks := time.NewTicker(100 * time.Millisecond) + defer periodicChecks.Stop() + + isExternalUser := isExternalUser(index) + if isExternalUser { + atomic.AddInt64(test.validatorsCanBeStopped, 1) + } + +wgLoop: + for { + select { + case ev := <-peer.eventChan: + + if test.topology != nil && test.topology.WithChanges() { + err = test.topology.ConnectNodesForIndex(index, peers) + if err != nil { + return err + } + } + + if _, ok := peer.blocks[ev.Block.NumberU64()]; ok { + continue + } + + // before hook + err = runHook(test.getBeforeHook(index), test, ev.Block, peer, index) + if err != nil { + return err + } + + peer.blocks[ev.Block.NumberU64()] = block{ev.Block.Hash(), len(ev.Block.Transactions())} + peer.lastBlock = ev.Block.NumberU64() + + logger.Info("last mined block", "peer", index, + "num", peer.lastBlock, "hash", peer.blocks[ev.Block.NumberU64()].hash, + "txCount", peer.blocks[ev.Block.NumberU64()].txs) + + if atomic.LoadUint32(testCanBeStopped) == 1 { + if atomic.LoadInt64(test.validatorsCanBeStopped) == int64(len(peers)) { + break wgLoop + } + if atomic.LoadInt64(test.validatorsCanBeStopped) > int64(len(peers)) { + return fmt.Errorf("something is wrong. %d of %d peers are ready to be stopped", atomic.LoadInt64(test.validatorsCanBeStopped), uint32(len(peers))) + } + continue + } + + // after hook + err = runHook(test.getAfterHook(index), test, ev.Block, peer, index) + if err != nil { + return err + } + + if test.topology != nil && test.topology.WithChanges() { + err = test.topology.CheckTopologyForIndex(index, peers) + if err != nil { + logger.Error("check topology err", "index", index, "block", peer.lastBlock, "err", err) + return err + } + } + + if int(peer.lastBlock) > test.numBlocks { + // all transactions were included into the chain + if errorOnTx && !isExternalUser { + peer.transactionsMu.Lock() + if len(peer.transactions) == 0 { + if atomic.CompareAndSwapUint32(testCanBeStopped, 0, 1) { + atomic.AddInt64(test.validatorsCanBeStopped, 1) + } + } + peer.transactionsMu.Unlock() + } else { + if atomic.CompareAndSwapUint32(testCanBeStopped, 0, 1) { + atomic.AddInt64(test.validatorsCanBeStopped, 1) + } + } + } + + if !isExternalUser && peer.isRunning && int(peer.lastBlock) >= test.numBlocks+blocksToWait { + if errorOnTx { + pending, queued := peer.service.TxPool().Stats() + // log warnings of leftover transactions rather than to fail the test since we have test case to verify TX get mined. + if pending > 0 { + log.Warn("after a new block it should be 0 pending transactions got %d. block %d", pending, ev.Block.Number().Uint64()) + } + if queued > 0 { + log.Warn("after a new block it should be 0 queued transactions got %d. block %d", queued, ev.Block.Number().Uint64()) + } + + peer.transactionsMu.Lock() + pendingTransactions := len(peer.transactions) + havePendingTransactions := pendingTransactions != 0 + peer.transactionsMu.Unlock() + + if havePendingTransactions { + var txsChainCount int64 + for _, txsBlockCount := range peer.txsChainCount { + txsChainCount += txsBlockCount + } + log.Warn("a peer %s still have transactions to be mined %d. block %d. Total sent %d, total mined %d", + index, + pendingTransactions, ev.Block.Number().Uint64(), + atomic.LoadInt64(peer.txsSendCount), txsChainCount) + } + } + } + + if isExternalUser { + return fmt.Errorf("external user %v got a block %d, topology %v", + index, ev.Block.NumberU64(), test.topology.DumpTopology(peers)) + } + case innerErr := <-peer.subscription.Err(): + if innerErr != nil { + return fmt.Errorf("error in blockchain %q", innerErr) + } + + time.Sleep(500 * time.Millisecond) + + // after hook + err = runHook(test.getAfterHook(index), test, nil, peer, index) + if err != nil { + return err + } + case <-ctx.Done(): + return ctx.Err() + case <-periodicChecks.C: + if isExternalUser { + if atomic.LoadInt64(test.validatorsCanBeStopped) == int64(len(peers)) { + break wgLoop + } + } + } + } + return nil +} + +func checkAndReturnMinHeight(t *testing.T, test *testCase, validators map[string]*testNode) uint64 { + // check that all nodes reached the same minimum blockchain height + minHeight := uint64(math.MaxUint64) + for index, validator := range validators { + if isExternalUser(index) { + continue + } + + validatorBlock := validator.lastBlock + if minHeight > validatorBlock { + minHeight = validatorBlock + } + + if validatorBlock < uint64(test.numBlocks) { + t.Fatalf("a validator is behind the network index %s and block %v - expected %d", + index, validatorBlock, test.numBlocks) + } + } + return minHeight +} + +func checkBlockConsistence(t *testing.T, minHeight uint64, validators map[string]*testNode, test *testCase) { + // check that all nodes got the same blocks + for i := uint64(1); i <= minHeight; i++ { + blockHash := validators["V0"].service.BlockChain().GetBlockByNumber(i).Hash() + for index, validator := range validators { + if isExternalUser(index) { + continue + } + + hash := validator.service.BlockChain().GetBlockByNumber(i).Hash() + if hash != blockHash { + t.Fatalf("validators %d and %s have different blocks %d - %q vs %s at test: %s", + 0, index, i, hash.String(), blockHash.String(), test.name) + } + } + } +} + +func isExternalUser(index string) bool { + return strings.HasPrefix(index, "E") +} diff --git a/core/genesis.go b/core/genesis.go index aa5fe8cfac..46292c85e6 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -568,15 +568,16 @@ func DefaultGoerliGenesisBlock() *Genesis { func DeveloperGenesisBlock(gasLimit uint64, faucet *keystore.Key) *Genesis { validatorEnode := enode.NewV4(&faucet.PrivateKey.PublicKey, net.ParseIP("0.0.0.0"), 0, 0) testAutonityContractConfig := params.AutonityContractGenesis{ - MaxCommitteeSize: 1, - BlockPeriod: 1, - UnbondingPeriod: 120, - EpochPeriod: 30, //seconds - DelegationRate: 1200, // 12% - TreasuryFee: 1500000000000000, // 0.15%, - MinBaseFee: 10000000000, - Operator: faucet.Address, - Treasury: faucet.Address, + MaxCommitteeSize: 1, + BlockPeriod: 1, + UnbondingPeriod: 120, + EpochPeriod: 30, //seconds + DelegationRate: 1200, // 12% + TreasuryFee: 1500000000000000, // 0.15%, + MinBaseFee: 10000000000, + Operator: faucet.Address, + Treasury: faucet.Address, + InitialInflationReserve: params.TestAutonityContractConfig.InitialInflationReserve, Validators: []*params.Validator{ { Treasury: faucet.Address, diff --git a/e2e_test/e2e_test.go b/e2e_test/e2e_test.go index ddad410920..7f51943f28 100644 --- a/e2e_test/e2e_test.go +++ b/e2e_test/e2e_test.go @@ -46,7 +46,7 @@ func TestSendingValue(t *testing.T) { defer cancel() err = network[0].SendAUTtracked(ctx, network[1].Address, 10) require.NoError(t, err) - _ = network.WaitToMineNBlocks(20, 30, false) + _ = network.WaitToMineNBlocks(100, 100, false) } func TestProtocolContractsDeployment(t *testing.T) { @@ -128,6 +128,98 @@ func TestProtocolContractCache(t *testing.T) { }) } +// This test checks that when a transaction is processed the fees are divided +// between validators and stakeholders. +func TestFeeRedistributionValidatorsAndDelegators(t *testing.T) { + t.Skip("Is broken with Penalty Absorbing Stake") + //todo: fix. Genesis validators are no longer issued Liquid Newton. Need to introduce 3rd party delegators. + vals, err := Validators(t, 3, "10e18,v,10000,0.0.0.0:%s,%s,%s,%s") + require.NoError(t, err) + + vals[2].Stake = 25000 + + network, err := NewNetworkFromValidators(t, vals, true) + require.NoError(t, err) + defer network.Shutdown() + + n := network[0] + + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Second) + defer cancel() + + // retrieve current balance + // send liquid newton to some random address + // check balance - shouldnt have increased + // wait for epoch + // check claimable fees + // redeem fees + + // Setup Bindings + autonityContract, _ := autonity.NewAutonity(params.AutonityContractAddress, n.WsClient) + valAddrs, _ := autonityContract.GetValidators(nil) + liquidContracts := make([]*autonity.Liquid, len(valAddrs)) + validators := make([]autonity.AutonityValidator, len(valAddrs)) + for i, valAddr := range valAddrs { + validators[i], _ = autonityContract.GetValidator(nil, valAddr) + liquidContracts[i], _ = autonity.NewLiquid(validators[i].LiquidContract, n.WsClient) + } + transactor, _ := bind.NewKeyedTransactorWithChainID(vals[0].TreasuryKey, big.NewInt(1234)) + tx, err := liquidContracts[0].Transfer( + transactor, + common.Address{66, 66}, big.NewInt(1337)) + + require.NoError(t, err) + _ = network.WaitToMineNBlocks(2, 20, false) + tx2, err := n.SendAUT(ctx, network[1].Address, 10) + require.NoError(t, err) + err = network.AwaitTransactions(ctx, tx, tx2) + require.NoError(t, err) + // claimable fees should be 0 before epoch + for i := range liquidContracts { + unclaimed, _ := liquidContracts[i].UnclaimedRewards(&bind.CallOpts{}, validators[i].Treasury) + require.Equal(t, big.NewInt(0).Bytes(), unclaimed.UnclaimedATN.Bytes()) + } + + // wait for epoch + + // calculate reward pool + r1, _ := n.WsClient.TransactionReceipt(context.Background(), tx.Hash()) + r2, _ := n.WsClient.TransactionReceipt(context.Background(), tx2.Hash()) + + b1, _ := n.WsClient.BlockByNumber(context.Background(), r1.BlockNumber) + b2, _ := n.WsClient.BlockByNumber(context.Background(), r2.BlockNumber) + + rewardT1 := new(big.Int).Mul(new(big.Int).SetUint64(r1.CumulativeGasUsed), b1.BaseFee()) + rewardT2 := new(big.Int).Mul(new(big.Int).SetUint64(r2.CumulativeGasUsed), b2.BaseFee()) + + totalFees := new(big.Int).Add(rewardT1, rewardT2) + treasuryRewards := new(big.Int).Div(new(big.Int).Mul(totalFees, new(big.Int).SetUint64(15)), big.NewInt(10000)) + totalRewards := new(big.Int).Sub(totalFees, treasuryRewards) + + balanceBeforeEpoch, _ := n.WsClient.BalanceAt(context.Background(), params.AutonityContractAddress, nil) + require.Equal(t, totalFees, balanceBeforeEpoch) + + err = network.WaitToMineNBlocks(30, 90, false) + require.NoError(t, err) + + fmt.Println("total rewards", totalRewards) + balanceGlobalTreasury, _ := n.WsClient.BalanceAt(context.Background(), common.Address{120}, nil) + cfg, _ := autonityContract.Config(nil) + fmt.Println(cfg) + require.Equal(t, treasuryRewards, balanceGlobalTreasury) + + stake := []int64{10000 - 1337, 10000, 25000} + epochStake := []int64{10000, 10000, 25000} + totalStake := int64(45000) + for i := range liquidContracts { + unclaimed, _ := liquidContracts[i].UnclaimedRewards(&bind.CallOpts{}, validators[i].Treasury) + totalValRewards := new(big.Int).Div(new(big.Int).Mul(totalRewards, big.NewInt(epochStake[i])), big.NewInt(totalStake)) + valCommission := new(big.Int).Div(new(big.Int).Mul(totalValRewards, big.NewInt(12)), big.NewInt(100)) + stakerReward := new(big.Int).Sub(totalValRewards, valCommission) + require.Equal(t, new(big.Int).Div(new(big.Int).Mul(stakerReward, big.NewInt(stake[i])), big.NewInt(epochStake[i])), unclaimed) + } +} + // a node is verifying a proposal, but while he is verifying the finalized block is injected from p2p layer func TestNodeAlreadyHasProposedBlock(t *testing.T) { vals, err := Validators(t, 2, "10e18,v,1,0.0.0.0:%s,%s,%s,%s") diff --git a/go.mod b/go.mod index daacabeb16..ecbd0b98ce 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/autonity/autonity go 1.21 require ( + github.com/ALTree/bigfloat v0.2.0 github.com/Azure/azure-storage-blob-go v0.7.0 github.com/JekaMas/notify v0.9.4 github.com/JekaMas/pretty v0.0.0-20161213095928-bfc6f9ec9574 diff --git a/go.sum b/go.sum index c82304a08b..055cfaefcf 100644 --- a/go.sum +++ b/go.sum @@ -18,6 +18,8 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/ALTree/bigfloat v0.2.0 h1:AwNzawrpFuw55/YDVlcPw0F0cmmXrmngBHhVrvdXPvM= +github.com/ALTree/bigfloat v0.2.0/go.mod h1:+NaH2gLeY6RPBPPQf4aRotPPStg+eXc8f9ZaE4vRfD4= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-storage-blob-go v0.7.0 h1:MuueVOYkufCxJw5YZzF842DY2MBsp+hLuh2apKY0mck= diff --git a/miner/worker.go b/miner/worker.go index 668d9efe1c..f5233247c5 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -659,7 +659,7 @@ func (w *worker) taskLoop() { if w.skipSealHook != nil && w.skipSealHook(task) { continue } - w.eth.Logger().Debug("New block Seal request", "hash", w.engine.SealHash(task.block.Header())) + w.eth.Logger().Debug("New block Seal request", "hash", sealHash) w.pendingMu.Lock() w.pendingTasks[sealHash] = task w.pendingMu.Unlock() diff --git a/params/config.go b/params/config.go index 3b31a7faa5..c98f4adcdb 100644 --- a/params/config.go +++ b/params/config.go @@ -88,15 +88,16 @@ var ( TerminalTotalDifficulty: nil, Ethash: nil, AutonityContractConfig: &AutonityContractGenesis{ - MinBaseFee: 500_000_000, - EpochPeriod: 30 * 60, - UnbondingPeriod: 6 * 60 * 60, - BlockPeriod: 1, - MaxCommitteeSize: 9, - Operator: common.HexToAddress("0xd32C0812Fa1296F082671D5Be4CbB6bEeedC2397"), - Treasury: common.HexToAddress("0xF74c34Fed10cD9518293634C6f7C12638a808Ad5"), - TreasuryFee: 10_000_000_000_000_000, - DelegationRate: 1000, + MinBaseFee: 500_000_000, + EpochPeriod: 30 * 60, + UnbondingPeriod: 6 * 60 * 60, + BlockPeriod: 1, + MaxCommitteeSize: 9, + Operator: common.HexToAddress("0xd32C0812Fa1296F082671D5Be4CbB6bEeedC2397"), + Treasury: common.HexToAddress("0xF74c34Fed10cD9518293634C6f7C12638a808Ad5"), + TreasuryFee: 10_000_000_000_000_000, + DelegationRate: 1000, + InitialInflationReserve: (*math.HexOrDecimal256)(new(big.Int).Mul(big.NewInt(40_000_000), NtnPrecision)), Validators: []*Validator{ { Treasury: common.HexToAddress("0x75474aC55768fAb6fE092191eea8016b955072F5"), @@ -171,7 +172,6 @@ var ( AccountabilityConfig: DefaultAccountabilityConfig, } - // BakerlooChainConfig todo: ask Raj to generate validator key for validators in the BakerlooChainConfig // BakerlooChainConfig contains the chain parameters to run a node on the Bakerloo test network. BakerlooChainConfig = &ChainConfig{ ChainID: big.NewInt(65_010_002), @@ -194,15 +194,16 @@ var ( TerminalTotalDifficulty: nil, Ethash: nil, AutonityContractConfig: &AutonityContractGenesis{ - MinBaseFee: 500_000_000, - EpochPeriod: 30 * 60, - UnbondingPeriod: 6 * 60 * 60, - BlockPeriod: 1, - MaxCommitteeSize: 50, - Operator: common.HexToAddress("0x293039dDC627B1dF9562380c0E5377848F94325A"), - Treasury: common.HexToAddress("0x7f1B212dcDc119a395Ec2B245ce86e9eE551043E"), - TreasuryFee: 10_000_000_000_000_000, - DelegationRate: 1000, + MinBaseFee: 500_000_000, + EpochPeriod: 30 * 60, + UnbondingPeriod: 6 * 60 * 60, + BlockPeriod: 1, + MaxCommitteeSize: 50, + Operator: common.HexToAddress("0x293039dDC627B1dF9562380c0E5377848F94325A"), + Treasury: common.HexToAddress("0x7f1B212dcDc119a395Ec2B245ce86e9eE551043E"), + TreasuryFee: 10_000_000_000_000_000, + InitialInflationReserve: (*math.HexOrDecimal256)(new(big.Int).Mul(big.NewInt(40_000_000), NtnPrecision)), + DelegationRate: 1000, Validators: []*Validator{{ Treasury: common.HexToAddress("0x3e08FEc6ABaf669BD8Da54abEe30b2B8B5024013"), OracleAddress: common.HexToAddress("0x4D8387E38F42084aa24CE7DA137222786fF23A3E"), @@ -454,7 +455,7 @@ var ( // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, nil, new(EthashConfig), nil, nil, nil, AsmConfig{}, false} + AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, nil, nil, nil, new(EthashConfig), nil, nil, nil, nil, AsmConfig{}, false} TestNodeKeys = []string{ "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291", @@ -474,15 +475,16 @@ var ( TestValidatorConsensusKey, _ = blst.SecretKeyFromHex("0afbb1b94ac30db9e145eb30ee6b64d1996a31279e50005b2a470b18dae82bcb") TestAutonityContractConfig = &AutonityContractGenesis{ - MaxCommitteeSize: 21, - BlockPeriod: 1, - UnbondingPeriod: 120, - EpochPeriod: 30, - DelegationRate: 1200, // 12% - Treasury: common.Address{120}, - TreasuryFee: 1500000000000000, // 0.15%, - MinBaseFee: InitialBaseFee, - Operator: common.Address{}, + MaxCommitteeSize: 21, + BlockPeriod: 1, + UnbondingPeriod: 120, + EpochPeriod: 30, + DelegationRate: 1200, // 12% + Treasury: common.Address{120}, + TreasuryFee: 1500000000000000, // 0.15%, + MinBaseFee: InitialBaseFee, + InitialInflationReserve: (*math.HexOrDecimal256)(new(big.Int).Mul(big.NewInt(40_000_000), NtnPrecision)), + Operator: common.Address{}, } TestChainConfig = &ChainConfig{ @@ -508,6 +510,7 @@ var ( TestAutonityContractConfig, DefaultAccountabilityConfig, DefaultGenesisOracleConfig, + DefaultInflationControllerGenesis, AsmConfig{ ACUContractConfig: DefaultAcuContractGenesis, StabilizationContractConfig: DefaultStabilizationGenesis, @@ -619,12 +622,12 @@ type ChainConfig struct { TerminalTotalDifficulty *big.Int `json:"terminalTotalDifficulty,omitempty"` // Various consensus engines - Ethash *EthashConfig `json:"ethash,omitempty"` - AutonityContractConfig *AutonityContractGenesis `json:"autonity,omitempty"` - AccountabilityConfig *AccountabilityGenesis `json:"accountability,omitempty"` - OracleContractConfig *OracleContractGenesis `json:"oracle,omitempty"` - - ASM AsmConfig `json:"asm,omitempty"` + Ethash *EthashConfig `json:"ethash,omitempty"` + AutonityContractConfig *AutonityContractGenesis `json:"autonity,omitempty"` + AccountabilityConfig *AccountabilityGenesis `json:"accountability,omitempty"` + OracleContractConfig *OracleContractGenesis `json:"oracle,omitempty"` + InflationContractConfig *InflationControllerGenesis `json:"inflation,omitempty"` + ASM AsmConfig `json:"asm,omitempty"` // true if run in testmode, false by default TestMode bool `json:"testMode,omitempty"` diff --git a/params/generated/Accountability.go b/params/generated/Accountability.go index 9f74cd0e84..af5e2c794b 100644 --- a/params/generated/Accountability.go +++ b/params/generated/Accountability.go @@ -1,10 +1,13 @@ package generated -import "strings" -import "github.com/autonity/autonity/accounts/abi" -import "github.com/autonity/autonity/common" +import ( + "strings" -var AccountabilityBytecode = common.Hex2Bytes("608060405260006011553480156200001657600080fd5b5060405162004436380380620044368339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b61424d80620001e96000396000f3fe6080604052600436106100d25760003560e01c806379502c551161007f578063b5b7a18411610059578063b5b7a184146102af578063bebaa8fc146102d3578063c50d21f014610300578063e7bb0b521461032057600080fd5b806379502c55146101e75780637ccecadd1461024b5780639cb22b061461028257600080fd5b80634108a95a116100b05780634108a95a146101775780636b5f444c146101a75780636c9789b0146101c757600080fd5b806301567739146100d75780630b7914301461012a5780631de9d9b614610162575b600080fd5b3480156100e357600080fd5b5061010d6100f23660046135f3565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a610145366004613617565b610358565b6040516101219c9b9a999897969594939291906136d3565b6101756101703660046135f3565b61046c565b005b34801561018357600080fd5b5061019761019236600461376e565b6106fd565b6040519015158152602001610121565b3480156101b357600080fd5b506101756101c2366004613617565b6107c6565b3480156101d357600080fd5b506101756101e23660046137ac565b61084a565b3480156101f357600080fd5b506003546004546005546006546007546008546009546102169695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610121565b34801561025757600080fd5b5061026b61026636600461376e565b6108e2565b604080519215158352602083019190915201610121565b34801561028e57600080fd5b506102a261029d3660046135f3565b610a50565b60405161012191906138a4565b3480156102bb57600080fd5b506102c560005481565b604051908152602001610121565b3480156102df57600080fd5b506102f36102ee3660046135f3565b610cf6565b60405161012191906138b7565b34801561030c57600080fd5b5061017561031b366004613a83565b611004565b34801561032c57600080fd5b506102c561033b366004613b8f565b600e60209081526000928352604080842090915290825290205481565b6002818154811061036857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b036401000000009093048316949216929091906103cb90613bbb565b80601f01602080910402602001604051908101604052809291908181526020018280546103f790613bbb565b80156104445780601f1061041957610100808354040283529160200191610444565b820191906000526020600020905b81548152906001019060200180831161042757829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6001546001600160a01b031633146104f05760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b038281166000908152600a60205260408082205490517f1904bb2e000000000000000000000000000000000000000000000000000000008152908316600482015290929190911690631904bb2e90602401600060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105909190810190613c75565b516040519091506000906001600160a01b038316906108fc90349084818181858888f193505050503d80600081146105e4576040519150601f19603f3d011682016040523d82523d6000602084013e6105e9565b606091505b50509050806106bc57600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106699190613df3565b6001600160a01b03163460405160006040518083038185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b5050505b50506001600160a01b03166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000806107098461139b565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190613e10565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b031633146108455760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084016104e7565b600055565b6001546001600160a01b031633146108c95760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084016104e7565b6108d1611406565b80156108df576108df61175f565b50565b60008060006108f08561139b565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c9190613e10565b6001600160a01b0388166000908152600e6020908152604080832084845290915290205490915082116109b6576000935060009250610a46565b6001600160a01b0387166000908152600c602052604090205415610a3d576001600160a01b0387166000908152600c60205260408120546002906109fc90600190613e58565b81548110610a0c57610a0c613e6b565b90600052602060002090600802019050600094506003600001548160040154610a359190613e9a565b935050610a46565b60019350600092505b5050935093915050565b610ac66040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0382166000908152600c6020526040902054610b2b5760405162461bcd60e51b815260206004820152600d60248201527f6e6f2061636375736174696f6e0000000000000000000000000000000000000060448201526064016104e7565b6001600160a01b0382166000908152600c6020526040902054600290610b5390600190613e58565b81548110610b6357610b63613e6b565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610bb857610bb8613630565b6002811115610bc957610bc9613630565b815281546020909101906301000000900460ff166009811115610bee57610bee613630565b6009811115610bff57610bff613630565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610c3b90613bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6790613bbb565b8015610cb45780601f10610c8957610100808354040283529160200191610cb4565b820191906000526020600020905b815481529060010190602001808311610c9757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610d2b57610d2b613937565b604051908082528060200260200182016040528015610dd257816020015b610dbf6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081610d495790505b50905060005b6001600160a01b0384166000908152600b6020526040902054811015610ffd576001600160a01b0384166000908152600b6020526040902080546002919083908110610e2657610e26613e6b565b906000526020600020015481548110610e4157610e41613e6b565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610e9657610e96613630565b6002811115610ea757610ea7613630565b815281546020909101906301000000900460ff166009811115610ecc57610ecc613630565b6009811115610edd57610edd613630565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610f1990613bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4590613bbb565b8015610f925780601f10610f6757610100808354040283529160200191610f92565b820191906000526020600020905b815481529060010190602001808311610f7557829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110610fdf57610fdf613e6b565b60200260200101819052508080610ff590613ead565b915050610dd8565b5092915050565b6001546040517f1904bb2e0000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015611066573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108e9190810190613c75565b60208101519091506001600160a01b031633146111135760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201527f7265642076616c696461746f720000000000000000000000000000000000000060648201526084016104e7565b60808201516001600160a01b0316331461116f5760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c657200000060448201526064016104e7565b6001826000015160ff16111561132557600061118a83611a42565b90508061119657505050565b336000908152600d6020908152604091829020825161018081018452815460ff808216835261010082048116948301949094529093919291840191620100009091041660028111156111ea576111ea613630565b60028111156111fb576111fb613630565b815281546020909101906301000000900460ff16600981111561122057611220613630565b600981111561123157611231613630565b815281546001600160a01b0364010000000090910481166020830152600183015416604082015260028201805460609092019161126d90613bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461129990613bbb565b80156112e65780601f106112bb576101008083540402835291602001916112e6565b820191906000526020600020905b8154815290600101906020018083116112c957829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b60008260400151600281111561133d5761133d613630565b0361134f5761134b82611cfc565b5050565b60018260400151600281111561136757611367613630565b036113755761134b82611f8c565b60028260400151600281111561138d5761138d613630565b0361134b5761134b82612174565b600060098260098111156113b1576113b1613630565b036113bf5760025b92915050565b60008260098111156113d3576113d3613630565b036113df5760026113b9565b60018260098111156113f3576113f3613630565b036113ff5760026113b9565b60026113b9565b6011545b60105481101561175a5760006010828154811061142957611429613e6b565b90600052602060002001549050806000036114445750611748565b61144f600182613e58565b905060006002828154811061146657611466613e6b565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156114bb576114bb613630565b60028111156114cc576114cc613630565b815281546020909101906301000000900460ff1660098111156114f1576114f1613630565b600981111561150257611502613630565b815281546001600160a01b0364010000000090910481166020830152600183015416604082015260028201805460609092019161153e90613bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461156a90613bbb565b80156115b75780601f1061158c576101008083540402835291602001916115b7565b820191906000526020600020905b81548152906001019060200180831161159a57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090504360036000015482610140015161160b9190613e9a565b1115611618575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516116459061139b565b60a08301516001600160a01b03166000908152600e602090815260408083206101208701518452909152902054909150811161168357505050611748565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b8061175281613ead565b91505061140a565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d99190613e10565b905060005b600f5481101561185057816002600f83815481106117fe576117fe613e6b565b90600052602060002001548154811061181957611819613e6b565b9060005260206000209060080201600501540361183e5761183b600184613e9a565b92505b8061184881613ead565b9150506117de565b5060005b600f54811015611a3557611a236002600f838154811061187657611876613e6b565b90600052602060002001548154811061189157611891613e6b565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156118e6576118e6613630565b60028111156118f7576118f7613630565b815281546020909101906301000000900460ff16600981111561191c5761191c613630565b600981111561192d5761192d613630565b815281546001600160a01b0364010000000090910481166020830152600183015416604082015260028201805460609092019161196990613bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461199590613bbb565b80156119e25780601f106119b7576101008083540402835291602001916119e2565b820191906000526020600020905b8154815290600101906020018083116119c557829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508461231b565b80611a2d81613ead565b915050611854565b5061134b600f6000613579565b6000816020015160ff16600003611bf857336000908152600d6020908152604091829020845181549286015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169116179190911780825591840151849282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836002811115611ae557611ae5613630565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115611b2c57611b2c613630565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190611bb79082613f30565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff91821691611c2691610100900416600161402c565b60ff1614611c765760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f75730000000000000060448201526064016104e7565b336000908152600d6020526040902060c0830151611c979160020190612918565b336000908152600d602052604090208054600191908290611cc1908290610100900460ff1661402c565b92506101000a81548160ff021916908360ff160217905550816000015160ff1682602001516001611cf2919061402c565b60ff161492915050565b6000806000806000611d1360fe8760c00151612a80565b9450945094509450945084611d6a5760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e0000000000000060448201526064016104e7565b8560a001516001600160a01b0316846001600160a01b031614611dcf5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016104e7565b85606001516009811115611de557611de5613630565b8314611e335760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016104e7565b438210611e825760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e20746865206675747572650000000000000000000060448201526064016104e7565b60008211611ed25760405162461bcd60e51b815260206004820152601360248201527f63616e27742062652061742067656e657369730000000000000000000000000060448201526064016104e7565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f599190613e10565b610100880184905261012088018190524361014089015261016088018390529050611f8387612ae7565b50505050505050565b6000806000806000611fa360fc8760c00151612a80565b9450945094509450945084611ffa5760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e000060448201526064016104e7565b8560a001516001600160a01b0316846001600160a01b03161461205f5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016104e7565b8560600151600981111561207557612075613630565b83146120c35760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016104e7565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015612126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214a9190613e10565b610100880184905261012088018190524361014089015261016088018390529050611f8387612e41565b600080600080600061218b60fd8760c00151612a80565b94509450945094509450846121e25760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e00000060448201526064016104e7565b8560a001516001600160a01b0316846001600160a01b0316146122475760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016104e7565b8560600151600981111561225d5761225d613630565b83146122ab5760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016104e7565b4382106122fa5760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e20746865206675747572650000000000000000000060448201526064016104e7565b61010086018290526101608601819052612313866131ce565b505050505050565b60015460a08301516040517f1904bb2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123af9190810190613c75565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905590506003816102600151600381111561241857612418613630565b0361242257505050565b6000612439612434856060015161139b565b613520565b610220830151600754919250906000906124539083614045565b6006546124609087614045565b61246a9085613e9a565b6124749190613e9a565b60095490915081111561248657506009545b60008461012001518560c001518660a001516124a29190613e9a565b6124ac9190613e9a565b6009549091506000906124bf8385614045565b6124c9919061405c565b90506000811180156124da57508181145b1561262357600060a087018190526101008701819052610120870181905260c08701526101e086018051829190612512908390613e9a565b905250610220860180516001919061252b908390613e9a565b905250600361026087015260006102008701526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e0906125879089906004016140a7565b600060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b61012086015181908111612650578087610120018181516126449190613e58565b9052506000905061266b565b6101208701516126609082613e58565b600061012089015290505b80156126e85780876101000151106126b3578087610100018181516126909190613e58565b90525060a0870180518291906126a7908390613e58565b905250600090506126e8565b6101008701516126c39082613e58565b90508661010001518760a0018181516126dc9190613e58565b90525060006101008801525b60008111801561270b575060008760a001518860c001516127099190613e9a565b115b156127b75760008760a001518860c001516127269190613e9a565b60c08901516127359084614045565b61273f919061405c565b905060008860a001518960c001516127579190613e9a565b60a08a01516127669085614045565b612770919061405c565b9050818960c0018181516127849190613e58565b90525060a08901805182919061279b908390613e58565b9052506127a88183613e9a565b6127b29084613e58565b925050505b6127c18183613e58565b915081876101e0018181516127d69190613e9a565b90525061022087018051600191906127ef908390613e9a565b9052506000546102208801516008546128089190614045565b6128129190614045565b61281c9043613e9a565b61020088015260026102608801526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e090612873908a906004016140a7565b600060405180830381600087803b15801561288d57600080fd5b505af11580156128a1573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b8154600260018083161561010002038216048251808201602081106020841001600281146129c257600181146129e7578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156129ac578151845560018401935060208201915061298f565b815191036101000a908190040290915550611f83565b60028302826020036101000a846020036101000a602089015104020185018755611f83565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a039250828251167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008a160184556020820191506001840193505b80821015612a665781518455600184019350602082019150612a49565b815191036101000a90819004029091555050505050505050565b60008060008060008086516020612a979190613e9a565b9050612aa1613597565b60a081838a8c5afa612ab257600080fd5b8051600103612ac057600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b6000612af6826060015161139b565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612b995760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f63680000000000000000000000000000000000000000000000000000000060648201526084016104e7565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091169062010000908490811115612c5f57612c5f613630565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612ca657612ca6613630565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190612d319082613f30565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f91612e3591858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c602052604090205415612eab5760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e60448201526064016104e7565b6000612eba826060015161139b565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612f5d5760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f63680000000000000000000000000000000000000000000000000000000060648201526084016104e7565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909116906201000090849081111561302357613023613630565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff16630100000083600981111561306a5761306a613630565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c082015160028201906130f59082613f30565b5060e08281015160038301556101008301516004830155610120830151600583015561014083015160068301556101609092015160079091015582015161313d906001613e9a565b60a08301516001600160a01b03166000908152600c602052604090205560e082015160109061316d906001613e9a565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba403519101612e35565b60a08101516001600160a01b03166000908152600c60205260408120549081900361323b5760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e000000000000000060448201526064016104e7565b8160600151600981111561325157613251613630565b600261325e600184613e58565b8154811061326e5761326e613e6b565b60009182526020909120600890910201546301000000900460ff16600981111561329a5761329a613630565b1461330d5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f72756c652069640000000000000000000000000000000000000000000000000060648201526084016104e7565b6101008201516002613320600184613e58565b8154811061333057613330613e6b565b906000526020600020906008020160040154146133b55760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f626c6f636b00000000000000000000000000000000000000000000000000000060648201526084016104e7565b61016082015160026133c8600184613e58565b815481106133d8576133d8613e6b565b9060005260206000209060080201600701541461345c5760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f686173680000000000000000000000000000000000000000000000000000000060648201526084016104e7565b6011545b6010548110156134c657816010828154811061347e5761347e613e6b565b9060005260206000200154036134b4576000601082815481106134a3576134a3613e6b565b6000918252602090912001556134c6565b806134be81613ead565b915050613460565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101612e35565b60008161352f57505060055490565b6001820361353f57505060055490565b6002820361354f57505060055490565b6003820361355f57505060055490565b600482036135705750612710919050565b50612710919050565b50805460008255906000526020600020908101906108df91906135b5565b6040518060a001604052806005906020820280368337509192915050565b5b808211156135ca57600081556001016135b6565b5090565b6001600160a01b03811681146108df57600080fd5b80356135ee816135ce565b919050565b60006020828403121561360557600080fd5b8135613610816135ce565b9392505050565b60006020828403121561362957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061366f5761366f613630565b9052565b600a811061366f5761366f613630565b60005b8381101561369e578181015183820152602001613686565b50506000910152565b600081518084526136bf816020860160208601613683565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e1660208401526136f4604084018e61365f565b613701606084018d613673565b6001600160a01b038b811660808501528a1660a084015260c0830181905261372b8184018a6136a7565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a81106135ee57600080fd5b60008060006060848603121561378357600080fd5b833561378e816135ce565b925061379c6020850161375f565b9150604084013590509250925092565b6000602082840312156137be57600080fd5b8135801515811461361057600080fd5b805160ff168252600061018060208301516137ee602086018260ff169052565b506040830151613801604086018261365f565b5060608301516138146060860182613673565b50608083015161382f60808601826001600160a01b03169052565b5060a083015161384a60a08601826001600160a01b03169052565b5060c08301518160c0860152613862828601826136a7565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b60208152600061361060208301846137ce565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561392a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526139188583516137ce565b945092850192908501906001016138de565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561398a5761398a613937565b60405290565b604051610280810167ffffffffffffffff8111828210171561398a5761398a613937565b604051601f8201601f1916810167ffffffffffffffff811182821017156139dd576139dd613937565b604052919050565b803560ff811681146135ee57600080fd5b8035600381106135ee57600080fd5b600067ffffffffffffffff821115613a1f57613a1f613937565b50601f01601f191660200190565b600082601f830112613a3e57600080fd5b8135613a51613a4c82613a05565b6139b4565b818152846020838601011115613a6657600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613a9557600080fd5b813567ffffffffffffffff80821115613aad57600080fd5b908301906101808286031215613ac257600080fd5b613aca613966565b613ad3836139e5565b8152613ae1602084016139e5565b6020820152613af2604084016139f6565b6040820152613b036060840161375f565b6060820152613b14608084016135e3565b6080820152613b2560a084016135e3565b60a082015260c083013582811115613b3c57600080fd5b613b4887828601613a2d565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b60008060408385031215613ba257600080fd5b8235613bad816135ce565b946020939093013593505050565b600181811c90821680613bcf57607f821691505b602082108103613c08577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80516135ee816135ce565b600082601f830112613c2a57600080fd5b8151613c38613a4c82613a05565b818152846020838601011115613c4d57600080fd5b613c5e826020830160208701613683565b949350505050565b8051600481106135ee57600080fd5b600060208284031215613c8757600080fd5b815167ffffffffffffffff80821115613c9f57600080fd5b908301906102808286031215613cb457600080fd5b613cbc613990565b613cc583613c0e565b8152613cd360208401613c0e565b6020820152613ce460408401613c0e565b6040820152606083015182811115613cfb57600080fd5b613d0787828601613c19565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120808401518183015250610140808401518183015250610160808401518183015250610180613d73818501613c0e565b908201526101a083810151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015183811115613dc257600080fd5b613dce88828701613c19565b8284015250506102609150613de4828401613c66565b91810191909152949350505050565b600060208284031215613e0557600080fd5b8151613610816135ce565b600060208284031215613e2257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156113b9576113b9613e29565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808201808211156113b9576113b9613e29565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ede57613ede613e29565b5060010190565b601f821115613f2b57600081815260208120601f850160051c81016020861015613f0c5750805b601f850160051c820191505b8181101561231357828155600101613f18565b505050565b815167ffffffffffffffff811115613f4a57613f4a613937565b613f5e81613f588454613bbb565b84613ee5565b602080601f831160018114613fb15760008415613f7b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612313565b600085815260208120601f198616915b82811015613fe057888601518255948401946001909101908401613fc1565b508582101561401c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60ff81811683821601908111156113b9576113b9613e29565b80820281158282048414176113b9576113b9613e29565b600082614092577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6004811061366f5761366f613630565b602081526140c16020820183516001600160a01b03169052565b600060208301516140dd60408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015161028080608085015261410f6102a08501836136a7565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0614196818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506141f884836136a7565b93508087015191505061420d82860182614097565b509094935050505056fea2646970667358221220764b54a118a28e0e923cc533495717149f3988d419c0caf3e7eb6f7e944ba4c664736f6c63430008150033") + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var AccountabilityBytecode = common.Hex2Bytes("608060405260006011553480156200001657600080fd5b50604051620044ed380380620044ed8339810160408190526200003991620000f7565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905163dfb1a4d2916004808201926020929091908290030181865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b99190620001bf565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001d9565b6000808284036101008112156200010d57600080fd5b83516001600160a01b03811681146200012557600080fd5b925060e0601f19820112156200013a57600080fd5b5060405160e081016001600160401b03811182821017156200016c57634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001d257600080fd5b5051919050565b61430480620001e96000396000f3fe6080604052600436106100d25760003560e01c80637ccecadd1161007f578063b5b7a18411610059578063b5b7a184146102af578063bebaa8fc146102d3578063c50d21f014610300578063e7bb0b521461032057600080fd5b80637ccecadd146102385780639cb22b061461026f578063a8031a1d1461029c57600080fd5b80636b5f444c116100b05780636b5f444c146101925780636c9789b0146101b457806379502c55146101d457600080fd5b806301567739146100d75780630b7914301461012a5780634108a95a14610162575b600080fd5b3480156100e357600080fd5b5061010d6100f2366004613684565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a6101453660046136a8565b610358565b6040516101219c9b9a99989796959493929190613764565b34801561016e57600080fd5b5061018261017d3660046137ff565b61046c565b6040519015158152602001610121565b34801561019e57600080fd5b506101b26101ad3660046136a8565b610535565b005b3480156101c057600080fd5b506101b26101cf36600461384b565b6105be565b3480156101e057600080fd5b506003546004546005546006546007546008546009546102039695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610121565b34801561024457600080fd5b506102586102533660046137ff565b610656565b604080519215158352602083019190915201610121565b34801561027b57600080fd5b5061028f61028a366004613684565b6107c4565b604051610121919061393e565b6101b26102aa366004613951565b610a6a565b3480156102bb57600080fd5b506102c560005481565b604051908152602001610121565b3480156102df57600080fd5b506102f36102ee366004613684565b610d87565b604051610121919061397d565b34801561030c57600080fd5b506101b261031b366004613b49565b611095565b34801561032c57600080fd5b506102c561033b366004613951565b600e60209081526000928352604080842090915290825290205481565b6002818154811061036857600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b036401000000009093048316949216929091906103cb90613c55565b80601f01602080910402602001604051908101604052809291908181526020018280546103f790613c55565b80156104445780601f1061041957610100808354040283529160200191610444565b820191906000526020600020905b81548152906001019060200180831161042757829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6000806104788461142c565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156104e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105049190613ca8565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b6001546001600160a01b031633146105b95760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600055565b6001546001600160a01b0316331461063d5760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084016105b0565b610645611497565b8015610653576106536117f0565b50565b60008060006106648561142c565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f09190613ca8565b6001600160a01b0388166000908152600e60209081526040808320848452909152902054909150821161072a5760009350600092506107ba565b6001600160a01b0387166000908152600c6020526040902054156107b1576001600160a01b0387166000908152600c602052604081205460029061077090600190613cf0565b8154811061078057610780613d03565b906000526020600020906008020190506000945060036000015481600401546107a99190613d32565b9350506107ba565b60019350600092505b5050935093915050565b61083a6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0382166000908152600c602052604090205461089f5760405162461bcd60e51b815260206004820152600d60248201527f6e6f2061636375736174696f6e0000000000000000000000000000000000000060448201526064016105b0565b6001600160a01b0382166000908152600c60205260409020546002906108c790600190613cf0565b815481106108d7576108d7613d03565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561092c5761092c6136c1565b600281111561093d5761093d6136c1565b815281546020909101906301000000900460ff166009811115610962576109626136c1565b6009811115610973576109736136c1565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916109af90613c55565b80601f01602080910402602001604051908101604052809291908181526020018280546109db90613c55565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b6001546001600160a01b03163314610ae95760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084016105b0565b6001546001600160a01b038381166000908152600a60205260408082205490517f1904bb2e000000000000000000000000000000000000000000000000000000008152908316600482015290929190911690631904bb2e90602401600060405180830381865afa158015610b61573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b899190810190613dac565b516001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301526024820186905292935091169063a9059cbb906044016020604051808303816000875af1925050508015610c14575060408051601f3d908101601f19168201909252610c1191810190613f2a565b60015b15610c1b57505b6000816001600160a01b0316346108fc90604051600060405180830381858888f193505050503d8060008114610c6d576040519150601f19603f3d011682016040523d82523d6000602084013e610c72565b606091505b5050905080610d4557600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190613f47565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610d3c576040519150601f19603f3d011682016040523d82523d6000602084013e610d41565b606091505b5050505b5050506001600160a01b03166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff811115610dbc57610dbc6139fd565b604051908082528060200260200182016040528015610e6357816020015b610e506040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081610dda5790505b50905060005b6001600160a01b0384166000908152600b602052604090205481101561108e576001600160a01b0384166000908152600b6020526040902080546002919083908110610eb757610eb7613d03565b906000526020600020015481548110610ed257610ed2613d03565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610f2757610f276136c1565b6002811115610f3857610f386136c1565b815281546020909101906301000000900460ff166009811115610f5d57610f5d6136c1565b6009811115610f6e57610f6e6136c1565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610faa90613c55565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613c55565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505082828151811061107057611070613d03565b6020026020010181905250808061108690613f64565b915050610e69565b5092915050565b6001546040517f1904bb2e0000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111f9190810190613dac565b60208101519091506001600160a01b031633146111a45760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201527f7265642076616c696461746f720000000000000000000000000000000000000060648201526084016105b0565b60808201516001600160a01b031633146112005760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c657200000060448201526064016105b0565b6001826000015160ff1611156113b657600061121b83611ad3565b90508061122757505050565b336000908152600d6020908152604091829020825161018081018452815460ff8082168352610100820481169483019490945290939192918401916201000090910416600281111561127b5761127b6136c1565b600281111561128c5761128c6136c1565b815281546020909101906301000000900460ff1660098111156112b1576112b16136c1565b60098111156112c2576112c26136c1565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916112fe90613c55565b80601f016020809104026020016040519081016040528092919081815260200182805461132a90613c55565b80156113775780601f1061134c57610100808354040283529160200191611377565b820191906000526020600020905b81548152906001019060200180831161135a57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b6000826040015160028111156113ce576113ce6136c1565b036113e0576113dc82611d8d565b5050565b6001826040015160028111156113f8576113f86136c1565b03611406576113dc8261201d565b60028260400151600281111561141e5761141e6136c1565b036113dc576113dc82612205565b60006009826009811115611442576114426136c1565b036114505760025b92915050565b6000826009811115611464576114646136c1565b0361147057600261144a565b6001826009811115611484576114846136c1565b0361149057600261144a565b600261144a565b6011545b6010548110156117eb576000601082815481106114ba576114ba613d03565b90600052602060002001549050806000036114d557506117d9565b6114e0600182613cf0565b90506000600282815481106114f7576114f7613d03565b600091825260209182902060408051610180810182526008909302909101805460ff80821685526101008204811695850195909552929390929184019162010000900416600281111561154c5761154c6136c1565b600281111561155d5761155d6136c1565b815281546020909101906301000000900460ff166009811115611582576115826136c1565b6009811115611593576115936136c1565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916115cf90613c55565b80601f01602080910402602001604051908101604052809291908181526020018280546115fb90613c55565b80156116485780601f1061161d57610100808354040283529160200191611648565b820191906000526020600020905b81548152906001019060200180831161162b57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090504360036000015482610140015161169c9190613d32565b11156116a9575050601155565b60a08101516001600160a01b03166000908152600c6020526040812081905560608201516116d69061142c565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111611714575050506117d9565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806117e381613f64565b91505061149b565b601155565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190613ca8565b905060005b600f548110156118e157816002600f838154811061188f5761188f613d03565b9060005260206000200154815481106118aa576118aa613d03565b906000526020600020906008020160050154036118cf576118cc600184613d32565b92505b806118d981613f64565b91505061186f565b5060005b600f54811015611ac657611ab46002600f838154811061190757611907613d03565b90600052602060002001548154811061192257611922613d03565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611977576119776136c1565b6002811115611988576119886136c1565b815281546020909101906301000000900460ff1660098111156119ad576119ad6136c1565b60098111156119be576119be6136c1565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916119fa90613c55565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2690613c55565b8015611a735780601f10611a4857610100808354040283529160200191611a73565b820191906000526020600020905b815481529060010190602001808311611a5657829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050846123ac565b80611abe81613f64565b9150506118e5565b506113dc600f600061360a565b6000816020015160ff16600003611c8957336000908152600d6020908152604091829020845181549286015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169116179190911780825591840151849282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836002811115611b7657611b766136c1565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115611bbd57611bbd6136c1565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190611c489082613fe7565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff91821691611cb79161010090041660016140e3565b60ff1614611d075760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f75730000000000000060448201526064016105b0565b336000908152600d6020526040902060c0830151611d2891600201906129a9565b336000908152600d602052604090208054600191908290611d52908290610100900460ff166140e3565b92506101000a81548160ff021916908360ff160217905550816000015160ff1682602001516001611d8391906140e3565b60ff161492915050565b6000806000806000611da460fe8760c00151612b11565b9450945094509450945084611dfb5760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e0000000000000060448201526064016105b0565b8560a001516001600160a01b0316846001600160a01b031614611e605760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016105b0565b85606001516009811115611e7657611e766136c1565b8314611ec45760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016105b0565b438210611f135760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e20746865206675747572650000000000000000000060448201526064016105b0565b60008211611f635760405162461bcd60e51b815260206004820152601360248201527f63616e27742062652061742067656e657369730000000000000000000000000060448201526064016105b0565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea9190613ca8565b61010088018490526101208801819052436101408901526101608801839052905061201487612b78565b50505050505050565b600080600080600061203460fc8760c00151612b11565b945094509450945094508461208b5760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e000060448201526064016105b0565b8560a001516001600160a01b0316846001600160a01b0316146120f05760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016105b0565b85606001516009811115612106576121066136c1565b83146121545760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016105b0565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db9190613ca8565b61010088018490526101208801819052436101408901526101608801839052905061201487612ed2565b600080600080600061221c60fd8760c00151612b11565b94509450945094509450846122735760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e00000060448201526064016105b0565b8560a001516001600160a01b0316846001600160a01b0316146122d85760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d6174636800000000000000000000000000000060448201526064016105b0565b856060015160098111156122ee576122ee6136c1565b831461233c5760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d617463680000000000000000000000000000000060448201526064016105b0565b43821061238b5760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e20746865206675747572650000000000000000000060448201526064016105b0565b610100860182905261016086018190526123a48661325f565b505050505050565b60015460a08301516040517f1904bb2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124409190810190613dac565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016919092161790559050600381610260015160038111156124a9576124a96136c1565b036124b357505050565b60006124ca6124c5856060015161142c565b6135b1565b610220830151600754919250906000906124e490836140fc565b6006546124f190876140fc565b6124fb9085613d32565b6125059190613d32565b60095490915081111561251757506009545b60008461012001518560c001518660a001516125339190613d32565b61253d9190613d32565b60095490915060009061255083856140fc565b61255a9190614113565b905060008111801561256b57508181145b156126b457600060a087018190526101008701819052610120870181905260c08701526101e0860180518291906125a3908390613d32565b90525061022086018051600191906125bc908390613d32565b905250600361026087015260006102008701526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e09061261890899060040161415e565b600060405180830381600087803b15801561263257600080fd5b505af1158015612646573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b610120860151819081116126e1578087610120018181516126d59190613cf0565b905250600090506126fc565b6101208701516126f19082613cf0565b600061012089015290505b8015612779578087610100015110612744578087610100018181516127219190613cf0565b90525060a087018051829190612738908390613cf0565b90525060009050612779565b6101008701516127549082613cf0565b90508661010001518760a00181815161276d9190613cf0565b90525060006101008801525b60008111801561279c575060008760a001518860c0015161279a9190613d32565b115b156128485760008760a001518860c001516127b79190613d32565b60c08901516127c690846140fc565b6127d09190614113565b905060008860a001518960c001516127e89190613d32565b60a08a01516127f790856140fc565b6128019190614113565b9050818960c0018181516128159190613cf0565b90525060a08901805182919061282c908390613cf0565b9052506128398183613d32565b6128439084613cf0565b925050505b6128528183613cf0565b915081876101e0018181516128679190613d32565b9052506102208701805160019190612880908390613d32565b90525060005461022088015160085461289991906140fc565b6128a391906140fc565b6128ad9043613d32565b61020088015260026102608801526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e090612904908a9060040161415e565b600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b815460026001808316156101000203821604825180820160208110602084100160028114612a535760018114612a78578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015612a3d5781518455600184019350602082019150612a20565b815191036101000a908190040290915550612014565b60028302826020036101000a846020036101000a602089015104020185018755612014565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a039250828251167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008a160184556020820191506001840193505b80821015612af75781518455600184019350602082019150612ada565b815191036101000a90819004029091555050505050505050565b60008060008060008086516020612b289190613d32565b9050612b32613628565b60a081838a8c5afa612b4357600080fd5b8051600103612b5157600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b6000612b87826060015161142c565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612c2a5760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f63680000000000000000000000000000000000000000000000000000000060648201526084016105b0565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091169062010000908490811115612cf057612cf06136c1565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612d3757612d376136c1565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190612dc29082613fe7565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f91612ec691858252602082015260400190565b60405180910390a25050565b60a08101516001600160a01b03166000908152600c602052604090205415612f3c5760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e60448201526064016105b0565b6000612f4b826060015161142c565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612fee5760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f63680000000000000000000000000000000000000000000000000000000060648201526084016105b0565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff90911690620100009084908111156130b4576130b46136c1565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000008360098111156130fb576130fb6136c1565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c082015160028201906131869082613fe7565b5060e0828101516003830155610100830151600483015561012083015160058301556101408301516006830155610160909201516007909101558201516131ce906001613d32565b60a08301516001600160a01b03166000908152600c602052604090205560e08201516010906131fe906001613d32565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba403519101612ec6565b60a08101516001600160a01b03166000908152600c6020526040812054908190036132cc5760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e000000000000000060448201526064016105b0565b816060015160098111156132e2576132e26136c1565b60026132ef600184613cf0565b815481106132ff576132ff613d03565b60009182526020909120600890910201546301000000900460ff16600981111561332b5761332b6136c1565b1461339e5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f72756c652069640000000000000000000000000000000000000000000000000060648201526084016105b0565b61010082015160026133b1600184613cf0565b815481106133c1576133c1613d03565b906000526020600020906008020160040154146134465760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f626c6f636b00000000000000000000000000000000000000000000000000000060648201526084016105b0565b6101608201516002613459600184613cf0565b8154811061346957613469613d03565b906000526020600020906008020160070154146134ed5760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f686173680000000000000000000000000000000000000000000000000000000060648201526084016105b0565b6011545b60105481101561355757816010828154811061350f5761350f613d03565b9060005260206000200154036135455760006010828154811061353457613534613d03565b600091825260209091200155613557565b8061354f81613f64565b9150506134f1565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101612ec6565b6000816135c057505060055490565b600182036135d057505060055490565b600282036135e057505060055490565b600382036135f057505060055490565b600482036136015750612710919050565b50612710919050565b50805460008255906000526020600020908101906106539190613646565b6040518060a001604052806005906020820280368337509192915050565b5b8082111561365b5760008155600101613647565b5090565b6001600160a01b038116811461065357600080fd5b803561367f8161365f565b919050565b60006020828403121561369657600080fd5b81356136a18161365f565b9392505050565b6000602082840312156136ba57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613700576137006136c1565b9052565b600a8110613700576137006136c1565b60005b8381101561372f578181015183820152602001613717565b50506000910152565b60008151808452613750816020860160208601613714565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e166020840152613785604084018e6136f0565b613792606084018d613704565b6001600160a01b038b811660808501528a1660a084015260c083018190526137bc8184018a613738565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a811061367f57600080fd5b60008060006060848603121561381457600080fd5b833561381f8161365f565b925061382d602085016137f0565b9150604084013590509250925092565b801515811461065357600080fd5b60006020828403121561385d57600080fd5b81356136a18161383d565b805160ff16825260006101806020830151613888602086018260ff169052565b50604083015161389b60408601826136f0565b5060608301516138ae6060860182613704565b5060808301516138c960808601826001600160a01b03169052565b5060a08301516138e460a08601826001600160a01b03169052565b5060c08301518160c08601526138fc82860182613738565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b6020815260006136a16020830184613868565b6000806040838503121561396457600080fd5b823561396f8161365f565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156139f0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526139de858351613868565b945092850192908501906001016139a4565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613a5057613a506139fd565b60405290565b604051610280810167ffffffffffffffff81118282101715613a5057613a506139fd565b604051601f8201601f1916810167ffffffffffffffff81118282101715613aa357613aa36139fd565b604052919050565b803560ff8116811461367f57600080fd5b80356003811061367f57600080fd5b600067ffffffffffffffff821115613ae557613ae56139fd565b50601f01601f191660200190565b600082601f830112613b0457600080fd5b8135613b17613b1282613acb565b613a7a565b818152846020838601011115613b2c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613b5b57600080fd5b813567ffffffffffffffff80821115613b7357600080fd5b908301906101808286031215613b8857600080fd5b613b90613a2c565b613b9983613aab565b8152613ba760208401613aab565b6020820152613bb860408401613abc565b6040820152613bc9606084016137f0565b6060820152613bda60808401613674565b6080820152613beb60a08401613674565b60a082015260c083013582811115613c0257600080fd5b613c0e87828601613af3565b60c08301525060e083810135908201526101008084013590820152610120808401359082015261014080840135908201526101609283013592810192909252509392505050565b600181811c90821680613c6957607f821691505b602082108103613ca2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613cba57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561144a5761144a613cc1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8082018082111561144a5761144a613cc1565b805161367f8161365f565b600082601f830112613d6157600080fd5b8151613d6f613b1282613acb565b818152846020838601011115613d8457600080fd5b613d95826020830160208701613714565b949350505050565b80516004811061367f57600080fd5b600060208284031215613dbe57600080fd5b815167ffffffffffffffff80821115613dd657600080fd5b908301906102808286031215613deb57600080fd5b613df3613a56565b613dfc83613d45565b8152613e0a60208401613d45565b6020820152613e1b60408401613d45565b6040820152606083015182811115613e3257600080fd5b613e3e87828601613d50565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120808401518183015250610140808401518183015250610160808401518183015250610180613eaa818501613d45565b908201526101a083810151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015183811115613ef957600080fd5b613f0588828701613d50565b8284015250506102609150613f1b828401613d9d565b91810191909152949350505050565b600060208284031215613f3c57600080fd5b81516136a18161383d565b600060208284031215613f5957600080fd5b81516136a18161365f565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9557613f95613cc1565b5060010190565b601f821115613fe257600081815260208120601f850160051c81016020861015613fc35750805b601f850160051c820191505b818110156123a457828155600101613fcf565b505050565b815167ffffffffffffffff811115614001576140016139fd565b6140158161400f8454613c55565b84613f9c565b602080601f83116001811461406857600084156140325750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556123a4565b600085815260208120601f198616915b8281101561409757888601518255948401946001909101908401614078565b50858210156140d357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60ff818116838216019081111561144a5761144a613cc1565b808202811582820484141761144a5761144a613cc1565b600082614149577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60048110613700576137006136c1565b602081526141786020820183516001600160a01b03169052565b6000602083015161419460408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516102808060808501526141c66102a0850183613738565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a061424d818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506142af8483613738565b9350808701519150506142c48286018261414e565b509094935050505056fea26469706673582212200b7e2e4c6e161fd22c65dcb6f4fb9bf3a33530f17d142f1acf54b16beec40acd64736f6c63430008150033") var AccountabilityAbi, _ = abi.JSON(strings.NewReader(`[ { @@ -297,6 +300,11 @@ var AccountabilityAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "address", "name" : "_validator", "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "_ntnReward", + "type" : "uint256" } ], "name" : "distributeRewards", diff --git a/params/generated/AccountabilityTest.go b/params/generated/AccountabilityTest.go index 90f4b1ae49..8e12d30bed 100644 --- a/params/generated/AccountabilityTest.go +++ b/params/generated/AccountabilityTest.go @@ -1,10 +1,13 @@ package generated -import "strings" -import "github.com/autonity/autonity/accounts/abi" -import "github.com/autonity/autonity/common" +import ( + "strings" -var AccountabilityTestBytecode = common.Hex2Bytes("608060405260006011553480156200001657600080fd5b506040516200481d3803806200481d833981016040819052620000399162000100565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905184928492909163dfb1a4d2916004808201926020929091908290030181865afa15801562000099573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bf9190620001c8565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001e2915050565b6000808284036101008112156200011657600080fd5b83516001600160a01b03811681146200012e57600080fd5b925060e0601f19820112156200014357600080fd5b5060405160e081016001600160401b03811182821017156200017557634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001db57600080fd5b5051919050565b61462b80620001f26000396000f3fe60806040526004361061015f5760003560e01c80637ec8be1d116100c0578063b5b7a18411610074578063bebaa8fc11610059578063bebaa8fc1461041f578063c50d21f01461044c578063e7bb0b521461046c57600080fd5b8063b5b7a184146103db578063bb841eda146103ff57600080fd5b8063a044ba41116100a5578063a044ba4114610386578063a04cd117146103a6578063a9dd7e23146103c657600080fd5b80637ec8be1d146103445780639cb22b061461035957600080fd5b8063633b5e5e116101175780636c9789b0116100fc5780636c9789b01461028957806379502c55146102a95780637ccecadd1461030d57600080fd5b8063633b5e5e146102545780636b5f444c1461026957600080fd5b80631de9d9b6116101485780631de9d9b6146101ef5780634108a95a1461020457806342d507641461023457600080fd5b806301567739146101645780630b791430146101b7575b600080fd5b34801561017057600080fd5b5061019a61017f36600461397c565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c357600080fd5b506101d76101d23660046139a0565b6104a4565b6040516101ae9c9b9a99989796959493929190613a5c565b6102026101fd36600461397c565b6105b8565b005b34801561021057600080fd5b5061022461021f366004613af7565b610849565b60405190151581526020016101ae565b34801561024057600080fd5b5061020261024f366004613d68565b610912565b34801561026057600080fd5b5061020261091e565b34801561027557600080fd5b506102026102843660046139a0565b610928565b34801561029557600080fd5b506102026102a4366004613da5565b6109ac565b3480156102b557600080fd5b506003546004546005546006546007546008546009546102d89695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101ae565b34801561031957600080fd5b5061032d610328366004613af7565b610a41565b6040805192151583526020830191909152016101ae565b34801561035057600080fd5b50610202610baf565b34801561036557600080fd5b5061037961037436600461397c565b610bb7565b6040516101ae9190613e9d565b34801561039257600080fd5b506102026103a1366004613eb0565b610e5d565b3480156103b257600080fd5b506102026103c1366004613d68565b610e6b565b3480156103d257600080fd5b50610379610e74565b3480156103e757600080fd5b506103f160005481565b6040519081526020016101ae565b34801561040b57600080fd5b5061020261041a366004613d68565b61107a565b34801561042b57600080fd5b5061043f61043a36600461397c565b611083565b6040516101ae9190613ef5565b34801561045857600080fd5b50610202610467366004613d68565b611391565b34801561047857600080fd5b506103f1610487366004613f75565b600e60209081526000928352604080842090915290825290205481565b600281815481106104b457600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b0364010000000090930483169492169290919061051790613fa1565b80601f016020809104026020016040519081016040528092919081815260200182805461054390613fa1565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6001546001600160a01b0316331461063c5760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546001600160a01b038281166000908152600a60205260408082205490517f1904bb2e000000000000000000000000000000000000000000000000000000008152908316600482015290929190911690631904bb2e90602401600060405180830381865afa1580156106b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106dc9190810190614053565b516040519091506000906001600160a01b038316906108fc90349084818181858888f193505050503d8060008114610730576040519150601f19603f3d011682016040523d82523d6000602084013e610735565b606091505b505090508061080857600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b591906141d1565b6001600160a01b03163460405160006040518083038185875af1925050503d80600081146107ff576040519150601f19603f3d011682016040523d82523d6000602084013e610804565b606091505b5050505b50506001600160a01b03166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60008061085584611724565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156108bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e191906141ee565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b61091b8161178f565b50565b610926611ae9565b565b6001546001600160a01b031633146109a75760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f72000000000000000000000000000000000000000000000000000000006064820152608401610633565b600055565b6001546001600160a01b03163314610a2b5760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f72000000000000000000000000000000000000000000000000000000006064820152608401610633565b610a33611dcc565b801561091b5761091b611ae9565b6000806000610a4f85611724565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb91906141ee565b6001600160a01b0388166000908152600e602090815260408083208484529091529020549091508211610b15576000935060009250610ba5565b6001600160a01b0387166000908152600c602052604090205415610b9c576001600160a01b0387166000908152600c6020526040812054600290610b5b90600190614236565b81548110610b6b57610b6b614249565b90600052602060002090600802019050600094506003600001548160040154610b949190614278565b935050610ba5565b60019350600092505b5050935093915050565b610926611dcc565b610c2d6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0382166000908152600c6020526040902054610c925760405162461bcd60e51b815260206004820152600d60248201527f6e6f2061636375736174696f6e000000000000000000000000000000000000006044820152606401610633565b6001600160a01b0382166000908152600c6020526040902054600290610cba90600190614236565b81548110610cca57610cca614249565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610d1f57610d1f6139b9565b6002811115610d3057610d306139b9565b815281546020909101906301000000900460ff166009811115610d5557610d556139b9565b6009811115610d6657610d666139b9565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610da290613fa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce90613fa1565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b610e678282612125565b5050565b61091b81612722565b610eea6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610f3e57610f3e6139b9565b6002811115610f4f57610f4f6139b9565b815281546020909101906301000000900460ff166009811115610f7457610f746139b9565b6009811115610f8557610f856139b9565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610fc190613fa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fed90613fa1565b801561103a5780601f1061100f5761010080835404028352916020019161103a565b820191906000526020600020905b81548152906001019060200180831161101d57829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905090565b61091b81612a74565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff8111156110b8576110b8613b35565b60405190808252806020026020018201604052801561115f57816020015b61114c6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816110d65790505b50905060005b6001600160a01b0384166000908152600b602052604090205481101561138a576001600160a01b0384166000908152600b60205260409020805460029190839081106111b3576111b3614249565b9060005260206000200154815481106111ce576111ce614249565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611223576112236139b9565b6002811115611234576112346139b9565b815281546020909101906301000000900460ff166009811115611259576112596139b9565b600981111561126a5761126a6139b9565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916112a690613fa1565b80601f01602080910402602001604051908101604052809291908181526020018280546112d290613fa1565b801561131f5780601f106112f45761010080835404028352916020019161131f565b820191906000526020600020905b81548152906001019060200180831161130257829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505082828151811061136c5761136c614249565b602002602001018190525080806113829061428b565b915050611165565b5092915050565b6001546040517f1904bb2e0000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa1580156113f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261141b9190810190614053565b60208101519091506001600160a01b031633146114a05760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201527f7265642076616c696461746f72000000000000000000000000000000000000006064820152608401610633565b60808201516001600160a01b031633146114fc5760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610633565b6001826000015160ff1611156116b257600061151783612e01565b90508061152357505050565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115611577576115776139b9565b6002811115611588576115886139b9565b815281546020909101906301000000900460ff1660098111156115ad576115ad6139b9565b60098111156115be576115be6139b9565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916115fa90613fa1565b80601f016020809104026020016040519081016040528092919081815260200182805461162690613fa1565b80156116735780601f1061164857610100808354040283529160200191611673565b820191906000526020600020905b81548152906001019060200180831161165657829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b6000826040015160028111156116ca576116ca6139b9565b036116d857610e67826130bb565b6001826040015160028111156116f0576116f06139b9565b036116fe57610e678261334b565b600282604001516002811115611716576117166139b9565b03610e6757610e6782613533565b6000600982600981111561173a5761173a6139b9565b036117485760025b92915050565b600082600981111561175c5761175c6139b9565b03611768576002611742565b600182600981111561177c5761177c6139b9565b03611788576002611742565b6002611742565b600061179e8260600151611724565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116118415760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f6368000000000000000000000000000000000000000000000000000000006064820152608401610633565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091169062010000908490811115611907576119076139b9565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff16630100000083600981111561194e5761194e6139b9565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c082015160028201906119d9908261430e565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f91611add91858252602082015260400190565b60405180910390a25050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906141ee565b905060005b600f54811015611bda57816002600f8381548110611b8857611b88614249565b906000526020600020015481548110611ba357611ba3614249565b90600052602060002090600802016005015403611bc857611bc5600184614278565b92505b80611bd28161428b565b915050611b68565b5060005b600f54811015611dbf57611dad6002600f8381548110611c0057611c00614249565b906000526020600020015481548110611c1b57611c1b614249565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611c7057611c706139b9565b6002811115611c8157611c816139b9565b815281546020909101906301000000900460ff166009811115611ca657611ca66139b9565b6009811115611cb757611cb76139b9565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191611cf390613fa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1f90613fa1565b8015611d6c5780601f10611d4157610100808354040283529160200191611d6c565b820191906000526020600020905b815481529060010190602001808311611d4f57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505084612125565b80611db78161428b565b915050611bde565b50610e67600f6000613902565b6011545b60105481101561212057600060108281548110611def57611def614249565b9060005260206000200154905080600003611e0a575061210e565b611e15600182614236565b9050600060028281548110611e2c57611e2c614249565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611e8157611e816139b9565b6002811115611e9257611e926139b9565b815281546020909101906301000000900460ff166009811115611eb757611eb76139b9565b6009811115611ec857611ec86139b9565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191611f0490613fa1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3090613fa1565b8015611f7d5780601f10611f5257610100808354040283529160200191611f7d565b820191906000526020600020905b815481529060010190602001808311611f6057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905043600360000154826101400151611fd19190614278565b1115611fde575050601155565b60a08101516001600160a01b03166000908152600c60205260408120819055606082015161200b90611724565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116120495750505061210e565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806121188161428b565b915050611dd0565b601155565b60015460a08301516040517f1904bb2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015612191573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121b99190810190614053565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055905060038161026001516003811115612222576122226139b9565b0361222c57505050565b600061224361223e8560600151611724565b6136da565b6102208301516007549192509060009061225d908361440a565b60065461226a908761440a565b6122749085614278565b61227e9190614278565b60095490915081111561229057506009545b60008461012001518560c001518660a001516122ac9190614278565b6122b69190614278565b6009549091506000906122c9838561440a565b6122d39190614421565b90506000811180156122e457508181145b1561242d57600060a087018190526101008701819052610120870181905260c08701526101e08601805182919061231c908390614278565b9052506102208601805160019190612335908390614278565b905250600361026087015260006102008701526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e09061239190899060040161446c565b600060405180830381600087803b1580156123ab57600080fd5b505af11580156123bf573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b6101208601518190811161245a5780876101200181815161244e9190614236565b90525060009050612475565b61012087015161246a9082614236565b600061012089015290505b80156124f25780876101000151106124bd5780876101000181815161249a9190614236565b90525060a0870180518291906124b1908390614236565b905250600090506124f2565b6101008701516124cd9082614236565b90508661010001518760a0018181516124e69190614236565b90525060006101008801525b600081118015612515575060008760a001518860c001516125139190614278565b115b156125c15760008760a001518860c001516125309190614278565b60c089015161253f908461440a565b6125499190614421565b905060008860a001518960c001516125619190614278565b60a08a0151612570908561440a565b61257a9190614421565b9050818960c00181815161258e9190614236565b90525060a0890180518291906125a5908390614236565b9052506125b28183614278565b6125bc9084614236565b925050505b6125cb8183614236565b915081876101e0018181516125e09190614278565b90525061022087018051600191906125f9908390614278565b905250600054610220880151600854612612919061440a565b61261c919061440a565b6126269043614278565b61020088015260026102608801526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e09061267d908a9060040161446c565b600060405180830381600087803b15801561269757600080fd5b505af11580156126ab573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b60a08101516001600160a01b03166000908152600c60205260408120549081900361278f5760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610633565b816060015160098111156127a5576127a56139b9565b60026127b2600184614236565b815481106127c2576127c2614249565b60009182526020909120600890910201546301000000900460ff1660098111156127ee576127ee6139b9565b146128615760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f72756c65206964000000000000000000000000000000000000000000000000006064820152608401610633565b6101008201516002612874600184614236565b8154811061288457612884614249565b906000526020600020906008020160040154146129095760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f626c6f636b0000000000000000000000000000000000000000000000000000006064820152608401610633565b610160820151600261291c600184614236565b8154811061292c5761292c614249565b906000526020600020906008020160070154146129b05760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f68617368000000000000000000000000000000000000000000000000000000006064820152608401610633565b6011545b601054811015612a1a5781601082815481106129d2576129d2614249565b906000526020600020015403612a08576000601082815481106129f7576129f7614249565b600091825260209091200155612a1a565b80612a128161428b565b9150506129b4565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101611add565b60a08101516001600160a01b03166000908152600c602052604090205415612ade5760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610633565b6000612aed8260600151611724565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612b905760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f6368000000000000000000000000000000000000000000000000000000006064820152608401610633565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091169062010000908490811115612c5657612c566139b9565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612c9d57612c9d6139b9565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190612d28908261430e565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612d70906001614278565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612da0906001614278565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba403519101611add565b6000816020015160ff16600003612fb757336000908152600d6020908152604091829020845181549286015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169116179190911780825591840151849282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836002811115612ea457612ea46139b9565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612eeb57612eeb6139b9565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190612f76908261430e565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff91821691612fe59161010090041660016145dc565b60ff16146130355760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610633565b336000908152600d6020526040902060c08301516130569160020190613733565b336000908152600d602052604090208054600191908290613080908290610100900460ff166145dc565b92506101000a81548160ff021916908360ff160217905550816000015160ff16826020015160016130b191906145dc565b60ff161492915050565b60008060008060006130d260fe8760c0015161389b565b94509450945094509450846131295760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610633565b8560a001516001600160a01b0316846001600160a01b03161461318e5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610633565b856060015160098111156131a4576131a46139b9565b83146131f25760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610633565b4382106132415760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e2074686520667574757265000000000000000000006044820152606401610633565b600082116132915760405162461bcd60e51b815260206004820152601360248201527f63616e27742062652061742067656e65736973000000000000000000000000006044820152606401610633565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa1580156132f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331891906141ee565b6101008801849052610120880181905243610140890152610160880183905290506133428761178f565b50505050505050565b600080600080600061336260fc8760c0015161389b565b94509450945094509450846133b95760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610633565b8560a001516001600160a01b0316846001600160a01b03161461341e5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610633565b85606001516009811115613434576134346139b9565b83146134825760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610633565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa1580156134e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350991906141ee565b61010088018490526101208801819052436101408901526101608801839052905061334287612a74565b600080600080600061354a60fd8760c0015161389b565b94509450945094509450846135a15760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610633565b8560a001516001600160a01b0316846001600160a01b0316146136065760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610633565b8560600151600981111561361c5761361c6139b9565b831461366a5760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610633565b4382106136b95760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e2074686520667574757265000000000000000000006044820152606401610633565b610100860182905261016086018190526136d286612722565b505050505050565b6000816136e957505060055490565b600182036136f957505060055490565b6002820361370957505060055490565b6003820361371957505060055490565b6004820361372a5750612710919050565b50612710919050565b8154600260018083161561010002038216048251808201602081106020841001600281146137dd5760018114613802578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156137c757815184556001840193506020820191506137aa565b815191036101000a908190040290915550613342565b60028302826020036101000a846020036101000a602089015104020185018755613342565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a039250828251167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008a160184556020820191506001840193505b808210156138815781518455600184019350602082019150613864565b815191036101000a90819004029091555050505050505050565b600080600080600080865160206138b29190614278565b90506138bc613920565b60a081838a8c5afa6138cd57600080fd5b80516001036138db57600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b508054600082559060005260206000209081019061091b919061393e565b6040518060a001604052806005906020820280368337509192915050565b5b80821115613953576000815560010161393f565b5090565b6001600160a01b038116811461091b57600080fd5b803561397781613957565b919050565b60006020828403121561398e57600080fd5b813561399981613957565b9392505050565b6000602082840312156139b257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106139f8576139f86139b9565b9052565b600a81106139f8576139f86139b9565b60005b83811015613a27578181015183820152602001613a0f565b50506000910152565b60008151808452613a48816020860160208601613a0c565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e166020840152613a7d604084018e6139e8565b613a8a606084018d6139fc565b6001600160a01b038b811660808501528a1660a084015260c08301819052613ab48184018a613a30565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a811061397757600080fd5b600080600060608486031215613b0c57600080fd5b8335613b1781613957565b9250613b2560208501613ae8565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613b8857613b88613b35565b60405290565b604051610280810167ffffffffffffffff81118282101715613b8857613b88613b35565b604051601f8201601f1916810167ffffffffffffffff81118282101715613bdb57613bdb613b35565b604052919050565b803560ff8116811461397757600080fd5b80356003811061397757600080fd5b600067ffffffffffffffff821115613c1d57613c1d613b35565b50601f01601f191660200190565b600082601f830112613c3c57600080fd5b8135613c4f613c4a82613c03565b613bb2565b818152846020838601011115613c6457600080fd5b816020850160208301376000918101602001919091529392505050565b60006101808284031215613c9457600080fd5b613c9c613b64565b9050613ca782613be3565b8152613cb560208301613be3565b6020820152613cc660408301613bf4565b6040820152613cd760608301613ae8565b6060820152613ce86080830161396c565b6080820152613cf960a0830161396c565b60a082015260c082013567ffffffffffffffff811115613d1857600080fd5b613d2484828501613c2b565b60c08301525060e082810135908201526101008083013590820152610120808301359082015261014080830135908201526101609182013591810191909152919050565b600060208284031215613d7a57600080fd5b813567ffffffffffffffff811115613d9157600080fd5b613d9d84828501613c81565b949350505050565b600060208284031215613db757600080fd5b8135801515811461399957600080fd5b805160ff16825260006101806020830151613de7602086018260ff169052565b506040830151613dfa60408601826139e8565b506060830151613e0d60608601826139fc565b506080830151613e2860808601826001600160a01b03169052565b5060a0830151613e4360a08601826001600160a01b03169052565b5060c08301518160c0860152613e5b82860182613a30565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b6020815260006139996020830184613dc7565b60008060408385031215613ec357600080fd5b823567ffffffffffffffff811115613eda57600080fd5b613ee685828601613c81565b95602094909401359450505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613f56858351613dc7565b94509285019290850190600101613f1c565b5092979650505050505050565b60008060408385031215613f8857600080fd5b8235613f9381613957565b946020939093013593505050565b600181811c90821680613fb557607f821691505b602082108103613fee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b805161397781613957565b600082601f83011261401057600080fd5b815161401e613c4a82613c03565b81815284602083860101111561403357600080fd5b613d9d826020830160208701613a0c565b80516004811061397757600080fd5b60006020828403121561406557600080fd5b815167ffffffffffffffff8082111561407d57600080fd5b90830190610280828603121561409257600080fd5b61409a613b8e565b6140a383613ff4565b81526140b160208401613ff4565b60208201526140c260408401613ff4565b60408201526060830151828111156140d957600080fd5b6140e587828601613fff565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120808401518183015250610140808401518183015250610160808401518183015250610180614151818501613ff4565b908201526101a083810151908201526101c080840151908201526101e080840151908201526102008084015190820152610220808401519082015261024080840151838111156141a057600080fd5b6141ac88828701613fff565b82840152505061026091506141c2828401614044565b91810191909152949350505050565b6000602082840312156141e357600080fd5b815161399981613957565b60006020828403121561420057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561174257611742614207565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8082018082111561174257611742614207565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142bc576142bc614207565b5060010190565b601f82111561430957600081815260208120601f850160051c810160208610156142ea5750805b601f850160051c820191505b818110156136d2578281556001016142f6565b505050565b815167ffffffffffffffff81111561432857614328613b35565b61433c816143368454613fa1565b846142c3565b602080601f83116001811461438f57600084156143595750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556136d2565b600085815260208120601f198616915b828110156143be5788860151825594840194600190910190840161439f565b50858210156143fa57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761174257611742614207565b600082614457577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600481106139f8576139f86139b9565b602081526144866020820183516001600160a01b03169052565b600060208301516144a260408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516102808060808501526144d46102a0850183613a30565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a061455b818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506145bd8483613a30565b9350808701519150506145d28286018261445c565b5090949350505050565b60ff81811683821601908111156117425761174261420756fea264697066735822122095f8e28e2f1255f9f126137567bad53a715305450720386b1afb70dae5e0c79f64736f6c63430008150033") + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var AccountabilityTestBytecode = common.Hex2Bytes("608060405260006011553480156200001657600080fd5b50604051620048d4380380620048d4833981016040819052620000399162000100565b600180546001600160a01b0319166001600160a01b03841690811790915560408051636fd8d26960e11b8152905184928492909163dfb1a4d2916004808201926020929091908290030181865afa15801562000099573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bf9190620001c8565b6000558051600355602081015160045560408101516005556060810151600655608081015160075560a081015160085560c0015160095550620001e2915050565b6000808284036101008112156200011657600080fd5b83516001600160a01b03811681146200012e57600080fd5b925060e0601f19820112156200014357600080fd5b5060405160e081016001600160401b03811182821017156200017557634e487b7160e01b600052604160045260246000fd5b80604052506020840151815260408401516020820152606084015160408201526080840151606082015260a0840151608082015260c084015160a082015260e084015160c0820152809150509250929050565b600060208284031215620001db57600080fd5b5051919050565b6146e280620001f26000396000f3fe60806040526004361061015f5760003560e01c80639cb22b06116100c0578063b5b7a18411610074578063bebaa8fc11610059578063bebaa8fc1461041f578063c50d21f01461044c578063e7bb0b521461046c57600080fd5b8063b5b7a184146103db578063bb841eda146103ff57600080fd5b8063a04cd117116100a5578063a04cd11714610393578063a8031a1d146103b3578063a9dd7e23146103c657600080fd5b80639cb22b0614610346578063a044ba411461037357600080fd5b80636b5f444c1161011757806379502c55116100fc57806379502c55146102965780637ccecadd146102fa5780637ec8be1d1461033157600080fd5b80636b5f444c146102565780636c9789b01461027657600080fd5b80634108a95a116101485780634108a95a146101ef57806342d507641461021f578063633b5e5e1461024157600080fd5b806301567739146101645780630b791430146101b7575b600080fd5b34801561017057600080fd5b5061019a61017f366004613a0d565b600a602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c357600080fd5b506101d76101d2366004613a31565b6104a4565b6040516101ae9c9b9a99989796959493929190613aed565b3480156101fb57600080fd5b5061020f61020a366004613b88565b6105b8565b60405190151581526020016101ae565b34801561022b57600080fd5b5061023f61023a366004613df9565b610681565b005b34801561024d57600080fd5b5061023f61068d565b34801561026257600080fd5b5061023f610271366004613a31565b610697565b34801561028257600080fd5b5061023f610291366004613e44565b610720565b3480156102a257600080fd5b506003546004546005546006546007546008546009546102c59695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101ae565b34801561030657600080fd5b5061031a610315366004613b88565b6107b5565b6040805192151583526020830191909152016101ae565b34801561033d57600080fd5b5061023f610923565b34801561035257600080fd5b50610366610361366004613a0d565b61092b565b6040516101ae9190613f37565b34801561037f57600080fd5b5061023f61038e366004613f4a565b610bd1565b34801561039f57600080fd5b5061023f6103ae366004613df9565b610bdf565b61023f6103c1366004613f8f565b610be8565b3480156103d257600080fd5b50610366610f05565b3480156103e757600080fd5b506103f160005481565b6040519081526020016101ae565b34801561040b57600080fd5b5061023f61041a366004613df9565b61110b565b34801561042b57600080fd5b5061043f61043a366004613a0d565b611114565b6040516101ae9190613fbb565b34801561045857600080fd5b5061023f610467366004613df9565b611422565b34801561047857600080fd5b506103f1610487366004613f8f565b600e60209081526000928352604080842090915290825290205481565b600281815481106104b457600080fd5b600091825260209091206008909102018054600182015460028301805460ff8085169650610100850481169562010000860482169563010000008104909216946001600160a01b036401000000009093048316949216929091906105179061403b565b80601f01602080910402602001604051908101604052809291908181526020018280546105439061403b565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b505050505090806003015490806004015490806005015490806006015490806007015490508c565b6000806105c4846117b5565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018690529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610650919061408e565b6001600160a01b0387166000908152600e602090815260408083209383529290522054919091109150509392505050565b61068a81611820565b50565b610695611b7a565b565b6001546001600160a01b0316331461071b5760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f720000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600055565b6001546001600160a01b0316331461079f5760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f72000000000000000000000000000000000000000000000000000000006064820152608401610712565b6107a7611e5d565b801561068a5761068a611b7a565b60008060006107c3856117b5565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018790529192506000916001600160a01b03909116906396b477cb90602401602060405180830381865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f919061408e565b6001600160a01b0388166000908152600e602090815260408083208484529091529020549091508211610889576000935060009250610919565b6001600160a01b0387166000908152600c602052604090205415610910576001600160a01b0387166000908152600c60205260408120546002906108cf906001906140d6565b815481106108df576108df6140e9565b906000526020600020906008020190506000945060036000015481600401546109089190614118565b935050610919565b60019350600092505b5050935093915050565b610695611e5d565b6109a16040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0382166000908152600c6020526040902054610a065760405162461bcd60e51b815260206004820152600d60248201527f6e6f2061636375736174696f6e000000000000000000000000000000000000006044820152606401610712565b6001600160a01b0382166000908152600c6020526040902054600290610a2e906001906140d6565b81548110610a3e57610a3e6140e9565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115610a9357610a93613a4a565b6002811115610aa457610aa4613a4a565b815281546020909101906301000000900460ff166009811115610ac957610ac9613a4a565b6009811115610ada57610ada613a4a565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191610b169061403b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b429061403b565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b610bdb82826121b6565b5050565b61068a816127b3565b6001546001600160a01b03163314610c675760405162461bcd60e51b8152602060048201526024808201527f66756e6374696f6e207265737472696374656420746f207468652076616c696460448201527f61746f72000000000000000000000000000000000000000000000000000000006064820152608401610712565b6001546001600160a01b038381166000908152600a60205260408082205490517f1904bb2e000000000000000000000000000000000000000000000000000000008152908316600482015290929190911690631904bb2e90602401600060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d07919081019061418a565b516001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301526024820186905292935091169063a9059cbb906044016020604051808303816000875af1925050508015610d92575060408051601f3d908101601f19168201909252610d8f91810190614308565b60015b15610d9957505b6000816001600160a01b0316346108fc90604051600060405180830381858888f193505050503d8060008114610deb576040519150601f19603f3d011682016040523d82523d6000602084013e610df0565b606091505b5050905080610ec357600160009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190614325565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610eba576040519150601f19603f3d011682016040523d82523d6000602084013e610ebf565b606091505b5050505b5050506001600160a01b03166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610f7b6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b336000908152600d6020908152604091829020825161018081018452815460ff80821683526101008204811694830194909452909391929184019162010000909104166002811115610fcf57610fcf613a4a565b6002811115610fe057610fe0613a4a565b815281546020909101906301000000900460ff16600981111561100557611005613a4a565b600981111561101657611016613a4a565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916110529061403b565b80601f016020809104026020016040519081016040528092919081815260200182805461107e9061403b565b80156110cb5780601f106110a0576101008083540402835291602001916110cb565b820191906000526020600020905b8154815290600101906020018083116110ae57829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050905090565b61068a81612b05565b6001600160a01b0381166000908152600b60205260408120546060919067ffffffffffffffff81111561114957611149613bc6565b6040519080825280602002602001820160405280156111f057816020015b6111dd6040805161018081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816111675790505b50905060005b6001600160a01b0384166000908152600b602052604090205481101561141b576001600160a01b0384166000908152600b6020526040902080546002919083908110611244576112446140e9565b90600052602060002001548154811061125f5761125f6140e9565b600091825260209182902060408051610180810182526008909302909101805460ff8082168552610100820481169585019590955292939092918401916201000090041660028111156112b4576112b4613a4a565b60028111156112c5576112c5613a4a565b815281546020909101906301000000900460ff1660098111156112ea576112ea613a4a565b60098111156112fb576112fb613a4a565b815281546001600160a01b036401000000009091048116602083015260018301541660408201526002820180546060909201916113379061403b565b80601f01602080910402602001604051908101604052809291908181526020018280546113639061403b565b80156113b05780601f10611385576101008083540402835291602001916113b0565b820191906000526020600020905b81548152906001019060200180831161139357829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508282815181106113fd576113fd6140e9565b6020026020010181905250808061141390614342565b9150506111f6565b5092915050565b6001546040517f1904bb2e0000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b031690631904bb2e90602401600060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114ac919081019061418a565b60208101519091506001600160a01b031633146115315760405162461bcd60e51b815260206004820152602d60248201527f66756e6374696f6e207265737472696374656420746f2061207265676973746560448201527f7265642076616c696461746f72000000000000000000000000000000000000006064820152608401610712565b60808201516001600160a01b0316331461158d5760405162461bcd60e51b815260206004820152601d60248201527f6576656e74207265706f72746572206d7573742062652063616c6c65720000006044820152606401610712565b6001826000015160ff1611156117435760006115a883612e92565b9050806115b457505050565b336000908152600d6020908152604091829020825161018081018452815460ff8082168352610100820481169483019490945290939192918401916201000090910416600281111561160857611608613a4a565b600281111561161957611619613a4a565b815281546020909101906301000000900460ff16600981111561163e5761163e613a4a565b600981111561164f5761164f613a4a565b815281546001600160a01b0364010000000090910481166020830152600183015416604082015260028201805460609092019161168b9061403b565b80601f01602080910402602001604051908101604052809291908181526020018280546116b79061403b565b80156117045780601f106116d957610100808354040283529160200191611704565b820191906000526020600020905b8154815290600101906020018083116116e757829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509250505b60008260400151600281111561175b5761175b613a4a565b0361176957610bdb8261314c565b60018260400151600281111561178157611781613a4a565b0361178f57610bdb826133dc565b6002826040015160028111156117a7576117a7613a4a565b03610bdb57610bdb826135c4565b600060098260098111156117cb576117cb613a4a565b036117d95760025b92915050565b60008260098111156117ed576117ed613a4a565b036117f95760026117d3565b600182600981111561180d5761180d613a4a565b036118195760026117d3565b60026117d3565b600061182f82606001516117b5565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116118d25760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f6368000000000000000000000000000000000000000000000000000000006064820152608401610712565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909116906201000090849081111561199857611998613a4a565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000008360098111156119df576119df613a4a565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190611a6a90826143c5565b5060e0828101516003830155610100830151600483015561012080840151600584015561014084015160068401556101609093015160079092019190915560a0840180516001600160a01b039081166000908152600b602090815260408083209589018051875460018181018a5598865284862001558051600f8054988901815585527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290970196909655845184168352600e82528083209689015183529590528490208590559051915192519116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f91611b6e91858252602082015260400190565b60405180910390a25050565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663c9d97af46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf4919061408e565b905060005b600f54811015611c6b57816002600f8381548110611c1957611c196140e9565b906000526020600020015481548110611c3457611c346140e9565b90600052602060002090600802016005015403611c5957611c56600184614118565b92505b80611c6381614342565b915050611bf9565b5060005b600f54811015611e5057611e3e6002600f8381548110611c9157611c916140e9565b906000526020600020015481548110611cac57611cac6140e9565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611d0157611d01613a4a565b6002811115611d1257611d12613a4a565b815281546020909101906301000000900460ff166009811115611d3757611d37613a4a565b6009811115611d4857611d48613a4a565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191611d849061403b565b80601f0160208091040260200160405190810160405280929190818152602001828054611db09061403b565b8015611dfd5780601f10611dd257610100808354040283529160200191611dfd565b820191906000526020600020905b815481529060010190602001808311611de057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050846121b6565b80611e4881614342565b915050611c6f565b50610bdb600f6000613993565b6011545b6010548110156121b157600060108281548110611e8057611e806140e9565b9060005260206000200154905080600003611e9b575061219f565b611ea66001826140d6565b9050600060028281548110611ebd57611ebd6140e9565b600091825260209182902060408051610180810182526008909302909101805460ff808216855261010082048116958501959095529293909291840191620100009004166002811115611f1257611f12613a4a565b6002811115611f2357611f23613a4a565b815281546020909101906301000000900460ff166009811115611f4857611f48613a4a565b6009811115611f5957611f59613a4a565b815281546001600160a01b03640100000000909104811660208301526001830154166040820152600282018054606090920191611f959061403b565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc19061403b565b801561200e5780601f10611fe35761010080835404028352916020019161200e565b820191906000526020600020905b815481529060010190602001808311611ff157829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050436003600001548261014001516120629190614118565b111561206f575050601155565b60a08101516001600160a01b03166000908152600c60205260408120819055606082015161209c906117b5565b60a08301516001600160a01b03166000908152600e60209081526040808320610120870151845290915290205490915081116120da5750505061219f565b60a0820180516001600160a01b039081166000908152600e6020908152604080832061012088015184528252808320869055845184168352600b825280832080546001808201835591855283852001899055600f805491820181559093527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920187905592518151858152938401879052909116917f6b7783718ab8e152c193eb08bf76eed1191fcd1677a23a7fe9d338265aad132f910160405180910390a25050505b806121a981614342565b915050611e61565b601155565b60015460a08301516040517f1904bb2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000929190911690631904bb2e90602401600060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261224a919081019061418a565b608084015160a08501516001600160a01b039081166000908152600a6020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016919092161790559050600381610260015160038111156122b3576122b3613a4a565b036122bd57505050565b60006122d46122cf85606001516117b5565b61376b565b610220830151600754919250906000906122ee90836144c1565b6006546122fb90876144c1565b6123059085614118565b61230f9190614118565b60095490915081111561232157506009545b60008461012001518560c001518660a0015161233d9190614118565b6123479190614118565b60095490915060009061235a83856144c1565b61236491906144d8565b905060008111801561237557508181145b156124be57600060a087018190526101008701819052610120870181905260c08701526101e0860180518291906123ad908390614118565b90525061022086018051600191906123c6908390614118565b905250600361026087015260006102008701526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e090612422908990600401614523565b600060405180830381600087803b15801561243c57600080fd5b505af1158015612450573d6000803e3d6000fd5b5050505060208681015160e08a0151604080516001600160a01b03909316835292820184905260008284015260016060830152608082015290517f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f99181900360a00190a15050505050505050565b610120860151819081116124eb578087610120018181516124df91906140d6565b90525060009050612506565b6101208701516124fb90826140d6565b600061012089015290505b801561258357808761010001511061254e5780876101000181815161252b91906140d6565b90525060a0870180518291906125429083906140d6565b90525060009050612583565b61010087015161255e90826140d6565b90508661010001518760a00181815161257791906140d6565b90525060006101008801525b6000811180156125a6575060008760a001518860c001516125a49190614118565b115b156126525760008760a001518860c001516125c19190614118565b60c08901516125d090846144c1565b6125da91906144d8565b905060008860a001518960c001516125f29190614118565b60a08a015161260190856144c1565b61260b91906144d8565b9050818960c00181815161261f91906140d6565b90525060a0890180518291906126369083906140d6565b9052506126438183614118565b61264d90846140d6565b925050505b61265c81836140d6565b915081876101e0018181516126719190614118565b905250610220870180516001919061268a908390614118565b9052506000546102208801516008546126a391906144c1565b6126ad91906144c1565b6126b79043614118565b61020088015260026102608801526001546040517f35be16e00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335be16e09061270e908a90600401614523565b600060405180830381600087803b15801561272857600080fd5b505af115801561273c573d6000803e3d6000fd5b5050506020808901516102008a015160e08d0151604080516001600160a01b039094168452938301879052928201526000606082015260808101919091527f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9915060a00160405180910390a1505050505050505050565b60a08101516001600160a01b03166000908152600c6020526040812054908190036128205760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610712565b8160600151600981111561283657612836613a4a565b60026128436001846140d6565b81548110612853576128536140e9565b60009182526020909120600890910201546301000000900460ff16600981111561287f5761287f613a4a565b146128f25760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f72756c65206964000000000000000000000000000000000000000000000000006064820152608401610712565b61010082015160026129056001846140d6565b81548110612915576129156140e9565b9060005260206000209060080201600401541461299a5760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f626c6f636b0000000000000000000000000000000000000000000000000000006064820152608401610712565b61016082015160026129ad6001846140d6565b815481106129bd576129bd6140e9565b90600052602060002090600802016007015414612a415760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e2060448201527f68617368000000000000000000000000000000000000000000000000000000006064820152608401610712565b6011545b601054811015612aab578160108281548110612a6357612a636140e9565b906000526020600020015403612a9957600060108281548110612a8857612a886140e9565b600091825260209091200155612aab565b80612aa381614342565b915050612a45565b5060a0820180516001600160a01b039081166000908152600c602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101611b6e565b60a08101516001600160a01b03166000908152600c602052604090205415612b6f5760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610712565b6000612b7e82606001516117b5565b60a08301516001600160a01b03166000908152600e6020908152604080832061012087015184529091529020549091508111612c215760405162461bcd60e51b8152602060048201526024808201527f616c726561647920736c6173686564206174207468652070726f6f662773206560448201527f706f6368000000000000000000000000000000000000000000000000000000006064820152608401610712565b6002805460e084018190526001810182556000829052835160089091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054602086015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092169316929092179190911780825560408501518593909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091169062010000908490811115612ce757612ce7613a4a565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612d2e57612d2e613a4a565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c08201516002820190612db990826143c5565b5060e082810151600383015561010083015160048301556101208301516005830155610140830151600683015561016090920151600790910155820151612e01906001614118565b60a08301516001600160a01b03166000908152600c602052604090205560e0820151601090612e31906001614118565b81546001810183556000928352602092839020015560a083015160e084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba403519101611b6e565b6000816020015160ff1660000361304857336000908152600d6020908152604091829020845181549286015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169116179190911780825591840151849282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836002811115612f3557612f35613a4a565b02179055506060820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000836009811115612f7c57612f7c613a4a565b0217905550608082015181547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b039283160217825560a08301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905560c0820151600282019061300790826143c5565b5060e0820151600382015561010082015160048201556101208201516005820155610140820151600682015561016090910151600790910155506000919050565b602080830151336000908152600d90925260409091205460ff91821691613076916101009004166001614693565b60ff16146130c65760405162461bcd60e51b815260206004820152601960248201527f6368756e6b73206d75737420626520636f6e746967756f7573000000000000006044820152606401610712565b336000908152600d6020526040902060c08301516130e791600201906137c4565b336000908152600d602052604090208054600191908290613111908290610100900460ff16614693565b92506101000a81548160ff021916908360ff160217905550816000015160ff16826020015160016131429190614693565b60ff161492915050565b600080600080600061316360fe8760c0015161392c565b94509450945094509450846131ba5760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610712565b8560a001516001600160a01b0316846001600160a01b03161461321f5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610712565b8560600151600981111561323557613235613a4a565b83146132835760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610712565b4382106132d25760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e2074686520667574757265000000000000000000006044820152606401610712565b600082116133225760405162461bcd60e51b815260206004820152601360248201527f63616e27742062652061742067656e65736973000000000000000000000000006044820152606401610712565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015613385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a9919061408e565b6101008801849052610120880181905243610140890152610160880183905290506133d387611820565b50505050505050565b60008060008060006133f360fc8760c0015161392c565b945094509450945094508461344a5760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610712565b8560a001516001600160a01b0316846001600160a01b0316146134af5760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610712565b856060015160098111156134c5576134c5613a4a565b83146135135760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610712565b6001546040517f96b477cb000000000000000000000000000000000000000000000000000000008152600481018490526000916001600160a01b0316906396b477cb90602401602060405180830381865afa158015613576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359a919061408e565b6101008801849052610120880181905243610140890152610160880183905290506133d387612b05565b60008060008060006135db60fd8760c0015161392c565b94509450945094509450846136325760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610712565b8560a001516001600160a01b0316846001600160a01b0316146136975760405162461bcd60e51b815260206004820152601160248201527f6f6666656e646572206d69736d617463680000000000000000000000000000006044820152606401610712565b856060015160098111156136ad576136ad613a4a565b83146136fb5760405162461bcd60e51b815260206004820152601060248201527f72756c65206964206d69736d61746368000000000000000000000000000000006044820152606401610712565b43821061374a5760405162461bcd60e51b815260206004820152601660248201527f63616e277420626520696e2074686520667574757265000000000000000000006044820152606401610712565b61010086018290526101608601819052613763866127b3565b505050505050565b60008161377a57505060055490565b6001820361378a57505060055490565b6002820361379a57505060055490565b600382036137aa57505060055490565b600482036137bb5750612710919050565b50612710919050565b81546002600180831615610100020382160482518082016020811060208410016002811461386e5760018114613893578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015613858578151845560018401935060208201915061383b565b815191036101000a9081900402909155506133d3565b60028302826020036101000a846020036101000a6020890151040201850187556133d3565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a039250828251167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008a160184556020820191506001840193505b8082101561391257815184556001840193506020820191506138f5565b815191036101000a90819004029091555050505050505050565b600080600080600080865160206139439190614118565b905061394d6139b1565b60a081838a8c5afa61395e57600080fd5b805160010361396c57600196505b602081015160408201516060830151608090930151989b919a509850909695509350505050565b508054600082559060005260206000209081019061068a91906139cf565b6040518060a001604052806005906020820280368337509192915050565b5b808211156139e457600081556001016139d0565b5090565b6001600160a01b038116811461068a57600080fd5b8035613a08816139e8565b919050565b600060208284031215613a1f57600080fd5b8135613a2a816139e8565b9392505050565b600060208284031215613a4357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613a8957613a89613a4a565b9052565b600a8110613a8957613a89613a4a565b60005b83811015613ab8578181015183820152602001613aa0565b50506000910152565b60008151808452613ad9816020860160208601613a9d565b601f01601f19169290920160200192915050565b600061018060ff8f16835260ff8e166020840152613b0e604084018e613a79565b613b1b606084018d613a8d565b6001600160a01b038b811660808501528a1660a084015260c08301819052613b458184018a613ac1565b60e0840198909852505061010081019490945261012084019290925261014083015261016090910152979650505050505050565b8035600a8110613a0857600080fd5b600080600060608486031215613b9d57600080fd5b8335613ba8816139e8565b9250613bb660208501613b79565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613c1957613c19613bc6565b60405290565b604051610280810167ffffffffffffffff81118282101715613c1957613c19613bc6565b604051601f8201601f1916810167ffffffffffffffff81118282101715613c6c57613c6c613bc6565b604052919050565b803560ff81168114613a0857600080fd5b803560038110613a0857600080fd5b600067ffffffffffffffff821115613cae57613cae613bc6565b50601f01601f191660200190565b600082601f830112613ccd57600080fd5b8135613ce0613cdb82613c94565b613c43565b818152846020838601011115613cf557600080fd5b816020850160208301376000918101602001919091529392505050565b60006101808284031215613d2557600080fd5b613d2d613bf5565b9050613d3882613c74565b8152613d4660208301613c74565b6020820152613d5760408301613c85565b6040820152613d6860608301613b79565b6060820152613d79608083016139fd565b6080820152613d8a60a083016139fd565b60a082015260c082013567ffffffffffffffff811115613da957600080fd5b613db584828501613cbc565b60c08301525060e082810135908201526101008083013590820152610120808301359082015261014080830135908201526101609182013591810191909152919050565b600060208284031215613e0b57600080fd5b813567ffffffffffffffff811115613e2257600080fd5b613e2e84828501613d12565b949350505050565b801515811461068a57600080fd5b600060208284031215613e5657600080fd5b8135613a2a81613e36565b805160ff16825260006101806020830151613e81602086018260ff169052565b506040830151613e946040860182613a79565b506060830151613ea76060860182613a8d565b506080830151613ec260808601826001600160a01b03169052565b5060a0830151613edd60a08601826001600160a01b03169052565b5060c08301518160c0860152613ef582860182613ac1565b60e08581015190870152610100808601519087015261012080860151908701526101408086015190870152610160948501519490950193909352509192915050565b602081526000613a2a6020830184613e61565b60008060408385031215613f5d57600080fd5b823567ffffffffffffffff811115613f7457600080fd5b613f8085828601613d12565b95602094909401359450505050565b60008060408385031215613fa257600080fd5b8235613fad816139e8565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561402e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261401c858351613e61565b94509285019290850190600101613fe2565b5092979650505050505050565b600181811c9082168061404f57607f821691505b602082108103614088577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156140a057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156117d3576117d36140a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808201808211156117d3576117d36140a7565b8051613a08816139e8565b600082601f83011261414757600080fd5b8151614155613cdb82613c94565b81815284602083860101111561416a57600080fd5b613e2e826020830160208701613a9d565b805160048110613a0857600080fd5b60006020828403121561419c57600080fd5b815167ffffffffffffffff808211156141b457600080fd5b9083019061028082860312156141c957600080fd5b6141d1613c1f565b6141da8361412b565b81526141e86020840161412b565b60208201526141f96040840161412b565b604082015260608301518281111561421057600080fd5b61421c87828601614136565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e082015261010080840151818301525061012080840151818301525061014080840151818301525061016080840151818301525061018061428881850161412b565b908201526101a083810151908201526101c080840151908201526101e080840151908201526102008084015190820152610220808401519082015261024080840151838111156142d757600080fd5b6142e388828701614136565b82840152505061026091506142f982840161417b565b91810191909152949350505050565b60006020828403121561431a57600080fd5b8151613a2a81613e36565b60006020828403121561433757600080fd5b8151613a2a816139e8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614373576143736140a7565b5060010190565b601f8211156143c057600081815260208120601f850160051c810160208610156143a15750805b601f850160051c820191505b81811015613763578281556001016143ad565b505050565b815167ffffffffffffffff8111156143df576143df613bc6565b6143f3816143ed845461403b565b8461437a565b602080601f83116001811461444657600084156144105750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613763565b600085815260208120601f198616915b8281101561447557888601518255948401946001909101908401614456565b50858210156144b157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176117d3576117d36140a7565b60008261450e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60048110613a8957613a89613a4a565b6020815261453d6020820183516001600160a01b03169052565b6000602083015161455960408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015161028080608085015261458b6102a0850183613ac1565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0614612818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506146748483613ac1565b93508087015191505061468982860182614513565b5090949350505050565b60ff81811683821601908111156117d3576117d36140a756fea2646970667358221220a586aa3b2f5b733f4f63e5674fd3d4be7712de71a864df07bcd5694dc51fa27464736f6c63430008150033") var AccountabilityTestAbi, _ = abi.JSON(strings.NewReader(`[ { @@ -297,6 +300,11 @@ var AccountabilityTestAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "address", "name" : "_validator", "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "_ntnReward", + "type" : "uint256" } ], "name" : "distributeRewards", diff --git a/params/generated/Autonity.go b/params/generated/Autonity.go index b2577bfc1e..4a86f89f75 100644 --- a/params/generated/Autonity.go +++ b/params/generated/Autonity.go @@ -1,10 +1,13 @@ package generated -import "strings" -import "github.com/autonity/autonity/accounts/abi" -import "github.com/autonity/autonity/common" +import ( + "strings" -var AutonityBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b506040516200b90e3803806200b90e8339810160408190526200003e9162000e64565b601c546000036200006757602a80546001600160a01b031916331790556200006782826200006f565b505062001325565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b825181101562000420576000838281518110620001805762000180620010a1565b602002602001015160a0015190506000848381518110620001a557620001a5620010a1565b60200260200101516101a00181815250506000848381518110620001cd57620001cd620010a1565b602002602001015161018001906001600160a01b031690816001600160a01b0316815250506000848381518110620002095762000209620010a1565b602002602001015160a00181815250506000848381518110620002305762000230620010a1565b60209081029190910101516101c00152600f5484518590849081106200025a576200025a620010a1565b602002602001015160800181815250506000848381518110620002815762000281620010a1565b602002602001015161026001906003811115620002a257620002a2620010b7565b90816003811115620002b857620002b8620010b7565b815250506000848381518110620002d357620002d3620010a1565b602002602001015161016001818152505062000311848381518110620002fd57620002fd620010a1565b60200260200101516200042560201b60201c565b6200033e8483815181106200032a576200032a620010a1565b60200260200101516200056060201b60201c565b8060276000868581518110620003585762000358620010a1565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003959190620010e3565b925050819055508060296000828254620003b09190620010e3565b925050819055506200040a848381518110620003d057620003d0620010a1565b60200260200101516020015182868581518110620003f257620003f2620010a1565b6020026020010151600001516200079160201b60201c565b50806200041781620010ff565b9150506200015f565b505050565b60006200043c82606001516200097c60201b60201c565b6001600160a01b03909116602084015290508015620004905760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620005045760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000487565b612710826080015111156200055c5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000487565b5050565b6101808101516001600160a01b0316620005e357601d546000906200058590620009ca565b905081602001518260000151836080015183604051620005a59062000aea565b620005b494939291906200111b565b604051809103906000f080158015620005d1573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006959082620011ff565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182015561024082015160128201906200075f9082620011ff565b5061026082015160138201805460ff19166001836003811115620007875762000787620010b7565b0217905550505050565b60008211620007ef5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000487565b6001600160a01b038116600090815260276020526040902054821115620008595760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000487565b6001600160a01b0381166000908152602760205260408120805484929062000883908490620012cb565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b03199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200090f83620010ff565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b6000806200098962000af8565b60008060ff9050604083875160208901845afa620009a657600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003620009f25750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a22578062000a0981620010ff565b915062000a1a9050600a83620012f7565b9150620009f6565b6000816001600160401b0381111562000a3f5762000a3f62000b16565b6040519080825280601f01601f19166020018201604052801562000a6a576020820181803683370190505b5090505b841562000ae25762000a82600183620012cb565b915062000a91600a866200130e565b62000a9e906030620010e3565b60f81b81838151811062000ab65762000ab6620010a1565b60200101906001600160f81b031916908160001a90535062000ada600a86620012f7565b945062000a6e565b949350505050565b611a208062009eee83390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b515762000b5162000b16565b60405290565b60405160a081016001600160401b038111828210171562000b515762000b5162000b16565b60405161028081016001600160401b038111828210171562000b515762000b5162000b16565b604051601f8201601f191681016001600160401b038111828210171562000bcd5762000bcd62000b16565b604052919050565b6001600160a01b038116811462000beb57600080fd5b50565b805162000bfb8162000bd5565b919050565b60005b8381101562000c1d57818101518382015260200162000c03565b50506000910152565b600082601f83011262000c3857600080fd5b81516001600160401b0381111562000c545762000c5462000b16565b62000c69601f8201601f191660200162000ba2565b81815284602083860101111562000c7f57600080fd5b62000ae282602083016020870162000c00565b80516004811062000bfb57600080fd5b600060c0828403121562000cb557600080fd5b60405160c081016001600160401b038111828210171562000cda5762000cda62000b16565b8060405250809150825162000cef8162000bd5565b8152602083015162000d018162000bd5565b6020820152604083015162000d168162000bd5565b6040820152606083015162000d2b8162000bd5565b6060820152608083015162000d408162000bd5565b608082015260a083015162000d558162000bd5565b60a0919091015292915050565b60006080828403121562000d7557600080fd5b62000d7f62000b2c565b9050815162000d8e8162000bd5565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361020081121562000dcb57600080fd5b62000dd562000b2c565b915060a081121562000de657600080fd5b5062000df162000b57565b82518152602083015160208201526040830151604082015260608301516060820152608083015162000e238162000bd5565b6080820152815262000e398360a0840162000ca2565b602082015262000e4e83610160840162000d62565b60408201526101e0820151606082015292915050565b60008061022080848603121562000e7a57600080fd5b83516001600160401b038082111562000e9257600080fd5b818601915086601f83011262000ea757600080fd5b815160208282111562000ebe5762000ebe62000b16565b8160051b62000ecf82820162000ba2565b928352848101820192828101908b85111562000eea57600080fd5b83870192505b848310156200107f5782518681111562000f0957600080fd5b8701610280818e03601f1901121562000f2157600080fd5b62000f2b62000b7c565b62000f3886830162000bee565b815262000f486040830162000bee565b8682015262000f5a6060830162000bee565b604082015260808201518881111562000f7257600080fd5b62000f828f888386010162000c26565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015161014082015261018082015161016082015262000ff06101a0830162000bee565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e0820152898201516102008201526102408201518a820152610260820151888111156200104257600080fd5b620010528f888386010162000c26565b6102408301525062001068610280830162000c92565b610260820152835250918301919083019062000ef0565b8099505050506200109389828a0162000db6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620010f957620010f9620010cd565b92915050565b600060018201620011145762001114620010cd565b5060010190565b600060018060a01b0380871683528086166020840152508360408301526080606083015282518060808401526200115a8160a085016020870162000c00565b601f01601f19169190910160a00195945050505050565b600181811c908216806200118657607f821691505b602082108103620011a757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042057600081815260208120601f850160051c81016020861015620011d65750805b601f850160051c820191505b81811015620011f757828155600101620011e2565b505050505050565b81516001600160401b038111156200121b576200121b62000b16565b62001233816200122c845462001171565b84620011ad565b602080601f8311600181146200126b5760008415620012525750858301515b600019600386901b1c1916600185901b178555620011f7565b600085815260208120601f198616915b828110156200129c578886015182559484019460019091019084016200127b565b5085821015620012bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115620010f957620010f9620010cd565b634e487b7160e01b600052601260045260246000fd5b600082620013095762001309620012e1565b500490565b600082620013205762001320620012e1565b500690565b618bb980620013356000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000d1e578063dfb1a4d21462000d68578063e7f43c681462000d7f578063f7866ee31462000d9f57005b8063d372c07e1462000c9a578063d5f394881462000cbf578063d861b0e81462000ce1578063d886f8a21462000cf957005b8063cb696f5411620000e5578063cb696f541462000c13578063ceaad4551462000c38578063cf9c57191462000c5d578063cfd19fb91462000c7557005b8063b66b3e791462000ba3578063b7ab4db51462000bcb578063c2362dd51462000be3578063c9d97af41462000bfb57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000b0d578063b2ea9adb1462000b34578063b3ecbadd1462000b59578063b46e55201462000b7e57005b8063a5d059ca1462000a75578063a8b2216e1462000a9a578063a9059cbb1462000ac1578063ab8f6ffe1462000ae657005b80639bb851c011620001d15780639bb851c014620009fb5780639c98e4711462000a135780639dc29fac1462000a2b578063a515366a1462000a5057005b8063872cf05914620009455780638bac7dad146200095d57806395d89b41146200098257806396b477cb14620009ca57005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008c4578063833b1fce14620008db57806384467fdb14620008fb578063852c4849146200092057005b8063731b3a03146200078557806377e741c7146200079c578063784304b514620007c157806379502c5514620007e657005b80635f7d394911620002c95780635f7d394914620006d15780636b5f444c146200070f5780636fd2c80b146200073457806370a08231146200074b57005b8063436459691462000648578063496ccd9b146200065f5780634bb278f31462000684578063520fdbbc14620006ac57005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005c8578063313ce56714620005e057806335be16e014620005fe57806340c10f19146200062357005b806318160ddd14620005415780631904bb2e146200055857806323b872dd146200058c57806329070c6d14620005b157005b80631122063311620003b55780631122063314620004c8578063114eaf5514620004df5780631250a28d14620005045780631604e416146200052957005b806306fdde0314620003f1578063095ea7b3146200044c5780630ae65e7a14620004825780630d8e6e2c14620004a757005b36620003ef57005b005b348015620003fe57600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b60405162000443919062006095565b60405180910390f35b3480156200045957600080fd5b50620004716200046b366004620060c7565b62000dbf565b604051901515815260200162000443565b3480156200048f57600080fd5b50620003ef620004a1366004620060f6565b62000dd8565b348015620004b457600080fd5b50601c545b60405190815260200162000443565b348015620004d557600080fd5b50600e54620004b9565b348015620004ec57600080fd5b50620003ef620004fe36600462006116565b62000eea565b3480156200051157600080fd5b50620003ef62000523366004620060f6565b62000f4b565b3480156200053657600080fd5b50620004b960245481565b3480156200054e57600080fd5b50602954620004b9565b3480156200056557600080fd5b506200057d62000577366004620060f6565b62000fd6565b6040516200044391906200619b565b3480156200059957600080fd5b5062000471620005ab36600462006314565b620012b3565b348015620005be57600080fd5b50600d54620004b9565b348015620005d557600080fd5b50620004b961271081565b348015620005ed57600080fd5b506040516012815260200162000443565b3480156200060b57600080fd5b50620003ef6200061d3660046200635a565b6200130d565b3480156200063057600080fd5b50620003ef62000642366004620060c7565b62001503565b3480156200065557600080fd5b50601a54620004b9565b3480156200066c57600080fd5b50620003ef6200067e366004620060f6565b620015ec565b3480156200069157600080fd5b506200069c62001764565b604051620004439291906200641b565b348015620006b957600080fd5b50620003ef620006cb366004620060f6565b62001be4565b348015620006de57600080fd5b50620006f6620006f036600462006438565b62001e98565b6040516001600160a01b03909116815260200162000443565b3480156200071c57600080fd5b50620003ef6200072e36600462006116565b620020c3565b3480156200074157600080fd5b50601054620004b9565b3480156200075857600080fd5b50620004b96200076a366004620060f6565b6001600160a01b031660009081526027602052604090205490565b3480156200079257600080fd5b50602054620004b9565b348015620007a957600080fd5b50620003ef620007bb36600462006116565b62002291565b348015620007ce57600080fd5b50620003ef620007e03660046200651f565b620022f2565b348015620007f357600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c54620008b2939084565b60405162000443949392919062006575565b348015620008d157600080fd5b50601b54620004b9565b348015620008e857600080fd5b506013546001600160a01b0316620006f6565b3480156200090857600080fd5b50620003ef6200091a3660046200664d565b62002564565b3480156200092d57600080fd5b50620003ef6200093f366004620060c7565b62002693565b3480156200095257600080fd5b50620003ef620028b5565b3480156200096a57600080fd5b50620003ef6200097c36600462006116565b62002920565b3480156200098f57600080fd5b5060408051808201909152600381527f4e544e0000000000000000000000000000000000000000000000000000000000602082015262000434565b348015620009d757600080fd5b50620004b9620009e936600462006116565b6000908152601f602052604090205490565b34801562000a0857600080fd5b50620004b960235481565b34801562000a2057600080fd5b50620004b960215481565b34801562000a3857600080fd5b50620003ef62000a4a366004620060c7565b620029d3565b34801562000a5d57600080fd5b50620003ef62000a6f366004620060c7565b62002b1f565b34801562000a8257600080fd5b50620003ef62000a94366004620060c7565b62002c21565b34801562000aa757600080fd5b5062000ab262002cef565b604051620004439190620066f6565b34801562000ace57600080fd5b506200047162000ae0366004620060c7565b62002dd2565b34801562000af357600080fd5b5062000afe62002de1565b6040516200044391906200677a565b34801562000b1a57600080fd5b5062000b2562002ef3565b6040516200044391906200678f565b34801562000b4157600080fd5b50620003ef62000b53366004620067de565b62003199565b34801562000b6657600080fd5b50620003ef62000b78366004620060f6565b6200320f565b34801562000b8b57600080fd5b50620003ef62000b9d366004620060f6565b6200329a565b34801562000bb057600080fd5b5062000bbb6200355a565b604051620004439291906200683f565b34801562000bd857600080fd5b5062000b2562003691565b34801562000bf057600080fd5b50620004b960205481565b34801562000c0857600080fd5b50620004b9601e5481565b34801562000c2057600080fd5b50620003ef62000c3236600462006116565b620036f5565b34801562000c4557600080fd5b50620003ef62000c57366004620060f6565b62003787565b34801562000c6a57600080fd5b50620003ef62003812565b34801562000c8257600080fd5b50620003ef62000c94366004620060f6565b62003895565b34801562000ca757600080fd5b50620003ef62000cb9366004620060f6565b62003920565b34801562000ccc57600080fd5b50602a54620006f6906001600160a01b031681565b34801562000cee57600080fd5b50620003ef620039ab565b34801562000d0657600080fd5b50620003ef62000d18366004620060f6565b62003a41565b34801562000d2b57600080fd5b50620004b962000d3d36600462006871565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d7557600080fd5b50601954620004b9565b34801562000d8c57600080fd5b506018546001600160a01b0316620006f6565b34801562000dac57600080fd5b506011546001600160a01b0316620006f6565b600062000dce33848462003acc565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000e4b5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000edc5760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000e42565b62000ee78162003c29565b50565b6018546001600160a01b0316331462000f465760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b601055565b6018546001600160a01b0316331462000fa75760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b62000fe062005e6e565b6001600160a01b03808316600081815260286020526040902060010154909116146200104f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6001600160a01b038083166000908152602860209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010b290620068af565b80601f0160208091040260200160405190810160405280929190818152602001828054620010e090620068af565b8015620011315780601f10620011055761010080835404028352916020019162001131565b820191906000526020600020905b8154815290600101906020018083116200111357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011ed90620068af565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b90620068af565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001296576200129662006130565b6003811115620012aa57620012aa62006130565b90525092915050565b6000620012c284848462003d00565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620012f390849062006933565b90506200130285338362003acc565b506001949350505050565b6012546001600160a01b031633146200138f5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6000610120820135602882620013ac6040860160208701620060f6565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013dc919062006933565b60c083013560286000620013f76040870160208801620060f6565b6001600160a01b03166001600160a01b031681526020019081526020016000206006015462001427919062006933565b60a084013560286000620014426040880160208901620060f6565b6001600160a01b03166001600160a01b031681526020019081526020016000206005015462001472919062006933565b6200147e919062006949565b6200148a919062006949565b6011546001600160a01b0316600090815260276020526040812080549293508392909190620014bb90849062006949565b9091555082905060286000620014d86040840160208501620060f6565b6001600160a01b031681526020810191909152604001600020620014fd828262006b51565b50505050565b6018546001600160a01b031633146200155f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6001600160a01b038216600090815260276020526040812080548392906200158990849062006949565b925050819055508060296000828254620015a4919062006949565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620016485760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620016cd57600080fd5b505af1158015620016e2573d6000803e3d6000fd5b50506016546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200174857600080fd5b505af11580156200175d573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620017ec5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b601e54436000818152601f6020908152604082209390935560195492549092620018169162006949565b6012546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200187a57600080fd5b505af11580156200188f573d6000803e3d6000fd5b5050505080156200199d57620018a462003e10565b620018ae62004212565b620018b862004301565b6000620018c462002ef3565b6013546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f290620019109084906004016200678f565b600060405180830381600087803b1580156200192b57600080fd5b505af115801562001940573d6000803e3d6000fd5b50505050436020819055506001601e600082825462001960919062006949565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b601354604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001a02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a28919062006d36565b9050801562001abd57601454604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562001ab5575060408051601f3d908101601f1916820190925262001ab29181019062006d36565b60015b1562001abd57505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001bd4576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001b3c90620068af565b80601f016020809104026020016040519081016040528092919081815260200182805462001b6a90620068af565b801562001bbb5780601f1062001b8f5761010080835404028352916020019162001bbb565b820191906000526020600020905b81548152906001019060200180831162001b9d57829003601f168201915b5050505050815250508152602001906001019062001ae6565b5050505090509350935050509091565b6018546001600160a01b0316331462001c405760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556013546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001cc557600080fd5b505af115801562001cda573d6000803e3d6000fd5b50506014546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001d3f57600080fd5b505af115801562001d54573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001db957600080fd5b505af115801562001dce573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001e3357600080fd5b505af115801562001e48573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb91506024016200172d565b600080805b60225481101562001ef4576022818154811062001ebe5762001ebe62006d5a565b9060005260206000209060030201600101548262001edd919062006949565b91508062001eeb8162006d89565b91505062001e9d565b508060000362001f475760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000e42565b60008362001f5760638762006da6565b62001f63919062006949565b905060008160405160200162001f7b91815260200190565b60408051601f1981840301815291905280516020909101209050600062001fa3848362006def565b90506000805b60225481101562002053576022818154811062001fca5762001fca62006d5a565b9060005260206000209060030201600101548262001fe9919062006949565b915062001ff860018362006933565b83116200203e576022818154811062002015576200201562006d5a565b60009182526020909120600390910201546001600160a01b0316965062000dd295505050505050565b806200204a8162006d89565b91505062001fa9565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b0000000000000000000000000000000000000000000000606482015260840162000e42565b6018546001600160a01b031633146200211f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b601954811015620021d657806020546200213a919062006949565b4310620021d65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000e42565b60198190556012546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200223b57600080fd5b505af115801562002250573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200228691815260200190565b60405180910390a150565b6018546001600160a01b03163314620022ed5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b600d55565b6001600160a01b038083166000818152602860205260409020600181015490921614620023625760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b80546001600160a01b03163314620023e35760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000e42565b620023ee8362004446565b15620024635760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d69747460448201527f6565000000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6000806200247184620044b7565b925090508115620024c55760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000e42565b60018301546001600160a01b038281169116146200254c5760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e27742062652060448201527f7570646174656400000000000000000000000000000000000000000000000000606482015260840162000e42565b600383016200255c858262006e06565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562002633576200263362006130565b9052905062002643818362004505565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200268492339289918b9162006ed3565b60405180910390a15050505050565b6001600160a01b0380831660008181526028602052604090206001015490911614620027025760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000e42565b6001600160a01b03828116600090815260286020526040902054163314620027935760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000e42565b612710811115620027e75760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000e42565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200286d90849062006949565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b03163314620029115760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6002805460ff19166001179055565b6018546001600160a01b031633146200297c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b60008111620029ce5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000e42565b601b55565b6018546001600160a01b0316331462002a2f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6001600160a01b03821660009081526027602052604090205481111562002a995760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000e42565b6001600160a01b0382166000908152602760205260408120805483929062002ac390849062006933565b92505081905550806029600082825462002ade919062006933565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a390602001620015e0565b6001600160a01b038083166000818152602860205260409020600101549091161462002b8e5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6001600160a01b03821660009081526028602052604081206013015460ff16600381111562002bc15762002bc162006130565b1462002c105760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000e42565b62002c1d828233620049a8565b5050565b6001600160a01b038083166000818152602860205260409020600101549091161462002c905760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6000811162002ce25760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640162000e42565b62002c1d82823362004bbb565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002dc957838290600052602060002001805462002d3590620068af565b80601f016020809104026020016040519081016040528092919081815260200182805462002d6390620068af565b801562002db45780601f1062002d885761010080835404028352916020019162002db4565b820191906000526020600020905b81548152906001019060200180831162002d9657829003601f168201915b50505050508152602001906001019062002d13565b50505050905090565b600062000dce33848462003d00565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002dc9576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162002e5b90620068af565b80601f016020809104026020016040519081016040528092919081815260200182805462002e8990620068af565b801562002eda5780601f1062002eae5761010080835404028352916020019162002eda565b820191906000526020600020905b81548152906001019060200180831162002ebc57829003601f168201915b5050505050815250508152602001906001019062002e05565b602a546060906001600160a01b0316331462002f785760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b601d5462002fc95760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000e42565b62002fd362005f3e565b601b546080820152601d815260286020820152602260408201526021606082015262002fff8162004f8f565b6200300d6025600062005f5c565b602254806200305f5760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640162000e42565b60008167ffffffffffffffff8111156200307d576200307d6200645b565b604051908082528060200260200182016040528015620030a7578160200160208202803683370190505b50905060005b82811015620031915760006028600060228481548110620030d257620030d262006d5a565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01906200313a9083018262006f1d565b50600281015483516001600160a01b039091169084908490811062003163576200316362006d5a565b6001600160a01b03909216602092830291909101909101525080620031888162006d89565b915050620030ad565b509250505090565b6018546001600160a01b03163314620031f55760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6200320260008362004faa565b62002c1d60018262004faa565b6018546001600160a01b031633146200326b5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0380821660008181526028602052604090206001015490911614620033095760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000e42565b6001600160a01b038082166000908152602860205260409020805490911633146200339d5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000e42565b6000601382015460ff166003811115620033bb57620033bb62006130565b036200340a5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000e42565b6002601382015460ff16600381111562003428576200342862006130565b148015620034395750438160100154115b15620034885760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000e42565b6003601382015460ff166003811115620034a657620034a662006130565b03620034f55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000e42565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162003545919062006949565b60405190815260200160405180910390a35050565b606080600060018180546200356f90620068af565b80601f01602080910402602001604051908101604052809291908181526020018280546200359d90620068af565b8015620035ee5780601f10620035c257610100808354040283529160200191620035ee565b820191906000526020600020905b815481529060010190602001808311620035d057829003601f168201915b505050505091508080546200360390620068af565b80601f01602080910402602001604051908101604052809291908181526020018280546200363190620068af565b8015620036825780601f10620036565761010080835404028352916020019162003682565b820191906000526020600020905b8154815290600101906020018083116200366457829003601f168201915b50505050509050915091509091565b6060601d805480602002602001604051908101604052809291908181526020018280548015620036eb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620036cc575b5050505050905090565b6018546001600160a01b03163314620037515760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162002286565b6018546001600160a01b03163314620037e35760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b031633146200386e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6200387b60008062005f7c565b620038896001600062005f7c565b6002805460ff19169055565b6018546001600160a01b03163314620038f15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b031633146200397c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602a546001600160a01b0316331462003a2d5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b62003a3762004212565b62000ee762002ef3565b6018546001600160a01b0316331462003a9d5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831662003b495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b03821662003bc75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff16600381111562003c5e5762003c5e62006130565b1462003cad5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000e42565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162003545919062006949565b6001600160a01b03831660009081526027602052604090205481111562003d6a5760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000e42565b6001600160a01b0383166000908152602760205260408120805483929062003d9490849062006933565b90915550506001600160a01b0382166000908152602760205260408120805483929062003dc390849062006949565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162003c1c91815260200190565b4760000362003e1b57565b600d544790600090670de0b6b3a76400009062003e3a90849062006da6565b62003e46919062006fff565b9050801562003ec4576011546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003e9e576040519150601f19603f3d011682016040523d82523d6000602084013e62003ea3565b606091505b509091505080151560010362003ec25762003ebf828462006933565b92505b505b816023600082825462003ed8919062006949565b90915550600090505b6022548110156200420d576000602860006022848154811062003f085762003f0862006d5a565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206021546022805492945090918791908690811062003f535762003f5362006d5a565b90600052602060002090600302016001015462003f71919062006da6565b62003f7d919062006fff565b90508015620041f5576002601383015460ff16600381111562003fa45762003fa462006130565b148062003fcc57506003601383015460ff16600381111562003fca5762003fca62006130565b145b156200408c57601254602280546001600160a01b0390921691631de9d9b69184918790811062004000576200400062006d5a565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b0390911660048201526024016000604051808303818588803b1580156200406a57600080fd5b505af11580156200407f573d6000803e3d6000fd5b50505050505050620041f8565b60008260050154828460080154620040a5919062006da6565b620040b1919062006fff565b90506000620040c1828462006933565b90508115620041265783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d80600081146200411d576040519150601f19603f3d011682016040523d82523d6000602084013e62004122565b606091505b5050505b8015620041ae5783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af115801562004185573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620041ac919062007016565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b80620042048162006d89565b91505062003ee1565b505050565b6004545b6005548110156200423f576200423981620042318162006d89565b9250620050fd565b62004216565b50600554600455600854600754036200425457565b6009545b60085481101562004281576200427b81620042738162006d89565b92506200533d565b62004258565b50600854600955600754805b600854811015620042fb576010546000828152600660205260409020600401544391620042ba9162006949565b11620042e057620042cb816200566a565b620042d860018362006949565b9150620042e6565b620042fb565b80620042f28162006d89565b9150506200428d565b50600755565b600c54600b5410156200444457600b546000908152600a6020526040902060105460018201544391620043349162006949565b11156200433e5750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd92620043b2920190815260200190565b600060405180830381600087803b158015620043cd57600080fd5b505af1158015620043e2573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600180820183905560029091018290558254909450919250906200443790849062006949565b9091555062004301915050565b565b6000805b602254811015620044ae57602281815481106200446b576200446b62006d5a565b60009182526020909120600390910201546001600160a01b0390811690841603620044995750600192915050565b80620044a58162006d89565b9150506200444a565b50600092915050565b600080620044c462005fbb565b60008060ff9050604083875160208901845afa620044e157600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60e2815114620045585760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640162000e42565b60308261024001515114620045b05760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000e42565b620045bb82620057b5565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262004631920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6040516020818303038152906040529050600082620046518351620058f4565b83604051602001620046669392919062007030565b60408051601f1981840301815282825280516020918201206002808552606085018452909450600093929091830190803683370190505090506000808080620046be8982620046b86041600262006da6565b62005a49565b90506000620046dd8a620046d56041600262006da6565b606062005a49565b905060205b8251811015620047ae57620046f8838262005b7d565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562004754573d6000803e3d6000fd5b5050604051601f1901519050876200476e60418462006fff565b8151811062004781576200478162006d5a565b6001600160a01b0390921660209283029190910190910152620047a660418262006949565b9050620046e2565b508a602001516001600160a01b031686600081518110620047d357620047d362006d5a565b60200260200101516001600160a01b031614620048595760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840162000e42565b8a604001516001600160a01b0316866001815181106200487d576200487d62006d5a565b60200260200101516001600160a01b031614620049035760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840162000e42565b60016200491b8c6102400151838e6000015162005bb4565b14620049905760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840162000e42565b6200499b8b62005c23565b5050505050505050505050565b6000821162004a205760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b03811660009081526027602052604090205482111562004a8a5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000e42565b6001600160a01b0381166000908152602760205260408120805484929062004ab490849062006933565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff1991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004b4d8362006d89565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602860205260409020805490918381169116148062004d7557600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004c4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c71919062007016565b90508481101562004ceb5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840162000e42565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b15801562004d5557600080fd5b505af115801562004d6a573d6000803e3d6000fd5b505050505062004e1e565b8382600b0154836008015462004d8c919062006933565b101562004e025760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840162000e42565b8382600b01600082825462004e18919062006949565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162004f398362006d89565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc838760405162004bac9291909115158252602082015260400190565b60fa60a06000808285855af46200420d573d6000803e3d6000fd5b8154600260018083161561010002038216048251808201602081106020841001600281146200505957600181146200507f578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101562005042578151845560018401935060208201915062005023565b815191036101000a908190040290915550620050f4565b60028302826020036101000a846020036101000a602089015104020185018755620050f4565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015620050e25781518455600184019350602082019150620050c3565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff16600381111562005143576200514362006130565b14620051e357600282015482546001600160a01b0316600090815260276020526040812080549091906200517990849062006949565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f87834294620051d6946001600160a01b0391821694911692909160ff9091169062007079565b60405180910390a1505050565b805482546001600160a01b03908116911614620052f9576000808260080154836005015462005213919062006933565b9050806000036200522b578360020154915062005251565b80846002015484600d015462005242919062006da6565b6200524e919062006fff565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620052bc57600080fd5b505af1158015620052d1573d6000803e3d6000fd5b505050508183600d016000828254620052eb919062006949565b909155506200531992505050565b816002015481600801600082825462005313919062006949565b90915550505b816002015481600501600082825462005333919062006949565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662005563576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b158015620053eb57600080fd5b505af115801562005400573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200546f57600080fd5b505af115801562005484573d6000803e3d6000fd5b50505050600083600801548460050154620054a0919062006933565b600d850154909150620054b4828462006da6565b620054c0919062006fff565b92508184600d016000828254620054d8919062006933565b90915550506006840154600003620054f757600385018390556200551f565b600684015460078501546200550d908562006da6565b62005519919062006fff565b60038601555b8284600601600082825462005535919062006949565b909155505060038501546007850180546000906200555590849062006949565b909155506200563892505050565b50600282015460088201548111156200557d575060088101545b8160090154600003620055975760038301819055620055bf565b6009820154600a830154620055ad908362006da6565b620055b9919062006fff565b60038401555b80826009016000828254620055d5919062006949565b90915550506003830154600a83018054600090620055f590849062006949565b925050819055508082600801600082825462005612919062006933565b90915550506002830154600b830180546000906200563290849062006933565b90915550505b6005808401805460ff19166001179055820180548291906000906200565f90849062006933565b909155505050505050565b6000818152600660205260408120600381015490910362005689575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff166200572557816007015482600601548460030154620056d5919062006da6565b620056e1919062006fff565b905080826006016000828254620056f9919062006933565b909155505060038301546007830180546000906200571990849062006933565b909155506200578a9050565b81600a01548260090154846003015462005740919062006da6565b6200574c919062006fff565b90508082600901600082825462005764919062006933565b90915550506003830154600a830180546000906200578490849062006933565b90915550505b82546001600160a01b0316600090815260276020526040812080548392906200565f90849062006949565b6000620057c68260600151620044b7565b6001600160a01b03909116602084015290508015620058285760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000e42565b6020808301516001600160a01b039081166000908152602890925260409091206001015416156200589c5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000e42565b6127108260800151111562002c1d5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000e42565b6060816000036200593857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156200596857806200594f8162006d89565b9150620059609050600a8362006fff565b91506200593c565b60008167ffffffffffffffff8111156200598657620059866200645b565b6040519080825280601f01601f191660200182016040528015620059b1576020820181803683370190505b5090505b841562005a4157620059c960018362006933565b9150620059d8600a8662006def565b620059e590603062006949565b60f81b818381518110620059fd57620059fd62006d5a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062005a39600a8662006fff565b9450620059b5565b949350505050565b60608162005a5981601f62006949565b101562005aa95760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640162000e42565b62005ab5828462006949565b8451101562005b075760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640162000e42565b60608215801562005b28576040519150600082526020820160405262005b74565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562005b6357805183526020928301920162005b49565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b81101562005bad5762005baa601b82620070a7565b90505b9250925092565b600062005bc062005fd9565b600085858560405160200162005bd993929190620070c3565b6040516020818303038152906040529050600060fb905060008251602062005c02919062006949565b90506020848285855afa62005c1657600080fd5b5050905195945050505050565b6101808101516001600160a01b031662005ca657601d5460009062005c4890620058f4565b90508160200151826000015183608001518360405162005c689062005ff7565b62005c77949392919062007125565b604051809103906000f08015801562005c94573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039586161790915584518416835260289095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005d65908262006e06565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005e3c908262006e06565b5061026082015160138201805460ff1916600183600381111562005e645762005e6462006130565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562005f395762005f3962006130565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000ee7919062006005565b50805462005f8a90620068af565b6000825580601f1062005f9b575050565b601f01602090049060005260206000209081019062000ee791906200602a565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b611a20806200716483390190565b80821115620060265760006200601c828262005f7c565b5060010162006005565b5090565b5b808211156200602657600081556001016200602b565b60005b838110156200605e57818101518382015260200162006044565b50506000910152565b600081518084526200608181602086016020860162006041565b601f01601f19169290920160200192915050565b602081526000620060aa602083018462006067565b9392505050565b6001600160a01b038116811462000ee757600080fd5b60008060408385031215620060db57600080fd5b8235620060e881620060b1565b946020939093013593505050565b6000602082840312156200610957600080fd5b8135620060aa81620060b1565b6000602082840312156200612957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811062006197577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208152620061b66020820183516001600160a01b03169052565b60006020830151620061d360408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620062076102a085018362006067565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a06200628f818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620062f3848362006067565b9350808701519150506200630a828601826200615f565b5090949350505050565b6000806000606084860312156200632a57600080fd5b83356200633781620060b1565b925060208401356200634981620060b1565b929592945050506040919091013590565b6000602082840312156200636d57600080fd5b813567ffffffffffffffff8111156200638557600080fd5b82016102808185031215620060aa57600080fd5b600081518084526020808501808196508360051b8101915082860160005b858110156200640e578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620063f98187018362006067565b9a87019a9550505090840190600101620063b7565b5091979650505050505050565b821515815260406020820152600062005a41604083018462006399565b600080604083850312156200644c57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200649c57600080fd5b813567ffffffffffffffff80821115620064ba57620064ba6200645b565b604051601f8301601f19908116603f01168101908282118183101715620064e557620064e56200645b565b81604052838152866020858801011115620064ff57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200653357600080fd5b82356200654081620060b1565b9150602083013567ffffffffffffffff8111156200655d57600080fd5b6200656b858286016200648a565b9150509250929050565b6000610200820190508551825260208601516020830152604086015160408301526060860151606083015260808601516001600160a01b0380821660808501528087511660a08501528060208801511660c08501528060408801511660e08501528060608801511661010085015280608088015116610120850152505060a08501516200660e6101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b600080600080608085870312156200666457600080fd5b843567ffffffffffffffff808211156200667d57600080fd5b6200668b888389016200648a565b9550602087013591506200669f82620060b1565b90935060408601359080821115620066b657600080fd5b620066c4888389016200648a565b93506060870135915080821115620066db57600080fd5b50620066ea878288016200648a565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156200676d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526200675a85835162006067565b945092850192908501906001016200671d565b5092979650505050505050565b602081526000620060aa602083018462006399565b6020808252825182820181905260009190848201906040850190845b81811015620067d25783516001600160a01b031683529284019291840191600101620067ab565b50909695505050505050565b60008060408385031215620067f257600080fd5b823567ffffffffffffffff808211156200680b57600080fd5b62006819868387016200648a565b935060208501359150808211156200683057600080fd5b506200656b858286016200648a565b60408152600062006854604083018562006067565b828103602084015262006868818562006067565b95945050505050565b600080604083850312156200688557600080fd5b82356200689281620060b1565b91506020830135620068a481620060b1565b809150509250929050565b600181811c90821680620068c457607f821691505b602082108103620068fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562000dd25762000dd262006904565b8082018082111562000dd25762000dd262006904565b6000813562000dd281620060b1565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112620069a457600080fd5b83018035915067ffffffffffffffff821115620069c057600080fd5b602001915036819003821315620069d657600080fd5b9250929050565b601f8211156200420d57600081815260208120601f850160051c8101602086101562006a065750805b601f850160051c820191505b818110156200255c5782815560010162006a12565b67ffffffffffffffff83111562006a425762006a426200645b565b62006a5a8362006a538354620068af565b83620069dd565b6000601f84116001811462006a91576000851562006a785750838201355b600019600387901b1c1916600186901b1783556200175d565b600083815260209020601f19861690835b8281101562006ac4578685013582556020948501946001909201910162006aa2565b508682101562006ae25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000dd257600080fd5b6004821062006b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006b8a62006b60836200695f565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b62006bca62006b9c602084016200695f565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c0a62006bdc604084016200695f565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c1960608301836200696e565b62006c2981836003860162006a27565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006cc062006c9261018084016200695f565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f8201556102008201356010820155610220820135601182015562006d076102408301836200696e565b62006d1781836012860162006a27565b505062002c1d62006d2c610260840162006af4565b6013830162006b06565b60006020828403121562006d4957600080fd5b81518015158114620060aa57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820362006d9f5762006d9f62006904565b5060010190565b808202811582820484141762000dd25762000dd262006904565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262006e015762006e0162006dc0565b500690565b815167ffffffffffffffff81111562006e235762006e236200645b565b62006e3b8162006e348454620068af565b84620069dd565b602080601f83116001811462006e73576000841562006e5a5750858301515b600019600386901b1c1916600185901b1785556200255c565b600085815260208120601f198616915b8281101562006ea45788860151825594840194600190910190840162006e83565b508582101562006ec35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262006f0860a084018662006067565b91508084166080840152509695505050505050565b81810362006f29575050565b62006f358254620068af565b67ffffffffffffffff81111562006f505762006f506200645b565b62006f618162006e348454620068af565b6000601f82116001811462006f98576000831562006f7f5750848201545b600019600385901b1c1916600184901b1784556200175d565b600085815260209020601f19841690600086815260209020845b8381101562006fd4578286015482556001958601959091019060200162006fb2565b508583101562006ec35793015460001960f8600387901b161c19169092555050600190811b01905550565b60008262007011576200701162006dc0565b500490565b6000602082840312156200702957600080fd5b5051919050565b600084516200704481846020890162006041565b8451908301906200705a81836020890162006041565b84519101906200706f81836020880162006041565b0195945050505050565b6001600160a01b0385811682528416602082015260408101839052608081016200686860608301846200615f565b60ff818116838216019081111562000dd25762000dd262006904565b60008451620070d781846020890162006041565b845190830190620070ed81836020890162006041565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015262007159608083018462006067565b969550505050505056fe60806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033a264697066735822122091b7a880ed8a43141f385cfb04e93a1e4fe14aaffbfa56c414c3bf0cc271ded064736f6c6343000815003360806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033") + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var AutonityBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b506040516200c1443803806200c1448339810160408190526200003e9162000e9e565b601e546000036200006757602e80546001600160a01b031916331790556200006782826200006f565b50506200135f565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000442576000838281518110620001a257620001a2620010db565b602002602001015160a0015190506000848381518110620001c757620001c7620010db565b60200260200101516101a00181815250506000848381518110620001ef57620001ef620010db565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200022b576200022b620010db565b602002602001015160a00181815250506000848381518110620002525762000252620010db565b60209081029190910101516101c00152600f5484518590849081106200027c576200027c620010db565b602002602001015160800181815250506000848381518110620002a357620002a3620010db565b602002602001015161026001906003811115620002c457620002c4620010f1565b90816003811115620002da57620002da620010f1565b815250506000848381518110620002f557620002f5620010db565b6020026020010151610160018181525050620003338483815181106200031f576200031f620010db565b60200260200101516200044760201b60201c565b620003608483815181106200034c576200034c620010db565b60200260200101516200058260201b60201c565b80602a60008685815181106200037a576200037a620010db565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003b791906200111d565b9250508190555080602c6000828254620003d291906200111d565b925050819055506200042c848381518110620003f257620003f2620010db565b60200260200101516020015182868581518110620004145762000414620010db565b602002602001015160000151620007b360201b60201c565b5080620004398162001139565b91505062000181565b505050565b60006200045e82606001516200099e60201b60201c565b6001600160a01b03909116602084015290508015620004b25760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620005265760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620004a9565b612710826080015111156200057e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620004a9565b5050565b6101808101516001600160a01b03166200060557601f54600090620005a790620009ec565b905081602001518260000151836080015183604051620005c79062000b0c565b620005d6949392919062001155565b604051809103906000f080158015620005f3573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006b7908262001239565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062000781908262001239565b5061026082015160138201805460ff19166001836003811115620007a957620007a9620010f1565b0217905550505050565b60008211620008115760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620004a9565b6001600160a01b0381166000908152602a60205260409020548211156200087b5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620004a9565b6001600160a01b0381166000908152602a602052604081208054849290620008a590849062001305565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620009318362001139565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b600080620009ab62000b1a565b60008060ff9050604083875160208901845afa620009c857600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000a145750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a44578062000a2b8162001139565b915062000a3c9050600a8362001331565b915062000a18565b6000816001600160401b0381111562000a615762000a6162000b38565b6040519080825280601f01601f19166020018201604052801562000a8c576020820181803683370190505b5090505b841562000b045762000aa460018362001305565b915062000ab3600a8662001348565b62000ac09060306200111d565b60f81b81838151811062000ad85762000ad8620010db565b60200101906001600160f81b031916908160001a90535062000afc600a8662001331565b945062000a90565b949350505050565b611dde806200a36683390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b735762000b7362000b38565b60405290565b60405160c081016001600160401b038111828210171562000b735762000b7362000b38565b60405161028081016001600160401b038111828210171562000b735762000b7362000b38565b604051601f8201601f191681016001600160401b038111828210171562000bef5762000bef62000b38565b604052919050565b6001600160a01b038116811462000c0d57600080fd5b50565b805162000c1d8162000bf7565b919050565b60005b8381101562000c3f57818101518382015260200162000c25565b50506000910152565b600082601f83011262000c5a57600080fd5b81516001600160401b0381111562000c765762000c7662000b38565b62000c8b601f8201601f191660200162000bc4565b81815284602083860101111562000ca157600080fd5b62000b0482602083016020870162000c22565b80516004811062000c1d57600080fd5b600060e0828403121562000cd757600080fd5b60405160e081016001600160401b038111828210171562000cfc5762000cfc62000b38565b8060405250809150825162000d118162000bf7565b8152602083015162000d238162000bf7565b6020820152604083015162000d388162000bf7565b6040820152606083015162000d4d8162000bf7565b606082015262000d606080840162000c10565b608082015262000d7360a0840162000c10565b60a082015262000d8660c0840162000c10565b60c08201525092915050565b60006080828403121562000da557600080fd5b62000daf62000b4e565b9050815162000dbe8162000bf7565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361024081121562000dfb57600080fd5b62000e0562000b4e565b915060c081121562000e1657600080fd5b5062000e2162000b79565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015162000e5d8162000bf7565b60a0820152815262000e738360c0840162000cc4565b602082015262000e88836101a0840162000d92565b6040820152610220820151606082015292915050565b60008061026080848603121562000eb457600080fd5b83516001600160401b038082111562000ecc57600080fd5b818601915086601f83011262000ee157600080fd5b815160208282111562000ef85762000ef862000b38565b8160051b62000f0982820162000bc4565b928352848101820192828101908b85111562000f2457600080fd5b83870192505b84831015620010b95782518681111562000f4357600080fd5b8701610280818e03601f1901121562000f5b57600080fd5b62000f6562000b9e565b62000f7286830162000c10565b815262000f826040830162000c10565b8682015262000f946060830162000c10565b604082015260808201518881111562000fac57600080fd5b62000fbc8f888386010162000c48565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e08201526101208201516101008201526101408201516101208201526101608201516101408201526101808201516101608201526200102a6101a0830162000c10565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e082015261022082015161020082015261024082015161022082015289820151888111156200107e57600080fd5b6200108e8f888386010162000c48565b61024083015250620010a4610280830162000cb4565b818b0152835250918301919083019062000f2a565b809950505050620010cd89828a0162000de6565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562001133576200113362001107565b92915050565b6000600182016200114e576200114e62001107565b5060010190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620011948160a085016020870162000c22565b601f01601f19169190910160a00195945050505050565b600181811c90821680620011c057607f821691505b602082108103620011e157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044257600081815260208120601f850160051c81016020861015620012105750805b601f850160051c820191505b8181101562001231578281556001016200121c565b505050505050565b81516001600160401b0381111562001255576200125562000b38565b6200126d81620012668454620011ab565b84620011e7565b602080601f831160018114620012a557600084156200128c5750858301515b600019600386901b1c1916600185901b17855562001231565b600085815260208120601f198616915b82811015620012d657888601518255948401946001909101908401620012b5565b5085821015620012f55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562001133576200113362001107565b634e487b7160e01b600052601260045260246000fd5b6000826200134357620013436200131b565b500490565b6000826200135a576200135a6200131b565b500690565b618ff7806200136f6000396000f3fe6080604052600436106200041b5760003560e01c80638bac7dad116200021d578063b7ab4db51162000131578063d5f3948811620000c1578063dfb1a4d2116200008f578063e98712b21162000075578063e98712b21462000ddc578063f03b959d1462000df4578063f7866ee31462000e1957005b8063dfb1a4d21462000da5578063e7f43c681462000dbc57005b8063d5f394881462000cfc578063d861b0e81462000d1e578063d886f8a21462000d36578063dd62ed3e1462000d5b57005b8063ceaad45511620000ff578063ceaad4551462000c75578063cf9c57191462000c9a578063cfd19fb91462000cb2578063d372c07e1462000cd757005b8063b7ab4db51462000c08578063c2362dd51462000c20578063c9d97af41462000c38578063cb696f541462000c5057005b8063a8b2216e11620001ad578063b2ea9adb116200017b578063b2ea9adb1462000b71578063b3ecbadd1462000b96578063b46e55201462000bbb578063b66b3e791462000be057005b8063a8b2216e1462000ad7578063a9059cbb1462000afe578063ab8f6ffe1462000b23578063ae1f5fa01462000b4a57005b80639c98e47111620001eb5780639c98e4711462000a505780639dc29fac1462000a68578063a515366a1462000a8d578063a5d059ca1462000ab257005b80638bac7dad146200099a57806395d89b4114620009bf57806396b477cb1462000a075780639ac310741462000a3857005b806343645969116200032f578063731b3a0311620002bf578063833b1fce116200028d578063852c48491162000273578063852c48491462000945578063872cf059146200096a57806389c614b8146200098257005b8063833b1fce146200090057806384467fdb146200092057005b8063731b3a0314620007b957806377e741c714620007d057806379502c5514620007f5578063819b646314620008e957005b80635f7d394911620002fd5780635f7d394914620007055780636b5f444c14620007435780636fd2c80b146200076857806370a08231146200077f57005b806343645969146200067c578063496ccd9b14620006935780634bb278f314620006b8578063520fdbbc14620006e057005b806318160ddd11620003ab5780632f2c3f2e11620003795780632f2c3f2e14620005fc578063313ce567146200061457806335be16e0146200063257806340c10f19146200065757005b806318160ddd14620005755780631904bb2e146200058c57806323b872dd14620005c057806329070c6d14620005e557005b80631122063311620003e95780631122063314620004fc578063114eaf5514620005135780631250a28d14620005385780631604e416146200055d57005b806306fdde031462000425578063095ea7b314620004805780630ae65e7a14620004b65780630d8e6e2c14620004db57005b366200042357005b005b3480156200043257600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b60405162000477919062006115565b60405180910390f35b3480156200048d57600080fd5b50620004a56200049f36600462006147565b62000e39565b604051901515815260200162000477565b348015620004c357600080fd5b5062000423620004d536600462006176565b62000e52565b348015620004e857600080fd5b50601e545b60405190815260200162000477565b3480156200050957600080fd5b50600e54620004ed565b3480156200052057600080fd5b50620004236200053236600462006196565b62000f64565b3480156200054557600080fd5b50620004236200055736600462006176565b62000fc5565b3480156200056a57600080fd5b50620004ed60275481565b3480156200058257600080fd5b50602c54620004ed565b3480156200059957600080fd5b50620005b1620005ab36600462006176565b62001050565b6040516200047791906200621b565b348015620005cd57600080fd5b50620004a5620005df36600462006394565b6200132d565b348015620005f257600080fd5b50600d54620004ed565b3480156200060957600080fd5b50620004ed61271081565b3480156200062157600080fd5b506040516012815260200162000477565b3480156200063f57600080fd5b506200042362000651366004620063da565b620013d5565b3480156200066457600080fd5b50620004236200067636600462006147565b620015cb565b3480156200068957600080fd5b50601c54620004ed565b348015620006a057600080fd5b5062000423620006b236600462006176565b62001637565b348015620006c557600080fd5b50620006d0620017af565b604051620004779291906200649b565b348015620006ed57600080fd5b5062000423620006ff36600462006176565b62001d13565b3480156200071257600080fd5b506200072a62000724366004620064b8565b62001fc7565b6040516001600160a01b03909116815260200162000477565b3480156200075057600080fd5b50620004236200076236600462006196565b620021f2565b3480156200077557600080fd5b50601054620004ed565b3480156200078c57600080fd5b50620004ed6200079e36600462006176565b6001600160a01b03166000908152602a602052604090205490565b348015620007c657600080fd5b50602254620004ed565b348015620007dd57600080fd5b5062000423620007ef36600462006196565b620023c0565b3480156200080257600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008d7939084565b604051620004779493929190620064db565b348015620008f657600080fd5b50601d54620004ed565b3480156200090d57600080fd5b506014546001600160a01b03166200072a565b3480156200092d57600080fd5b50620004236200093f36600462006694565b62002421565b3480156200095257600080fd5b50620004236200096436600462006147565b62002550565b3480156200097757600080fd5b506200042362002772565b3480156200098f57600080fd5b50620004ed60235481565b348015620009a757600080fd5b5062000423620009b936600462006196565b620027dd565b348015620009cc57600080fd5b5060408051808201909152600381527f4e544e0000000000000000000000000000000000000000000000000000000000602082015262000468565b34801562000a1457600080fd5b50620004ed62000a2636600462006196565b60009081526021602052604090205490565b34801562000a4557600080fd5b50620004ed602d5481565b34801562000a5d57600080fd5b50620004ed60245481565b34801562000a7557600080fd5b506200042362000a8736600462006147565b62002890565b34801562000a9a57600080fd5b506200042362000aac36600462006147565b620029e3565b34801562000abf57600080fd5b506200042362000ad136600462006147565b62002ae1565b34801562000ae457600080fd5b5062000aef62002baf565b6040516200047791906200673d565b34801562000b0b57600080fd5b50620004a562000b1d36600462006147565b62002c92565b34801562000b3057600080fd5b5062000b3b62002cea565b604051620004779190620067c1565b34801562000b5757600080fd5b5062000b6262002dfc565b604051620004779190620067d6565b34801562000b7e57600080fd5b506200042362000b9036600462006825565b620030a2565b34801562000ba357600080fd5b506200042362000bb536600462006176565b62003118565b34801562000bc857600080fd5b506200042362000bda36600462006176565b620031a3565b34801562000bed57600080fd5b5062000bf862003463565b6040516200047792919062006890565b34801562000c1557600080fd5b5062000b626200359a565b34801562000c2d57600080fd5b50620004ed60225481565b34801562000c4557600080fd5b50620004ed60205481565b34801562000c5d57600080fd5b506200042362000c6f36600462006196565b620035fe565b34801562000c8257600080fd5b506200042362000c9436600462006176565b62003690565b34801562000ca757600080fd5b50620004236200371b565b34801562000cbf57600080fd5b506200042362000cd136600462006176565b6200379e565b34801562000ce457600080fd5b506200042362000cf636600462006176565b62003829565b34801562000d0957600080fd5b50602e546200072a906001600160a01b031681565b34801562000d2b57600080fd5b5062000423620038b4565b34801562000d4357600080fd5b506200042362000d5536600462006176565b62003951565b34801562000d6857600080fd5b50620004ed62000d7a366004620068c2565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000db257600080fd5b50601b54620004ed565b34801562000dc957600080fd5b50601a546001600160a01b03166200072a565b34801562000de957600080fd5b50620004ed60265481565b34801562000e0157600080fd5b506200042362000e1336600462006176565b620039dc565b34801562000e2657600080fd5b506012546001600160a01b03166200072a565b600062000e4833848462003a67565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000ec55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f565760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000ebc565b62000f618162003bc3565b50565b601a546001600160a01b0316331462000fc05760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601055565b601a546001600160a01b03163314620010215760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6200105a62005eee565b6001600160a01b038083166000818152602b602052604090206001015490911614620010c95760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6001600160a01b038083166000908152602b602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906200112c9062006900565b80601f01602080910402602001604051908101604052809291908181526020018280546200115a9062006900565b8015620011ab5780601f106200117f57610100808354040283529160200191620011ab565b820191906000526020600020905b8154815290600101906020018083116200118d57829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620012679062006900565b80601f0160208091040260200160405190810160405280929190818152602001828054620012959062006900565b8015620012e65780601f10620012ba57610100808354040283529160200191620012e6565b820191906000526020600020905b815481529060010190602001808311620012c857829003601f168201915b5050509183525050601382015460209091019060ff166003811115620013105762001310620061b0565b6003811115620013245762001324620061b0565b90525092915050565b60006200133c84848462003c9a565b6001600160a01b03841660009081526029602090815260408083203384529091528120546200136d90849062006984565b90506200137c85338362003a67565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051620013c291815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620014575760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6000610120820135602b8262001474604086016020870162006176565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620014a4919062006984565b60c0830135602b6000620014bf604087016020880162006176565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620014ef919062006984565b60a0840135602b60006200150a604088016020890162006176565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200153a919062006984565b6200154691906200699a565b6200155291906200699a565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620015839084906200699a565b90915550829050602b6000620015a0604084016020850162006176565b6001600160a01b031681526020810191909152604001600020620015c5828262006baa565b50505050565b601a546001600160a01b03163314620016275760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b62001633828262003d67565b5050565b601a546001600160a01b03163314620016935760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556015546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b1580156200171857600080fd5b505af11580156200172d573d6000803e3d6000fd5b50506017546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200179357600080fd5b505af1158015620017a8573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620018375760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6020805443600081815260219093526040832091909155601b546022546200186091906200699a565b6013546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620018c457600080fd5b505af1158015620018d9573d6000803e3d6000fd5b50505050801562001acc57601954602c54602d546023546040517f92eff3cd0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa15801562001965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200198b919062006d8f565b905080602d5410156200199d5750602d545b620019a9308262003d67565b80602d6000828254620019bd919062006984565b90915550620019cf9050478262003ded565b620019d962004308565b620019e3620043f7565b6000620019ef62002dfc565b6014546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f29062001a3b908490600401620067d6565b600060405180830381600087803b15801562001a5657600080fd5b505af115801562001a6b573d6000803e3d6000fd5b505043602255505042602355602080546001919060009062001a8f9084906200699a565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b601454604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001b31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b57919062006da9565b9050801562001bec57601554604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562001be4575060408051601f3d908101601f1916820190925262001be19181019062006da9565b60015b1562001bec57505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001d03576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001c6b9062006900565b80601f016020809104026020016040519081016040528092919081815260200182805462001c999062006900565b801562001cea5780601f1062001cbe5761010080835404028352916020019162001cea565b820191906000526020600020905b81548152906001019060200180831162001ccc57829003601f168201915b5050505050815250508152602001906001019062001c15565b5050505090509350935050509091565b601a546001600160a01b0316331462001d6f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001df457600080fd5b505af115801562001e09573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001e6e57600080fd5b505af115801562001e83573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ee857600080fd5b505af115801562001efd573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001f6257600080fd5b505af115801562001f77573d6000803e3d6000fd5b50506018546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb915060240162001778565b600080805b60255481101562002023576025818154811062001fed5762001fed62006dcd565b906000526020600020906003020160010154826200200c91906200699a565b9150806200201a8162006dfc565b91505062001fcc565b5080600003620020765760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000ebc565b6000836200208660638762006e19565b6200209291906200699a565b9050600081604051602001620020aa91815260200190565b60408051601f19818403018152919052805160209091012090506000620020d2848362006e62565b90506000805b602554811015620021825760258181548110620020f957620020f962006dcd565b906000526020600020906003020160010154826200211891906200699a565b91506200212760018362006984565b83116200216d576025818154811062002144576200214462006dcd565b60009182526020909120600390910201546001600160a01b0316965062000e4c95505050505050565b80620021798162006dfc565b915050620020d8565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b0000000000000000000000000000000000000000000000606482015260840162000ebc565b601a546001600160a01b031633146200224e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601b548110156200230557806022546200226991906200699a565b4310620023055760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000ebc565b601b8190556013546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200236a57600080fd5b505af11580156200237f573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f8181604051620023b591815260200190565b60405180910390a150565b601a546001600160a01b031633146200241c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200143815260200160008152602001600081526020016000815260200184815260200160006003811115620024f057620024f0620061b0565b905290506200250081836200453c565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200254192339289918b9162006e79565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025bf5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000ebc565b6001600160a01b038281166000908152602b6020526040902054163314620026505760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000ebc565b612710811115620026a45760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000ebc565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200272a9084906200699a565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620027ce5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6002805460ff19166001179055565b601a546001600160a01b03163314620028395760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600081116200288b5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000ebc565b601d55565b601a546001600160a01b03163314620028ec5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602a6020526040902054811115620029565760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602a6020526040812080548392906200298090849062006984565b9250508190555080602c60008282546200299b919062006984565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b60205260409020600101549091161462002a525760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602b602052604081206013015460ff16600381111562002a855762002a85620061b0565b1462002ad45760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000ebc565b62001633828233620049df565b6001600160a01b038083166000818152602b60205260409020600101549091161462002b505760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6000811162002ba25760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640162000ebc565b6200163382823362004bf2565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002c8957838290600052602060002001805462002bf59062006900565b80601f016020809104026020016040519081016040528092919081815260200182805462002c239062006900565b801562002c745780601f1062002c485761010080835404028352916020019162002c74565b820191906000526020600020905b81548152906001019060200180831162002c5657829003601f168201915b50505050508152602001906001019062002bd3565b50505050905090565b600062002ca133848462003c9a565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002c89576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162002d649062006900565b80601f016020809104026020016040519081016040528092919081815260200182805462002d929062006900565b801562002de35780601f1062002db75761010080835404028352916020019162002de3565b820191906000526020600020905b81548152906001019060200180831162002dc557829003601f168201915b5050505050815250508152602001906001019062002d0e565b602e546060906001600160a01b0316331462002e815760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b601f5462002ed25760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000ebc565b62002edc62005fbe565b601d546080820152601f8152602b6020820152602560408201526024606082015262002f088162004fc6565b62002f166028600062005fdc565b6025548062002f685760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640162000ebc565b60008167ffffffffffffffff81111562002f865762002f86620065d0565b60405190808252806020026020018201604052801562002fb0578160200160208202803683370190505b50905060005b828110156200309a576000602b60006025848154811062002fdb5762002fdb62006dcd565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab50190620030439083018262006ec3565b50600281015483516001600160a01b03909116908490849081106200306c576200306c62006dcd565b6001600160a01b03909216602092830291909101909101525080620030918162006dfc565b91505062002fb6565b509250505090565b601a546001600160a01b03163314620030fe5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6200310b60008362004fe6565b6200163360018262004fe6565b601a546001600160a01b03163314620031745760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b602052604090206001015490911614620032125760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000ebc565b6001600160a01b038082166000908152602b6020526040902080549091163314620032a65760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000ebc565b6000601382015460ff166003811115620032c457620032c4620061b0565b03620033135760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000ebc565b6002601382015460ff166003811115620033315762003331620061b0565b148015620033425750438160100154115b15620033915760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000ebc565b6003601382015460ff166003811115620033af57620033af620061b0565b03620033fe5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000ebc565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5916200344e91906200699a565b60405190815260200160405180910390a35050565b60608060006001818054620034789062006900565b80601f0160208091040260200160405190810160405280929190818152602001828054620034a69062006900565b8015620034f75780601f10620034cb57610100808354040283529160200191620034f7565b820191906000526020600020905b815481529060010190602001808311620034d957829003601f168201915b505050505091508080546200350c9062006900565b80601f01602080910402602001604051908101604052809291908181526020018280546200353a9062006900565b80156200358b5780601f106200355f576101008083540402835291602001916200358b565b820191906000526020600020905b8154815290600101906020018083116200356d57829003601f168201915b50505050509050915091509091565b6060601f805480602002602001604051908101604052809291908181526020018280548015620035f457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620035d5575b5050505050905090565b601a546001600160a01b031633146200365a5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd38912890602001620023b5565b601a546001600160a01b03163314620036ec5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620037775760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6200378460008062005ffc565b620037926001600062005ffc565b6002805460ff19169055565b601a546001600160a01b03163314620037fa5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620038855760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620039365760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6200394062004308565b6200394a62002dfc565b5042602355565b601a546001600160a01b03163314620039ad5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b0316331462003a385760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831662003ae45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b03821662003b625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff16600381111562003bf85762003bf8620061b0565b1462003c475760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000ebc565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c916200344e91906200699a565b6001600160a01b0383166000908152602a602052604090205481111562003d045760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000ebc565b6001600160a01b0383166000908152602a60205260408120805483929062003d2e90849062006984565b90915550506001600160a01b0382166000908152602a60205260408120805483929062003d5d9084906200699a565b9091555050505050565b6001600160a01b0382166000908152602a60205260408120805483929062003d919084906200699a565b9250508190555080602c600082825462003dac91906200699a565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf90602001620029d7565b8115801562003dfa575080155b1562003e04575050565b600d54600090670de0b6b3a76400009062003e2190859062006e19565b62003e2d919062006fb0565b9050801562003eab576012546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003e85576040519150601f19603f3d011682016040523d82523d6000602084013e62003e8a565b606091505b509091505080151560010362003ea95762003ea6828562006984565b93505b505b826026600082825462003ebf91906200699a565b90915550600090505b602554811015620015c5576000602b60006025848154811062003eef5762003eef62006dcd565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206024546025805492945090918891908690811062003f3a5762003f3a62006dcd565b90600052602060002090600302016001015462003f58919062006e19565b62003f64919062006fb0565b90506000602454866025868154811062003f825762003f8262006dcd565b90600052602060002090600302016001015462003fa0919062006e19565b62003fac919062006fb0565b9050600082118062003fbe5750600081115b15620042ef576002601384015460ff16600381111562003fe25762003fe2620061b0565b14806200400a57506003601384015460ff166003811115620040085762004008620061b0565b145b15620040ec576013546200402a9030906001600160a01b03168362003c9a565b601354602580546001600160a01b039092169163a8031a1d9185918890811062004058576200405862006dcd565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b158015620040c957600080fd5b505af1158015620040de573d6000803e3d6000fd5b5050505050505050620042f3565b6000836005015483856008015462004105919062006e19565b62004111919062006fb0565b90508015620041765783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d80600081146200416d576040519150601f19603f3d011682016040523d82523d6000602084013e62004172565b606091505b5050505b600084600501548386600801546200418f919062006e19565b6200419b919062006fb0565b90508015620041bd578454620041bd9030906001600160a01b03168362003c9a565b6000620041cb828562006984565b90506000620041db848762006984565b90506000811180620041ed5750600082115b15620042a057600c8701546200420f9030906001600160a01b03168462003c9a565b600c8701546040517fa0ce552d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562004276573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200429d919062006fc7565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b80620042ff8162006dfc565b91505062003ec8565b6004545b60055481101562004335576200432f81620043278162006dfc565b925062005139565b6200430c565b50600554600455600854600754036200434a57565b6009545b60085481101562004377576200437181620043698162006dfc565b92506200536f565b6200434e565b50600854600955600754805b600854811015620043f1576010546000828152600660205260409020600401544391620043b0916200699a565b11620043d657620043c1816200569c565b620043ce6001836200699a565b9150620043dc565b620043f1565b80620043e88162006dfc565b91505062004383565b50600755565b600c54600b5410156200453a57600b546000908152600a60205260409020601054600182015443916200442a916200699a565b1115620044345750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd92620044a8920190815260200190565b600060405180830381600087803b158015620044c357600080fd5b505af1158015620044d8573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600180820183905560029091018290558254909450919250906200452d9084906200699a565b90915550620043f7915050565b565b60e28151146200458f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640162000ebc565b60308261024001515114620045e75760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000ebc565b620045f282620057e7565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262004668920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604051602081830303815290604052905060008262004688835162005926565b836040516020016200469d9392919062006fec565b60408051601f1981840301815282825280516020918201206002808552606085018452909450600093929091830190803683370190505090506000808080620046f58982620046ef6041600262006e19565b62005a7b565b90506000620047148a6200470c6041600262006e19565b606062005a7b565b905060205b8251811015620047e5576200472f838262005baf565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa1580156200478b573d6000803e3d6000fd5b5050604051601f190151905087620047a560418462006fb0565b81518110620047b857620047b862006dcd565b6001600160a01b0390921660209283029190910190910152620047dd6041826200699a565b905062004719565b508a602001516001600160a01b0316866000815181106200480a576200480a62006dcd565b60200260200101516001600160a01b031614620048905760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840162000ebc565b8a604001516001600160a01b031686600181518110620048b457620048b462006dcd565b60200260200101516001600160a01b0316146200493a5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840162000ebc565b6001620049528c6102400151838e6000015162005be6565b14620049c75760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840162000ebc565b620049d28b62005c55565b5050505050505050505050565b6000821162004a575760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b0381166000908152602a602052604090205482111562004ac15760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000ebc565b6001600160a01b0381166000908152602a60205260408120805484929062004aeb90849062006984565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff1991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004b848362006dfc565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b60205260409020805490918381169116148062004dac57600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004c82573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004ca8919062006d8f565b90508481101562004d225760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840162000ebc565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b15801562004d8c57600080fd5b505af115801562004da1573d6000803e3d6000fd5b505050505062004e55565b8382600b0154836008015462004dc3919062006984565b101562004e395760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840162000ebc565b8382600b01600082825462004e4f91906200699a565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162004f708362006dfc565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc838760405162004be39291909115158252602082015260400190565b60fa60a06000808285855af462004fe1573d6000803e3d6000fd5b505050565b815460026001808316156101000203821604825180820160208110602084100160028114620050955760018114620050bb578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200507e57815184556001840193506020820191506200505f565b815191036101000a90819004029091555062005130565b60028302826020036101000a846020036101000a60208901510402018501875562005130565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156200511e5781518455600184019350602082019150620050ff565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff1660038111156200517f576200517f620061b0565b146200521f57600282015482546001600160a01b03166000908152602a602052604081208054909190620051b59084906200699a565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462005212946001600160a01b0391821694911692909160ff9091169062007035565b60405180910390a1505050565b805482546001600160a01b039081169116146200533557600080826008015483600501546200524f919062006984565b9050806000036200526757836002015491506200528d565b80846002015484600d01546200527e919062006e19565b6200528a919062006fb0565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620052f857600080fd5b505af11580156200530d573d6000803e3d6000fd5b505050508183600d0160008282546200532791906200699a565b909155506200535592505050565b81600201548160080160008282546200534f91906200699a565b90915550505b816002015481600501600082825462003d5d91906200699a565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff1662005595576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200541d57600080fd5b505af115801562005432573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b158015620054a157600080fd5b505af1158015620054b6573d6000803e3d6000fd5b50505050600083600801548460050154620054d2919062006984565b600d850154909150620054e6828462006e19565b620054f2919062006fb0565b92508184600d0160008282546200550a919062006984565b9091555050600684015460000362005529576003850183905562005551565b600684015460078501546200553f908562006e19565b6200554b919062006fb0565b60038601555b828460060160008282546200556791906200699a565b90915550506003850154600785018054600090620055879084906200699a565b909155506200566a92505050565b5060028201546008820154811115620055af575060088101545b8160090154600003620055c95760038301819055620055f1565b6009820154600a830154620055df908362006e19565b620055eb919062006fb0565b60038401555b808260090160008282546200560791906200699a565b90915550506003830154600a83018054600090620056279084906200699a565b925050819055508082600801600082825462005644919062006984565b90915550506002830154600b830180546000906200566490849062006984565b90915550505b6005808401805460ff19166001179055820180548291906000906200569190849062006984565b909155505050505050565b60008181526006602052604081206003810154909103620056bb575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff16620057575781600701548260060154846003015462005707919062006e19565b62005713919062006fb0565b9050808260060160008282546200572b919062006984565b909155505060038301546007830180546000906200574b90849062006984565b90915550620057bc9050565b81600a01548260090154846003015462005772919062006e19565b6200577e919062006fb0565b90508082600901600082825462005796919062006984565b90915550506003830154600a83018054600090620057b690849062006984565b90915550505b82546001600160a01b03166000908152602a602052604081208054839290620056919084906200699a565b6000620057f8826060015162005ea0565b6001600160a01b039091166020840152905080156200585a5760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000ebc565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620058ce5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000ebc565b61271082608001511115620016335760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000ebc565b6060816000036200596a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156200599a5780620059818162006dfc565b9150620059929050600a8362006fb0565b91506200596e565b60008167ffffffffffffffff811115620059b857620059b8620065d0565b6040519080825280601f01601f191660200182016040528015620059e3576020820181803683370190505b5090505b841562005a7357620059fb60018362006984565b915062005a0a600a8662006e62565b62005a179060306200699a565b60f81b81838151811062005a2f5762005a2f62006dcd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062005a6b600a8662006fb0565b9450620059e7565b949350505050565b60608162005a8b81601f6200699a565b101562005adb5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640162000ebc565b62005ae782846200699a565b8451101562005b395760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640162000ebc565b60608215801562005b5a576040519150600082526020820160405262005ba6565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562005b9557805183526020928301920162005b7b565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b81101562005bdf5762005bdc601b8262007063565b90505b9250925092565b600062005bf26200603b565b600085858560405160200162005c0b939291906200707f565b6040516020818303038152906040529050600060fb905060008251602062005c3491906200699a565b90506020848285855afa62005c4857600080fd5b5050905195945050505050565b6101808101516001600160a01b031662005cd857601f5460009062005c7a9062005926565b90508160200151826000015183608001518360405162005c9a9062006059565b62005ca99493929190620070e1565b604051809103906000f08015801562005cc6573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0395861617909155845184168352602b9095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005d9790826200711f565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005e6e90826200711f565b5061026082015160138201805460ff1916600183600381111562005e965762005e96620061b0565b0217905550505050565b60008062005ead62006067565b60008060ff9050604083875160208901845afa62005eca57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562005fb95762005fb9620061b0565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f61919062006085565b5080546200600a9062006900565b6000825580601f106200601b575050565b601f01602090049060005260206000209081019062000f619190620060aa565b60405180602001604052806001906020820280368337509192915050565b611dde80620071e483390190565b60405180604001604052806002906020820280368337509192915050565b80821115620060a65760006200609c828262005ffc565b5060010162006085565b5090565b5b80821115620060a65760008155600101620060ab565b60005b83811015620060de578181015183820152602001620060c4565b50506000910152565b6000815180845262006101816020860160208601620060c1565b601f01601f19169290920160200192915050565b6020815260006200612a6020830184620060e7565b9392505050565b6001600160a01b038116811462000f6157600080fd5b600080604083850312156200615b57600080fd5b8235620061688162006131565b946020939093013593505050565b6000602082840312156200618957600080fd5b81356200612a8162006131565b600060208284031215620061a957600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811062006217577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208152620062366020820183516001600160a01b03169052565b600060208301516200625360408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620062876102a0850183620060e7565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a06200630f818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620063738483620060e7565b9350808701519150506200638a82860182620061df565b5090949350505050565b600080600060608486031215620063aa57600080fd5b8335620063b78162006131565b92506020840135620063c98162006131565b929592945050506040919091013590565b600060208284031215620063ed57600080fd5b813567ffffffffffffffff8111156200640557600080fd5b820161028081850312156200612a57600080fd5b600081518084526020808501808196508360051b8101915082860160005b858110156200648e578284038952815180516001600160a01b0316855285810151868601526040908101516060918601829052906200647981870183620060e7565b9a87019a955050509084019060010162006437565b5091979650505050505050565b821515815260406020820152600062005a73604083018462006419565b60008060408385031215620064cc57600080fd5b50508035926020909101359150565b600061024082019050855182526020860151602083015260408601516040830152606086015160608301526080860151608083015260a08601516001600160a01b0380821660a08501528087511660c08501528060208801511660e0850152806040880151166101008501528060608801511661012085015250506080850151620065726101408401826001600160a01b03169052565b5060a08501516001600160a01b0390811661016084015260c090950151851661018083015283519094166101a082015260208301516101c082015260408301516101e082015260609092015161020083015261022090910152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200661157600080fd5b813567ffffffffffffffff808211156200662f576200662f620065d0565b604051601f8301601f19908116603f011681019082821181831017156200665a576200665a620065d0565b816040528381528660208588010111156200667457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215620066ab57600080fd5b843567ffffffffffffffff80821115620066c457600080fd5b620066d288838901620065ff565b955060208701359150620066e68262006131565b90935060408601359080821115620066fd57600080fd5b6200670b88838901620065ff565b935060608701359150808211156200672257600080fd5b506200673187828801620065ff565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620067b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452620067a1858351620060e7565b9450928501929085019060010162006764565b5092979650505050505050565b6020815260006200612a602083018462006419565b6020808252825182820181905260009190848201906040850190845b81811015620068195783516001600160a01b031683529284019291840191600101620067f2565b50909695505050505050565b600080604083850312156200683957600080fd5b823567ffffffffffffffff808211156200685257600080fd5b6200686086838701620065ff565b935060208501359150808211156200687757600080fd5b506200688685828601620065ff565b9150509250929050565b604081526000620068a56040830185620060e7565b8281036020840152620068b98185620060e7565b95945050505050565b60008060408385031215620068d657600080fd5b8235620068e38162006131565b91506020830135620068f58162006131565b809150509250929050565b600181811c908216806200691557607f821691505b6020821081036200694f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562000e4c5762000e4c62006955565b8082018082111562000e4c5762000e4c62006955565b6000813562000e4c8162006131565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112620069f557600080fd5b83018035915067ffffffffffffffff82111562006a1157600080fd5b60200191503681900382131562006a2757600080fd5b9250929050565b601f82111562004fe157600081815260208120601f850160051c8101602086101562006a575750805b601f850160051c820191505b8181101562006a785782815560010162006a63565b505050505050565b67ffffffffffffffff83111562006a9b5762006a9b620065d0565b62006ab38362006aac835462006900565b8362006a2e565b6000601f84116001811462006aea576000851562006ad15750838201355b600019600387901b1c1916600186901b178355620017a8565b600083815260209020601f19861690835b8281101562006b1d578685013582556020948501946001909201910162006afb565b508682101562006b3b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000e4c57600080fd5b6004821062006b97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006be362006bb983620069b0565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b62006c2362006bf560208401620069b0565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c6362006c3560408401620069b0565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c726060830183620069bf565b62006c8281836003860162006a80565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006d1962006ceb6101808401620069b0565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f8201556102008201356010820155610220820135601182015562006d60610240830183620069bf565b62006d7081836012860162006a80565b50506200163362006d85610260840162006b4d565b6013830162006b5f565b60006020828403121562006da257600080fd5b5051919050565b60006020828403121562006dbc57600080fd5b815180151581146200612a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820362006e125762006e1262006955565b5060010190565b808202811582820484141762000e4c5762000e4c62006955565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262006e745762006e7462006e33565b500690565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262006eae60a0840186620060e7565b91508084166080840152509695505050505050565b81810362006ecf575050565b62006edb825462006900565b67ffffffffffffffff81111562006ef65762006ef6620065d0565b62006f0e8162006f07845462006900565b8462006a2e565b6000601f82116001811462006f45576000831562006f2c5750848201545b600019600385901b1c1916600184901b178455620017a8565b600085815260209020601f19841690600086815260209020845b8381101562006f81578286015482556001958601959091019060200162006f5f565b508583101562006fa05781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262006fc25762006fc262006e33565b500490565b6000806040838503121562006fdb57600080fd5b505080516020909101519092909150565b6000845162007000818460208901620060c1565b84519083019062007016818360208901620060c1565b84519101906200702b818360208801620060c1565b0195945050505050565b6001600160a01b038581168252841660208201526040810183905260808101620068b96060830184620061df565b60ff818116838216019081111562000e4c5762000e4c62006955565b6000845162007093818460208901620060c1565b845190830190620070a9818360208901620060c1565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152620071156080830184620060e7565b9695505050505050565b815167ffffffffffffffff8111156200713c576200713c620065d0565b6200714d8162006f07845462006900565b602080601f8311600181146200718557600084156200716c5750858301515b600019600386901b1c1916600185901b17855562006a78565b600085815260208120601f198616915b82811015620071b65788860151825594840194600190910190840162007195565b508582101562006fa057939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033a2646970667358221220a1f2cd7f5eeb1fd780eb5a64df5a0d6997ca8ecbe9b88948abafd3f282c6457564736f6c6343000815003360806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033") var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ { @@ -140,6 +143,11 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "name" : "unbondingPeriod", "type" : "uint256" }, + { + "internalType" : "uint256", + "name" : "initialInflationReserve", + "type" : "uint256" + }, { "internalType" : "address payable", "name" : "treasuryAccount", @@ -181,6 +189,11 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "contract UpgradeManager", "name" : "upgradeManagerContract", "type" : "address" + }, + { + "internalType" : "contract IInflationController", + "name" : "inflationControllerContract", + "type" : "address" } ], "internalType" : "struct Autonity.Contracts", @@ -541,7 +554,13 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ { "indexed" : false, "internalType" : "uint256", - "name" : "amount", + "name" : "atnAmount", + "type" : "uint256" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "ntnAmount", "type" : "uint256" } ], @@ -651,6 +670,19 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [], + "name" : "atnTotalRedistributed", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -770,6 +802,11 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "name" : "unbondingPeriod", "type" : "uint256" }, + { + "internalType" : "uint256", + "name" : "initialInflationReserve", + "type" : "uint256" + }, { "internalType" : "address payable", "name" : "treasuryAccount", @@ -811,6 +848,11 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "contract UpgradeManager", "name" : "upgradeManagerContract", "type" : "address" + }, + { + "internalType" : "contract IInflationController", + "name" : "inflationControllerContract", + "type" : "address" } ], "internalType" : "struct Autonity.Contracts", @@ -1341,6 +1383,19 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "inflationReserve", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [], "name" : "lastEpochBlock", @@ -1354,6 +1409,19 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "lastEpochTime", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -1485,6 +1553,19 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [ + { + "internalType" : "contract IInflationController", + "name" : "_address", + "type" : "address" + } + ], + "name" : "setInflationControllerContract", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, { "inputs" : [ { @@ -1615,19 +1696,6 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "pure", "type" : "function" }, - { - "inputs" : [], - "name" : "totalRedistributed", - "outputs" : [ - { - "internalType" : "uint256", - "name" : "", - "type" : "uint256" - } - ], - "stateMutability" : "view", - "type" : "function" - }, { "inputs" : [], "name" : "totalSupply", @@ -1669,17 +1737,17 @@ var AutonityAbi, _ = abi.JSON(strings.NewReader(`[ "inputs" : [ { "internalType" : "address", - "name" : "sender", + "name" : "_sender", "type" : "address" }, { "internalType" : "address", - "name" : "recipient", + "name" : "_recipient", "type" : "address" }, { "internalType" : "uint256", - "name" : "amount", + "name" : "_amount", "type" : "uint256" } ], diff --git a/params/generated/AutonityTest.go b/params/generated/AutonityTest.go index 65801cdbbe..7b6e4ab859 100644 --- a/params/generated/AutonityTest.go +++ b/params/generated/AutonityTest.go @@ -1,10 +1,13 @@ package generated -import "strings" -import "github.com/autonity/autonity/accounts/abi" -import "github.com/autonity/autonity/common" +import ( + "strings" -var AutonityTestBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b506040516200c5bb3803806200c5bb8339810160408190526200003e9162000e6b565b8181600d600f01546000036200006c57602a80546001600160a01b031916331790556200006c828262000076565b505050506200132c565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b825181101562000427576000838281518110620001875762000187620010a8565b602002602001015160a0015190506000848381518110620001ac57620001ac620010a8565b60200260200101516101a00181815250506000848381518110620001d457620001d4620010a8565b602002602001015161018001906001600160a01b031690816001600160a01b0316815250506000848381518110620002105762000210620010a8565b602002602001015160a00181815250506000848381518110620002375762000237620010a8565b60209081029190910101516101c00152600f548451859084908110620002615762000261620010a8565b602002602001015160800181815250506000848381518110620002885762000288620010a8565b602002602001015161026001906003811115620002a957620002a9620010be565b90816003811115620002bf57620002bf620010be565b815250506000848381518110620002da57620002da620010a8565b602002602001015161016001818152505062000318848381518110620003045762000304620010a8565b60200260200101516200042c60201b60201c565b62000345848381518110620003315762000331620010a8565b60200260200101516200056760201b60201c565b80602760008685815181106200035f576200035f620010a8565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200039c9190620010ea565b925050819055508060296000828254620003b79190620010ea565b9250508190555062000411848381518110620003d757620003d7620010a8565b60200260200101516020015182868581518110620003f957620003f9620010a8565b6020026020010151600001516200079860201b60201c565b50806200041e8162001106565b91505062000166565b505050565b60006200044382606001516200098360201b60201c565b6001600160a01b03909116602084015290508015620004975760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152602890925260409091206001015416156200050b5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c726561647920726567697374657265640000000060448201526064016200048e565b61271082608001511115620005635760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e207261746500000000000000000060448201526064016200048e565b5050565b6101808101516001600160a01b0316620005ea57601d546000906200058c90620009d1565b905081602001518260000151836080015183604051620005ac9062000af1565b620005bb949392919062001122565b604051809103906000f080158015620005d8573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b03958616179091558451841683526028909552604091829020865181548716908516178155935190840180548616918416919091179055840151600283018054909416911617909155606082015182919060038201906200069c908262001206565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062000766908262001206565b5061026082015160138201805460ff191660018360038111156200078e576200078e620010be565b0217905550505050565b60008211620007f65760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b60648201526084016200048e565b6001600160a01b038116600090815260276020526040902054821115620008605760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e6365000000000060448201526064016200048e565b6001600160a01b038116600090815260276020526040812080548492906200088a908490620012d2565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620009168362001106565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b6000806200099062000aff565b60008060ff9050604083875160208901845afa620009ad57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003620009f95750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a29578062000a108162001106565b915062000a219050600a83620012fe565b9150620009fd565b6000816001600160401b0381111562000a465762000a4662000b1d565b6040519080825280601f01601f19166020018201604052801562000a71576020820181803683370190505b5090505b841562000ae95762000a89600183620012d2565b915062000a98600a8662001315565b62000aa5906030620010ea565b60f81b81838151811062000abd5762000abd620010a8565b60200101906001600160f81b031916908160001a90535062000ae1600a86620012fe565b945062000a75565b949350505050565b611a20806200ab9b83390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b585762000b5862000b1d565b60405290565b60405160a081016001600160401b038111828210171562000b585762000b5862000b1d565b60405161028081016001600160401b038111828210171562000b585762000b5862000b1d565b604051601f8201601f191681016001600160401b038111828210171562000bd45762000bd462000b1d565b604052919050565b6001600160a01b038116811462000bf257600080fd5b50565b805162000c028162000bdc565b919050565b60005b8381101562000c2457818101518382015260200162000c0a565b50506000910152565b600082601f83011262000c3f57600080fd5b81516001600160401b0381111562000c5b5762000c5b62000b1d565b62000c70601f8201601f191660200162000ba9565b81815284602083860101111562000c8657600080fd5b62000ae982602083016020870162000c07565b80516004811062000c0257600080fd5b600060c0828403121562000cbc57600080fd5b60405160c081016001600160401b038111828210171562000ce15762000ce162000b1d565b8060405250809150825162000cf68162000bdc565b8152602083015162000d088162000bdc565b6020820152604083015162000d1d8162000bdc565b6040820152606083015162000d328162000bdc565b6060820152608083015162000d478162000bdc565b608082015260a083015162000d5c8162000bdc565b60a0919091015292915050565b60006080828403121562000d7c57600080fd5b62000d8662000b33565b9050815162000d958162000bdc565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361020081121562000dd257600080fd5b62000ddc62000b33565b915060a081121562000ded57600080fd5b5062000df862000b5e565b82518152602083015160208201526040830151604082015260608301516060820152608083015162000e2a8162000bdc565b6080820152815262000e408360a0840162000ca9565b602082015262000e5583610160840162000d69565b60408201526101e0820151606082015292915050565b60008061022080848603121562000e8157600080fd5b83516001600160401b038082111562000e9957600080fd5b818601915086601f83011262000eae57600080fd5b815160208282111562000ec55762000ec562000b1d565b8160051b62000ed682820162000ba9565b928352848101820192828101908b85111562000ef157600080fd5b83870192505b84831015620010865782518681111562000f1057600080fd5b8701610280818e03601f1901121562000f2857600080fd5b62000f3262000b83565b62000f3f86830162000bf5565b815262000f4f6040830162000bf5565b8682015262000f616060830162000bf5565b604082015260808201518881111562000f7957600080fd5b62000f898f888386010162000c2d565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e082015261012082015161010082015261014082015161012082015261016082015161014082015261018082015161016082015262000ff76101a0830162000bf5565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e0820152898201516102008201526102408201518a820152610260820151888111156200104957600080fd5b620010598f888386010162000c2d565b610240830152506200106f610280830162000c99565b610260820152835250918301919083019062000ef7565b8099505050506200109a89828a0162000dbd565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620011005762001100620010d4565b92915050565b6000600182016200111b576200111b620010d4565b5060010190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620011618160a085016020870162000c07565b601f01601f19169190910160a00195945050505050565b600181811c908216806200118d57607f821691505b602082108103620011ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042757600081815260208120601f850160051c81016020861015620011dd5750805b601f850160051c820191505b81811015620011fe57828155600101620011e9565b505050505050565b81516001600160401b0381111562001222576200122262000b1d565b6200123a8162001233845462001178565b84620011b4565b602080601f831160018114620012725760008415620012595750858301515b600019600386901b1c1916600185901b178555620011fe565b600085815260208120601f198616915b82811015620012a35788860151825594840194600190910190840162001282565b5085821015620012c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115620011005762001100620010d4565b634e487b7160e01b600052601260045260246000fd5b600082620013105762001310620012e8565b500490565b600082620013275762001327620012e8565b500690565b61985f806200133c6000396000f3fe608060405260043610620004eb5760003560e01c8063852c48491162000285578063b66b3e791162000165578063d372c07e11620000db578063dfb1a4d2116200008f578063e7f43c681162000075578063e7f43c681462001078578063f5502f221462001098578063f7866ee3146200116f57005b8063dfb1a4d21462001049578063dfd4b688146200106057005b8063d861b0e811620000c1578063d861b0e81462000fc2578063d886f8a21462000fda578063dd62ed3e1462000fff57005b8063d372c07e1462000f7b578063d5f394881462000fa057005b8063c9d97af41162000133578063ceaad4551162000119578063ceaad4551462000f19578063cf9c57191462000f3e578063cfd19fb91462000f5657005b8063c9d97af41462000edc578063cb696f541462000ef457005b8063b66b3e791462000e6d578063b7ab4db51462000e95578063bb0db4281462000ead578063c2362dd51462000ec457005b8063a515366a11620001fb578063ab8f6ffe11620001c9578063b2ea9adb11620001af578063b2ea9adb1462000dfe578063b3ecbadd1462000e23578063b46e55201462000e4857005b8063ab8f6ffe1462000db0578063ae1f5fa01462000dd757005b8063a515366a1462000d1a578063a5d059ca1462000d3f578063a8b2216e1462000d64578063a9059cbb1462000d8b57005b806396b477cb11620002535780639c98e47111620002395780639c98e4711462000cc65780639dc29fac1462000cde5780639efa9e7a1462000d0357005b806396b477cb1462000c7d5780639bb851c01462000cae57005b8063852c48491462000bd3578063872cf0591462000bf85780638bac7dad1462000c1057806395d89b411462000c3557005b806340c10f1911620003cb5780636b5f444c1162000341578063784304b511620002f5578063819b646311620002db578063819b64631462000b77578063833b1fce1462000b8e57806384467fdb1462000bae57005b8063784304b51462000a7457806379502c551462000a9957005b806370a08231116200032757806370a0823114620009fe578063731b3a031462000a3857806377e741c71462000a4f57005b80636b5f444c14620009c25780636fd2c80b14620009e757005b80634bb278f31162000399578063520fdbbc116200037f578063520fdbbc14620009475780635f7d3949146200096c578063676c24ab14620009aa57005b80634bb278f314620009085780634efcd15f146200093057005b806340c10f191462000890578063427bc5de14620008b55780634364596914620008cc578063496ccd9b14620008e357005b80631904bb2e11620004615780632f2c3f2e116200042f578063313ce5671162000415578063313ce567146200083657806335be16e014620008545780633d0ae216146200087957005b80632f2c3f2e14620006e457806330bcb81c14620006fc57005b80631904bb2e146200065c57806323b872dd14620006905780632701849b14620006b557806329070c6d14620006cd57005b80631122063311620004b95780631250a28d116200049f5780631250a28d14620006085780631604e416146200062d57806318160ddd146200064557005b80631122063314620005cc578063114eaf5514620005e357005b806306fdde0314620004f5578063095ea7b314620005505780630ae65e7a14620005865780630d8e6e2c14620005ab57005b36620004f357005b005b3480156200050257600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b60405162000547919062006cb2565b60405180910390f35b3480156200055d57600080fd5b50620005756200056f36600462006ce4565b6200118f565b604051901515815260200162000547565b3480156200059357600080fd5b50620004f3620005a536600462006d13565b620011a8565b348015620005b857600080fd5b50601c545b60405190815260200162000547565b348015620005d957600080fd5b50600e54620005bd565b348015620005f057600080fd5b50620004f36200060236600462006d33565b620012ba565b3480156200061557600080fd5b50620004f36200062736600462006d13565b6200131b565b3480156200063a57600080fd5b50620005bd60245481565b3480156200065257600080fd5b50602954620005bd565b3480156200066957600080fd5b50620006816200067b36600462006d13565b620013a6565b60405162000547919062006db8565b3480156200069d57600080fd5b5062000575620006af36600462006f31565b62001683565b348015620006c257600080fd5b50620004f3620016dd565b348015620006da57600080fd5b50600d54620005bd565b348015620006f157600080fd5b50620005bd61271081565b3480156200070957600080fd5b50620007ce6200071b36600462006d33565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915250600090815260066020908152604091829020825160e08101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460ff808216151560a084015261010090910416151560c082015290565b604051620005479190600060e0820190506001600160a01b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260c0830151151560c083015292915050565b3480156200084357600080fd5b506040516012815260200162000547565b3480156200086157600080fd5b50620004f36200087336600462006f77565b6200176b565b3480156200088657600080fd5b50600954620005bd565b3480156200089d57600080fd5b50620004f3620008af36600462006ce4565b62001961565b348015620008c257600080fd5b50600554620005bd565b348015620008d957600080fd5b50601a54620005bd565b348015620008f057600080fd5b50620004f36200090236600462006d13565b62001a4a565b3480156200091557600080fd5b506200092062001bc2565b6040516200054792919062007038565b3480156200093d57600080fd5b50602154620005bd565b3480156200095457600080fd5b50620004f36200096636600462006d13565b62002042565b3480156200097957600080fd5b50620009916200098b36600462007055565b620022f6565b6040516001600160a01b03909116815260200162000547565b348015620009b757600080fd5b50620004f362002521565b348015620009cf57600080fd5b50620004f3620009e136600462006d33565b62002cd8565b348015620009f457600080fd5b50601054620005bd565b34801562000a0b57600080fd5b50620005bd62000a1d36600462006d13565b6001600160a01b031660009081526027602052604090205490565b34801562000a4557600080fd5b50602054620005bd565b34801562000a5c57600080fd5b50620004f362000a6e36600462006d33565b62002ea6565b34801562000a8157600080fd5b50620004f362000a933660046200713c565b62002f07565b34801562000aa657600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c5462000b65939084565b60405162000547949392919062007192565b34801562000b8457600080fd5b50601b54620005bd565b34801562000b9b57600080fd5b506013546001600160a01b031662000991565b34801562000bbb57600080fd5b50620004f362000bcd3660046200726a565b62003179565b34801562000be057600080fd5b50620004f362000bf236600462006ce4565b620032a8565b34801562000c0557600080fd5b50620004f3620034ca565b34801562000c1d57600080fd5b50620004f362000c2f36600462006d33565b62003535565b34801562000c4257600080fd5b5060408051808201909152600381527f4e544e0000000000000000000000000000000000000000000000000000000000602082015262000538565b34801562000c8a57600080fd5b50620005bd62000c9c36600462006d33565b6000908152601f602052604090205490565b34801562000cbb57600080fd5b50620005bd60235481565b34801562000cd357600080fd5b50620005bd60215481565b34801562000ceb57600080fd5b50620004f362000cfd36600462006ce4565b620035e8565b34801562000d1057600080fd5b50600854620005bd565b34801562000d2757600080fd5b50620004f362000d3936600462006ce4565b62003734565b34801562000d4c57600080fd5b50620004f362000d5e36600462006ce4565b62003836565b34801562000d7157600080fd5b5062000d7c62003904565b60405162000547919062007313565b34801562000d9857600080fd5b506200057562000daa36600462006ce4565b620039e7565b34801562000dbd57600080fd5b5062000dc8620039f6565b60405162000547919062007397565b34801562000de457600080fd5b5062000def62003b08565b604051620005479190620073ac565b34801562000e0b57600080fd5b50620004f362000e1d366004620073fb565b62003dae565b34801562000e3057600080fd5b50620004f362000e4236600462006d13565b62003e24565b34801562000e5557600080fd5b50620004f362000e6736600462006d13565b62003eaf565b34801562000e7a57600080fd5b5062000e856200416f565b604051620005479291906200745c565b34801562000ea257600080fd5b5062000def620042a6565b34801562000eba57600080fd5b50600454620005bd565b34801562000ed157600080fd5b50620005bd60205481565b34801562000ee957600080fd5b50620005bd601e5481565b34801562000f0157600080fd5b50620004f362000f1336600462006d33565b6200430a565b34801562000f2657600080fd5b50620004f362000f3836600462006d13565b6200439c565b34801562000f4b57600080fd5b50620004f362004427565b34801562000f6357600080fd5b50620004f362000f7536600462006d13565b620044aa565b34801562000f8857600080fd5b50620004f362000f9a36600462006d13565b62004535565b34801562000fad57600080fd5b50602a5462000991906001600160a01b031681565b34801562000fcf57600080fd5b50620004f3620045c0565b34801562000fe757600080fd5b50620004f362000ff936600462006d13565b62004656565b3480156200100c57600080fd5b50620005bd6200101e3660046200748e565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b3480156200105657600080fd5b50601954620005bd565b3480156200106d57600080fd5b50620004f3620046e1565b3480156200108557600080fd5b506018546001600160a01b031662000991565b348015620010a557600080fd5b5062001129620010b736600462006d33565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260036020818152604092839020835160808101855281546001600160a01b03908116825260018301541692810192909252600281015493820193909352910154606082015290565b60405162000547919060006080820190506001600160a01b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b3480156200117c57600080fd5b506011546001600160a01b031662000991565b60006200119e338484620046eb565b5060015b92915050565b6001600160a01b03808216600081815260286020526040902060010154909116146200121b5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b03818116600090815260286020526040902054163314620012ac5760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162001212565b620012b78162004848565b50565b6018546001600160a01b03163314620013165760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b601055565b6018546001600160a01b03163314620013775760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b620013b062006a8b565b6001600160a01b03808316600081815260286020526040902060010154909116146200141f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162001212565b6001600160a01b0380831660009081526028602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906200148290620074cc565b80601f0160208091040260200160405190810160405280929190818152602001828054620014b090620074cc565b8015620015015780601f10620014d55761010080835404028352916020019162001501565b820191906000526020600020905b815481529060010190602001808311620014e357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620015bd90620074cc565b80601f0160208091040260200160405190810160405280929190818152602001828054620015eb90620074cc565b80156200163c5780601f1062001610576101008083540402835291602001916200163c565b820191906000526020600020905b8154815290600101906020018083116200161e57829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001666576200166662006d4d565b60038111156200167a576200167a62006d4d565b90525092915050565b6000620016928484846200491f565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620016c390849062007550565b9050620016d2853383620046eb565b506001949350505050565b602a546001600160a01b031633146200175f5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162001212565b6200176962004a2f565b565b6012546001600160a01b03163314620017ed5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015260840162001212565b60006101208201356028826200180a604086016020870162006d13565b6001600160a01b03166001600160a01b03168152602001908152602001600020600901546200183a919062007550565b60c08301356028600062001855604087016020880162006d13565b6001600160a01b03166001600160a01b031681526020019081526020016000206006015462001885919062007550565b60a084013560286000620018a0604088016020890162006d13565b6001600160a01b03166001600160a01b0316815260200190815260200160002060050154620018d0919062007550565b620018dc919062007566565b620018e8919062007566565b6011546001600160a01b03166000908152602760205260408120805492935083929091906200191990849062007566565b909155508290506028600062001936604084016020850162006d13565b6001600160a01b0316815260208101919091526040016000206200195b82826200776e565b50505050565b6018546001600160a01b03163314620019bd5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6001600160a01b03821660009081526027602052604081208054839290620019e790849062007566565b92505081905550806029600082825462001a02919062007566565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b15801562001b2b57600080fd5b505af115801562001b40573d6000803e3d6000fd5b50506016546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b15801562001ba657600080fd5b505af115801562001bbb573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b0316331462001c4a5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162001212565b601e54436000818152601f602090815260408220939093556019549254909262001c749162007566565b6012546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b15801562001cd857600080fd5b505af115801562001ced573d6000803e3d6000fd5b50505050801562001dfb5762001d0262004b72565b62001d0c62004f74565b62001d1662004a2f565b600062001d2262003b08565b6013546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f29062001d6e908490600401620073ac565b600060405180830381600087803b15801562001d8957600080fd5b505af115801562001d9e573d6000803e3d6000fd5b50505050436020819055506001601e600082825462001dbe919062007566565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b601354604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001e60573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e86919062007953565b9050801562001f1b57601454604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562001f13575060408051601f3d908101601f1916820190925262001f109181019062007953565b60015b1562001f1b57505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562002032576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001f9a90620074cc565b80601f016020809104026020016040519081016040528092919081815260200182805462001fc890620074cc565b8015620020195780601f1062001fed5761010080835404028352916020019162002019565b820191906000526020600020905b81548152906001019060200180831162001ffb57829003601f168201915b5050505050815250508152602001906001019062001f44565b5050505090509350935050509091565b6018546001600160a01b031633146200209e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556013546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b1580156200212357600080fd5b505af115801562002138573d6000803e3d6000fd5b50506014546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156200219d57600080fd5b505af1158015620021b2573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156200221757600080fd5b505af11580156200222c573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156200229157600080fd5b505af1158015620022a6573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb915060240162001b8b565b600080805b6022548110156200235257602281815481106200231c576200231c62007977565b906000526020600020906003020160010154826200233b919062007566565b9150806200234981620079a6565b915050620022fb565b5080600003620023a55760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162001212565b600083620023b5606387620079c3565b620023c1919062007566565b9050600081604051602001620023d991815260200190565b60408051601f1981840301815291905280516020909101209050600062002401848362007a0c565b90506000805b602254811015620024b1576022818154811062002428576200242862007977565b9060005260206000209060030201600101548262002447919062007566565b91506200245660018362007550565b83116200249c576022818154811062002473576200247362007977565b60009182526020909120600390910201546001600160a01b03169650620011a295505050505050565b80620024a881620079a6565b91505062002407565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b0000000000000000000000000000000000000000000000606482015260840162001212565b6200252b62004f74565b60006200253762003b08565b90506000815167ffffffffffffffff81111562002558576200255862007078565b60405190808252806020026020018201604052801562002582578160200160208202803683370190505b50601b5460225491925060009182911015620026075760405162461bcd60e51b815260206004820152602760248201527f636f6d6d69747465652073697a652065786365656473204d6178436f6d6d697460448201527f74656553697a6500000000000000000000000000000000000000000000000000606482015260840162001212565b60005b60225481101562002b11576000602282815481106200262d576200262d62007977565b60009182526020909120600390910201546001600160a01b0316905080620026985760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015260640162001212565b80858381518110620026ae57620026ae62007977565b60200260200101906001600160a01b031690816001600160a01b031681525050600060228381548110620026e657620026e662007977565b9060005260206000209060030201600101549050600081116200274c5760405162461bcd60e51b815260206004820152601460248201527f30207374616b6520696e20636f6d6d6974746565000000000000000000000000604482015260640162001212565b62002758818662007566565b94508215620027b35780841015620027b35760405162461bcd60e51b815260206004820152601c60248201527f636f6d6d6974746565206d656d62657273206e6f7420736f7274656400000000604482015260640162001212565b6001600160a01b0380831660008181526028602052604090206001810154939650869390921614620028285760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220646f6573206e6f742065786973740000000000000000604482015260640162001212565b818160050154146200287d5760405162461bcd60e51b815260206004820152600e60248201527f7374616b65206d69736d61746368000000000000000000000000000000000000604482015260640162001212565b87848151811062002892576200289262007977565b602090810291909101015160028201546001600160a01b03908116911614620028fe5760405162461bcd60e51b815260206004820152601760248201527f6f7261636c652061646472657373206d69736d61746368000000000000000000604482015260640162001212565b6000601382015460ff1660038111156200291c576200291c62006d4d565b146200296b5760405162461bcd60e51b815260206004820152601460248201527f76616c696461746f72206e6f7420616374697665000000000000000000000000604482015260640162001212565b6025848154811062002981576200298162007977565b906000526020600020016040516020016200299d919062007a9e565b6040516020818303038152906040528051906020012081600301604051602001620029c9919062007a9e565b604051602081830303815290604052805190602001201462002a2e5760405162461bcd60e51b815260206004820152600e60248201527f656e6f6465206d69736d61746368000000000000000000000000000000000000604482015260640162001212565b6022848154811062002a445762002a4462007977565b906000526020600020906003020160020160405160200162002a67919062007a9e565b604051602081830303815290604052805190602001208160120160405160200162002a93919062007a9e565b604051602081830303815290604052805190602001201462002af85760405162461bcd60e51b815260206004820152601660248201527f636f6e73656e737573206b6579206d69736d6174636800000000000000000000604482015260640162001212565b505050808062002b0890620079a6565b9150506200260a565b50602154821462002b655760405162461bcd60e51b815260206004820152601460248201527f746f74616c207374616b65206d69736d61746368000000000000000000000000604482015260640162001212565b60005b601d5481101562001bbb576000805b855181101562002bf75785818151811062002b965762002b9662007977565b60200260200101516001600160a01b0316601d848154811062002bbd5762002bbd62007977565b6000918252602090912001546001600160a01b03160362002be2576001915062002bf7565b8062002bee81620079a6565b91505062002b77565b50600060286000601d858154811062002c145762002c1462007977565b60009182526020808320909101546001600160a01b0316835282019290925260400181209150821515900362002cc057838160050154111562002cc05760405162461bcd60e51b815260206004820152602360248201527f68696768207374616b6520666f72206e6f6e2d636f6d6d6974746565206d656d60448201527f6265720000000000000000000000000000000000000000000000000000000000606482015260840162001212565b5050808062002ccf90620079a6565b91505062002b68565b6018546001600160a01b0316331462002d345760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b60195481101562002deb578060205462002d4f919062007566565b431062002deb5760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162001212565b60198190556012546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562002e5057600080fd5b505af115801562002e65573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162002e9b91815260200190565b60405180910390a150565b6018546001600160a01b0316331462002f025760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b600d55565b6001600160a01b03808316600081815260286020526040902060018101549092161462002f775760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162001212565b80546001600160a01b0316331462002ff85760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162001212565b620030038362005063565b15620030785760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d69747460448201527f6565000000000000000000000000000000000000000000000000000000000000606482015260840162001212565b6000806200308684620050d4565b925090508115620030da5760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162001212565b60018301546001600160a01b03828116911614620031615760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e27742062652060448201527f7570646174656400000000000000000000000000000000000000000000000000606482015260840162001212565b6003830162003171858262007aac565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562003248576200324862006d4d565b9052905062003258818362005122565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200329992339289918b9162007b79565b60405180910390a15050505050565b6001600160a01b0380831660008181526028602052604090206001015490911614620033175760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162001212565b6001600160a01b03828116600090815260286020526040902054163314620033a85760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162001212565b612710811115620033fc5760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162001212565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200348290849062007566565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b03163314620035265760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6002805460ff19166001179055565b6018546001600160a01b03163314620035915760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b60008111620035e35760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162001212565b601b55565b6018546001600160a01b03163314620036445760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6001600160a01b038216600090815260276020526040902054811115620036ae5760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162001212565b6001600160a01b03821660009081526027602052604081208054839290620036d890849062007550565b925050819055508060296000828254620036f3919062007550565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a39060200162001a3e565b6001600160a01b0380831660008181526028602052604090206001015490911614620037a35760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162001212565b6001600160a01b03821660009081526028602052604081206013015460ff166003811115620037d657620037d662006d4d565b14620038255760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162001212565b62003832828233620055c5565b5050565b6001600160a01b0380831660008181526028602052604090206001015490911614620038a55760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162001212565b60008111620038f75760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640162001212565b62003832828233620057d8565b60606025805480602002602001604051908101604052809291908181526020016000905b82821015620039de5783829060005260206000200180546200394a90620074cc565b80601f01602080910402602001604051908101604052809291908181526020018280546200397890620074cc565b8015620039c95780601f106200399d57610100808354040283529160200191620039c9565b820191906000526020600020905b815481529060010190602001808311620039ab57829003601f168201915b50505050508152602001906001019062003928565b50505050905090565b60006200119e3384846200491f565b60606022805480602002602001604051908101604052809291908181526020016000905b82821015620039de576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162003a7090620074cc565b80601f016020809104026020016040519081016040528092919081815260200182805462003a9e90620074cc565b801562003aef5780601f1062003ac35761010080835404028352916020019162003aef565b820191906000526020600020905b81548152906001019060200180831162003ad157829003601f168201915b5050505050815250508152602001906001019062003a1a565b602a546060906001600160a01b0316331462003b8d5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162001212565b601d5462003bde5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162001212565b62003be862006b5b565b601b546080820152601d815260286020820152602260408201526021606082015262003c148162005bac565b62003c226025600062006b79565b6022548062003c745760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640162001212565b60008167ffffffffffffffff81111562003c925762003c9262007078565b60405190808252806020026020018201604052801562003cbc578160200160208202803683370190505b50905060005b8281101562003da6576000602860006022848154811062003ce75762003ce762007977565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c019062003d4f9083018262007bc3565b50600281015483516001600160a01b039091169084908490811062003d785762003d7862007977565b6001600160a01b0390921660209283029190910190910152508062003d9d81620079a6565b91505062003cc2565b509250505090565b6018546001600160a01b0316331462003e0a5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b62003e1760008362005bc7565b6200383260018262005bc7565b6018546001600160a01b0316331462003e805760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602860205260409020600101549091161462003f1e5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162001212565b6001600160a01b0380821660009081526028602052604090208054909116331462003fb25760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162001212565b6000601382015460ff16600381111562003fd05762003fd062006d4d565b036200401f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162001212565b6002601382015460ff1660038111156200403d576200403d62006d4d565b1480156200404e5750438160100154115b156200409d5760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162001212565b6003601382015460ff166003811115620040bb57620040bb62006d4d565b036200410a5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162001212565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5916200415a919062007566565b60405190815260200160405180910390a35050565b606080600060018180546200418490620074cc565b80601f0160208091040260200160405190810160405280929190818152602001828054620041b290620074cc565b8015620042035780601f10620041d75761010080835404028352916020019162004203565b820191906000526020600020905b815481529060010190602001808311620041e557829003601f168201915b505050505091508080546200421890620074cc565b80601f01602080910402602001604051908101604052809291908181526020018280546200424690620074cc565b8015620042975780601f106200426b5761010080835404028352916020019162004297565b820191906000526020600020905b8154815290600101906020018083116200427957829003601f168201915b50505050509050915091509091565b6060601d8054806020026020016040519081016040528092919081815260200182805480156200430057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620042e1575b5050505050905090565b6018546001600160a01b03163314620043665760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162002e9b565b6018546001600160a01b03163314620043f85760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620044835760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6200449060008062006b99565b6200449e6001600062006b99565b6002805460ff19169055565b6018546001600160a01b03163314620045065760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620045915760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602a546001600160a01b03163314620046425760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162001212565b6200464c62004f74565b620012b762003b08565b6018546001600160a01b03163314620046b25760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162001212565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6200176962004f74565b6001600160a01b038316620047685760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162001212565b6001600160a01b038216620047e65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162001212565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff1660038111156200487d576200487d62006d4d565b14620048cc5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162001212565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c916200415a919062007566565b6001600160a01b038316600090815260276020526040902054811115620049895760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162001212565b6001600160a01b03831660009081526027602052604081208054839290620049b390849062007550565b90915550506001600160a01b03821660009081526027602052604081208054839290620049e290849062007566565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200483b91815260200190565b600c54600b5410156200176957600b546000908152600a602052604090206010546001820154439162004a629162007566565b111562004a6c5750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd9262004ae0920190815260200190565b600060405180830381600087803b15801562004afb57600080fd5b505af115801562004b10573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff191681556001808201839055600290910182905582549094509192509062004b6590849062007566565b9091555062004a2f915050565b4760000362004b7d57565b600d544790600090670de0b6b3a76400009062004b9c908490620079c3565b62004ba8919062007ca5565b9050801562004c26576011546040516000916001600160a01b03169083908381818185875af1925050503d806000811462004c00576040519150601f19603f3d011682016040523d82523d6000602084013e62004c05565b606091505b509091505080151560010362004c245762004c21828462007550565b92505b505b816023600082825462004c3a919062007566565b90915550600090505b60225481101562004f6f576000602860006022848154811062004c6a5762004c6a62007977565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206021546022805492945090918791908690811062004cb55762004cb562007977565b90600052602060002090600302016001015462004cd39190620079c3565b62004cdf919062007ca5565b9050801562004f57576002601383015460ff16600381111562004d065762004d0662006d4d565b148062004d2e57506003601383015460ff16600381111562004d2c5762004d2c62006d4d565b145b1562004dee57601254602280546001600160a01b0390921691631de9d9b69184918790811062004d625762004d6262007977565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b0390911660048201526024016000604051808303818588803b15801562004dcc57600080fd5b505af115801562004de1573d6000803e3d6000fd5b5050505050505062004f5a565b6000826005015482846008015462004e079190620079c3565b62004e13919062007ca5565b9050600062004e23828462007550565b9050811562004e885783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d806000811462004e7f576040519150601f19603f3d011682016040523d82523d6000602084013e62004e84565b606091505b5050505b801562004f105783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af115801562004ee7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062004f0e919062007cbc565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b8062004f6681620079a6565b91505062004c43565b505050565b6004545b60055481101562004fa15762004f9b8162004f9381620079a6565b925062005d1a565b62004f78565b506005546004556008546007540362004fb657565b6009545b60085481101562004fe35762004fdd8162004fd581620079a6565b925062005f5a565b62004fba565b50600854600955600754805b6008548110156200505d5760105460008281526006602052604090206004015443916200501c9162007566565b1162005042576200502d8162006287565b6200503a60018362007566565b915062005048565b6200505d565b806200505481620079a6565b91505062004fef565b50600755565b6000805b602254811015620050cb576022818154811062005088576200508862007977565b60009182526020909120600390910201546001600160a01b0390811690841603620050b65750600192915050565b80620050c281620079a6565b91505062005067565b50600092915050565b600080620050e162006bd8565b60008060ff9050604083875160208901845afa620050fe57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60e2815114620051755760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640162001212565b60308261024001515114620051cd5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162001212565b620051d882620063d2565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a0000000000006020808301919091528451925191926000926200524e920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60405160208183030381529060405290506000826200526e835162006511565b83604051602001620052839392919062007cd6565b60408051601f1981840301815282825280516020918201206002808552606085018452909450600093929091830190803683370190505090506000808080620052db8982620052d560416002620079c3565b62006666565b90506000620052fa8a620052f260416002620079c3565b606062006666565b905060205b8251811015620053cb576200531583826200679a565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801562005371573d6000803e3d6000fd5b5050604051601f1901519050876200538b60418462007ca5565b815181106200539e576200539e62007977565b6001600160a01b0390921660209283029190910190910152620053c360418262007566565b9050620052ff565b508a602001516001600160a01b031686600081518110620053f057620053f062007977565b60200260200101516001600160a01b031614620054765760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840162001212565b8a604001516001600160a01b0316866001815181106200549a576200549a62007977565b60200260200101516001600160a01b031614620055205760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840162001212565b6001620055388c6102400151838e60000151620067d1565b14620055ad5760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840162001212565b620055b88b62006840565b5050505050505050505050565b600082116200563d5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840162001212565b6001600160a01b038116600090815260276020526040902054821115620056a75760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162001212565b6001600160a01b03811660009081526027602052604081208054849290620056d190849062007550565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff199182161782559551600182018054919098169616959095179095559051600284015551910155805491926200576a83620079a6565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b03808416600090815260286020526040902080549091838116911614806200599257600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562005868573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200588e919062007cbc565b905084811015620059085760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840162001212565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b1580156200597257600080fd5b505af115801562005987573d6000803e3d6000fd5b505050505062005a3b565b8382600b01548360080154620059a9919062007550565b101562005a1f5760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840162001212565b8382600b01600082825462005a35919062007566565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162005b5683620079a6565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620057c99291909115158252602082015260400190565b60fa60a06000808285855af462004f6f573d6000803e3d6000fd5b81546002600180831615610100020382160482518082016020811060208410016002811462005c76576001811462005c9c578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101562005c5f578151845560018401935060208201915062005c40565b815191036101000a90819004029091555062005d11565b60028302826020036101000a846020036101000a60208901510402018501875562005d11565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562005cff578151845560018401935060208201915062005ce0565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff16600381111562005d605762005d6062006d4d565b1462005e0057600282015482546001600160a01b03166000908152602760205260408120805490919062005d9690849062007566565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462005df3946001600160a01b0391821694911692909160ff9091169062007d1f565b60405180910390a1505050565b805482546001600160a01b0390811691161462005f16576000808260080154836005015462005e30919062007550565b90508060000362005e48578360020154915062005e6e565b80846002015484600d015462005e5f9190620079c3565b62005e6b919062007ca5565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b15801562005ed957600080fd5b505af115801562005eee573d6000803e3d6000fd5b505050508183600d01600082825462005f08919062007566565b9091555062005f3692505050565b816002015481600801600082825462005f30919062007566565b90915550505b816002015481600501600082825462005f50919062007566565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff1662006180576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200600857600080fd5b505af11580156200601d573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200608c57600080fd5b505af1158015620060a1573d6000803e3d6000fd5b50505050600083600801548460050154620060bd919062007550565b600d850154909150620060d18284620079c3565b620060dd919062007ca5565b92508184600d016000828254620060f5919062007550565b909155505060068401546000036200611457600385018390556200613c565b600684015460078501546200612a9085620079c3565b62006136919062007ca5565b60038601555b8284600601600082825462006152919062007566565b909155505060038501546007850180546000906200617290849062007566565b909155506200625592505050565b50600282015460088201548111156200619a575060088101545b8160090154600003620061b45760038301819055620061dc565b6009820154600a830154620061ca9083620079c3565b620061d6919062007ca5565b60038401555b80826009016000828254620061f2919062007566565b90915550506003830154600a830180546000906200621290849062007566565b92505081905550808260080160008282546200622f919062007550565b90915550506002830154600b830180546000906200624f90849062007550565b90915550505b6005808401805460ff19166001179055820180548291906000906200627c90849062007550565b909155505050505050565b60008181526006602052604081206003810154909103620062a6575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff166200634257816007015482600601548460030154620062f29190620079c3565b620062fe919062007ca5565b90508082600601600082825462006316919062007550565b909155505060038301546007830180546000906200633690849062007550565b90915550620063a79050565b81600a0154826009015484600301546200635d9190620079c3565b62006369919062007ca5565b90508082600901600082825462006381919062007550565b90915550506003830154600a83018054600090620063a190849062007550565b90915550505b82546001600160a01b0316600090815260276020526040812080548392906200627c90849062007566565b6000620063e38260600151620050d4565b6001600160a01b03909116602084015290508015620064455760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162001212565b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620064b95760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162001212565b61271082608001511115620038325760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162001212565b6060816000036200655557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156200658557806200656c81620079a6565b91506200657d9050600a8362007ca5565b915062006559565b60008167ffffffffffffffff811115620065a357620065a362007078565b6040519080825280601f01601f191660200182016040528015620065ce576020820181803683370190505b5090505b84156200665e57620065e660018362007550565b9150620065f5600a8662007a0c565b6200660290603062007566565b60f81b8183815181106200661a576200661a62007977565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062006656600a8662007ca5565b9450620065d2565b949350505050565b6060816200667681601f62007566565b1015620066c65760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640162001212565b620066d2828462007566565b84511015620067245760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640162001212565b60608215801562006745576040519150600082526020820160405262006791565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156200678057805183526020928301920162006766565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620067ca57620067c7601b8262007d4d565b90505b9250925092565b6000620067dd62006bf6565b6000858585604051602001620067f69392919062007d69565b6040516020818303038152906040529050600060fb90506000825160206200681f919062007566565b90506020848285855afa6200683357600080fd5b5050905195945050505050565b6101808101516001600160a01b0316620068c357601d54600090620068659062006511565b905081602001518260000151836080015183604051620068859062006c14565b62006894949392919062007dcb565b604051809103906000f080158015620068b1573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039586161790915584518416835260289095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062006982908262007aac565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062006a59908262007aac565b5061026082015160138201805460ff1916600183600381111562006a815762006a8162006d4d565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562006b565762006b5662006d4d565b905290565b6040518060a001604052806005906020820280368337509192915050565b5080546000825590600052602060002090810190620012b7919062006c22565b50805462006ba790620074cc565b6000825580601f1062006bb8575050565b601f016020900490600052602060002090810190620012b7919062006c47565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b611a208062007e0a83390190565b8082111562006c4357600062006c39828262006b99565b5060010162006c22565b5090565b5b8082111562006c43576000815560010162006c48565b60005b8381101562006c7b57818101518382015260200162006c61565b50506000910152565b6000815180845262006c9e81602086016020860162006c5e565b601f01601f19169290920160200192915050565b60208152600062006cc7602083018462006c84565b9392505050565b6001600160a01b0381168114620012b757600080fd5b6000806040838503121562006cf857600080fd5b823562006d058162006cce565b946020939093013593505050565b60006020828403121562006d2657600080fd5b813562006cc78162006cce565b60006020828403121562006d4657600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811062006db4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020815262006dd36020820183516001600160a01b03169052565b6000602083015162006df060408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015161028080608085015262006e246102a085018362006c84565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a062006eac818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f19016102608088019190915290915062006f10848362006c84565b93508087015191505062006f278286018262006d7c565b5090949350505050565b60008060006060848603121562006f4757600080fd5b833562006f548162006cce565b9250602084013562006f668162006cce565b929592945050506040919091013590565b60006020828403121562006f8a57600080fd5b813567ffffffffffffffff81111562006fa257600080fd5b8201610280818503121562006cc757600080fd5b600081518084526020808501808196508360051b8101915082860160005b858110156200702b578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620070168187018362006c84565b9a87019a955050509084019060010162006fd4565b5091979650505050505050565b82151581526040602082015260006200665e604083018462006fb6565b600080604083850312156200706957600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620070b957600080fd5b813567ffffffffffffffff80821115620070d757620070d762007078565b604051601f8301601f19908116603f0116810190828211818310171562007102576200710262007078565b816040528381528660208588010111156200711c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200715057600080fd5b82356200715d8162006cce565b9150602083013567ffffffffffffffff8111156200717a57600080fd5b6200718885828601620070a7565b9150509250929050565b6000610200820190508551825260208601516020830152604086015160408301526060860151606083015260808601516001600160a01b0380821660808501528087511660a08501528060208801511660c08501528060408801511660e08501528060608801511661010085015280608088015116610120850152505060a08501516200722b6101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b600080600080608085870312156200728157600080fd5b843567ffffffffffffffff808211156200729a57600080fd5b620072a888838901620070a7565b955060208701359150620072bc8262006cce565b90935060408601359080821115620072d357600080fd5b620072e188838901620070a7565b93506060870135915080821115620072f857600080fd5b506200730787828801620070a7565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156200738a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526200737785835162006c84565b945092850192908501906001016200733a565b5092979650505050505050565b60208152600062006cc7602083018462006fb6565b6020808252825182820181905260009190848201906040850190845b81811015620073ef5783516001600160a01b031683529284019291840191600101620073c8565b50909695505050505050565b600080604083850312156200740f57600080fd5b823567ffffffffffffffff808211156200742857600080fd5b6200743686838701620070a7565b935060208501359150808211156200744d57600080fd5b506200718885828601620070a7565b60408152600062007471604083018562006c84565b828103602084015262007485818562006c84565b95945050505050565b60008060408385031215620074a257600080fd5b8235620074af8162006cce565b91506020830135620074c18162006cce565b809150509250929050565b600181811c90821680620074e157607f821691505b6020821081036200751b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115620011a257620011a262007521565b80820180821115620011a257620011a262007521565b60008135620011a28162006cce565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112620075c157600080fd5b83018035915067ffffffffffffffff821115620075dd57600080fd5b602001915036819003821315620075f357600080fd5b9250929050565b601f82111562004f6f57600081815260208120601f850160051c81016020861015620076235750805b601f850160051c820191505b8181101562003171578281556001016200762f565b67ffffffffffffffff8311156200765f576200765f62007078565b6200767783620076708354620074cc565b83620075fa565b6000601f841160018114620076ae5760008515620076955750838201355b600019600387901b1c1916600186901b17835562001bbb565b600083815260209020601f19861690835b82811015620076e15786850135825560209485019460019092019101620076bf565b5086821015620076ff5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000813560048110620011a257600080fd5b600482106200775b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b620077a76200777d836200757c565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b620077e7620077b9602084016200757c565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62007827620077f9604084016200757c565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6200783660608301836200758b565b6200784681836003860162007644565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b820155620078dd620078af61018084016200757c565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f82015561020082013560108201556102208201356011820155620079246102408301836200758b565b6200793481836012860162007644565b50506200383262007949610260840162007711565b6013830162007723565b6000602082840312156200796657600080fd5b8151801515811462006cc757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006000198203620079bc57620079bc62007521565b5060010190565b8082028115828204841417620011a257620011a262007521565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262007a1e5762007a1e620079dd565b500690565b6000815462007a3281620074cc565b6001828116801562007a4d576001811462007a635762007a94565b60ff198416875282151583028701945062007a94565b8560005260208060002060005b8581101562007a8b5781548a82015290840190820162007a70565b50505082870194505b5050505092915050565b600062006cc7828462007a23565b815167ffffffffffffffff81111562007ac95762007ac962007078565b62007ae18162007ada8454620074cc565b84620075fa565b602080601f83116001811462007b19576000841562007b005750858301515b600019600386901b1c1916600185901b17855562003171565b600085815260208120601f198616915b8281101562007b4a5788860151825594840194600190910190840162007b29565b508582101562007b695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262007bae60a084018662006c84565b91508084166080840152509695505050505050565b81810362007bcf575050565b62007bdb8254620074cc565b67ffffffffffffffff81111562007bf65762007bf662007078565b62007c078162007ada8454620074cc565b6000601f82116001811462007c3e576000831562007c255750848201545b600019600385901b1c1916600184901b17845562001bbb565b600085815260209020601f19841690600086815260209020845b8381101562007c7a578286015482556001958601959091019060200162007c58565b508583101562007b695793015460001960f8600387901b161c19169092555050600190811b01905550565b60008262007cb75762007cb7620079dd565b500490565b60006020828403121562007ccf57600080fd5b5051919050565b6000845162007cea81846020890162006c5e565b84519083019062007d0081836020890162006c5e565b845191019062007d1581836020880162006c5e565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162007485606083018462006d7c565b60ff8181168382160190811115620011a257620011a262007521565b6000845162007d7d81846020890162006c5e565b84519083019062007d9381836020890162006c5e565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015262007dff608083018462006c84565b969550505050505056fe60806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033a264697066735822122011f74f71916c78556c20cf8afd758f753aaa8f672ad1e73bb2ac7d81d70a88b464736f6c6343000815003360806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033") + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var AutonityTestBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b506040516200cdf13803806200cdf18339810160408190526200003e9162000ea5565b8181600d601101546000036200006c57602e80546001600160a01b031916331790556200006c828262000076565b5050505062001366565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000449576000838281518110620001a957620001a9620010e2565b602002602001015160a0015190506000848381518110620001ce57620001ce620010e2565b60200260200101516101a00181815250506000848381518110620001f657620001f6620010e2565b602002602001015161018001906001600160a01b031690816001600160a01b0316815250506000848381518110620002325762000232620010e2565b602002602001015160a00181815250506000848381518110620002595762000259620010e2565b60209081029190910101516101c00152600f548451859084908110620002835762000283620010e2565b602002602001015160800181815250506000848381518110620002aa57620002aa620010e2565b602002602001015161026001906003811115620002cb57620002cb620010f8565b90816003811115620002e157620002e1620010f8565b815250506000848381518110620002fc57620002fc620010e2565b60200260200101516101600181815250506200033a848381518110620003265762000326620010e2565b60200260200101516200044e60201b60201c565b62000367848381518110620003535762000353620010e2565b60200260200101516200058960201b60201c565b80602a6000868581518110620003815762000381620010e2565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620003be919062001124565b9250508190555080602c6000828254620003d9919062001124565b9250508190555062000433848381518110620003f957620003f9620010e2565b602002602001015160200151828685815181106200041b576200041b620010e2565b602002602001015160000151620007ba60201b60201c565b5080620004408162001140565b91505062000188565b505050565b6000620004658260600151620009a560201b60201c565b6001600160a01b03909116602084015290508015620004b95760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152602b90925260409091206001015416156200052d5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620004b0565b61271082608001511115620005855760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620004b0565b5050565b6101808101516001600160a01b03166200060c57601f54600090620005ae90620009f3565b905081602001518260000151836080015183604051620005ce9062000b13565b620005dd94939291906200115c565b604051809103906000f080158015620005fa573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620006be908262001240565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062000788908262001240565b5061026082015160138201805460ff19166001836003811115620007b057620007b0620010f8565b0217905550505050565b60008211620008185760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620004b0565b6001600160a01b0381166000908152602a6020526040902054821115620008825760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620004b0565b6001600160a01b0381166000908152602a602052604081208054849290620008ac9084906200130c565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b0319918216178255955160018201805491909816961695909517909555905160028401555191015580549192620009388362001140565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b600080620009b262000b21565b60008060ff9050604083875160208901845afa620009cf57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000a1b5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000a4b578062000a328162001140565b915062000a439050600a8362001338565b915062000a1f565b6000816001600160401b0381111562000a685762000a6862000b3f565b6040519080825280601f01601f19166020018201604052801562000a93576020820181803683370190505b5090505b841562000b0b5762000aab6001836200130c565b915062000aba600a866200134f565b62000ac790603062001124565b60f81b81838151811062000adf5762000adf620010e2565b60200101906001600160f81b031916908160001a90535062000b03600a8662001338565b945062000a97565b949350505050565b611dde806200b01383390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000b7a5762000b7a62000b3f565b60405290565b60405160c081016001600160401b038111828210171562000b7a5762000b7a62000b3f565b60405161028081016001600160401b038111828210171562000b7a5762000b7a62000b3f565b604051601f8201601f191681016001600160401b038111828210171562000bf65762000bf662000b3f565b604052919050565b6001600160a01b038116811462000c1457600080fd5b50565b805162000c248162000bfe565b919050565b60005b8381101562000c4657818101518382015260200162000c2c565b50506000910152565b600082601f83011262000c6157600080fd5b81516001600160401b0381111562000c7d5762000c7d62000b3f565b62000c92601f8201601f191660200162000bcb565b81815284602083860101111562000ca857600080fd5b62000b0b82602083016020870162000c29565b80516004811062000c2457600080fd5b600060e0828403121562000cde57600080fd5b60405160e081016001600160401b038111828210171562000d035762000d0362000b3f565b8060405250809150825162000d188162000bfe565b8152602083015162000d2a8162000bfe565b6020820152604083015162000d3f8162000bfe565b6040820152606083015162000d548162000bfe565b606082015262000d676080840162000c17565b608082015262000d7a60a0840162000c17565b60a082015262000d8d60c0840162000c17565b60c08201525092915050565b60006080828403121562000dac57600080fd5b62000db662000b55565b9050815162000dc58162000bfe565b8082525060208201516020820152604082015160408201526060820151606082015292915050565b600081830361024081121562000e0257600080fd5b62000e0c62000b55565b915060c081121562000e1d57600080fd5b5062000e2862000b80565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015162000e648162000bfe565b60a0820152815262000e7a8360c0840162000ccb565b602082015262000e8f836101a0840162000d99565b6040820152610220820151606082015292915050565b60008061026080848603121562000ebb57600080fd5b83516001600160401b038082111562000ed357600080fd5b818601915086601f83011262000ee857600080fd5b815160208282111562000eff5762000eff62000b3f565b8160051b62000f1082820162000bcb565b928352848101820192828101908b85111562000f2b57600080fd5b83870192505b84831015620010c05782518681111562000f4a57600080fd5b8701610280818e03601f1901121562000f6257600080fd5b62000f6c62000ba5565b62000f7986830162000c17565b815262000f896040830162000c17565b8682015262000f9b6060830162000c17565b604082015260808201518881111562000fb357600080fd5b62000fc38f888386010162000c4f565b60608301525060a0820151608082015260c082015160a082015260e082015160c082015261010082015160e0820152610120820151610100820152610140820151610120820152610160820151610140820152610180820151610160820152620010316101a0830162000c17565b6101808201526101c08201516101a08201526101e08201516101c08201526102008201516101e082015261022082015161020082015261024082015161022082015289820151888111156200108557600080fd5b620010958f888386010162000c4f565b61024083015250620010ab610280830162000cbb565b818b0152835250918301919083019062000f31565b809950505050620010d489828a0162000ded565b955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156200113a576200113a6200110e565b92915050565b6000600182016200115557620011556200110e565b5060010190565b600060018060a01b0380871683528086166020840152508360408301526080606083015282518060808401526200119b8160a085016020870162000c29565b601f01601f19169190910160a00195945050505050565b600181811c90821680620011c757607f821691505b602082108103620011e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044957600081815260208120601f850160051c81016020861015620012175750805b601f850160051c820191505b81811015620012385782815560010162001223565b505050505050565b81516001600160401b038111156200125c576200125c62000b3f565b62001274816200126d8454620011b2565b84620011ee565b602080601f831160018114620012ac5760008415620012935750858301515b600019600386901b1c1916600185901b17855562001238565b600085815260208120601f198616915b82811015620012dd57888601518255948401946001909101908401620012bc565b5085821015620012fc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156200113a576200113a6200110e565b634e487b7160e01b600052601260045260246000fd5b6000826200134a576200134a62001322565b500490565b60008262001361576200136162001322565b500690565b619c9d80620013766000396000f3fe6080604052600436106200051f5760003560e01c806389c614b8116200029f578063bb0db4281162000165578063d861b0e811620000db578063e7f43c68116200008f578063f03b959d1162000075578063f03b959d14620010ed578063f5502f221462001112578063f7866ee314620011e957005b8063e7f43c6814620010b5578063e98712b214620010d557005b8063dd62ed3e11620000c1578063dd62ed3e146200103c578063dfb1a4d21462001086578063dfd4b688146200109d57005b8063d861b0e81462000fff578063d886f8a2146200101757005b8063ceaad4551162000133578063cfd19fb91162000119578063cfd19fb91462000f93578063d372c07e1462000fb8578063d5f394881462000fdd57005b8063ceaad4551462000f56578063cf9c57191462000f7b57005b8063bb0db4281462000eea578063c2362dd51462000f01578063c9d97af41462000f19578063cb696f541462000f3157005b8063a5d059ca1162000215578063b2ea9adb11620001c9578063b46e552011620001af578063b46e55201462000e85578063b66b3e791462000eaa578063b7ab4db51462000ed257005b8063b2ea9adb1462000e3b578063b3ecbadd1462000e6057005b8063a9059cbb11620001fb578063a9059cbb1462000dc8578063ab8f6ffe1462000ded578063ae1f5fa01462000e1457005b8063a5d059ca1462000d7c578063a8b2216e1462000da157005b80639ac31074116200026d5780639dc29fac11620002535780639dc29fac1462000d1b5780639efa9e7a1462000d40578063a515366a1462000d5757005b80639ac310741462000ceb5780639c98e4711462000d0357005b806389c614b81462000c355780638bac7dad1462000c4d57806395d89b411462000c7257806396b477cb1462000cba57005b8063427bc5de11620003e55780636fd2c80b116200035b578063819b6463116200030f57806384467fdb11620002f557806384467fdb1462000bd3578063852c48491462000bf8578063872cf0591462000c1d57005b8063819b64631462000b9c578063833b1fce1462000bb357005b8063731b3a031162000341578063731b3a031462000a6c57806377e741c71462000a8357806379502c551462000aa857005b80636fd2c80b1462000a1b57806370a082311462000a3257005b80634efcd15f11620003b35780635f7d394911620003995780635f7d394914620009a0578063676c24ab14620009de5780636b5f444c14620009f657005b80634efcd15f1462000964578063520fdbbc146200097b57005b8063427bc5de14620008e9578063436459691462000900578063496ccd9b14620009175780634bb278f3146200093c57005b80631904bb2e116200049557806330bcb81c116200044957806335be16e0116200042f57806335be16e014620008885780633d0ae21614620008ad57806340c10f1914620008c457005b806330bcb81c1462000730578063313ce567146200086a57005b80632701849b116200047b5780632701849b14620006e957806329070c6d14620007015780632f2c3f2e146200071857005b80631904bb2e146200069057806323b872dd14620006c457005b80631122063311620004ed5780631250a28d11620004d35780631250a28d146200063c5780631604e416146200066157806318160ddd146200067957005b8063112206331462000600578063114eaf55146200061757005b806306fdde031462000529578063095ea7b314620005845780630ae65e7a14620005ba5780630d8e6e2c14620005df57005b366200052757005b005b3480156200053657600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b6040516200057b919062006d32565b60405180910390f35b3480156200059157600080fd5b50620005a9620005a336600462006d64565b62001209565b60405190151581526020016200057b565b348015620005c757600080fd5b5062000527620005d936600462006d93565b62001222565b348015620005ec57600080fd5b50601e545b6040519081526020016200057b565b3480156200060d57600080fd5b50600e54620005f1565b3480156200062457600080fd5b50620005276200063636600462006db3565b62001334565b3480156200064957600080fd5b50620005276200065b36600462006d93565b62001395565b3480156200066e57600080fd5b50620005f160275481565b3480156200068657600080fd5b50602c54620005f1565b3480156200069d57600080fd5b50620006b5620006af36600462006d93565b62001420565b6040516200057b919062006e38565b348015620006d157600080fd5b50620005a9620006e336600462006fb1565b620016fd565b348015620006f657600080fd5b5062000527620017a5565b3480156200070e57600080fd5b50600d54620005f1565b3480156200072557600080fd5b50620005f161271081565b3480156200073d57600080fd5b50620008026200074f36600462006db3565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915250600090815260066020908152604091829020825160e08101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460ff808216151560a084015261010090910416151560c082015290565b6040516200057b9190600060e0820190506001600160a01b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260c0830151151560c083015292915050565b3480156200087757600080fd5b50604051601281526020016200057b565b3480156200089557600080fd5b5062000527620008a736600462006ff7565b62001833565b348015620008ba57600080fd5b50600954620005f1565b348015620008d157600080fd5b5062000527620008e336600462006d64565b62001a29565b348015620008f657600080fd5b50600554620005f1565b3480156200090d57600080fd5b50601c54620005f1565b3480156200092457600080fd5b50620005276200093636600462006d93565b62001a95565b3480156200094957600080fd5b506200095462001c0d565b6040516200057b929190620070b8565b3480156200097157600080fd5b50602454620005f1565b3480156200098857600080fd5b50620005276200099a36600462006d93565b62002171565b348015620009ad57600080fd5b50620009c5620009bf366004620070d5565b62002425565b6040516001600160a01b0390911681526020016200057b565b348015620009eb57600080fd5b506200052762002650565b34801562000a0357600080fd5b506200052762000a1536600462006db3565b62002e07565b34801562000a2857600080fd5b50601054620005f1565b34801562000a3f57600080fd5b50620005f162000a5136600462006d93565b6001600160a01b03166000908152602a602052604090205490565b34801562000a7957600080fd5b50602254620005f1565b34801562000a9057600080fd5b506200052762000aa236600462006db3565b62002fd5565b34801562000ab557600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e5462000b8a939084565b6040516200057b9493929190620070f8565b34801562000ba957600080fd5b50601d54620005f1565b34801562000bc057600080fd5b506014546001600160a01b0316620009c5565b34801562000be057600080fd5b506200052762000bf2366004620072b1565b62003036565b34801562000c0557600080fd5b506200052762000c1736600462006d64565b62003165565b34801562000c2a57600080fd5b506200052762003387565b34801562000c4257600080fd5b50620005f160235481565b34801562000c5a57600080fd5b506200052762000c6c36600462006db3565b620033f2565b34801562000c7f57600080fd5b5060408051808201909152600381527f4e544e000000000000000000000000000000000000000000000000000000000060208201526200056c565b34801562000cc757600080fd5b50620005f162000cd936600462006db3565b60009081526021602052604090205490565b34801562000cf857600080fd5b50620005f1602d5481565b34801562000d1057600080fd5b50620005f160245481565b34801562000d2857600080fd5b506200052762000d3a36600462006d64565b620034a5565b34801562000d4d57600080fd5b50600854620005f1565b34801562000d6457600080fd5b506200052762000d7636600462006d64565b620035f8565b34801562000d8957600080fd5b506200052762000d9b36600462006d64565b620036f6565b34801562000dae57600080fd5b5062000db9620037c4565b6040516200057b91906200735a565b34801562000dd557600080fd5b50620005a962000de736600462006d64565b620038a7565b34801562000dfa57600080fd5b5062000e05620038ff565b6040516200057b9190620073de565b34801562000e2157600080fd5b5062000e2c62003a11565b6040516200057b9190620073f3565b34801562000e4857600080fd5b506200052762000e5a36600462007442565b62003cb7565b34801562000e6d57600080fd5b506200052762000e7f36600462006d93565b62003d2d565b34801562000e9257600080fd5b506200052762000ea436600462006d93565b62003db8565b34801562000eb757600080fd5b5062000ec262004078565b6040516200057b929190620074ad565b34801562000edf57600080fd5b5062000e2c620041af565b34801562000ef757600080fd5b50600454620005f1565b34801562000f0e57600080fd5b50620005f160225481565b34801562000f2657600080fd5b50620005f160205481565b34801562000f3e57600080fd5b506200052762000f5036600462006db3565b62004213565b34801562000f6357600080fd5b506200052762000f7536600462006d93565b620042a5565b34801562000f8857600080fd5b506200052762004330565b34801562000fa057600080fd5b506200052762000fb236600462006d93565b620043b3565b34801562000fc557600080fd5b506200052762000fd736600462006d93565b6200443e565b34801562000fea57600080fd5b50602e54620009c5906001600160a01b031681565b3480156200100c57600080fd5b5062000527620044c9565b3480156200102457600080fd5b50620005276200103636600462006d93565b62004566565b3480156200104957600080fd5b50620005f16200105b366004620074df565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b3480156200109357600080fd5b50601b54620005f1565b348015620010aa57600080fd5b5062000527620045f1565b348015620010c257600080fd5b50601a546001600160a01b0316620009c5565b348015620010e257600080fd5b50620005f160265481565b348015620010fa57600080fd5b50620005276200110c36600462006d93565b620045fb565b3480156200111f57600080fd5b50620011a36200113136600462006db3565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260036020818152604092839020835160808101855281546001600160a01b03908116825260018301541692810192909252600281015493820193909352910154606082015290565b6040516200057b919060006080820190506001600160a01b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b348015620011f657600080fd5b506012546001600160a01b0316620009c5565b60006200121833848462004686565b5060015b92915050565b6001600160a01b038082166000818152602b602052604090206001015490911614620012955760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b038181166000908152602b6020526040902054163314620013265760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e74000000000000000000000000000000000000000060648201526084016200128c565b6200133181620047e2565b50565b601a546001600160a01b03163314620013905760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b601055565b601a546001600160a01b03163314620013f15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6200142a62006b0b565b6001600160a01b038083166000818152602b602052604090206001015490911614620014995760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f742072656769737465726564000000000000000060448201526064016200128c565b6001600160a01b038083166000908152602b60209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620014fc906200751d565b80601f01602080910402602001604051908101604052809291908181526020018280546200152a906200751d565b80156200157b5780601f106200154f576101008083540402835291602001916200157b565b820191906000526020600020905b8154815290600101906020018083116200155d57829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e09092019162001637906200751d565b80601f016020809104026020016040519081016040528092919081815260200182805462001665906200751d565b8015620016b65780601f106200168a57610100808354040283529160200191620016b6565b820191906000526020600020905b8154815290600101906020018083116200169857829003601f168201915b5050509183525050601382015460209091019060ff166003811115620016e057620016e062006dcd565b6003811115620016f457620016f462006dcd565b90525092915050565b60006200170c848484620048b9565b6001600160a01b03841660009081526029602090815260408083203384529091528120546200173d908490620075a1565b90506200174c85338362004686565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516200179291815260200190565b60405180910390a3506001949350505050565b602e546001600160a01b03163314620018275760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6200183162004986565b565b6013546001600160a01b03163314620018b55760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f616374000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6000610120820135602b82620018d2604086016020870162006d93565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620019029190620075a1565b60c0830135602b60006200191d604087016020880162006d93565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200194d9190620075a1565b60a0840135602b600062001968604088016020890162006d93565b6001600160a01b03166001600160a01b0316815260200190815260200160002060050154620019989190620075a1565b620019a49190620075b7565b620019b09190620075b7565b6012546001600160a01b03166000908152602a6020526040812080549293508392909190620019e1908490620075b7565b90915550829050602b6000620019fe604084016020850162006d93565b6001600160a01b03168152602081019190915260400160002062001a238282620077c7565b50505050565b601a546001600160a01b0316331462001a855760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b62001a91828262004ac9565b5050565b601a546001600160a01b0316331462001af15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556015546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b15801562001b7657600080fd5b505af115801562001b8b573d6000803e3d6000fd5b50506017546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b15801562001bf157600080fd5b505af115801562001c06573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b0316331462001c955760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6020805443600081815260219093526040832091909155601b5460225462001cbe9190620075b7565b6013546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b15801562001d2257600080fd5b505af115801562001d37573d6000803e3d6000fd5b50505050801562001f2a57601954602c54602d546023546040517f92eff3cd0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa15801562001dc3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001de99190620079ac565b905080602d54101562001dfb5750602d545b62001e07308262004ac9565b80602d600082825462001e1b9190620075a1565b9091555062001e2d9050478262004b4f565b62001e376200506a565b62001e4162004986565b600062001e4d62003a11565b6014546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f29062001e99908490600401620073f3565b600060405180830381600087803b15801562001eb457600080fd5b505af115801562001ec9573d6000803e3d6000fd5b505043602255505042602355602080546001919060009062001eed908490620075b7565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b601454604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001f8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fb59190620079c6565b905080156200204a57601554604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562002042575060408051601f3d908101601f191682019092526200203f91810190620079c6565b60015b156200204a57505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562002161576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191620020c9906200751d565b80601f0160208091040260200160405190810160405280929190818152602001828054620020f7906200751d565b8015620021485780601f106200211c5761010080835404028352916020019162002148565b820191906000526020600020905b8154815290600101906020018083116200212a57829003601f168201915b5050505050815250508152602001906001019062002073565b5050505090509350935050509091565b601a546001600160a01b03163314620021cd5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b1580156200225257600080fd5b505af115801562002267573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015620022cc57600080fd5b505af1158015620022e1573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156200234657600080fd5b505af11580156200235b573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b158015620023c057600080fd5b505af1158015620023d5573d6000803e3d6000fd5b50506018546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb915060240162001bd6565b600080805b6025548110156200248157602581815481106200244b576200244b620079ea565b906000526020600020906003020160010154826200246a9190620075b7565b915080620024788162007a19565b9150506200242a565b5080600003620024d45760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e670000000060448201526064016200128c565b600083620024e460638762007a36565b620024f09190620075b7565b90506000816040516020016200250891815260200190565b60408051601f1981840301815291905280516020909101209050600062002530848362007a7f565b90506000805b602554811015620025e05760258181548110620025575762002557620079ea565b90600052602060002090600302016001015482620025769190620075b7565b915062002585600183620075a1565b8311620025cb5760258181548110620025a257620025a2620079ea565b60009182526020909120600390910201546001600160a01b031696506200121c95505050505050565b80620025d78162007a19565b91505062002536565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b000000000000000000000000000000000000000000000060648201526084016200128c565b6200265a6200506a565b60006200266662003a11565b90506000815167ffffffffffffffff811115620026875762002687620071ed565b604051908082528060200260200182016040528015620026b1578160200160208202803683370190505b50601d5460255491925060009182911015620027365760405162461bcd60e51b815260206004820152602760248201527f636f6d6d69747465652073697a652065786365656473204d6178436f6d6d697460448201527f74656553697a650000000000000000000000000000000000000000000000000060648201526084016200128c565b60005b60255481101562002c40576000602582815481106200275c576200275c620079ea565b60009182526020909120600390910201546001600160a01b0316905080620027c75760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642061646472657373000000000000000000000000000000000060448201526064016200128c565b80858381518110620027dd57620027dd620079ea565b60200260200101906001600160a01b031690816001600160a01b031681525050600060258381548110620028155762002815620079ea565b9060005260206000209060030201600101549050600081116200287b5760405162461bcd60e51b815260206004820152601460248201527f30207374616b6520696e20636f6d6d697474656500000000000000000000000060448201526064016200128c565b620028878186620075b7565b94508215620028e25780841015620028e25760405162461bcd60e51b815260206004820152601c60248201527f636f6d6d6974746565206d656d62657273206e6f7420736f727465640000000060448201526064016200128c565b6001600160a01b038083166000818152602b602052604090206001810154939650869390921614620029575760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220646f6573206e6f74206578697374000000000000000060448201526064016200128c565b81816005015414620029ac5760405162461bcd60e51b815260206004820152600e60248201527f7374616b65206d69736d6174636800000000000000000000000000000000000060448201526064016200128c565b878481518110620029c157620029c1620079ea565b602090810291909101015160028201546001600160a01b0390811691161462002a2d5760405162461bcd60e51b815260206004820152601760248201527f6f7261636c652061646472657373206d69736d6174636800000000000000000060448201526064016200128c565b6000601382015460ff16600381111562002a4b5762002a4b62006dcd565b1462002a9a5760405162461bcd60e51b815260206004820152601460248201527f76616c696461746f72206e6f742061637469766500000000000000000000000060448201526064016200128c565b6028848154811062002ab05762002ab0620079ea565b9060005260206000200160405160200162002acc919062007b11565b604051602081830303815290604052805190602001208160030160405160200162002af8919062007b11565b604051602081830303815290604052805190602001201462002b5d5760405162461bcd60e51b815260206004820152600e60248201527f656e6f6465206d69736d6174636800000000000000000000000000000000000060448201526064016200128c565b6025848154811062002b735762002b73620079ea565b906000526020600020906003020160020160405160200162002b96919062007b11565b604051602081830303815290604052805190602001208160120160405160200162002bc2919062007b11565b604051602081830303815290604052805190602001201462002c275760405162461bcd60e51b815260206004820152601660248201527f636f6e73656e737573206b6579206d69736d617463680000000000000000000060448201526064016200128c565b505050808062002c379062007a19565b91505062002739565b50602454821462002c945760405162461bcd60e51b815260206004820152601460248201527f746f74616c207374616b65206d69736d6174636800000000000000000000000060448201526064016200128c565b60005b601f5481101562001c06576000805b855181101562002d265785818151811062002cc55762002cc5620079ea565b60200260200101516001600160a01b0316601f848154811062002cec5762002cec620079ea565b6000918252602090912001546001600160a01b03160362002d11576001915062002d26565b8062002d1d8162007a19565b91505062002ca6565b506000602b6000601f858154811062002d435762002d43620079ea565b60009182526020808320909101546001600160a01b0316835282019290925260400181209150821515900362002def57838160050154111562002def5760405162461bcd60e51b815260206004820152602360248201527f68696768207374616b6520666f72206e6f6e2d636f6d6d6974746565206d656d60448201527f626572000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b5050808062002dfe9062007a19565b91505062002c97565b601a546001600160a01b0316331462002e635760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b601b5481101562002f1a578060225462002e7e9190620075b7565b431062002f1a5760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a4016200128c565b601b8190556013546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b15801562002f7f57600080fd5b505af115801562002f94573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f818160405162002fca91815260200190565b60405180910390a150565b601a546001600160a01b03163314620030315760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562003105576200310562006dcd565b9052905062003115818362005159565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200315692339289918b9162007b1f565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620031d45760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064016200128c565b6001600160a01b038281166000908152602b6020526040902054163314620032655760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e74000000000000000000000000000000000000000060648201526084016200128c565b612710811115620032b95760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e20726174650060448201526064016200128c565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200333f908490620075b7565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620033e35760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6002805460ff19166001179055565b601a546001600160a01b031633146200344e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b60008111620034a05760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e277420626520300000000000000060448201526064016200128c565b601d55565b601a546001600160a01b03163314620035015760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6001600160a01b0382166000908152602a60205260409020548111156200356b5760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e63650000000000000000000060448201526064016200128c565b6001600160a01b0382166000908152602a60205260408120805483929062003595908490620075a1565b9250508190555080602c6000828254620035b09190620075a1565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b602052604090206001015490911614620036675760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f742072656769737465726564000000000000000060448201526064016200128c565b6001600160a01b0382166000908152602b602052604081206013015460ff1660038111156200369a576200369a62006dcd565b14620036e95760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f20626520616374697665000000000060448201526064016200128c565b62001a91828233620055fc565b6001600160a01b038083166000818152602b602052604090206001015490911614620037655760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f742072656769737465726564000000000000000060448201526064016200128c565b60008111620037b75760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e742069732030000000000000000000000060448201526064016200128c565b62001a918282336200580f565b60606028805480602002602001604051908101604052809291908181526020016000905b828210156200389e5783829060005260206000200180546200380a906200751d565b80601f016020809104026020016040519081016040528092919081815260200182805462003838906200751d565b8015620038895780601f106200385d5761010080835404028352916020019162003889565b820191906000526020600020905b8154815290600101906020018083116200386b57829003601f168201915b505050505081526020019060010190620037e8565b50505050905090565b6000620038b6338484620048b9565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b828210156200389e576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162003979906200751d565b80601f0160208091040260200160405190810160405280929190818152602001828054620039a7906200751d565b8015620039f85780601f10620039cc57610100808354040283529160200191620039f8565b820191906000526020600020905b815481529060010190602001808311620039da57829003601f168201915b5050505050815250508152602001906001019062003923565b602e546060906001600160a01b0316331462003a965760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b601f5462003ae75760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f7273000000000000000060448201526064016200128c565b62003af162006bdb565b601d546080820152601f8152602b6020820152602560408201526024606082015262003b1d8162005be3565b62003b2b6028600062006bf9565b6025548062003b7d5760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d707479000000000000000000000000000060448201526064016200128c565b60008167ffffffffffffffff81111562003b9b5762003b9b620071ed565b60405190808252806020026020018201604052801562003bc5578160200160208202803683370190505b50905060005b8281101562003caf576000602b60006025848154811062003bf05762003bf0620079ea565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5019062003c589083018262007b69565b50600281015483516001600160a01b039091169084908490811062003c815762003c81620079ea565b6001600160a01b0390921660209283029190910190910152508062003ca68162007a19565b91505062003bcb565b509250505090565b601a546001600160a01b0316331462003d135760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b62003d2060008362005c03565b62001a9160018262005c03565b601a546001600160a01b0316331462003d895760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b60205260409020600101549091161462003e275760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064016200128c565b6001600160a01b038082166000908152602b602052604090208054909116331462003ebb5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e74000000000000000000000000000000000060648201526084016200128c565b6000601382015460ff16600381111562003ed95762003ed962006dcd565b0362003f285760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c726561647920616374697665000000000000000060448201526064016200128c565b6002601382015460ff16600381111562003f465762003f4662006dcd565b14801562003f575750438160100154115b1562003fa65760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c00000000000000000060448201526064016200128c565b6003601382015460ff16600381111562003fc45762003fc462006dcd565b03620040135760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c790000000060448201526064016200128c565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b591620040639190620075b7565b60405190815260200160405180910390a35050565b606080600060018180546200408d906200751d565b80601f0160208091040260200160405190810160405280929190818152602001828054620040bb906200751d565b80156200410c5780601f10620040e0576101008083540402835291602001916200410c565b820191906000526020600020905b815481529060010190602001808311620040ee57829003601f168201915b5050505050915080805462004121906200751d565b80601f01602080910402602001604051908101604052809291908181526020018280546200414f906200751d565b8015620041a05780601f106200417457610100808354040283529160200191620041a0565b820191906000526020600020905b8154815290600101906020018083116200418257829003601f168201915b50505050509050915091509091565b6060601f8054806020026020016040519081016040528092919081815260200182805480156200420957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620041ea575b5050505050905090565b601a546001600160a01b031633146200426f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162002fca565b601a546001600160a01b03163314620043015760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200438c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6200439960008062006c19565b620043a76001600062006c19565b6002805460ff19169055565b601a546001600160a01b031633146200440f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b031633146200449a5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602e546001600160a01b031633146200454b5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b620045556200506a565b6200455f62003a11565b5042602355565b601a546001600160a01b03163314620045c25760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b620018316200506a565b601a546001600160a01b03163314620046575760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064016200128c565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038316620047035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6001600160a01b038216620047815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff16600381111562004817576200481762006dcd565b14620048665760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d75737420626520616374697665000000000000000060448201526064016200128c565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c91620040639190620075b7565b6001600160a01b0383166000908152602a6020526040902054811115620049235760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e63650000000000000000000060448201526064016200128c565b6001600160a01b0383166000908152602a6020526040812080548392906200494d908490620075a1565b90915550506001600160a01b0382166000908152602a6020526040812080548392906200497c908490620075b7565b9091555050505050565b600c54600b5410156200183157600b546000908152600a6020526040902060105460018201544391620049b991620075b7565b1115620049c35750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd9262004a37920190815260200190565b600060405180830381600087803b15801562004a5257600080fd5b505af115801562004a67573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff191681556001808201839055600290910182905582549094509192509062004abc908490620075b7565b9091555062004986915050565b6001600160a01b0382166000908152602a60205260408120805483929062004af3908490620075b7565b9250508190555080602c600082825462004b0e9190620075b7565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf90602001620035ec565b8115801562004b5c575080155b1562004b66575050565b600d54600090670de0b6b3a76400009062004b8390859062007a36565b62004b8f919062007c56565b9050801562004c0d576012546040516000916001600160a01b03169083908381818185875af1925050503d806000811462004be7576040519150601f19603f3d011682016040523d82523d6000602084013e62004bec565b606091505b509091505080151560010362004c0b5762004c088285620075a1565b93505b505b826026600082825462004c219190620075b7565b90915550600090505b60255481101562001a23576000602b60006025848154811062004c515762004c51620079ea565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206024546025805492945090918891908690811062004c9c5762004c9c620079ea565b90600052602060002090600302016001015462004cba919062007a36565b62004cc6919062007c56565b90506000602454866025868154811062004ce45762004ce4620079ea565b90600052602060002090600302016001015462004d02919062007a36565b62004d0e919062007c56565b9050600082118062004d205750600081115b1562005051576002601384015460ff16600381111562004d445762004d4462006dcd565b148062004d6c57506003601384015460ff16600381111562004d6a5762004d6a62006dcd565b145b1562004e4e5760135462004d8c9030906001600160a01b031683620048b9565b601354602580546001600160a01b039092169163a8031a1d9185918890811062004dba5762004dba620079ea565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b15801562004e2b57600080fd5b505af115801562004e40573d6000803e3d6000fd5b505050505050505062005055565b6000836005015483856008015462004e67919062007a36565b62004e73919062007c56565b9050801562004ed85783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d806000811462004ecf576040519150601f19603f3d011682016040523d82523d6000602084013e62004ed4565b606091505b5050505b6000846005015483866008015462004ef1919062007a36565b62004efd919062007c56565b9050801562004f1f57845462004f1f9030906001600160a01b031683620048b9565b600062004f2d8285620075a1565b9050600062004f3d8487620075a1565b9050600081118062004f4f5750600082115b156200500257600c87015462004f719030906001600160a01b031684620048b9565b600c8701546040517fa0ce552d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af115801562004fd8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062004fff919062007c6d565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b80620050618162007a19565b91505062004c2a565b6004545b60055481101562005097576200509181620050898162007a19565b925062005d56565b6200506e565b5060055460045560085460075403620050ac57565b6009545b600854811015620050d957620050d381620050cb8162007a19565b925062005f8c565b620050b0565b50600854600955600754805b600854811015620051535760105460008281526006602052604090206004015443916200511291620075b7565b1162005138576200512381620062b9565b62005130600183620075b7565b91506200513e565b62005153565b806200514a8162007a19565b915050620050e5565b50600755565b60e2815114620051ac5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e67746800000000000000000000000060448201526064016200128c565b60308261024001515114620052045760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e6774680000000060448201526064016200128c565b6200520f8262006404565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060208083019190915284519251919260009262005285920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6040516020818303038152906040529050600082620052a5835162006543565b83604051602001620052ba9392919062007c92565b60408051601f19818403018152828252805160209182012060028085526060850184529094506000939290918301908036833701905050905060008080806200531289826200530c6041600262007a36565b62006698565b90506000620053318a620053296041600262007a36565b606062006698565b905060205b825181101562005402576200534c8382620067cc565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa158015620053a8573d6000803e3d6000fd5b5050604051601f190151905087620053c260418462007c56565b81518110620053d557620053d5620079ea565b6001600160a01b0390921660209283029190910190910152620053fa604182620075b7565b905062005336565b508a602001516001600160a01b031686600081518110620054275762005427620079ea565b60200260200101516001600160a01b031614620054ad5760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f7669646564000000000000000000000000000000000000000000000060648201526084016200128c565b8a604001516001600160a01b031686600181518110620054d157620054d1620079ea565b60200260200101516001600160a01b031614620055575760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f766964656400000000000000000000000000000000000000000060648201526084016200128c565b60016200556f8c6102400151838e6000015162006803565b14620055e45760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e0000000000000000000060648201526084016200128c565b620055ef8b62006872565b5050505050505050505050565b60008211620056745760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f697665000000000000000000000000000000000000000000000000000000000060648201526084016200128c565b6001600160a01b0381166000908152602a6020526040902054821115620056de5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e6365000000000060448201526064016200128c565b6001600160a01b0381166000908152602a60205260408120805484929062005708908490620075a1565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff19918216178255955160018201805491909816961695909517909555905160028401555191015580549192620057a18362007a19565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b602052604090208054909183811691161480620059c957600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa1580156200589f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620058c59190620079ac565b9050848110156200593f5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e636500000000000000000000000000000000000000000060648201526084016200128c565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b158015620059a957600080fd5b505af1158015620059be573d6000803e3d6000fd5b505050505062005a72565b8382600b01548360080154620059e09190620075a1565b101562005a565760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e63650000000000000000000000000000000000000000000000000060648201526084016200128c565b8382600b01600082825462005a6c9190620075b7565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162005b8d8362007a19565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc8387604051620058009291909115158252602082015260400190565b60fa60a06000808285855af462005bfe573d6000803e3d6000fd5b505050565b81546002600180831615610100020382160482518082016020811060208410016002811462005cb2576001811462005cd8578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b8082101562005c9b578151845560018401935060208201915062005c7c565b815191036101000a90819004029091555062005d4d565b60028302826020036101000a846020036101000a60208901510402018501875562005d4d565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b8082101562005d3b578151845560018401935060208201915062005d1c565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff16600381111562005d9c5762005d9c62006dcd565b1462005e3c57600282015482546001600160a01b03166000908152602a60205260408120805490919062005dd2908490620075b7565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429462005e2f946001600160a01b0391821694911692909160ff9091169062007cdb565b60405180910390a1505050565b805482546001600160a01b0390811691161462005f52576000808260080154836005015462005e6c9190620075a1565b90508060000362005e84578360020154915062005eaa565b80846002015484600d015462005e9b919062007a36565b62005ea7919062007c56565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b15801562005f1557600080fd5b505af115801562005f2a573d6000803e3d6000fd5b505050508183600d01600082825462005f449190620075b7565b9091555062005f7292505050565b816002015481600801600082825462005f6c9190620075b7565b90915550505b81600201548160050160008282546200497c9190620075b7565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff16620061b2576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200603a57600080fd5b505af11580156200604f573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b158015620060be57600080fd5b505af1158015620060d3573d6000803e3d6000fd5b50505050600083600801548460050154620060ef9190620075a1565b600d85015490915062006103828462007a36565b6200610f919062007c56565b92508184600d016000828254620061279190620075a1565b909155505060068401546000036200614657600385018390556200616e565b600684015460078501546200615c908562007a36565b62006168919062007c56565b60038601555b82846006016000828254620061849190620075b7565b90915550506003850154600785018054600090620061a4908490620075b7565b909155506200628792505050565b5060028201546008820154811115620061cc575060088101545b8160090154600003620061e657600383018190556200620e565b6009820154600a830154620061fc908362007a36565b62006208919062007c56565b60038401555b80826009016000828254620062249190620075b7565b90915550506003830154600a8301805460009062006244908490620075b7565b9250508190555080826008016000828254620062619190620075a1565b90915550506002830154600b8301805460009062006281908490620075a1565b90915550505b6005808401805460ff1916600117905582018054829190600090620062ae908490620075a1565b909155505050505050565b60008181526006602052604081206003810154909103620062d8575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff16620063745781600701548260060154846003015462006324919062007a36565b62006330919062007c56565b905080826006016000828254620063489190620075a1565b9091555050600383015460078301805460009062006368908490620075a1565b90915550620063d99050565b81600a0154826009015484600301546200638f919062007a36565b6200639b919062007c56565b905080826009016000828254620063b39190620075a1565b90915550506003830154600a83018054600090620063d3908490620075a1565b90915550505b82546001600160a01b03166000908152602a602052604081208054839290620062ae908490620075b7565b600062006415826060015162006abd565b6001600160a01b03909116602084015290508015620064775760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f7200000000000000000000000000000000000000000060448201526064016200128c565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620064eb5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c726561647920726567697374657265640000000060448201526064016200128c565b6127108260800151111562001a915760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e207261746500000000000000000060448201526064016200128c565b6060816000036200658757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115620065b757806200659e8162007a19565b9150620065af9050600a8362007c56565b91506200658b565b60008167ffffffffffffffff811115620065d557620065d5620071ed565b6040519080825280601f01601f19166020018201604052801562006600576020820181803683370190505b5090505b8415620066905762006618600183620075a1565b915062006627600a8662007a7f565b62006634906030620075b7565b60f81b8183815181106200664c576200664c620079ea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062006688600a8662007c56565b945062006604565b949350505050565b606081620066a881601f620075b7565b1015620066f85760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016200128c565b620067048284620075b7565b84511015620067565760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016200128c565b606082158015620067775760405191506000825260208201604052620067c3565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015620067b257805183526020928301920162006798565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b811015620067fc57620067f9601b8262007d09565b90505b9250925092565b60006200680f62006c58565b6000858585604051602001620068289392919062007d25565b6040516020818303038152906040529050600060fb9050600082516020620068519190620075b7565b90506020848285855afa6200686557600080fd5b5050905195945050505050565b6101808101516001600160a01b0316620068f557601f54600090620068979062006543565b905081602001518260000151836080015183604051620068b79062006c76565b620068c6949392919062007d87565b604051809103906000f080158015620068e3573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0395861617909155845184168352602b90955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620069b4908262007dc5565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062006a8b908262007dc5565b5061026082015160138201805460ff1916600183600381111562006ab35762006ab362006dcd565b0217905550505050565b60008062006aca62006c84565b60008060ff9050604083875160208901845afa62006ae757600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562006bd65762006bd662006dcd565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062001331919062006ca2565b50805462006c27906200751d565b6000825580601f1062006c38575050565b601f01602090049060005260206000209081019062001331919062006cc7565b60405180602001604052806001906020820280368337509192915050565b611dde8062007e8a83390190565b60405180604001604052806002906020820280368337509192915050565b8082111562006cc357600062006cb9828262006c19565b5060010162006ca2565b5090565b5b8082111562006cc3576000815560010162006cc8565b60005b8381101562006cfb57818101518382015260200162006ce1565b50506000910152565b6000815180845262006d1e81602086016020860162006cde565b601f01601f19169290920160200192915050565b60208152600062006d47602083018462006d04565b9392505050565b6001600160a01b03811681146200133157600080fd5b6000806040838503121562006d7857600080fd5b823562006d858162006d4e565b946020939093013593505050565b60006020828403121562006da657600080fd5b813562006d478162006d4e565b60006020828403121562006dc657600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811062006e34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020815262006e536020820183516001600160a01b03169052565b6000602083015162006e7060408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015161028080608085015262006ea46102a085018362006d04565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a062006f2c818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f19016102608088019190915290915062006f90848362006d04565b93508087015191505062006fa78286018262006dfc565b5090949350505050565b60008060006060848603121562006fc757600080fd5b833562006fd48162006d4e565b9250602084013562006fe68162006d4e565b929592945050506040919091013590565b6000602082840312156200700a57600080fd5b813567ffffffffffffffff8111156200702257600080fd5b8201610280818503121562006d4757600080fd5b600081518084526020808501808196508360051b8101915082860160005b85811015620070ab578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620070968187018362006d04565b9a87019a955050509084019060010162007054565b5091979650505050505050565b821515815260406020820152600062006690604083018462007036565b60008060408385031215620070e957600080fd5b50508035926020909101359150565b600061024082019050855182526020860151602083015260408601516040830152606086015160608301526080860151608083015260a08601516001600160a01b0380821660a08501528087511660c08501528060208801511660e08501528060408801511661010085015280606088015116610120850152505060808501516200718f6101408401826001600160a01b03169052565b5060a08501516001600160a01b0390811661016084015260c090950151851661018083015283519094166101a082015260208301516101c082015260408301516101e082015260609092015161020083015261022090910152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200722e57600080fd5b813567ffffffffffffffff808211156200724c576200724c620071ed565b604051601f8301601f19908116603f01168101908282118183101715620072775762007277620071ed565b816040528381528660208588010111156200729157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215620072c857600080fd5b843567ffffffffffffffff80821115620072e157600080fd5b620072ef888389016200721c565b955060208701359150620073038262006d4e565b909350604086013590808211156200731a57600080fd5b62007328888389016200721c565b935060608701359150808211156200733f57600080fd5b506200734e878288016200721c565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620073d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452620073be85835162006d04565b9450928501929085019060010162007381565b5092979650505050505050565b60208152600062006d47602083018462007036565b6020808252825182820181905260009190848201906040850190845b81811015620074365783516001600160a01b0316835292840192918401916001016200740f565b50909695505050505050565b600080604083850312156200745657600080fd5b823567ffffffffffffffff808211156200746f57600080fd5b6200747d868387016200721c565b935060208501359150808211156200749457600080fd5b50620074a3858286016200721c565b9150509250929050565b604081526000620074c2604083018562006d04565b8281036020840152620074d6818562006d04565b95945050505050565b60008060408385031215620074f357600080fd5b8235620075008162006d4e565b91506020830135620075128162006d4e565b809150509250929050565b600181811c908216806200753257607f821691505b6020821081036200756c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156200121c576200121c62007572565b808201808211156200121c576200121c62007572565b600081356200121c8162006d4e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126200761257600080fd5b83018035915067ffffffffffffffff8211156200762e57600080fd5b6020019150368190038213156200764457600080fd5b9250929050565b601f82111562005bfe57600081815260208120601f850160051c81016020861015620076745750805b601f850160051c820191505b81811015620076955782815560010162007680565b505050505050565b67ffffffffffffffff831115620076b857620076b8620071ed565b620076d083620076c983546200751d565b836200764b565b6000601f841160018114620077075760008515620076ee5750838201355b600019600387901b1c1916600186901b17835562001c06565b600083815260209020601f19861690835b828110156200773a578685013582556020948501946001909201910162007718565b5086821015620077585760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135600481106200121c57600080fd5b60048210620077b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62007800620077d683620075cd565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b620078406200781260208401620075cd565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b620078806200785260408401620075cd565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6200788f6060830183620075dc565b6200789f8183600386016200769d565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562007936620079086101808401620075cd565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f820155610200820135601082015561022082013560118201556200797d610240830183620075dc565b6200798d8183601286016200769d565b505062001a91620079a261026084016200776a565b601383016200777c565b600060208284031215620079bf57600080fd5b5051919050565b600060208284031215620079d957600080fd5b8151801515811462006d4757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820362007a2f5762007a2f62007572565b5060010190565b80820281158282048414176200121c576200121c62007572565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262007a915762007a9162007a50565b500690565b6000815462007aa5816200751d565b6001828116801562007ac0576001811462007ad65762007b07565b60ff198416875282151583028701945062007b07565b8560005260208060002060005b8581101562007afe5781548a82015290840190820162007ae3565b50505082870194505b5050505092915050565b600062006d47828462007a96565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262007b5460a084018662006d04565b91508084166080840152509695505050505050565b81810362007b75575050565b62007b8182546200751d565b67ffffffffffffffff81111562007b9c5762007b9c620071ed565b62007bb48162007bad84546200751d565b846200764b565b6000601f82116001811462007beb576000831562007bd25750848201545b600019600385901b1c1916600184901b17845562001c06565b600085815260209020601f19841690600086815260209020845b8381101562007c27578286015482556001958601959091019060200162007c05565b508583101562007c465781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262007c685762007c6862007a50565b500490565b6000806040838503121562007c8157600080fd5b505080516020909101519092909150565b6000845162007ca681846020890162006cde565b84519083019062007cbc81836020890162006cde565b845191019062007cd181836020880162006cde565b0195945050505050565b6001600160a01b038581168252841660208201526040810183905260808101620074d6606083018462006dfc565b60ff81811683821601908111156200121c576200121c62007572565b6000845162007d3981846020890162006cde565b84519083019062007d4f81836020890162006cde565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015262007dbb608083018462006d04565b9695505050505050565b815167ffffffffffffffff81111562007de25762007de2620071ed565b62007df38162007bad84546200751d565b602080601f83116001811462007e2b576000841562007e125750858301515b600019600386901b1c1916600185901b17855562007695565b600085815260208120601f198616915b8281101562007e5c5788860151825594840194600190910190840162007e3b565b508582101562007c4657939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033a264697066735822122015ad3b0e1f300993f5ba729219d82d524b52bbcbd2fb595752a04081222c28e664736f6c6343000815003360806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033") var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ { @@ -140,6 +143,11 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "name" : "unbondingPeriod", "type" : "uint256" }, + { + "internalType" : "uint256", + "name" : "initialInflationReserve", + "type" : "uint256" + }, { "internalType" : "address payable", "name" : "treasuryAccount", @@ -181,6 +189,11 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "contract UpgradeManager", "name" : "upgradeManagerContract", "type" : "address" + }, + { + "internalType" : "contract IInflationController", + "name" : "inflationControllerContract", + "type" : "address" } ], "internalType" : "struct Autonity.Contracts", @@ -541,7 +554,13 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ { "indexed" : false, "internalType" : "uint256", - "name" : "amount", + "name" : "atnAmount", + "type" : "uint256" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "ntnAmount", "type" : "uint256" } ], @@ -665,6 +684,19 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [], + "name" : "atnTotalRedistributed", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -784,6 +816,11 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "name" : "unbondingPeriod", "type" : "uint256" }, + { + "internalType" : "uint256", + "name" : "initialInflationReserve", + "type" : "uint256" + }, { "internalType" : "address payable", "name" : "treasuryAccount", @@ -825,6 +862,11 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "contract UpgradeManager", "name" : "upgradeManagerContract", "type" : "address" + }, + { + "internalType" : "contract IInflationController", + "name" : "inflationControllerContract", + "type" : "address" } ], "internalType" : "struct Autonity.Contracts", @@ -1517,6 +1559,19 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "inflationReserve", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [], "name" : "lastEpochBlock", @@ -1530,6 +1585,19 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "lastEpochTime", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -1661,6 +1729,19 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [ + { + "internalType" : "contract IInflationController", + "name" : "_address", + "type" : "address" + } + ], + "name" : "setInflationControllerContract", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, { "inputs" : [ { @@ -1798,19 +1879,6 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, - { - "inputs" : [], - "name" : "totalRedistributed", - "outputs" : [ - { - "internalType" : "uint256", - "name" : "", - "type" : "uint256" - } - ], - "stateMutability" : "view", - "type" : "function" - }, { "inputs" : [], "name" : "totalSupply", @@ -1852,17 +1920,17 @@ var AutonityTestAbi, _ = abi.JSON(strings.NewReader(`[ "inputs" : [ { "internalType" : "address", - "name" : "sender", + "name" : "_sender", "type" : "address" }, { "internalType" : "address", - "name" : "recipient", + "name" : "_recipient", "type" : "address" }, { "internalType" : "uint256", - "name" : "amount", + "name" : "_amount", "type" : "uint256" } ], diff --git a/params/generated/AutonityUpgradeTest.go b/params/generated/AutonityUpgradeTest.go index 5a7c21fe9c..501f340b88 100644 --- a/params/generated/AutonityUpgradeTest.go +++ b/params/generated/AutonityUpgradeTest.go @@ -1,10 +1,13 @@ package generated -import "strings" -import "github.com/autonity/autonity/accounts/abi" -import "github.com/autonity/autonity/common" +import ( + "strings" -var AutonityUpgradeTestBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d4e565b815260200190600190039081620000335790505b506040805161012081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e08601526011546001600160a01b039081166101008701529385528551908101865260125484168152601354841660208281019190915260145485168288015260155485166060808401919091526016548616838601526017548616938301939093528086019190915285519283018652601854909316825260195492820192909252601a5481850152601b548183015292820192909252601c54918101829052906000036200014c57602a80546001600160a01b031916331790556200014c828262000169565b5050601c546001036200016357620001636200051f565b6200115e565b80518051600d55602080820151600e55604080830151600f55606080840151601055608093840151601180546001600160a01b03199081166001600160a01b03938416179091558487015180516012805484169185169190911790558086015160138054841691851691909117905580850151601480548416918516919091179055808401516015805484169185169190911790559586015160168054831691841691909117905560a0909501516017805487169183169190911790558286015180516018805490971692169190911790945591830151601955820151601a5590810151601b55810151601c5560005b82518110156200051a5760008382815181106200027a576200027a62000ebd565b602002602001015160a00151905060008483815181106200029f576200029f62000ebd565b60200260200101516101a00181815250506000848381518110620002c757620002c762000ebd565b602002602001015161018001906001600160a01b031690816001600160a01b031681525050600084838151811062000303576200030362000ebd565b602002602001015160a001818152505060008483815181106200032a576200032a62000ebd565b60209081029190910101516101c00152600f54845185908490811062000354576200035462000ebd565b6020026020010151608001818152505060008483815181106200037b576200037b62000ebd565b6020026020010151610260019060038111156200039c576200039c62000ed3565b90816003811115620003b257620003b262000ed3565b815250506000848381518110620003cd57620003cd62000ebd565b60200260200101516101600181815250506200040b848381518110620003f757620003f762000ebd565b60200260200101516200068d60201b60201c565b6200043884838151811062000424576200042462000ebd565b6020026020010151620007c460201b60201c565b806027600086858151811062000452576200045262000ebd565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200048f919062000eff565b925050819055508060296000828254620004aa919062000eff565b9250508190555062000504848381518110620004ca57620004ca62000ebd565b60200260200101516020015182868581518110620004ec57620004ec62000ebd565b602002602001015160000151620009f560201b60201c565b5080620005118162000f1b565b91505062000259565b505050565b602a546001600160a01b031633146200058b5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b600260286000601d600181548110620005a857620005a862000ebd565b60009182526020808320909101546001600160a01b0316835282019290925260400181206005018054909190620005e190849062000f4d565b92505081905550600260286000601d60018154811062000605576200060562000ebd565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200063e90849062000f4d565b90915550506002601c556018546001600160a01b031660009081526027602052604081206103e8905562000673908062000e1e565b620006816001600062000e1e565b6002805460ff19169055565b6000620006a4826060015162000be060201b60201c565b6001600160a01b03909116602084015290508015620006f45760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640162000582565b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620007685760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000582565b61271082608001511115620007c05760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000582565b5050565b6101808101516001600160a01b03166200084757601d54600090620007e99062000c2e565b905081602001518260000151836080015183604051620008099062000e60565b62000818949392919062000f64565b604051809103906000f08015801562000835573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602890955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190620008f9908262001065565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009c3908262001065565b5061026082015160138201805460ff19166001836003811115620009eb57620009eb62000ed3565b0217905550505050565b6000821162000a535760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840162000582565b6001600160a01b03811660009081526027602052604090205482111562000abd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000582565b6001600160a01b0381166000908152602760205260408120805484929062000ae790849062001131565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000b738362000f1b565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000bed62000e6e565b60008060ff9050604083875160208901845afa62000c0a57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c565750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000c86578062000c6d8162000f1b565b915062000c7e9050600a8362000f4d565b915062000c5a565b6000816001600160401b0381111562000ca35762000ca362000ea7565b6040519080825280601f01601f19166020018201604052801562000cce576020820181803683370190505b5090505b841562000d465762000ce660018362001131565b915062000cf5600a8662001147565b62000d0290603062000eff565b60f81b81838151811062000d1a5762000d1a62000ebd565b60200101906001600160f81b031916908160001a90535062000d3e600a8662000f4d565b945062000cd2565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e195762000e1962000ed3565b905290565b50805462000e2c9062000fd7565b6000825580601f1062000e3d575050565b601f01602090049060005260206000209081019062000e5d919062000e8c565b50565b611a208062009d5083390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000ea3576000815560010162000e8d565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f155762000f1562000ee9565b92915050565b60006001820162000f305762000f3062000ee9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f5f5762000f5f62000f37565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000fb35785810182015185820160a00152810162000f95565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c9082168062000fec57607f821691505b6020821081036200100d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200051a57600081815260208120601f850160051c810160208610156200103c5750805b601f850160051c820191505b818110156200105d5782815560010162001048565b505050505050565b81516001600160401b0381111562001081576200108162000ea7565b620010998162001092845462000fd7565b8462001013565b602080601f831160018114620010d15760008415620010b85750858301515b600019600386901b1c1916600185901b1785556200105d565b600085815260208120601f198616915b828110156200110257888601518255948401946001909101908401620010e1565b5085821015620011215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f155762000f1562000ee9565b60008262001159576200115962000f37565b500690565b618be2806200116e6000396000f3fe608060405260043610620003e75760003560e01c8063872cf0591162000203578063b66b3e791162000117578063d372c07e11620000a7578063dd62ed3e1162000075578063dd62ed3e1462000d1e578063dfb1a4d21462000d68578063e7f43c681462000d7f578063f7866ee31462000d9f57005b8063d372c07e1462000c9a578063d5f394881462000cbf578063d861b0e81462000ce1578063d886f8a21462000cf957005b8063cb696f5411620000e5578063cb696f541462000c13578063ceaad4551462000c38578063cf9c57191462000c5d578063cfd19fb91462000c7557005b8063b66b3e791462000ba3578063b7ab4db51462000bcb578063c2362dd51462000be3578063c9d97af41462000bfb57005b8063a5d059ca1162000193578063ae1f5fa01162000161578063ae1f5fa01462000b0d578063b2ea9adb1462000b34578063b3ecbadd1462000b59578063b46e55201462000b7e57005b8063a5d059ca1462000a75578063a8b2216e1462000a9a578063a9059cbb1462000ac1578063ab8f6ffe1462000ae657005b80639bb851c011620001d15780639bb851c014620009fb5780639c98e4711462000a135780639dc29fac1462000a2b578063a515366a1462000a5057005b8063872cf05914620009455780638bac7dad146200095d57806395d89b41146200098257806396b477cb14620009ca57005b80634364596911620002fb578063731b3a03116200028b578063819b64631162000259578063819b646314620008c4578063833b1fce14620008db57806384467fdb14620008fb578063852c4849146200092057005b8063731b3a03146200078557806377e741c7146200079c578063784304b514620007c157806379502c5514620007e657005b80635f7d394911620002c95780635f7d394914620006d15780636b5f444c146200070f5780636fd2c80b146200073457806370a08231146200074b57005b8063436459691462000648578063496ccd9b146200065f5780634bb278f31462000684578063520fdbbc14620006ac57005b806318160ddd11620003775780632f2c3f2e11620003455780632f2c3f2e14620005c8578063313ce56714620005e057806335be16e014620005fe57806340c10f19146200062357005b806318160ddd14620005415780631904bb2e146200055857806323b872dd146200058c57806329070c6d14620005b157005b80631122063311620003b55780631122063314620004c8578063114eaf5514620004df5780631250a28d14620005045780631604e416146200052957005b806306fdde0314620003f1578063095ea7b3146200044c5780630ae65e7a14620004825780630d8e6e2c14620004a757005b36620003ef57005b005b348015620003fe57600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b604051620004439190620060be565b60405180910390f35b3480156200045957600080fd5b50620004716200046b366004620060f0565b62000dbf565b604051901515815260200162000443565b3480156200048f57600080fd5b50620003ef620004a13660046200611f565b62000dd8565b348015620004b457600080fd5b50601c545b60405190815260200162000443565b348015620004d557600080fd5b50600e54620004b9565b348015620004ec57600080fd5b50620003ef620004fe3660046200613f565b62000eea565b3480156200051157600080fd5b50620003ef620005233660046200611f565b62000f4b565b3480156200053657600080fd5b50620004b960245481565b3480156200054e57600080fd5b50602954620004b9565b3480156200056557600080fd5b506200057d620005773660046200611f565b62000fd6565b604051620004439190620061c4565b3480156200059957600080fd5b5062000471620005ab3660046200633d565b620012b3565b348015620005be57600080fd5b50600d54620004b9565b348015620005d557600080fd5b50620004b961271081565b348015620005ed57600080fd5b506040516012815260200162000443565b3480156200060b57600080fd5b50620003ef6200061d36600462006383565b6200130d565b3480156200063057600080fd5b50620003ef62000642366004620060f0565b62001503565b3480156200065557600080fd5b50601a54620004b9565b3480156200066c57600080fd5b50620003ef6200067e3660046200611f565b620015ec565b3480156200069157600080fd5b506200069c62001764565b6040516200044392919062006444565b348015620006b957600080fd5b50620003ef620006cb3660046200611f565b62001be4565b348015620006de57600080fd5b50620006f6620006f036600462006461565b62001e98565b6040516001600160a01b03909116815260200162000443565b3480156200071c57600080fd5b50620003ef6200072e3660046200613f565b620020c3565b3480156200074157600080fd5b50601054620004b9565b3480156200075857600080fd5b50620004b96200076a3660046200611f565b6001600160a01b031660009081526027602052604090205490565b3480156200079257600080fd5b50602054620004b9565b348015620007a957600080fd5b50620003ef620007bb3660046200613f565b62002291565b348015620007ce57600080fd5b50620003ef620007e036600462006548565b620022f2565b348015620007f357600080fd5b506040805160a08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546001600160a01b03908116608080870191909152865160c0810188526012548316815260135483168186015260145483168189015260155483168185015260165483168183015260175483169581019590955286519081018752601854909116815260195492810192909252601a5494820194909452601b5493810193909352601c54620008b2939084565b6040516200044394939291906200659e565b348015620008d157600080fd5b50601b54620004b9565b348015620008e857600080fd5b506013546001600160a01b0316620006f6565b3480156200090857600080fd5b50620003ef6200091a36600462006676565b62002564565b3480156200092d57600080fd5b50620003ef6200093f366004620060f0565b62002693565b3480156200095257600080fd5b50620003ef620028b5565b3480156200096a57600080fd5b50620003ef6200097c3660046200613f565b62002920565b3480156200098f57600080fd5b5060408051808201909152600381527f4e544e0000000000000000000000000000000000000000000000000000000000602082015262000434565b348015620009d757600080fd5b50620004b9620009e93660046200613f565b6000908152601f602052604090205490565b34801562000a0857600080fd5b50620004b960235481565b34801562000a2057600080fd5b50620004b960215481565b34801562000a3857600080fd5b50620003ef62000a4a366004620060f0565b620029d3565b34801562000a5d57600080fd5b50620003ef62000a6f366004620060f0565b62002b1f565b34801562000a8257600080fd5b50620003ef62000a94366004620060f0565b62002c21565b34801562000aa757600080fd5b5062000ab262002cef565b6040516200044391906200671f565b34801562000ace57600080fd5b506200047162000ae0366004620060f0565b62002dd2565b34801562000af357600080fd5b5062000afe62002de1565b604051620004439190620067a3565b34801562000b1a57600080fd5b5062000b2562002ef3565b604051620004439190620067b8565b34801562000b4157600080fd5b50620003ef62000b5336600462006807565b62003199565b34801562000b6657600080fd5b50620003ef62000b783660046200611f565b6200320f565b34801562000b8b57600080fd5b50620003ef62000b9d3660046200611f565b6200329a565b34801562000bb057600080fd5b5062000bbb6200355a565b6040516200044392919062006868565b34801562000bd857600080fd5b5062000b2562003691565b34801562000bf057600080fd5b50620004b960205481565b34801562000c0857600080fd5b50620004b9601e5481565b34801562000c2057600080fd5b50620003ef62000c323660046200613f565b620036f5565b34801562000c4557600080fd5b50620003ef62000c573660046200611f565b62003787565b34801562000c6a57600080fd5b50620003ef62003812565b34801562000c8257600080fd5b50620003ef62000c943660046200611f565b62003895565b34801562000ca757600080fd5b50620003ef62000cb93660046200611f565b62003920565b34801562000ccc57600080fd5b50602a54620006f6906001600160a01b031681565b34801562000cee57600080fd5b50620003ef620039ab565b34801562000d0657600080fd5b50620003ef62000d183660046200611f565b62003a41565b34801562000d2b57600080fd5b50620004b962000d3d3660046200689a565b6001600160a01b03918216600090815260266020908152604080832093909416825291909152205490565b34801562000d7557600080fd5b50601954620004b9565b34801562000d8c57600080fd5b506018546001600160a01b0316620006f6565b34801562000dac57600080fd5b506011546001600160a01b0316620006f6565b600062000dce33848462003acc565b5060015b92915050565b6001600160a01b038082166000818152602860205260409020600101549091161462000e4b5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b0381811660009081526028602052604090205416331462000edc5760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000e42565b62000ee78162003c29565b50565b6018546001600160a01b0316331462000f465760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b601055565b6018546001600160a01b0316331462000fa75760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b62000fe062005e97565b6001600160a01b03808316600081815260286020526040902060010154909116146200104f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6001600160a01b038083166000908152602860209081526040918290208251610280810184528154851681526001820154851692810192909252600281015490931691810191909152600382018054919291606084019190620010b290620068d8565b80601f0160208091040260200160405190810160405280929190818152602001828054620010e090620068d8565b8015620011315780601f10620011055761010080835404028352916020019162001131565b820191906000526020600020905b8154815290600101906020018083116200111357829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620011ed90620068d8565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b90620068d8565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001296576200129662006159565b6003811115620012aa57620012aa62006159565b90525092915050565b6000620012c284848462003d00565b6001600160a01b0384166000908152602660209081526040808320338452909152812054620012f39084906200695c565b90506200130285338362003acc565b506001949350505050565b6012546001600160a01b031633146200138f5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6000610120820135602882620013ac60408601602087016200611f565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620013dc91906200695c565b60c083013560286000620013f760408701602088016200611f565b6001600160a01b03166001600160a01b03168152602001908152602001600020600601546200142791906200695c565b60a0840135602860006200144260408801602089016200611f565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200147291906200695c565b6200147e919062006972565b6200148a919062006972565b6011546001600160a01b0316600090815260276020526040812080549293508392909190620014bb90849062006972565b9091555082905060286000620014d860408401602085016200611f565b6001600160a01b031681526020810191909152604001600020620014fd828262006b7a565b50505050565b6018546001600160a01b031633146200155f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6001600160a01b038216600090815260276020526040812080548392906200158990849062006972565b925050819055508060296000828254620015a4919062006972565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020015b60405180910390a25050565b6018546001600160a01b03163314620016485760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b158015620016cd57600080fd5b505af1158015620016e2573d6000803e3d6000fd5b50506016546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200174857600080fd5b505af11580156200175d573d6000803e3d6000fd5b5050505050565b602a546000906060906001600160a01b03163314620017ec5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b601e54436000818152601f6020908152604082209390935560195492549092620018169162006972565b6012546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b1580156200187a57600080fd5b505af11580156200188f573d6000803e3d6000fd5b5050505080156200199d57620018a462003e39565b620018ae6200423b565b620018b86200432a565b6000620018c462002ef3565b6013546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f29062001910908490600401620067b8565b600060405180830381600087803b1580156200192b57600080fd5b505af115801562001940573d6000803e3d6000fd5b50505050436020819055506001601e600082825462001960919062006972565b9091555050601e546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a1505b601354604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001a02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a28919062006d5f565b9050801562001abd57601454604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562001ab5575060408051601f3d908101601f1916820190925262001ab29181019062006d5f565b60015b1562001abd57505b600254602280546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001bd4576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001b3c90620068d8565b80601f016020809104026020016040519081016040528092919081815260200182805462001b6a90620068d8565b801562001bbb5780601f1062001b8f5761010080835404028352916020019162001bbb565b820191906000526020600020905b81548152906001019060200180831162001b9d57829003601f168201915b5050505050815250508152602001906001019062001ae6565b5050505090509350935050509091565b6018546001600160a01b0316331462001c405760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556013546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001cc557600080fd5b505af115801562001cda573d6000803e3d6000fd5b50506014546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001d3f57600080fd5b505af115801562001d54573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001db957600080fd5b505af115801562001dce573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001e3357600080fd5b505af115801562001e48573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb91506024016200172d565b600080805b60225481101562001ef4576022818154811062001ebe5762001ebe62006d83565b9060005260206000209060030201600101548262001edd919062006972565b91508062001eeb8162006db2565b91505062001e9d565b508060000362001f475760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000e42565b60008362001f5760638762006dcf565b62001f63919062006972565b905060008160405160200162001f7b91815260200190565b60408051601f1981840301815291905280516020909101209050600062001fa3848362006e18565b90506000805b60225481101562002053576022818154811062001fca5762001fca62006d83565b9060005260206000209060030201600101548262001fe9919062006972565b915062001ff86001836200695c565b83116200203e576022818154811062002015576200201562006d83565b60009182526020909120600390910201546001600160a01b0316965062000dd295505050505050565b806200204a8162006db2565b91505062001fa9565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b0000000000000000000000000000000000000000000000606482015260840162000e42565b6018546001600160a01b031633146200211f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b601954811015620021d657806020546200213a919062006972565b4310620021d65760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000e42565b60198190556012546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200223b57600080fd5b505af115801562002250573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f81816040516200228691815260200190565b60405180910390a150565b6018546001600160a01b03163314620022ed5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b600d55565b6001600160a01b038083166000818152602860205260409020600181015490921614620023625760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b80546001600160a01b03163314620023e35760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000e42565b620023ee836200446f565b15620024635760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d69747460448201527f6565000000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6000806200247184620044e0565b925090508115620024c55760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000e42565b60018301546001600160a01b038281169116146200254c5760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e27742062652060448201527f7570646174656400000000000000000000000000000000000000000000000000606482015260840162000e42565b600383016200255c858262006e2f565b505050505050565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020014381526020016000815260200160008152602001600081526020018481526020016000600381111562002633576200263362006159565b905290506200264381836200452e565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200268492339289918b9162006efc565b60405180910390a15050505050565b6001600160a01b0380831660008181526028602052604090206001015490911614620027025760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000e42565b6001600160a01b03828116600090815260286020526040902054163314620027935760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000e42565b612710811115620027e75760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000e42565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200286d90849062006972565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b6018546001600160a01b03163314620029115760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6002805460ff19166001179055565b6018546001600160a01b031633146200297c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b60008111620029ce5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000e42565b601b55565b6018546001600160a01b0316331462002a2f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6001600160a01b03821660009081526027602052604090205481111562002a995760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000e42565b6001600160a01b0382166000908152602760205260408120805483929062002ac39084906200695c565b92505081905550806029600082825462002ade91906200695c565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a390602001620015e0565b6001600160a01b038083166000818152602860205260409020600101549091161462002b8e5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6001600160a01b03821660009081526028602052604081206013015460ff16600381111562002bc15762002bc162006159565b1462002c105760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000e42565b62002c1d828233620049d1565b5050565b6001600160a01b038083166000818152602860205260409020600101549091161462002c905760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000e42565b6000811162002ce25760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640162000e42565b62002c1d82823362004be4565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002dc957838290600052602060002001805462002d3590620068d8565b80601f016020809104026020016040519081016040528092919081815260200182805462002d6390620068d8565b801562002db45780601f1062002d885761010080835404028352916020019162002db4565b820191906000526020600020905b81548152906001019060200180831162002d9657829003601f168201915b50505050508152602001906001019062002d13565b50505050905090565b600062000dce33848462003d00565b60606022805480602002602001604051908101604052809291908181526020016000905b8282101562002dc9576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162002e5b90620068d8565b80601f016020809104026020016040519081016040528092919081815260200182805462002e8990620068d8565b801562002eda5780601f1062002eae5761010080835404028352916020019162002eda565b820191906000526020600020905b81548152906001019060200180831162002ebc57829003601f168201915b5050505050815250508152602001906001019062002e05565b602a546060906001600160a01b0316331462002f785760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b601d5462002fc95760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000e42565b62002fd362005f67565b601b546080820152601d815260286020820152602260408201526021606082015262002fff8162004fb8565b6200300d6025600062005f85565b602254806200305f5760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640162000e42565b60008167ffffffffffffffff8111156200307d576200307d62006484565b604051908082528060200260200182016040528015620030a7578160200160208202803683370190505b50905060005b82811015620031915760006028600060228481548110620030d257620030d262006d83565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060258054600181018255925292507f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01906200313a9083018262006f46565b50600281015483516001600160a01b039091169084908490811062003163576200316362006d83565b6001600160a01b03909216602092830291909101909101525080620031888162006db2565b915050620030ad565b509250505090565b6018546001600160a01b03163314620031f55760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6200320260008362004fd3565b62002c1d60018262004fd3565b6018546001600160a01b031633146200326b5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b0380821660008181526028602052604090206001015490911614620033095760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000e42565b6001600160a01b038082166000908152602860205260409020805490911633146200339d5760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000e42565b6000601382015460ff166003811115620033bb57620033bb62006159565b036200340a5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000e42565b6002601382015460ff16600381111562003428576200342862006159565b148015620034395750438160100154115b15620034885760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000e42565b6003601382015460ff166003811115620034a657620034a662006159565b03620034f55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000e42565b60138101805460ff1916905580546019546020546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b59162003545919062006972565b60405190815260200160405180910390a35050565b606080600060018180546200356f90620068d8565b80601f01602080910402602001604051908101604052809291908181526020018280546200359d90620068d8565b8015620035ee5780601f10620035c257610100808354040283529160200191620035ee565b820191906000526020600020905b815481529060010190602001808311620035d057829003601f168201915b505050505091508080546200360390620068d8565b80601f01602080910402602001604051908101604052809291908181526020018280546200363190620068d8565b8015620036825780601f10620036565761010080835404028352916020019162003682565b820191906000526020600020905b8154815290600101906020018083116200366457829003601f168201915b50505050509050915091509091565b6060601d805480602002602001604051908101604052809291908181526020018280548015620036eb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620036cc575b5050505050905090565b6018546001600160a01b03163314620037515760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd3891289060200162002286565b6018546001600160a01b03163314620037e35760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b031633146200386e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6200387b60008062005fa5565b620038896001600062005fa5565b6002805460ff19169055565b6018546001600160a01b03163314620038f15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6018546001600160a01b031633146200397c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602a546001600160a01b0316331462003a2d5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b62003a376200423b565b62000ee762002ef3565b6018546001600160a01b0316331462003a9d5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000e42565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831662003b495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b03821662003bc75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b0383811660008181526026602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260286020526040812090601382015460ff16600381111562003c5e5762003c5e62006159565b1462003cad5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000e42565b60138101805460ff1916600117905580546019546020546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c9162003545919062006972565b6001600160a01b03831660009081526027602052604090205481111562003d6a5760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000e42565b6001600160a01b0383166000908152602760205260408120805483929062003d949084906200695c565b92505081905550806029600082825462003daf919062006972565b9091555062003dc2905081600262006dcf565b6001600160a01b0383166000908152602760205260408120805490919062003dec90849062006972565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162003c1c91815260200190565b4760000362003e4457565b600d544790600090670de0b6b3a76400009062003e6390849062006dcf565b62003e6f919062007028565b9050801562003eed576011546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003ec7576040519150601f19603f3d011682016040523d82523d6000602084013e62003ecc565b606091505b509091505080151560010362003eeb5762003ee882846200695c565b92505b505b816023600082825462003f01919062006972565b90915550600090505b60225481101562004236576000602860006022848154811062003f315762003f3162006d83565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206021546022805492945090918791908690811062003f7c5762003f7c62006d83565b90600052602060002090600302016001015462003f9a919062006dcf565b62003fa6919062007028565b905080156200421e576002601383015460ff16600381111562003fcd5762003fcd62006159565b148062003ff557506003601383015460ff16600381111562003ff35762003ff362006159565b145b15620040b557601254602280546001600160a01b0390921691631de9d9b69184918790811062004029576200402962006d83565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b0390911660048201526024016000604051808303818588803b1580156200409357600080fd5b505af1158015620040a8573d6000803e3d6000fd5b5050505050505062004221565b60008260050154828460080154620040ce919062006dcf565b620040da919062007028565b90506000620040ea82846200695c565b905081156200414f5783546040516001600160a01b03909116906108fc9084906000818181858888f193505050503d806000811462004146576040519150601f19603f3d011682016040523d82523d6000602084013e6200414b565b606091505b5050505b8015620041d75783600c0160009054906101000a90046001600160a01b03166001600160a01b031663fb489a7b826040518263ffffffff1660e01b815260040160206040518083038185885af1158015620041ae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620041d591906200703f565b505b60018401546040518481526001600160a01b03909116907fb3b7a071186534c03b40695710096f289fd4ed6c1a374aff0bb648955e4fe5639060200160405180910390a250505b50505b806200422d8162006db2565b91505062003f0a565b505050565b6004545b600554811015620042685762004262816200425a8162006db2565b925062005126565b6200423f565b50600554600455600854600754036200427d57565b6009545b600854811015620042aa57620042a4816200429c8162006db2565b925062005366565b62004281565b50600854600955600754805b60085481101562004324576010546000828152600660205260409020600401544391620042e39162006972565b116200430957620042f48162005693565b6200430160018362006972565b91506200430f565b62004324565b806200431b8162006db2565b915050620042b6565b50600755565b600c54600b5410156200446d57600b546000908152600a60205260409020601054600182015443916200435d9162006972565b1115620043675750565b600281015481546001600160a01b03908116600090815260286020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd92620043db920190815260200190565b600060405180830381600087803b158015620043f657600080fd5b505af11580156200440b573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600180820183905560029091018290558254909450919250906200446090849062006972565b909155506200432a915050565b565b6000805b602254811015620044d7576022818154811062004494576200449462006d83565b60009182526020909120600390910201546001600160a01b0390811690841603620044c25750600192915050565b80620044ce8162006db2565b91505062004473565b50600092915050565b600080620044ed62005fe4565b60008060ff9050604083875160208901845afa6200450a57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60e2815114620045815760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640162000e42565b60308261024001515114620045d95760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000e42565b620045e482620057de565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a0000000000006020808301919091528451925191926000926200465a920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60405160208183030381529060405290506000826200467a83516200591d565b836040516020016200468f9392919062007059565b60408051601f1981840301815282825280516020918201206002808552606085018452909450600093929091830190803683370190505090506000808080620046e78982620046e16041600262006dcf565b62005a72565b90506000620047068a620046fe6041600262006dcf565b606062005a72565b905060205b8251811015620047d75762004721838262005ba6565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa1580156200477d573d6000803e3d6000fd5b5050604051601f1901519050876200479760418462007028565b81518110620047aa57620047aa62006d83565b6001600160a01b0390921660209283029190910190910152620047cf60418262006972565b90506200470b565b508a602001516001600160a01b031686600081518110620047fc57620047fc62006d83565b60200260200101516001600160a01b031614620048825760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840162000e42565b8a604001516001600160a01b031686600181518110620048a657620048a662006d83565b60200260200101516001600160a01b0316146200492c5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840162000e42565b6001620049448c6102400151838e6000015162005bdd565b14620049b95760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840162000e42565b620049c48b62005c4c565b5050505050505050505050565b6000821162004a495760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840162000e42565b6001600160a01b03811660009081526027602052604090205482111562004ab35760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000e42565b6001600160a01b0381166000908152602760205260408120805484929062004add9084906200695c565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff1991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004b768362006db2565b90915550506001600160a01b03848116600081815260286020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602860205260409020805490918381169116148062004d9e57600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004c74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004c9a91906200703f565b90508481101562004d145760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840162000e42565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b15801562004d7e57600080fd5b505af115801562004d93573d6000803e3d6000fd5b505050505062004e47565b8382600b0154836008015462004db591906200695c565b101562004e2b5760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840162000e42565b8382600b01600082825462004e41919062006972565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162004f628362006db2565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc838760405162004bd59291909115158252602082015260400190565b60fa60a06000808285855af462004236573d6000803e3d6000fd5b815460026001808316156101000203821604825180820160208110602084100160028114620050825760018114620050a8578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b808210156200506b57815184556001840193506020820191506200504c565b815191036101000a9081900402909155506200511d565b60028302826020036101000a846020036101000a6020890151040201850187556200511d565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156200510b5781518455600184019350602082019150620050ec565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602890925282209091601382015460ff1660038111156200516c576200516c62006159565b146200520c57600282015482546001600160a01b031660009081526027602052604081208054909190620051a290849062006972565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f87834294620051ff946001600160a01b0391821694911692909160ff90911690620070a2565b60405180910390a1505050565b805482546001600160a01b039081169116146200532257600080826008015483600501546200523c91906200695c565b9050806000036200525457836002015491506200527a565b80846002015484600d01546200526b919062006dcf565b62005277919062007028565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b158015620052e557600080fd5b505af1158015620052fa573d6000803e3d6000fd5b505050508183600d01600082825462005314919062006972565b909155506200534292505050565b81600201548160080160008282546200533c919062006972565b90915550505b81600201548160050160008282546200535c919062006972565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b0316845260289092528220600582015491929091610100900460ff166200558c576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200541457600080fd5b505af115801562005429573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200549857600080fd5b505af1158015620054ad573d6000803e3d6000fd5b50505050600083600801548460050154620054c991906200695c565b600d850154909150620054dd828462006dcf565b620054e9919062007028565b92508184600d0160008282546200550191906200695c565b9091555050600684015460000362005520576003850183905562005548565b6006840154600785015462005536908562006dcf565b62005542919062007028565b60038601555b828460060160008282546200555e919062006972565b909155505060038501546007850180546000906200557e90849062006972565b909155506200566192505050565b5060028201546008820154811115620055a6575060088101545b8160090154600003620055c05760038301819055620055e8565b6009820154600a830154620055d6908362006dcf565b620055e2919062007028565b60038401555b80826009016000828254620055fe919062006972565b90915550506003830154600a830180546000906200561e90849062006972565b92505081905550808260080160008282546200563b91906200695c565b90915550506002830154600b830180546000906200565b9084906200695c565b90915550505b6005808401805460ff1916600117905582018054829190600090620056889084906200695c565b909155505050505050565b60008181526006602052604081206003810154909103620056b2575050565b60018101546001600160a01b031660009081526028602052604081206005830154909190610100900460ff166200574e57816007015482600601548460030154620056fe919062006dcf565b6200570a919062007028565b9050808260060160008282546200572291906200695c565b90915550506003830154600783018054600090620057429084906200695c565b90915550620057b39050565b81600a01548260090154846003015462005769919062006dcf565b62005775919062007028565b9050808260090160008282546200578d91906200695c565b90915550506003830154600a83018054600090620057ad9084906200695c565b90915550505b82546001600160a01b0316600090815260276020526040812080548392906200568890849062006972565b6000620057ef8260600151620044e0565b6001600160a01b03909116602084015290508015620058515760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000e42565b6020808301516001600160a01b03908116600090815260289092526040909120600101541615620058c55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000e42565b6127108260800151111562002c1d5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000e42565b6060816000036200596157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115620059915780620059788162006db2565b9150620059899050600a8362007028565b915062005965565b60008167ffffffffffffffff811115620059af57620059af62006484565b6040519080825280601f01601f191660200182016040528015620059da576020820181803683370190505b5090505b841562005a6a57620059f26001836200695c565b915062005a01600a8662006e18565b62005a0e90603062006972565b60f81b81838151811062005a265762005a2662006d83565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062005a62600a8662007028565b9450620059de565b949350505050565b60608162005a8281601f62006972565b101562005ad25760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640162000e42565b62005ade828462006972565b8451101562005b305760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640162000e42565b60608215801562005b51576040519150600082526020820160405262005b9d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562005b8c57805183526020928301920162005b72565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b81101562005bd65762005bd3601b82620070d0565b90505b9250925092565b600062005be962006002565b600085858560405160200162005c0293929190620070ec565b6040516020818303038152906040529050600060fb905060008251602062005c2b919062006972565b90506020848285855afa62005c3f57600080fd5b5050905195945050505050565b6101808101516001600160a01b031662005ccf57601d5460009062005c71906200591d565b90508160200151826000015183608001518360405162005c919062006020565b62005ca094939291906200714e565b604051809103906000f08015801562005cbd573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601d80546001808201835560009283527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039586161790915584518416835260289095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005d8e908262006e2f565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005e65908262006e2f565b5061026082015160138201805460ff1916600183600381111562005e8d5762005e8d62006159565b0217905550505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562005f625762005f6262006159565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000ee791906200602e565b50805462005fb390620068d8565b6000825580601f1062005fc4575050565b601f01602090049060005260206000209081019062000ee7919062006053565b60405180604001604052806002906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b611a20806200718d83390190565b808211156200604f57600062006045828262005fa5565b506001016200602e565b5090565b5b808211156200604f576000815560010162006054565b60005b83811015620060875781810151838201526020016200606d565b50506000910152565b60008151808452620060aa8160208601602086016200606a565b601f01601f19169290920160200192915050565b602081526000620060d3602083018462006090565b9392505050565b6001600160a01b038116811462000ee757600080fd5b600080604083850312156200610457600080fd5b82356200611181620060da565b946020939093013593505050565b6000602082840312156200613257600080fd5b8135620060d381620060da565b6000602082840312156200615257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110620061c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208152620061df6020820183516001600160a01b03169052565b60006020830151620061fc60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620062306102a085018362006090565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a0620062b8818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f1901610260808801919091529091506200631c848362006090565b935080870151915050620063338286018262006188565b5090949350505050565b6000806000606084860312156200635357600080fd5b83356200636081620060da565b925060208401356200637281620060da565b929592945050506040919091013590565b6000602082840312156200639657600080fd5b813567ffffffffffffffff811115620063ae57600080fd5b82016102808185031215620060d357600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562006437578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620064228187018362006090565b9a87019a9550505090840190600101620063e0565b5091979650505050505050565b821515815260406020820152600062005a6a6040830184620063c2565b600080604083850312156200647557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620064c557600080fd5b813567ffffffffffffffff80821115620064e357620064e362006484565b604051601f8301601f19908116603f011681019082821181831017156200650e576200650e62006484565b816040528381528660208588010111156200652857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156200655c57600080fd5b82356200656981620060da565b9150602083013567ffffffffffffffff8111156200658657600080fd5b6200659485828601620064b3565b9150509250929050565b6000610200820190508551825260208601516020830152604086015160408301526060860151606083015260808601516001600160a01b0380821660808501528087511660a08501528060208801511660c08501528060408801511660e08501528060608801511661010085015280608088015116610120850152505060a0850151620066376101408401826001600160a01b03169052565b5083516001600160a01b0316610160830152602084015161018083015260408401516101a08301526060909301516101c08201526101e0015292915050565b600080600080608085870312156200668d57600080fd5b843567ffffffffffffffff80821115620066a657600080fd5b620066b488838901620064b3565b955060208701359150620066c882620060da565b90935060408601359080821115620066df57600080fd5b620066ed88838901620064b3565b935060608701359150808211156200670457600080fd5b506200671387828801620064b3565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562006796577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526200678385835162006090565b9450928501929085019060010162006746565b5092979650505050505050565b602081526000620060d36020830184620063c2565b6020808252825182820181905260009190848201906040850190845b81811015620067fb5783516001600160a01b031683529284019291840191600101620067d4565b50909695505050505050565b600080604083850312156200681b57600080fd5b823567ffffffffffffffff808211156200683457600080fd5b6200684286838701620064b3565b935060208501359150808211156200685957600080fd5b506200659485828601620064b3565b6040815260006200687d604083018562006090565b828103602084015262006891818562006090565b95945050505050565b60008060408385031215620068ae57600080fd5b8235620068bb81620060da565b91506020830135620068cd81620060da565b809150509250929050565b600181811c90821680620068ed57607f821691505b60208210810362006927577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562000dd25762000dd26200692d565b8082018082111562000dd25762000dd26200692d565b6000813562000dd281620060da565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112620069cd57600080fd5b83018035915067ffffffffffffffff821115620069e957600080fd5b602001915036819003821315620069ff57600080fd5b9250929050565b601f8211156200423657600081815260208120601f850160051c8101602086101562006a2f5750805b601f850160051c820191505b818110156200255c5782815560010162006a3b565b67ffffffffffffffff83111562006a6b5762006a6b62006484565b62006a838362006a7c8354620068d8565b8362006a06565b6000601f84116001811462006aba576000851562006aa15750838201355b600019600387901b1c1916600186901b1783556200175d565b600083815260209020601f19861690835b8281101562006aed578685013582556020948501946001909201910162006acb565b508682101562006b0b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000dd257600080fd5b6004821062006b67577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006bb362006b898362006988565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b62006bf362006bc56020840162006988565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c3362006c056040840162006988565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006c42606083018362006997565b62006c5281836003860162006a50565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006ce962006cbb610180840162006988565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f8201556102008201356010820155610220820135601182015562006d3061024083018362006997565b62006d4081836012860162006a50565b505062002c1d62006d55610260840162006b1d565b6013830162006b2f565b60006020828403121562006d7257600080fd5b81518015158114620060d357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820362006dc85762006dc86200692d565b5060010190565b808202811582820484141762000dd25762000dd26200692d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262006e2a5762006e2a62006de9565b500690565b815167ffffffffffffffff81111562006e4c5762006e4c62006484565b62006e648162006e5d8454620068d8565b8462006a06565b602080601f83116001811462006e9c576000841562006e835750858301515b600019600386901b1c1916600185901b1785556200255c565b600085815260208120601f198616915b8281101562006ecd5788860151825594840194600190910190840162006eac565b508582101562006eec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262006f3160a084018662006090565b91508084166080840152509695505050505050565b81810362006f52575050565b62006f5e8254620068d8565b67ffffffffffffffff81111562006f795762006f7962006484565b62006f8a8162006e5d8454620068d8565b6000601f82116001811462006fc1576000831562006fa85750848201545b600019600385901b1c1916600184901b1784556200175d565b600085815260209020601f19841690600086815260209020845b8381101562006ffd578286015482556001958601959091019060200162006fdb565b508583101562006eec5793015460001960f8600387901b161c19169092555050600190811b01905550565b6000826200703a576200703a62006de9565b500490565b6000602082840312156200705257600080fd5b5051919050565b600084516200706d8184602089016200606a565b845190830190620070838183602089016200606a565b8451910190620070988183602088016200606a565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162006891606083018462006188565b60ff818116838216019081111562000dd25762000dd26200692d565b60008451620071008184602089016200606a565b845190830190620071168183602089016200606a565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015262007182608083018462006090565b969550505050505056fe60806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033a264697066735822122022ea999971b574bcb5c4f2e599c9d38c70ad32230d0129c6aac492e77bfe3db264736f6c6343000815003360806040523480156200001157600080fd5b5060405162001a2038038062001a20833981016040819052620000349162000151565b6127108211156200004457600080fd5b600a80546001600160a01b038087166001600160a01b031992831617909255600b805492861692909116919091179055600c8290556040516200008c9082906020016200023e565b60405160208183030381529060405260089081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b60405160208183030381529060405260099081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61164880620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a9059cbb11610059578063a9059cbb1461049b578063dd62ed3e146104bb578063fb489a7b1461050e57600080fd5b8063949813b81461044657806395d89b41146104665780639dc29fac1461047b57600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610516565b6040516101b291906113af565b60405180910390f35b3480156101c757600080fd5b506101db6101d6366004611444565b6105a8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461146e565b6105bf565b005b34801561025057600080fd5b506101db61025f366004611487565b610656565b34801561027057600080fd5b5061024261027f366004611444565b610797565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610912565b3480156102d757600080fd5b50600a546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b50610242610338366004611444565b6109c9565b34801561034957600080fd5b506101fc6103583660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600c5481565b3480156103a257600080fd5b50600b546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de3660046114c3565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b50610242610421366004611444565b610ab3565b34801561043257600080fd5b506101fc6104413660046114c3565b610c10565b34801561045257600080fd5b506101fc6104613660046114c3565b610c4b565b34801561047257600080fd5b506101a5610c86565b34801561048757600080fd5b50610242610496366004611444565b610c95565b3480156104a757600080fd5b506101db6104b6366004611444565b610d77565b3480156104c757600080fd5b506101fc6104d63660046114e5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6101fc610de3565b60606008805461052590611518565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611518565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610fbb565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106515760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600c55565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360209081526040808320338452909152812054828110156106fd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610648565b610711853361070c868561159a565b610fbb565b61071b858461113a565b6107258484611249565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161078491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108245760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260408083205460019092529091205482916108619161159a565b10156108d45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812080548392906109099084906115ad565b90915550505050565b600061091d336112a1565b33600081815260056020526040808220829055519293509183908381818185875af1925050503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50509050806109c55760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e64204175746f6e0000000000000000000000006044820152606401610648565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a565760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610a608282611249565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b405760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610bdb5760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260408120805483929061090990849061159a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105b9919061159a565b6000610c5682611320565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600560205260409020546105b991906115ad565b60606009805461052590611518565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d225760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b610d2c828261113a565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610aa7565b6000610d83338361113a565b610d8d8383611249565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610e715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610648565b600c54349060009061271090610e8790846115c0565b610e9191906115d7565b905081811115610ee35760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642076616c696461746f722072657761726400000000000000006044820152606401610648565b610eed818361159a565b600b5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114610f4d576040519150601f19603f3d011682016040523d82523d6000602084013e610f52565b606091505b505060045460009150610f69633b9aca00856115c0565b610f7391906115d7565b905080600754610f8391906115ad565b600755600454600090633b9aca0090610f9c90846115c0565b610fa691906115d7565b9050610fb281846115ad565b94505050505090565b73ffffffffffffffffffffffffffffffffffffffff83166110435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff82166110cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610648565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611143826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832054600290925290912054611180908261159a565b8211156111cf5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610648565b6111d9828261159a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361122d5773ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120555b816004600082825461123f919061159a565b9091555050505050565b611252826112a1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812080548392906112889084906115ad565b92505081905550806004600082825461090991906115ad565b6000806112ad83611320565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600560205260409020549091506112e19082906115ad565b73ffffffffffffffffffffffffffffffffffffffff90931660009081526005602090815260408083208690556007546006909252909120555090919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548082036113565750600092915050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020526040812054600754611389919061159a565b90506000633b9aca0061139c84846115c0565b6113a691906115d7565b95945050505050565b600060208083528351808285015260005b818110156113dc578581018301518582016040015282016113c0565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143f57600080fd5b919050565b6000806040838503121561145757600080fd5b6114608361141b565b946020939093013593505050565b60006020828403121561148057600080fd5b5035919050565b60008060006060848603121561149c57600080fd5b6114a58461141b565b92506114b36020850161141b565b9150604084013590509250925092565b6000602082840312156114d557600080fd5b6114de8261141b565b9392505050565b600080604083850312156114f857600080fd5b6115018361141b565b915061150f6020840161141b565b90509250929050565b600181811c9082168061152c57607f821691505b602082108103611565577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105b9576105b961156b565b808201808211156105b9576105b961156b565b80820281158282048414176105b9576105b961156b565b60008261160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b5667f4affd8e0e5bd6ebe526a06238a561e62da0a97c98cb50a98a11bd7ca8c64736f6c63430008150033") + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var AutonityUpgradeTestBytecode = common.Hex2Bytes("60806040526000600b556000600c553480156200001b57600080fd5b50604080516000808252602082019092529062000051565b6200003d62000d86565b815260200190600190039081620000335790505b506040805161014081018252600d546080808301918252600e5460a080850191909152600f5460c08086019190915260105460e0808701919091526011546101008701526012546001600160a01b039081166101208801529486528651908101875260135485168152601454851660208281019190915260155486168289015260165486166060808401919091526017548716838701526018548716948301949094526019548616928201929092528186015285519283018652601a549093168252601b5492820192909252601c5481850152601d548183015292820192909252601e54918101829052906000036200016257602e80546001600160a01b031916331790556200016282826200017f565b5050601e5460010362000179576200017962000557565b62001196565b80518051600d55602080820151600e55604080830151600f55606080840151601055608080850151601181905560a095860151601280546001600160a01b03199081166001600160a01b0393841617909155868901518051601380548416918516919091179055808801516014805484169185169190911790558087015160158054841691851691909117905580860151601680548416918516919091179055938401516017805483169184169190911790559683015160188054891691831691909117905560c090920151601980548816918416919091179055838701518051601a805490981693169290921790955592830151601b5590820151601c5590810151601d55820151601e55602d5560005b825181101562000552576000838281518110620002b257620002b262000ef5565b602002602001015160a0015190506000848381518110620002d757620002d762000ef5565b60200260200101516101a00181815250506000848381518110620002ff57620002ff62000ef5565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106200033b576200033b62000ef5565b602002602001015160a0018181525050600084838151811062000362576200036262000ef5565b60209081029190910101516101c00152600f5484518590849081106200038c576200038c62000ef5565b602002602001015160800181815250506000848381518110620003b357620003b362000ef5565b602002602001015161026001906003811115620003d457620003d462000f0b565b90816003811115620003ea57620003ea62000f0b565b81525050600084838151811062000405576200040562000ef5565b6020026020010151610160018181525050620004438483815181106200042f576200042f62000ef5565b6020026020010151620006c560201b60201c565b620004708483815181106200045c576200045c62000ef5565b6020026020010151620007fc60201b60201c565b80602a60008685815181106200048a576200048a62000ef5565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620004c7919062000f37565b9250508190555080602c6000828254620004e2919062000f37565b925050819055506200053c84838151811062000502576200050262000ef5565b6020026020010151602001518286858151811062000524576200052462000ef5565b60200260200101516000015162000a2d60201b60201c565b5080620005498162000f53565b91505062000291565b505050565b602e546001600160a01b03163314620005c35760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b6002602b6000601f600181548110620005e057620005e062000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060050180549091906200061990849062000f85565b925050819055506002602b6000601f6001815481106200063d576200063d62000ef5565b60009182526020808320909101546001600160a01b03168352820192909252604001812060080180549091906200067690849062000f85565b90915550506002601e55601a546001600160a01b03166000908152602a602052604081206103e89055620006ab908062000e56565b620006b96001600062000e56565b6002805460ff19169055565b6000620006dc826060015162000c1860201b60201c565b6001600160a01b039091166020840152905080156200072c5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b6044820152606401620005ba565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620007a05760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401620005ba565b61271082608001511115620007f85760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401620005ba565b5050565b6101808101516001600160a01b03166200087f57601f54600090620008219062000c66565b905081602001518260000151836080015183604051620008419062000e98565b62000850949392919062000f9c565b604051809103906000f0801580156200086d573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790910180546001600160a01b03199081166001600160a01b0395861617909155845184168352602b909552604091829020865181548716908516178155935190840180548616918416919091179055840151600283018054909416911617909155606082015182919060038201906200093190826200109d565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f820155610200820151601082015561022082015160118201556102408201516012820190620009fb90826200109d565b5061026082015160138201805460ff1916600183600381111562000a235762000a2362000f0b565b0217905550505050565b6000821162000a8b5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401620005ba565b6001600160a01b0381166000908152602a602052604090205482111562000af55760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401620005ba565b6001600160a01b0381166000908152602a60205260408120805484929062000b1f90849062001169565b9091555050604080516080810182526001600160a01b03808416825285811660208084019182528385018781524360608601908152600580546000908152600394859052978820875181549088166001600160a01b031991821617825595516001820180549190981696169590951790955590516002840155519101558054919262000bab8362000f53565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d910160405180910390a35050505050565b60008062000c2562000ea6565b60008060ff9050604083875160208901845afa62000c4257600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60608160000362000c8e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811562000cbe578062000ca58162000f53565b915062000cb69050600a8362000f85565b915062000c92565b6000816001600160401b0381111562000cdb5762000cdb62000edf565b6040519080825280601f01601f19166020018201604052801562000d06576020820181803683370190505b5090505b841562000d7e5762000d1e60018362001169565b915062000d2d600a866200117f565b62000d3a90603062000f37565b60f81b81838151811062000d525762000d5262000ef5565b60200101906001600160f81b031916908160001a90535062000d76600a8662000f85565b945062000d0a565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562000e515762000e5162000f0b565b905290565b50805462000e64906200100f565b6000825580601f1062000e75575050565b601f01602090049060005260206000209081019062000e95919062000ec4565b50565b611dde806200a21483390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111562000edb576000815560010162000ec5565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000f4d5762000f4d62000f21565b92915050565b60006001820162000f685762000f6862000f21565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008262000f975762000f9762000f6f565b500490565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b8281101562000feb5785810182015185820160a00152810162000fcd565b5050600060a0828501015260a0601f19601f83011684010191505095945050505050565b600181811c908216806200102457607f821691505b6020821081036200104557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055257600081815260208120601f850160051c81016020861015620010745750805b601f850160051c820191505b81811015620010955782815560010162001080565b505050505050565b81516001600160401b03811115620010b957620010b962000edf565b620010d181620010ca84546200100f565b846200104b565b602080601f831160018114620011095760008415620010f05750858301515b600019600386901b1c1916600185901b17855562001095565b600085815260208120601f198616915b828110156200113a5788860151825594840194600190910190840162001119565b5085821015620011595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111562000f4d5762000f4d62000f21565b60008262001191576200119162000f6f565b500690565b61906e80620011a66000396000f3fe6080604052600436106200041b5760003560e01c80638bac7dad116200021d578063b7ab4db51162000131578063d5f3948811620000c1578063dfb1a4d2116200008f578063e98712b21162000075578063e98712b21462000ddc578063f03b959d1462000df4578063f7866ee31462000e1957005b8063dfb1a4d21462000da5578063e7f43c681462000dbc57005b8063d5f394881462000cfc578063d861b0e81462000d1e578063d886f8a21462000d36578063dd62ed3e1462000d5b57005b8063ceaad45511620000ff578063ceaad4551462000c75578063cf9c57191462000c9a578063cfd19fb91462000cb2578063d372c07e1462000cd757005b8063b7ab4db51462000c08578063c2362dd51462000c20578063c9d97af41462000c38578063cb696f541462000c5057005b8063a8b2216e11620001ad578063b2ea9adb116200017b578063b2ea9adb1462000b71578063b3ecbadd1462000b96578063b46e55201462000bbb578063b66b3e791462000be057005b8063a8b2216e1462000ad7578063a9059cbb1462000afe578063ab8f6ffe1462000b23578063ae1f5fa01462000b4a57005b80639c98e47111620001eb5780639c98e4711462000a505780639dc29fac1462000a68578063a515366a1462000a8d578063a5d059ca1462000ab257005b80638bac7dad146200099a57806395d89b4114620009bf57806396b477cb1462000a075780639ac310741462000a3857005b806343645969116200032f578063731b3a0311620002bf578063833b1fce116200028d578063852c48491162000273578063852c48491462000945578063872cf059146200096a57806389c614b8146200098257005b8063833b1fce146200090057806384467fdb146200092057005b8063731b3a0314620007b957806377e741c714620007d057806379502c5514620007f5578063819b646314620008e957005b80635f7d394911620002fd5780635f7d394914620007055780636b5f444c14620007435780636fd2c80b146200076857806370a08231146200077f57005b806343645969146200067c578063496ccd9b14620006935780634bb278f314620006b8578063520fdbbc14620006e057005b806318160ddd11620003ab5780632f2c3f2e11620003795780632f2c3f2e14620005fc578063313ce567146200061457806335be16e0146200063257806340c10f19146200065757005b806318160ddd14620005755780631904bb2e146200058c57806323b872dd14620005c057806329070c6d14620005e557005b80631122063311620003e95780631122063314620004fc578063114eaf5514620005135780631250a28d14620005385780631604e416146200055d57005b806306fdde031462000425578063095ea7b314620004805780630ae65e7a14620004b65780630d8e6e2c14620004db57005b366200042357005b005b3480156200043257600080fd5b5060408051808201909152600681527f4e6577746f6e000000000000000000000000000000000000000000000000000060208201525b6040516200047791906200618c565b60405180910390f35b3480156200048d57600080fd5b50620004a56200049f366004620061be565b62000e39565b604051901515815260200162000477565b348015620004c357600080fd5b5062000423620004d5366004620061ed565b62000e52565b348015620004e857600080fd5b50601e545b60405190815260200162000477565b3480156200050957600080fd5b50600e54620004ed565b3480156200052057600080fd5b5062000423620005323660046200620d565b62000f64565b3480156200054557600080fd5b506200042362000557366004620061ed565b62000fc5565b3480156200056a57600080fd5b50620004ed60275481565b3480156200058257600080fd5b50602c54620004ed565b3480156200059957600080fd5b50620005b1620005ab366004620061ed565b62001050565b60405162000477919062006292565b348015620005cd57600080fd5b50620004a5620005df3660046200640b565b6200132d565b348015620005f257600080fd5b50600d54620004ed565b3480156200060957600080fd5b50620004ed61271081565b3480156200062157600080fd5b506040516012815260200162000477565b3480156200063f57600080fd5b50620004236200065136600462006451565b620013d5565b3480156200066457600080fd5b506200042362000676366004620061be565b620015cb565b3480156200068957600080fd5b50601c54620004ed565b348015620006a057600080fd5b5062000423620006b2366004620061ed565b62001637565b348015620006c557600080fd5b50620006d0620017af565b6040516200047792919062006512565b348015620006ed57600080fd5b5062000423620006ff366004620061ed565b62001d13565b3480156200071257600080fd5b506200072a620007243660046200652f565b62001fc7565b6040516001600160a01b03909116815260200162000477565b3480156200075057600080fd5b5062000423620007623660046200620d565b620021f2565b3480156200077557600080fd5b50601054620004ed565b3480156200078c57600080fd5b50620004ed6200079e366004620061ed565b6001600160a01b03166000908152602a602052604090205490565b348015620007c657600080fd5b50602254620004ed565b348015620007dd57600080fd5b5062000423620007ef3660046200620d565b620023c0565b3480156200080257600080fd5b506040805160c08082018352600d548252600e54602080840191909152600f54838501526010546060808501919091526011546080808601919091526012546001600160a01b0390811660a080880191909152875160e081018952601354831681526014548316818701526015548316818a015260165483168186015260175483168185015260185483169181019190915260195482169581019590955286519182018752601a54168152601b5492810192909252601c5494820194909452601d5493810193909352601e54620008d7939084565b60405162000477949392919062006552565b348015620008f657600080fd5b50601d54620004ed565b3480156200090d57600080fd5b506014546001600160a01b03166200072a565b3480156200092d57600080fd5b50620004236200093f3660046200670b565b62002421565b3480156200095257600080fd5b506200042362000964366004620061be565b62002550565b3480156200097757600080fd5b506200042362002772565b3480156200098f57600080fd5b50620004ed60235481565b348015620009a757600080fd5b5062000423620009b93660046200620d565b620027dd565b348015620009cc57600080fd5b5060408051808201909152600381527f4e544e0000000000000000000000000000000000000000000000000000000000602082015262000468565b34801562000a1457600080fd5b50620004ed62000a263660046200620d565b60009081526021602052604090205490565b34801562000a4557600080fd5b50620004ed602d5481565b34801562000a5d57600080fd5b50620004ed60245481565b34801562000a7557600080fd5b506200042362000a87366004620061be565b62002890565b34801562000a9a57600080fd5b506200042362000aac366004620061be565b620029e3565b34801562000abf57600080fd5b506200042362000ad1366004620061be565b62002ae1565b34801562000ae457600080fd5b5062000aef62002baf565b604051620004779190620067b4565b34801562000b0b57600080fd5b50620004a562000b1d366004620061be565b62002c92565b34801562000b3057600080fd5b5062000b3b62002cea565b60405162000477919062006838565b34801562000b5757600080fd5b5062000b6262002dfc565b6040516200047791906200684d565b34801562000b7e57600080fd5b506200042362000b903660046200689c565b620030a2565b34801562000ba357600080fd5b506200042362000bb5366004620061ed565b62003118565b34801562000bc857600080fd5b506200042362000bda366004620061ed565b620031a3565b34801562000bed57600080fd5b5062000bf862003463565b6040516200047792919062006907565b34801562000c1557600080fd5b5062000b626200359a565b34801562000c2d57600080fd5b50620004ed60225481565b34801562000c4557600080fd5b50620004ed60205481565b34801562000c5d57600080fd5b506200042362000c6f3660046200620d565b620035fe565b34801562000c8257600080fd5b506200042362000c94366004620061ed565b62003690565b34801562000ca757600080fd5b50620004236200371b565b34801562000cbf57600080fd5b506200042362000cd1366004620061ed565b6200379e565b34801562000ce457600080fd5b506200042362000cf6366004620061ed565b62003829565b34801562000d0957600080fd5b50602e546200072a906001600160a01b031681565b34801562000d2b57600080fd5b5062000423620038b4565b34801562000d4357600080fd5b506200042362000d55366004620061ed565b62003951565b34801562000d6857600080fd5b50620004ed62000d7a36600462006939565b6001600160a01b03918216600090815260296020908152604080832093909416825291909152205490565b34801562000db257600080fd5b50601b54620004ed565b34801562000dc957600080fd5b50601a546001600160a01b03166200072a565b34801562000de957600080fd5b50620004ed60265481565b34801562000e0157600080fd5b506200042362000e13366004620061ed565b620039dc565b34801562000e2657600080fd5b506012546001600160a01b03166200072a565b600062000e4833848462003a67565b5060015b92915050565b6001600160a01b038082166000818152602b60205260409020600101549091161462000ec55760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d75737420626520726567697374657265640000000060448201526064015b60405180910390fd5b6001600160a01b038181166000908152602b602052604090205416331462000f565760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000ebc565b62000f618162003bc4565b50565b601a546001600160a01b0316331462000fc05760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601055565b601a546001600160a01b03163314620010215760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6013805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6200105a62005f65565b6001600160a01b038083166000818152602b602052604090206001015490911614620010c95760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6001600160a01b038083166000908152602b602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906200112c9062006977565b80601f01602080910402602001604051908101604052809291908181526020018280546200115a9062006977565b8015620011ab5780601f106200117f57610100808354040283529160200191620011ab565b820191906000526020600020905b8154815290600101906020018083116200118d57829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a082015260118201546101c08201526012820180546101e090920191620012679062006977565b80601f0160208091040260200160405190810160405280929190818152602001828054620012959062006977565b8015620012e65780601f10620012ba57610100808354040283529160200191620012e6565b820191906000526020600020905b815481529060010190602001808311620012c857829003601f168201915b5050509183525050601382015460209091019060ff16600381111562001310576200131062006227565b600381111562001324576200132462006227565b90525092915050565b60006200133c84848462003c9b565b6001600160a01b03841660009081526029602090815260408083203384529091528120546200136d908490620069fb565b90506200137c85338362003a67565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051620013c291815260200190565b60405180910390a3506001949350505050565b6013546001600160a01b03163314620014575760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f742074686520736c617368696e6720636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6000610120820135602b82620014746040860160208701620061ed565b6001600160a01b03166001600160a01b0316815260200190815260200160002060090154620014a49190620069fb565b60c0830135602b6000620014bf6040870160208801620061ed565b6001600160a01b03166001600160a01b0316815260200190815260200160002060060154620014ef9190620069fb565b60a0840135602b60006200150a6040880160208901620061ed565b6001600160a01b03166001600160a01b03168152602001908152602001600020600501546200153a9190620069fb565b62001546919062006a11565b62001552919062006a11565b6012546001600160a01b03166000908152602a60205260408120805492935083929091906200158390849062006a11565b90915550829050602b6000620015a06040840160208501620061ed565b6001600160a01b031681526020810191909152604001600020620015c5828262006c21565b50505050565b601a546001600160a01b03163314620016275760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b62001633828262003dd4565b5050565b601a546001600160a01b03163314620016935760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6014805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556015546040517f7adbf973000000000000000000000000000000000000000000000000000000008152600481019290925290911690637adbf97390602401600060405180830381600087803b1580156200171857600080fd5b505af11580156200172d573d6000803e3d6000fd5b50506017546040517f7adbf9730000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169250637adbf97391506024015b600060405180830381600087803b1580156200179357600080fd5b505af1158015620017a8573d6000803e3d6000fd5b5050505050565b602e546000906060906001600160a01b03163314620018375760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6020805443600081815260219093526040832091909155601b5460225462001860919062006a11565b6013546040517f6c9789b0000000000000000000000000000000000000000000000000000000008152929091146004830181905292506001600160a01b031690636c9789b090602401600060405180830381600087803b158015620018c457600080fd5b505af1158015620018d9573d6000803e3d6000fd5b50505050801562001acc57601954602c54602d546023546040517f92eff3cd0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa15801562001965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200198b919062006e06565b905080602d5410156200199d5750602d545b620019a9308262003dd4565b80602d6000828254620019bd9190620069fb565b90915550620019cf9050478262003e5a565b620019d962004375565b620019e362004464565b6000620019ef62002dfc565b6014546040517f845023f20000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063845023f29062001a3b9084906004016200684d565b600060405180830381600087803b15801562001a5657600080fd5b505af115801562001a6b573d6000803e3d6000fd5b505043602255505042602355602080546001919060009062001a8f90849062006a11565b9091555050602080546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e335910160405180910390a150505b601454604080517f4bb278f300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634bb278f3916004808301926020929190829003018187875af115801562001b31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b57919062006e20565b9050801562001bec57601554604080517fa2e6204500000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163a2e620459160048082019260209290919082900301816000875af192505050801562001be4575060408051601f3d908101601f1916820190925262001be19181019062006e20565b60015b1562001bec57505b600254602580546040805160208084028201810190925282815260ff9094169391839160009084015b8282101562001d03576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162001c6b9062006977565b80601f016020809104026020016040519081016040528092919081815260200182805462001c999062006977565b801562001cea5780601f1062001cbe5761010080835404028352916020019162001cea565b820191906000526020600020905b81548152906001019060200180831162001ccc57829003601f168201915b5050505050815250508152602001906001019062001c15565b5050505090509350935050509091565b601a546001600160a01b0316331462001d6f5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038381169182179092556014546040517fb3ab15fb00000000000000000000000000000000000000000000000000000000815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801562001df457600080fd5b505af115801562001e09573d6000803e3d6000fd5b50506015546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001e6e57600080fd5b505af115801562001e83573d6000803e3d6000fd5b50506016546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001ee857600080fd5b505af115801562001efd573d6000803e3d6000fd5b50506017546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801562001f6257600080fd5b505af115801562001f77573d6000803e3d6000fd5b50506018546040517fb3ab15fb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152909116925063b3ab15fb915060240162001778565b600080805b60255481101562002023576025818154811062001fed5762001fed62006e44565b906000526020600020906003020160010154826200200c919062006a11565b9150806200201a8162006e73565b91505062001fcc565b5080600003620020765760405162461bcd60e51b815260206004820152601c60248201527f54686520636f6d6d6974746565206973206e6f74207374616b696e6700000000604482015260640162000ebc565b6000836200208660638762006e90565b62002092919062006a11565b9050600081604051602001620020aa91815260200190565b60408051601f19818403018152919052805160209091012090506000620020d2848362006ed9565b90506000805b602554811015620021825760258181548110620020f957620020f962006e44565b9060005260206000209060030201600101548262002118919062006a11565b915062002127600183620069fb565b83116200216d576025818154811062002144576200214462006e44565b60009182526020909120600390910201546001600160a01b0316965062000e4c95505050505050565b80620021798162006e73565b915050620020d8565b5060405162461bcd60e51b815260206004820152602960248201527f5468657265206973206e6f2076616c696461746f72206c65667420696e20746860448201527f65206e6574776f726b0000000000000000000000000000000000000000000000606482015260840162000ebc565b601a546001600160a01b031633146200224e5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b601b5481101562002305578060225462002269919062006a11565b4310620023055760405162461bcd60e51b815260206004820152605760248201527f63757272656e7420636861696e2068656164206578636565642074686520776960448201527f6e646f773a206c617374426c6f636b45706f6368202b205f6e6577506572696f60648201527f642c2074727920616761696e206c6174746572206f6e2e000000000000000000608482015260a40162000ebc565b601b8190556013546040517f6b5f444c000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690636b5f444c90602401600060405180830381600087803b1580156200236a57600080fd5b505af11580156200237f573d6000803e3d6000fd5b505050507fd7f1279ded354dbf22a69fcc2fd661763a6e2956a5d2891af9410af880fa5f8181604051620023b591815260200190565b60405180910390a150565b601a546001600160a01b031633146200241c5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600d55565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b03168152602001868152602001600d6000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200143815260200160008152602001600081526020016000815260200184815260200160006003811115620024f057620024f062006227565b90529050620025008183620045a9565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c926200254192339289918b9162006ef0565b60405180910390a15050505050565b6001600160a01b038083166000818152602b602052604090206001015490911614620025bf5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000ebc565b6001600160a01b038281166000908152602b6020526040902054163314620026505760405162461bcd60e51b815260206004820152602c60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160448201527f646d696e206163636f756e740000000000000000000000000000000000000000606482015260840162000ebc565b612710811115620026a45760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640162000ebc565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600c80546000908152600a9093529582208551815473ffffffffffffffffffffffffffffffffffffffff19169516949094178455915160018085019190915591516002909301929092558354929390929091906200272a90849062006a11565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a2505050565b601a546001600160a01b03163314620027ce5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6002805460ff19166001179055565b601a546001600160a01b03163314620028395760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600081116200288b5760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640162000ebc565b601d55565b601a546001600160a01b03163314620028ec5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602a6020526040902054811115620029565760405162461bcd60e51b815260206004820152601660248201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602a60205260408120805483929062002980908490620069fb565b9250508190555080602c60008282546200299b9190620069fb565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b6001600160a01b038083166000818152602b60205260409020600101549091161462002a525760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6001600160a01b0382166000908152602b602052604081206013015460ff16600381111562002a855762002a8562006227565b1462002ad45760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640162000ebc565b6200163382823362004a4c565b6001600160a01b038083166000818152602b60205260409020600101549091161462002b505760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604482015260640162000ebc565b6000811162002ba25760405162461bcd60e51b815260206004820152601560248201527f756e626f6e64696e6720616d6f756e7420697320300000000000000000000000604482015260640162000ebc565b6200163382823362004c5f565b60606028805480602002602001604051908101604052809291908181526020016000905b8282101562002c8957838290600052602060002001805462002bf59062006977565b80601f016020809104026020016040519081016040528092919081815260200182805462002c239062006977565b801562002c745780601f1062002c485761010080835404028352916020019162002c74565b820191906000526020600020905b81548152906001019060200180831162002c5657829003601f168201915b50505050508152602001906001019062002bd3565b50505050905090565b600062002ca133848462003c9b565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b60606025805480602002602001604051908101604052809291908181526020016000905b8282101562002c89576000848152602090819020604080516060810182526003860290920180546001600160a01b031683526001810154938301939093526002830180549293929184019162002d649062006977565b80601f016020809104026020016040519081016040528092919081815260200182805462002d929062006977565b801562002de35780601f1062002db75761010080835404028352916020019162002de3565b820191906000526020600020905b81548152906001019060200180831162002dc557829003601f168201915b5050505050815250508152602001906001019062002d0e565b602e546060906001600160a01b0316331462002e815760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b601f5462002ed25760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640162000ebc565b62002edc62006035565b601d546080820152601f8152602b6020820152602560408201526024606082015262002f088162005033565b62002f166028600062006053565b6025548062002f685760405162461bcd60e51b815260206004820152601260248201527f636f6d6d697474656520697320656d7074790000000000000000000000000000604482015260640162000ebc565b60008167ffffffffffffffff81111562002f865762002f8662006647565b60405190808252806020026020018201604052801562002fb0578160200160208202803683370190505b50905060005b828110156200309a576000602b60006025848154811062002fdb5762002fdb62006e44565b60009182526020808320600392830201546001600160a01b031684528301939093526040909101812060288054600181018255925292507fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab50190620030439083018262006f3a565b50600281015483516001600160a01b03909116908490849081106200306c576200306c62006e44565b6001600160a01b03909216602092830291909101909101525080620030918162006e73565b91505062002fb6565b509250505090565b601a546001600160a01b03163314620030fe5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6200310b60008362005053565b6200163360018262005053565b601a546001600160a01b03163314620031745760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038082166000818152602b602052604090206001015490911614620032125760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206d757374206265207265676973746572656400000000604482015260640162000ebc565b6001600160a01b038082166000908152602b6020526040902080549091163314620032a65760405162461bcd60e51b815260206004820152602f60248201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460448201527f72656173757279206163636f756e740000000000000000000000000000000000606482015260840162000ebc565b6000601382015460ff166003811115620032c457620032c462006227565b03620033135760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640162000ebc565b6002601382015460ff16600381111562003331576200333162006227565b148015620033425750438160100154115b15620033915760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640162000ebc565b6003601382015460ff166003811115620033af57620033af62006227565b03620033fe5760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640162000ebc565b60138101805460ff191690558054601b546022546001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5916200344e919062006a11565b60405190815260200160405180910390a35050565b60608060006001818054620034789062006977565b80601f0160208091040260200160405190810160405280929190818152602001828054620034a69062006977565b8015620034f75780601f10620034cb57610100808354040283529160200191620034f7565b820191906000526020600020905b815481529060010190602001808311620034d957829003601f168201915b505050505091508080546200350c9062006977565b80601f01602080910402602001604051908101604052809291908181526020018280546200353a9062006977565b80156200358b5780601f106200355f576101008083540402835291602001916200358b565b820191906000526020600020905b8154815290600101906020018083116200356d57829003601f168201915b50505050509050915091509091565b6060601f805480602002602001604051908101604052809291908181526020018280548015620035f457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311620035d5575b5050505050905090565b601a546001600160a01b031633146200365a5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b600e8190556040518181527f1f4d2fc7529047a5bd96d3229bfea127fd18b7748f13586e097c69fccd38912890602001620023b5565b601a546001600160a01b03163314620036ec5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620037775760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6200378460008062006073565b620037926001600062006073565b6002805460ff19169055565b601a546001600160a01b03163314620037fa5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b03163314620038855760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6015805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b602e546001600160a01b03163314620039365760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201527f636f6c0000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6200394062004375565b6200394a62002dfc565b5042602355565b601a546001600160a01b03163314620039ad5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b601a546001600160a01b0316331462003a385760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604482015260640162000ebc565b6019805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b03831662003ae45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b03821662003b625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b0383811660008181526029602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381166000908152602b6020526040812090601382015460ff16600381111562003bf95762003bf962006227565b1462003c485760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640162000ebc565b60138101805460ff191660011790558054601b546022546001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c916200344e919062006a11565b6001600160a01b0383166000908152602a602052604090205481111562003d055760405162461bcd60e51b815260206004820152601660248201527f616d6f756e7420657863656564732062616c616e636500000000000000000000604482015260640162000ebc565b6001600160a01b0383166000908152602a60205260408120805483929062003d2f908490620069fb565b9250508190555080602c600082825462003d4a919062006a11565b9091555062003d5d905081600262006e90565b6001600160a01b0383166000908152602a60205260408120805490919062003d8790849062006a11565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162003bb791815260200190565b6001600160a01b0382166000908152602a60205260408120805483929062003dfe90849062006a11565b9250508190555080602c600082825462003e19919062006a11565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf90602001620029d7565b8115801562003e67575080155b1562003e71575050565b600d54600090670de0b6b3a76400009062003e8e90859062006e90565b62003e9a919062007027565b9050801562003f18576012546040516000916001600160a01b03169083908381818185875af1925050503d806000811462003ef2576040519150601f19603f3d011682016040523d82523d6000602084013e62003ef7565b606091505b509091505080151560010362003f165762003f138285620069fb565b93505b505b826026600082825462003f2c919062006a11565b90915550600090505b602554811015620015c5576000602b60006025848154811062003f5c5762003f5c62006e44565b600091825260208083206003909202909101546001600160a01b0316835282019290925260400181206024546025805492945090918891908690811062003fa75762003fa762006e44565b90600052602060002090600302016001015462003fc5919062006e90565b62003fd1919062007027565b90506000602454866025868154811062003fef5762003fef62006e44565b9060005260206000209060030201600101546200400d919062006e90565b62004019919062007027565b905060008211806200402b5750600081115b156200435c576002601384015460ff1660038111156200404f576200404f62006227565b14806200407757506003601384015460ff16600381111562004075576200407562006227565b145b156200415957601354620040979030906001600160a01b03168362003c9b565b601354602580546001600160a01b039092169163a8031a1d91859188908110620040c557620040c562006e44565b600091825260209091206003909102015460405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b1580156200413657600080fd5b505af11580156200414b573d6000803e3d6000fd5b505050505050505062004360565b6000836005015483856008015462004172919062006e90565b6200417e919062007027565b90508015620041e35783546040516001600160a01b03909116906108fc9083906000818181858888f193505050503d8060008114620041da576040519150601f19603f3d011682016040523d82523d6000602084013e620041df565b606091505b5050505b60008460050154838660080154620041fc919062006e90565b62004208919062007027565b905080156200422a5784546200422a9030906001600160a01b03168362003c9b565b6000620042388285620069fb565b90506000620042488487620069fb565b905060008111806200425a5750600082115b156200430d57600c8701546200427c9030906001600160a01b03168462003c9b565b600c8701546040517fa0ce552d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a0ce552d908390602401604080518083038185885af1158015620042e3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200430a91906200703e565b50505b600187015460408051888152602081018890526001600160a01b03909216917f291e8ba3c0f4b0bd86e6e2346fcee1e7ca0975b1cc1886bfbc722d34f3f24d91910160405180910390a2505050505b5050505b806200436c8162006e73565b91505062003f35565b6004545b600554811015620043a2576200439c81620043948162006e73565b9250620051a6565b62004379565b5060055460045560085460075403620043b757565b6009545b600854811015620043e457620043de81620043d68162006e73565b9250620053e6565b620043bb565b50600854600955600754805b6008548110156200445e5760105460008281526006602052604090206004015443916200441d9162006a11565b1162004443576200442e8162005713565b6200443b60018362006a11565b915062004449565b6200445e565b80620044558162006e73565b915050620043f0565b50600755565b600c54600b541015620045a757600b546000908152600a6020526040902060105460018201544391620044979162006a11565b1115620044a15750565b600281015481546001600160a01b039081166000908152602b6020526040808220600490810185905585548416835291819020600c015490517f19fac8fd0000000000000000000000000000000000000000000000000000000081529216926319fac8fd9262004515920190815260200190565b600060405180830381600087803b1580156200453057600080fd5b505af115801562004545573d6000803e3d6000fd5b5050600b80546000908152600a60205260408120805473ffffffffffffffffffffffffffffffffffffffff19168155600180820183905560029091018290558254909450919250906200459a90849062006a11565b9091555062004464915050565b565b60e2815114620045fc5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640162000ebc565b60308261024001515114620046545760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640162000ebc565b6200465f826200585e565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191909152845192519192600092620046d5920160609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b6040516020818303038152906040529050600082620046f583516200599d565b836040516020016200470a9392919062007063565b60408051601f19818403018152828252805160209182012060028085526060850184529094506000939290918301908036833701905050905060008080806200476289826200475c6041600262006e90565b62005af2565b90506000620047818a620047796041600262006e90565b606062005af2565b905060205b825181101562004852576200479c838262005c26565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa158015620047f8573d6000803e3d6000fd5b5050604051601f1901519050876200481260418462007027565b8151811062004825576200482562006e44565b6001600160a01b03909216602092830291909101909101526200484a60418262006a11565b905062004786565b508a602001516001600160a01b03168660008151811062004877576200487762006e44565b60200260200101516001600160a01b031614620048fd5760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f6660448201527f2070726f76696465640000000000000000000000000000000000000000000000606482015260840162000ebc565b8a604001516001600160a01b03168660018151811062004921576200492162006e44565b60200260200101516001600160a01b031614620049a75760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201527f6f662070726f7669646564000000000000000000000000000000000000000000606482015260840162000ebc565b6001620049bf8c6102400151838e6000015162005c5d565b1462004a345760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e6572736869702060448201527f70726f6f6620666f7220726567697374726174696f6e00000000000000000000606482015260840162000ebc565b62004a3f8b62005ccc565b5050505050505050505050565b6000821162004ac45760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840162000ebc565b6001600160a01b0381166000908152602a602052604090205482111562004b2e5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640162000ebc565b6001600160a01b0381166000908152602a60205260408120805484929062004b58908490620069fb565b9091555050604080516080810182526001600160a01b038084168252858116602080840191825283850187815243606086019081526005805460009081526003948590529788208751815490881673ffffffffffffffffffffffffffffffffffffffff1991821617825595516001820180549190981696169590951790955590516002840155519101558054919262004bf18362006e73565b90915550506001600160a01b038481166000818152602b6020908152604091829020548251908516948716948514808252918101889052909392917fc46aaee12f38035617ad448c04a7956119f7c7ed395ecc347b898817451ddb8d91015b60405180910390a35050505050565b6001600160a01b038084166000908152602b60205260409020805490918381169116148062004e1957600c8201546040517f84955c880000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260009216906384955c8890602401602060405180830381865afa15801562004cef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004d15919062006e06565b90508481101562004d8f5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201527f746f6e2062616c616e6365000000000000000000000000000000000000000000606482015260840162000ebc565b600c8301546040517f282d3fdf0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529091169063282d3fdf90604401600060405180830381600087803b15801562004df957600080fd5b505af115801562004e0e573d6000803e3d6000fd5b505050505062004ec2565b8382600b0154836008015462004e309190620069fb565b101562004ea65760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201527f62616c616e636500000000000000000000000000000000000000000000000000606482015260840162000ebc565b8382600b01600082825462004ebc919062006a11565b90915550505b6040805160e0810182526001600160a01b0380861682528781166020808401918252838501898152600060608601818152436080880190815260a088018381528a151560c08a0190815260088054865260069097529984209851895490891673ffffffffffffffffffffffffffffffffffffffff19918216178a55965160018a0180549190991697169690961790965591516002870155905160038601559251600485015590516005909301805494511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094179290921790925580549162004fdd8362006e73565b9190505550826001600160a01b0316856001600160a01b03167f63f8870909f7c59c9c4932bf98dbd491647c8d2e89ca0a032aacdd943a13e2fc838760405162004c509291909115158252602082015260400190565b60fa60a06000808285855af46200504e573d6000803e3d6000fd5b505050565b81546002600180831615610100020382160482518082016020811060208410016002811462005102576001811462005128578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015620050eb5781518455600184019350602082019150620050cc565b815191036101000a9081900402909155506200519d565b60028302826020036101000a846020036101000a6020890151040201850187556200519d565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b808210156200518b57815184556001840193506020820191506200516c565b815191036101000a9081900402909155505b50505050505050565b600081815260036020908152604080832060018101546001600160a01b03168452602b90925282209091601382015460ff166003811115620051ec57620051ec62006227565b146200528c57600282015482546001600160a01b03166000908152602a6020526040812080549091906200522290849062006a11565b909155505081546001830154600284015460138401546040517f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342946200527f946001600160a01b0391821694911692909160ff90911690620070ac565b60405180910390a1505050565b805482546001600160a01b03908116911614620053a25760008082600801548360050154620052bc9190620069fb565b905080600003620052d45783600201549150620052fa565b80846002015484600d0154620052eb919062006e90565b620052f7919062007027565b91505b600c83015484546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b1580156200536557600080fd5b505af11580156200537a573d6000803e3d6000fd5b505050508183600d01600082825462005394919062006a11565b90915550620053c292505050565b8160020154816008016000828254620053bc919062006a11565b90915550505b8160020154816005016000828254620053dc919062006a11565b9091555050505050565b600081815260066020908152604080832060018101546001600160a01b03168452602b9092528220600582015491929091610100900460ff166200560c576002830154600c83015484546040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156200549457600080fd5b505af1158015620054a9573d6000803e3d6000fd5b50505050600c83015484546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b1580156200551857600080fd5b505af11580156200552d573d6000803e3d6000fd5b50505050600083600801548460050154620055499190620069fb565b600d8501549091506200555d828462006e90565b62005569919062007027565b92508184600d016000828254620055819190620069fb565b90915550506006840154600003620055a05760038501839055620055c8565b60068401546007850154620055b6908562006e90565b620055c2919062007027565b60038601555b82846006016000828254620055de919062006a11565b90915550506003850154600785018054600090620055fe90849062006a11565b90915550620056e192505050565b506002820154600882015481111562005626575060088101545b816009015460000362005640576003830181905562005668565b6009820154600a83015462005656908362006e90565b62005662919062007027565b60038401555b808260090160008282546200567e919062006a11565b90915550506003830154600a830180546000906200569e90849062006a11565b9250508190555080826008016000828254620056bb9190620069fb565b90915550506002830154600b83018054600090620056db908490620069fb565b90915550505b6005808401805460ff191660011790558201805482919060009062005708908490620069fb565b909155505050505050565b6000818152600660205260408120600381015490910362005732575050565b60018101546001600160a01b03166000908152602b602052604081206005830154909190610100900460ff16620057ce578160070154826006015484600301546200577e919062006e90565b6200578a919062007027565b905080826006016000828254620057a29190620069fb565b90915550506003830154600783018054600090620057c2908490620069fb565b90915550620058339050565b81600a015482600901548460030154620057e9919062006e90565b620057f5919062007027565b9050808260090160008282546200580d9190620069fb565b90915550506003830154600a830180546000906200582d908490620069fb565b90915550505b82546001600160a01b03166000908152602a6020526040812080548392906200570890849062006a11565b60006200586f826060015162005f17565b6001600160a01b03909116602084015290508015620058d15760405162461bcd60e51b815260206004820152600b60248201527f656e6f6465206572726f72000000000000000000000000000000000000000000604482015260640162000ebc565b6020808301516001600160a01b039081166000908152602b9092526040909120600101541615620059455760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640162000ebc565b61271082608001511115620016335760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640162000ebc565b606081600003620059e157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811562005a115780620059f88162006e73565b915062005a099050600a8362007027565b9150620059e5565b60008167ffffffffffffffff81111562005a2f5762005a2f62006647565b6040519080825280601f01601f19166020018201604052801562005a5a576020820181803683370190505b5090505b841562005aea5762005a72600183620069fb565b915062005a81600a8662006ed9565b62005a8e90603062006a11565b60f81b81838151811062005aa65762005aa662006e44565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535062005ae2600a8662007027565b945062005a5e565b949350505050565b60608162005b0281601f62006a11565b101562005b525760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640162000ebc565b62005b5e828462006a11565b8451101562005bb05760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640162000ebc565b60608215801562005bd1576040519150600082526020820160405262005c1d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101562005c0c57805183526020928301920162005bf2565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b81101562005c565762005c53601b82620070da565b90505b9250925092565b600062005c69620060b2565b600085858560405160200162005c8293929190620070f6565b6040516020818303038152906040529050600060fb905060008251602062005cab919062006a11565b90506020848285855afa62005cbf57600080fd5b5050905195945050505050565b6101808101516001600160a01b031662005d4f57601f5460009062005cf1906200599d565b90508160200151826000015183608001518360405162005d1190620060d0565b62005d20949392919062007158565b604051809103906000f08015801562005d3d573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051601f80546001808201835560009283527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d807909101805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0395861617909155845184168352602b9095526040918290208651815487169085161781559351908401805486169184169190911790558401516002830180549094169116179091556060820151829190600382019062005e0e908262007196565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c8201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820155610240820151601282019062005ee5908262007196565b5061026082015160138201805460ff1916600183600381111562005f0d5762005f0d62006227565b0217905550505050565b60008062005f24620060de565b60008060ff9050604083875160208901845afa62005f4157600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000600381111562006030576200603062006227565b905290565b6040518060a001604052806005906020820280368337509192915050565b508054600082559060005260206000209081019062000f619190620060fc565b508054620060819062006977565b6000825580601f1062006092575050565b601f01602090049060005260206000209081019062000f61919062006121565b60405180602001604052806001906020820280368337509192915050565b611dde806200725b83390190565b60405180604001604052806002906020820280368337509192915050565b808211156200611d57600062006113828262006073565b50600101620060fc565b5090565b5b808211156200611d576000815560010162006122565b60005b83811015620061555781810151838201526020016200613b565b50506000910152565b600081518084526200617881602086016020860162006138565b601f01601f19169290920160200192915050565b602081526000620061a160208301846200615e565b9392505050565b6001600160a01b038116811462000f6157600080fd5b60008060408385031215620061d257600080fd5b8235620061df81620061a8565b946020939093013593505050565b6000602082840312156200620057600080fd5b8135620061a181620061a8565b6000602082840312156200622057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106200628e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208152620062ad6020820183516001600160a01b03169052565b60006020830151620062ca60408401826001600160a01b03169052565b5060408301516001600160a01b0381166060840152506060830151610280806080850152620062fe6102a08501836200615e565b9150608085015160a085015260a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101408181870152808701519150506101608181870152808701519150506101808181870152808701519150506101a062006386818701836001600160a01b03169052565b8601516101c0868101919091528601516101e080870191909152860151610200808701919091528601516102208087019190915286015161024080870191909152860151858403601f190161026080880191909152909150620063ea84836200615e565b935080870151915050620064018286018262006256565b5090949350505050565b6000806000606084860312156200642157600080fd5b83356200642e81620061a8565b925060208401356200644081620061a8565b929592945050506040919091013590565b6000602082840312156200646457600080fd5b813567ffffffffffffffff8111156200647c57600080fd5b82016102808185031215620061a157600080fd5b600081518084526020808501808196508360051b8101915082860160005b8581101562006505578284038952815180516001600160a01b031685528581015186860152604090810151606091860182905290620064f0818701836200615e565b9a87019a9550505090840190600101620064ae565b5091979650505050505050565b821515815260406020820152600062005aea604083018462006490565b600080604083850312156200654357600080fd5b50508035926020909101359150565b600061024082019050855182526020860151602083015260408601516040830152606086015160608301526080860151608083015260a08601516001600160a01b0380821660a08501528087511660c08501528060208801511660e0850152806040880151166101008501528060608801511661012085015250506080850151620065e96101408401826001600160a01b03169052565b5060a08501516001600160a01b0390811661016084015260c090950151851661018083015283519094166101a082015260208301516101c082015260408301516101e082015260609092015161020083015261022090910152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200668857600080fd5b813567ffffffffffffffff80821115620066a657620066a662006647565b604051601f8301601f19908116603f01168101908282118183101715620066d157620066d162006647565b81604052838152866020858801011115620066eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156200672257600080fd5b843567ffffffffffffffff808211156200673b57600080fd5b620067498883890162006676565b9550602087013591506200675d82620061a8565b909350604086013590808211156200677457600080fd5b620067828883890162006676565b935060608701359150808211156200679957600080fd5b50620067a88782880162006676565b91505092959194509250565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156200682b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452620068188583516200615e565b94509285019290850190600101620067db565b5092979650505050505050565b602081526000620061a1602083018462006490565b6020808252825182820181905260009190848201906040850190845b81811015620068905783516001600160a01b03168352928401929184019160010162006869565b50909695505050505050565b60008060408385031215620068b057600080fd5b823567ffffffffffffffff80821115620068c957600080fd5b620068d78683870162006676565b93506020850135915080821115620068ee57600080fd5b50620068fd8582860162006676565b9150509250929050565b6040815260006200691c60408301856200615e565b82810360208401526200693081856200615e565b95945050505050565b600080604083850312156200694d57600080fd5b82356200695a81620061a8565b915060208301356200696c81620061a8565b809150509250929050565b600181811c908216806200698c57607f821691505b602082108103620069c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111562000e4c5762000e4c620069cc565b8082018082111562000e4c5762000e4c620069cc565b6000813562000e4c81620061a8565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811262006a6c57600080fd5b83018035915067ffffffffffffffff82111562006a8857600080fd5b60200191503681900382131562006a9e57600080fd5b9250929050565b601f8211156200504e57600081815260208120601f850160051c8101602086101562006ace5750805b601f850160051c820191505b8181101562006aef5782815560010162006ada565b505050505050565b67ffffffffffffffff83111562006b125762006b1262006647565b62006b2a8362006b23835462006977565b8362006aa5565b6000601f84116001811462006b61576000851562006b485750838201355b600019600387901b1c1916600186901b178355620017a8565b600083815260209020601f19861690835b8281101562006b94578685013582556020948501946001909201910162006b72565b508682101562006bb25760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600081356004811062000e4c57600080fd5b6004821062006c0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60ff1981541660ff831681178255505050565b62006c5a62006c308362006a27565b825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0391909116178255565b62006c9a62006c6c6020840162006a27565b600183016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006cda62006cac6040840162006a27565b600283016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b62006ce9606083018362006a36565b62006cf981836003860162006af7565b50506080820135600482015560a0820135600582015560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a820155610160820135600b82015562006d9062006d62610180840162006a27565b600c83016001600160a01b03821673ffffffffffffffffffffffffffffffffffffffff198254161781555050565b6101a0820135600d8201556101c0820135600e8201556101e0820135600f8201556102008201356010820155610220820135601182015562006dd761024083018362006a36565b62006de781836012860162006af7565b50506200163362006dfc610260840162006bc4565b6013830162006bd6565b60006020828403121562006e1957600080fd5b5051919050565b60006020828403121562006e3357600080fd5b81518015158114620061a157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820362006e895762006e89620069cc565b5060010190565b808202811582820484141762000e4c5762000e4c620069cc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008262006eeb5762006eeb62006eaa565b500690565b60006001600160a01b0380881683528087166020840152808616604084015260a0606084015262006f2560a08401866200615e565b91508084166080840152509695505050505050565b81810362006f46575050565b62006f52825462006977565b67ffffffffffffffff81111562006f6d5762006f6d62006647565b62006f858162006f7e845462006977565b8462006aa5565b6000601f82116001811462006fbc576000831562006fa35750848201545b600019600385901b1c1916600184901b178455620017a8565b600085815260209020601f19841690600086815260209020845b8381101562006ff8578286015482556001958601959091019060200162006fd6565b5085831015620070175781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262007039576200703962006eaa565b500490565b600080604083850312156200705257600080fd5b505080516020909101519092909150565b600084516200707781846020890162006138565b8451908301906200708d81836020890162006138565b8451910190620070a281836020880162006138565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080810162006930606083018462006256565b60ff818116838216019081111562000e4c5762000e4c620069cc565b600084516200710a81846020890162006138565b8451908301906200712081836020890162006138565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169301928352505060140192915050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526200718c60808301846200615e565b9695505050505050565b815167ffffffffffffffff811115620071b357620071b362006647565b620071c48162006f7e845462006977565b602080601f831160018114620071fc5760008415620071e35750858301515b600019600386901b1c1916600185901b17855562006aef565b600085815260208120601f198616915b828110156200722d578886015182559484019460019091019084016200720c565b50858210156200701757939096015160001960f8600387901b161c19169092555050600190811b0190555056fe60806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033a264697066735822122096d271c3002d9fc72e98e6a2202fc6e1eddff3f41c79bafafaca5417b3e4245464736f6c6343000815003360806040523480156200001157600080fd5b5060405162001dde38038062001dde833981016040819052620000349162000151565b6127108211156200004457600080fd5b600d80546001600160a01b038087166001600160a01b031992831617909255600e805492861692909116919091179055600f8290556040516200008c9082906020016200023e565b604051602081830303815290604052600b9081620000ab9190620002fc565b5080604051602001620000bf91906200023e565b604051602081830303815290604052600c9081620000de9190620002fc565b5050600080546001600160a01b0319163317905550620003c8915050565b6001600160a01b03811681146200011257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001485781810151838201526020016200012e565b50506000910152565b600080600080608085870312156200016857600080fd5b84516200017581620000fc565b60208601519094506200018881620000fc565b6040860151606087015191945092506001600160401b0380821115620001ad57600080fd5b818701915087601f830112620001c257600080fd5b815181811115620001d757620001d762000115565b604051601f8201601f19908116603f0116810190838211818310171562000202576200020262000115565b816040528281528a60208487010111156200021c57600080fd5b6200022f8360208301602088016200012b565b979a9699509497505050505050565b644c4e544e2d60d81b815260008251620002608160058501602087016200012b565b9190910160050192915050565b600181811c908216806200028257607f821691505b602082108103620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002f757600081815260208120601f850160051c81016020861015620002d25750805b601f850160051c820191505b81811015620002f357828155600101620002de565b5050505b505050565b81516001600160401b0381111562000318576200031862000115565b62000330816200032984546200026d565b84620002a9565b602080601f8311600181146200036857600084156200034f5750858301515b600019600386901b1c1916600185901b178555620002f3565b600085815260208120601f198616915b82811015620003995788860151825594840194600190910190840162000378565b5085821015620003b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a0680620003d86000396000f3fe60806040526004361061018b5760003560e01c806359355736116100d6578063949813b81161007f578063a0ce552d11610059578063a0ce552d146104b0578063a9059cbb146104c3578063dd62ed3e146104e357600080fd5b8063949813b81461044657806395d89b411461047b5780639dc29fac1461049057600080fd5b806370a08231116100b057806370a08231146103c35780637eee288d1461040657806384955c881461042657600080fd5b8063593557361461033d5780635ea1d6f81461038057806361d027b31461039657600080fd5b8063282d3fdf11610138578063372500ab11610112578063372500ab146102b65780633a5381b5146102cb57806340c10f191461031d57600080fd5b8063282d3fdf146102645780632f2c3f2e14610284578063313ce5671461029a57600080fd5b8063187cf4d711610169578063187cf4d71461020a57806319fac8fd1461022257806323b872dd1461024457600080fd5b806306fdde0314610190578063095ea7b3146101bb57806318160ddd146101eb575b600080fd5b34801561019c57600080fd5b506101a5610536565b6040516101b2919061174b565b60405180910390f35b3480156101c757600080fd5b506101db6101d63660046117e0565b6105c8565b60405190151581526020016101b2565b3480156101f757600080fd5b506004545b6040519081526020016101b2565b34801561021657600080fd5b506101fc633b9aca0081565b34801561022e57600080fd5b5061024261023d36600461180a565b6105df565b005b34801561025057600080fd5b506101db61025f366004611823565b610676565b34801561027057600080fd5b5061024261027f3660046117e0565b6107b7565b34801561029057600080fd5b506101fc61271081565b3480156102a657600080fd5b50604051601281526020016101b2565b3480156102c257600080fd5b50610242610932565b3480156102d757600080fd5b50600d546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561032957600080fd5b506102426103383660046117e0565b610ae6565b34801561034957600080fd5b506101fc61035836600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b34801561038c57600080fd5b506101fc600f5481565b3480156103a257600080fd5b50600e546102f89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506101fc6103de36600461185f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b34801561041257600080fd5b506102426104213660046117e0565b610bd0565b34801561043257600080fd5b506101fc61044136600461185f565b610d2d565b34801561045257600080fd5b5061046661046136600461185f565b610d68565b604080519283526020830191909152016101b2565b34801561048757600080fd5b506101a5610dea565b34801561049c57600080fd5b506102426104ab3660046117e0565b610df9565b6104666104be36600461180a565b610edb565b3480156104cf57600080fd5b506101db6104de3660046117e0565b611233565b3480156104ef57600080fd5b506101fc6104fe366004611881565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205490565b6060600b8054610545906118b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610571906118b4565b80156105be5780601f10610593576101008083540402835291602001916105be565b820191906000526020600020905b8154815290600101906020018083116105a157829003601f168201915b5050505050905090565b60006105d533848461129f565b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106715760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e747261637400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600f55565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602090815260408083203384529091528120548281101561071d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610668565b610731853361072c8685611936565b61129f565b61073b858461141e565b610745848461153b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107a491815260200190565b60405180910390a3506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108445760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020908152604080832054600190925290912054829161088191611936565b10156108f45760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201527f61626c65000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611949565b90915550505050565b60008061093e33611594565b336000818152600560209081526040808320839055600890915280822082905551939550919350909184908381818185875af1925050503d80600081146109a1576040519150601f19603f3d011682016040523d82523d6000602084013e6109a6565b606091505b50509050806109f75760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e642041544e00000000000000000000000000006044820152606401610668565b6000546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb906044016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a92919061195c565b905080610ae15760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f2073656e64204e544e00000000000000000000000000006044820152606401610668565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b735760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610b7d828261153b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c5d5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054811115610cf85760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081208054839290610929908490611936565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602090815260408083205460019092528220546105d99190611936565b600080600080610d7785611665565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600560205260409020549193509150610dad908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260086020526040902054909450610de1908290611949565b92505050915091565b6060600c8054610545906118b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e865760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b610e90828261141e565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bc4565b60008054819073ffffffffffffffffffffffffffffffffffffffff163314610f6b5760405162461bcd60e51b815260206004820152602860248201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060448201527f436f6e74726163740000000000000000000000000000000000000000000000006064820152608401610668565b600f54349060009061271090610f81908461197e565b610f8b9190611995565b905081811115610fdd5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642061746e2076616c696461746f7220726577617264000000006044820152606401610668565b610fe78183611936565b600e5460405191935073ffffffffffffffffffffffffffffffffffffffff16906108fc9083906000818181858888f193505050503d8060008114611047576040519150601f19603f3d011682016040523d82523d6000602084013e61104c565b606091505b5050506000612710600f5487611062919061197e565b61106c9190611995565b9050858111156110be5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206e746e2076616c696461746f7220726577617264000000006044820152606401610668565b6110c88187611936565b600054600e546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101859052929850169063a9059cbb906044016020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611169919061195c565b5060045460009061117e633b9aca008661197e565b6111889190611995565b9050806007546111989190611949565b6007556004546000906111af633b9aca008a61197e565b6111b99190611995565b905080600a546111c99190611949565b600a55600454600090633b9aca00906111e2908561197e565b6111ec9190611995565b90506000633b9aca0060045484611203919061197e565b61120d9190611995565b90506112198287611949565b6112238287611949565b9850985050505050505050915091565b600061123f338361141e565b611249838361153b565b60405182815273ffffffffffffffffffffffffffffffffffffffff84169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166113275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff82166113b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610668565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61142782611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160209081526040808320546002909252909120546114659082611936565b8211156114b45760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610668565b6114be8282611936565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090205580820361151f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832083905560099091528120555b81600460008282546115319190611936565b9091555050505050565b61154482611594565b505073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120805483929061157b908490611949565b9250508190555080600460008282546109299190611949565b6000806000806115a385611665565b73ffffffffffffffffffffffffffffffffffffffff871660009081526005602052604090205491935091506115d9908390611949565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260056020908152604080832084905560075460068352818420556008909152902054909450611625908290611949565b73ffffffffffffffffffffffffffffffffffffffff9095166000908152600860209081526040808320889055600a54600990925290912055509193915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205481908082036116a05750600093849350915050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546007546116d39190611936565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260096020526040812054600a54929350909161170b9190611936565b9050633b9aca0061171c848461197e565b6117269190611995565b9450633b9aca00611737848361197e565b6117419190611995565b9350505050915091565b600060208083528351808285015260005b818110156117785785810183015185820160400152820161175c565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117db57600080fd5b919050565b600080604083850312156117f357600080fd5b6117fc836117b7565b946020939093013593505050565b60006020828403121561181c57600080fd5b5035919050565b60008060006060848603121561183857600080fd5b611841846117b7565b925061184f602085016117b7565b9150604084013590509250925092565b60006020828403121561187157600080fd5b61187a826117b7565b9392505050565b6000806040838503121561189457600080fd5b61189d836117b7565b91506118ab602084016117b7565b90509250929050565b600181811c908216806118c857607f821691505b602082108103611901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105d9576105d9611907565b808201808211156105d9576105d9611907565b60006020828403121561196e57600080fd5b8151801515811461187a57600080fd5b80820281158282048414176105d9576105d9611907565b6000826119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205c7215cb4e7d69c128f5235349553e2fd8ec69f18be0fdcdb8ac5495808e793564736f6c63430008150033") var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ { @@ -325,7 +328,13 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ { "indexed" : false, "internalType" : "uint256", - "name" : "amount", + "name" : "atnAmount", + "type" : "uint256" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "ntnAmount", "type" : "uint256" } ], @@ -435,6 +444,19 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [], + "name" : "atnTotalRedistributed", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -554,6 +576,11 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "name" : "unbondingPeriod", "type" : "uint256" }, + { + "internalType" : "uint256", + "name" : "initialInflationReserve", + "type" : "uint256" + }, { "internalType" : "address payable", "name" : "treasuryAccount", @@ -595,6 +622,11 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "internalType" : "contract UpgradeManager", "name" : "upgradeManagerContract", "type" : "address" + }, + { + "internalType" : "contract IInflationController", + "name" : "inflationControllerContract", + "type" : "address" } ], "internalType" : "struct Autonity.Contracts", @@ -1125,6 +1157,19 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "inflationReserve", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [], "name" : "lastEpochBlock", @@ -1138,6 +1183,19 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "view", "type" : "function" }, + { + "inputs" : [], + "name" : "lastEpochTime", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, { "inputs" : [ { @@ -1269,6 +1327,19 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "nonpayable", "type" : "function" }, + { + "inputs" : [ + { + "internalType" : "contract IInflationController", + "name" : "_address", + "type" : "address" + } + ], + "name" : "setInflationControllerContract", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, { "inputs" : [ { @@ -1399,19 +1470,6 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "stateMutability" : "pure", "type" : "function" }, - { - "inputs" : [], - "name" : "totalRedistributed", - "outputs" : [ - { - "internalType" : "uint256", - "name" : "", - "type" : "uint256" - } - ], - "stateMutability" : "view", - "type" : "function" - }, { "inputs" : [], "name" : "totalSupply", @@ -1453,17 +1511,17 @@ var AutonityUpgradeTestAbi, _ = abi.JSON(strings.NewReader(`[ "inputs" : [ { "internalType" : "address", - "name" : "sender", + "name" : "_sender", "type" : "address" }, { "internalType" : "address", - "name" : "recipient", + "name" : "_recipient", "type" : "address" }, { "internalType" : "uint256", - "name" : "amount", + "name" : "_amount", "type" : "uint256" } ], diff --git a/params/generated/InflationController.go b/params/generated/InflationController.go new file mode 100644 index 0000000000..6c2d6f2f20 --- /dev/null +++ b/params/generated/InflationController.go @@ -0,0 +1,242 @@ +package generated + +import ( + "strings" + + "github.com/autonity/autonity/accounts/abi" + "github.com/autonity/autonity/common" +) + +var InflationControllerBytecode = common.Hex2Bytes("608060405234801561001057600080fd5b506040516113b93803806113b983398101604081905261002f9161005c565b805160005560208101516001556040810151600255606081015160035560800151600455426005556100d9565b600060a0828403121561006e57600080fd5b60405160a081016001600160401b038111828210171561009e57634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b6112d1806100e86000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806392eff3cd1461003b578063cff0ab9614610061575b600080fd5b61004e610049366004611107565b6100a3565b6040519081526020015b60405180910390f35b60005460015460025460035460045461007b949392919085565b604080519586526020860194909452928401919091526060830152608082015260a001610058565b6000806100bc600554856100b79190611168565b610150565b905060006100d1600554856100b79190611168565b60035490915081136100f1576100e8878383610241565b92505050610148565b60035482121561013857600061010d8884600060030154610241565b905060006101218860006003015485610341565b905061012d818361117b565b945050505050610148565b610143868383610341565b925050505b949350505050565b6000610184670de0b6b3a76400007f80000000000000000000000000000000000000000000000000000000000000006111bd565b8212156101c5576040517f99474eeb000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b6101f7670de0b6b3a76400007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6111bd565b821315610233576040517f9d581091000000000000000000000000000000000000000000000000000000008152600481018390526024016101bc565b50670de0b6b3a76400000290565b60008061025b6000600201546102576000610150565b1490565b1561029757600054600154610290919061028b906102839061027d9084610365565b88610374565b6003546104e0565b610610565b9050610309565b60006102ab61028360006002015487610374565b905060006102e36102cd6102be84610625565b6102c86001610150565b610365565b6102de6102be600060020154610625565b6104e0565b6000546001549192506103049161028b906102fe9083610365565b84610374565b925050505b600061032a6103208361031b89610150565b610374565b61031b8688610365565b905061033581610693565b925050505b9392505050565b600061014861035d61035561032087610150565b600454610374565b610693565b90565b600061033a610362838561124c565b600082827f80000000000000000000000000000000000000000000000000000000000000008214806103c557507f800000000000000000000000000000000000000000000000000000000000000081145b156103fc576040517fa6070c2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000841261040d5783610412565b836000035b9150600083126104225782610427565b826000035b9050600061043583836106a7565b90507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81111561049b576040517f120b5b4300000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044016101bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858518136104d3816104cf578260000390565b8290565b9998505050505050505050565b600082827f800000000000000000000000000000000000000000000000000000000000000082148061053157507f800000000000000000000000000000000000000000000000000000000000000081145b15610568576040517f9fe2b45000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008412610579578361057e565b836000035b91506000831261058e5782610593565b826000035b905060006105aa83670de0b6b3a7640000846107ae565b90507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81111561049b576040517fd49c26b300000000000000000000000000000000000000000000000000000000815260048101899052602481018890526044016101bc565b600061033a6103628385611273565b92915050565b600081680736ea4425c11ac63081131561066e576040517fca7ec0c5000000000000000000000000000000000000000000000000000000008152600481018490526024016101bc565b6714057b7ef767814f810261014861068e670de0b6b3a7640000835b0590565b6108b9565b600061061f670de0b6b3a7640000836111bd565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609848602925082811083820303915050806000036106f95750670de0b6b3a76400009004905061061f565b670de0b6b3a76400008110610744576040517f5173648d00000000000000000000000000000000000000000000000000000000815260048101869052602481018590526044016101bc565b6000670de0b6b3a7640000858709620400008185030493109091037d40000000000000000000000000000000000000000000000000000000000002919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003610806578382816107fc576107fc61118e565b049250505061033a565b838110610850576040517f63a057780000000000000000000000000000000000000000000000000000000081526004810187905260248101869052604481018590526064016101bc565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000818181121561092c577ffffffffffffffffffffffffffffffffffffffffffffffffcc22e87f6eb468eeb8112156108f55750600092915050565b61092561090861036261068e8460000390565b6ec097ce7bc90715b34b9f10000000008161068a5761068a61118e565b915061098d565b680a688906bd8affffff811315610972576040517f0360d028000000000000000000000000000000000000000000000000000000008152600481018490526024016101bc565b670de0b6b3a7640000604082901b0561014861036282610993565b50919050565b7780000000000000000000000000000000000000000000000067ff00000000000000821615610ab4576780000000000000008216156109db5768016a09e667f3bcc9090260401c5b6740000000000000008216156109fa576801306fe0a31b7152df0260401c5b672000000000000000821615610a19576801172b83c7d517adce0260401c5b671000000000000000821615610a385768010b5586cf9890f62a0260401c5b670800000000000000821615610a57576801059b0d31585743ae0260401c5b670400000000000000821615610a7657680102c9a3e778060ee70260401c5b670200000000000000821615610a955768010163da9fb33356d80260401c5b670100000000000000821615610ab457680100b1afa5abcbed610260401c5b66ff000000000000821615610bb3576680000000000000821615610ae15768010058c86da1c09ea20260401c5b6640000000000000821615610aff576801002c605e2e8cec500260401c5b6620000000000000821615610b1d57680100162f3904051fa10260401c5b6610000000000000821615610b3b576801000b175effdc76ba0260401c5b6608000000000000821615610b5957680100058ba01fb9f96d0260401c5b6604000000000000821615610b775768010002c5cc37da94920260401c5b6602000000000000821615610b95576801000162e525ee05470260401c5b6601000000000000821615610bb35768010000b17255775c040260401c5b65ff0000000000821615610ca95765800000000000821615610bde576801000058b91b5bc9ae0260401c5b65400000000000821615610bfb57680100002c5c89d5ec6d0260401c5b65200000000000821615610c185768010000162e43f4f8310260401c5b65100000000000821615610c3557680100000b1721bcfc9a0260401c5b65080000000000821615610c525768010000058b90cf1e6e0260401c5b65040000000000821615610c6f576801000002c5c863b73f0260401c5b65020000000000821615610c8c57680100000162e430e5a20260401c5b65010000000000821615610ca9576801000000b1721835510260401c5b64ff00000000821615610d9657648000000000821615610cd257680100000058b90c0b490260401c5b644000000000821615610cee5768010000002c5c8601cc0260401c5b642000000000821615610d0a576801000000162e42fff00260401c5b641000000000821615610d265768010000000b17217fbb0260401c5b640800000000821615610d42576801000000058b90bfce0260401c5b640400000000821615610d5e57680100000002c5c85fe30260401c5b640200000000821615610d7a5768010000000162e42ff10260401c5b640100000000821615610d9657680100000000b17217f80260401c5b63ff000000821615610e7a576380000000821615610dbd5768010000000058b90bfc0260401c5b6340000000821615610dd8576801000000002c5c85fe0260401c5b6320000000821615610df357680100000000162e42ff0260401c5b6310000000821615610e0e576801000000000b17217f0260401c5b6308000000821615610e2957680100000000058b90c00260401c5b6304000000821615610e445768010000000002c5c8600260401c5b6302000000821615610e5f576801000000000162e4300260401c5b6301000000821615610e7a5768010000000000b172180260401c5b62ff0000821615610f555762800000821615610e9f576801000000000058b90c0260401c5b62400000821615610eb957680100000000002c5c860260401c5b62200000821615610ed35768010000000000162e430260401c5b62100000821615610eed57680100000000000b17210260401c5b62080000821615610f075768010000000000058b910260401c5b62040000821615610f21576801000000000002c5c80260401c5b62020000821615610f3b57680100000000000162e40260401c5b62010000821615610f55576801000000000000b1720260401c5b61ff0082161561102757618000821615610f7857680100000000000058b90260401c5b614000821615610f915768010000000000002c5d0260401c5b612000821615610faa576801000000000000162e0260401c5b611000821615610fc35768010000000000000b170260401c5b610800821615610fdc576801000000000000058c0260401c5b610400821615610ff557680100000000000002c60260401c5b61020082161561100e57680100000000000001630260401c5b61010082161561102757680100000000000000b10260401c5b60ff8216156110f057608082161561104857680100000000000000590260401c5b6040821615611060576801000000000000002c0260401c5b602082161561107857680100000000000000160260401c5b6010821615611090576801000000000000000b0260401c5b60088216156110a857680100000000000000060260401c5b60048216156110c057680100000000000000030260401c5b60028216156110d857680100000000000000010260401c5b60018216156110f057680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b6000806000806080858703121561111d57600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561061f5761061f611139565b8082018082111561061f5761061f611139565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826111f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561124757611247611139565b500590565b818103600083128015838313168383128216171561126c5761126c611139565b5092915050565b808201828112600083128015821682158216171561129357611293611139565b50509291505056fea26469706673582212206d0cd18427e74f6a70c81d82ceedb94150fd0b5c5693c6d1505d32a1fce5038c64736f6c63430008150033") + +var InflationControllerAbi, _ = abi.JSON(strings.NewReader(`[ + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "SD59x18", + "name" : "iInit", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "iTrans", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "aE", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "T", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "iPerm", + "type" : "int256" + } + ], + "internalType" : "struct InflationController.Params", + "name" : "_params", + "type" : "tuple" + } + ], + "stateMutability" : "nonpayable", + "type" : "constructor" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "x", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "y", + "type" : "uint256" + } + ], + "name" : "PRBMath_MulDiv18_Overflow", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "x", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "y", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "denominator", + "type" : "uint256" + } + ], + "name" : "PRBMath_MulDiv_Overflow", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "int256", + "name" : "x", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Convert_Overflow", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "int256", + "name" : "x", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Convert_Underflow", + "type" : "error" + }, + { + "inputs" : [], + "name" : "PRBMath_SD59x18_Div_InputTooSmall", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "SD59x18", + "name" : "x", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "y", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Div_Overflow", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "SD59x18", + "name" : "x", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Exp2_InputTooBig", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "SD59x18", + "name" : "x", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Exp_InputTooBig", + "type" : "error" + }, + { + "inputs" : [], + "name" : "PRBMath_SD59x18_Mul_InputTooSmall", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "SD59x18", + "name" : "x", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "y", + "type" : "int256" + } + ], + "name" : "PRBMath_SD59x18_Mul_Overflow", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "_currentSupply", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "_inflationReserve", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "_lastEpochTime", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "_currentEpochTime", + "type" : "uint256" + } + ], + "name" : "calculateSupplyDelta", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "params", + "outputs" : [ + { + "internalType" : "SD59x18", + "name" : "iInit", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "iTrans", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "aE", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "T", + "type" : "int256" + }, + { + "internalType" : "SD59x18", + "name" : "iPerm", + "type" : "int256" + } + ], + "stateMutability" : "view", + "type" : "function" + } +] +`)) diff --git a/params/protocol_contracts.go b/params/protocol_contracts.go index 62630cab6a..8abfabd785 100644 --- a/params/protocol_contracts.go +++ b/params/protocol_contracts.go @@ -19,6 +19,11 @@ import ( ) var ( + DecimalPrecision = int64(18) + SecondsInYear = int64(365 * 24 * 60 * 60) + DecimalFactor = new(big.Int).Exp(big.NewInt(10), big.NewInt(DecimalPrecision), nil) + NTNDecimalFactor = new(big.Int).SetUint64(Ether) + //Oracle Contract defaults OracleVotePeriod = uint64(30) OracleInitialSymbols = []string{"AUD-USD", "CAD-USD", "EUR-USD", "GBP-USD", "JPY-USD", "SEK-USD", "ATN-USD", "NTN-USD", "NTN-ATN"} @@ -47,6 +52,14 @@ var ( InitialAllocation: (*math.HexOrDecimal256)(new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(256), nil), common.Big1)), } + DefaultInflationControllerGenesis = &InflationControllerGenesis{ + IInit: (*math.HexOrDecimal256)(new(big.Int).Div(new(big.Int).Mul(big.NewInt(75), DecimalFactor), big.NewInt(1000*SecondsInYear))), // 7.5% AR + ITrans: (*math.HexOrDecimal256)(new(big.Int).Div(new(big.Int).Mul(big.NewInt(55), DecimalFactor), big.NewInt(1000*SecondsInYear))), // 5.5% AR + IPerm: (*math.HexOrDecimal256)(new(big.Int).Div(new(big.Int).Mul(big.NewInt(17_328), DecimalFactor), big.NewInt(100_000*SecondsInYear))), // 17.328% AR + T: (*math.HexOrDecimal256)(new(big.Int).Mul(big.NewInt(4*SecondsInYear), DecimalFactor)), + Ae: (*math.HexOrDecimal256)(new(big.Int).Div(new(big.Int).Mul(big.NewInt(-1_429), DecimalFactor), big.NewInt(1_000))), // -1.429 + } + DefaultAccountabilityConfig = &AccountabilityGenesis{ InnocenceProofSubmissionWindow: 100, BaseSlashingRateLow: 1000, // 10% @@ -57,29 +70,31 @@ var ( SlashingRatePrecision: 10_000, } - DeployerAddress = common.Address{} - AutonityContractAddress = crypto.CreateAddress(DeployerAddress, 0) - AccountabilityContractAddress = crypto.CreateAddress(DeployerAddress, 1) - OracleContractAddress = crypto.CreateAddress(DeployerAddress, 2) - ACUContractAddress = crypto.CreateAddress(DeployerAddress, 3) - SupplyControlContractAddress = crypto.CreateAddress(DeployerAddress, 4) - StabilizationContractAddress = crypto.CreateAddress(DeployerAddress, 5) - UpgradeManagerContractAddress = crypto.CreateAddress(DeployerAddress, 6) + DeployerAddress = common.Address{} + AutonityContractAddress = crypto.CreateAddress(DeployerAddress, 0) + AccountabilityContractAddress = crypto.CreateAddress(DeployerAddress, 1) + OracleContractAddress = crypto.CreateAddress(DeployerAddress, 2) + ACUContractAddress = crypto.CreateAddress(DeployerAddress, 3) + SupplyControlContractAddress = crypto.CreateAddress(DeployerAddress, 4) + StabilizationContractAddress = crypto.CreateAddress(DeployerAddress, 5) + UpgradeManagerContractAddress = crypto.CreateAddress(DeployerAddress, 6) + InflationControllerContractAddress = crypto.CreateAddress(DeployerAddress, 7) ) type AutonityContractGenesis struct { - Bytecode hexutil.Bytes `json:"bytecode,omitempty" toml:",omitempty"` - ABI *abi.ABI `json:"abi,omitempty" toml:",omitempty"` - MinBaseFee uint64 `json:"minBaseFee"` - EpochPeriod uint64 `json:"epochPeriod"` - UnbondingPeriod uint64 `json:"unbondingPeriod"` - BlockPeriod uint64 `json:"blockPeriod"` - MaxCommitteeSize uint64 `json:"maxCommitteeSize"` - Operator common.Address `json:"operator"` - Treasury common.Address `json:"treasury"` - TreasuryFee uint64 `json:"treasuryFee"` - DelegationRate uint64 `json:"delegationRate"` - Validators []*Validator `json:"validators"` // todo: Can we change that to []Validator + Bytecode hexutil.Bytes `json:"bytecode,omitempty" toml:",omitempty"` + ABI *abi.ABI `json:"abi,omitempty" toml:",omitempty"` + MinBaseFee uint64 `json:"minBaseFee"` + EpochPeriod uint64 `json:"epochPeriod"` + UnbondingPeriod uint64 `json:"unbondingPeriod"` + BlockPeriod uint64 `json:"blockPeriod"` + MaxCommitteeSize uint64 `json:"maxCommitteeSize"` + Operator common.Address `json:"operator"` + Treasury common.Address `json:"treasury"` + TreasuryFee uint64 `json:"treasuryFee"` + DelegationRate uint64 `json:"delegationRate"` + InitialInflationReserve *math.HexOrDecimal256 `json:"initialInflationReserve"` + Validators []*Validator `json:"validators"` // todo: Can we change that to []Validator } type AccountabilityGenesis struct { @@ -401,3 +416,30 @@ func (s *SupplyControlGenesis) SetDefaults() { s.InitialAllocation = DefaultSupplyControlGenesis.InitialAllocation } } + +type InflationControllerGenesis struct { + // Those parameters need to be compatible with the solidity SD59x18 format + IInit *math.HexOrDecimal256 `json:"iInit"` + ITrans *math.HexOrDecimal256 `json:"iTrans"` + IPerm *math.HexOrDecimal256 `json:"iPerm"` + T *math.HexOrDecimal256 `json:"T"` + Ae *math.HexOrDecimal256 `json:"ae"` +} + +func (s *InflationControllerGenesis) SetDefaults() { + if s.IInit == nil { + s.IInit = DefaultInflationControllerGenesis.IInit + } + if s.ITrans == nil { + s.IInit = DefaultInflationControllerGenesis.ITrans + } + if s.IPerm == nil { + s.IInit = DefaultInflationControllerGenesis.IPerm + } + if s.T == nil { + s.IInit = DefaultInflationControllerGenesis.T + } + if s.Ae == nil { + s.IInit = DefaultInflationControllerGenesis.Ae + } +} diff --git a/signer/fourbyte/4byte.go b/signer/fourbyte/4byte.go index 46eb04e34f..29f0b4deeb 100644 --- a/signer/fourbyte/4byte.go +++ b/signer/fourbyte/4byte.go @@ -1,6 +1,6 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// 4byte.json (4.226kB) +// 4byte.json (6.439kB) package fourbyte @@ -65,8 +65,8 @@ var __4byteJson = []byte(`{ "1604e416": "epochReward()", "9c98e471": "epochTotalBondedStake()", "4bb278f3": "finalize()", - "d861b0e8": "finalizeInitialization()", "43645969": "getBlockPeriod()", + "e485c6fb": "getBondingReq(uint256,uint256)", "ab8f6ffe": "getCommittee()", "a8b2216e": "getCommitteeEnodes()", "96b477cb": "getEpochFromBlock(uint256)", @@ -76,84 +76,120 @@ var __4byteJson = []byte(`{ "11220633": "getMinimumBaseFee()", "b66b3e79": "getNewContract()", "e7f43c68": "getOperator()", - "833b1fce": "getOracle()", "5f7d3949": "getProposer(uint256,uint256)", "f7866ee3": "getTreasuryAccount()", "29070c6d": "getTreasuryFee()", "6fd2c80b": "getUnbondingPeriod()", + "55230e93": "getUnbondingReq(uint256,uint256)", "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "44697221": "headBondingID()", + "4b0dff63": "headUnbondingID()", "c2362dd5": "lastEpochBlock()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", - "84467fdb": "registerValidator(string,address,bytes,bytes)", + "ad722d4d": "registerValidator(string,address,bytes)", "cf9c5719": "resetContractUpgrade()", "1250a28d": "setAccountabilityContract(address)", - "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", - "cfd19fb9": "setStabilizationContract(address)", - "b3ecbadd": "setSupplyControlContract(address)", "d886f8a2": "setTreasuryAccount(address)", "77e741c7": "setTreasuryFee(uint256)", "114eaf55": "setUnbondingPeriod(uint256)", - "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", + "787a2433": "tailBondingID()", + "662cd7f4": "tailUnbondingID()", "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", "a5d059ca": "unbond(address,uint256)", - "784304b5": "updateEnode(address,string)", - "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", + "d292e532": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", "187cf4d7": "FEE_FACTOR_UNIT_RECIP()", "372500ab": "claimRewards()", + "fb489a7b": "redistribute()", + "19fac8fd": "setCommissionRate(uint256)", + "949813b8": "unclaimedRewards(address)", + "9670c0bc": "getPrecision()", + "9f8743f7": "getRound()", + "3c8510fd": "getRoundData(uint256,string)", + "df7f710e": "getSymbols()", + "b78dec52": "getVotePeriod()", + "cdd72253": "getVoters()", + "e6a02a28": "lastRoundBlock()", + "aa2f89b5": "lastVoterUpdateRound()", + "33f98c77": "latestRoundData(string)", + "5281b5c6": "newSymbols(uint256)", + "4c56ea56": "reports(string,address)", + "146ca531": "round()", + "b3ab15fb": "setOperator(address)", + "8d4f75d2": "setSymbols(string[])", + "845023f2": "setVoters(address[])", + "08f21ff5": "symbolUpdatedRound()", + "ccce413b": "symbols(uint256)", + "307de9b6": "vote(uint256,int256[],uint256)", + "a7813587": "votePeriod()", + "5412b3ae": "votingInfo(address)", + "4dc925d3": "ACCUSATION_CONTRACT()", + "8e153dc3": "INNOCENCE_CONTRACT()", + "925c5492": "MISBEHAVIOUR_CONTRACT()", + "1de9d9b6": "distributeRewards(address)", + "6c9789b0": "finalize(bool)", + "833b1fce": "getOracle()", + "44b4708a": "modifyBasket(string[],uint256[],uint256)", + "a4125403": "quantities(uint256)", + "f51e181a": "scale()", + "683dd191": "scaleFactor()", + "7adbf973": "setOracle(address)", + "a2e62045": "update()", + "3fa4f245": "value()", + "4ff799c5": "InvalidBasket()", + "82b42900": "Unauthorized()", + "7ecc2b56": "availableSupply()", + "44df8e70": "burn()", + "db7f521a": "setStabilizer(address)", + "7e47961c": "stabilizer()", + "6e74c554": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", "5ea1d6f8": "commissionRate()", "282d3fdf": "lock(address,uint256)", "59355736": "lockedBalanceOf(address)", - "fb489a7b": "redistribute()", - "19fac8fd": "setCommissionRate(uint256)", "61d027b3": "treasury()", - "949813b8": "unclaimedRewards(address)", "7eee288d": "unlock(address,uint256)", "84955c88": "unlockedBalanceOf(address)", "3a5381b5": "validator()", - "4dc925d3": "ACCUSATION_CONTRACT()", - "2090a442": "COMPUTE_COMMITTEE_CONTRACT()", - "c13974e1": "ENODE_VERIFIER_CONTRACT()", - "8e153dc3": "INNOCENCE_CONTRACT()", - "925c5492": "MISBEHAVIOUR_CONTRACT()", + "d861b0e8": "finalizeInitialization()", + "d372c07e": "setAcuContract(address)", + "cfd19fb9": "setStabilizationContract(address)", + "b3ecbadd": "setSupplyControlContract(address)", + "f5371f4b": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", + "dac323e6": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint256,uint8))", + "84467fdb": "registerValidator(string,address,bytes,bytes)", + "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "50d93720": "POP_VERIFIER_CONTRACT()", + "c13974e1": "ENODE_VERIFIER_CONTRACT()", "d0a6d1a6": "SUCCESS()", + "32f33a37": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,bytes,uint8))", + "2090a442": "COMPUTE_COMMITTEE_CONTRACT()", "a4ad5d91": "UPGRADER_CONTRACT()", "55463ceb": "autonity()", "570ca735": "operator()", - "b3ab15fb": "setOperator(address)", "6e3d9ff0": "upgrade(address,string)", - "7adbf973": "setOracle(address)", - "a2e62045": "update()", - "7ecc2b56": "availableSupply()", - "44df8e70": "burn()", - "db7f521a": "setStabilizer(address)", - "7e47961c": "stabilizer()", - "1de9d9b6": "distributeRewards(address)", - "6c9789b0": "finalize(bool)", - "9670c0bc": "getPrecision()", - "9f8743f7": "getRound()", - "3c8510fd": "getRoundData(uint256,string)", - "df7f710e": "getSymbols()", - "b78dec52": "getVotePeriod()", - "cdd72253": "getVoters()", - "33f98c77": "latestRoundData(string)", - "8d4f75d2": "setSymbols(string[])", - "845023f2": "setVoters(address[])", - "307de9b6": "vote(uint256,int256[],uint256)" + "ceaad455": "setUpgradeManagerContract(address)", + "784304b5": "updateEnode(address,string)", + "e98712b2": "atnTotalRedistributed()", + "a0ce552d": "redistribute(uint256)", + "d885f18d": "calculateSupplyDelta(uint256,uint256,uint256)", + "9ac31074": "inflationReserve()", + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + "89c614b8": "lastEpochTime()", + "f03b959d": "setInflationControllerContract(address)", + "a8031a1d": "distributeRewards(address,uint256)" } `) @@ -168,7 +204,7 @@ func _4byteJson() (*asset, error) { } info := bindataFileInfo{name: "4byte.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0xfa, 0xab, 0xfe, 0x7b, 0xa6, 0x83, 0xaa, 0x77, 0xea, 0x9e, 0xd7, 0x33, 0xfb, 0x42, 0x22, 0xd8, 0xd9, 0x9b, 0xcb, 0x1, 0xe9, 0xef, 0x3c, 0xca, 0xc4, 0x4b, 0x69, 0xed, 0xb3, 0x64, 0xff}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x28, 0xb5, 0x1a, 0xcf, 0x8e, 0xa, 0x1a, 0x3b, 0x7e, 0x4e, 0x16, 0xa7, 0xfa, 0xfc, 0xd0, 0x70, 0xb1, 0xda, 0x14, 0xd5, 0x53, 0x36, 0xdc, 0x8, 0x95, 0x6d, 0xe6, 0x90, 0x35, 0x12, 0xf6, 0xf7}} return a, nil } diff --git a/signer/fourbyte/4byte.json b/signer/fourbyte/4byte.json index 5a5e965203..22ec8f57d4 100644 --- a/signer/fourbyte/4byte.json +++ b/signer/fourbyte/4byte.json @@ -16,8 +16,8 @@ "1604e416": "epochReward()", "9c98e471": "epochTotalBondedStake()", "4bb278f3": "finalize()", - "d861b0e8": "finalizeInitialization()", "43645969": "getBlockPeriod()", + "e485c6fb": "getBondingReq(uint256,uint256)", "ab8f6ffe": "getCommittee()", "a8b2216e": "getCommitteeEnodes()", "96b477cb": "getEpochFromBlock(uint256)", @@ -27,82 +27,118 @@ "11220633": "getMinimumBaseFee()", "b66b3e79": "getNewContract()", "e7f43c68": "getOperator()", - "833b1fce": "getOracle()", "5f7d3949": "getProposer(uint256,uint256)", "f7866ee3": "getTreasuryAccount()", "29070c6d": "getTreasuryFee()", "6fd2c80b": "getUnbondingPeriod()", + "55230e93": "getUnbondingReq(uint256,uint256)", "1904bb2e": "getValidator(address)", "b7ab4db5": "getValidators()", "0d8e6e2c": "getVersion()", + "44697221": "headBondingID()", + "4b0dff63": "headUnbondingID()", "c2362dd5": "lastEpochBlock()", "40c10f19": "mint(address,uint256)", "06fdde03": "name()", "0ae65e7a": "pauseValidator(address)", - "84467fdb": "registerValidator(string,address,bytes,bytes)", + "ad722d4d": "registerValidator(string,address,bytes)", "cf9c5719": "resetContractUpgrade()", "1250a28d": "setAccountabilityContract(address)", - "d372c07e": "setAcuContract(address)", "8bac7dad": "setCommitteeSize(uint256)", "6b5f444c": "setEpochPeriod(uint256)", "cb696f54": "setMinimumBaseFee(uint256)", "520fdbbc": "setOperatorAccount(address)", "496ccd9b": "setOracleContract(address)", - "cfd19fb9": "setStabilizationContract(address)", - "b3ecbadd": "setSupplyControlContract(address)", "d886f8a2": "setTreasuryAccount(address)", "77e741c7": "setTreasuryFee(uint256)", "114eaf55": "setUnbondingPeriod(uint256)", - "ceaad455": "setUpgradeManagerContract(address)", "95d89b41": "symbol()", + "787a2433": "tailBondingID()", + "662cd7f4": "tailUnbondingID()", "9bb851c0": "totalRedistributed()", "18160ddd": "totalSupply()", "a9059cbb": "transfer(address,uint256)", "23b872dd": "transferFrom(address,address,uint256)", "a5d059ca": "unbond(address,uint256)", - "784304b5": "updateEnode(address,string)", - "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", + "d292e532": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", "b2ea9adb": "upgradeContract(bytes,string)", "187cf4d7": "FEE_FACTOR_UNIT_RECIP()", "372500ab": "claimRewards()", + "fb489a7b": "redistribute()", + "19fac8fd": "setCommissionRate(uint256)", + "949813b8": "unclaimedRewards(address)", + "9670c0bc": "getPrecision()", + "9f8743f7": "getRound()", + "3c8510fd": "getRoundData(uint256,string)", + "df7f710e": "getSymbols()", + "b78dec52": "getVotePeriod()", + "cdd72253": "getVoters()", + "e6a02a28": "lastRoundBlock()", + "aa2f89b5": "lastVoterUpdateRound()", + "33f98c77": "latestRoundData(string)", + "5281b5c6": "newSymbols(uint256)", + "4c56ea56": "reports(string,address)", + "146ca531": "round()", + "b3ab15fb": "setOperator(address)", + "8d4f75d2": "setSymbols(string[])", + "845023f2": "setVoters(address[])", + "08f21ff5": "symbolUpdatedRound()", + "ccce413b": "symbols(uint256)", + "307de9b6": "vote(uint256,int256[],uint256)", + "a7813587": "votePeriod()", + "5412b3ae": "votingInfo(address)", + "4dc925d3": "ACCUSATION_CONTRACT()", + "8e153dc3": "INNOCENCE_CONTRACT()", + "925c5492": "MISBEHAVIOUR_CONTRACT()", + "1de9d9b6": "distributeRewards(address)", + "6c9789b0": "finalize(bool)", + "833b1fce": "getOracle()", + "44b4708a": "modifyBasket(string[],uint256[],uint256)", + "a4125403": "quantities(uint256)", + "f51e181a": "scale()", + "683dd191": "scaleFactor()", + "7adbf973": "setOracle(address)", + "a2e62045": "update()", + "3fa4f245": "value()", + "4ff799c5": "InvalidBasket()", + "82b42900": "Unauthorized()", + "7ecc2b56": "availableSupply()", + "44df8e70": "burn()", + "db7f521a": "setStabilizer(address)", + "7e47961c": "stabilizer()", + "6e74c554": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", "5ea1d6f8": "commissionRate()", "282d3fdf": "lock(address,uint256)", "59355736": "lockedBalanceOf(address)", - "fb489a7b": "redistribute()", - "19fac8fd": "setCommissionRate(uint256)", "61d027b3": "treasury()", - "949813b8": "unclaimedRewards(address)", "7eee288d": "unlock(address,uint256)", "84955c88": "unlockedBalanceOf(address)", "3a5381b5": "validator()", - "4dc925d3": "ACCUSATION_CONTRACT()", - "2090a442": "COMPUTE_COMMITTEE_CONTRACT()", - "c13974e1": "ENODE_VERIFIER_CONTRACT()", - "8e153dc3": "INNOCENCE_CONTRACT()", - "925c5492": "MISBEHAVIOUR_CONTRACT()", + "d861b0e8": "finalizeInitialization()", + "d372c07e": "setAcuContract(address)", + "cfd19fb9": "setStabilizationContract(address)", + "b3ecbadd": "setSupplyControlContract(address)", + "f5371f4b": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint8))", + "dac323e6": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint256,uint8))", + "84467fdb": "registerValidator(string,address,bytes,bytes)", + "35be16e0": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,uint8))", "50d93720": "POP_VERIFIER_CONTRACT()", + "c13974e1": "ENODE_VERIFIER_CONTRACT()", "d0a6d1a6": "SUCCESS()", + "32f33a37": "updateValidatorAndTransferSlashedFunds((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,bytes,bytes,uint8))", + "2090a442": "COMPUTE_COMMITTEE_CONTRACT()", "a4ad5d91": "UPGRADER_CONTRACT()", "55463ceb": "autonity()", "570ca735": "operator()", - "b3ab15fb": "setOperator(address)", "6e3d9ff0": "upgrade(address,string)", - "7adbf973": "setOracle(address)", - "a2e62045": "update()", - "7ecc2b56": "availableSupply()", - "44df8e70": "burn()", - "db7f521a": "setStabilizer(address)", - "7e47961c": "stabilizer()", - "1de9d9b6": "distributeRewards(address)", - "6c9789b0": "finalize(bool)", - "9670c0bc": "getPrecision()", - "9f8743f7": "getRound()", - "3c8510fd": "getRoundData(uint256,string)", - "df7f710e": "getSymbols()", - "b78dec52": "getVotePeriod()", - "cdd72253": "getVoters()", - "33f98c77": "latestRoundData(string)", - "8d4f75d2": "setSymbols(string[])", - "845023f2": "setVoters(address[])", - "307de9b6": "vote(uint256,int256[],uint256)" + "ceaad455": "setUpgradeManagerContract(address)", + "784304b5": "updateEnode(address,string)", + "e98712b2": "atnTotalRedistributed()", + "a0ce552d": "redistribute(uint256)", + "d885f18d": "calculateSupplyDelta(uint256,uint256,uint256)", + "9ac31074": "inflationReserve()", + "92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)", + "89c614b8": "lastEpochTime()", + "f03b959d": "setInflationControllerContract(address)", + "a8031a1d": "distributeRewards(address,uint256)" }