W:F      ! "#$%&'()*+,- ./0123456 7 8 9 : ; <=>?@ABCDE SafeMFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ANone Rectangle+Create rectangle form an array of 4 numbersNoneDecrypt input streamQEncryption handler may specify different encryption keys for strings and streams !Decrypt object with the decryptor The default user password Standard decryptor. RC4BCD EF document trailerencryption dictionaryFuser password (32 bytes exactly, see 7.6.3.3 Encryption Key Algorithm)GHI   BCD EF GHINone $Interface to the underlying PDF filefind object by it's referencedecoded stream content Note: the J' returned is valid only until the next , or any other operation, that requares seekCurrent decryptor@Get random access input stream for direct access to the PDF fileGet all stream filters Recursively load indirect object    NoneFont dictionaryInformation dictionaryPdf document page-Page tree node, contains pages or other nodes Page treeDocument catalog! PDF documentIt is a trailer under the hood !" !"!"  !"NoneC #Convenient type alias$!Basic implementation of pdf monad%xPerform action without adding objects to cache. Note: the existent cache is not flushed, and is used within the action&Remove all objects from cache'Execute PDF action with K(Execute PDF action with L)Get PDF document*%Whether the PDF document it encrypted+*Set the password to be user for decryption(Returns False when the password is wrong,-Decrypt PDF object using user password is set#$MNOPQRSTUVWXYZ[\]^%&'(_)*+,` #$%&'()*+,#$'()&%*+ ,#$MNOPQRSTUVWXYZ[\]^%&'(_)*+,` None-Document title----None. Font subtypes4Get font subtype5Load font info for the font ./012345abcd ./012345 ./012345./012345abcd None68Check that the dictionary has the specified "Type" filed7'Get dictionary type, name at key "Type"67676767 None8Get the document catalog9Document encryption dictionary:'Infornation dictionary for the document89:!89:!89:89: None;Get root node of page tree;;;;None<9Total number of child leaf nodes, including deep children=Parent page node>Referencies to all kids? Load page tree node by reference@Find page by it's numberNote: it is not efficient for PDF files with a lot of pages, because it performs traversal through the page tree each time. Use <, > and ? for efficient traversal.<=>?@ <=>?@ <=>?@<=>?@NoneAPage's parent nodeB,List of references to page's content streamsCMedia box, inheritableDFont dictionaries for the pageEExtract text from the pagecIt tries to add spaces between chars if they don't present as actual characters in content stream.e9Convert glyphs to text, trying to add spaces and newlinesIt takes list of spans. Each span is a list of glyphs that are outputed in one shot. So we don't need to add space inside span, only between them.ABCfDEeABCDEABCDEABCfDEeNoneghijklmnop"qrstuvwxyz{|}~      !"#$%&'()*+,-. !#$%&'()*+,-./01234589:;<=>?@ABCDE/ !"#$%&&''(())*+,--../012345678 9:;<=>?@A B C D E F GHIJKLMNOPQRSTRUVWXYRZ[RZ\R]^R_`R_aRSbRScRSdRUeRfgRfhRijRklRkmRknRkoWpqWprRfsRStRSuRSvRSwRSxRiyRizRi{Ri|RS}RS~RkRkWpRRiRiRSRSRfWpRRiRRiRRSRRWWWWWWRiWWRRSWWRRWWWRSRSRRSRSRRRRR]R]R]R]R]R]R]R]R]R]R]R]RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR  Ri Ri Ri RiRiRiRiRiRiRiRiRiRiRiRiRiRiRiRiRkRkRk Rk!Rk"Rk#R$%R&R'R(R)R*R+R,R-RZ.RZ/RZ0RZ1RZ2RZ3RZ4RZ5RZ6RZ7RZ8RZ9RZ:RZ;RZ<RZ=RZ>RZ?RZ@RZARZBRZCRZDRZERZFRZGRZHRIJR_KR_LRfMRfNRfORfPRfQRSRRSSRSTRSURSVRSWRSXRSYRSZRS[RS\RS]RS^RS_Wp`WpaWpbWpcWpdWpeWpfWpgWphWpijklmnopqrsrtRuv0wwxyz{|}~RRRRIRIRIRIRIRIRI      !""#$$%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%678797:7;7;7<7<7=7=7>7>7?7?7@7@7A7A7B7C7D7E7F7G7H7I7J7KLMLNLOLPLQLLRLSLTUpdfto_2FOVQ5o55P4KWxmPXmRzpIPdf.Toolbox.Document.PdfPdf.Toolbox.Document.TypesPdf.Toolbox.Document.EncryptionPdf.Toolbox.Document.MonadPdf.Toolbox.Document.FontDict#Pdf.Toolbox.Document.Internal.TypesPdf.Toolbox.Document.PagePdf.Toolbox.Document.PageNodePdf.Toolbox.Document.CatalogPdf.Toolbox.Document.DocumentPdf.Toolbox.Document.Info"Pdf.Toolbox.Document.Internal.UtilPreludePdf.Toolbox.Documenttrans_3eG64VdP2vzGjP6wJiCp5XControl.Monad.IO.ClassliftIOpdfto_FAxEOi3m1wV37M9XEBD28qPdf.Toolbox.Core.Stream knownFiltersMonadIO RectanglerectangleFromArray DecryptorDecryptorScope DecryptString DecryptStream decryptObjectdefaultUserPasswordmkStandardDecryptorMonadPdf lookupObject streamContent getDecryptorgetRISgetStreamFiltersderefFontDictInfoPagePageNodePageTree PageTreeNode PageTreeLeafCatalogDocumentPdfPdf'withoutObjectCacheflushObjectCacherunPdfrunPdfWithHandledocument isEncryptedsetUserPassworddecrypt infoTitle FontSubtype FontType0 FontType1 FontMMType1 FontType3 FontTrueTypefontDictSubtypefontDictLoadInfo ensureTypedictionaryTypedocumentCatalogdocumentEncryption documentInfocatalogPageNode pageNodeNKidspageNodeParent pageNodeKids loadPageNodepageNodePageByNumpageParentNode pageContents pageMediaBox pageFontDictspageExtractTextbaseGHC.Base++GHC.Errerrorghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint Data.Tuplefstsnd otherwisemap$ undefinedGHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negatefail>>=>>fmapreturn fromIntegral realToFrac toInteger toRational<*>pureBoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShow Applicative Data.FoldableFoldableData.Traversable Traversable GHC.TypesBoolCharDoubleFloatInt integer-gmpGHC.Integer.TypeIntegerOrderingRationalIOWord Data.EitherEitherStringFalseTrueLeftRightLTEQGT<**> Text.ReadreadMaybeNothingsequencemapM sequenceAtraversereadIOreadLn appendFile writeFilereadFileinteract getContentsgetLinegetCharputStrLnputStrputCharGHC.IO.ExceptionioErrorGHC.IOFilePath userErrorIOErrorreadsnotElemallanyorand concatMapconcat sequence_mapM_productsumminimummaximumelemlengthnullfoldl1foldr1foldlfoldrfoldMapeither Data.OldListunwordswordsunlineslineslex readParenreadList readsPrecatanhacoshasinhtanhcoshsinhatanacosasintancossinlogBase**sqrtlogexppiatan2isIEEEisNegativeZeroisDenormalized isInfiniteisNaN scaleFloat significandexponent encodeFloat decodeFloat floatRange floatDigits floatRadixText.ParserCombinators.ReadPReadSlcmgcd^^^oddevendivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionmaxBoundminBoundfromEnumtoEnumpredsucc Data.Functor<$> showParen showStringshowCharshowsShowSshowListshow showsPrecunzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl1scanlinitlasttailhead Data.Maybemaybeuncurrycurrysubtractsignumabs*+asTypeOfuntil$!flip.constid=<<JustmconcatmappendmemptyMonoid<$/=compare<=&&||not<>maxmin AlgorithmV2AESV2 decryptStr decryptDictmkKey verifyKey mkDecryptorPdf.Toolbox.Core.IO.RISISRISGHC.IO.Handle.TypesHandlePdfStatestRIS stFilters stLastXRefstAddToObjectCache stObjectCachestXRefStreamCache stDecryptorreadObjectForEntry getXRefStreamlookupEntryReclookupXRefEntrytakeStreamContent getLastXRef getFromCacheaddObjectToCacherunPdf'$fMonadPdfPdf'loadFontInfoCompositeloadFontInfoSimpleloadEncodingDifferencesloadUnicodeCMap glyphsToTextmediaBoxpartitionEithersrightsleftsmapMaybe catMaybes listToMaybe maybeToList fromMaybe isNothingisJustControl.Monad.Trans.ExceptExceptT runExceptT mapExceptT withExceptTthrowEcatchEControl.Monad.Trans.MaybeMaybeT runMaybeT mapMaybeT liftCallCC liftCatch liftListenliftPasssafe_BXSoeRP9IFG6t9s3abNgViSafetailMaytailDeftailSafeinitMayinitDefinitSafeheadMaylastMayheadDeflastDef minimumMay maximumMay minimumDef maximumDef foldr1May foldl1May' foldr1Def foldl1Def' fromJustDefatMayatDefreadMayreadDef lookupJustDef findJustDeferror_BbQDeZg9K7NILeiAZIGZNrControl.Error.SaferightZjustZassertZreadZatZfoldl1Z'foldl1Zfoldr1ZmaximumZminimumZlastZheadZinitZtailZtryRighttryJust tryAsserttryReadtryAt tryFoldl1' tryFoldl1 tryFoldr1 tryMaximum tryMinimumtryLasttryHeadtryInittryTailjustErr assertErrreadErratErr foldl1Err' foldl1Err foldr1Err maximumErr minimumErrlastErrheadErrinitErrtailErrrightMay assertMayControl.Error.ScriptscriptIO runScriptScriptControl.Error.UtilsyncIOtryIOerrLnerrfmapRTisRightTisLeftTfmapRisRightisLeft isNothingTisJustTnothingjustmaybeTbool failWithMfailWith?:!??? hoistMaybenoteTnotehushThush hoistEither bimapExceptTexceptTrunAllEAllErunAnyEAnyE Data.EitherRflipETfmapLThandleEsucceedT flipEitherfmapL handleEither catchEither throwEithersucceed runEitherREitherR runExceptRTExceptRTPdf.Toolbox.Core.Object.Util mapObjecttoStreamtoArraytoReftoStrtoDicttoName toBooleantoNumber realValueintValuesetValueForKeydeleteValueForKey lookupDict' lookupDict fromObject FromObjectPdf.Toolbox.Core.Object.TypesNumRealNumIntNumberBooleanNameDictArrayStrStreamRefONullORefOStreamOStrOArrayODictONameOBooleanONumberObjectPdf.Toolbox.Core.ErrortryPdfIOannotatingError annotateErrorUnexpectedErrorAnnotatedError ParseErrorPdfErrorPdfE