ƺ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred4Integer encoding. The first argument is N of prefix. encode 5 10[10] encode 5 1337 [31,154,10] encode 8 42[42]4Integer decoding. The first argument is N of prefix.decode 5 10 $ BS.empty10decode 5 31 $ BS.pack [154,10]1337decode 8 42 $ BS.empty426parseInteger 7 127 $ BS.pack [210,211,212,87,88,89,90](183839313,"XYZ") Safe-InferredNone&let bs = BS.pack [0x12,0x34,0xf3,0xab]unpack4bits bs[1,2,3,4,15,3,10,11]unpack4bits $ BS.tail bs[3,4,15,3,10,11] Safe-Inferred Bit stream.Data type for Bit.OneZeroFrom  of length 8 to .fromBits [T,F,T,F,T,F,T,F]170fromBits [F,T,F,T,F,T,F,T]85 Safe-Inferred  Safe-InferredType for Huffman decoding. Creating .Marking the EOS path   NoneHuffman encoding.toShifted [T,T,T,T] 0Shifted 1 4 "\240"toShifted [T,T,T,T] 4Shifted 1 0 "\SI"toShifted [T,T,T,T] 5Shifted 2 1 "\a\128"Huffman encoding.  None  Safe-Inferred  Safe-Inferred+((The data type for HTTP/2 frame payloads. 'The data type for HTTP/2 frame headers. The data type for HTTP/2 frames.-NCooked version of settings. This is suitable to be stored in a HTTP/2 context.5Settings containing raw values.>)The connection error or the stream error.R"The length of HTTP/2 frame header.frameHeaderLength9SfromErrorCodeId NoError0"fromErrorCodeId InadequateSecurity12TtoErrorCodeId 0NoErrortoErrorCodeId 0xcInadequateSecuritytoErrorCodeId 0xeUnknownErrorCode 14U Obtaining A from >.V)fromSettingsKeyId SettingsHeaderTableSize1,fromSettingsKeyId SettingsMaxHeaderBlockSize6WtoSettingsKeyId 0NothingtoSettingsKeyId 1Just SettingsHeaderTableSizetoSettingsKeyId 6Just SettingsMaxHeaderBlockSizetoSettingsKeyId 7NothingX Checking 5 and reporting an error if any.*checkSettingsList [(SettingsEnablePush,2)]AJust (ConnectionError ProtocolError "enable push must be 0 or 1")YThe default settings.defaultSettingsSettings {headerTableSize = 4096, enablePush = True, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Nothing}ZUpdating settings.XupdateSettings defaultSettings [(SettingsEnablePush,0),(SettingsMaxHeaderBlockSize,200)]Settings {headerTableSize = 4096, enablePush = False, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Just 200}[ The default initial window size.defaultInitialWindowSize65535\The maximum window size. maxWindowSize 2147483647]:Checking if a window size exceeds the maximum window size.isWindowOverflow 10FalseisWindowOverflow maxWindowSizeFalse$isWindowOverflow (maxWindowSize + 1)True^Default concurrency.recommendedConcurrency100_+Default priority which depends on stream 0.defaultPriority?Priority {exclusive = False, streamDependency = 0, weight = 16}`+Highest priority which depends on stream 0.highestPriority@Priority {exclusive = False, streamDependency = 0, weight = 256}afromFrameTypeId FrameData0!fromFrameTypeId FrameContinuation9!fromFrameTypeId (FrameUnknown 10)10btoFrameTypeId 0 FrameDatatoFrameTypeId 9FrameContinuationtoFrameTypeId 10FrameUnknown 10c%The maximum length of HTTP/2 payload.maxPayloadLength16384d defaultFlags0etestEndStream 0x1Truef testAck 0x1TruegtestEndHeader 0x4TruehtestPadded 0x8TrueitestPriority 0x20TruejsetEndStream 01ksetAck 01lsetEndHeader 04m setPadded 08n setPriority 032o isControl 0True isControl 1Falsep isRequest 0False isRequest 1Trueq isResponse 0False isResponse 2TrueuGetting % from .,framePayloadToFrameTypeId (DataFrame "body") FrameDatav2Checking if padding is defined in this frame type.}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvy  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv>    $#"! %&'()*+,-./01234567=<;:98>@?APONMLKJIHGFEDCBQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvNone Nonew&Abstract data type for priority trees.xCreating a new priority tree.yXBringing up the structure of the priority tree. This must be used for Priority frame.zQEnqueuing an element to the priority tree. This must be used for Header frame.{,Dequeuing an element from the priority tree.wxyz{ wxyz{wxyz{wxyz{ None |)Auxiliary information for frame encoding.~!Flags to be set in a frame header%Stream id to be set in a frame headerPadding if any. In the case where this value is set but the priority flag is not set, this value gets preference over the priority flag. So, if this value is set, the priority flag is also set.A smart builder of |.encodeInfo setAck 0IEncodeInfo {encodeFlags = 1, encodeStreamId = 0, encodePadding = Nothing}Encoding an HTTP/2 frame to  f. This function is not efficient enough for high performace program because of the concatenation of  .0encodeFrame (encodeInfo id 1) (DataFrame "body")*"\NUL\NUL\EOT\NUL\NUL\NUL\NUL\NUL\SOHbody"Encoding an HTTP/2 frame to [ $]. This is suitable for sendMany.GEncoding an HTTP/2 frame header. The frame header must be completed.zWriting an encoded HTTP/2 frame header to the buffer. The length of the buffer must be larger than or equal to 9 bytes.`Encoding an HTTP/2 frame payload. This returns a complete frame header and chunks of payload.|}~ stream identifier  Payload length. |}~|}~   NoneEDecoding an HTTP/2 frame to  . The second argument must be include the entire of frame. So, this function is not useful for real applications but useful for testing.8Decoding an HTTP/2 frame header. Must supply 9 bytes.6Checking a frame header and reporting an error if any.BcheckFrameHeader defaultSettings (FrameData,(FrameHeader 100 0 0))DLeft (ConnectionError ProtocolError "cannot used in control stream")!Decoding an HTTP/2 frame payload.Helper function to pull off the padding if its there, and will eat up the trailing padding automatically. Calls the decoder func passed in with the length of the unpadded portion between the padding octet and the actual paddingHTTP/2 settingsInput byte-stream Decoded frame !"#$%&'()*+ !"#$%&'()*+NoneThe preface of HTTP/2.connectionPreface""PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"Length of the preface.connectionPrefaceLength24  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv|}~  v|}~$#"! u%ab+&'()*_`opqrstdefghijklmn567=<;:98VWX-./01234YZ,[\]^QAPONMLKJIHGFEDCBST>@?URc Safe-Inferred+Errors for decoder.<A peer tried to change the dynamic table size over the limitHeader block is emptyEncoded string has no length)Eos of huffman string is more than 7 bits,Non-eos appears in the end of huffman string+Eos appears in the middle of huffman stringIndex is out of rangeStrategy for HPACK encoding.$Which compression algorithm is used.3Whether or not to use Huffman encoding for strings.*Compression algorithms for HPACK encoding.Using indices onlyUsing the static table onlyNo compressionIndex for table.,To be a  or . Header list.Header. Header value. Header name.Default .defaultEncodeStrategy<EncodeStrategy {compressionAlgo = Linear, useHuffman = True},-, ,-None.Huffman decoding./Huffman decoding.0123456.7/89:;<./ 0123654.7/89:;<None./ Safe-Inferred=Index or literal.>!Whether or not adding to a table.?Type for representation.@Type for header block.AEmpty header block. =BC>DEF?GHI@A=BC>DEF?GHI@A=CB>FED?IHG@ANoneJ Encoding , to   according to HuffmanEncoding.KParsing , from  . The second L: is whether or not huffman encoding is used. The third M% is the length of the encoded string.JKJKJKNoneN#Converting the low level format to @.O#Converting the low level format to @. @! forms a pair with corresponding  .NOPQRSTUVWXYZ[\]^_NONOPQRSTUVWXYZ[\]^_None` Converting @ to the low level format.a`bcdefghijklmn`ba`bcdefghijklmn Safe-Inferred o>Type for table entry. Size includes the 32 bytes magic number.Size in bytes.pFrom  to o.qFrom o to .rGetting the size of o.sGetting .tGetting .uGetting .vDummy o to initialize a dynamic table.w2How many entries can be stored in a dynamic table? oxypqrstuvwopqrstuvw oxypqrstuvw Safe-Inferredz8Take an arbitrary entry. O(1) thanks to lazy evaluation. {|}~z {|}~ {~}|z Safe-InferredThe size of static table.Get o from the static table.toStaticEntry (SIndex 1)(42,(":authority",""))toStaticEntry (SIndex 8)(42,(":status","200"))toStaticEntry (SIndex 50)(37,("range",""))Pre-defined static table.  None3EType for dynamic table.An array Start pointThe current number of entriesThe size of the array1The current dynamic table size (defined in HPACK)-The max dynamic table size (defined in HPACK)8The value informed by SETTINGS_HEADER_TABLE_SIZE. If , dynamic table size update is not necessary. Otherwise, dynamic table size update is sent and this value should be set to ..The limit size of a dynamic table for decodingjHeader to the index in Dynamic Table for encoder. Static Table is not included. Nothing for decoder. Printing .eWhen SETTINGS_HEADER_TABLE_SIZE is received from a peer, its value should be set by this function. Creating . Creating . Renewing  with necessary entries copied.Is the size of  really changed? Inserting o to  . New , the largest new  and a set of dropped OLD  are returned..  NoneE)Is header key-value stored in the tables?Which table does  refer to?MResolving an index from a header. Static table is prefer to dynamic table.Which table does  belong to? &opqrstuvwNone Decoding @ to .Decoding step for one ?$. Exporting for the test purpose.None Encoding  to @.  None=BC>DEF?GHI@ANO`bNoneHPACK decoding from   to .HPACK encoding from  to .HPACK encoding from  to  .RDefault dynamic table size. The value is 4,096 bytes: an array has 128 entries.defaultDynamicTableSize4096 Converting ) for HTTP header to the low level format. Converting ' for HTTP header to bytestring builder.3Converting the low level format for HTTP header to .  would be thrown.""  ! " # $ % & ' ( ) * + , , - . / 0 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D D E F G H I J J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                              !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFGHIJKLMNOPQRSTUVWXYZ[\]^_`^_abcdefghijklmnopqrstuvwxyjkz{|}~K http2-1.1.0 Network.HTTP2Network.HTTP2.Priority Network.HPACK!Network.HPACK.HeaderBlock.IntegerNetwork.HPACK.Huffman.Params Network.HPACK.Huffman.ByteStringNetwork.HPACK.Huffman.BitNetwork.HPACK.Huffman.TableNetwork.HPACK.Huffman.TreeNetwork.HPACK.Huffman.EncodeNetwork.HPACK.Builder.Word8Network.HPACK.BuilderNetwork.HTTP2.TypesNetwork.HTTP2.RandomSkewHeapNetwork.HTTP2.EncodeNetwork.HTTP2.DecodeNetwork.HPACK.TypesNetwork.HPACK.Huffman.DecodeNetwork.HPACK.Huffman%Network.HPACK.HeaderBlock.HeaderField Network.HPACK.HeaderBlock.String Network.HPACK.HeaderBlock.Decode Network.HPACK.HeaderBlock.EncodeNetwork.HPACK.Table.Entry!Network.HPACK.Table.DoubleHashMapNetwork.HPACK.Table.StaticNetwork.HPACK.Table.DynamicNetwork.HPACK.TableNetwork.HPACK.HeaderBlock.FromNetwork.HPACK.HeaderBlock.ToNetwork.HPACK.HeaderBlock FramePayload UnknownFrameContinuationFrameWindowUpdateFrame GoAwayFrame PingFramePushPromiseFrame SettingsFrameRSTStreamFrame PriorityFrame HeadersFrame DataFrame FrameHeader payloadLengthflagsstreamIdFrame frameHeader framePayloadPaddingHeaderBlockFragmentStreamId FrameFlags FrameTypeId FrameUnknownFrameContinuationFrameWindowUpdate FrameGoAway FramePingFramePushPromise FrameSettingsFrameRSTStream FramePriority FrameHeaders FrameData FrameTypePriority exclusivestreamDependencyweightWeight WindowSizeSettingsheaderTableSize enablePushmaxConcurrentStreamsinitialWindowSize maxFrameSizemaxHeaderBlockSize SettingsList SettingsValue SettingsKeyIdSettingsMaxHeaderBlockSizeSettingsMaxFrameSizeSettingsInitialWindowSizeSettingsMaxConcurrentStreamsSettingsEnablePushSettingsHeaderTableSize HTTP2Error StreamErrorConnectionError ErrorCodeIdUnknownErrorCodeHTTP11RequiredInadequateSecurityEnhanceYourCalm ConnectErrorCompressionErrorCancel RefusedStreamFrameSizeError StreamClosedSettingsTimeoutFlowControlError InternalError ProtocolErrorNoError ErrorCodeframeHeaderLengthfromErrorCodeId toErrorCodeId errorCodeIdfromSettingsKeyIdtoSettingsKeyIdcheckSettingsListdefaultSettingsupdateSettingsdefaultInitialWindowSize maxWindowSizeisWindowOverflowrecommendedConcurrencydefaultPriorityhighestPriorityfromFrameTypeId toFrameTypeIdmaxPayloadLength defaultFlags testEndStreamtestAck testEndHeader testPadded testPriority setEndStreamsetAck setEndHeader setPadded setPriority isControl isRequest isResponse testExclusive setExclusiveclearExclusiveframePayloadToFrameTypeIdisPaddingDefined PriorityTreenewPriorityTreeprepareenqueuedequeue EncodeInfo encodeFlagsencodeStreamId encodePadding encodeInfo encodeFrameencodeFrameChunksencodeFrameHeaderencodeFrameHeaderBufencodeFramePayloadFramePayloadDecoder decodeFramedecodeFrameHeadercheckFrameHeaderdecodeFramePayloaddecodeDataFramedecodeHeadersFramedecodePriorityFramedecoderstStreamFramedecodeSettingsFramedecodePushPromiseFramedecodePingFramedecodeGoAwayFramedecodeWindowUpdateFramedecodeContinuationFrameconnectionPrefaceconnectionPrefaceLength DecodeErrorTooLargeTableSize EmptyBlockEmptyEncodedString TooLongEos IllegalEosEosInTheMiddle IndexOverrunEncodeStrategycompressionAlgo useHuffmanCompressionAlgoLinearStaticNaiveIndex HeaderListHeader HeaderValue HeaderNamedefaultEncodeStrategySize DynamicTablesetLimitForEncodingnewDynamicTableForEncodingnewDynamicTableForDecoding HPACKDecodingHPACKEncodingBuilder HPACKEncodingdefaultDynamicTableSize encodeHeaderencodeHeaderBuilder decodeHeaderencodedecode parseInteger powerArrayencode'decode'idxEos unpack4bitsc_memcpycopymemcpyBitsBTFfromBitsbaseGHC.WordWord8fromBit huffmanTableHTreetoHTreemarkBinTipEOSInfoeosInfoshowTree showTree' printTreebuildflattenHuffmanEncoding toShiftedShifted ShiftedArrayAOSAaosatoShiftedArray Word8Builder<|w8empty toByteStringBuilder<<empty singletonrunminSettingsKeyIdmaxSettingsKeyIdcheckSettingsValue minFrameType maxFrameType$fExceptionHTTP2ErrorHeapNodeLeafisEmptyinsertmergeunconsgenTPQueueElementParentChild PriorityQueueStructnewPriorityQueue newTPQueue readTPQueue writeTPQueueisTPQueueEmptybytestring-0.10.4.0Data.ByteString.Internal ByteStringbuildFramePayload buildPadding buildPrioritybuildFramePayloadDatabuildFramePayloadHeadersbuildFramePayloadPrioritybuildFramePayloadRSTStreambuildFramePayloadSettingsbuildFramePayloadPushPromisebuildFramePayloadPingbuildFramePayloadGoAwaybuildFramePayloadWindowUpdatebuildFramePayloadContinuationbuildFramePayloadUnknownpoke8poke16poke24poke32 bytestring4decodeWithPadding+.zeroFrameTypesnonZeroFrameTypespayloadDecodersdecodeUnknownFramecheckFrameSizestreamIdentifierpriority intFromWord8word32word32'word16' HeaderStuff$fExceptionDecodeErrorHuffmanDecodingWay256Way16PinGoBackForward EndOfStringnextdecway256 constructstepbits4sNamingIndexing HeaderField HeaderBlockemptyHeaderBlockLitIdxNeverNotAddAddLiteralIndexedChangeTableSize parseStringghc-prim GHC.TypesBoolIntfromByteStringfromByteStringDebug toHeaderFieldindexedincrementalIndexingmaxSizewithoutIndexing neverIndexing indexedNamenewName headerStuffmask6mask5mask4isIndexedName1isIndexedName2 isHuffman dropHuffmanSetter toBuilderfromHeaderFieldword8schangeindexset1set01set001set0001set0000setHEntrytoEntry fromEntry entrySize entryHeaderentryHeaderNameentryHeaderValue dummyEntry maxNumbersheaderSizeMagicNumber headerSizetopResKVKN DoubleHashMapdeletefromList deleteListsearchstaticTableSize toStaticEntry staticTableSIndexfromStaticIndex toStaticIndex isSIndexValid staticHashPSQstaticTableList circularTableoffset numOfEntriesmaxNumOfEntriesmaxDynamicTableSizelimitForEncoding Data.MaybeNothinglimitForDecoding reverseIndexprintDynamicTablerenewDynamicTable shouldRenew insertEntryHIndexTableSizeActionIgnoreChangeKeepTableadj printEntryisDynamicTableEmptyisSuitableSizeneedChangeTableSizegetLimitForEncodingresetLimitForEncodingfromHIndexToIndexfromIndexToHIndexfromSIndexToIndexfromIndexToSIndexnewDynamicTable copyTable getEntries copyEntries insertFrontadjustTableSizeadjust insertEnd removeEnd toHeaderEntry HeaderCache WhichTable lookupTablewhichKeyValueKeyOnlyNone InStaticTableInDynamicTableisInfromHeaderBlock decodeStepStepCtx decodeLoop decodeFinal fromNaming toHeaderBlocktoHeaderBlock' encodeFinal encodeLoop naiveStep staticStep linearStep smartStepcheckheadersNotToIndex Data.ByteString.Builder.Internal