!`D      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None> iSafe _      !"#$%&'()*+,-./0123456789:;<=SafeX s >?@ABCDEFGHNone"# IJKLMNOPQRSNone2aRabbitMQ9Keys must be shorter than 256 bytes when encoded as UTF-8%RabbitMQthe T/ contains the reason why the channel was closed&RabbitMQString may contain a reason'RabbitMQthe \ contains the channel-max property of the connection (i.e. the highest permitted channel id)(RabbitMQbdescribes whether a channel was closed by user-request (Normal) or by an AMQP exception (Abnormal)+  !"#$%&'()*+$%&'#"!  ()*NoneURabbitMQPacks up to 8 bits into a Word8VRabbitMQ3Packs up to 15 Bits into a Word16 (=Property Flags)TWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~UV None  None&' Safe None2X[L)LRabbitMQThrown in the channel thread when the connection gets closed. When handling exceptions in a subscription callback, make sure to re-throw this so the channel thread can be stopped.MRabbitMQA connection to an AMQP server is made up of separate channels. It is recommended to use a separate channel for each thread in your application that talks to the AMQP server (but you don't have to as channels are thread-safe)NRabbitMQA N is described by its name (P), its initial response (Q), and an optional function (R) that transforms a security challenge provided by the server into response, which is then sent back to the server for verification.PRabbitMQmechanism nameQRabbitMQinitial responseRRabbitMQchallenge processing functionSRabbitMQORepresents the parameters to connect to a broker or a cluster of brokers. See defaultConnectionOpts.URabbitMQ^A list of host-port pairs. Useful in a clustered setup to connect to the first available host.VRabbitMQThe VHost to connect to.WRabbitMQThe N,s to use for authenticating with the broker.XRabbitMQIThe maximum frame size to be used. If not specified, no limit is assumed.YRabbitMQ[The delay in seconds, after which the client expects a heartbeat frame from the broker. If 1, the value suggested by the broker is used. Use Just 0# to disable the heartbeat mechnism.ZRabbitMQ3The maximum number of channels the client will use.[RabbitMQ4Whether or not to connect to servers using TLS. See  http://www.rabbitmq.com/ssl.html for details.\RabbitMQJoptional connection name (will be displayed in the RabbitMQ web interface)gRabbitMQ:contains meta-information of a delivered message (through getMsg or  consumeMsgs)nRabbitMQAn AMQP messagepRabbitMQthe content of your messageqRabbitMQsee rRabbitMQKuse in any way you like; this doesn't affect the way the message is handledsRabbitMQKuse in any way you like; this doesn't affect the way the message is handledtRabbitMQKuse in any way you like; this doesn't affect the way the message is handledRabbitMQBthe message will survive server restarts (if the queue is durable)RabbitMQ-the message may be lost after server restartsRabbitMQ/reads all frames necessary to build an assemblyRabbitMQ:reads a contentheader and contentbodies and assembles themRabbitMQJreads incoming frames from socket and forwards them to the opened channelsRabbitMQ6Opens a connection to a broker specified by the given S parameter.RabbitMQ#kill the connection thread abruptlyRabbitMQcloses a connection{Make sure to call this function before your program exits to ensure that all published messages are received by the server.RabbitMQ2get the server properties sent in connection.startRabbitMQ0addConnectionClosedHandler conn ifClosed handler adds a handlerG that will be called after the connection is closed (either by calling closeConnection or by an exception). If the ifClosedd parameter is True and the connection is already closed, the handler will be called immediately. If ifClosed == FalseG and the connection is already closed, the handler will never be calledRabbitMQ@addConnectionBlockedHandler conn blockedHandler unblockedHandlero adds handlers that will be called when a connection gets blocked/unlocked due to server resource constraints.More information: 0https://www.rabbitmq.com/connection-blocked.htmlRabbitMQ(The thread that is run for every channelRabbitMQ]registers a callback function that is called whenever a message is returned from the broker ('basic.return').RabbitMQZregisters a callback function that is called whenever a channel is closed by an exception.RabbitMQ%opens a new channel on the connectionBy default, if a channel is closed by an AMQP exception, this exception will be printed to stderr. You can prevent this behaviour by setting a custom exception handler (using ).RabbitMQcloses a channel. It is typically not necessary to manually call this as closing a connection will implicitly close all channels.RabbitMQ0writes multiple frames to the channel atomicallyRabbitMQ!writes an assembly to the channelRabbitMQ+sends an assembly and receives the responsezLMNORQPST\[ZYXWVU]^a`_bcfedghmlkjino~}|{zyxwvutsrqpNone2X-;RabbitMQIspecifies whether you have to acknowledge messages that you receive from  or  . If you use , you have to call  or X after you have processed a message, otherwise it might be delivered again in the futureRabbitMQIA record that contains the fields needed when creating a new queue using (. The default values apply when you use .RabbitMQo(default ""); the name of the queue; if left empty, the server will generate a new name and return it from the  methodRabbitMQ (default ); If set, the server will not create the queue. The client can use this to check whether a queue exists without modifying the server state.RabbitMQ (default b); If set when creating a new queue, the queue will be marked as durable. Durable queues remain active when a server restarts. Non-durable queues (transient queues) are purged if/when a server restarts. Note that durable queues do not necessarily hold persistent messages, although it does not make sense to send persistent messages to a transient queue.RabbitMQ (default U); Exclusive queues may only be consumed from by the current connection. Setting the  exclusive flag always implies  'auto-delete'.RabbitMQ (default ); If set, the queue is deleted when all consumers have finished using it. Last consumer can be cancelled either explicitly or because its channel is closed. If there was no consumer ever on the queue, it won't be deleted.RabbitMQB(default empty): Headers to use when creating this queue, such as  x-message-ttl or x-dead-letter-exchange.RabbitMQKA record that contains the fields needed when creating a new exhange using (. The default values apply when you use .RabbitMQ'(must be set); the name of the exchangeRabbitMQP(must be set); the type of the exchange ("fanout", "direct", "topic", "headers")RabbitMQ (default ); If set, the server will not create the exchange. The client can use this to check whether an exchange exists without modifying the server state.RabbitMQ (default ); If set when creating a new exchange, the exchange will be marked as durable. Durable exchanges remain active when a server restarts. Non-durable exchanges (transient exchanges) are purged if/when a server restarts.RabbitMQ (default J); If set, the exchange is deleted when all queues have finished using it.RabbitMQ (default ); If set, the exchange may not be used directly by publishers, but only when bound to other exchanges. Internal exchanges are used to construct wiring that is not visible to applications.RabbitMQ(default empty); A set of arguments for the declaration. The syntax and semantics of these arguments depends on the server implementation.RabbitMQan 3 with defaults set; you must override at least the  and  fields.RabbitMQCdeclares a new exchange on the AMQP server. Can be used like this: ZdeclareExchange channel newExchange {exchangeName = "myExchange", exchangeType = "fanout"}RabbitMQ7bindExchange chan destinationName sourceName routingKeyB binds the exchange to the exchange using the provided routing keyRabbitMQan extended version of K that allows you to include arbitrary arguments. This is useful to use the headers exchange-type.RabbitMQ9unbindExchange chan destinationName sourceName routingKey+ unbinds an exchange from an exchange. The  routingKeyB must be identical to the one specified when binding the exchange.RabbitMQan extended version of + that allows you to include arguments. The  argumentsC must be identical to the ones specified when binding the exchange.RabbitMQ+deletes the exchange with the provided nameRabbitMQa 1 with defaults set; you should override at least .RabbitMQ?creates a new queue on the AMQP server; can be used like this: 5declareQueue channel newQueue {queueName = "myQueue"}.Returns a tuple $(queue, messageCount, consumerCount). queue` is the name of the new queue (if you don't specify a queue the server will autogenerate one).  messageCountV is the number of messages in the queue, which will be zero for newly-created queues.  consumerCount1 is the number of active consumers for the queue.RabbitMQ(bindQueue chan queue exchange routingKeyD binds the queue to the exchange using the provided routing key. If exchange8 is the empty string, the default exchange will be used.RabbitMQan extended version of  bindQueueK that allows you to include arbitrary arguments. This is useful to use the headers exchange-type.RabbitMQ*unbindQueue chan queue exchange routingKey' unbinds a queue from an exchange. The  routingKey? must be identical to the one specified when binding the queue.RabbitMQan extended version of  unbindQueue+ that allows you to include arguments. The  arguments@ must be identical to the ones specified when binding the queue.RabbitMQYremove all messages from the queue; returns the number of messages that were in the queueRabbitMQXdeletes the queue; returns the number of messages that were in the queue before deletionRabbitMQa Msg1 with defaults set; you should override at least pRabbitMQ#consumeMsgs chan queue ack callbackq subscribes to the given queue and returns a consumerTag. For any incoming message, the callback will be run. If ack == 9 you will have to acknowledge all incoming messages (see  and )XIf you do any exception handling inside the callback, you should make sure not to catch Lc, or re-throw it if you did catch it, since it is used internally by the library to close channels.NOTE: The callback will be run on the channel's receiver thread (which is responsible for handling all incoming messages on this channel, including responses to requests from the client) so DO NOT perform any blocking request on chan inside the callback, as this would lead to a dead-lock. However, you CAN perform requests on other open channels inside the callback, though that would keep chan blocked until the requests are done, so it is not recommended. Unless you're using AMQP flow control, the following functions can safely be called on chan: , , , r. If you use flow-control or want to perform anything more complex, it's a good idea to wrap your requests inside .RabbitMQan extended version of  consumeMsgs\ that allows you to define a consumer cancellation callback and include arbitrary arguments.RabbitMQ'stops a consumer that was started with RabbitMQ'publishMsg chan exchange routingKey msg publishes msg# to the exchange with the provided exchange. The effect of  routingKey% depends on the type of the exchange.bReturns the sequence-number of the message (only if the channel is in publisher confirm mode; see ).NOTE: This method may temporarily block if the AMQP server requested us to stop sending content data (using the flow control mechanism). So don't rely on this method returning immediately.RabbitMQLike 5, but additionally allows you to specify whether the  mandatory flag should be set.RabbitMQgetMsg chan ack queue- gets a message from the specified queue. If ack==, you have to call  or _ for any message that you get, otherwise it might be delivered again in the future (by calling )RabbitMQ ackMsg chan deliveryTag multipleV acknowledges one or more messages. A message MUST not be acknowledged more than once.if multiple==True, the  deliverTagy is treated as "up to and including", so that the client can acknowledge multiple messages with a single method call. If multiple==False,  deliveryTag refers to a single message.If multiple==True, and deliveryTag==0:, tells the server to acknowledge all outstanding mesages.RabbitMQ5Acknowledges a single message. This is a wrapper for  in case you have the g at hand.RabbitMQ"rejectMsg chan deliveryTag requeue allows a client to reject a message. It can be used to interrupt and cancel large incoming messages, or return untreatable messages to their original queue. If requeue==False+, the message will be discarded. If it is 1, the server will attempt to requeue the message.1NOTE: RabbitMQ 1.7 doesn't implement this commandRabbitMQ(Reject a message. This is a wrapper for  in case you have the g at hand.RabbitMQrecoverMsgs chan requeuep asks the broker to redeliver all messages that were received but not acknowledged on the specified channel. If requeue==False@, the message will be redelivered to the original recipient. If  requeue==Truen, the server will attempt to requeue the message, potentially then delivering it to an alternative subscriber.RabbitMQThis method sets the channel to use standard transactions. The client must use this method at least once on a channel before using the Commit or Rollback methods.RabbitMQThis method commits all messages published and acknowledged in the current transaction. A new transaction starts immediately after a commit.RabbitMQThis method abandons all messages published and acknowledged in the current transaction. A new transaction starts immediately after a rollback.RabbitMQconfirmSelect chan nowaito puts the channel in publisher confirm mode. This mode is a RabbitMQ extension where a producer receives confirmations when messages are successfully processed by the broker. Publisher confirms are a relatively lightweight alternative to full transactional mode. For details about the delivery guarantees and performace implications of this mode, see  &https://www.rabbitmq.com/confirms.html. Note that on a single channel, publisher confirms and transactions are mutually exclusive (you cannot select both at the same time). When  nowait==True9 the server will not send back a response to this method.RabbitMQCalling this function will cause the invoking thread to block until all previously published messages have been acknowledged by the broker (positively or negatively). Returns a value of type !, holding a tuple of two IntSets (acked, nacked)V, ontaining the delivery tags for the messages that have been confirmed by the broker.RabbitMQSame as , but with a timeout in microseconds. Note that, since this operation may timeout before the server has acked or nacked all pending messages, the returned 0 should be pattern-matched for the constructors Complete (acked, nacked) and  Partial (acked, nacked, pending)RabbitMQ3Adds a handler which will be invoked each time the Channel[ receives a confirmation from the broker. The parameters passed to the the handler are the  deliveryTagr for the message being confirmed, a flag indicating whether the confirmation refers to this message individually (False") or all messages up to this one (True ) and an AckType whose value can be either BasicAck or  BasicNack.RabbitMQflow chan active tells the AMQP server to pause or restart the flow of content data. This is a simple flow-control mechanism that a peer can use to avoid overflowing its queues or otherwise finding itself receiving more messages than it can process.If  active==True0 the server will start sending content data, if  active==False+ the server will stop sending content data.*A new channel is always active by default.2NOTE: RabbitMQ 1.7 doesn't implement this command.RabbitMQCConstructs default connection options with the following settings :Broker: %amqp://guest:guest@localhost:5672/%2F using the PLAIN SASL mechanismmax frame size: 131072/use the heartbeat delay suggested by the broker'no limit on the number of used channelsRabbitMQ;openConnection hostname virtualHost loginName loginPassword1 opens a connection to an AMQP server running on hostname.  virtualHost is used as a namespace for AMQP resources (default is "/"), so different applications could use multiple virtual hosts on the same AMQP server.You must call \ before your program exits to ensure that all published messages are received by the server.The  loginName and  loginPassword& will be used to authenticate via the PLAIN SASL mechanism.XNOTE: If the login name, password or virtual host are invalid, this method will throw a &m. The exception will not contain a reason why the connection was closed, so you'll have to find out yourself.RabbitMQsame as I but allows you to specify a non-default port-number as the 2nd parameterRabbitMQThe PLAIN SASL mechanism. See "http://tools.ietf.org/html/rfc4616RFC4616RabbitMQThe AMQPLAIN SASL mechanism. See  +http://www.rabbitmq.com/authentication.html.RabbitMQThe RABBIT-CR-DEMO SASL mechanism needs to be explicitly enabled on the RabbitMQ server and should only be used for demonstration purposes of the challenge-response cycle. See  +http://www.rabbitmq.com/authentication.html.RabbitMQ*qos chan prefetchSize prefetchCount globalS limits the amount of data the server delivers before requiring acknowledgements.  prefetchSize$ specifies the number of bytes and  prefetchCountD the number of messages. In both cases the value 0 means unlimited.The meaning of the global flag is explained here: .http://www.rabbitmq.com/consumer-prefetch.htmlaNOTE: RabbitMQ does not implement prefetchSize and will throw an exception if it doesn't equal 0.RabbitMQ%Parses amqp standard URI of the form  $amqp://user:password@host:port/vhost and returns a S for use with IAny of these fields may be empty and will be replaced with defaults from "amqp://guest:guest@localhost:5672/RabbitMQrequeue$%&'()*LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~̌]STUVWXYZ[\Mnopqrstuvwxyz{|}~bcdef^_`aghijklmNOPQR$%&'L()*None>DRabbitMQ'consumeMsgs chan queueName ack callbackq subscribes to the given queue and returns a consumerTag. For any incoming message, the callback will be run. If ack == Ack9 you will have to acknowledge all incoming messages (see ackMsg and ackEnv)NOTE: The callback will be run on the same thread as the channel thread (every channel spawns its own thread to listen for incoming data) so DO NOT perform any request on chan inside the callback (however, you CAN perform requests on other open channels inside the callback, though I wouldn't recommend it). Functions that can safely be called on chan are ackMsg, ackEnv,  rejectMsg,  recoverMsgsS. If you want to perform anything more complex, it's a good idea to wrap it inside forkIO.)In addition, while the callback function ((Message, Envelope ) -> m ())L has access to the captured state, all its side-effects in m are discarded.RabbitMQan extended version of  consumeMsgs\ that allows you to define a consumer cancellation callback and include arbitrary arguments.RabbitMQ0Specifies the name of the queue to consume from.RabbitMQ0Specifies the name of the queue to consume from.  !!"##$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST U V W W X Y Z [ [ \ ] ^ _ ` a b c d e f g h i i j k l m m n o p q r s s t u v w x y z { | } ~              !"#$#%#&#'#(#)#*#+#+#,-.-.-/010203045657898:8;8<8=8>8?8@8ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_d`abcdefghijklmnopqrstuvwxyz{|}~     g                               U  V                d                               'RabbitMQ-0.1.0.0-CYzJuzs4eNE2uq8oZTWXUvNetwork.AMQP.Types Network.AMQPNetwork.AMQP.LiftedNetwork.AMQP.BinaryNetwork.AMQP.PreludeNetwork.AMQP.HelpersNetwork.AMQP.ConnectionNetwork.AMQP.GeneratedNetwork.AMQP.ProtocolNetwork.AMQP.ChannelAllocatorPaths_RabbitMQNetwork.AMQP.InternalConfirmationResultCompletePartialDecimals DecimalValue FieldValueFVBoolFVInt8FVInt16FVInt32FVInt64FVFloatFVDouble FVDecimalFVString FVFieldArray FVTimestamp FVFieldTableFVVoid FVByteArray FieldTable Timestamp LongString ShortString ConsumerTag LongLongIntLongIntShortInt PayloadSize ChannelIDBitOctet AMQPExceptionChannelClosedExceptionConnectionClosedExceptionAllChannelsAllocatedException CloseTypeNormalAbnormal$fExceptionAMQPException$fBinaryShortString$fBinaryLongString$fBinaryDecimalValue$fBinaryFieldValue$fBinaryFieldTable$fShowCloseType$fOrdCloseType $fEqCloseType$fShowAMQPException$fOrdAMQPException$fEqAMQPException$fEqShortString$fOrdShortString$fReadShortString$fShowShortString$fEqLongString$fOrdLongString$fReadLongString$fShowLongString$fEqDecimalValue$fOrdDecimalValue$fReadDecimalValue$fShowDecimalValue$fEqFieldValue$fOrdFieldValue$fReadFieldValue$fShowFieldValue$fEqFieldTable$fOrdFieldTable$fReadFieldTable$fShowFieldTable$fShowConfirmationResultChanThreadKilledExceptionChannel SASLMechanismsaslNamesaslInitialResponsesaslChallengeFuncConnectionOpts coServerscoVHostcoAuthcoMaxFrameSizecoHeartbeatDelay coMaxChannel coTLSSettingscoName ConnectionReturnReplyCode Unroutable NoConsumersNotFound PublishError errReplyCode errExchange errRoutingKeyEnvelopeenvDeliveryTagenvRedeliveredenvExchangeName envRoutingKey envChannelMessagemsgBodymsgDeliveryMode msgTimestampmsgIDmsgType msgUserIDmsgApplicationID msgClusterIDmsgContentTypemsgContentEncoding msgReplyTo msgPrioritymsgCorrelationID msgExpiration msgHeaders DeliveryMode Persistent NonPersistentAckTypeBasicAck BasicNackopenConnection''closeConnectiongetServerPropertiesaddConnectionClosedHandleraddConnectionBlockedHandleraddReturnListeneraddChannelExceptionHandler openChannel closeChannelAckNoAck QueueOpts queueName queuePassive queueDurablequeueExclusivequeueAutoDelete queueHeaders ExchangeOpts exchangeName exchangeTypeexchangePassiveexchangeDurableexchangeAutoDeleteexchangeInternalexchangeArguments newExchangedeclareExchange bindExchange bindExchange'unbindExchangeunbindExchange'deleteExchangenewQueue declareQueue bindQueue bindQueue' unbindQueue unbindQueue' purgeQueue deleteQueuenewMsg consumeMsgs consumeMsgs'cancelConsumer publishMsg publishMsg'getMsgackMsgackEnv rejectMsg rejectEnv recoverMsgstxSelecttxCommit txRollback confirmSelectwaitForConfirmswaitForConfirmsUntiladdConfirmationListenerflowdefaultConnectionOptsopenConnectionopenConnection'plainamqplain rabbitCRdemoqosfromURI$fEqExchangeOpts$fOrdExchangeOpts$fReadExchangeOpts$fShowExchangeOpts $fEqQueueOpts$fOrdQueueOpts$fReadQueueOpts$fShowQueueOpts$fEqAck$fOrdAck $fReadAck $fShowAck putFloat32be putFloat64be getFloat32be getFloat64bebase Control.MonadguardGHC.BasejoinMonad>>=>>returnfailFunctorfmap<$Data.Typeable.InternalTypeable Applicativepure<*>*><*liftA2Data.TraversablemapMsequenceMonoidmemptymappendmconcatghc-prim GHC.TypesIntGHC.IntInt8Int16Int32Int64 GHC.MaybeMaybeNothingJustbytestring-0.10.8.2Data.ByteString.Internal ByteString text-1.2.3.1Data.Text.InternalText Alternativemanyempty<|>some MonadPlusmzeromplusmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforMControl.Applicativeoptional WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowZipList getZipListData.Functor.ConstConstgetConst Data.Foldablemsum sequence_forM_mapM_ Data.Functorvoid<$> Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeapliftM5liftM4liftM3liftM2liftMwhen=<<liftA3liftA<**>Data.ByteString.LazytoStrictLocktoLazynewLockopenLock closeLockwaitLockkillLock chooseMin getTimestampscheduleAtFixedRate*HsOpenSSL-0.11.4.16-FnF1nj414ys5HGk75c26fpOpenSSL.Session SSLContextConnectionParamsconnectionHostnameconnectionPortconnectionSecureconnectionClose connectionPut connectionGet connectToStringputBits putPropBits MethodPayloadConfirm_select_okConfirm_selectTx_rollback_ok Tx_rollback Tx_commit_ok Tx_commit Tx_select_ok Tx_select Basic_nackBasic_recover_ok Basic_recoverBasic_recover_async Basic_reject Basic_ackBasic_get_empty Basic_get_ok Basic_get Basic_deliver Basic_return Basic_publishBasic_cancel_ok Basic_cancelBasic_consume_ok Basic_consume Basic_qos_ok Basic_qosQueue_delete_ok Queue_deleteQueue_purge_ok Queue_purgeQueue_unbind_ok Queue_unbind Queue_bind_ok Queue_bindQueue_declare_ok Queue_declareExchange_unbind_okExchange_unbindExchange_bind_ok Exchange_bindExchange_delete_okExchange_deleteExchange_declare_okExchange_declareChannel_close_ok Channel_closeChannel_flow_ok Channel_flowChannel_open_ok Channel_openConnection_unblockedConnection_blockedConnection_close_okConnection_closeConnection_open_okConnection_openConnection_tune_okConnection_tuneConnection_secure_okConnection_secureConnection_start_okConnection_startContentHeaderProperties CHConfirmCHTxCHBasicCHQueue CHExchange CHChannel CHConnectiongetContentHeaderPropertiesputContentHeaderProperties getClassIDOfputBits'getBitsgetBits' putPropBits' getPropBits getPropBits'condGetcondPut FramePayloadHeartbeatPayloadContentBodyPayloadContentHeaderPayloadFrame hasContent peekFrameSize frameType getPayload putPayloadChannelAllocatornewChannelAllocatorallocateChannel freeChannel findUnsetBit findFreeIndexversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName readAssemblycollectContentconnectionReceiverkillConnectionchannelReceiver writeFrames writeAssemblyrequestcausechanExceptionHandlersconfirmListenersreturnListeners consumers chanClosed chanActive nackedSetackedSetunconfirmedSetnextPublishSeqNumlastConsumerTagoutstandingResponsesinQueue channelID connectionconnServerProperties connLastSentconnLastReceivedconnBlockedHandlersconnClosedHandlers connWriteLockconnClosedLock connClosedconnMaxFrameSize connChannelsconnChanAllocator connHandleAssembly ContentMethod SimpleMethoddeliveryModeToIntintToDeliveryModewatchHeartbeatsupdateLastSentupdateLastReceived readFrameconnectionGetExact writeFrameunwrapChanThreadKilledExceptionmsgFromContentHeaderProperties closeChannel'writeAssembly'throwMostRelevantAMQPExceptionwaitForAllConfirmsFalseTrue GHC.Conc.SyncforkIO