diff --git a/src/main/resources/Abi.Consensus.json b/src/main/resources/Abi.Consensus.json index 69ed373..71a7eaf 100644 --- a/src/main/resources/Abi.Consensus.json +++ b/src/main/resources/Abi.Consensus.json @@ -1,1032 +1,1643 @@ { - "abi": [ - { - "type": "constructor", - "inputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "activeValidatorsCount", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "calculateTopValidators", - "inputs": [ - { "name": "n", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getAllValidators", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct Validator[]", - "components": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "data", - "type": "tuple", - "internalType": "struct ValidatorData", - "components": [ - { - "name": "votersCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "voteBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "isResigned", - "type": "bool", - "internalType": "bool" - }, - { - "name": "bls12_381_public_key", - "type": "bytes", - "internalType": "bytes" - } - ] - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRounds", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "count", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct Round[]", - "components": [ - { - "name": "round", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "validators", - "type": "tuple[]", - "internalType": "struct RoundValidator[]", - "components": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "voteBalance", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoundsCount", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTopValidators", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct Validator[]", - "components": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "data", - "type": "tuple", - "internalType": "struct ValidatorData", - "components": [ - { - "name": "votersCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "voteBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "isResigned", - "type": "bool", - "internalType": "bool" - }, - { - "name": "bls12_381_public_key", - "type": "bytes", - "internalType": "bytes" - } - ] - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getValidator", - "inputs": [ - { - "name": "_addr", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Validator", - "components": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "data", - "type": "tuple", - "internalType": "struct ValidatorData", - "components": [ - { - "name": "votersCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "voteBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "isResigned", - "type": "bool", - "internalType": "bool" - }, - { - "name": "bls12_381_public_key", - "type": "bytes", - "internalType": "bytes" - } - ] - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getVotes", - "inputs": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "count", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct VoteResult[]", - "components": [ - { - "name": "voter", - "type": "address", - "internalType": "address" - }, - { - "name": "validator", - "type": "address", - "internalType": "address" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getVotesCount", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidatorRegistered", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerValidator", - "inputs": [ - { - "name": "bls12_381_public_key", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registeredValidatorsCount", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "resignValidator", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resignedValidatorsCount", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unvote", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateValidator", - "inputs": [ - { - "name": "_validator", - "type": "tuple", - "internalType": "struct Validator", - "components": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - }, - { - "name": "data", - "type": "tuple", - "internalType": "struct ValidatorData", - "components": [ - { - "name": "votersCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "voteBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "isResigned", - "type": "bool", - "internalType": "bool" - }, - { - "name": "bls12_381_public_key", - "type": "bytes", - "internalType": "bytes" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateVoters", - "inputs": [ - { - "name": "voters", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "vote", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Unvoted", - "inputs": [ - { - "name": "voter", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "validator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorRegistered", - "inputs": [ - { - "name": "addr", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "bls12_381_public_key", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ValidatorResigned", - "inputs": [ - { - "name": "addr", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Voted", - "inputs": [ - { - "name": "voter", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "validator", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60a06040525f80805560018190556007819055600880546001600160a01b0319908116909155600980549091169055600c5534801561003c575f5ffd5b5033608052608051612bdb61007c5f395f81816103e4015281816104c30152818161069301528181610a0901528181610f2101526114e90152612bdb5ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80636dd7d8ea1161009e578063b85f5da21161006e578063b85f5da214610202578063d04a68c71461020a578063eb9019d414610245578063f1bd0b3714610265578063f3513a371461026c575f5ffd5b80636dd7d8ea146101bf578063a09686c4146101d2578063afeea115146101da578063b5cfa68c146101ef575f5ffd5b80632bdf6d43116100e45780632bdf6d431461015c5780633174b6891461017157806340f74f4714610179578063602a9eee1461019957806362525879146101ac575f5ffd5b80630777cbef146101155780630d2bd9091461012c5780631904bb2e146101345780631b605b8614610154575b5f5ffd5b6001545b6040519081526020015b60405180910390f35b600d54610119565b610147610142366004612457565b610274565b60405161012391906124fb565b600754610119565b61016f61016a36600461250d565b6103d9565b005b61016f610467565b61018c61018736600461257c565b6104b6565b604051610123919061259c565b61016f6101a7366004612655565b610689565b61016f6101ba3660046126b1565b610964565b61016f6101cd366004612457565b6109ff565b600e54610119565b6101e2610d79565b60405161012391906126e7565b61016f6101fd36600461273e565b610f16565b61016f6113bb565b610235610218366004612457565b6001600160a01b03165f9081526003602052604090205460ff1690565b6040519015158152602001610123565b61025861025336600461275e565b6114dc565b6040516101239190612786565b5f54610119565b6101e261171d565b61027c612361565b6001600160a01b0382165f9081526003602052604090205460ff166102e85760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f724461746120646f65736e2774206578697374730000000060448201526064015b60405180910390fd5b6040805180820182526001600160a01b0384168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff16151594820194909452600384018054939492850193919291606084019190610350906127e0565b80601f016020809104026020016040519081016040528092919081815260200182805461037c906127e0565b80156103c75780601f1061039e576101008083540402835291602001916103c7565b820191905f5260205f20905b8154815290600101906020018083116103aa57829003601f168201915b50505091909252505050905292915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104215760405162461bcd60e51b81526004016102df90612812565b5f5b818110156104625761045a83838381811061044057610440612847565b90506020020160208101906104559190612457565b6118b4565b600101610423565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef33610491611994565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105005760405162461bcd60e51b81526004016102df90612812565b600e548290841061051257505f610536565b600e5461051f848661286f565b111561053657600e54610533908590612882565b90505b5f816001600160401b0381111561054f5761054f612895565b60405190808252806020026020018201604052801561059457816020015b604080518082019091525f81526060602082015281526020019060019003908161056d5790505b5090505f5b8281101561067e57604051806040016040528082886105b8919061286f565b6105c390600161286f565b8152602001600e6105d4848a61286f565b815481106105e4576105e4612847565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610652575f848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161060b565b5050505081525082828151811061066b5761066b612847565b6020908102919091010152600101610599565b509150505b92915050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036107015760405162461bcd60e51b815260206004820152601c60248201527f43616c6c65722069732074686520636f6e7472616374206f776e65720000000060448201526064016102df565b335f9081526003602052604090205460ff16156107605760405162461bcd60e51b815260206004820152601f60248201527f56616c696461746f7220697320616c726561647920726567697374657265640060448201526064016102df565b5f82826040516107719291906128a9565b60408051918290039091205f8181526004602052919091205490915060ff16156107e95760405162461bcd60e51b815260206004820152602360248201527f424c5331322d333831206b657920697320616c726561647920726567697374656044820152621c995960ea1b60648201526084016102df565b6107f38383611bfc565b5f60405180608001604052805f81526020015f81526020015f1515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050805492935090508061085b836128b8565b9091555050335f9081526003602081815260408084208054600160ff1991821681179092556002808552958390208751815593870151918401919091559085015193820180549091169315159390931790925560608301518392918201906108c39082612914565b5050505f82815260046020526040808220805460ff191660019081179091556005805491820181559092527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b0319163390811790915590517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9161095691879087906129ce565b60405180910390a150505050565b6109746102186020830183612457565b6109c05760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f724461746120646f65736e2774206578697374730000000060448201526064016102df565b6109cd6020820182612a0d565b60025f6109dd6020850185612457565b6001600160a01b0316815260208101919091526040015f206104628282612ae4565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610a775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c65722069732074686520636f6e7472616374206f776e65720000000060448201526064016102df565b6001600160a01b0381165f9081526003602052604090205460ff16610ade5760405162461bcd60e51b815260206004820152601760248201527f4d75737420766f746520666f722076616c696461746f7200000000000000000060448201526064016102df565b6001600160a01b0381165f9081526002602081905260409091209081015460ff1615610b575760405162461bcd60e51b815260206004820152602260248201527f4d75737420766f746520666f7220756e72657369676e65642076616c6964617460448201526137b960f11b60648201526084016102df565b335f90815260066020526040902080546001600160a01b03848116911603610bc15760405162461bcd60e51b815260206004820181905260248201527f416c726561647920766f74656420666f7220746869732076616c696461746f7260448201526064016102df565b80546001600160a01b031615610bdb57610bd9611994565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560085416610c8d5760088054336001600160a01b03199182168117909255600980549091169091179055610ce4565b600980546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60078054905f610cf3836128b8565b9190505550336001600160a01b031631826001015f828254610d15919061286f565b9091555050815460019083905f90610d2e90849061286f565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a1505050565b600d546060905f906001600160401b03811115610d9857610d98612895565b604051908082528060200260200182016040528015610dd157816020015b610dbe612361565b815260200190600190039081610db65790505b5090505f5b600d54811015610f10575f600d8281548110610df457610df4612847565b5f9182526020808320909101546001600160a01b03168083526002808352604093849020845180860186528381528551608081018752825481526001830154818701529282015460ff1615159583019590955260038101805493965090949384019285916060840191610e66906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e92906127e0565b8015610edd5780601f10610eb457610100808354040283529160200191610edd565b820191905f5260205f20905b815481529060010190602001808311610ec057829003601f168201915b505050505081525050815250848481518110610efb57610efb612847565b60209081029190910101525050600101610dd6565b50919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f5e5760405162461bcd60e51b81526004016102df90612812565b610f66611c5e565b610f6e611dad565b600a80546001600160a01b03191690556001545f80549091610fa09160ff8516918491610f9b9190612882565b611dfe565b90508060ff165f03610fb0575050565b5f5b60055481101561125b575f60058281548110610fd057610fd0612847565b5f9182526020808320909101546001600160a01b03168083526002918290526040909220908101549192509060ff161561100b575050611253565b600a546001600160a01b03166110465750600a80546001600160a01b0319166001600160a01b03929092169190911790556001600c55611253565b8360ff16600c5410156110645761105d8285611e8f565b5050611253565b600a546001600160a01b039081165f908152600260208181526040928390208351808501855294871685528351608081018552865481526001870154818401529286015460ff161515938301939093526003850180549394611240949093928401929187916060840191906110d8906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611104906127e0565b801561114f5780601f106111265761010080835404028352916020019161114f565b820191905f5260205f20905b81548152906001019060200180831161113257829003601f168201915b505050919092525050509052604080518082018252600a546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff161515938201939093526003860180549293840192879160608401916111b8906127e0565b80601f01602080910402602001604051908101604052809291908181526020018280546111e4906127e0565b801561122f5780601f106112065761010080835404028352916020019161122f565b820191905f5260205f20905b81548152906001019060200180831161121257829003601f168201915b50505050508152505081525061226e565b1561124f5761124f8386611e8f565b5050505b600101610fb2565b50600e80546001810182555f918252600a547fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd909101916001600160a01b03909116906112aa90600d906123aa565b8260ff166001600160401b038111156112c5576112c5612895565b6040519080825280602002602001820160405280156112ee578160200160208202803683370190505b50805161130391600d916020909101906123c5565b505f5b8360ff168110156113b35781600d828154811061132557611325612847565b5f918252602080832090910180546001600160a01b039485166001600160a01b03199182161790915560408051808201825296851680885280855260028085528286206001908101548a87019081528b548083018d558c89528789209b519302909a01805492891692909516919091178455975192880192909255908352600b909152902054169101611306565b505050505b50565b335f9081526003602052604090205460ff166114195760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420612076616c696461746f720000000000000060448201526064016102df565b335f9081526002602081905260409091209081015460ff161561147e5760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f7220697320616c72656164792072657369676e656400000060448201526064016102df565b60028101805460ff19166001908117909155805481905f906114a190839061286f565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115265760405162461bcd60e51b81526004016102df90612812565b5f611534835f600754611dfe565b6001600160401b0381111561154b5761154b612895565b60405190808252806020026020018201604052801561158f57816020015b604080518082019091525f80825260208201528152602001906001900390816115695790505b506008549091506001600160a01b03908116908516156115c857506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b038216158015906115e157508481105b15611656576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611625816128b8565b94508151811061163757611637612847565b6020908102919091010152600301546001600160a01b031691506115ca565b8083510361166957829350505050610683565b5f816001600160401b0381111561168257611682612895565b6040519080825280602002602001820160405280156116c657816020015b604080518082019091525f80825260208201528152602001906001900390816116a05790505b5090505f5b82811015611712578481815181106116e5576116e5612847565b60200260200101518282815181106116ff576116ff612847565b60209081029190910101526001016116cb565b509695505050505050565b6005546060905f906001600160401b0381111561173c5761173c612895565b60405190808252806020026020018201604052801561177557816020015b611762612361565b81526020019060019003908161175a5790505b5090505f5b600554811015610f10575f6005828154811061179857611798612847565b5f9182526020808320909101546001600160a01b03168083526002808352604093849020845180860186528381528551608081018752825481526001830154818701529282015460ff161515958301959095526003810180549396509094938401928591606084019161180a906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611836906127e0565b80156118815780601f1061185857610100808354040283529160200191611881565b820191905f5260205f20905b81548152906001019060200180831161186457829003601f168201915b50505050508152505081525084848151811061189f5761189f612847565b6020908102919091010152505060010161177a565b6001600160a01b038082165f90815260066020526040902080549091166118d9575050565b60018101546001600160a01b0383163181101561193a57611904816001600160a01b03851631612882565b82546001600160a01b03165f908152600260205260408120600101805490919061192f90849061286f565b9091555061197f9050565b61194e6001600160a01b0384163182612882565b82546001600160a01b03165f9081526002602052604081206001018054909190611979908490612882565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b0316611a075760405162461bcd60e51b815260206004820152602560248201527f4d75737420766f746520666f722076616c696461746f72206265666f726520756044820152646e766f746560d81b60648201526084016102df565b6009546008546001600160a01b03918216911603611a4057600880546001600160a01b0319908116909155600980549091169055611b53565b600954336001600160a01b0390911603611a99576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b03199081169091559154600980549093169116179055611b53565b600854336001600160a01b0390911603611afd576009546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b0319908116909155600880548086168552929093206003015491169216919091179055611b53565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f818152600260205260408120600180850154908201805492939192909190611b88908490612882565b9091555050805460019082905f90611ba1908490612882565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556007805491611bef83612b71565b9091555091949350505050565b60308114611c5a5760405162461bcd60e51b815260206004820152602560248201527f424c5331322d333831207075626c69634b6579206c656e67746820697320696e6044820152641d985b1a5960da1b60648201526084016102df565b5050565b6005545f611c6d600183612882565b90505b8015611c5a575f611c8282600161286f565b60408051426020820152449181019190915260608101849052608001604051602081830303815290604052805190602001205f1c611cc09190612b86565b90505f60058381548110611cd657611cd6612847565b5f91825260209091200154600580546001600160a01b0390921692509083908110611d0357611d03612847565b5f91825260209091200154600580546001600160a01b039092169185908110611d2e57611d2e612847565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060058381548110611d6d57611d6d612847565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050508080611da590612b71565b915050611c70565b600a546001600160a01b03165b6001600160a01b03811615611df7576001600160a01b039081165f908152600b6020526040902080546001600160a01b0319811690915516611dba565b505f600c55565b5f81831115611e675760405162461bcd60e51b815260206004820152602f60248201527f4d696e696d756d2073686f756c64206265206c657373207468616e206f72206560448201526e7175616c20746f206d6178696d756d60881b60648201526084016102df565b82841015611e76575081611e88565b81841115611e85575080611e88565b50825b9392505050565b6001600160a01b0382165f9081526002602081815260408084208151608081018352815481526001820154938101939093529283015460ff16151590820152600382018054919291606084019190611ee6906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f12906127e0565b8015611f5d5780601f10611f3457610100808354040283529160200191611f5d565b820191905f5260205f20905b815481529060010190602001808311611f4057829003601f168201915b505050919092525050604080518082018252600a546001600160a01b03168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff1615159482019490945260038401805496975061207e9693955091850193909290916060840191611fd8906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612004906127e0565b801561204f5780601f106120265761010080835404028352916020019161204f565b820191905f5260205f20905b81548152906001019060200180831161203257829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b031681526020018481525061226e565b156120915761208c836122b2565b61220f565b600a546001600160a01b039081165f818152600b6020526040902054909116905b6001600160a01b0382166120cf576120ca8186612303565b61220c565b6040805180820182526001600160a01b0384168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff161515948201949094526003840180546121dc9593850193916060840191612136906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612162906127e0565b80156121ad5780601f10612184576101008083540402835291602001916121ad565b820191905f5260205f20905b81548152906001019060200180831161219057829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b031681526020018681525061226e565b156121eb576120ca8186612303565b506001600160a01b038082165f908152600b602052604090205416906120b2565b50505b8160ff16600c54111561046257600a80546001600160a01b039081165f908152600b6020526040812080546001600160a01b03198082169092558454931692168217909255600c8054919261226383612b71565b919050555050505050565b5f8160200151602001518360200151602001510361229e5750805182516001600160a01b03918216911611610683565b506020908101518101519181015101511190565b600a80546001600160a01b038381165f818152600b602052604081208054939094166001600160a01b031993841617909355835490911617909155600c8054916122fb836128b8565b919050555050565b6001600160a01b038281165f818152600b602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600c805491612358836128b8565b91905055505050565b60405180604001604052805f6001600160a01b031681526020016123a560405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f20908101906113b89190612428565b828054828255905f5260205f20908101928215612418579160200282015b8281111561241857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906123e3565b50612424929150612428565b5090565b5b80821115612424575f8155600101612429565b80356001600160a01b0381168114612452575f5ffd5b919050565b5f60208284031215612467575f5ffd5b611e888261243c565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a085015280518060c08601525f5b818110156124db57602081840181015160e08884010152016124be565b505f60e0828701015260e0601f19601f8301168601019250505092915050565b602081525f611e886020830184612470565b5f5f6020838503121561251e575f5ffd5b82356001600160401b03811115612533575f5ffd5b8301601f81018513612543575f5ffd5b80356001600160401b03811115612558575f5ffd5b8560208260051b840101111561256c575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561258d575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561264957868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561263157835180516001600160a01b031683526020908101518184015290930192600192909201916040909101906125fa565b509650505060209384019391909101906001016125c2565b50929695505050505050565b5f5f60208385031215612666575f5ffd5b82356001600160401b0381111561267b575f5ffd5b8301601f8101851361268b575f5ffd5b80356001600160401b038111156126a0575f5ffd5b85602082840101111561256c575f5ffd5b5f602082840312156126c1575f5ffd5b81356001600160401b038111156126d6575f5ffd5b820160408185031215611e88575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561264957603f19878603018452612729858351612470565b9450602093840193919091019060010161270d565b5f6020828403121561274e575f5ffd5b813560ff81168114611e88575f5ffd5b5f5f6040838503121561276f575f5ffd5b6127788361243c565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b818110156127d557835180516001600160a01b03908116855260209182015116818501529093019260409092019160010161279f565b509095945050505050565b600181811c908216806127f457607f821691505b602082108103610f1057634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106835761068361285b565b818103818111156106835761068361285b565b634e487b7160e01b5f52604160045260245ffd5b818382375f9101908152919050565b5f600182016128c9576128c961285b565b5060010190565b601f82111561046257805f5260205f20601f840160051c810160208510156128f55750805b601f840160051c820191505b818110156113b3575f8155600101612901565b81516001600160401b0381111561292d5761292d612895565b6129418161293b84546127e0565b846128d0565b6020601f821160018114612973575f831561295c5750848201515b5f19600385901b1c1916600184901b1784556113b3565b5f84815260208120601f198516915b828110156129a25787850151825560209485019460019092019101612982565b50848210156129bf57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f8235607e19833603018112612a21575f5ffd5b9190910192915050565b6001600160401b03831115612a4257612a42612895565b612a5683612a5083546127e0565b836128d0565b5f601f841160018114612a87575f8515612a705750838201355b5f19600387901b1c1916600186901b1783556113b3565b5f83815260208120601f198716915b82811015612ab65786850135825560209485019460019092019101612a96565b5086821015612ad2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135815560208201356001820155600281016040830135801515808214612b09575f5ffd5b60ff19835416915060ff8116821783555050506060820135601e19833603018112612b32575f5ffd5b820180356001600160401b03811115612b49575f5ffd5b602082019150803603821315612b5d575f5ffd5b612b6b818360038601612a2b565b50505050565b5f81612b7f57612b7f61285b565b505f190190565b5f82612ba057634e487b7160e01b5f52601260045260245ffd5b50069056fea264697066735822122071b882f5aa13e15b9bba503811bfdf20f770de1ab04c653b0dfdade41b9c0bed64736f6c634300081b0033", - "sourceMap": "1600:14234:23:-:0;;;1701:1;1656:46;;;1708:44;;;;2044:32;;;;2082:40;;;-1:-1:-1;;;;;;2082:40:23;;;;;;2128;;;;;;;;2271:39;;2406:50;;;;;;;;;-1:-1:-1;2439:10:23;2430:19;;1600:14234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80636dd7d8ea1161009e578063b85f5da21161006e578063b85f5da214610202578063d04a68c71461020a578063eb9019d414610245578063f1bd0b3714610265578063f3513a371461026c575f5ffd5b80636dd7d8ea146101bf578063a09686c4146101d2578063afeea115146101da578063b5cfa68c146101ef575f5ffd5b80632bdf6d43116100e45780632bdf6d431461015c5780633174b6891461017157806340f74f4714610179578063602a9eee1461019957806362525879146101ac575f5ffd5b80630777cbef146101155780630d2bd9091461012c5780631904bb2e146101345780631b605b8614610154575b5f5ffd5b6001545b6040519081526020015b60405180910390f35b600d54610119565b610147610142366004612457565b610274565b60405161012391906124fb565b600754610119565b61016f61016a36600461250d565b6103d9565b005b61016f610467565b61018c61018736600461257c565b6104b6565b604051610123919061259c565b61016f6101a7366004612655565b610689565b61016f6101ba3660046126b1565b610964565b61016f6101cd366004612457565b6109ff565b600e54610119565b6101e2610d79565b60405161012391906126e7565b61016f6101fd36600461273e565b610f16565b61016f6113bb565b610235610218366004612457565b6001600160a01b03165f9081526003602052604090205460ff1690565b6040519015158152602001610123565b61025861025336600461275e565b6114dc565b6040516101239190612786565b5f54610119565b6101e261171d565b61027c612361565b6001600160a01b0382165f9081526003602052604090205460ff166102e85760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f724461746120646f65736e2774206578697374730000000060448201526064015b60405180910390fd5b6040805180820182526001600160a01b0384168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff16151594820194909452600384018054939492850193919291606084019190610350906127e0565b80601f016020809104026020016040519081016040528092919081815260200182805461037c906127e0565b80156103c75780601f1061039e576101008083540402835291602001916103c7565b820191905f5260205f20905b8154815290600101906020018083116103aa57829003601f168201915b50505091909252505050905292915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104215760405162461bcd60e51b81526004016102df90612812565b5f5b818110156104625761045a83838381811061044057610440612847565b90506020020160208101906104559190612457565b6118b4565b600101610423565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef33610491611994565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105005760405162461bcd60e51b81526004016102df90612812565b600e548290841061051257505f610536565b600e5461051f848661286f565b111561053657600e54610533908590612882565b90505b5f816001600160401b0381111561054f5761054f612895565b60405190808252806020026020018201604052801561059457816020015b604080518082019091525f81526060602082015281526020019060019003908161056d5790505b5090505f5b8281101561067e57604051806040016040528082886105b8919061286f565b6105c390600161286f565b8152602001600e6105d4848a61286f565b815481106105e4576105e4612847565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610652575f848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161060b565b5050505081525082828151811061066b5761066b612847565b6020908102919091010152600101610599565b509150505b92915050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036107015760405162461bcd60e51b815260206004820152601c60248201527f43616c6c65722069732074686520636f6e7472616374206f776e65720000000060448201526064016102df565b335f9081526003602052604090205460ff16156107605760405162461bcd60e51b815260206004820152601f60248201527f56616c696461746f7220697320616c726561647920726567697374657265640060448201526064016102df565b5f82826040516107719291906128a9565b60408051918290039091205f8181526004602052919091205490915060ff16156107e95760405162461bcd60e51b815260206004820152602360248201527f424c5331322d333831206b657920697320616c726561647920726567697374656044820152621c995960ea1b60648201526084016102df565b6107f38383611bfc565b5f60405180608001604052805f81526020015f81526020015f1515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050805492935090508061085b836128b8565b9091555050335f9081526003602081815260408084208054600160ff1991821681179092556002808552958390208751815593870151918401919091559085015193820180549091169315159390931790925560608301518392918201906108c39082612914565b5050505f82815260046020526040808220805460ff191660019081179091556005805491820181559092527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b0319163390811790915590517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9161095691879087906129ce565b60405180910390a150505050565b6109746102186020830183612457565b6109c05760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f724461746120646f65736e2774206578697374730000000060448201526064016102df565b6109cd6020820182612a0d565b60025f6109dd6020850185612457565b6001600160a01b0316815260208101919091526040015f206104628282612ae4565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610a775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c65722069732074686520636f6e7472616374206f776e65720000000060448201526064016102df565b6001600160a01b0381165f9081526003602052604090205460ff16610ade5760405162461bcd60e51b815260206004820152601760248201527f4d75737420766f746520666f722076616c696461746f7200000000000000000060448201526064016102df565b6001600160a01b0381165f9081526002602081905260409091209081015460ff1615610b575760405162461bcd60e51b815260206004820152602260248201527f4d75737420766f746520666f7220756e72657369676e65642076616c6964617460448201526137b960f11b60648201526084016102df565b335f90815260066020526040902080546001600160a01b03848116911603610bc15760405162461bcd60e51b815260206004820181905260248201527f416c726561647920766f74656420666f7220746869732076616c696461746f7260448201526064016102df565b80546001600160a01b031615610bdb57610bd9611994565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560085416610c8d5760088054336001600160a01b03199182168117909255600980549091169091179055610ce4565b600980546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60078054905f610cf3836128b8565b9190505550336001600160a01b031631826001015f828254610d15919061286f565b9091555050815460019083905f90610d2e90849061286f565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a1505050565b600d546060905f906001600160401b03811115610d9857610d98612895565b604051908082528060200260200182016040528015610dd157816020015b610dbe612361565b815260200190600190039081610db65790505b5090505f5b600d54811015610f10575f600d8281548110610df457610df4612847565b5f9182526020808320909101546001600160a01b03168083526002808352604093849020845180860186528381528551608081018752825481526001830154818701529282015460ff1615159583019590955260038101805493965090949384019285916060840191610e66906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e92906127e0565b8015610edd5780601f10610eb457610100808354040283529160200191610edd565b820191905f5260205f20905b815481529060010190602001808311610ec057829003601f168201915b505050505081525050815250848481518110610efb57610efb612847565b60209081029190910101525050600101610dd6565b50919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f5e5760405162461bcd60e51b81526004016102df90612812565b610f66611c5e565b610f6e611dad565b600a80546001600160a01b03191690556001545f80549091610fa09160ff8516918491610f9b9190612882565b611dfe565b90508060ff165f03610fb0575050565b5f5b60055481101561125b575f60058281548110610fd057610fd0612847565b5f9182526020808320909101546001600160a01b03168083526002918290526040909220908101549192509060ff161561100b575050611253565b600a546001600160a01b03166110465750600a80546001600160a01b0319166001600160a01b03929092169190911790556001600c55611253565b8360ff16600c5410156110645761105d8285611e8f565b5050611253565b600a546001600160a01b039081165f908152600260208181526040928390208351808501855294871685528351608081018552865481526001870154818401529286015460ff161515938301939093526003850180549394611240949093928401929187916060840191906110d8906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611104906127e0565b801561114f5780601f106111265761010080835404028352916020019161114f565b820191905f5260205f20905b81548152906001019060200180831161113257829003601f168201915b505050919092525050509052604080518082018252600a546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff161515938201939093526003860180549293840192879160608401916111b8906127e0565b80601f01602080910402602001604051908101604052809291908181526020018280546111e4906127e0565b801561122f5780601f106112065761010080835404028352916020019161122f565b820191905f5260205f20905b81548152906001019060200180831161121257829003601f168201915b50505050508152505081525061226e565b1561124f5761124f8386611e8f565b5050505b600101610fb2565b50600e80546001810182555f918252600a547fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd909101916001600160a01b03909116906112aa90600d906123aa565b8260ff166001600160401b038111156112c5576112c5612895565b6040519080825280602002602001820160405280156112ee578160200160208202803683370190505b50805161130391600d916020909101906123c5565b505f5b8360ff168110156113b35781600d828154811061132557611325612847565b5f918252602080832090910180546001600160a01b039485166001600160a01b03199182161790915560408051808201825296851680885280855260028085528286206001908101548a87019081528b548083018d558c89528789209b519302909a01805492891692909516919091178455975192880192909255908352600b909152902054169101611306565b505050505b50565b335f9081526003602052604090205460ff166114195760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420612076616c696461746f720000000000000060448201526064016102df565b335f9081526002602081905260409091209081015460ff161561147e5760405162461bcd60e51b815260206004820152601d60248201527f56616c696461746f7220697320616c72656164792072657369676e656400000060448201526064016102df565b60028101805460ff19166001908117909155805481905f906114a190839061286f565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115265760405162461bcd60e51b81526004016102df90612812565b5f611534835f600754611dfe565b6001600160401b0381111561154b5761154b612895565b60405190808252806020026020018201604052801561158f57816020015b604080518082019091525f80825260208201528152602001906001900390816115695790505b506008549091506001600160a01b03908116908516156115c857506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b038216158015906115e157508481105b15611656576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611625816128b8565b94508151811061163757611637612847565b6020908102919091010152600301546001600160a01b031691506115ca565b8083510361166957829350505050610683565b5f816001600160401b0381111561168257611682612895565b6040519080825280602002602001820160405280156116c657816020015b604080518082019091525f80825260208201528152602001906001900390816116a05790505b5090505f5b82811015611712578481815181106116e5576116e5612847565b60200260200101518282815181106116ff576116ff612847565b60209081029190910101526001016116cb565b509695505050505050565b6005546060905f906001600160401b0381111561173c5761173c612895565b60405190808252806020026020018201604052801561177557816020015b611762612361565b81526020019060019003908161175a5790505b5090505f5b600554811015610f10575f6005828154811061179857611798612847565b5f9182526020808320909101546001600160a01b03168083526002808352604093849020845180860186528381528551608081018752825481526001830154818701529282015460ff161515958301959095526003810180549396509094938401928591606084019161180a906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611836906127e0565b80156118815780601f1061185857610100808354040283529160200191611881565b820191905f5260205f20905b81548152906001019060200180831161186457829003601f168201915b50505050508152505081525084848151811061189f5761189f612847565b6020908102919091010152505060010161177a565b6001600160a01b038082165f90815260066020526040902080549091166118d9575050565b60018101546001600160a01b0383163181101561193a57611904816001600160a01b03851631612882565b82546001600160a01b03165f908152600260205260408120600101805490919061192f90849061286f565b9091555061197f9050565b61194e6001600160a01b0384163182612882565b82546001600160a01b03165f9081526002602052604081206001018054909190611979908490612882565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b0316611a075760405162461bcd60e51b815260206004820152602560248201527f4d75737420766f746520666f722076616c696461746f72206265666f726520756044820152646e766f746560d81b60648201526084016102df565b6009546008546001600160a01b03918216911603611a4057600880546001600160a01b0319908116909155600980549091169055611b53565b600954336001600160a01b0390911603611a99576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b03199081169091559154600980549093169116179055611b53565b600854336001600160a01b0390911603611afd576009546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b0319908116909155600880548086168552929093206003015491169216919091179055611b53565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f818152600260205260408120600180850154908201805492939192909190611b88908490612882565b9091555050805460019082905f90611ba1908490612882565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556007805491611bef83612b71565b9091555091949350505050565b60308114611c5a5760405162461bcd60e51b815260206004820152602560248201527f424c5331322d333831207075626c69634b6579206c656e67746820697320696e6044820152641d985b1a5960da1b60648201526084016102df565b5050565b6005545f611c6d600183612882565b90505b8015611c5a575f611c8282600161286f565b60408051426020820152449181019190915260608101849052608001604051602081830303815290604052805190602001205f1c611cc09190612b86565b90505f60058381548110611cd657611cd6612847565b5f91825260209091200154600580546001600160a01b0390921692509083908110611d0357611d03612847565b5f91825260209091200154600580546001600160a01b039092169185908110611d2e57611d2e612847565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060058381548110611d6d57611d6d612847565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050508080611da590612b71565b915050611c70565b600a546001600160a01b03165b6001600160a01b03811615611df7576001600160a01b039081165f908152600b6020526040902080546001600160a01b0319811690915516611dba565b505f600c55565b5f81831115611e675760405162461bcd60e51b815260206004820152602f60248201527f4d696e696d756d2073686f756c64206265206c657373207468616e206f72206560448201526e7175616c20746f206d6178696d756d60881b60648201526084016102df565b82841015611e76575081611e88565b81841115611e85575080611e88565b50825b9392505050565b6001600160a01b0382165f9081526002602081815260408084208151608081018352815481526001820154938101939093529283015460ff16151590820152600382018054919291606084019190611ee6906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f12906127e0565b8015611f5d5780601f10611f3457610100808354040283529160200191611f5d565b820191905f5260205f20905b815481529060010190602001808311611f4057829003601f168201915b505050919092525050604080518082018252600a546001600160a01b03168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff1615159482019490945260038401805496975061207e9693955091850193909290916060840191611fd8906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612004906127e0565b801561204f5780601f106120265761010080835404028352916020019161204f565b820191905f5260205f20905b81548152906001019060200180831161203257829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b031681526020018481525061226e565b156120915761208c836122b2565b61220f565b600a546001600160a01b039081165f818152600b6020526040902054909116905b6001600160a01b0382166120cf576120ca8186612303565b61220c565b6040805180820182526001600160a01b0384168082525f90815260026020818152918490208451608081018652815481526001820154818501529181015460ff161515948201949094526003840180546121dc9593850193916060840191612136906127e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612162906127e0565b80156121ad5780601f10612184576101008083540402835291602001916121ad565b820191905f5260205f20905b81548152906001019060200180831161219057829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b031681526020018681525061226e565b156121eb576120ca8186612303565b506001600160a01b038082165f908152600b602052604090205416906120b2565b50505b8160ff16600c54111561046257600a80546001600160a01b039081165f908152600b6020526040812080546001600160a01b03198082169092558454931692168217909255600c8054919261226383612b71565b919050555050505050565b5f8160200151602001518360200151602001510361229e5750805182516001600160a01b03918216911611610683565b506020908101518101519181015101511190565b600a80546001600160a01b038381165f818152600b602052604081208054939094166001600160a01b031993841617909355835490911617909155600c8054916122fb836128b8565b919050555050565b6001600160a01b038281165f818152600b602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600c805491612358836128b8565b91905055505050565b60405180604001604052805f6001600160a01b031681526020016123a560405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f20908101906113b89190612428565b828054828255905f5260205f20908101928215612418579160200282015b8281111561241857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906123e3565b50612424929150612428565b5090565b5b80821115612424575f8155600101612429565b80356001600160a01b0381168114612452575f5ffd5b919050565b5f60208284031215612467575f5ffd5b611e888261243c565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a085015280518060c08601525f5b818110156124db57602081840181015160e08884010152016124be565b505f60e0828701015260e0601f19601f8301168601019250505092915050565b602081525f611e886020830184612470565b5f5f6020838503121561251e575f5ffd5b82356001600160401b03811115612533575f5ffd5b8301601f81018513612543575f5ffd5b80356001600160401b03811115612558575f5ffd5b8560208260051b840101111561256c575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561258d575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561264957868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561263157835180516001600160a01b031683526020908101518184015290930192600192909201916040909101906125fa565b509650505060209384019391909101906001016125c2565b50929695505050505050565b5f5f60208385031215612666575f5ffd5b82356001600160401b0381111561267b575f5ffd5b8301601f8101851361268b575f5ffd5b80356001600160401b038111156126a0575f5ffd5b85602082840101111561256c575f5ffd5b5f602082840312156126c1575f5ffd5b81356001600160401b038111156126d6575f5ffd5b820160408185031215611e88575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561264957603f19878603018452612729858351612470565b9450602093840193919091019060010161270d565b5f6020828403121561274e575f5ffd5b813560ff81168114611e88575f5ffd5b5f5f6040838503121561276f575f5ffd5b6127788361243c565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b818110156127d557835180516001600160a01b03908116855260209182015116818501529093019260409092019160010161279f565b509095945050505050565b600181811c908216806127f457607f821691505b602082108103610f1057634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f43616c6c6572206973206e6f742074686520636f6e7472616374206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106835761068361285b565b818103818111156106835761068361285b565b634e487b7160e01b5f52604160045260245ffd5b818382375f9101908152919050565b5f600182016128c9576128c961285b565b5060010190565b601f82111561046257805f5260205f20601f840160051c810160208510156128f55750805b601f840160051c820191505b818110156113b3575f8155600101612901565b81516001600160401b0381111561292d5761292d612895565b6129418161293b84546127e0565b846128d0565b6020601f821160018114612973575f831561295c5750848201515b5f19600385901b1c1916600184901b1784556113b3565b5f84815260208120601f198516915b828110156129a25787850151825560209485019460019092019101612982565b50848210156129bf57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b5f8235607e19833603018112612a21575f5ffd5b9190910192915050565b6001600160401b03831115612a4257612a42612895565b612a5683612a5083546127e0565b836128d0565b5f601f841160018114612a87575f8515612a705750838201355b5f19600387901b1c1916600186901b1783556113b3565b5f83815260208120601f198716915b82811015612ab65786850135825560209485019460019092019101612a96565b5086821015612ad2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135815560208201356001820155600281016040830135801515808214612b09575f5ffd5b60ff19835416915060ff8116821783555050506060820135601e19833603018112612b32575f5ffd5b820180356001600160401b03811115612b49575f5ffd5b602082019150803603821315612b5d575f5ffd5b612b6b818360038601612a2b565b50505050565b5f81612b7f57612b7f61285b565b505f190190565b5f82612ba057634e487b7160e01b5f52601260045260245ffd5b50069056fea264697066735822122071b882f5aa13e15b9bba503811bfdf20f770de1ab04c653b0dfdade41b9c0bed64736f6c634300081b0033", - "sourceMap": "1600:14234:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:113;8288:24;;8206:113;;;160:25:32;;;148:2;133:18;8206:113:23;;;;;;;;8325:118;8405:24;:31;8325:118;;10111:244;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10595:91::-;10667:12;;10595:91;;13764:228;;;;;;:::i;:::-;;:::i;:::-;;12617:79;;;:::i;14098:529::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8449:951::-;;;;;;:::i;:::-;;:::i;10361:228::-;;;;;;:::i;:::-;;:::i;11543:1068::-;;;;;;:::i;:::-;;:::i;13998:94::-;14071:7;:14;13998:94;;6999:458;;;:::i;:::-;;;;;;;:::i;3531:1701::-;;;;;;:::i;:::-;;:::i;9406:400::-;;;:::i;9812:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9901:29:23;9878:4;9901:29;;;:23;:29;;;;;;;;;9812:125;;;;6494:14:32;;6487:22;6469:41;;6457:2;6442:18;9812:125:23;6329:187:32;10692:845:23;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8083:117::-;8141:7;8167:26;8083:117;;7628:449;;;:::i;10111:244::-;10169:16;;:::i;:::-;-1:-1:-1;;;;;9901:29:23;;9878:4;9901:29;;;:23;:29;;;;;;;;10197:71;;;;-1:-1:-1;;;10197:71:23;;7839:2:32;10197:71:23;;;7821:21:32;7878:2;7858:18;;;7851:30;7917;7897:18;;;7890:58;7965:18;;10197:71:23;;;;;;;;;10285:63;;;;;;;;-1:-1:-1;;;;;10285:63:23;;;;;-1:-1:-1;10315:31:23;;;:24;10285:63;10315:31;;;;;;;10285:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10315:31;10285:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10285:63:23;;;;-1:-1:-1;;;10285:63:23;;10278:70;10111:244;-1:-1:-1;;10111:244:23:o;13764:228::-;2501:10;-1:-1:-1;;;;;2515:6:23;2501:20;;2493:65;;;;-1:-1:-1;;;2493:65:23;;;;;;;:::i;:::-;13899:9:::1;13894:92;13914:17:::0;;::::1;13894:92;;;13952:23;13965:6;;13972:1;13965:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13952:12;:23::i;:::-;13933:3;;13894:92;;;;13764:228:::0;;:::o;12617:79::-;12659:30;12667:10;12679:9;:7;:9::i;:::-;12659:30;;;-1:-1:-1;;;;;9064:32:32;;;9046:51;;9133:32;;;;9128:2;9113:18;;9106:60;9019:18;12659:30:23;;;;;;;12617:79::o;14098:529::-;14179:14;2501:10;-1:-1:-1;;;;;2515:6:23;2501:20;;2493:65;;;;-1:-1:-1;;;2493:65:23;;;;;;;:::i;:::-;14250:7:::1;:14:::0;14221:5;;14240:24;::::1;14236:163;;-1:-1:-1::0;14288:1:23::1;14236:163;;;14327:7;:14:::0;14310::::1;14319:5:::0;14310:6;:14:::1;:::i;:::-;:31;14306:93;;;14365:7;:14:::0;:23:::1;::::0;14382:6;;14365:23:::1;:::i;:::-;14357:31;;14306:93;14409:21;14445:5;-1:-1:-1::0;;;;;14433:18:23::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;14433:18:23::1;;;;;;;;;;;;;;;-1:-1:-1::0;14409:42:23;-1:-1:-1;14466:9:23::1;14461:136;14485:5;14481:1;:9;14461:136;;;14523:63;;;;;;;;14546:1;14537:6;:10;;;;:::i;:::-;:14;::::0;14550:1:::1;14537:14;:::i;:::-;14523:63:::0;;::::1;;14565:7;14573:10;14582:1:::0;14573:6;:10:::1;:::i;:::-;14565:19;;;;;;;;:::i;:::-;;;;;;;;14523:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;14523:63:23::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;::::0;14511:6:::1;14518:1;14511:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:75;14492:3:::1;;14461:136;;;-1:-1:-1::0;14614:6:23;-1:-1:-1;;2568:1:23::1;14098:529:::0;;;;:::o;8449:951::-;-1:-1:-1;;;;;2638:6:23;2624:20;:10;:20;2616:61;;;;-1:-1:-1;;;2616:61:23;;9906:2:32;2616:61:23;;;9888:21:32;9945:2;9925:18;;;9918:30;9984;9964:18;;;9957:58;10032:18;;2616:61:23;9704:352:32;2616:61:23;8578:10:::1;8554:35;::::0;;;:23:::1;:35;::::0;;;;;::::1;;8553:36;8545:80;;;::::0;-1:-1:-1;;;8545:80:23;;10263:2:32;8545:80:23::1;::::0;::::1;10245:21:32::0;10302:2;10282:18;;;10275:30;10341:33;10321:18;;;10314:61;10392:18;;8545:80:23::1;10061:355:32::0;8545:80:23::1;8636:27;8676:20;;8666:31;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;8717:42:::1;::::0;;;:21:::1;:42;::::0;;;;;;8666:31;;-1:-1:-1;8717:42:23::1;;8716:43;8708:91;;;::::0;-1:-1:-1;;;8708:91:23;;10899:2:32;8708:91:23::1;::::0;::::1;10881:21:32::0;10938:2;10918:18;;;10911:30;10977:34;10957:18;;;10950:62;-1:-1:-1;;;11028:18:32;;;11021:33;11071:19;;8708:91:23::1;10697:399:32::0;8708:91:23::1;8810:46;8835:20;;8810:24;:46::i;:::-;8867:30;8900:168;;;;;;;;8941:1;8900:168;;;;8969:1;8900:168;;;;8996:5;8900:168;;;;;;9037:20;;8900:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;8900:168:23;;;;-1:-1:-1;;9079:28:23;;8867:201;;-1:-1:-1;8900:168:23;-1:-1:-1;8900:168:23;9079:28:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;9141:10:23::1;9117:35;::::0;;;:23:::1;:35;::::0;;;;;;;:42;;9155:4:::1;-1:-1:-1::0;;9117:42:23;;::::1;::::0;::::1;::::0;;;9169:24:::1;:36:::0;;;;;;;:48;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;:36;:48;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;9227:42:23::1;::::0;;;:21:::1;:42;::::0;;;;;:49;;-1:-1:-1;;9227:49:23::1;9272:4;9227:49:::0;;::::1;::::0;;;9286:21:::1;:38:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;9286:38:23::1;9313:10;9286:38:::0;;::::1;::::0;;;9340:53;;::::1;::::0;::::1;::::0;9372:20;;;;9340:53:::1;:::i;:::-;;;;;;;;8535:865;;8449:951:::0;;:::o;10361:228::-;10442:38;10464:15;;;;:10;:15;:::i;10442:38::-;10434:79;;;;-1:-1:-1;;;10434:79:23;;7839:2:32;10434:79:23;;;7821:21:32;7878:2;7858:18;;;7851:30;7917;7897:18;;;7890:58;7965:18;;10434:79:23;7637:352:32;10434:79:23;10567:15;;;;:10;:15;:::i;:::-;10523:24;:41;10548:15;;;;:10;:15;:::i;:::-;-1:-1:-1;;;;;10523:41:23;;;;;;;;;;;;-1:-1:-1;10523:41:23;:59;;:41;:59;:::i;11543:1068::-;-1:-1:-1;;;;;2638:6:23;2624:20;:10;:20;2616:61;;;;-1:-1:-1;;;2616:61:23;;9906:2:32;2616:61:23;;;9888:21:32;9945:2;9925:18;;;9918:30;9984;9964:18;;;9957:58;10032:18;;2616:61:23;9704:352:32;2616:61:23;-1:-1:-1;;;;;9901:29:23;;9878:4;9901:29;;;:23;:29;;;;;;;;11603:63:::1;;;::::0;-1:-1:-1;;;11603:63:23;;16739:2:32;11603:63:23::1;::::0;::::1;16721:21:32::0;16778:2;16758:18;;;16751:30;16817:25;16797:18;;;16790:53;16860:18;;11603:63:23::1;16537:347:32::0;11603:63:23::1;-1:-1:-1::0;;;;;11715:30:23;::::1;11677:35;11715:30:::0;;;:24:::1;:30;::::0;;;;;;;11764:24;;::::1;::::0;::::1;;11763:25;11755:72;;;::::0;-1:-1:-1;;;11755:72:23;;17091:2:32;11755:72:23::1;::::0;::::1;17073:21:32::0;17130:2;17110:18;;;17103:30;17169:34;17149:18;;;17142:62;-1:-1:-1;;;17220:18:32;;;17213:32;17262:19;;11755:72:23::1;16889:398:32::0;11755:72:23::1;11867:10;11838:18;11859:19:::0;;;:7:::1;:19;::::0;;;;11896:15;;-1:-1:-1;;;;;11896:23:23;;::::1;:15:::0;::::1;:23:::0;11888:68:::1;;;::::0;-1:-1:-1;;;11888:68:23;;17494:2:32;11888:68:23::1;::::0;::::1;17476:21:32::0;;;17513:18;;;17506:30;17572:34;17552:18;;;17545:62;17624:18;;11888:68:23::1;17292:356:32::0;11888:68:23::1;11971:15:::0;;-1:-1:-1;;;;;11971:15:23::1;:29:::0;11967:69:::1;;12016:9;:7;:9::i;:::-;;11967:69;12068:88;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;12068:88:23;;::::1;::::0;;12100:10:::1;:18:::0;::::1;12068:88;::::0;;::::1;::::0;;;-1:-1:-1;12068:88:23;;;;;;;;;;;;12046:19;;;:7:::1;:19:::0;;;;;;;:110;;;;;;::::1;-1:-1:-1::0;;;;;;12046:110:23;;::::1;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;12171:11:::1;::::0;::::1;12167:277;;12212:11;:24:::0;;12226:10:::1;-1:-1:-1::0;;;;;;12212:24:23;;::::1;::::0;::::1;::::0;;;12250:11:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;12167:277:::1;;;12313:11;::::0;;-1:-1:-1;;;;;12313:11:23;;::::1;12305:20;::::0;;;:7:::1;:20;::::0;;;;;:25:::1;;:38:::0;;-1:-1:-1;;;;;;12305:38:23;;::::1;12333:10;12305:38:::0;;::::1;::::0;;;12384:11;;12357:19;;;;;;;:24:::1;;:38:::0;;;::::1;12384:11:::0;;;::::1;12357:38:::0;;;::::1;::::0;;;12409:24;;::::1;;::::0;;12167:277:::1;12453:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;12507:10;-1:-1:-1::0;;;;;12507:18:23::1;;12478:13;:25;;;:47;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12535:30:23;;12564:1:::1;::::0;12535:13;;:25:::1;::::0;:30:::1;::::0;12564:1;;12535:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;12581:23:23::1;::::0;;12587:10:::1;9046:51:32::0;;-1:-1:-1;;;;;9133:32:32;;9128:2;9113:18;;9106:60;12581:23:23::1;::::0;9019:18:32;12581:23:23::1;;;;;;;11593:1018;;11543:1068:::0;:::o;6999:458::-;7122:24;:31;7048:18;;7078:25;;-1:-1:-1;;;;;7106:48:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;7078:76:23;-1:-1:-1;7169:9:23;7164:263;7188:24;:31;7184:35;;7164:263;;;7240:12;7255:24;7280:1;7255:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7255:27:23;7325:30;;;:24;:30;;;;;;;;7381:35;;;;;;;;;;;;;;;;;;;;;7255:27;7381:35;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:27;;-1:-1:-1;7325:30:23;;7381:35;;;;7325:30;;7381:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7369:6;7376:1;7369:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;7221:3:23;;7164:263;;;-1:-1:-1;7444:6:23;6999:458;-1:-1:-1;6999:458:23:o;3531:1701::-;2501:10;-1:-1:-1;;;;;2515:6:23;2501:20;;2493:65;;;;-1:-1:-1;;;2493:65:23;;;;;;;:::i;:::-;3601:9:::1;:7;:9::i;:::-;3620:21;:19;:21::i;:::-;3652:18;:31:::0;;-1:-1:-1;;;;;;3652:31:23::1;::::0;;;3754:24;3681:1:::1;3725:26:::0;;3681:1;;3712:67:::1;::::0;::::1;::::0;::::1;::::0;3681:1;;3725:53:::1;::::0;3754:24;3725:53:::1;:::i;:::-;3712:6;:67::i;:::-;3694:86;;3853:3;:8;;3860:1;3853:8:::0;3849:45:::1;;3877:7;3531:1701:::0;:::o;3849:45::-:1;3909:9;3904:870;3928:21;:28:::0;3924:32;::::1;3904:870;;;3977:12;3992:21;4014:1;3992:24;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;3992:24:23::1;4060:30:::0;;;:24:::1;:30:::0;;;;;;;;4108:15;;::::1;::::0;3992:24;;-1:-1:-1;4060:30:23;4108:15:::1;;4104:62;;;4143:8;;;;4104:62;4184:18;::::0;-1:-1:-1;;;;;4184:18:23::1;4180:163;;-1:-1:-1::0;4236:18:23::1;:25:::0;;-1:-1:-1;;;;;;4236:25:23::1;-1:-1:-1::0;;;;;4236:25:23;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4279:19:23::1;:23:::0;4320:8:::1;;4180:163;4383:3;4361:25;;:19;;:25;4357:119;;;4406:29;4425:4;4431:3;4406:18;:29::i;:::-;4453:8;;;;4357:119;4548:18;::::0;-1:-1:-1;;;;;4548:18:23;;::::1;4490:30;4523:44:::0;;;:24:::1;:44;::::0;;;;;;;;4597:35;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;4548:18;4597:35;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;4523:44;;4586:102:::1;::::0;4597:35;;;;::::1;::::0;;4626:4;;4597:35;;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;4597:35:23;;;;-1:-1:-1;;;4597:35:23;;4634:53:::1;::::0;;;;::::1;::::0;;4651:18:::1;::::0;-1:-1:-1;;;;;4651:18:23::1;4634:53:::0;;;;::::1;::::0;::::1;::::0;;;;;;4651:18;4634:53;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;4677:8;;4634:53;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;::::0;4586:10:::1;:102::i;:::-;4582:182;;;4720:29;4739:4;4745:3;4720:18;:29::i;:::-;3963:811;;;3904:870;3958:3;;3904:870;;;-1:-1:-1::0;4817:7:23::1;:14:::0;;::::1;::::0;::::1;::::0;;4784:30:::1;4817:14:::0;;;4857:18:::1;::::0;4817:14;;;::::1;::::0;-1:-1:-1;;;;;4857:18:23;;::::1;::::0;4885:31:::1;::::0;4892:24:::1;::::0;4885:31:::1;:::i;:::-;4967:3;4953:18;;-1:-1:-1::0;;;;;4953:18:23::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;4953:18:23::1;-1:-1:-1::0;4926:45:23;;::::1;::::0;:24:::1;::::0;:45:::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;4986:9:23::1;4981:245;5005:3;5001:7;;:1;:7;4981:245;;;5059:4;5029:24;5054:1;5029:27;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:34:::0;;-1:-1:-1;;;;;5029:34:23;;::::1;-1:-1:-1::0;;;;;;5029:34:23;;::::1;;::::0;;;5088:85:::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;5129:30;;;:24:::1;:30:::0;;;;;;5029:34;5129:42;;::::1;::::0;5088:85;;::::1;::::0;;;5077:97;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;5195:20;;;:14:::1;:20:::0;;;;;;::::1;::::0;5010:3:::1;4981:245;;;;3591:1641;;;2568:1;3531:1701:::0;:::o;9406:400::-;9482:10;9878:4;9901:29;;;:23;:29;;;;;;;;9452:71;;;;-1:-1:-1;;;9452:71:23;;17855:2:32;9452:71:23;;;17837:21:32;17894:2;17874:18;;;17867:30;17933:27;17913:18;;;17906:55;17978:18;;9452:71:23;17653:349:32;9452:71:23;9593:10;9534:31;9568:36;;;:24;:36;;;;;;;;9623:20;;;;;;9622:21;9614:63;;;;-1:-1:-1;;;9614:63:23;;18209:2:32;9614:63:23;;;18191:21:32;18248:2;18228:18;;;18221:30;18287:31;18267:18;;;18260:59;18336:18;;9614:63:23;18007:353:32;9614:63:23;9688:20;;;:27;;-1:-1:-1;;9688:27:23;9711:4;9688:27;;;;;;9725:29;;9711:4;;9688:20;;9725:29;;9711:4;;9725:29;:::i;:::-;;;;-1:-1:-1;;9770:29:23;;9788:10;18511:51:32;;9770:29:23;;18499:2:32;18484:18;9770:29:23;;;;;;;9442:364;9406:400::o;10692:845::-;10770:19;2501:10;-1:-1:-1;;;;;2515:6:23;2501:20;;2493:65;;;;-1:-1:-1;;;2493:65:23;;;;;;;:::i;:::-;10801:26:::1;10847:30;10854:5;10861:1;10864:12;;10847:6;:30::i;:::-;-1:-1:-1::0;;;;;10830:48:23::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;10830:48:23::1;;;;;;;;;;;;;;;-1:-1:-1::0;10904:11:23::1;::::0;10801:77;;-1:-1:-1;;;;;;10904:11:23;;::::1;::::0;10930:18;::::1;::::0;10926:74:::1;;-1:-1:-1::0;;;;;;10971:13:23;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:18:::1;;::::0;::::1;10926:74;11010:9;11033:211;-1:-1:-1::0;;;;;11040:18:23;::::1;::::0;;::::1;::::0;:31:::1;;;11066:5;11062:1;:9;11040:31;11033:211;;;-1:-1:-1::0;;;;;11108:13:23;;::::1;11087:18;11108:13:::0;;;:7:::1;:13;::::0;;;;;;;;11149:53;;;;::::1;::::0;;;;;;11185:15;;;;::::1;11149:53:::0;;::::1;::::0;;;;11108:13;11135:6;11142:3;::::1;::::0;::::1;:::i;:::-;;;11135:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:67;11223:10:::1;;::::0;-1:-1:-1;;;;;11223:10:23::1;::::0;-1:-1:-1;11033:211:23::1;;;11275:1;11258:6;:13;:18:::0;11254:62:::1;;11299:6;11292:13;;;;;;;11254:62;11374:25;11419:1;-1:-1:-1::0;;;;;11402:19:23::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;11402:19:23::1;;;;;;;;;;;;;;;-1:-1:-1::0;11374:47:23;-1:-1:-1;11436:9:23::1;11431:77;11455:1;11451;:5;11431:77;;;11488:6;11495:1;11488:9;;;;;;;;:::i;:::-;;;;;;;11477:5;11483:1;11477:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;11458:3:::1;;11431:77;;;-1:-1:-1::0;11525:5:23;10692:845;-1:-1:-1;;;;;;10692:845:23:o;7628:449::-;7751:21;:28;7677:18;;7707:25;;-1:-1:-1;;;;;7735:45:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;7707:73:23;-1:-1:-1;7795:9:23;7790:257;7814:21;:28;7810:32;;7790:257;;;7863:12;7878:21;7900:1;7878:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;7878:24:23;7945:30;;;:24;:30;;;;;;;;8001:35;;;;;;;;;;;;;;;;;;;;;7878:24;8001:35;;;;;;;;;;;;;;;;;;;;;;;;;;;7878:24;;-1:-1:-1;7945:30:23;;8001:35;;;;7945:30;;8001:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7989:6;7996:1;7989:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;7844:3:23;;7790:257;;14633:523;-1:-1:-1;;;;;14708:13:23;;;14687:18;14708:13;;;:7;:13;;;;;14735:15;;14708:13;;14735:15;14731:66;;14780:7;14633:523;:::o;14731:66::-;14830:13;;;;-1:-1:-1;;;;;14873:12:23;;;14858:27;;14854:257;;;14958:27;14973:12;-1:-1:-1;;;;;14958:12:23;;;:27;:::i;:::-;14926:15;;-1:-1:-1;;;;;14926:15:23;14901:41;;;;:24;:41;;;;;14926:15;14901:53;:84;;:53;;:41;:84;;;;;:::i;:::-;;;;-1:-1:-1;14854:257:23;;-1:-1:-1;14854:257:23;;15073:27;-1:-1:-1;;;;;15088:12:23;;;15073;:27;:::i;:::-;15041:15;;-1:-1:-1;;;;;15041:15:23;15016:41;;;;:24;:41;;;;;15041:15;15016:53;:84;;:53;;:41;:84;;;;;:::i;:::-;;;;-1:-1:-1;;14854:257:23;-1:-1:-1;;;;;;15137:12:23;;;;15121:13;;;;:28;14633:523::o;12702:1056::-;12787:10;12739:7;12779:19;;;:7;:19;;;;;12816:15;;-1:-1:-1;;;;;12816:15:23;12808:79;;;;-1:-1:-1;;;12808:79:23;;18775:2:32;12808:79:23;;;18757:21:32;18814:2;18794:18;;;18787:30;18853:34;18833:18;;;18826:62;-1:-1:-1;;;18904:18:32;;;18897:35;18949:19;;12808:79:23;18573:401:32;12808:79:23;12917:11;;12902;;-1:-1:-1;;;;;12917:11:23;;;12902;;:26;12898:528;;12944:11;:24;;-1:-1:-1;;;;;;12944:24:23;;;;;;12982:11;:24;;;;;;;12898:528;;;13027:11;;13042:10;-1:-1:-1;;;;;13027:11:23;;;:25;13023:403;;13076:10;;;;;-1:-1:-1;;;;;13076:10:23;;;13103:1;13068:19;;;:7;:19;;;;;:24;;:37;;-1:-1:-1;;;;;;13068:37:23;;;;;;13133:10;;13119:11;:24;;;;;13133:10;;13119:24;;;13023:403;;;13164:11;;13179:10;-1:-1:-1;;;;;13164:11:23;;;:25;13160:266;;13213:11;;-1:-1:-1;;;;;13213:11:23;;;13241:1;13205:20;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;13205:38:23;;;;;;13279:11;;;;;;13271:20;;;;;;:25;;;13257:39;;13271:25;;13257:39;;;;;;13160:266;;;13354:10;;;;;;13335;;;;;;-1:-1:-1;;;;;13335:10:23;;;13354;13327:19;;;:7;:19;;;;;;:24;;;:37;;13354:10;;;-1:-1:-1;;;;;;13327:37:23;;;;;;13405:10;;13386;;;;13378:19;;;;;:24;:37;;13405:10;;;;13378:37;;;;;13160:266;13460:15;;-1:-1:-1;;;;;13460:15:23;13436:21;13524:41;;;:24;:41;;;;;13460:15;13605:13;;;;13576:25;;;:42;;13524:41;;13605:13;;13576:25;;13436:21;13576:42;;13605:13;;13576:42;:::i;:::-;;;;-1:-1:-1;;13628:30:23;;13657:1;;13628:13;;:25;;:30;;13657:1;;13628:30;:::i;:::-;;;;-1:-1:-1;;13684:10:23;13676:19;;;;:7;:19;;;;;13669:26;;-1:-1:-1;;;;;;13669:26:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13706:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;13738:13:23;;12702:1056;-1:-1:-1;;;;12702:1056:23:o;9943:162::-;10054:2;10034:22;;10026:72;;;;-1:-1:-1;;;10026:72:23;;19322:2:32;10026:72:23;;;19304:21:32;19361:2;19341:18;;;19334:30;19400:34;19380:18;;;19373:62;-1:-1:-1;;;19451:18:32;;;19444:35;19496:19;;10026:72:23;19120:401:32;10026:72:23;9943:162;;:::o;2701:523::-;2751:21;:28;2739:9;2806:5;2810:1;2751:28;2806:5;:::i;:::-;2794:17;;2789:429;2813:5;;2789:429;;2901:9;2991:5;:1;2995;2991:5;:::i;:::-;2931:54;;;2948:15;2931:54;;;19711:19:32;2965:16:23;19746:12:32;;;19739:28;;;;19783:12;;;19776:28;;;19820:12;;2931:54:23;;;;;;;;;;;;2921:65;;;;;;2913:74;;:84;;;;:::i;:::-;2901:96;;3058:12;3073:21;3095:1;3073:24;;;;;;;;:::i;:::-;;;;;;;;;;;3138:21;:24;;-1:-1:-1;;;;;3073:24:23;;;;-1:-1:-1;3138:21:23;3160:1;;3138:24;;;;;;:::i;:::-;;;;;;;;;;;3111:21;:24;;-1:-1:-1;;;;;3138:24:23;;;;3133:1;;3111:24;;;;;;:::i;:::-;;;;;;;;;:51;;;;;-1:-1:-1;;;;;3111:51:23;;;;;-1:-1:-1;;;;;3111:51:23;;;;;;3203:4;3176:21;3198:1;3176:24;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;;-1:-1:-1;;;;;3176:31:23;;;;;-1:-1:-1;;;;;3176:31:23;;;;;;2825:393;;2820:3;;;;;:::i;:::-;;;;2789:429;;3230:295;3295:18;;-1:-1:-1;;;;;3295:18:23;3324:162;-1:-1:-1;;;;;3331:18:23;;;3324:162;;-1:-1:-1;;;;;3408:23:23;;;3365:15;3408:23;;;:14;:23;;;;;;;-1:-1:-1;;;;;;3445:30:23;;;;;3408:23;3324:162;;;-1:-1:-1;3517:1:23;3495:19;:23;3230:295::o;15495:337::-;15574:7;15608:3;15601;:10;;15593:70;;;;-1:-1:-1;;;15593:70:23;;20259:2:32;15593:70:23;;;20241:21:32;20298:2;20278:18;;;20271:30;20337:34;20317:18;;;20310:62;-1:-1:-1;;;20388:18:32;;;20381:45;20443:19;;15593:70:23;20057:411:32;15593:70:23;15685:3;15677:5;:11;15673:153;;;-1:-1:-1;15711:3:23;15704:10;;15673:153;15743:3;15735:5;:11;15731:95;;;-1:-1:-1;15769:3:23;15762:10;;15731:95;-1:-1:-1;15810:5:23;15731:95;15495:337;;;;;:::o;5238:1390::-;-1:-1:-1;;;;;5338:30:23;;5310:25;5338:30;;;:24;:30;;;;;;;;5310:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5338:30;5310:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5310:58:23;;;;-1:-1:-1;;5424:89:23;;;;;;;;5441:18;;-1:-1:-1;;;;;5441:18:23;5424:89;;;-1:-1:-1;5467:44:23;;;:24;5424:89;5467:44;;;;;;;5424:89;;;;;;;;;;;5441:18;5424:89;;;;;;;;;;;;;;;;;;;;;;;;;;;5310:58;;-1:-1:-1;5396:184:23;;5424:89;;-1:-1:-1;5424:89:23;;;;;;5467:44;;5424:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5531:35;;;;;;;;5548:4;-1:-1:-1;;;;;5531:35:23;;;;;5560:4;5531:35;;;5396:10;:184::i;:::-;5379:999;;;5605:16;5616:4;5605:10;:16::i;:::-;5379:999;;;5685:18;;-1:-1:-1;;;;;5685:18:23;;;5652:15;5670:34;;;:14;:34;;;;;;;;;;5770:598;-1:-1:-1;;;;;5805:21:23;;5801:122;;5850:27;5862:8;5872:4;5850:11;:27::i;:::-;5899:5;;5801:122;6002:67;;;;;;;;-1:-1:-1;;;;;6002:67:23;;;;;-1:-1:-1;6034:33:23;;;:24;6002:67;6034:33;;;;;;;6002:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5966:186;;6002:67;;;;6034:33;6002:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6095:35;;;;;;;;6112:4;-1:-1:-1;;;;;6095:35:23;;;;;6124:4;6095:35;;;5966:10;:186::i;:::-;5941:325;;;6193:27;6205:8;6215:4;6193:11;:27::i;5941:325::-;-1:-1:-1;;;;;;6330:23:23;;;;;;;:14;:23;;;;;;;;5770:598;;;5638:740;;5379:999;6414:3;6392:25;;:19;;:25;6388:234;;;6463:18;;;-1:-1:-1;;;;;6463:18:23;;;6433:12;6448:34;;;:14;:34;;;;;;;-1:-1:-1;;;;;;6496:41:23;;;;;;6551:25;;6448:34;;6551:25;;;;;;;6590:19;:21;;6448:34;;6590:21;;;:::i;:::-;;;;;;6419:203;5300:1328;5238:1390;;:::o;15162:327::-;15263:4;15314:10;:15;;;:27;;;15283:10;:15;;;:27;;;:58;15279:129;;-1:-1:-1;15382:15:23;;15364;;-1:-1:-1;;;;;15364:33:23;;;;;;15357:40;;15279:129;-1:-1:-1;15455:15:23;;;;;:27;;;15425:15;;;;:27;;:57;;15162:327::o;6634:167::-;6710:18;;;-1:-1:-1;;;;;6687:20:23;;;6710:18;6687:20;;;:14;:20;;;;;:41;;6710:18;;;;-1:-1:-1;;;;;;6687:41:23;;;;;;;6738:25;;;;;;;;;6773:19;:21;;;;;;:::i;:::-;;;;;;6634:167;:::o;6807:186::-;-1:-1:-1;;;;;6898:20:23;;;;;;;:14;:20;;;;;;;;6875;;;;;;;;;:43;;6898:20;;;;-1:-1:-1;;;;;;6875:43:23;;;;;;;6928:20;;;:27;;;;;;;;;;6965:19;:21;;;;;;:::i;:::-;;;;;;6807:186;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:173:32;264:20;;-1:-1:-1;;;;;313:31:32;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:186::-;433:6;486:2;474:9;465:7;461:23;457:32;454:52;;;502:1;499;492:12;454:52;525:29;544:9;525:29;:::i;565:871::-;682:1;678;673:3;669:11;665:19;657:5;651:12;647:38;642:3;635:51;617:3;732:4;725:5;721:16;715:23;770:4;763;758:3;754:14;747:28;813:12;807:19;800:4;795:3;791:14;784:43;881:4;867:12;863:23;857:30;852:2;847:3;843:12;836:52;958:4;944:12;940:23;934:30;927:38;920:46;913:4;908:3;904:14;897:70;1022:2;1008:12;1004:21;998:28;976:50;;1057:4;1051:3;1046;1042:13;1035:27;1091:14;1085:21;1137:6;1131:3;1126;1122:13;1115:29;1162:1;1172:147;1186:6;1183:1;1180:13;1172:147;;;1302:4;1278:22;;;1274:33;;1268:40;1262:3;1249:11;;;1245:21;1238:71;1201:12;1172:147;;;1176:3;1363:1;1357:3;1348:6;1343:3;1339:16;1335:26;1328:37;1426:3;1419:2;1415:7;1410:2;1402:6;1398:15;1394:29;1389:3;1385:39;1381:49;1374:56;;;;565:871;;;;:::o;1441:266::-;1626:2;1615:9;1608:21;1589:4;1646:55;1697:2;1686:9;1682:18;1674:6;1646:55;:::i;1712:610::-;1798:6;1806;1859:2;1847:9;1838:7;1834:23;1830:32;1827:52;;;1875:1;1872;1865:12;1827:52;1915:9;1902:23;-1:-1:-1;;;;;1940:6:32;1937:30;1934:50;;;1980:1;1977;1970:12;1934:50;2003:22;;2056:4;2048:13;;2044:27;-1:-1:-1;2034:55:32;;2085:1;2082;2075:12;2034:55;2125:2;2112:16;-1:-1:-1;;;;;2143:6:32;2140:30;2137:50;;;2183:1;2180;2173:12;2137:50;2236:7;2231:2;2221:6;2218:1;2214:14;2210:2;2206:23;2202:32;2199:45;2196:65;;;2257:1;2254;2247:12;2196:65;2288:2;2280:11;;;;;2310:6;;-1:-1:-1;1712:610:32;-1:-1:-1;;;1712:610:32:o;2327:346::-;2395:6;2403;2456:2;2444:9;2435:7;2431:23;2427:32;2424:52;;;2472:1;2469;2462:12;2424:52;-1:-1:-1;;2517:23:32;;;2637:2;2622:18;;;2609:32;;-1:-1:-1;2327:346:32:o;2678:1554::-;2868:4;2916:2;2905:9;2901:18;2946:2;2935:9;2928:21;2969:6;3004;2998:13;3035:6;3027;3020:22;3073:2;3062:9;3058:18;3051:25;;3135:2;3125:6;3122:1;3118:14;3107:9;3103:30;3099:39;3085:53;;3173:2;3165:6;3161:15;3194:1;3204:999;3218:6;3215:1;3212:13;3204:999;;;3283:22;;;-1:-1:-1;;3279:36:32;3267:49;;3339:13;;3422:9;;3407:25;;3479:2;3471:11;;;3465:18;3391:2;3503:15;;;3496:27;;;3584:19;;3379:15;;;3616:24;;;3706:21;;;-1:-1:-1;;3674:2:32;3662:15;;;3765:330;3781:8;3776:3;3773:17;3765:330;;;3854:15;;3904:9;;-1:-1:-1;;;;;3900:35:32;3886:50;;3990:2;3982:11;;;3976:18;3960:14;;;3953:42;4064:17;;;;3932:1;3800:11;;;;;4032:2;4021:14;;;;3765:330;;;-1:-1:-1;4118:5:32;-1:-1:-1;;;4158:2:32;4181:12;;;;4146:15;;;;;3240:1;3233:9;3204:999;;;-1:-1:-1;4220:6:32;;2678:1554;-1:-1:-1;;;;;;2678:1554:32:o;4237:586::-;4307:6;4315;4368:2;4356:9;4347:7;4343:23;4339:32;4336:52;;;4384:1;4381;4374:12;4336:52;4424:9;4411:23;-1:-1:-1;;;;;4449:6:32;4446:30;4443:50;;;4489:1;4486;4479:12;4443:50;4512:22;;4565:4;4557:13;;4553:27;-1:-1:-1;4543:55:32;;4594:1;4591;4584:12;4543:55;4634:2;4621:16;-1:-1:-1;;;;;4652:6:32;4649:30;4646:50;;;4692:1;4689;4682:12;4646:50;4737:7;4732:2;4723:6;4719:2;4715:15;4711:24;4708:37;4705:57;;;4758:1;4755;4748:12;4828:389;4917:6;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;5026:9;5013:23;-1:-1:-1;;;;;5051:6:32;5048:30;5045:50;;;5091:1;5088;5081:12;5045:50;5114:22;;5170:2;5152:16;;;5148:25;5145:45;;;5186:1;5183;5176:12;5222:828;5420:4;5468:2;5457:9;5453:18;5498:2;5487:9;5480:21;5521:6;5556;5550:13;5587:6;5579;5572:22;5625:2;5614:9;5610:18;5603:25;;5687:2;5677:6;5674:1;5670:14;5659:9;5655:30;5651:39;5637:53;;5725:2;5717:6;5713:15;5746:1;5756:265;5770:6;5767:1;5764:13;5756:265;;;5863:2;5859:7;5847:9;5839:6;5835:22;5831:36;5826:3;5819:49;5891:50;5934:6;5925;5919:13;5891:50;:::i;:::-;5881:60;-1:-1:-1;5976:2:32;5999:12;;;;5964:15;;;;;5792:1;5785:9;5756:265;;6055:269;6112:6;6165:2;6153:9;6144:7;6140:23;6136:32;6133:52;;;6181:1;6178;6171:12;6133:52;6220:9;6207:23;6270:4;6263:5;6259:16;6252:5;6249:27;6239:55;;6290:1;6287;6280:12;6521:300;6589:6;6597;6650:2;6638:9;6629:7;6625:23;6621:32;6618:52;;;6666:1;6663;6656:12;6618:52;6689:29;6708:9;6689:29;:::i;:::-;6679:39;6787:2;6772:18;;;;6759:32;;-1:-1:-1;;;6521:300:32:o;6826:806::-;7074:2;7086:21;;;7156:13;;7059:18;;;7178:22;;;7026:4;;7257:15;;;7231:2;7216:18;;;7026:4;7300:306;7314:6;7311:1;7308:13;7300:306;;;7373:13;;7415:9;;-1:-1:-1;;;;;7411:35:32;;;7399:48;;7499:2;7491:11;;;7485:18;7481:44;7467:12;;;7460:66;7581:15;;;;7555:2;7546:12;;;;7443:1;7329:9;7300:306;;;-1:-1:-1;7623:3:32;;6826:806;-1:-1:-1;;;;;6826:806:32:o;7994:380::-;8073:1;8069:12;;;;8116;;;8137:61;;8191:4;8183:6;8179:17;8169:27;;8137:61;8244:2;8236:6;8233:14;8213:18;8210:38;8207:161;;8290:10;8285:3;8281:20;8278:1;8271:31;8325:4;8322:1;8315:15;8353:4;8350:1;8343:15;8379:356;8581:2;8563:21;;;8600:18;;;8593:30;8659:34;8654:2;8639:18;;8632:62;8726:2;8711:18;;8379:356::o;8740:127::-;8801:10;8796:3;8792:20;8789:1;8782:31;8832:4;8829:1;8822:15;8856:4;8853:1;8846:15;9177:127;9238:10;9233:3;9229:20;9226:1;9219:31;9269:4;9266:1;9259:15;9293:4;9290:1;9283:15;9309:125;9374:9;;;9395:10;;;9392:36;;;9408:18;;:::i;9439:128::-;9506:9;;;9527:11;;;9524:37;;;9541:18;;:::i;9572:127::-;9633:10;9628:3;9624:20;9621:1;9614:31;9664:4;9661:1;9654:15;9688:4;9685:1;9678:15;10421:271;10604:6;10596;10591:3;10578:33;10560:3;10630:16;;10655:13;;;10630:16;10421:271;-1:-1:-1;10421:271:32:o;11101:135::-;11140:3;11161:17;;;11158:43;;11181:18;;:::i;:::-;-1:-1:-1;11228:1:32;11217:13;;11101:135::o;11366:517::-;11467:2;11462:3;11459:11;11456:421;;;11503:5;11500:1;11493:16;11547:4;11544:1;11534:18;11617:2;11605:10;11601:19;11598:1;11594:27;11588:4;11584:38;11653:4;11641:10;11638:20;11635:47;;;-1:-1:-1;11676:4:32;11635:47;11731:2;11726:3;11722:12;11719:1;11715:20;11709:4;11705:31;11695:41;;11786:81;11804:2;11797:5;11794:13;11786:81;;;11863:1;11849:16;;11830:1;11819:13;11786:81;;12059:1295;12183:3;12177:10;-1:-1:-1;;;;;12202:6:32;12199:30;12196:56;;;12232:18;;:::i;:::-;12261:96;12350:6;12310:38;12342:4;12336:11;12310:38;:::i;:::-;12304:4;12261:96;:::i;:::-;12406:4;12437:2;12426:14;;12454:1;12449:648;;;;13141:1;13158:6;13155:89;;;-1:-1:-1;13210:19:32;;;13204:26;13155:89;-1:-1:-1;;12016:1:32;12012:11;;;12008:24;12004:29;11994:40;12040:1;12036:11;;;11991:57;13257:81;;12419:929;;12449:648;11313:1;11306:14;;;11350:4;11337:18;;-1:-1:-1;;12485:20:32;;;12602:222;12616:7;12613:1;12610:14;12602:222;;;12698:19;;;12692:26;12677:42;;12805:4;12790:20;;;;12758:1;12746:14;;;;12632:12;12602:222;;;12606:3;12852:6;12843:7;12840:19;12837:201;;;12913:19;;;12907:26;-1:-1:-1;;12996:1:32;12992:14;;;13008:3;12988:24;12984:37;12980:42;12965:58;12950:74;;12837:201;-1:-1:-1;;;;13084:1:32;13068:14;;;13064:22;13051:36;;-1:-1:-1;12059:1295:32:o;13359:485::-;-1:-1:-1;;;;;13544:32:32;;13526:51;;13613:2;13608;13593:18;;13586:30;;;13632:18;;13625:34;;;13652:6;13701;13696:2;13681:18;;13668:48;13765:1;13736:22;;;13760:2;13732:31;;;13725:42;;;;13828:2;13807:15;;;-1:-1:-1;;13803:29:32;13788:45;13784:54;;13359:485;-1:-1:-1;;13359:485:32:o;13849:332::-;13949:4;14007:11;13994:25;14101:3;14097:8;14086;14070:14;14066:29;14062:44;14042:18;14038:69;14028:97;;14121:1;14118;14111:12;14028:97;14142:33;;;;;13849:332;-1:-1:-1;;13849:332:32:o;14186:1178::-;-1:-1:-1;;;;;14287:3:32;14284:27;14281:53;;;14314:18;;:::i;:::-;14343:93;14432:3;14392:38;14424:4;14418:11;14392:38;:::i;:::-;14386:4;14343:93;:::i;:::-;14462:1;14487:2;14482:3;14479:11;14504:1;14499:607;;;;15150:1;15167:3;15164:93;;;-1:-1:-1;15223:19:32;;;15210:33;15164:93;-1:-1:-1;;12016:1:32;12012:11;;;12008:24;12004:29;11994:40;12040:1;12036:11;;;11991:57;15270:78;;14472:886;;14499:607;11313:1;11306:14;;;11350:4;11337:18;;-1:-1:-1;;14535:17:32;;;14649:229;14663:7;14660:1;14657:14;14649:229;;;14752:19;;;14739:33;14724:49;;14859:4;14844:20;;;;14812:1;14800:14;;;;14679:12;14649:229;;;14653:3;14906;14897:7;14894:16;14891:159;;;15030:1;15026:6;15020:3;15014;15011:1;15007:11;15003:21;14999:34;14995:39;14982:9;14977:3;14973:19;14960:33;14956:79;14948:6;14941:95;14891:159;;;15093:1;15087:3;15084:1;15080:11;15076:19;15070:4;15063:33;14472:886;;14186:1178;;;:::o;15369:1163::-;15556:19;;15584:21;;15674:2;15663:14;;15650:28;15704:1;15694:12;;15687:29;15753:1;15743:12;;15803:2;15792:14;;15779:28;15833:15;;15826:23;15868:15;;;15858:43;;15897:1;15894;15887:12;15858:43;15952:3;15948:8;15935:10;15929:17;15925:32;15910:47;;16005:3;16001:2;15997:12;15988:7;15985:25;15973:10;15966:45;;;;16070:2;16063:5;16059:14;16046:28;16153:2;16149:7;16141:5;16125:14;16121:26;16117:40;16097:18;16093:65;16083:93;;16172:1;16169;16162:12;16083:93;16197:30;;16250:18;;-1:-1:-1;;;;;16280:30:32;;16277:50;;;16323:1;16320;16313:12;16277:50;16360:2;16354:4;16350:13;16336:27;;16407:6;16391:14;16387:27;16379:6;16375:40;16372:60;;;16428:1;16425;16418:12;16372:60;16441:85;16519:6;16511;16507:1;16501:4;16497:12;16441:85;:::i;:::-;;;15369:1163;;:::o;18979:136::-;19018:3;19046:5;19036:39;;19055:18;;:::i;:::-;-1:-1:-1;;;19091:18:32;;18979:136::o;19843:209::-;19875:1;19901;19891:132;;19945:10;19940:3;19936:20;19933:1;19926:31;19980:4;19977:1;19970:15;20008:4;20005:1;19998:15;19891:132;-1:-1:-1;20037:9:32;;19843:209::o", - "linkReferences": {}, - "immutableReferences": { - "39841": [ - { "start": 996, "length": 32 }, - { "start": 1219, "length": 32 }, - { "start": 1683, "length": 32 }, - { "start": 2569, "length": 32 }, - { "start": 3873, "length": 32 }, - { "start": 5353, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "activeValidatorsCount()": "0d2bd909", - "calculateTopValidators(uint8)": "b5cfa68c", - "getAllValidators()": "f3513a37", - "getRounds(uint256,uint256)": "40f74f47", - "getRoundsCount()": "a09686c4", - "getTopValidators()": "afeea115", - "getValidator(address)": "1904bb2e", - "getVotes(address,uint256)": "eb9019d4", - "getVotesCount()": "1b605b86", - "isValidatorRegistered(address)": "d04a68c7", - "registerValidator(bytes)": "602a9eee", - "registeredValidatorsCount()": "f1bd0b37", - "resignValidator()": "b85f5da2", - "resignedValidatorsCount()": "0777cbef", - "unvote()": "3174b689", - "updateValidator((address,(uint256,uint256,bool,bytes)))": "62525879", - "updateVoters(address[])": "2bdf6d43", - "vote(address)": "6dd7d8ea" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Unvoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"ValidatorResigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"}],\"name\":\"calculateTopValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getRounds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"}],\"internalType\":\"struct RoundValidator[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Round[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTopValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"internalType\":\"struct VoteResult[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isValidatorRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registeredValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignedValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unvote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"bls12_381_public_key\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator\",\"name\":\"_validator\",\"type\":\"tuple\"}],\"name\":\"updateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"}],\"name\":\"updateVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/Consensus.sol\":\"Consensus\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=forge-std/src/\"]},\"sources\":{\"src/consensus/Consensus.sol\":{\"keccak256\":\"0x5b736870bfb3308f6f109276d30415ab555c65a1c1165afbe50c56220ed9d129\",\"urls\":[\"bzz-raw://0d9655228a0caa1a1802d479cc6bd490d8d0f36061f285e855d23e32e55f311c\",\"dweb:/ipfs/QmUfv3d2My7CuFjq7PM6jmxLoXWLrErfGkCT8s1tNKvcCZ\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.27+commit.40a35a09" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "voter", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "validator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unvoted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ValidatorRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ValidatorResigned", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "voter", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "validator", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Voted", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "activeValidatorsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "n", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "calculateTopValidators" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getAllValidators", - "outputs": [ - { - "internalType": "struct Validator[]", - "name": "", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "struct ValidatorData", - "name": "data", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "votersCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "voteBalance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isResigned", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getRounds", - "outputs": [ - { - "internalType": "struct Round[]", - "name": "", - "type": "tuple[]", - "components": [ - { - "internalType": "uint256", - "name": "round", - "type": "uint256" - }, - { - "internalType": "struct RoundValidator[]", - "name": "validators", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "voteBalance", - "type": "uint256" - } - ] - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRoundsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getTopValidators", - "outputs": [ - { - "internalType": "struct Validator[]", - "name": "", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "struct ValidatorData", - "name": "data", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "votersCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "voteBalance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isResigned", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getValidator", - "outputs": [ - { - "internalType": "struct Validator", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "struct ValidatorData", - "name": "data", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "votersCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "voteBalance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isResigned", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getVotes", - "outputs": [ - { - "internalType": "struct VoteResult[]", - "name": "", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "internalType": "address", - "name": "validator", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getVotesCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidatorRegistered", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerValidator" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "registeredValidatorsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "resignValidator" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "resignedValidatorsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "unvote" - }, - { - "inputs": [ - { - "internalType": "struct Validator", - "name": "_validator", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "struct ValidatorData", - "name": "data", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "votersCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "voteBalance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isResigned", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "bls12_381_public_key", - "type": "bytes" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateValidator" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "voters", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateVoters" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "vote" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": ["@contracts/=src/", "@forge-std/=forge-std/src/"], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/consensus/Consensus.sol": "Consensus" }, - "evmVersion": "shanghai", - "libraries": {} - }, - "sources": { - "src/consensus/Consensus.sol": { - "keccak256": "0x5b736870bfb3308f6f109276d30415ab555c65a1c1165afbe50c56220ed9d129", - "urls": [ - "bzz-raw://0d9655228a0caa1a1802d479cc6bd490d8d0f36061f285e855d23e32e55f311c", - "dweb:/ipfs/QmUfv3d2My7CuFjq7PM6jmxLoXWLrErfGkCT8s1tNKvcCZ" - ], - "license": null - } - }, - "version": 1 - }, - "id": 23 + "abi": [ + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "activeValidatorsCount", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addValidator", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "isResigned", "type": "bool", "internalType": "bool" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addVote", + "inputs": [ + { + "name": "voter", + "type": "address", + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calculateActiveValidators", + "inputs": [{ "name": "n", "type": "uint8", "internalType": "uint8" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getActiveValidators", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct ConsensusV1.Validator[]", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "tuple", + "internalType": "struct ConsensusV1.ValidatorData", + "components": [ + { + "name": "votersCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "voteBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "isResigned", + "type": "bool", + "internalType": "bool" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllValidators", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct ConsensusV1.Validator[]", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "tuple", + "internalType": "struct ConsensusV1.ValidatorData", + "components": [ + { + "name": "votersCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "voteBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "isResigned", + "type": "bool", + "internalType": "bool" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRounds", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "count", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct ConsensusV1.Round[]", + "components": [ + { + "name": "round", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ConsensusV1.RoundValidator[]", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "voteBalance", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoundsCount", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidator", + "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ConsensusV1.Validator", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "tuple", + "internalType": "struct ConsensusV1.ValidatorData", + "components": [ + { + "name": "votersCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "voteBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "isResigned", + "type": "bool", + "internalType": "bool" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "count", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct ConsensusV1.VoteResult[]", + "components": [ + { + "name": "voter", + "type": "address", + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotesCount", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isValidatorRegistered", + "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerValidator", + "inputs": [ + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registeredValidatorsCount", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resignValidator", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resignedValidatorsCount", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unvote", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateValidator", + "inputs": [ + { + "name": "blsPublicKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateVoters", + "inputs": [ + { + "name": "voters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "vote", + "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unvoted", + "inputs": [ + { + "name": "voter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorRegistered", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorResigned", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorUpdated", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "blsPublicKey", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Voted", + "inputs": [ + { + "name": "voter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "AlreadyVoted", "inputs": [] }, + { "type": "error", "name": "BellowMinValidators", "inputs": [] }, + { "type": "error", "name": "BlsKeyAlreadyRegistered", "inputs": [] }, + { "type": "error", "name": "BlsKeyIsInvalid", "inputs": [] }, + { "type": "error", "name": "CallerIsNotValidator", "inputs": [] }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "ImportIsNotAllowed", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { "type": "error", "name": "InvalidParameters", "inputs": [] }, + { + "type": "error", + "name": "InvalidRange", + "inputs": [ + { "name": "min", "type": "uint256", "internalType": "uint256" }, + { "name": "max", "type": "uint256", "internalType": "uint256" } + ] + }, + { "type": "error", "name": "MissingVote", "inputs": [] }, + { "type": "error", "name": "NoActiveValidators", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }] + }, + { "type": "error", "name": "ValidatorAlreadyRegistered", "inputs": [] }, + { "type": "error", "name": "ValidatorAlreadyResigned", "inputs": [] }, + { "type": "error", "name": "ValidatorNotRegistered", "inputs": [] }, + { "type": "error", "name": "VoteResignedValidator", "inputs": [] }, + { "type": "error", "name": "VoteSameValidator", "inputs": [] }, + { + "type": "error", + "name": "VoteValidatorWithoutBlsPublicKey", + "inputs": [] + } + ], + "bytecode": { + "object": "0x60a0604052306080523480156012575f5ffd5b5060805161387e6100395f395f81816122680152818161229101526123d0015261387e5ff3fe6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220983e2d933e18f12cab95985824dc16db07106a30fc15cd31c83493c6e0e0f72b64736f6c634300081b0033", + "sourceMap": "1266:19289:37:-:0;;;1171:4:25;1128:48;;1266:19289:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220983e2d933e18f12cab95985824dc16db07106a30fc15cd31c83493c6e0e0f72b64736f6c634300081b0033", + "sourceMap": "1266:19289:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11522:115;;;;;;;;;;-1:-1:-1;11606:24:37;;11522:115;;;160:25:50;;;148:2;133:18;11522:115:37;;;;;;;;11643:111;;;;;;;;;;-1:-1:-1;11725:22:37;;11643:111;;11881:253;;;;;;;;;;-1:-1:-1;11881:253:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12997:93::-;;;;;;;;;;-1:-1:-1;13071:12:37;;12997:93;;8737:176;;;;;;;;;;-1:-1:-1;8737:176:37;;;;;:::i;:::-;;:::i;:::-;;8652:79;;;;;;;;;;;;;:::i;4875:1019::-;;;;;;;;;;-1:-1:-1;4875:1019:37;;;;;:::i;:::-;;:::i;14051:531::-;;;;;;;;;;-1:-1:-1;14051:531:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4161:214:25:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;11325:76:37:-;;;;;;;;;;-1:-1:-1;11393:1:37;11325:76;;6502:354;;;;;;;;;;-1:-1:-1;6502:354:37;;;;;:::i;:::-;;:::i;5900:596::-;;;;;;;;;;-1:-1:-1;5900:596:37;;;;;:::i;:::-;;:::i;7431:1215::-;;;;;;;;;;-1:-1:-1;7431:1215:37;;;;;:::i;:::-;;:::i;3155:101:23:-;;;;;;;;;;;;;:::i;3885:984:37:-;;;;;;;;;;-1:-1:-1;3885:984:37;;;;;:::i;:::-;;:::i;3634:112::-;;;;;;;;;;;;;:::i;8919:2360::-;;;;;;;;;;-1:-1:-1;8919:2360:37;;;;;:::i;:::-;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;7899:51:50;;7887:2;7872:18;2441:144:23;7753:203:50;12140:433:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13949:96::-;;;;;;;;;;-1:-1:-1;14024:7:37;:14;13949:96;;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;6862:563:37:-;;;;;;;;;;;;;:::i;11760:115::-;;;;;;;;;;-1:-1:-1;11760:115:37;;;;;:::i;:::-;;:::i;:::-;;;9183:14:50;;9176:22;9158:41;;9146:2;9131:18;11760:115:37;9018:187:50;13096:847:37;;;;;;;;;;-1:-1:-1;13096:847:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11407:109::-;;;;;;;;;;-1:-1:-1;11493:16:37;;11407:109;;3405:215:23;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;12579:412:37:-;;;;;;;;;;;;;:::i;11881:253::-;11940:16;;:::i;:::-;11973:27;11995:4;11973:21;:27::i;:::-;11968:90;;12023:24;;-1:-1:-1;;;12023:24:37;;;;;;;;;;;11968:90;12075:52;;;;;;;;-1:-1:-1;;;;;12075:52:37;;;;;-1:-1:-1;12104:21:37;;;12075:52;12104:21;;;;;;;12075:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12075:52:37;;;;-1:-1:-1;;;12075:52:37;;12068:59;11881:253;-1:-1:-1;;11881:253:37:o;8737:176::-;2334:13:23;:11;:13::i;:::-;8820:9:37::1;8815:92;8835:17:::0;;::::1;8815:92;;;8873:23;8886:6;;8893:1;8886:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8873:12;:23::i;:::-;8854:3;;8815:92;;;;8737:176:::0;;:::o;8652:79::-;8694:30;8702:10;8714:9;:7;:9::i;:::-;8694:30;;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;;;11099:2;11084:18;;11077:60;10990:18;8694:30:37;;;;;;;8652:79::o;4875:1019::-;2334:13:23;:11;:13::i;:::-;4959:7:37::1;:14:::0;:18;4955:76:::1;;5000:20;;-1:-1:-1::0;;;5000:20:37::1;;;;;;;;;;;4955:76;5046:32;5068:9;5046:21;:32::i;:::-;5041:95;;5101:24;;-1:-1:-1::0;;;5101:24:37::1;;;;;;;;;;;5041:95;-1:-1:-1::0;;;;;5171:14:37;;::::1;5146:22;5171:14:::0;;;:7:::1;:14;::::0;;;;5199:19;;5171:14;;5199:19:::1;:33:::0;5195:85:::1;;5255:14;;-1:-1:-1::0;;;5255:14:37::1;;;;;;;;;;;5195:85;5307:88;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;5307:88:37;;::::1;::::0;;5344:13;;::::1;::::0;::::1;5307:88;::::0;;::::1;::::0;;;-1:-1:-1;5307:88:37;;;;;;;;;;;;5290:14;;;:7:::1;:14:::0;;;;;;;:105;;;;;;::::1;-1:-1:-1::0;;;;;;5290:105:37;;::::1;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;5410:11:::1;::::0;::::1;5406:252;;5451:11;:19:::0;;-1:-1:-1;;;;;5451:19:37;::::1;-1:-1:-1::0;;;;;;5451:19:37;;::::1;::::0;::::1;::::0;;;5484:11:::1;:19:::0;;;;::::1;::::0;;::::1;::::0;;5406:252:::1;;;5542:11;::::0;;-1:-1:-1;;;;;5542:11:37;;::::1;5534:20;::::0;;;:7:::1;:20;::::0;;;;;:25:::1;;:33:::0;;;;::::1;-1:-1:-1::0;;;;;;5534:33:37;;::::1;::::0;::::1;::::0;;;5603:11;;5581:14;;;;;;;:19:::1;;:33:::0;;;::::1;5603:11:::0;;;::::1;5581:33:::0;;;::::1;::::0;;;5628:19;;::::1;;::::0;;5406:252:::1;5667:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;5730:26:37;;::::1;5692:35;5730:26:::0;;;::::1;::::0;;;;;;5766:25:::1;::::0;::::1;:42:::0;;5730:26;;5795:13;::::1;;::::0;5766:25;;:42:::1;::::0;5795:13;;5766:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;5818:30:37;;5847:1:::1;::::0;5818:13;;:25:::1;::::0;:30:::1;::::0;5847:1;;5818:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;5864:23:37::1;::::0;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;11099:2;11084:18;;11077:60;5864:23:37::1;::::0;10990:18:50;5864:23:37::1;;;;;;;4945:949;;4875:1019:::0;;:::o;14051:531::-;14134:14;2334:13:23;:11;:13::i;:::-;14205:7:37::1;:14:::0;14176:5;;14195:24;::::1;14191:163;;-1:-1:-1::0;14243:1:37::1;14191:163;;;14282:7;:14:::0;14265::::1;14274:5:::0;14265:6;:14:::1;:::i;:::-;:31;14261:93;;;14320:7;:14:::0;:23:::1;::::0;14337:6;;14320:23:::1;:::i;:::-;14312:31;;14261:93;14364:21;14400:5;-1:-1:-1::0;;;;;14388:18:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;14388:18:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;14364:42:37;-1:-1:-1;14421:9:37::1;14416:136;14440:5;14436:1;:9;14416:136;;;14478:63;;;;;;;;14501:1;14492:6;:10;;;;:::i;:::-;:14;::::0;14505:1:::1;14492:14;:::i;:::-;14478:63:::0;;::::1;;14520:7;14528:10;14537:1:::0;14528:6;:10:::1;:::i;:::-;14520:19;;;;;;;;:::i;:::-;;;;;;;;14478:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;14478:63:37::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;::::0;14466:6:::1;14473:1;14466:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:75;14447:3:::1;;14416:136;;;-1:-1:-1::0;14569:6:37;-1:-1:-1;;2357:1:23::1;14051:531:37::0;;;;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;:::-;4161:214:::0;;:::o;3708:134::-;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;6502:354:37:-;6580:33;6602:10;6580:21;:33::i;:::-;6575:96;;6636:24;;-1:-1:-1;;;6636:24:37;;;;;;;;;;;6575:96;6681:44;6712:12;;6681:30;:44::i;:::-;6752:10;6736:15;:27;;;;;;;;;;:40;;:55;6779:12;;6736:40;:55;:::i;:::-;;6807:42;6824:10;6836:12;;6807:42;;;;;;;;:::i;:::-;;;;;;;;6502:354;;:::o;5900:596::-;5993:10;5979:25;;;;:13;:25;;;;;;;;5975:91;;;6027:28;;-1:-1:-1;;;6027:28:37;;;;;;;;;;;5975:91;6076:44;6107:12;;6076:30;:44::i;:::-;6131:30;6176:94;;;;;;;;6204:1;6176:94;;;;6220:1;6176:94;;;;6235:5;6176:94;;;;;;6256:12;;6176:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6176:94:37;;;;-1:-1:-1;;6281:16:37;:18;;6131:139;;-1:-1:-1;6281:16:37;-1:-1:-1;6281:18:37;;;:::i;:::-;;;;-1:-1:-1;;6323:10:37;6309:25;;;;6337:4;6309:25;;;;;;;;:32;;-1:-1:-1;;6309:32:37;;;;;;;;6351:27;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;:39;;;;;;;;:::i;:::-;-1:-1:-1;;6400:11:37;:28;;;;;;;-1:-1:-1;6400:28:37;;;;;;;;-1:-1:-1;;;;;;6400:28:37;6417:10;6400:28;;;;;;6444:45;;;;-1:-1:-1;6444:45:37;;6417:10;6476:12;;;;6444:45;:::i;:::-;;;;;;;;5965:531;5900:596;;:::o;7431:1215::-;7483:27;7505:4;7483:21;:27::i;:::-;7478:90;;7533:24;;-1:-1:-1;;;7533:24:37;;;;;;;;;;;7478:90;-1:-1:-1;;;;;7616:21:37;;7578:35;7616:21;;;;;;;;;;7651:24;;;;;;7647:85;;;7698:23;;-1:-1:-1;;;7698:23:37;;;;;;;;;;;7647:85;7746:13;:26;;:33;;;;;:::i;:::-;;;7783:1;7746:38;7742:110;;7807:34;;-1:-1:-1;;;7807:34:37;;;;;;;;;;;7742:110;7891:10;7862:18;7883:19;;;:7;:19;;;;;7916:15;;-1:-1:-1;;;;;7916:23:37;;;:15;;:23;7912:80;;7962:19;;-1:-1:-1;;;7962:19:37;;;;;;;;;;;7912:80;8006:15;;-1:-1:-1;;;;;8006:15:37;:29;8002:69;;8051:9;:7;:9::i;:::-;;8002:69;8103:88;;;;;;;;-1:-1:-1;;;;;8103:88:37;;;;;8135:10;:18;;8103:88;;;;;;;-1:-1:-1;8103:88:37;;;;;;;;;;;;8081:19;;;:7;:19;;;;;;;:110;;;;;;;-1:-1:-1;;;;;;8081:110:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:11;;;8202:277;;8247:11;:24;;8261:10;-1:-1:-1;;;;;;8247:24:37;;;;;;;;8285:11;:24;;;;;;;;;;8202:277;;;8348:11;;;-1:-1:-1;;;;;8348:11:37;;;8340:20;;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;8340:38:37;;;8368:10;8340:38;;;;;;8419:11;;8392:19;;;;;;;:24;;:38;;;;8419:11;;;;8392:38;;;;;;;8444:24;;;;;;8202:277;8488:12;:14;;;:12;:14;;;:::i;:::-;;;;;;8542:10;-1:-1:-1;;;;;8542:18:37;;8513:13;:25;;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;8570:30:37;;8599:1;;8570:13;;:25;;:30;;8599:1;;8570:30;:::i;:::-;;;;-1:-1:-1;;8616:23:37;;;8622:10;11017:51:50;;-1:-1:-1;;;;;11104:32:50;;11099:2;11084:18;;11077:60;8616:23:37;;10990:18:50;8616:23:37;10843:300:50;3155:101:23;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;3885:984:37:-;2334:13:23;:11;:13::i;:::-;4000:7:37::1;:14:::0;:18;3996:76:::1;;4041:20;;-1:-1:-1::0;;;4041:20:37::1;;;;;;;;;;;3996:76;-1:-1:-1::0;;;;;4086:19:37;::::1;;::::0;;;:13:::1;:19;::::0;;;;;::::1;;4082:85;;;4128:28;;-1:-1:-1::0;;;4128:28:37::1;;;;;;;;;;;4082:85;4181:14;:39;4206:12;;4196:23;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;4181:39;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;4181:39:37;;::::1;;4177:102;;;4243:25;;-1:-1:-1::0;;;4243:25:37::1;;;;;;;;;;;4177:102;4341:24:::0;;4337:99:::1;;4381:44;4412:12;;4381:30;:44::i;:::-;4446:30;4491:99;;;;;;;;4519:1;4491:99;;;;4535:1;4491:99;;;;4550:10;4491:99;;;;;;4576:12;;4491:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4491:99:37;;;;-1:-1:-1;;4601:16:37::1;:18:::0;;4446:144;;-1:-1:-1;4601:16:37;-1:-1:-1;4601:18:37::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;4629:19:37;::::1;;::::0;;;4651:4:::1;4629:19;::::0;;;;;;;:26;;-1:-1:-1;;4629:26:37;;::::1;::::0;::::1;::::0;;;4665:21;;;;;;;:33;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;;;::::0;;;::::1;::::0;::::1;::::0;;;:21;:33:::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;4708:11:37::1;:22:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4708:22:37;;;;;::::1;::::0;;-1:-1:-1;;;;;;4708:22:37::1;-1:-1:-1::0;;;;;4708:22:37;::::1;;::::0;;-1:-1:-1;4741:67:37;::::1;;;4771:24;:26:::0;;;:24:::1;:26;::::0;::::1;:::i;:::-;;;;;;4741:67;4823:39;4843:4;4849:12;;4823:39;;;;;;;;:::i;:::-;;;;;;;;3986:883;3885:984:::0;;;;:::o;3634:112::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;3685:26:37::1;3700:10;3685:14;:26::i;:::-;3738:1;3721:14;:18:::0;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;15919:50:50;;5142:14:24;;15907:2:50;15892:18;5142:14:24;15766:209:50;5066:101:24;4092:1081;;;;;3634:112:37:o;8919:2360::-;2334:13:23;:11;:13::i;:::-;8996:1:37::1;:6;;9001:1;8996:6:::0;8992:63:::1;;9025:19;;-1:-1:-1::0;;;9025:19:37::1;;;;;;;;;;;8992:63;9065:18;::::0;::::1;:14;:18:::0;9094:21:::1;9103:11;9094:8;:21::i;:::-;9125:25;:23;:25::i;:::-;9161:21;:34:::0;;-1:-1:-1;;;;;;9161:34:37::1;::::0;;9255:24:::1;::::0;9236:16:::1;::::0;9193:1:::1;::::0;9223:57:::1;::::0;::::1;::::0;::::1;::::0;9193:1;;9236:43:::1;::::0;9255:24;9236:43:::1;:::i;:::-;9223:6;:57::i;:::-;9205:76;;9296:3;:8;;9303:1;9296:8:::0;9292:66:::1;;9327:20;;-1:-1:-1::0;;;9327:20:37::1;;;;;;;;;;;9292:66;9373:9;9368:936;9392:11;:18:::0;9388:22;::::1;9368:936;;;9431:12;9446:11;9458:1;9446:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;9446:14:37::1;9504:21:::0;;;;;;;;;;;9544:15:::1;::::0;::::1;::::0;9446:14;;-1:-1:-1;9504:21:37;9544:15:::1;;::::0;:48:::1;;;9563:4;:17;;:24;;;;;:::i;:::-;:29:::0;;-1:-1:-1;9544:48:37::1;9540:95;;;9612:8;;;;9540:95;9653:21;::::0;-1:-1:-1;;;;;9653:21:37::1;9649:172;;-1:-1:-1::0;9708:21:37::1;:28:::0;;-1:-1:-1;;;;;;9708:28:37::1;-1:-1:-1::0;;;;;9708:28:37;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;9754:22:37::1;:26:::0;9798:8:::1;;9649:172;9864:3;9839:28;;:22;;:28;9835:120;;;9887:27;9904:4;9910:3;9887:16;:27::i;:::-;9932:8;;;;9835:120;10018:21;::::0;-1:-1:-1;;;;;10018:21:37;;::::1;9969:30;10002:38:::0;;;::::1;::::0;;;;;;;;10108:35;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;10018:21;10108:35;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;10002:38;;10076:143:::1;::::0;10108:35;;;::::1;::::0;;;10137:4;;10108:35;;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;10108:35:37;;;;-1:-1:-1;;;10108:35:37;;10145:56:::1;::::0;;;;::::1;::::0;;10162:21:::1;::::0;-1:-1:-1;;;;;10162:21:37::1;10145:56:::0;;;;::::1;::::0;::::1;::::0;;;;;;10162:21;10145:56;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;10191:8;;10145:56;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;::::0;10076:10:::1;:143::i;:::-;10055:239;;;10252:27;10269:4;10275:3;10252:16;:27::i;:::-;9417:887;;;9368:936;9412:3;;9368:936;;;;10318:22;;10344:1;10318:27:::0;10314:85:::1;;10368:20;;-1:-1:-1::0;;;10368:20:37::1;;;;;;;;;;;10314:85;10505:21;::::0;10583:22:::1;::::0;-1:-1:-1;;;;;10505:21:37;;::::1;::::0;10490:12:::1;::::0;-1:-1:-1;;;;;10569:37:37;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10569:37:37::1;-1:-1:-1::0;10536:70:37;-1:-1:-1;10622:9:37::1;10617:148;10641:22;;10637:1;:26;10617:148;;;10703:4;10684:13;10698:1;10684:16;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10684:23:37;;::::1;:16;::::0;;::::1;::::0;;;;;;:23;;;;10728:26;;::::1;;::::0;;;:20:::1;:26:::0;;;;;;;;;;::::1;::::0;;10665:3:::1;10617:148;;;;10774:26;10786:13;10774:11;:26::i;:::-;10886:7;:14:::0;;::::1;::::0;::::1;::::0;;10853:30:::1;10886:14:::0;;;;::::1;::::0;10910:24:::1;::::0;10917:17:::1;::::0;10910:24:::1;:::i;:::-;10978:14;;-1:-1:-1::0;;;;;10964:29:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10964:29:37::1;-1:-1:-1::0;10944:49:37;;::::1;::::0;:17:::1;::::0;:49:::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11009:9:37::1;11004:269;11028:14;;11024:1;:18;11004:269;;;11063:12;11078:13;11096:22;;11092:1;:26;;;;:::i;:::-;11078:41;;;;;;;;:::i;:::-;;;;;;;11063:56;;11156:4;11133:17;11151:1;11133:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:27:::0;;-1:-1:-1;;;;;11133:27:37;;::::1;-1:-1:-1::0;;;;;;11133:27:37;;::::1;;::::0;;;11185:76:::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;11226:21;;;;;;;11133:27;11226:33;;::::1;::::0;11185:76;;::::1;::::0;;;11174:88;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;;;;::::1;::::0;11044:3:::1;11004:269;;;;8982:2297;;;;8919:2360:::0;:::o;12140:433::-;12268:17;:24;12194:18;;12224:25;;-1:-1:-1;;;;;12252:41:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12224:69:37;-1:-1:-1;12308:9:37;12303:240;12327:17;:24;12323:28;;12303:240;;;12372:12;12387:17;12405:1;12387:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12387:20:37;12450:21;;;;;;;;;;;12497:35;;;;;;;;;;;;;;;;;;;;;12387:20;12497:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12387:20;;-1:-1:-1;12450:21:37;;12497:35;;;;;;;12450:21;;12497:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12485:6;12492:1;12485:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12353:3:37;;12303:240;;;-1:-1:-1;12560:6:37;12140:433;-1:-1:-1;12140:433:37:o;6862:563::-;6913:33;6935:10;6913:21;:33::i;:::-;6908:94;;6969:22;;-1:-1:-1;;;6969:22:37;;;;;;;;;;;6908:94;7062:10;7012:31;7046:27;;;;;;;;;;7087:20;;;;;;7083:84;;;7130:26;;-1:-1:-1;;;7130:26:37;;;;;;;;;;;7083:84;7228:14;;7200:24;;7181:16;;:43;;;;:::i;:::-;:61;7177:120;;7265:21;;-1:-1:-1;;;7265:21:37;;;;;;;;;;;7177:120;7307:20;;;:27;;-1:-1:-1;;7307:27:37;7330:4;7307:27;;;;;;7344:24;:29;;7307:20;;7344:29;;7330:4;;7344:29;:::i;:::-;;;;-1:-1:-1;;7389:29:37;;7407:10;7899:51:50;;7389:29:37;;7887:2:50;7872:18;7389:29:37;;;;;;;6898:527;6862:563::o;11760:115::-;-1:-1:-1;;;;;11849:19:37;11826:4;11849:19;;;:13;:19;;;;;;;;;11760:115::o;13096:847::-;13176:19;2334:13:23;:11;:13::i;:::-;13207:26:37::1;13253:30;13260:5;13267:1;13270:12;;13253:6;:30::i;:::-;-1:-1:-1::0;;;;;13236:48:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13236:48:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13310:11:37::1;::::0;13207:77;;-1:-1:-1;;;;;;13310:11:37;;::::1;::::0;13336:18;::::1;::::0;13332:74:::1;;-1:-1:-1::0;;;;;;13377:13:37;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:18:::1;;::::0;::::1;13332:74;13416:9;13439:211;-1:-1:-1::0;;;;;13446:18:37;::::1;::::0;;::::1;::::0;:31:::1;;;13472:5;13468:1;:9;13446:31;13439:211;;;-1:-1:-1::0;;;;;13514:13:37;;::::1;13493:18;13514:13:::0;;;:7:::1;:13;::::0;;;;;;;;13555:53;;;;::::1;::::0;;;;;;13591:15;;;;::::1;13555:53:::0;;::::1;::::0;;;;13514:13;13541:6;13548:3;::::1;::::0;::::1;:::i;:::-;;;13541:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:67;13629:10:::1;;::::0;-1:-1:-1;;;;;13629:10:37::1;::::0;-1:-1:-1;13439:211:37::1;;;13681:1;13664:6;:13;:18:::0;13660:62:::1;;13705:6;13698:13;;;;;;;13660:62;13780:25;13825:1;-1:-1:-1::0;;;;;13808:19:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13808:19:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13780:47:37;-1:-1:-1;13842:9:37::1;13837:77;13861:1;13857;:5;13837:77;;;13894:6;13901:1;13894:9;;;;;;;;:::i;:::-;;;;;;;13883:5;13889:1;13883:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;13864:3:::1;;13837:77;;;-1:-1:-1::0;13931:5:37;13096:847;-1:-1:-1;;;;;;13096:847:37:o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;7899:51:50::0;7872:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;12579:412:37:-;12704:11;:18;12630;;12660:25;;-1:-1:-1;;;;;12688:35:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12660:63:37;-1:-1:-1;12738:9:37;12733:228;12757:11;:18;12753:22;;12733:228;;;12796:12;12811:11;12823:1;12811:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12811:14:37;12868:21;;;;;;;;;;;12915:35;;;;;;;;;;;;;;;;;;;;;12811:14;12915:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12811:14;;-1:-1:-1;12868:21:37;;12915:35;;;;;;;12868:21;;12915:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12903:6;12910:1;12903:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12777:3:37;;12733:228;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;7899:51:50;7872:18;;2763:40:23;7753:203:50;18813:506:37;-1:-1:-1;;;;;18889:13:37;;;18868:18;18889:13;;;:7;:13;;;;;18916:15;;18889:13;;18916:15;18912:66;;18961:7;18813:506;:::o;18912:66::-;19011:13;;;;-1:-1:-1;;;;;19054:12:37;;;19039:27;;19035:239;;;19130:27;19145:12;-1:-1:-1;;;;;19130:12:37;;;:27;:::i;:::-;19098:15;;-1:-1:-1;;;;;19098:15:37;19082;:32;;;;;;;;;;19098:15;19082:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;19035:239:37;;-1:-1:-1;19035:239:37;;19236:27;-1:-1:-1;;;;;19251:12:37;;;19236;:27;:::i;:::-;19204:15;;-1:-1:-1;;;;;19204:15:37;19188;:32;;;;;;;;;;19204:15;19188:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;;19035:239:37;-1:-1:-1;;;;;;19300:12:37;;;;19284:13;;;;:28;18813:506::o;17760:1047::-;17845:10;17797:7;17837:19;;;:7;:19;;;;;17870:15;;-1:-1:-1;;;;;17870:15:37;17866:80;;17922:13;;-1:-1:-1;;;17922:13:37;;;;;;;;;;;17866:80;17975:11;;17960;;-1:-1:-1;;;;;17975:11:37;;;17960;;:26;17956:528;;18002:11;:24;;-1:-1:-1;;;;;;18002:24:37;;;;;;18040:11;:24;;;;;;;17956:528;;;18085:11;;18100:10;-1:-1:-1;;;;;18085:11:37;;;:25;18081:403;;18134:10;;;;;-1:-1:-1;;;;;18134:10:37;;;18161:1;18126:19;;;:7;:19;;;;;:24;;:37;;-1:-1:-1;;;;;;18126:37:37;;;;;;18191:10;;18177:11;:24;;;;;18191:10;;18177:24;;;18081:403;;;18222:11;;18237:10;-1:-1:-1;;;;;18222:11:37;;;:25;18218:266;;18271:11;;-1:-1:-1;;;;;18271:11:37;;;18299:1;18263:20;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;18263:38:37;;;;;;18337:11;;;;;;18329:20;;;;;;:25;;;18315:39;;18329:25;;18315:39;;;;;;18218:266;;;18412:10;;;;;;18393;;;;;;-1:-1:-1;;;;;18393:10:37;;;18412;18385:19;;;:7;:19;;;;;;:24;;;:37;;18412:10;;;-1:-1:-1;;;;;;18385:37:37;;;;;;18463:10;;18444;;;;18436:19;;;;;:24;:37;;18463:10;;;;18436:37;;;;;18218:266;18518:15;;-1:-1:-1;;;;;18518:15:37;18494:21;18582:32;;;;;;;;;;18518:15;18654:13;;;;18625:25;;;:42;;18582:32;;18654:13;;18625:25;;18494:21;18625:42;;18654:13;;18625:42;:::i;:::-;;;;-1:-1:-1;;18677:30:37;;18706:1;;18677:13;;:25;;:30;;18706:1;;18677:30;:::i;:::-;;;;-1:-1:-1;;18733:10:37;18725:19;;;;:7;:19;;;;;18718:26;;-1:-1:-1;;;;;;18718:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18755:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;18787:13:37;;17760:1047;-1:-1:-1;;;;17760:1047:37:o;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;3769:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;7917:32:50;;6518:60:25;;;7899:51:50;7872:18;;6518:60:25;7753:203:50;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;160:25:50;;;133:18;;6317:34:25;14:177:50;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;19325:348:37;19413:24;19450:12;;19440:23;;;;;;;:::i;:::-;;;;;;;;;;;19477:32;;;;:14;:32;;;;;;;19440:23;;-1:-1:-1;19477:32:37;;19473:95;;;19532:25;;-1:-1:-1;;;19532:25:37;;;;;;;;;;;19473:95;19578:38;19603:12;;19578:24;:38::i;:::-;19627:32;;;;:14;:32;;;;;:39;;-1:-1:-1;;19627:39:37;19662:4;19627:39;;;-1:-1:-1;;19325:348:37:o;3774:248:23:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;14614:502:37:-:0;14688:12;;14676:9;14714:6;;;14710:43;;14736:7;14614:502;:::o;14710:43::-;14768:9;14780:5;14784:1;14780;:5;:::i;:::-;14768:17;;14763:347;14787:5;;14763:347;;14875:9;14947:5;:1;14951;14947:5;:::i;:::-;14905:36;;;14922:15;14905:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;14905:36:37;;;;;;;;;;;;14895:47;;;;;;14887:56;;:66;;;;:::i;:::-;14875:78;;15014:12;15029:5;15035:1;15029:8;;;;;;;;:::i;:::-;;;;;;;;;;;15062;;-1:-1:-1;;;;;15029:8:37;;;;-1:-1:-1;15062:5:37;;15068:1;;15062:8;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15062:8:37;15051:5;15057:1;15051:8;;;;;;;;:::i;:::-;;;;;;;;;:19;;;;;-1:-1:-1;;;;;15051:19:37;;;;;-1:-1:-1;;;;;15051:19:37;;;;;;15095:4;15084:5;15090:1;15084:8;;;;;;;;:::i;:::-;;;;;;;;;:15;;;;;-1:-1:-1;;;;;15084:15:37;;;;;-1:-1:-1;;;;;15084:15:37;;;;;;14799:311;;14794:3;;;;;:::i;:::-;;;;14763:347;;15637:317;15706:21;;-1:-1:-1;;;;;15706:21:37;15738:174;-1:-1:-1;;;;;15745:18:37;;;15738:174;;-1:-1:-1;;;;;15822:29:37;;;15779:15;15822:29;;;:20;:29;;;;;;;-1:-1:-1;;;;;;15865:36:37;;;;;15822:29;15738:174;;;-1:-1:-1;15946:1:37;15921:22;:26;15637:317::o;20216:337::-;20296:7;20325:3;20319;:9;20315:69;;;20351:22;;-1:-1:-1;;;20351:22:37;;;;;16950:25:50;;;16991:18;;;16984:34;;;16923:18;;20351:22:37;16776:248:50;20315:69:37;20406:3;20398:5;:11;20394:153;;;-1:-1:-1;20432:3:37;20425:10;;20394:153;20464:3;20456:5;:11;20452:95;;;-1:-1:-1;20490:3:37;20483:10;;20452:95;-1:-1:-1;20531:5:37;20452:95;20216:337;;;;;:::o;15960:1391::-;-1:-1:-1;;;;;16058:21:37;;16030:25;16058:21;;;;;;;;;;;16030:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16030:49:37;;;;-1:-1:-1;;16135:86:37;;;;;;;;16152:21;;-1:-1:-1;;;;;16152:21:37;16135:86;;;-1:-1:-1;16181:38:37;;;16135:86;16181:38;;;;;;;16135:86;;;;;;;;;;;16152:21;16135:86;;;;;;;;;;;;;;;;;;;;;;;;;;;16030:49;;-1:-1:-1;16107:181:37;;16135:86;;-1:-1:-1;16135:86:37;;;;;16181:38;;16135:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16239:35;;;;;;;;16256:4;-1:-1:-1;;;;;16239:35:37;;;;;16268:4;16239:35;;;16107:10;:181::i;:::-;16090:984;;;16313:17;16325:4;16313:11;:17::i;:::-;16090:984;;;16400:21;;-1:-1:-1;;;;;16400:21:37;;;16361:15;16379:43;;;:20;:43;;;;;;;;;;16491:573;-1:-1:-1;;;;;16526:21:37;;16522:123;;16571:28;16584:8;16594:4;16571:12;:28::i;:::-;16621:5;;16522:123;16724:58;;;;;;;;-1:-1:-1;;;;;16724:58:37;;;;;-1:-1:-1;16756:24:37;;;16724:58;16756:24;;;;;;;16724:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16688:153;;16724:58;;;;;16756:24;16724:58;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16784:35;;;;;;;;16801:4;-1:-1:-1;;;;;16784:35:37;;;;;16813:4;16784:35;;;16688:10;:153::i;:::-;16663:293;;;16882:28;16895:8;16905:4;16882:12;:28::i;16663:293::-;-1:-1:-1;;;;;;17020:29:37;;;;;;;:20;:29;;;;;;;;16491:573;;;16347:727;;16090:984;17113:3;17088:28;;:22;;:28;17084:261;;;17168:21;;;-1:-1:-1;;;;;17168:21:37;;;17132:12;17147:43;;;:20;:43;;;;;;;-1:-1:-1;;;;;;17204:50:37;;;;;;17268:28;;17147:43;;17268:28;;;;;;;17310:22;:24;;17147:43;;17310:24;;;:::i;:::-;;;;;;17118:227;16020:1331;15960:1391;;:::o;19883:327::-;19984:4;20035:10;:15;;;:27;;;20004:10;:15;;;:27;;;:58;20000:129;;-1:-1:-1;20103:15:37;;20085;;-1:-1:-1;;;;;20085:33:37;;;;;;20078:40;;20000:129;-1:-1:-1;20176:15:37;;;;;:27;;;20146:15;;;;:27;;:57;;19883:327::o;15122:509::-;15203:12;;15191:9;15229:6;;;15225:43;;15251:7;15122:509;:::o;15225:43::-;15283:9;15295:5;15299:1;15295;:5;:::i;:::-;15283:17;;15278:347;15302:5;;15278:347;;15390:9;15462:5;:1;15466;15462:5;:::i;:::-;15420:36;;;15437:15;15420:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;15420:36:37;;;;;;;;;;;;15410:47;;;;;;15402:56;;:66;;;;:::i;:::-;15390:78;;15529:12;15544:5;15550:1;15544:8;;;;;;;;:::i;:::-;;;;;;;15529:23;;15577:5;15583:1;15577:8;;;;;;;;:::i;:::-;;;;;;;15566:5;15572:1;15566:8;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1;;;;;15566:19:37;;;-1:-1:-1;;;;;15566:19:37;;;;;15610:4;15599:5;15605:1;15599:8;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;15599:15:37;;;-1:-1:-1;;;;;15599:15:37;;;;;15314:311;;15309:3;;;;;:::i;:::-;;;;15278:347;;2264:344:30;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;19710:167:37:-;19818:2;19798:22;;19794:77;;19843:17;;-1:-1:-1;;;19843:17:37;;;;;;;;;;;7084:141:24;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;17357:183:37:-;17440:21;;;-1:-1:-1;;;;;17411:26:37;;;17440:21;17411:26;;;:20;:26;;;;;:50;;17440:21;;;;-1:-1:-1;;;;;;17411:50:37;;;;;;;17471:28;;;;;;;;;17509:22;:24;;;;;;:::i;:::-;;;;;;17357:183;:::o;17546:208::-;-1:-1:-1;;;;;17644:26:37;;;;;;;:20;:26;;;;;;;;17615;;;;;;;;;:55;;17644:26;;;;-1:-1:-1;;;;;;17615:55:37;;;;;;;17680:26;;;:33;;;;;;;;;;17723:22;:24;;;;;;:::i;:::-;;;;;;17546:208;;:::o;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;7917:32:50;;1805:47:30;;;7899:51:50;7872:18;;1805:47:30;7753:203:50;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;7917:32:50;;4917:24:34;;;7899:51:50;7872:18;;4917:24:34;7753:203:50;4837:119:34;-1:-1:-1;4976:10:34;4969:17;;5543:487;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:173:50;264:20;;-1:-1:-1;;;;;313:31:50;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:186::-;433:6;486:2;474:9;465:7;461:23;457:32;454:52;;;502:1;499;492:12;454:52;525:29;544:9;525:29;:::i;565:250::-;650:1;660:113;674:6;671:1;668:13;660:113;;;750:11;;;744:18;731:11;;;724:39;696:2;689:10;660:113;;;-1:-1:-1;;807:1:50;789:16;;782:27;565:250::o;820:270::-;861:3;899:5;893:12;926:6;921:3;914:19;942:76;1011:6;1004:4;999:3;995:14;988:4;981:5;977:16;942:76;:::i;:::-;1072:2;1051:15;-1:-1:-1;;1047:29:50;1038:39;;;;1079:4;1034:50;;820:270;-1:-1:-1;;820:270:50:o;1095:566::-;1212:1;1208;1203:3;1199:11;1195:19;1187:5;1181:12;1177:38;1172:3;1165:51;1147:3;1262:4;1255:5;1251:16;1245:23;1300:4;1293;1288:3;1284:14;1277:28;1343:12;1337:19;1330:4;1325:3;1321:14;1314:43;1411:4;1397:12;1393:23;1387:30;1382:2;1377:3;1373:12;1366:52;1488:4;1474:12;1470:23;1464:30;1457:38;1450:46;1443:4;1438:3;1434:14;1427:70;1552:2;1538:12;1534:21;1528:28;1506:50;;1587:4;1581:3;1576;1572:13;1565:27;1608:47;1650:3;1645;1641:13;1625:14;1608:47;:::i;:::-;1601:54;1095:566;-1:-1:-1;;;;1095:566:50:o;1666:266::-;1851:2;1840:9;1833:21;1814:4;1871:55;1922:2;1911:9;1907:18;1899:6;1871:55;:::i;1937:610::-;2023:6;2031;2084:2;2072:9;2063:7;2059:23;2055:32;2052:52;;;2100:1;2097;2090:12;2052:52;2140:9;2127:23;-1:-1:-1;;;;;2165:6:50;2162:30;2159:50;;;2205:1;2202;2195:12;2159:50;2228:22;;2281:4;2273:13;;2269:27;-1:-1:-1;2259:55:50;;2310:1;2307;2300:12;2259:55;2350:2;2337:16;-1:-1:-1;;;;;2368:6:50;2365:30;2362:50;;;2408:1;2405;2398:12;2362:50;2461:7;2456:2;2446:6;2443:1;2439:14;2435:2;2431:23;2427:32;2424:45;2421:65;;;2482:1;2479;2472:12;2421:65;2513:2;2505:11;;;;;2535:6;;-1:-1:-1;1937:610:50;-1:-1:-1;;;1937:610:50:o;2552:260::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2720:29;2739:9;2720:29;:::i;:::-;2710:39;;2768:38;2802:2;2791:9;2787:18;2768:38;:::i;:::-;2758:48;;2552:260;;;;;:::o;2817:346::-;2885:6;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;-1:-1:-1;;3007:23:50;;;3127:2;3112:18;;;3099:32;;-1:-1:-1;2817:346:50:o;3168:1554::-;3358:4;3406:2;3395:9;3391:18;3436:2;3425:9;3418:21;3459:6;3494;3488:13;3525:6;3517;3510:22;3563:2;3552:9;3548:18;3541:25;;3625:2;3615:6;3612:1;3608:14;3597:9;3593:30;3589:39;3575:53;;3663:2;3655:6;3651:15;3684:1;3694:999;3708:6;3705:1;3702:13;3694:999;;;3773:22;;;-1:-1:-1;;3769:36:50;3757:49;;3829:13;;3912:9;;3897:25;;3969:2;3961:11;;;3955:18;3881:2;3993:15;;;3986:27;;;4074:19;;3869:15;;;4106:24;;;4196:21;;;-1:-1:-1;;4164:2:50;4152:15;;;4255:330;4271:8;4266:3;4263:17;4255:330;;;4344:15;;4394:9;;-1:-1:-1;;;;;4390:35:50;4376:50;;4480:2;4472:11;;;4466:18;4450:14;;;4443:42;4554:17;;;;4422:1;4290:11;;;;;4522:2;4511:14;;;;4255:330;;;-1:-1:-1;4608:5:50;-1:-1:-1;;;4648:2:50;4671:12;;;;4636:15;;;;;3730:1;3723:9;3694:999;;;-1:-1:-1;4710:6:50;;3168:1554;-1:-1:-1;;;;;;3168:1554:50:o;4727:127::-;4788:10;4783:3;4779:20;4776:1;4769:31;4819:4;4816:1;4809:15;4843:4;4840:1;4833:15;4859:1018;4936:6;4944;4997:2;4985:9;4976:7;4972:23;4968:32;4965:52;;;5013:1;5010;5003:12;4965:52;5036:29;5055:9;5036:29;:::i;:::-;5026:39;;5116:2;5105:9;5101:18;5088:32;-1:-1:-1;;;;;5135:6:50;5132:30;5129:50;;;5175:1;5172;5165:12;5129:50;5198:22;;5251:4;5243:13;;5239:27;-1:-1:-1;5229:55:50;;5280:1;5277;5270:12;5229:55;5320:2;5307:16;-1:-1:-1;;;;;5338:6:50;5335:30;5332:56;;;5368:18;;:::i;:::-;5417:2;5411:9;5509:2;5471:17;;-1:-1:-1;;5467:31:50;;;5500:2;5463:40;5459:54;5447:67;;-1:-1:-1;;;;;5529:34:50;;5565:22;;;5526:62;5523:88;;;5591:18;;:::i;:::-;5627:2;5620:22;5651;;;5692:15;;;5709:2;5688:24;5685:37;-1:-1:-1;5682:57:50;;;5735:1;5732;5725:12;5682:57;5791:6;5786:2;5782;5778:11;5773:2;5765:6;5761:15;5748:50;5844:1;5839:2;5830:6;5822;5818:19;5814:28;5807:39;5865:6;5855:16;;;;;4859:1018;;;;;:::o;6064:347::-;6115:8;6125:6;6179:3;6172:4;6164:6;6160:17;6156:27;6146:55;;6197:1;6194;6187:12;6146:55;-1:-1:-1;6220:20:50;;-1:-1:-1;;;;;6252:30:50;;6249:50;;;6295:1;6292;6285:12;6249:50;6332:4;6324:6;6320:17;6308:29;;6384:3;6377:4;6368:6;6360;6356:19;6352:30;6349:39;6346:59;;;6401:1;6398;6391:12;6346:59;6064:347;;;;;:::o;6416:409::-;6486:6;6494;6547:2;6535:9;6526:7;6522:23;6518:32;6515:52;;;6563:1;6560;6553:12;6515:52;6603:9;6590:23;-1:-1:-1;;;;;6628:6:50;6625:30;6622:50;;;6668:1;6665;6658:12;6622:50;6707:58;6757:7;6748:6;6737:9;6733:22;6707:58;:::i;:::-;6784:8;;6681:84;;-1:-1:-1;6416:409:50;-1:-1:-1;;;;6416:409:50:o;6830:644::-;6915:6;6923;6931;6939;6992:2;6980:9;6971:7;6967:23;6963:32;6960:52;;;7008:1;7005;6998:12;6960:52;7031:29;7050:9;7031:29;:::i;:::-;7021:39;;7111:2;7100:9;7096:18;7083:32;-1:-1:-1;;;;;7130:6:50;7127:30;7124:50;;;7170:1;7167;7160:12;7124:50;7209:58;7259:7;7250:6;7239:9;7235:22;7209:58;:::i;:::-;7286:8;;-1:-1:-1;7183:84:50;-1:-1:-1;;7371:2:50;7356:18;;7343:32;7411:13;;7404:21;7394:32;;7384:60;;7440:1;7437;7430:12;7384:60;6830:644;;;;-1:-1:-1;6830:644:50;;-1:-1:-1;;6830:644:50:o;7479:269::-;7536:6;7589:2;7577:9;7568:7;7564:23;7560:32;7557:52;;;7605:1;7602;7595:12;7557:52;7644:9;7631:23;7694:4;7687:5;7683:16;7676:5;7673:27;7663:55;;7714:1;7711;7704:12;7961:828;8159:4;8207:2;8196:9;8192:18;8237:2;8226:9;8219:21;8260:6;8295;8289:13;8326:6;8318;8311:22;8364:2;8353:9;8349:18;8342:25;;8426:2;8416:6;8413:1;8409:14;8398:9;8394:30;8390:39;8376:53;;8464:2;8456:6;8452:15;8485:1;8495:265;8509:6;8506:1;8503:13;8495:265;;;8602:2;8598:7;8586:9;8578:6;8574:22;8570:36;8565:3;8558:49;8630:50;8673:6;8664;8658:13;8630:50;:::i;:::-;8620:60;-1:-1:-1;8715:2:50;8738:12;;;;8703:15;;;;;8531:1;8524:9;8495:265;;8794:219;8943:2;8932:9;8925:21;8906:4;8963:44;9003:2;8992:9;8988:18;8980:6;8963:44;:::i;9210:300::-;9278:6;9286;9339:2;9327:9;9318:7;9314:23;9310:32;9307:52;;;9355:1;9352;9345:12;9307:52;9378:29;9397:9;9378:29;:::i;:::-;9368:39;9476:2;9461:18;;;;9448:32;;-1:-1:-1;;;9210:300:50:o;9515:806::-;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:306;10003:6;10000:1;9997:13;9989:306;;;10062:13;;10104:9;;-1:-1:-1;;;;;10100:35:50;;;10088:48;;10188:2;10180:11;;;10174:18;10170:44;10156:12;;;10149:66;10270:15;;;;10244:2;10235:12;;;;10132:1;10018:9;9989:306;;;-1:-1:-1;10312:3:50;;9515:806;-1:-1:-1;;;;;9515:806:50:o;10326:380::-;10405:1;10401:12;;;;10448;;;10469:61;;10523:4;10515:6;10511:17;10501:27;;10469:61;10576:2;10568:6;10565:14;10545:18;10542:38;10539:161;;10622:10;10617:3;10613:20;10610:1;10603:31;10657:4;10654:1;10647:15;10685:4;10682:1;10675:15;10711:127;10772:10;10767:3;10763:20;10760:1;10753:31;10803:4;10800:1;10793:15;10827:4;10824:1;10817:15;11148:127;11209:10;11204:3;11200:20;11197:1;11190:31;11240:4;11237:1;11230:15;11264:4;11261:1;11254:15;11280:135;11319:3;11340:17;;;11337:43;;11360:18;;:::i;:::-;-1:-1:-1;11407:1:50;11396:13;;11280:135::o;11420:125::-;11485:9;;;11506:10;;;11503:36;;;11519:18;;:::i;11550:128::-;11617:9;;;11638:11;;;11635:37;;;11652:18;;:::i;11808:517::-;11909:2;11904:3;11901:11;11898:421;;;11945:5;11942:1;11935:16;11989:4;11986:1;11976:18;12059:2;12047:10;12043:19;12040:1;12036:27;12030:4;12026:38;12095:4;12083:10;12080:20;12077:47;;;-1:-1:-1;12118:4:50;12077:47;12173:2;12168:3;12164:12;12161:1;12157:20;12151:4;12147:31;12137:41;;12228:81;12246:2;12239:5;12236:13;12228:81;;;12305:1;12291:16;;12272:1;12261:13;12228:81;;12501:1194;-1:-1:-1;;;;;12618:3:50;12615:27;12612:53;;;12645:18;;:::i;:::-;12674:93;12763:3;12723:38;12755:4;12749:11;12723:38;:::i;:::-;12717:4;12674:93;:::i;:::-;12793:1;12818:2;12813:3;12810:11;12835:1;12830:607;;;;13481:1;13498:3;13495:93;;;-1:-1:-1;13554:19:50;;;13541:33;13495:93;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;13601:78;;12803:886;;12830:607;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;12866:17:50;;;12980:229;12994:7;12991:1;12988:14;12980:229;;;13083:19;;;13070:33;13055:49;;13190:4;13175:20;;;;13143:1;13131:14;;;;13010:12;12980:229;;;12984:3;13237;13228:7;13225:16;13222:159;;;13361:1;13357:6;13351:3;13345;13342:1;13338:11;13334:21;13330:34;13326:39;13313:9;13308:3;13304:19;13291:33;13287:79;13279:6;13272:95;13222:159;;;13424:1;13418:3;13415:1;13411:11;13407:19;13401:4;13394:33;12803:886;;12501:1194;;;:::o;13700:485::-;-1:-1:-1;;;;;13885:32:50;;13867:51;;13954:2;13949;13934:18;;13927:30;;;13973:18;;13966:34;;;13993:6;14042;14037:2;14022:18;;14009:48;14106:1;14077:22;;;14101:2;14073:31;;;14066:42;;;;14169:2;14148:15;;;-1:-1:-1;;14144:29:50;14129:45;14125:54;;13700:485;-1:-1:-1;;13700:485:50:o;14190:1295::-;14314:3;14308:10;-1:-1:-1;;;;;14333:6:50;14330:30;14327:56;;;14363:18;;:::i;:::-;14392:96;14481:6;14441:38;14473:4;14467:11;14441:38;:::i;:::-;14435:4;14392:96;:::i;:::-;14537:4;14568:2;14557:14;;14585:1;14580:648;;;;15272:1;15289:6;15286:89;;;-1:-1:-1;15341:19:50;;;15335:26;15286:89;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;15388:81;;14550:929;;14580:648;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;14616:20:50;;;14733:222;14747:7;14744:1;14741:14;14733:222;;;14829:19;;;14823:26;14808:42;;14936:4;14921:20;;;;14889:1;14877:14;;;;14763:12;14733:222;;;14737:3;14983:6;14974:7;14971:19;14968:201;;;15044:19;;;15038:26;-1:-1:-1;;15127:1:50;15123:14;;;15139:3;15119:24;15115:37;15111:42;15096:58;15081:74;;14968:201;-1:-1:-1;;;;15215:1:50;15199:14;;;15195:22;15182:36;;-1:-1:-1;14190:1295:50:o;15490:271::-;15673:6;15665;15660:3;15647:33;15629:3;15699:16;;15724:13;;;15699:16;15490:271;-1:-1:-1;15490:271:50:o;15980:209::-;16012:1;16038;16028:132;;16082:10;16077:3;16073:20;16070:1;16063:31;16117:4;16114:1;16107:15;16145:4;16142:1;16135:15;16028:132;-1:-1:-1;16174:9:50;;15980:209::o;16194:136::-;16233:3;16261:5;16251:39;;16270:18;;:::i;:::-;-1:-1:-1;;;16306:18:50;;16194:136::o;16335:184::-;16405:6;16458:2;16446:9;16437:7;16433:23;16429:32;16426:52;;;16474:1;16471;16464:12;16426:52;-1:-1:-1;16497:16:50;;16335:184;-1:-1:-1;16335:184:50:o;17029:287::-;17158:3;17196:6;17190:13;17212:66;17271:6;17266:3;17259:4;17251:6;17247:17;17212:66;:::i;:::-;17294:16;;;;;17029:287;-1:-1:-1;;17029:287:50:o", + "linkReferences": {}, + "immutableReferences": { + "40567": [ + { "start": 8808, "length": 32 }, + { "start": 8849, "length": 32 }, + { "start": 9168, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc", + "activeValidatorsCount()": "0d2bd909", + "addValidator(address,bytes,bool)": "7c8a92c3", + "addVote(address,address)": "3d09c2a8", + "calculateActiveValidators(uint8)": "857861db", + "getActiveValidators()": "9de70258", + "getAllValidators()": "f3513a37", + "getRounds(uint256,uint256)": "40f74f47", + "getRoundsCount()": "a09686c4", + "getValidator(address)": "1904bb2e", + "getVotes(address,uint256)": "eb9019d4", + "getVotesCount()": "1b605b86", + "initialize()": "8129fc1c", + "isValidatorRegistered(address)": "d04a68c7", + "owner()": "8da5cb5b", + "proxiableUUID()": "52d1902d", + "registerValidator(bytes)": "602a9eee", + "registeredValidatorsCount()": "f1bd0b37", + "renounceOwnership()": "715018a6", + "resignValidator()": "b85f5da2", + "resignedValidatorsCount()": "0777cbef", + "transferOwnership(address)": "f2fde38b", + "unvote()": "3174b689", + "updateValidator(bytes)": "5a8eed73", + "updateVoters(address[])": "2bdf6d43", + "upgradeToAndCall(address,bytes)": "4f1ef286", + "version()": "54fd4d50", + "vote(address)": "6dd7d8ea" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyVoted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BellowMinValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyIsInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImportIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"InvalidRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoActiveValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyResigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteResignedValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteSameValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteValidatorWithoutBlsPublicKey\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Unvoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"ValidatorResigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"}],\"name\":\"addValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"addVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"}],\"name\":\"calculateActiveValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getRounds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"}],\"internalType\":\"struct ConsensusV1.RoundValidator[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct ConsensusV1.Round[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"internalType\":\"struct ConsensusV1.VoteResult[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isValidatorRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registeredValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignedValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unvote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"updateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"}],\"name\":\"updateVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusV1.sol\":\"ConsensusV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/consensus/ConsensusV1.sol\":{\"keccak256\":\"0xf46c47adfacce9f204df2223af8b3cde47b9fdcaa372d67fdd739cb6ec096733\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://15318c1cdb08120eab84d5d1f6fe997749e843d0b6487f8ae58eaf189dafd27e\",\"dweb:/ipfs/QmbwYcnDQBG3NwBpUHvjGWPLuNYXhPxjitowEFjQk9BVqg\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.27+commit.40a35a09" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "type": "error", + "name": "AddressEmptyCode" + }, + { "inputs": [], "type": "error", "name": "AlreadyVoted" }, + { + "inputs": [], + "type": "error", + "name": "BellowMinValidators" + }, + { + "inputs": [], + "type": "error", + "name": "BlsKeyAlreadyRegistered" + }, + { "inputs": [], "type": "error", "name": "BlsKeyIsInvalid" }, + { + "inputs": [], + "type": "error", + "name": "CallerIsNotValidator" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "type": "error", + "name": "ERC1967InvalidImplementation" + }, + { "inputs": [], "type": "error", "name": "ERC1967NonPayable" }, + { "inputs": [], "type": "error", "name": "FailedCall" }, + { "inputs": [], "type": "error", "name": "ImportIsNotAllowed" }, + { + "inputs": [], + "type": "error", + "name": "InvalidInitialization" + }, + { "inputs": [], "type": "error", "name": "InvalidParameters" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidRange" + }, + { "inputs": [], "type": "error", "name": "MissingVote" }, + { "inputs": [], "type": "error", "name": "NoActiveValidators" }, + { "inputs": [], "type": "error", "name": "NotInitializing" }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "type": "error", + "name": "OwnableInvalidOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "type": "error", + "name": "OwnableUnauthorizedAccount" + }, + { + "inputs": [], + "type": "error", + "name": "UUPSUnauthorizedCallContext" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slot", + "type": "bytes32" + } + ], + "type": "error", + "name": "UUPSUnsupportedProxiableUUID" + }, + { + "inputs": [], + "type": "error", + "name": "ValidatorAlreadyRegistered" + }, + { + "inputs": [], + "type": "error", + "name": "ValidatorAlreadyResigned" + }, + { + "inputs": [], + "type": "error", + "name": "ValidatorNotRegistered" + }, + { + "inputs": [], + "type": "error", + "name": "VoteResignedValidator" + }, + { "inputs": [], "type": "error", "name": "VoteSameValidator" }, + { + "inputs": [], + "type": "error", + "name": "VoteValidatorWithoutBlsPublicKey" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "version", + "type": "uint64", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "voter", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "validator", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "Unvoted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Upgraded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address", + "indexed": false + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "ValidatorRegistered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ValidatorResigned", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address", + "indexed": false + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes", + "indexed": false + } + ], + "type": "event", + "name": "ValidatorUpdated", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "voter", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "validator", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "Voted", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "activeValidatorsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "isResigned", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addValidator" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addVote" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "n", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "calculateActiveValidators" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActiveValidators", + "outputs": [ + { + "internalType": "struct ConsensusV1.Validator[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "struct ConsensusV1.ValidatorData", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "votersCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteBalance", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isResigned", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + } + ] + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllValidators", + "outputs": [ + { + "internalType": "struct ConsensusV1.Validator[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "struct ConsensusV1.ValidatorData", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "votersCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteBalance", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isResigned", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRounds", + "outputs": [ + { + "internalType": "struct ConsensusV1.Round[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "round", + "type": "uint256" + }, + { + "internalType": "struct ConsensusV1.RoundValidator[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "voteBalance", + "type": "uint256" + } + ] + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getRoundsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getValidator", + "outputs": [ + { + "internalType": "struct ConsensusV1.Validator", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "struct ConsensusV1.ValidatorData", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "votersCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteBalance", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isResigned", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getVotes", + "outputs": [ + { + "internalType": "struct ConsensusV1.VoteResult[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getVotesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidatorRegistered", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerValidator" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "registeredValidatorsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "resignValidator" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "resignedValidatorsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "unvote" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "blsPublicKey", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateValidator" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "voters", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "updateVoters" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeToAndCall" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "version", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "vote" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "proxiableUUID()": { + "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeToAndCall(address,bytes)": { + "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall", + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@contracts/=src/", + "@forge-std/=lib/forge-std/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", + "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/consensus/ConsensusV1.sol": "ConsensusV1" + }, + "evmVersion": "shanghai", + "libraries": {} + }, + "sources": { + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", + "urls": [ + "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", + "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b", + "urls": [ + "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609", + "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": { + "keccak256": "0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27", + "urls": [ + "bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e", + "dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", + "urls": [ + "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", + "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { + "keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486", + "urls": [ + "bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d", + "dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d", + "urls": [ + "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196", + "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { + "keccak256": "0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06", + "urls": [ + "bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c", + "dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c", + "urls": [ + "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa", + "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", + "urls": [ + "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", + "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { + "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", + "urls": [ + "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", + "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97", + "urls": [ + "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b", + "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM" + ], + "license": "MIT" + }, + "src/consensus/ConsensusV1.sol": { + "keccak256": "0xf46c47adfacce9f204df2223af8b3cde47b9fdcaa372d67fdd739cb6ec096733", + "urls": [ + "bzz-raw://15318c1cdb08120eab84d5d1f6fe997749e843d0b6487f8ae58eaf189dafd27e", + "dweb:/ipfs/QmbwYcnDQBG3NwBpUHvjGWPLuNYXhPxjitowEFjQk9BVqg" + ], + "license": "GNU GENERAL PUBLIC LICENSE" + } + }, + "version": 1 + }, + "id": 37 } diff --git a/src/main/resources/Abi.ERC20BatchTransfer.json b/src/main/resources/Abi.ERC20BatchTransfer.json new file mode 100644 index 0000000..ed6e939 --- /dev/null +++ b/src/main/resources/Abi.ERC20BatchTransfer.json @@ -0,0 +1,59 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC20BatchTransfer", + "sourceName": "config/solidity/ERC20BatchTransfer.sol", + "abi": [ + { + "inputs": [], + "name": "LengthMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address[]", + "name": "to", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amount", + "type": "uint256[]" + } + ], + "name": "batchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "to", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amount", + "type": "uint256[]" + } + ], + "name": "multiBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600e575f5ffd5b5061083e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80634885b25414610038578063f053e99f14610054575b5f5ffd5b610052600480360381019061004d9190610491565b610070565b005b61006e60048036038101906100699190610577565b6101cd565b005b8181905084849050146100af576040517fff633a3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b848490508110156101c5578573ffffffffffffffffffffffffffffffffffffffff166323b872dd338787858181106100ec576100eb610627565b5b9050602002016020810190610101919061067e565b86868681811061011457610113610627565b5b905060200201356040518463ffffffff1660e01b8152600401610139939291906106d0565b6020604051808303815f875af1158015610155573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610179919061073a565b6101b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101af906107bf565b60405180910390fd5b80806001019150506100b1565b505050505050565b85859050848490501415806101e85750858590508282905014155b1561021f576040517fff633a3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505b8686905081101561035f5786868281811061024257610241610627565b5b905060200201602081019061025791906107dd565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd3387878581811061028657610285610627565b5b905060200201602081019061029b919061067e565b8686868181106102ae576102ad610627565b5b905060200201356040518463ffffffff1660e01b81526004016102d3939291906106d0565b6020604051808303815f875af11580156102ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610313919061073a565b610352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610349906107bf565b60405180910390fd5b8080600101915050610224565b50505050505050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61039982610370565b9050919050565b5f6103aa8261038f565b9050919050565b6103ba816103a0565b81146103c4575f5ffd5b50565b5f813590506103d5816103b1565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126103fc576103fb6103db565b5b8235905067ffffffffffffffff811115610419576104186103df565b5b602083019150836020820283011115610435576104346103e3565b5b9250929050565b5f5f83601f840112610451576104506103db565b5b8235905067ffffffffffffffff81111561046e5761046d6103df565b5b60208301915083602082028301111561048a576104896103e3565b5b9250929050565b5f5f5f5f5f606086880312156104aa576104a9610368565b5b5f6104b7888289016103c7565b955050602086013567ffffffffffffffff8111156104d8576104d761036c565b5b6104e4888289016103e7565b9450945050604086013567ffffffffffffffff8111156105075761050661036c565b5b6105138882890161043c565b92509250509295509295909350565b5f5f83601f840112610537576105366103db565b5b8235905067ffffffffffffffff811115610554576105536103df565b5b6020830191508360208202830111156105705761056f6103e3565b5b9250929050565b5f5f5f5f5f5f6060878903121561059157610590610368565b5b5f87013567ffffffffffffffff8111156105ae576105ad61036c565b5b6105ba89828a01610522565b9650965050602087013567ffffffffffffffff8111156105dd576105dc61036c565b5b6105e989828a016103e7565b9450945050604087013567ffffffffffffffff81111561060c5761060b61036c565b5b61061889828a0161043c565b92509250509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61065d8161038f565b8114610667575f5ffd5b50565b5f8135905061067881610654565b92915050565b5f6020828403121561069357610692610368565b5b5f6106a08482850161066a565b91505092915050565b6106b28161038f565b82525050565b5f819050919050565b6106ca816106b8565b82525050565b5f6060820190506106e35f8301866106a9565b6106f060208301856106a9565b6106fd60408301846106c1565b949350505050565b5f8115159050919050565b61071981610705565b8114610723575f5ffd5b50565b5f8151905061073481610710565b92915050565b5f6020828403121561074f5761074e610368565b5b5f61075c84828501610726565b91505092915050565b5f82825260208201905092915050565b7f5452414e534645525f46524f4d5f4641494c45440000000000000000000000005f82015250565b5f6107a9601483610765565b91506107b482610775565b602082019050919050565b5f6020820190508181035f8301526107d68161079d565b9050919050565b5f602082840312156107f2576107f1610368565b5b5f6107ff848285016103c7565b9150509291505056fea264697066735822122072bc5bd8cacc8452edacb73e0f0321cdfbba275969c6c2476826da50766804ee64736f6c634300081e0033" +} diff --git a/src/main/resources/Abi.Multipayment.json b/src/main/resources/Abi.Multipayment.json new file mode 100644 index 0000000..138aa82 --- /dev/null +++ b/src/main/resources/Abi.Multipayment.json @@ -0,0 +1,110 @@ +{ + "abi": [ + { + "type": "function", + "name": "pay", + "inputs": [ + { + "name": "recipients", + "type": "address[]", + "internalType": "address payable[]" + }, + { + "name": "amounts", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { "type": "error", "name": "FailedToSendEther", "inputs": [] }, + { "type": "error", "name": "InvalidValue", "inputs": [] }, + { + "type": "error", + "name": "RecipientsAndAmountsMismatch", + "inputs": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f5ffd5b506102c98061001c5f395ff3fe60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220bfee9113d4628767f3e4ea5baeb21f9c3bd88ea4c440d0a915dae090d37cd9a664736f6c634300081b0033", + "sourceMap": "81:836:23:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220bfee9113d4628767f3e4ea5baeb21f9c3bd88ea4c440d0a915dae090d37cd9a664736f6c634300081b0033", + "sourceMap": "81:836:23:-:0;;;;;;;;;;;;;;;;;;;;;209:706;;;;;;:::i;:::-;;:::i;:::-;;;318:35;;;314:103;;376:30;;-1:-1:-1;;;376:30:23;;;;;;;;;;;314:103;492:13;;519:89;539:18;;;519:89;;;587:7;;595:1;587:10;;;;;;;:::i;:::-;;;;;;;578:19;;;;;:::i;:::-;;-1:-1:-1;559:3:23;;519:89;;;;634:5;621:9;:18;617:70;;662:14;;-1:-1:-1;;;662:14:23;;;;;;;;;;;617:70;702:9;697:212;717:21;;;697:212;;;760:9;774:10;;785:1;774:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;774:18:23;800:7;;808:1;800:10;;;;;;;:::i;:::-;;;;;;;774:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:56;;;834:4;829:70;;865:19;;-1:-1:-1;;;865:19:23;;;;;;;;;;;829:70;-1:-1:-1;740:3:23;;697:212;;;;304:611;209:706;;;;:::o;14:375:25:-;85:8;95:6;149:3;142:4;134:6;130:17;126:27;116:55;;167:1;164;157:12;116:55;-1:-1:-1;190:20:25;;233:18;222:30;;219:50;;;265:1;262;255:12;219:50;302:4;294:6;290:17;278:29;;362:3;355:4;345:6;342:1;338:14;330:6;326:27;322:38;319:47;316:67;;;379:1;376;369:12;316:67;14:375;;;;;:::o;394:792::-;524:6;532;540;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;657:9;644:23;690:18;682:6;679:30;676:50;;;722:1;719;712:12;676:50;761:78;831:7;822:6;811:9;807:22;761:78;:::i;:::-;858:8;;-1:-1:-1;735:104:25;-1:-1:-1;;946:2:25;931:18;;918:32;975:18;962:32;;959:52;;;1007:1;1004;997:12;959:52;1046:80;1118:7;1107:8;1096:9;1092:24;1046:80;:::i;:::-;394:792;;;;-1:-1:-1;1145:8:25;-1:-1:-1;;;;394:792:25:o;1191:127::-;1252:10;1247:3;1243:20;1240:1;1233:31;1283:4;1280:1;1273:15;1307:4;1304:1;1297:15;1323:222;1388:9;;;1409:10;;;1406:133;;;1461:10;1456:3;1452:20;1449:1;1442:31;1496:4;1493:1;1486:15;1524:4;1521:1;1514:15;1406:133;1323:222;;;;:::o;1550:294::-;1617:6;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1712:23;;-1:-1:-1;;;;;1764:31:25;;1754:42;;1744:70;;1810:1;1807;1800:12;1744:70;1833:5;1550:294;-1:-1:-1;;;1550:294:25:o", + "linkReferences": {} + }, + "methodIdentifiers": { "pay(address[],uint256[])": "084ce708" }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedToSendEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RecipientsAndAmountsMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/multi-payment/MultiPayment.sol\":\"MultiPayment\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"src/multi-payment/MultiPayment.sol\":{\"keccak256\":\"0x804a5823ffdb1866bc5f42a0fe3688c8e153da92e279c7b79aa3d73472a1ce35\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://43df2e2ee0c0a76dd4ee8bd6cc81d65c80fb1aaada5e925d129a91de434d2c52\",\"dweb:/ipfs/QmRj4GTC5R6QTcaBxmghrH3ABuDXXwvHpi4yYjd1e8VduW\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.27+commit.40a35a09" }, + "language": "Solidity", + "output": { + "abi": [ + { "inputs": [], "type": "error", "name": "FailedToSendEther" }, + { "inputs": [], "type": "error", "name": "InvalidValue" }, + { + "inputs": [], + "type": "error", + "name": "RecipientsAndAmountsMismatch" + }, + { + "inputs": [ + { + "internalType": "address payable[]", + "name": "recipients", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "pay" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@contracts/=src/", + "@forge-std/=lib/forge-std/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", + "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/multi-payment/MultiPayment.sol": "MultiPayment" + }, + "evmVersion": "shanghai", + "libraries": {} + }, + "sources": { + "src/multi-payment/MultiPayment.sol": { + "keccak256": "0x804a5823ffdb1866bc5f42a0fe3688c8e153da92e279c7b79aa3d73472a1ce35", + "urls": [ + "bzz-raw://43df2e2ee0c0a76dd4ee8bd6cc81d65c80fb1aaada5e925d129a91de434d2c52", + "dweb:/ipfs/QmRj4GTC5R6QTcaBxmghrH3ABuDXXwvHpi4yYjd1e8VduW" + ], + "license": "GNU GENERAL PUBLIC LICENSE" + } + }, + "version": 1 + }, + "id": 23 +} diff --git a/src/main/resources/Abi.Token.json b/src/main/resources/Abi.Token.json index bcfc52f..51e6f41 100644 --- a/src/main/resources/Abi.Token.json +++ b/src/main/resources/Abi.Token.json @@ -1,345 +1,356 @@ { - "_format": "hh-sol-artifact-1", - "contractName": "TOKEN", - "sourceName": "*/TOKEN.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "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": [ - { - "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": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "recipients", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - } - ], - "name": "batchTransfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "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": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506040518060400160405280600681526020017f4441524b323000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4441524b32300000000000000000000000000000000000000000000000000000815250816003908161008c91906105bc565b50806004908161009c91906105bc565b5050506100ba336a52b7d2dcc80cd2e40000006100bf60201b60201c565b6107ae565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101315760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161012891906106cf565b60405180910390fd5b6101436000838361014760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361019957806002600082825461018d9190610719565b9250508190555061026c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610225578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161021c9392919061075c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b55780600260008282540392505081905550610302565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161035f9190610793565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806103ed57607f821691505b602082108103610400576103ff6103a6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026104687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261042b565b610472868361042b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006104b96104b46104af8461048a565b610494565b61048a565b9050919050565b6000819050919050565b6104d38361049e565b6104e76104df826104c0565b848454610438565b825550505050565b600090565b6104fc6104ef565b6105078184846104ca565b505050565b5b8181101561052b576105206000826104f4565b60018101905061050d565b5050565b601f8211156105705761054181610406565b61054a8461041b565b81016020851015610559578190505b61056d6105658561041b565b83018261050c565b50505b505050565b600082821c905092915050565b600061059360001984600802610575565b1980831691505092915050565b60006105ac8383610582565b9150826002028217905092915050565b6105c58261036c565b67ffffffffffffffff8111156105de576105dd610377565b5b6105e882546103d5565b6105f382828561052f565b600060209050601f8311600181146106265760008415610614578287015190505b61061e85826105a0565b865550610686565b601f19841661063486610406565b60005b8281101561065c57848901518255600182019150602085019450602081019050610637565b868310156106795784890151610675601f891682610582565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106b98261068e565b9050919050565b6106c9816106ae565b82525050565b60006020820190506106e460008301846106c0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006107248261048a565b915061072f8361048a565b9250828201905080821115610747576107466106ea565b5b92915050565b6107568161048a565b82525050565b600060608201905061077160008301866106c0565b61077e602083018561074d565b61078b604083018461074d565b949350505050565b60006020820190506107a8600083018461074d565b92915050565b611156806107bd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806370a082311161006657806370a082311461015d57806388d695b21461018d57806395d89b41146101bd578063a9059cbb146101db578063dd62ed3e1461020b5761009e565b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100f157806323b872dd1461010f578063313ce5671461013f575b600080fd5b6100ab61023b565b6040516100b89190610ba8565b60405180910390f35b6100db60048036038101906100d69190610c68565b6102cd565b6040516100e89190610cc3565b60405180910390f35b6100f96102f0565b6040516101069190610ced565b60405180910390f35b61012960048036038101906101249190610d08565b6102fa565b6040516101369190610cc3565b60405180910390f35b610147610329565b6040516101549190610d77565b60405180910390f35b61017760048036038101906101729190610d92565b610332565b6040516101849190610ced565b60405180910390f35b6101a760048036038101906101a29190610e7a565b61037a565b6040516101b49190610cc3565b60405180910390f35b6101c561043e565b6040516101d29190610ba8565b60405180910390f35b6101f560048036038101906101f09190610c68565b6104d0565b6040516102029190610cc3565b60405180910390f35b61022560048036038101906102209190610efb565b6104f3565b6040516102329190610ced565b60405180910390f35b60606003805461024a90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461027690610f6a565b80156102c35780601f10610298576101008083540402835291602001916102c3565b820191906000526020600020905b8154815290600101906020018083116102a657829003601f168201915b5050505050905090565b6000806102d861057a565b90506102e5818585610582565b600191505092915050565b6000600254905090565b60008061030561057a565b9050610312858285610594565b61031d858585610628565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008282905085859050146103c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bb9061100d565b60405180910390fd5b60005b85859050811015610431576104246103dd61057a565b8787848181106103f0576103ef61102d565b5b90506020020160208101906104059190610d92565b8686858181106104185761041761102d565b5b90506020020135610628565b80806001019150506103c7565b5060019050949350505050565b60606004805461044d90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461047990610f6a565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b6000806104db61057a565b90506104e8818585610628565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b61058f838383600161071c565b505050565b60006105a084846104f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106225781811015610612578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106099392919061106b565b60405180910390fd5b6106218484848403600061071c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361069a5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161069191906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361070c5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161070391906110a2565b60405180910390fd5b6107178383836108f3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361078e5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161078591906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108005760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107f791906110a2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156108ed578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e49190610ced565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361094557806002600082825461093991906110ec565b92505081905550610a18565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109c89392919061106b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a615780600260008282540392505081905550610aae565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0b9190610ced565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b52578082015181840152602081019050610b37565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7a82610b18565b610b848185610b23565b9350610b94818560208601610b34565b610b9d81610b5e565b840191505092915050565b60006020820190508181036000830152610bc28184610b6f565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bff82610bd4565b9050919050565b610c0f81610bf4565b8114610c1a57600080fd5b50565b600081359050610c2c81610c06565b92915050565b6000819050919050565b610c4581610c32565b8114610c5057600080fd5b50565b600081359050610c6281610c3c565b92915050565b60008060408385031215610c7f57610c7e610bca565b5b6000610c8d85828601610c1d565b9250506020610c9e85828601610c53565b9150509250929050565b60008115159050919050565b610cbd81610ca8565b82525050565b6000602082019050610cd86000830184610cb4565b92915050565b610ce781610c32565b82525050565b6000602082019050610d026000830184610cde565b92915050565b600080600060608486031215610d2157610d20610bca565b5b6000610d2f86828701610c1d565b9350506020610d4086828701610c1d565b9250506040610d5186828701610c53565b9150509250925092565b600060ff82169050919050565b610d7181610d5b565b82525050565b6000602082019050610d8c6000830184610d68565b92915050565b600060208284031215610da857610da7610bca565b5b6000610db684828501610c1d565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610de457610de3610dbf565b5b8235905067ffffffffffffffff811115610e0157610e00610dc4565b5b602083019150836020820283011115610e1d57610e1c610dc9565b5b9250929050565b60008083601f840112610e3a57610e39610dbf565b5b8235905067ffffffffffffffff811115610e5757610e56610dc4565b5b602083019150836020820283011115610e7357610e72610dc9565b5b9250929050565b60008060008060408587031215610e9457610e93610bca565b5b600085013567ffffffffffffffff811115610eb257610eb1610bcf565b5b610ebe87828801610dce565b9450945050602085013567ffffffffffffffff811115610ee157610ee0610bcf565b5b610eed87828801610e24565b925092505092959194509250565b60008060408385031215610f1257610f11610bca565b5b6000610f2085828601610c1d565b9250506020610f3185828601610c1d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f8257607f821691505b602082108103610f9557610f94610f3b565b5b50919050565b7f726563697069656e747320616e6420616d6f756e7473206c656e677468206d6960008201527f736d617463680000000000000000000000000000000000000000000000000000602082015250565b6000610ff7602683610b23565b915061100282610f9b565b604082019050919050565b6000602082019050818103600083015261102681610fea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61106581610bf4565b82525050565b6000606082019050611080600083018661105c565b61108d6020830185610cde565b61109a6040830184610cde565b949350505050565b60006020820190506110b7600083018461105c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110f782610c32565b915061110283610c32565b925082820190508082111561111a576111196110bd565b5b9291505056fea2646970667358221220fdbfd2ff5d7f60018cd1ba9f99f9038e758419b539d4a76b8c9148f3b4c10b6b64736f6c634300081a0033" + "_format": "hh-sol-artifact-1", + "contractName": "TOKEN", + "sourceName": "*/TOKEN.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientBalance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC20InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC20InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC20InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "ERC20InvalidSpender", + "type": "error" + }, + { + "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": [ + { + "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": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "recipients", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "batchTransfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "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": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040518060400160405280600681526020017f4441524b323000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4441524b32300000000000000000000000000000000000000000000000000000815250816003908161008c91906105bc565b50806004908161009c91906105bc565b5050506100ba336a52b7d2dcc80cd2e40000006100bf60201b60201c565b6107ae565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101315760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161012891906106cf565b60405180910390fd5b6101436000838361014760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361019957806002600082825461018d9190610719565b9250508190555061026c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610225578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161021c9392919061075c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b55780600260008282540392505081905550610302565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161035f9190610793565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806103ed57607f821691505b602082108103610400576103ff6103a6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026104687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261042b565b610472868361042b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006104b96104b46104af8461048a565b610494565b61048a565b9050919050565b6000819050919050565b6104d38361049e565b6104e76104df826104c0565b848454610438565b825550505050565b600090565b6104fc6104ef565b6105078184846104ca565b505050565b5b8181101561052b576105206000826104f4565b60018101905061050d565b5050565b601f8211156105705761054181610406565b61054a8461041b565b81016020851015610559578190505b61056d6105658561041b565b83018261050c565b50505b505050565b600082821c905092915050565b600061059360001984600802610575565b1980831691505092915050565b60006105ac8383610582565b9150826002028217905092915050565b6105c58261036c565b67ffffffffffffffff8111156105de576105dd610377565b5b6105e882546103d5565b6105f382828561052f565b600060209050601f8311600181146106265760008415610614578287015190505b61061e85826105a0565b865550610686565b601f19841661063486610406565b60005b8281101561065c57848901518255600182019150602085019450602081019050610637565b868310156106795784890151610675601f891682610582565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106b98261068e565b9050919050565b6106c9816106ae565b82525050565b60006020820190506106e460008301846106c0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006107248261048a565b915061072f8361048a565b9250828201905080821115610747576107466106ea565b5b92915050565b6107568161048a565b82525050565b600060608201905061077160008301866106c0565b61077e602083018561074d565b61078b604083018461074d565b949350505050565b60006020820190506107a8600083018461074d565b92915050565b611156806107bd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806370a082311161006657806370a082311461015d57806388d695b21461018d57806395d89b41146101bd578063a9059cbb146101db578063dd62ed3e1461020b5761009e565b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100f157806323b872dd1461010f578063313ce5671461013f575b600080fd5b6100ab61023b565b6040516100b89190610ba8565b60405180910390f35b6100db60048036038101906100d69190610c68565b6102cd565b6040516100e89190610cc3565b60405180910390f35b6100f96102f0565b6040516101069190610ced565b60405180910390f35b61012960048036038101906101249190610d08565b6102fa565b6040516101369190610cc3565b60405180910390f35b610147610329565b6040516101549190610d77565b60405180910390f35b61017760048036038101906101729190610d92565b610332565b6040516101849190610ced565b60405180910390f35b6101a760048036038101906101a29190610e7a565b61037a565b6040516101b49190610cc3565b60405180910390f35b6101c561043e565b6040516101d29190610ba8565b60405180910390f35b6101f560048036038101906101f09190610c68565b6104d0565b6040516102029190610cc3565b60405180910390f35b61022560048036038101906102209190610efb565b6104f3565b6040516102329190610ced565b60405180910390f35b60606003805461024a90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461027690610f6a565b80156102c35780601f10610298576101008083540402835291602001916102c3565b820191906000526020600020905b8154815290600101906020018083116102a657829003601f168201915b5050505050905090565b6000806102d861057a565b90506102e5818585610582565b600191505092915050565b6000600254905090565b60008061030561057a565b9050610312858285610594565b61031d858585610628565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008282905085859050146103c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bb9061100d565b60405180910390fd5b60005b85859050811015610431576104246103dd61057a565b8787848181106103f0576103ef61102d565b5b90506020020160208101906104059190610d92565b8686858181106104185761041761102d565b5b90506020020135610628565b80806001019150506103c7565b5060019050949350505050565b60606004805461044d90610f6a565b80601f016020809104026020016040519081016040528092919081815260200182805461047990610f6a565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b6000806104db61057a565b90506104e8818585610628565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b61058f838383600161071c565b505050565b60006105a084846104f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106225781811015610612578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106099392919061106b565b60405180910390fd5b6106218484848403600061071c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361069a5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161069191906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361070c5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161070391906110a2565b60405180910390fd5b6107178383836108f3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361078e5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161078591906110a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108005760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107f791906110a2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156108ed578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e49190610ced565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361094557806002600082825461093991906110ec565b92505081905550610a18565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109c89392919061106b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a615780600260008282540392505081905550610aae565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b0b9190610ced565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b52578082015181840152602081019050610b37565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7a82610b18565b610b848185610b23565b9350610b94818560208601610b34565b610b9d81610b5e565b840191505092915050565b60006020820190508181036000830152610bc28184610b6f565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bff82610bd4565b9050919050565b610c0f81610bf4565b8114610c1a57600080fd5b50565b600081359050610c2c81610c06565b92915050565b6000819050919050565b610c4581610c32565b8114610c5057600080fd5b50565b600081359050610c6281610c3c565b92915050565b60008060408385031215610c7f57610c7e610bca565b5b6000610c8d85828601610c1d565b9250506020610c9e85828601610c53565b9150509250929050565b60008115159050919050565b610cbd81610ca8565b82525050565b6000602082019050610cd86000830184610cb4565b92915050565b610ce781610c32565b82525050565b6000602082019050610d026000830184610cde565b92915050565b600080600060608486031215610d2157610d20610bca565b5b6000610d2f86828701610c1d565b9350506020610d4086828701610c1d565b9250506040610d5186828701610c53565b9150509250925092565b600060ff82169050919050565b610d7181610d5b565b82525050565b6000602082019050610d8c6000830184610d68565b92915050565b600060208284031215610da857610da7610bca565b5b6000610db684828501610c1d565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610de457610de3610dbf565b5b8235905067ffffffffffffffff811115610e0157610e00610dc4565b5b602083019150836020820283011115610e1d57610e1c610dc9565b5b9250929050565b60008083601f840112610e3a57610e39610dbf565b5b8235905067ffffffffffffffff811115610e5757610e56610dc4565b5b602083019150836020820283011115610e7357610e72610dc9565b5b9250929050565b60008060008060408587031215610e9457610e93610bca565b5b600085013567ffffffffffffffff811115610eb257610eb1610bcf565b5b610ebe87828801610dce565b9450945050602085013567ffffffffffffffff811115610ee157610ee0610bcf565b5b610eed87828801610e24565b925092505092959194509250565b60008060408385031215610f1257610f11610bca565b5b6000610f2085828601610c1d565b9250506020610f3185828601610c1d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f8257607f821691505b602082108103610f9557610f94610f3b565b5b50919050565b7f726563697069656e747320616e6420616d6f756e7473206c656e677468206d6960008201527f736d617463680000000000000000000000000000000000000000000000000000602082015250565b6000610ff7602683610b23565b915061100282610f9b565b604082019050919050565b6000602082019050818103600083015261102681610fea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61106581610bf4565b82525050565b6000606082019050611080600083018661105c565b61108d6020830185610cde565b61109a6040830184610cde565b949350505050565b60006020820190506110b7600083018461105c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110f782610c32565b915061110283610c32565b925082820190508082111561111a576111196110bd565b5b9291505056fea2646970667358221220fdbfd2ff5d7f60018cd1ba9f99f9038e758419b539d4a76b8c9148f3b4c10b6b64736f6c634300081a0033", + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } } diff --git a/src/main/resources/Abi.Usernames.json b/src/main/resources/Abi.Usernames.json new file mode 100644 index 0000000..1c92199 --- /dev/null +++ b/src/main/resources/Abi.Usernames.json @@ -0,0 +1,882 @@ +{ + "abi": [ + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addUsername", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "username", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getUsername", + "inputs": [{ "name": "user", "type": "address", "internalType": "address" }], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUsernames", + "inputs": [ + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct UsernamesV1.User[]", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "username", + "type": "string", + "internalType": "string" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isUsernameRegistered", + "inputs": [ + { + "name": "username", + "type": "string", + "internalType": "string" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isUsernameValid", + "inputs": [ + { + "name": "username", + "type": "string", + "internalType": "string" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerUsername", + "inputs": [ + { + "name": "username", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resignUsername", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UsernameRegistered", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "username", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "previousUsername", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UsernameResigned", + "inputs": [ + { + "name": "addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "username", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { "type": "error", "name": "InvalidUsername", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "TakenUsername", "inputs": [] }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }] + }, + { "type": "error", "name": "UsernameNotRegistered", "inputs": [] } + ], + "bytecode": { + "object": "0x60a0604052306080523480156012575f5ffd5b5060805161186b6100395f395f8181610d7c01528181610da50152610ee4015261186b5ff3fe6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212202cd847cb3edf0b7eef198ed0ae022f99a0d18fa21cb2a945077443915317943b64736f6c634300081b0033", + "sourceMap": "285:5015:37:-:0;;;1171:4:25;1128:48;;285:5015:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212202cd847cb3edf0b7eef198ed0ae022f99a0d18fa21cb2a945077443915317943b64736f6c634300081b0033", + "sourceMap": "285:5015:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:134;;;;;;;;;;-1:-1:-1;2491:134:37;;;;;:::i;:::-;;:::i;:::-;;;1586:14:40;;1579:22;1561:41;;1549:2;1534:18;2491:134:37;;;;;;;;1375:273;;;;;;;;;;-1:-1:-1;1375:273:37;;;;;:::i;:::-;;:::i;:::-;;4161:214:25;;;;;;:::i;:::-;;:::i;2335:150:37:-;;;;;;;;;;-1:-1:-1;2335:150:37;;;;;:::i;:::-;2451:26;;;;;;;2412:4;2435:43;;;:15;:43;;;;;;;;;;2335:150;3708:134:25;;;;;;;;;;;;;:::i;:::-;;;2466:25:40;;;2454:2;2439:18;3708:134:25;2320:177:40;2134:76:37;;;;;;;;;;-1:-1:-1;2202:1:37;2134:76;;3155:101:23;;;;;;;;;;;;;:::i;788:84:37:-;;;;;;;;;;;;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;2830:51:40;;2818:2;2803:18;2441:144:23;2684:203:40;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;2216:113:37:-;;;;;;;;;;-1:-1:-1;2216:113:37;;;;;:::i;:::-;;:::i;1011:358::-;;;;;;;;;;-1:-1:-1;1011:358:37;;;;;:::i;:::-;;:::i;1654:434::-;;;;;;;;;;;;;:::i;3405:215:23:-;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;2631:621:37:-;;;;;;;;;;-1:-1:-1;2631:621:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2491:134::-;2563:4;2586:32;2608:8;2586:15;:32::i;:::-;2579:39;2491:134;-1:-1:-1;;2491:134:37:o;1375:273::-;1496:8;1520:18;1496:8;1520:15;:18::i;:::-;1515:74;;1561:17;;-1:-1:-1;;;1561:17:37;;;;;;;;;;;1515:74;1599:42;1617:10;1629:8;1639:1;1599:17;:42::i;:::-;1434:214;1375:273;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;788:84:37:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;839:26:37::1;854:10;839:14;:26::i;:::-;5070:14:24::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;6020:50:40;;5142:14:24;;6008:2:40;5993:18;5142:14:24;;;;;;;;5066:101;4092:1081;;;;;788:84:37:o;2216:113::-;-1:-1:-1;;;;;2306:16:37;;:10;:16;;;;;;;;;;2299:23;;2274:13;;2306:16;2299:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:113;;;:::o;1011:358::-;2334:13:23;:11;:13::i;:::-;1236:8:37;;1122;;1247:1:::1;-1:-1:-1::0;1236:12:37;:29:::1;;;1263:2;1252:1;:8;:13;1236:29;1232:84;;;1288:17;;-1:-1:-1::0;;;1288:17:37::1;;;;;;;;;;;1232:84;1326:36;1344:4;1350:8;1360:1;1326:17;:36::i;:::-;1089:280;1011:358:::0;;:::o;1654:434::-;1735:10;1699:22;1724;;;;;;;;;;1699:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1827:1;1808:8;1802:22;:26;1798:284;;;1887:10;1904:5;1876:22;;;;;;;;;;;1860:40;;1844:15;;1904:5;;1860:40;;1876:22;1860:40;:::i;:::-;;;;;;;;;;;1844:57;;;;;;;;;;;;;-1:-1:-1;1844:57:37;;;:65;;-1:-1:-1;;1844:65:37;;;;;;;;;;;1941:10;1930:22;;;;;;;;1923:29;;;:::i;:::-;1972:38;1989:10;2001:8;1972:38;;;;;;;:::i;:::-;;;;;;;;1689:399;1654:434::o;1798:284::-;2048:23;;-1:-1:-1;;;2048:23:37;;;;;;;;;;;1798:284;1689:399;1654:434::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;2830:51:40::0;2803:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;2631:621:37:-:0;2706:13;2731:19;2764:9;2753:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2753:28:37;;;;;;;;;;;;;;;-1:-1:-1;2731:50:37;-1:-1:-1;2791:13:37;;2818:214;2838:20;;;2818:214;;;2889:10;:24;2900:9;;2910:1;2900:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2889:24:37;-1:-1:-1;;;;;2889:24:37;;;;;;;;;;;;2883:38;;;;;:::i;:::-;:43;;-1:-1:-1;2879:143:37;;2963:44;;;;;;;;2968:9;;2978:1;2968:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2963:44:37;;;;;2982:10;:24;2993:9;;3003:1;2993:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2982:24:37;-1:-1:-1;;;;;2982:24:37;;;;;;;;;;;;2963:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2946:5;2952:7;;;;;:::i;:::-;;;2946:14;;;;;;;;:::i;:::-;;;;;;:61;;;;2879:143;2860:3;;2818:214;;;;3091:20;3125:5;3114:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3114:17:37;;;;;;;;;;;;;;;-1:-1:-1;3091:40:37;-1:-1:-1;3146:9:37;3141:81;3165:5;3161:1;:9;3141:81;;;3203:5;3209:1;3203:8;;;;;;;;:::i;:::-;;;;;;;3191:6;3198:1;3191:9;;;;;;;;:::i;:::-;;;;;;;;;;:20;3172:3;;3141:81;;;-1:-1:-1;3239:6:37;2631:621;-1:-1:-1;;;;;2631:621:37:o;3541:1108::-;3612:4;3734:1;3716:8;:15;:19;:43;;;;3757:2;3739:8;:15;:20;3716:43;3712:86;;;-1:-1:-1;3782:5:37;;3541:1108;-1:-1:-1;3541:1108:37:o;3712:86::-;3859:8;3868:1;3859:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3859:11:37;-1:-1:-1;;;3859:19:37;;:60;;;3882:8;3909:1;3891:8;:15;:19;;;;:::i;:::-;3882:29;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3882:29:37;-1:-1:-1;;;3882:37:37;3859:60;3855:103;;;-1:-1:-1;3942:5:37;;3541:1108;-1:-1:-1;3541:1108:37:o;3855:103::-;3973:9;3968:653;3992:8;:15;3988:1;:19;3968:653;;;4141:4;4126:19;;:8;4135:1;4126:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4126:11:37;:19;;;;:42;;;4164:4;4149:19;;:8;4158:1;4149:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4149:11:37;:19;;4126:42;4124:45;:121;;;;;4217:4;4202:19;;:8;4211:1;4202:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4202:11:37;:19;;;;:42;;;4240:4;4225:19;;:8;4234:1;4225:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4225:11:37;:19;;4202:42;4200:45;4124:121;:174;;;;;4278:8;4287:1;4278:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4278:11:37;-1:-1:-1;;;4278:19:37;4276:22;4124:174;4103:260;;;-1:-1:-1;4343:5:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4103:260::-;4518:8;4527:1;4518:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4518:11:37;-1:-1:-1;;;4518:19:37;:46;;;;-1:-1:-1;4541:8:37;4550:5;:1;4554;4550:5;:::i;:::-;4541:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4541:15:37;-1:-1:-1;;;4541:23:37;4518:46;4514:97;;;-1:-1:-1;4591:5:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4514:97::-;4009:3;;3968:653;;;-1:-1:-1;4638:4:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4655:643::-;4778:12;;;;;;;;;;4755:20;4804:29;;;:15;:29;;;;;;;;;;4800:82;;;4856:15;;-1:-1:-1;;;4856:15:37;;;;;;;;;;;4800:82;-1:-1:-1;;;;;4925:16:37;;4892:30;4925:16;;;;;;;;;;4892:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5030:1;5003:16;4997:30;:34;4993:147;;;5063:34;;;;;;;;;;5101:5;5047:51;;;:15;:51;;;;;;:59;;-1:-1:-1;;5047:59:37;;;4993:147;-1:-1:-1;;;;;5150:16:37;;:10;:16;;;;;;;;;;:27;5169:8;5150:16;:27;:::i;:::-;-1:-1:-1;5187:29:37;;;;5219:4;5187:29;;;;;;;;;:36;;-1:-1:-1;;5187:36:37;;;;;;5239:52;;;;;5258:4;;5264:8;;5274:16;;5239:52;:::i;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;895:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;2848:32:40;;6518:60:25;;;2830:51:40;2803:18;;6518:60:25;2684:203:40;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;2466:25:40;;;2439:18;;6317:34:25;2320:177:40;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;2830:51:40;2803:18;;2763:40:23;2684:203:40;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;2264:344:30:-:0;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;2848:32:40;;1805:47:30;;;2830:51:40;2803:18;;1805:47:30;2684:203:40;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;2848:32:40;;4917:24:34;;;2830:51:40;2803:18;;4917:24:34;2684:203:40;4837:119:34;-1:-1:-1;4976:10:34;4589:408;4421:582;;;;;:::o;5543:487::-;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:40:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:716;211:5;243:1;267:18;259:6;256:30;253:56;;;289:18;;:::i;:::-;-1:-1:-1;444:2:40;438:9;-1:-1:-1;;357:2:40;336:15;;332:29;;502:2;490:15;486:29;474:42;;567:22;;;546:18;531:34;;528:62;525:88;;;593:18;;:::i;:::-;629:2;622:22;677;;;662:6;-1:-1:-1;662:6:40;714:16;;;711:25;-1:-1:-1;708:45:40;;;749:1;746;739:12;708:45;799:6;794:3;787:4;779:6;775:17;762:44;854:1;847:4;838:6;830;826:19;822:30;815:41;;146:716;;;;;:::o;867:222::-;910:5;963:3;956:4;948:6;944:17;940:27;930:55;;981:1;978;971:12;930:55;1003:80;1079:3;1070:6;1057:20;1050:4;1042:6;1038:17;1003:80;:::i;1094:322::-;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1272:9;1259:23;1305:18;1297:6;1294:30;1291:50;;;1337:1;1334;1327:12;1291:50;1360;1402:7;1393:6;1382:9;1378:22;1360:50;:::i;:::-;1350:60;1094:322;-1:-1:-1;;;;1094:322:40:o;1613:173::-;1681:20;;-1:-1:-1;;;;;1730:31:40;;1720:42;;1710:70;;1776:1;1773;1766:12;1710:70;1613:173;;;:::o;1791:524::-;1868:6;1876;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1968:29;1987:9;1968:29;:::i;:::-;1958:39;;2048:2;2037:9;2033:18;2020:32;2075:18;2067:6;2064:30;2061:50;;;2107:1;2104;2097:12;2061:50;2130:22;;2183:4;2175:13;;2171:27;-1:-1:-1;2161:55:40;;2212:1;2209;2202:12;2161:55;2235:74;2301:7;2296:2;2283:16;2278:2;2274;2270:11;2235:74;:::i;:::-;2225:84;;;1791:524;;;;;:::o;2892:250::-;2977:1;2987:113;3001:6;2998:1;2995:13;2987:113;;;3077:11;;;3071:18;3058:11;;;3051:39;3023:2;3016:10;2987:113;;;-1:-1:-1;;3134:1:40;3116:16;;3109:27;2892:250::o;3147:271::-;3189:3;3227:5;3221:12;3254:6;3249:3;3242:19;3270:76;3339:6;3332:4;3327:3;3323:14;3316:4;3309:5;3305:16;3270:76;:::i;:::-;3400:2;3379:15;-1:-1:-1;;3375:29:40;3366:39;;;;3407:4;3362:50;;3147:271;-1:-1:-1;;3147:271:40:o;3423:220::-;3572:2;3561:9;3554:21;3535:4;3592:45;3633:2;3622:9;3618:18;3610:6;3592:45;:::i;3648:186::-;3707:6;3760:2;3748:9;3739:7;3735:23;3731:32;3728:52;;;3776:1;3773;3766:12;3728:52;3799:29;3818:9;3799:29;:::i;3839:396::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4017:29;4036:9;4017:29;:::i;:::-;4007:39;;4097:2;4086:9;4082:18;4069:32;4124:18;4116:6;4113:30;4110:50;;;4156:1;4153;4146:12;4110:50;4179;4221:7;4212:6;4201:9;4197:22;4179:50;:::i;4240:610::-;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4443:9;4430:23;4476:18;4468:6;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4531:22;;4584:4;4576:13;;4572:27;-1:-1:-1;4562:55:40;;4613:1;4610;4603:12;4562:55;4653:2;4640:16;4679:18;4671:6;4668:30;4665:50;;;4711:1;4708;4701:12;4665:50;4764:7;4759:2;4749:6;4746:1;4742:14;4738:2;4734:23;4730:32;4727:45;4724:65;;;4785:1;4782;4775:12;4724:65;4816:2;4808:11;;;;;4838:6;;-1:-1:-1;4240:610:40;-1:-1:-1;;;4240:610:40:o;4855:1007::-;5043:4;5091:2;5080:9;5076:18;5121:2;5110:9;5103:21;5144:6;5179;5173:13;5210:6;5202;5195:22;5248:2;5237:9;5233:18;5226:25;;5310:2;5300:6;5297:1;5293:14;5282:9;5278:30;5274:39;5260:53;;5348:2;5340:6;5336:15;5369:1;5379:454;5393:6;5390:1;5387:13;5379:454;;;5458:22;;;-1:-1:-1;;5454:36:40;5442:49;;5514:13;;5559:9;;-1:-1:-1;;;;;5555:35:40;5540:51;;5638:2;5630:11;;;5624:18;5679:2;5662:15;;;5655:27;;;5624:18;5705:48;;5737:15;;5624:18;5705:48;:::i;:::-;5695:58;-1:-1:-1;;5788:2:40;5811:12;;;;5776:15;;;;;5415:1;5408:9;5379:454;;;-1:-1:-1;5850:6:40;;4855:1007;-1:-1:-1;;;;;;4855:1007:40:o;6081:380::-;6160:1;6156:12;;;;6203;;;6224:61;;6278:4;6270:6;6266:17;6256:27;;6224:61;6331:2;6323:6;6320:14;6300:18;6297:38;6294:161;;6377:10;6372:3;6368:20;6365:1;6358:31;6412:4;6409:1;6402:15;6440:4;6437:1;6430:15;6294:161;;6081:380;;;:::o;6595:799::-;6725:3;6754:1;6787:6;6781:13;6817:36;6843:9;6817:36;:::i;:::-;6884:1;6869:17;;6895:133;;;;7042:1;7037:332;;;;6862:507;;6895:133;-1:-1:-1;;6928:24:40;;6916:37;;7001:14;;6994:22;6982:35;;6973:45;;;-1:-1:-1;6895:133:40;;7037:332;7068:6;7065:1;7058:17;7116:4;7113:1;7103:18;7143:1;7157:166;7171:6;7168:1;7165:13;7157:166;;;7251:14;;7238:11;;;7231:35;7307:1;7294:15;;;;7193:4;7186:12;7157:166;;;7161:3;;7352:6;7347:3;7343:16;7336:23;;6862:507;-1:-1:-1;7385:3:40;;6595:799;-1:-1:-1;;;;;6595:799:40:o;7399:317::-;-1:-1:-1;;;;;7576:32:40;;7558:51;;7645:2;7640;7625:18;;7618:30;;;-1:-1:-1;;7665:45:40;;7691:18;;7683:6;7665:45;:::i;7721:127::-;7782:10;7777:3;7773:20;7770:1;7763:31;7813:4;7810:1;7803:15;7837:4;7834:1;7827:15;7853:127;7914:10;7909:3;7905:20;7902:1;7895:31;7945:4;7942:1;7935:15;7969:4;7966:1;7959:15;7985:135;8024:3;8045:17;;;8042:43;;8065:18;;:::i;:::-;-1:-1:-1;8112:1:40;8101:13;;7985:135::o;8125:128::-;8192:9;;;8213:11;;;8210:37;;;8227:18;;:::i;8258:125::-;8323:9;;;8344:10;;;8341:36;;;8357:18;;:::i;8388:518::-;8490:2;8485:3;8482:11;8479:421;;;8526:5;8523:1;8516:16;8570:4;8567:1;8557:18;8640:2;8628:10;8624:19;8621:1;8617:27;8611:4;8607:38;8676:4;8664:10;8661:20;8658:47;;;-1:-1:-1;8699:4:40;8658:47;8754:2;8749:3;8745:12;8742:1;8738:20;8732:4;8728:31;8718:41;;8809:81;8827:2;8820:5;8817:13;8809:81;;;8886:1;8872:16;;8853:1;8842:13;8809:81;;9082:1302;9208:3;9202:10;9235:18;9227:6;9224:30;9221:56;;;9257:18;;:::i;:::-;9286:97;9376:6;9336:38;9368:4;9362:11;9336:38;:::i;:::-;9330:4;9286:97;:::i;:::-;9432:4;9463:2;9452:14;;9480:1;9475:652;;;;10171:1;10188:6;10185:89;;;-1:-1:-1;10240:19:40;;;10234:26;10185:89;-1:-1:-1;;9039:1:40;9035:11;;;9031:24;9027:29;9017:40;9063:1;9059:11;;;9014:57;10287:81;;9445:933;;9475:652;6542:1;6535:14;;;6579:4;6566:18;;-1:-1:-1;;9511:20:40;;;9632:222;9646:7;9643:1;9640:14;9632:222;;;9728:19;;;9722:26;9707:42;;9835:4;9820:20;;;;9788:1;9776:14;;;;9662:12;9632:222;;;9636:3;9882:6;9873:7;9870:19;9867:201;;;9943:19;;;9937:26;-1:-1:-1;;10026:1:40;10022:14;;;10038:3;10018:24;10014:37;10010:42;9995:58;9980:74;;9867:201;-1:-1:-1;;;;10114:1:40;10098:14;;;10094:22;10081:36;;-1:-1:-1;9082:1302:40:o;10389:480::-;-1:-1:-1;;;;;10614:32:40;;10596:51;;10683:2;10678;10663:18;;10656:30;;;-1:-1:-1;;10709:45:40;;10735:18;;10727:6;10709:45;:::i;:::-;10802:9;10794:6;10790:22;10785:2;10774:9;10770:18;10763:50;10830:33;10856:6;10848;10830:33;:::i;:::-;10822:41;10389:480;-1:-1:-1;;;;;;10389:480:40:o;10874:184::-;10944:6;10997:2;10985:9;10976:7;10972:23;10968:32;10965:52;;;11013:1;11010;11003:12;10965:52;-1:-1:-1;11036:16:40;;10874:184;-1:-1:-1;10874:184:40:o;11063:287::-;11192:3;11230:6;11224:13;11246:66;11305:6;11300:3;11293:4;11285:6;11281:17;11246:66;:::i;:::-;11328:16;;;;;11063:287;-1:-1:-1;;11063:287:40:o", + "linkReferences": {}, + "immutableReferences": { + "40567": [ + { "start": 3452, "length": 32 }, + { "start": 3493, "length": 32 }, + { "start": 3812, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc", + "addUsername(address,string)": "e5abdcef", + "getUsername(address)": "ce43c032", + "getUsernames(address[])": "f5ab196e", + "initialize()": "8129fc1c", + "isUsernameRegistered(string)": "52ac2091", + "isUsernameValid(string)": "117720be", + "owner()": "8da5cb5b", + "proxiableUUID()": "52d1902d", + "registerUsername(string)": "36a94134", + "renounceOwnership()": "715018a6", + "resignUsername()": "ebed6dab", + "transferOwnership(address)": "f2fde38b", + "upgradeToAndCall(address,bytes)": "4f1ef286", + "version()": "54fd4d50" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TakenUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UsernameNotRegistered\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"previousUsername\",\"type\":\"string\"}],\"name\":\"UsernameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"UsernameResigned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"addUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUsername\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"getUsernames\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"internalType\":\"struct UsernamesV1.User[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"registerUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/usernames/UsernamesV1.sol\":\"UsernamesV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/usernames/UsernamesV1.sol\":{\"keccak256\":\"0x3d0012765a2c9a0a96b156052d6e530feb6b140af87c9e99f73526843751d8f7\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://8156867b0c788dc6ff3eebdd37e949dc9d3a5b5330359ecad6ebc38fc87946f4\",\"dweb:/ipfs/QmemCY8hmvu5dGiW4k9ssJiwNekgWaHC7mzCWutNuJV7Rq\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.27+commit.40a35a09" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "type": "error", + "name": "AddressEmptyCode" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "type": "error", + "name": "ERC1967InvalidImplementation" + }, + { "inputs": [], "type": "error", "name": "ERC1967NonPayable" }, + { "inputs": [], "type": "error", "name": "FailedCall" }, + { + "inputs": [], + "type": "error", + "name": "InvalidInitialization" + }, + { "inputs": [], "type": "error", "name": "InvalidUsername" }, + { "inputs": [], "type": "error", "name": "NotInitializing" }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "type": "error", + "name": "OwnableInvalidOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "type": "error", + "name": "OwnableUnauthorizedAccount" + }, + { "inputs": [], "type": "error", "name": "TakenUsername" }, + { + "inputs": [], + "type": "error", + "name": "UUPSUnauthorizedCallContext" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slot", + "type": "bytes32" + } + ], + "type": "error", + "name": "UUPSUnsupportedProxiableUUID" + }, + { + "inputs": [], + "type": "error", + "name": "UsernameNotRegistered" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "version", + "type": "uint64", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Upgraded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address", + "indexed": false + }, + { + "internalType": "string", + "name": "username", + "type": "string", + "indexed": false + }, + { + "internalType": "string", + "name": "previousUsername", + "type": "string", + "indexed": false + } + ], + "type": "event", + "name": "UsernameRegistered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address", + "indexed": false + }, + { + "internalType": "string", + "name": "username", + "type": "string", + "indexed": false + } + ], + "type": "event", + "name": "UsernameResigned", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "string", + "name": "username", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addUsername" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUsername", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUsernames", + "outputs": [ + { + "internalType": "struct UsernamesV1.User[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "username", + "type": "string" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "username", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isUsernameRegistered", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "username", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "isUsernameValid", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "username", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerUsername" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "resignUsername" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeToAndCall" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "version", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "proxiableUUID()": { + "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeToAndCall(address,bytes)": { + "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall", + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@contracts/=src/", + "@forge-std/=lib/forge-std/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", + "ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/usernames/UsernamesV1.sol": "UsernamesV1" + }, + "evmVersion": "shanghai", + "libraries": {} + }, + "sources": { + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", + "urls": [ + "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", + "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b", + "urls": [ + "bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609", + "dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": { + "keccak256": "0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27", + "urls": [ + "bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e", + "dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", + "urls": [ + "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", + "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { + "keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486", + "urls": [ + "bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d", + "dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d", + "urls": [ + "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196", + "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { + "keccak256": "0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06", + "urls": [ + "bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c", + "dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c", + "urls": [ + "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa", + "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", + "urls": [ + "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", + "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { + "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", + "urls": [ + "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", + "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97", + "urls": [ + "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b", + "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM" + ], + "license": "MIT" + }, + "src/usernames/UsernamesV1.sol": { + "keccak256": "0x3d0012765a2c9a0a96b156052d6e530feb6b140af87c9e99f73526843751d8f7", + "urls": [ + "bzz-raw://8156867b0c788dc6ff3eebdd37e949dc9d3a5b5330359ecad6ebc38fc87946f4", + "dweb:/ipfs/QmemCY8hmvu5dGiW4k9ssJiwNekgWaHC7mzCWutNuJV7Rq" + ], + "license": "GNU GENERAL PUBLIC LICENSE" + } + }, + "version": 1 + }, + "id": 37 +} diff --git a/src/test/java/org/arkecosystem/crypto/utils/AbiJsonFilesTest.java b/src/test/java/org/arkecosystem/crypto/utils/AbiJsonFilesTest.java new file mode 100644 index 0000000..152cad5 --- /dev/null +++ b/src/test/java/org/arkecosystem/crypto/utils/AbiJsonFilesTest.java @@ -0,0 +1,125 @@ +package org.arkecosystem.crypto.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.web3j.crypto.Hash; +import org.web3j.utils.Numeric; + +class AbiJsonFilesTest { + + private static final List ABI_FILES = + List.of( + "Abi.Consensus.json", + "Abi.Multipayment.json", + "Abi.Usernames.json", + "Abi.ERC20BatchTransfer.json", + "Abi.Token.json"); + + @SuppressWarnings("unchecked") + private Map loadJson(String name) throws Exception { + InputStream stream = getClass().getClassLoader().getResourceAsStream(name); + assertNotNull(stream, "ABI resource missing: " + name); + return new ObjectMapper().readValue(stream, Map.class); + } + + @Test + void every_abi_file_parses_and_has_an_abi_array() throws Exception { + for (String file : ABI_FILES) { + Map json = loadJson(file); + Object abi = json.get("abi"); + assertTrue(abi instanceof List, file + " must contain an abi array"); + assertFalse(((List) abi).isEmpty(), file + " abi array must not be empty"); + } + } + + @Test + @SuppressWarnings("unchecked") + void method_identifiers_match_keccak256_of_signature() throws Exception { + for (String file : ABI_FILES) { + Map json = loadJson(file); + Object identifiers = json.get("methodIdentifiers"); + if (!(identifiers instanceof Map)) { + continue; + } + + for (Map.Entry entry : ((Map) identifiers).entrySet()) { + String signature = entry.getKey(); + String expectedSelector = entry.getValue(); + String actualSelector = + Numeric.cleanHexPrefix(Hash.sha3String(signature)).substring(0, 8); + assertEquals( + actualSelector, + expectedSelector, + file + " selector mismatch for " + signature); + } + } + } + + @Test + void abi_encoder_loads_every_abi_file() throws Exception { + for (String file : ABI_FILES) { + new AbiEncoder(file); + } + } + + @Test + void abi_decoder_decodes_consensus_payload() throws Exception { + Map result = + new AbiDecoder() + .decodeFunctionData( + "0x6dd7d8ea000000000000000000000000512f366d524157bcf734546eb29a6d687b762255"); + + assertEquals("vote", result.get("functionName")); + } + + @Test + @SuppressWarnings("unchecked") + void consensus_exposes_expected_method_signatures() throws Exception { + Map json = loadJson("Abi.Consensus.json"); + Map identifiers = (Map) json.get("methodIdentifiers"); + + assertEquals("6dd7d8ea", identifiers.get("vote(address)")); + assertNotNull(identifiers.get("unvote()")); + assertNotNull(identifiers.get("registerValidator(bytes)")); + assertNotNull(identifiers.get("resignValidator()")); + assertNotNull(identifiers.get("updateValidator(bytes)")); + } + + @Test + @SuppressWarnings("unchecked") + void multipayment_exposes_pay_signature() throws Exception { + Map json = loadJson("Abi.Multipayment.json"); + Map identifiers = (Map) json.get("methodIdentifiers"); + + assertNotNull(identifiers.get("pay(address[],uint256[])")); + } + + @Test + @SuppressWarnings("unchecked") + void usernames_exposes_register_and_resign_signatures() throws Exception { + Map json = loadJson("Abi.Usernames.json"); + Map identifiers = (Map) json.get("methodIdentifiers"); + + assertNotNull(identifiers.get("registerUsername(string)")); + assertNotNull(identifiers.get("resignUsername()")); + } + + @Test + @SuppressWarnings("unchecked") + void token_exposes_erc20_signatures() throws Exception { + Map json = loadJson("Abi.Token.json"); + Map identifiers = (Map) json.get("methodIdentifiers"); + + // canonical ERC20 selectors + assertEquals("a9059cbb", identifiers.get("transfer(address,uint256)")); + assertEquals("095ea7b3", identifiers.get("approve(address,uint256)")); + } +}