@vocdoni/davinci-contracts
Version:
Smart contracts powering DAVINCI's digital voting protocol
1,114 lines • 56.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProcessRegistry__factory = void 0;
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
const ethers_1 = require("ethers");
const _abi = [
{
inputs: [
{
internalType: "address",
name: "target",
type: "address",
},
],
name: "AddressEmptyCode",
type: "error",
},
{
inputs: [],
name: "CannotAcceptResult",
type: "error",
},
{
inputs: [
{
internalType: "address",
name: "implementation",
type: "address",
},
],
name: "ERC1967InvalidImplementation",
type: "error",
},
{
inputs: [],
name: "ERC1967NonPayable",
type: "error",
},
{
inputs: [],
name: "FailedInnerCall",
type: "error",
},
{
inputs: [],
name: "InvalidCensus",
type: "error",
},
{
inputs: [],
name: "InvalidDuration",
type: "error",
},
{
inputs: [],
name: "InvalidInitialization",
type: "error",
},
{
inputs: [],
name: "InvalidMaxCount",
type: "error",
},
{
inputs: [],
name: "InvalidMaxValue",
type: "error",
},
{
inputs: [],
name: "InvalidStartTime",
type: "error",
},
{
inputs: [],
name: "InvalidStateRoot",
type: "error",
},
{
inputs: [],
name: "InvalidStatus",
type: "error",
},
{
inputs: [],
name: "NotInitializing",
type: "error",
},
{
inputs: [],
name: "NotOrganizationAdministrator",
type: "error",
},
{
inputs: [],
name: "OrganizationNotFound",
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: "ProcessAlreadyExists",
type: "error",
},
{
inputs: [],
name: "ProcessNotFound",
type: "error",
},
{
inputs: [],
name: "UUPSUnauthorizedCallContext",
type: "error",
},
{
inputs: [
{
internalType: "bytes32",
name: "slot",
type: "bytes32",
},
],
name: "UUPSUnsupportedProxiableUUID",
type: "error",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: false,
internalType: "bytes32",
name: "censusRoot",
type: "bytes32",
},
{
indexed: false,
internalType: "string",
name: "censusURI",
type: "string",
},
{
indexed: false,
internalType: "uint256",
name: "maxVotes",
type: "uint256",
},
],
name: "CensusUpdated",
type: "event",
},
{
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: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: true,
internalType: "address",
name: "creator",
type: "address",
},
],
name: "ProcessCreated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256",
name: "duration",
type: "uint256",
},
],
name: "ProcessDurationChanged",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256[]",
name: "result",
type: "uint256[]",
},
],
name: "ProcessResultsSet",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256",
name: "newStateRoot",
type: "uint256",
},
],
name: "ProcessStateRootUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
indexed: false,
internalType: "enum IProcessRegistry.ProcessStatus",
name: "newStatus",
type: "uint8",
},
],
name: "ProcessStatusChanged",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "implementation",
type: "address",
},
],
name: "Upgraded",
type: "event",
},
{
inputs: [],
name: "MAX_CENSUS_ORIGIN",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "MAX_STATUS",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "UPGRADE_INTERFACE_VERSION",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "chainID",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
],
name: "getProcess",
outputs: [
{
components: [
{
internalType: "enum IProcessRegistry.ProcessStatus",
name: "status",
type: "uint8",
},
{
internalType: "address",
name: "organizationId",
type: "address",
},
{
components: [
{
internalType: "uint256",
name: "x",
type: "uint256",
},
{
internalType: "uint256",
name: "y",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.EncryptionKey",
name: "encryptionKey",
type: "tuple",
},
{
internalType: "uint256",
name: "latestStateRoot",
type: "uint256",
},
{
internalType: "uint256[]",
name: "result",
type: "uint256[]",
},
{
internalType: "uint256",
name: "startTime",
type: "uint256",
},
{
internalType: "uint256",
name: "duration",
type: "uint256",
},
{
internalType: "uint256",
name: "voteCount",
type: "uint256",
},
{
internalType: "uint256",
name: "voteOverwriteCount",
type: "uint256",
},
{
internalType: "string",
name: "metadataURI",
type: "string",
},
{
components: [
{
internalType: "bool",
name: "costFromWeight",
type: "bool",
},
{
internalType: "bool",
name: "forceUniqueness",
type: "bool",
},
{
internalType: "uint8",
name: "maxCount",
type: "uint8",
},
{
internalType: "uint8",
name: "costExponent",
type: "uint8",
},
{
internalType: "uint256",
name: "maxValue",
type: "uint256",
},
{
internalType: "uint256",
name: "minValue",
type: "uint256",
},
{
internalType: "uint256",
name: "maxTotalCost",
type: "uint256",
},
{
internalType: "uint256",
name: "minTotalCost",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.BallotMode",
name: "ballotMode",
type: "tuple",
},
{
components: [
{
internalType: "enum IProcessRegistry.CensusOrigin",
name: "censusOrigin",
type: "uint8",
},
{
internalType: "uint256",
name: "maxVotes",
type: "uint256",
},
{
internalType: "bytes32",
name: "censusRoot",
type: "bytes32",
},
{
internalType: "string",
name: "censusURI",
type: "string",
},
],
internalType: "struct IProcessRegistry.Census",
name: "census",
type: "tuple",
},
],
internalType: "struct IProcessRegistry.Process",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRVerifierVKeyHash",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getSTVerifierVKeyHash",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "string",
name: "_chainID",
type: "string",
},
{
internalType: "address",
name: "_organizationRegistryAddress",
type: "address",
},
{
internalType: "address",
name: "_stVerifier",
type: "address",
},
{
internalType: "address",
name: "_rVerifier",
type: "address",
},
],
name: "initialize",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "enum IProcessRegistry.ProcessStatus",
name: "status",
type: "uint8",
},
{
internalType: "uint256",
name: "startTime",
type: "uint256",
},
{
internalType: "uint256",
name: "duration",
type: "uint256",
},
{
components: [
{
internalType: "bool",
name: "costFromWeight",
type: "bool",
},
{
internalType: "bool",
name: "forceUniqueness",
type: "bool",
},
{
internalType: "uint8",
name: "maxCount",
type: "uint8",
},
{
internalType: "uint8",
name: "costExponent",
type: "uint8",
},
{
internalType: "uint256",
name: "maxValue",
type: "uint256",
},
{
internalType: "uint256",
name: "minValue",
type: "uint256",
},
{
internalType: "uint256",
name: "maxTotalCost",
type: "uint256",
},
{
internalType: "uint256",
name: "minTotalCost",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.BallotMode",
name: "ballotMode",
type: "tuple",
},
{
components: [
{
internalType: "enum IProcessRegistry.CensusOrigin",
name: "censusOrigin",
type: "uint8",
},
{
internalType: "uint256",
name: "maxVotes",
type: "uint256",
},
{
internalType: "bytes32",
name: "censusRoot",
type: "bytes32",
},
{
internalType: "string",
name: "censusURI",
type: "string",
},
],
internalType: "struct IProcessRegistry.Census",
name: "census",
type: "tuple",
},
{
internalType: "string",
name: "metadata",
type: "string",
},
{
internalType: "address",
name: "organizationId",
type: "address",
},
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
components: [
{
internalType: "uint256",
name: "x",
type: "uint256",
},
{
internalType: "uint256",
name: "y",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.EncryptionKey",
name: "encryptionKey",
type: "tuple",
},
{
internalType: "uint256",
name: "initStateRoot",
type: "uint256",
},
],
name: "newProcess",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "organizationRegistryAddress",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "owner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "processCount",
outputs: [
{
internalType: "uint32",
name: "",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
name: "processes",
outputs: [
{
internalType: "enum IProcessRegistry.ProcessStatus",
name: "status",
type: "uint8",
},
{
internalType: "address",
name: "organizationId",
type: "address",
},
{
components: [
{
internalType: "uint256",
name: "x",
type: "uint256",
},
{
internalType: "uint256",
name: "y",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.EncryptionKey",
name: "encryptionKey",
type: "tuple",
},
{
internalType: "uint256",
name: "latestStateRoot",
type: "uint256",
},
{
internalType: "uint256",
name: "startTime",
type: "uint256",
},
{
internalType: "uint256",
name: "duration",
type: "uint256",
},
{
internalType: "uint256",
name: "voteCount",
type: "uint256",
},
{
internalType: "uint256",
name: "voteOverwriteCount",
type: "uint256",
},
{
internalType: "string",
name: "metadataURI",
type: "string",
},
{
components: [
{
internalType: "bool",
name: "costFromWeight",
type: "bool",
},
{
internalType: "bool",
name: "forceUniqueness",
type: "bool",
},
{
internalType: "uint8",
name: "maxCount",
type: "uint8",
},
{
internalType: "uint8",
name: "costExponent",
type: "uint8",
},
{
internalType: "uint256",
name: "maxValue",
type: "uint256",
},
{
internalType: "uint256",
name: "minValue",
type: "uint256",
},
{
internalType: "uint256",
name: "maxTotalCost",
type: "uint256",
},
{
internalType: "uint256",
name: "minTotalCost",
type: "uint256",
},
],
internalType: "struct IProcessRegistry.BallotMode",
name: "ballotMode",
type: "tuple",
},
{
components: [
{
internalType: "enum IProcessRegistry.CensusOrigin",
name: "censusOrigin",
type: "uint8",
},
{
internalType: "uint256",
name: "maxVotes",
type: "uint256",
},
{
internalType: "bytes32",
name: "censusRoot",
type: "bytes32",
},
{
internalType: "string",
name: "censusURI",
type: "string",
},
],
internalType: "struct IProcessRegistry.Census",
name: "census",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "proxiableUUID",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "rVerifier",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "renounceOwnership",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "sequencerRegistryAddress",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
components: [
{
internalType: "enum IProcessRegistry.CensusOrigin",
name: "censusOrigin",
type: "uint8",
},
{
internalType: "uint256",
name: "maxVotes",
type: "uint256",
},
{
internalType: "bytes32",
name: "censusRoot",
type: "bytes32",
},
{
internalType: "string",
name: "censusURI",
type: "string",
},
],
internalType: "struct IProcessRegistry.Census",
name: "census",
type: "tuple",
},
],
name: "setProcessCensus",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_duration",
type: "uint256",
},
],
name: "setProcessDuration",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
internalType: "bytes",
name: "proof",
type: "bytes",
},
{
internalType: "bytes",
name: "input",
type: "bytes",
},
],
name: "setProcessResults",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
internalType: "enum IProcessRegistry.ProcessStatus",
name: "newStatus",
type: "uint8",
},
],
name: "setProcessStatus",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "stVerifier",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "processId",
type: "bytes32",
},
{
internalType: "bytes",
name: "proof",
type: "bytes",
},
{
internalType: "bytes",
name: "input",
type: "bytes",
},
],
name: "submitStateTransition",
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",
},
];
const _bytecode = "0x60a060405230608052348015601357600080fd5b506080516130d661003d60003960008181611d7301528181611d9c0152611ee201526130d66000f3fe6080604052600436106101665760003560e01c80638da5cb5b116100d1578063adc879e91161008a578063d71d072e11610064578063d71d072e14610473578063f2fde38b14610493578063f34822b4146104b3578063f9aa4499146104d357600080fd5b8063adc879e91461041e578063b79938e914610433578063c718c01f1461045357600080fd5b80638da5cb5b1461031657806392bc266914610353578063992bc45b146103735780639c18deaf146103a0578063a5b110de146103c0578063ad3cb1cc146103e057600080fd5b806352d1902d1161012357806352d1902d1461025e57806356a6f1e2146102735780636bae04ea14610293578063715018a6146102b357806372c628ef146102c8578063848df540146102dd57600080fd5b806302cc919a1461016b5780630535fece1461019757806309706392146101ce5780632745e19c146102065780634c0acc56146102265780634f1ef28614610249575b600080fd5b34801561017757600080fd5b50610180600981565b60405160ff90911681526020015b60405180910390f35b3480156101a357600080fd5b506101b76101b23660046123cc565b6104e8565b60405161018e9b9a9998979695949392919061250c565b3480156101da57600080fd5b506004546101ee906001600160a01b031681565b6040516001600160a01b03909116815260200161018e565b34801561021257600080fd5b506002546101ee906001600160a01b031681565b34801561023257600080fd5b5061023b61072a565b60405190815260200161018e565b61025c610257366004612609565b6107a8565b005b34801561026a57600080fd5b5061023b6107c7565b34801561027f57600080fd5b5061025c61028e3660046126c1565b6107e4565b34801561029f57600080fd5b5061025c6102ae366004612705565b6109b3565b3480156102bf57600080fd5b5061025c610be0565b3480156102d457600080fd5b50610180600481565b3480156102e957600080fd5b5060025461030190600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161018e565b34801561032257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101ee565b34801561035f57600080fd5b5061025c61036e3660046127b8565b610bf4565b34801561037f57600080fd5b5061039361038e3660046123cc565b610f4f565b60405161018e91906128d9565b3480156103ac57600080fd5b506005546101ee906001600160a01b031681565b3480156103cc57600080fd5b5061025c6103db3660046129c4565b611252565b3480156103ec57600080fd5b50610411604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161018e9190612a41565b34801561042a57600080fd5b506104116117d2565b34801561043f57600080fd5b506001546101ee906001600160a01b031681565b34801561045f57600080fd5b5061025c61046e366004612a54565b611860565b34801561047f57600080fd5b5061025c61048e3660046129c4565b6119e0565b34801561049f57600080fd5b5061025c6104ae366004612a76565b611b76565b3480156104bf57600080fd5b5061025c6104ce366004612a91565b611bb9565b3480156104df57600080fd5b5061023b611d1e565b6000602081815291815260409081902080548251808401909352600182015483526002820154938301939093526003810154600582015460068301546007840154600885015460098601805460ff8a169961010090046001600160a01b03169897919061055490612b06565b80601f016020809104026020016040519081016040528092919081815260200182805461058090612b06565b80156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b5050604080516101008082018352600a88015460ff808216151584529181048216151560208401526201000081048216838501526301000000900481166060830152600b880154608080840191909152600c89015460a0840152600d89015460c0840152600e89015460e08401528351908101909352600f8801805497989297929650929450919250839116600981111561066a5761066a6123e5565b600981111561067b5761067b6123e5565b815260200160018201548152602001600282015481526020016003820180546106a390612b06565b80601f01602080910402602001604051908101604052809291908181526020018280546106cf90612b06565b801561071c5780601f106106f15761010080835404028352916020019161071c565b820191906000526020600020905b8154815290600101906020018083116106ff57829003601f168201915b50505050508152505090508b565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663233ace116040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a39190612b3a565b905090565b6107b0611d68565b6107b982611e0d565b6107c38282611e15565b5050565b60006107d1611ed7565b5060008051602061308183398151915290565b6000828152602081905260409020805461010090046001600160a01b03168061082057604051634d36eb6960e01b815260040160405180910390fd5b815460ff16806004811115610837576108376123e5565b846004811115610849576108496123e5565b1480610868575060048481811115610863576108636123e5565b60ff16115b806108a257506000816004811115610882576108826123e5565b141580156108a25750600381600481111561089f5761089f6123e5565b14155b156108c0576040516307a92f1960e51b815260040160405180910390fd5b60015460405163c1af6e0360e01b81526001600160a01b0384811660048301523360248301529091169063c1af6e0390604401602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190612b61565b6109515760405163f8b857d360e01b815260040160405180910390fd5b82548490849060ff1916600183600481111561096f5761096f6123e5565b0217905550847fac0c4085a30bc70d0d8893ee5d6466ac9c5f03e27fd7292dcef128a610e7c190856040516109a49190612b7e565b60405180910390a25050505050565b6109c06060820182612b8c565b90506000036109e25760405163111127cb60e01b815260040160405180910390fd5b6040810135600003610a075760405163111127cb60e01b815260040160405180910390fd5b6000828152602081905260409020805461010090046001600160a01b031680610a4357604051634d36eb6960e01b815260040160405180910390fd5b60015460405163c1af6e0360e01b81526001600160a01b0383811660048301523360248301529091169063c1af6e0390604401602060405180830381865afa158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190612b61565b610ad45760405163f8b857d360e01b815260040160405180910390fd5b601082015460208401351015610afd5760405163111127cb60e01b815260040160405180910390fd5b6000825460ff166004811115610b1557610b156123e5565b14158015610b3957506003825460ff166004811115610b3657610b366123e5565b14155b15610b57576040516307a92f1960e51b815260040160405180910390fd5b6020830135601083015560408301356011830155610b786060840184612b8c565b6012840191610b88919083612c20565b50837f35947a8913e2156f19b018078c9f0667e49cb3dc24af3434a4d0b16b82675b1b6040850135610bbd6060870187612b8c565b8760200135604051610bd29493929190612d08565b60405180910390a250505050565b610be8611f20565b610bf26000611f7b565b565b60015460405163c1af6e0360e01b81526001600160a01b0386811660048301523360248301529091169063c1af6e0390604401602060405180830381865afa158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c689190612b61565b610c855760405163f8b857d360e01b815260040160405180910390fd5b6000838152602081905260409020805461010090046001600160a01b031615610cc157604051635040c4d360e11b815260040160405180910390fd5b610cd160608a0160408b01612d42565b60ff16600003610cf45760405163ac38930b60e01b815260040160405180910390fd5b610d0460608a0160408b01612d42565b60ff16896080013511610d2a5760405163b1911d8b60e01b815260040160405180910390fd5b60048c81811115610d3d57610d3d6123e5565b60ff161180610d7b575060008c6004811115610d5b57610d5b6123e5565b14158015610d7b575060038c6004811115610d7857610d786123e5565b14155b15610d99576040516307a92f1960e51b815260040160405180910390fd5b4260008c9003610da757809b505b808c1015610dc857604051632ca4094f60e21b815260040160405180910390fd5b80610dd38c8e612d75565b11610df157604051637616640160e01b815260040160405180910390fd5b6009610e0060208b018b612d95565b6009811115610e1157610e116123e5565b60ff161115610e335760405163111127cb60e01b815260040160405180910390fd5b81548d90839060ff19166001836004811115610e5157610e516123e5565b0217905550600582018c9055600682018b90558154610100600160a81b0319166101006001600160a01b0388160217825583356001830155602084013560028301556003820183905560098201610ea9888a83612c20565b5089600a8301610eb98282612dcc565b50899050600f8301610ecb8282612e8e565b505060028054600160a01b900463ffffffff16906014610eea83612f25565b91906101000a81548163ffffffff021916908363ffffffff16021790555050336001600160a01b0316857fada6f87a2a16a0c9c169ca36754c5f33f7c1a973b575d068f888a549ed4faefa60405160405180910390a350505050505050505050505050565b610f5761227a565b60008281526020819052604090819020815161018081019092528054829060ff166004811115610f8957610f896123e5565b6004811115610f9a57610f9a6123e5565b8152815461010090046001600160a01b0316602080830191909152604080518082018252600185015481526002850154818401528184015260038401546060840152600484018054825181850281018501909352808352608090940193919290919083018282801561102b57602002820191906000526020600020905b815481526020019060010190808311611017575b505050505081526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201805461106c90612b06565b80601f016020809104026020016040519081016040528092919081815260200182805461109890612b06565b80156110e55780601f106110ba576101008083540402835291602001916110e5565b820191906000526020600020905b8154815290600101906020018083116110c857829003601f168201915b5050509183525050604080516101008082018352600a85015460ff8082161515845291810482161515602084810191909152620100008204831684860152630100000090910482166060840152600b860154608080850191909152600c87015460a0850152600d87015460c0850152600e87015460e08501529085019290925282519182018352600f8501805493909401939192839116600981111561118d5761118d6123e5565b600981111561119e5761119e6123e5565b815260200160018201548152602001600282015481526020016003820180546111c690612b06565b80601f01602080910402602001604051908101604052809291908181526020018280546111f290612b06565b801561123f5780601f106112145761010080835404028352916020019161123f565b820191906000526020600020905b81548152906001019060200180831161122257829003601f168201915b5050509190925250505090525092915050565b6000858152602081905260409020805461010090046001600160a01b031661128d57604051634d36eb6960e01b815260040160405180910390fd5b6004815460ff1660048111156112a5576112a56123e5565b14806112c657506002815460ff1660048111156112c4576112c46123e5565b145b156112e4576040516307a92f1960e51b815260040160405180910390fd5b60408051610180810190915281546115d791908390829060ff16600481111561130f5761130f6123e5565b6004811115611320576113206123e5565b8152815461010090046001600160a01b031660208083019190915260408051808201825260018501548152600285015481840152818401526003840154606084015260048401805482518185028101850190935280835260809094019391929091908301828280156113b157602002820191906000526020600020905b81548152602001906001019080831161139d575b50505050508152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820180546113f290612b06565b80601f016020809104026020016040519081016040528092919081815260200182805461141e90612b06565b801561146b5780601f106114405761010080835404028352916020019161146b565b820191906000526020600020905b81548152906001019060200180831161144e57829003601f168201915b5050509183525050604080516101008082018352600a85015460ff8082161515845291810482161515602084810191909152620100008204831684860152630100000090910482166060840152600b860154608080850191909152600c87015460a0850152600d87015460c0850152600e87015460e08501529085019290925282519182018352600f85018054939094019391928391166009811115611513576115136123e5565b6009811115611524576115246123e5565b8152602001600182015481526020016002820154815260200160038201805461154c90612b06565b80601f016020809104026020016040519081016040528092919081815260200182805461157890612b06565b80156115c55780601f1061159a576101008083540402835291602001916115c5565b820191906000526020600020905b8154815290600101906020018083116115a857829003601f168201915b50505050508152505081525050611fec565b6115f457604051631e1b576d60e31b815260040160405180910390fd5b600554604051635c73957b60e11b81526001600160a01b039091169063b8e72af69061162a908890889088908890600401612f4a565b60006040518083038186803b15801561164257600080fd5b505afa158015611656573d6000803e3d6000fd5b506000925061166a91505083850185612f7c565b600383015481519192501461169257604051630b6fac0360e41b815260040160405180910390fd5b60006116a060016009612ffb565b6001600160401b038111156116b7576116b76125c3565b6040519080825280602002602001820160405280156116e0578160200160208202803683370190505b50905060015b60098110156117355782816009811061170157611701612fe5565b602002015182611712600184612ffb565b8151811061172257611722612fe5565b60209081029190910101526001016116e6565b50825460ff191660049081178455815161175691850190602084019061236c565b50877fac0c4085a30bc70d0d8893ee5d6466ac9c5f03e27fd7292dcef128a610e7c19060046040516117889190612b7e565b60405180910390a2877fa21d6aca26cc870bcd3da1cc0d0b0f22572550a7d04fac698fc08b67b92c4352826040516117c0919061300e565b60405180910390a25050505050505050565b600380546117df90612b06565b80601f016020809104026020016040519081016040528092919081815260200182805461180b90612b06565b80156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b505050505081565b42811161188057604051637616640160e01b815260040160405180910390fd5b6000828152602081905260409020805461010090046001600160a01b0316806118bc57604051634d36eb6960e01b815260040160405180910390fd5b60015460405163c1af6e0360e01b81526001600160a01b0383811660048301523360248301529091169063c1af6e0390604401602060405180830381865afa15801561190c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119309190612b61565b61194d5760405163f8b857d360e01b815260040160405180910390fd5b6000825460ff166004811115611965576119656123e5565b1415801561198957506003825460ff166004811115611986576119866123e5565b14155b156119a7576040516307a92f1960e51b815260040160405180910390fd5b6006820183905560405183815284907f0f759826327c668a220d576485ac38ddc4f83fbc414b984c00e79f669b649f4690602001610bd2565b6000858152602081905260409020805461010090046001600160a01b0316611a1b57604051634d36eb6960e01b815260040160405180910390fd5b6000815460ff166004811115611a3357611a336123e5565b14611a51576040516307a92f1960e51b815260040160405180910390fd5b60048054604051635c73957b60e11b81526001600160a01b039091169163b8e72af691611a8691899189918991899101612f4a565b60006040518083038186803b158015611a9e57600080fd5b505afa158015611ab2573d6000803e3d6000fd5b5060009250611ac691505083850185613021565b6003830154815191925014611aee57604051630b6fac0360e41b815260040160405180910390fd5b602081015160038301556040810151600783018054600090611b11908490612d75565b90915550506060810151600883018054600090611b2f908490612d75565b909155505060208082015160405190815288917fd25cbd3fa66107efb1230dc4f49f939d7b6b57ba10ab0ec87ba39040c075cf20910160405180910390a250505050505050565b611b7e611f20565b6001600160a01b038116611bad57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b611bb681611f7b565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611bfe5750825b90506000826001600160401b03166001148015611c1a5750303b155b905081158015611c28575080155b15611c465760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611c7057845460ff60401b1916600160401b1785555b611c7933612036565b611c81612047565b6003611c8e8a8c83612c20565b50600180546001600160a01b03808b166001600160a01b031992831617909255600480548a841690831617905560058054928916929091169190911790558315611d1257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6005546040805163233ace1160e01b815290516000926001600160a01b03169163233ace119160048083019260209291908290030181865afa15801561077f573d6000803e3d6000fd5b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611def57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611de3600080516020613081833981519152546001600160a01b031690565b6001600160a01b031614155b15610bf25760405163703e46dd60e11b815260040160405180910390fd5b611bb6611f20565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e6f575060408051601f3d908101601f19168201909252611e6c91810190612b3a565b60015b611e9757604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611ba4565b6000805160206130818339815191528114611ec857604051632a87526960e21b815260048101829052602401611ba4565b611ed2838361204f565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf25760405163703e46dd60e11b815260040160405180910390fd5b33611f527f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610bf25760405163118cdaa760e01b8152336004820152602401611ba4565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000600182516004811115612003576120036123e5565b14806120215750428260c001518360a0015161201f9190612d75565b105b1561202e57506001919050565b506000919050565b61203e6120a5565b611bb6816120ee565b610bf26120a5565b612058826120f6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561209d57611ed2828261215b565b6107c36121d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bf257604051631afcd79f60e31b815260040160405180910390fd5b611b7e6120a5565b806001600160a01b03163b60000361212c57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611ba4565b60008051602061308183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516121789190613064565b600060405180830381855af49150503d80600081146121b3576040519150601f19603f3d011682016040523d82523d6000602084013e6121b8565b606091505b50915091506121c88583836121f2565b925050505b92915050565b3415610bf25760405163b398979f60e01b815260040160405180910390fd5b6060826122075761220282612251565b61224a565b815115801561221e57506001600160a01b0384163b155b1561224757604051639996b31560e01b81526001600160a01b0385166004820152602401611ba4565b50805b9392505050565b8051156122615780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604080516101808101909152806000815260200160006001600160a01b031681526020016122bb604051806040016040528060008152602001600081525090565b815260200160008152602001606081526020016000815260200160008152602001600081526020016000815260200160608152602001612343604051806101000160405280600015158152602001600015158152602001600060ff168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b815260408051608081018252600080825260208281018290529282015260608082015291015290565b8280548282559060005260206000209081019282156123a7579160200282015b828111156123a757825182559160200191906001019061238c565b506123b39291506123b7565b5090565b5b808211156123b357600081556001016123b8565b6000602082840312156123de57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061240b5761240b6123e5565b9052565b60005b8381101561242a578181015183820152602001612412565b50506000910152565b6000815180845261244b81602086016020860161240f565b601f01601f19169290920160200192915050565b80511515825260208101511515602083015260ff60408201511660408301526060810151612492606084018260ff169052565b506080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b60008151600a81106124d3576124d36123e5565b8084525060208201516020840152604082015160408401526060820151608060608501526125046080850182612433565b949350505050565b612516818d6123fb565b6001600160a01b038b16602082015261253c604082018b80518252602090810151910152565b8860808201528760a08201528660c08201528560e0820152846101008201526102606101208201526000612574610260830186612433565b61258