wj      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe+gPassword for authentication.hUsername for authentication.i-SASL Authentication information for a server.r  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopijmklhgdefabc`_^]\[ZYn :;<=>EFGHIJKLMNOPQRSTUVWXCDAB?@o$%&'()*+,-./0123456789 !"#    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijmklnoSafe+pErrors that occur between the client and server in communicating. These are unexpected exceptions, such as network failures or garbage data.rjExceptions that may be thrown by Memcache. These are expected error codes returned by a memcached server.|cConvert a status to an error. Note, not all status's are errors and so this is a partial function!}lConvert a status to an exception. Note, not all status's are errors and so this is not a complete function!~CThrow an IncorrectResponse exception for a wrong received response.pqrstuvwxyz{|}~pqrstuvwxyz{|}~rstuvwxyz{|}~pqpqr stuvwxyz{|}~None'Send a request to the memcached server.gRetrieve a single response from the memcached server. TODO: read into buffer to minimize read syscalls9Check whether we can still operate on this socket or not.$Serialize a request to a ByteString.,Serialize a request to a ByteString Builder.)Deserialize a Response from a ByteString.Deserialize a Response.'Deserialize a Header from a ByteString.Deserialize a Header..Deserialize a Response body from a ByteString.Deserialize a Response body.9Deserialize the body of a Response that contains nothing.@Deserialize the body of a Get Response (Extras [flags] & Value).GDeserialize the body of a GetK Response (Extras [flags] & Key & Value).>Deserialize the body of a Incr/Decr Response (Value [Word64]).UDeserialize the body of a general response that just has a value (no key or extras).VDeserialize the body of a general response that just has a key and value (no extras).#Deserialize a Response status code.dCheck the length of a header field is as expected, throwing a ProtocolError exception if it is not.  None,Perform SASL authentication with the server."Perform SASL PLAIN authentication.List available SASL authentication methods. We could call this but as we only support PLAIN as does the memcached server, we simply assume PLAIN authentication is supprted and try that.ghijklmijmklhgNoneA memcached server connection."Create a new memcached connection.HSend and receive a single request/response pair to the memcached server.9Run a function with access to an server socket for using  and .qClose the server connection. If you perform another operation after this, the connection will be re-established. NoneN*StatResults are a list of key-value pairs.NoneN A memcached cluster client.?Options specifies how a memcached cluster should be configured.:ServerSpec specifies a server configuration to connect to.9Provides a default value for a server cconnection config.3Provides recommended default for a cluster Options.;Establish a new connection to a group of memcached servers.Figure out which server to talk to for this key. I.e., the distribution method. We use consistent hashing based on the CHORD approach.VRun a memcached operation against a server that maps to the key given in the cluster.CRun a memcached operation against any single server in the cluster.=Run a memcached operation against all servers in the cluster.YRun a memcached operation against a particular server, handling any failures that occur. NoneCA memcached client, connected to a collection of memcached servers.;Establish a new connection to a group of memcached servers.5Gracefully close a connection to a memcached cluster.3Retrieve the value for the given key from memcache.Get-and-touch: Retrieve the value for the given key from memcache, and also update the stored key-value pairs expiration time at the server.YUpdate the expiration time of a stored key-value pair, returning its version identifier.WStore a new (or overwrite exisiting) key-value pair, returning its version identifier.Store a key-value pair, but only if the version specified by the client matches the version of the key-value pair at the server. The version identifier of the stored key-value pair is returned, or if the version match fails,  is returned.xStore a new key-value pair, returning it's version identifier. If the key-value pair already exists, then fail (return ).Update the value of an existing key-value pair, returning it's new version identifier. If the key doesn't already exist, the fail and return Nothing.DDelete a key-value pair at the server, returning true if successful.Increment a numeric value stored against a key, returning the incremented value and the version identifier of the key-value pair.Decrement a numeric value stored against a key, returning the decremented value and the version identifier of the key-value pair.zAppend a value to an existing key-value pair, returning the new version identifier of the key-value pair when successful.{Prepend a value to an existing key-value pair, returning the new version identifier of the key-value pair when successful.FRemove (delete) all currently stored key-value pairs from the cluster.OReturn statistics on the stored key-value pairs at each server in the cluster.Version returns the version string of the memcached cluster. We just query one server and assume all servers in the cluster are the same version.2ghijklmpqrstuvwxyz{2ijmklhgrstuvwxyz{pq        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFFGGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~memca_1xLayzjlkwR4IwCQtBZyfdDatabase.Memcache.TypesDatabase.Memcache.ErrorsDatabase.Memcache.WireDatabase.Memcache.SASLDatabase.Memcache.ServerDatabase.Memcache.ProtocolDatabase.Memcache.ClusterDatabase.Memcache.ClientIncorrectResponseincrespMessage increspActual ProtocolErrorprotocolMessageprotocolHeaderprotocolParamsHeaderopkeyLenextraLenstatusbodyLenopaquecasResponseResresOp resStatus resOpaqueresCasStatusNoErrorErrKeyNotFound ErrKeyExistsErrValueTooLargeErrInvalidArgsErrItemNotStoredErrValueNonNumericErrUnknownCommandErrOutOfMemory SaslAuthFailSaslAuthContinue OpResponseResGetResGetKResSetResAdd ResReplace ResDelete ResIncrement ResDecrement ResAppend ResPrependResTouchResGATResGATKResFlushResNoop ResVersionResStatResQuit ResSASLList ResSASLStart ResSASLStepRequestReqreqOp reqOpaquereqCasSETouchSEIncrSESet OpRequestReqGetReqSetReqAdd ReqReplace ReqDelete ReqIncrement ReqDecrement ReqAppend ReqPrependReqTouchReqGATReqFlushReqNoop ReqVersionReqStatReqQuit ReqSASLList ReqSASLStart ReqSASLStepVersionFlags ExpirationDeltaInitialExtrasValueKeyKNoKey IncludeKeyQLoudQuietPasswordUsernameAuthenticationAuthusernamepasswordNoAuthmEMCACHE_HEADER_SIZEemptyReq ClientErrorNotEnoughBytes MemcacheError MemErrNoKeyMemErrKeyExistsMemErrValueTooLargeMemErrInvalidArgsMemErrStoreFailedMemErrValueNonNumericMemErrUnknownCmdMemErrOutOfMemoryMemErrAuthFail statusToError throwStatusthrowIncorrectRessendrecv szRequest' szRequest dzResponse' dzResponse dzHeader'dzHeaderdzBody'dzBody authenticateServersid newServersendRecv withSocketclose StatResultsgetgattouchsetset'addreplacedelete increment decrementappendprependflushnoopversionstatsquitClusterOptionsoptsCmdFailureoptsServerFailureoptsServerRetries ServerSpecssHostssPortssAuthdefaultServerSpecdefaultOptions newClusterkeyedOpanyOpallOpClient newClient$fExceptionIncorrectResponse$fExceptionProtocolError$fExceptionClientError$fExceptionMemcacheErrorisSocketActivedzGenericResponse dzGetResponsedzGetKResponsedzNumericResponsedzValueResponsedzKeyValueResponsedzStatus chkLengthgetCodeKeyValue saslAuthPlain saslListMechspool_addr_port_authfailedsSTRIPES sCONNECTIONS sKEEPALIVE $fOrdServer $fEqServergetServerForKeyserverOp FailureMode FailSilent FailToBackup FailToErrorserverscmdFailureMode_serverFailureMode serverRetriesbaseGHC.BaseNothingkeyedOp'