i_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm n o p q r s t u v w x y z { | } ~    EWe have to do this wackiness because ~ is less than the empty string :Convert a string to a debian version number. May throw an D exception if the string is unparsable -- but I am not sure if that > can currently happen. Are there any invalid version strings? - Perhaps ones with underscore, or something? ASplit a DebianVersion into its three components: epoch, version, @ revision. It is not safe to use the parsed version number for @ this because you will lose information, such as leading zeros.     *Either (ExactPath) (Distribution, [Section]) <quoteWords - similar to words, but with special handling of  double-quotes and brackets.  The handling double quotes and [] is supposed to match:  apt-0.6.44.2/apt-pkg/contrib/strutl.cc:ParseQuoteWord() !The behaviour can be defined as: ABreak the string into space seperated words ignoring spaces that  appear between "" or []). Strip trailing and leading white space > around words. Strip out double quotes, but leave the square  brackets intact. (parseSourceLine -- parses a source line L the argument must be a non-empty, valid source line with comments stripped  see:  >Return the list of files that apt-get update would write into  /var/lib/apt/5lists when it processed the given list of DebSource. F FIXME: remove the root argument from this and just return the names. The mighty consperse function     . parse a debian relation (i.e. the value of a : Depends field). Return a parsec error or a value of type  !  !"#;Check if a version number satisfies a version requirement. FIXME:A This instance is currently incomplete and only handles the case + where two version requirements are equal.  !"#"! # !"# $% !"#$%" !#$%$% !"#$" !#$ !"#$" !#$&''G creates a map from a package name to all the versions of that package , NOTE: Provides are not included in the map 9 NOTE: the sort order is random -- this is perhaps a bug  see also: ( ((5 finds packages that Provide other packages and adds A them to the PackageNameMap. They will be adde to the end of the " list, so that real packages have 'higher priority' than virtual  packages. 6 NOTE: Does not check for duplication or multiple use )) **> returns all the packages that satisfy the specified relation  TODO: Add architecture check &'()*&'()*&'()*+,, filepath is a simple wrapper function  that parses filepath using pControl --  sourceName handle -  sourceName" is only used for error reporting .. fieldName paragraph looks up a 2 in a 4.  N.B.$ trailing and leading whitespace is not stripped. /?Strip the trailing and leading space and tab characters from a  string. Folded whitespace is not unfolded. This should probably - be moved to someplace more general purpose. 0@NOTE: we do not strip the leading or trailing whitespace in the  name or value 123456789:;<=>?6Move selected fields to the beginning of a paragraph. +,-./0123456789:;<=>?56734021+,-./89:;<=>?+,-./,-./021123445676789:;<=>?!@AB, applied to a predicate p and a ByteString xs, 0 returns the longest prefix (possibly empty) of xs of elements that  satisfy p. N takeWhile2 :: (Word8 -> Maybe Word8 -> Bool) -> B.ByteString -> B.ByteString 3 takeWhile2 f ps = BB.unsafeTake (findIndex2OrEnd (w1 w2 -> not (f w1 w2)) ps) ps  {- INLINE takeWhile2 -} findIndexOrEnd4 is a variant of findIndex, that returns the length < of the string if no element is found, rather than Nothing. +,-./0123456789:;<=>?@AB56734021BA@+,-./89:;<=>?@AB*CDEFGHIJKLMNOPQR!TODO addProvides -- see DQL.Exec STUVWXYJAS: deal with Provides0 (can a package provide more than one package?) Z[\]^_`abcde/earliestInconsistency does what it sounds like  the ' reverse as'3 is because the vars are order high to low, but we C want to find the lowest numbered (aka, earliest) inconsistency ?? fghijbj - backjumping labeler =If the node already has a conflict set, then leave it alone. BOtherwise, the conflictset for the node is the combination of the &conflict sets of its direct children. kl*CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl*MPONLQEFGHIJKRSTUVWXYZ[\]^_`abcdeDfgChijkl*CDEFGHIJKFGHIJKLMPONNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopqmnopqopqmnmnnopq rstuvDA parser for debian control file. This parser handles control files D that end without a newline as well as ones that have several blank D lines at the end. It is very liberal and does not attempt validate E the fields in any way. All trailing, leading, and folded whitespace ' is preserved in the field values. See /. AWe are liberal in that we allow *any* field to have folded white A space, even though the specific restricts that to a few fields. We go with the assumption that ' blank lines' mean lines that < consist of entirely of zero or more whitespace characters. %This may have bad performance issues +,-./0123456789:;<=>?rstuv56734021tsur+,-./v89:;<=>?rstuv+,-./0123456789:;<=>?rstuv56734021tsur+,-./v89:;<=>? wx/A package with a name and list of dependencies yz{|}~#FIXME: we do not deal with Provides/virtual packages yet Architecture ? TODO: Add architecture check wxyz{|}~xyz{|}~wwxyz{|}~yz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQDFHRSTTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz { | } ~   F H D    ; <         debian-1.2.1Linspire.Debian.Version.CommonLinspire.Debian.SourcesListLinspire.Debian.Relation.CommonLinspire.Debian.Relation.StringLinspire.Debian.PackageLinspire.Debian.Control.Common"Linspire.Debian.Control.ByteStringLinspire.Debian.Dependencies#Linspire.Debian.Control.PrettyPrintLinspire.Debian.Control.String!Linspire.Debian.PackageDeprecated Linspire.Debian.Version.InternalLinspire.Debian.Version.String"Linspire.Debian.Version.ByteStringLinspire.Debian.Version#Linspire.Debian.Relation.ByteStringLinspire.Debian.RelationLinspire.Debian.Control DebianVersionParseDebianVersionparseDebianVersionparseDVevrepochversionrevisionbuildDebianVersion DebSource SourceTypeDebSrcDeb quoteWordsparseSourceLineparseSourcesList archFiles VersionReqSGRGREEEQLTESLTArchitectureReq ArchExceptArchOnlyParseRelationsparseRelationsRelationRel OrRelation AndRelation RelationsPkgNamecheckVersionReq RelParser pRelationsPackageNameMappackageNameMap addProvides findProvideslookupPackageByRelControlFunctionsparseControlFromFileparseControlFromHandlelookupPstripWSField'CommentField Paragraph' ParagraphControl'Control unControl mergeControls fieldValue removeField prependFields appendFields renameField modifyField raiseFieldsLabeler ConflictSetCSPpnm relations depFunction conflictspackageVersionStateStatusComplete MissingDep Remainingcomplete controlCSPtestCSPdepF sidPackagestestpackageVersionParagraphconflict conflict'mkTreelabelinitTreemapTreefoldTree zipTreesWithpruneleavesinhTree distrTree mkSearchTreeearliestInconsistency isConflict solutionssearchbtbjunionCScombineToTexttotext ppControl ppParagraphppField ControlParserpControl ProvidesMapPackagepNamepVersionpDepends pPreDepends pConflicts pReplaces pProvidesparagraphToPackagesmakeVirtualPackagescontrolToPackageNameMappackagesToPackageNameMap tryParseRelFound SimulatedunFoundNumeric NonNumericordercompareNonNumericcompareMaybeNonNumeric parseEpochparseNonNumeric parseNumeric sourceType sourceUri sourceDist stripLine sourceLines archFiles' conspersewordsBy$fOrdVersionReq pOrRelation whiteChar pRelation pMaybeVerReqpVerReq pMaybeArch pArchExcept pArchOnlyParserunParserResultEmptyFailOkpKeypValuepFieldpComment pParagraphbreak2baseGHC.List takeWhilespan2findIndex2OrEndm2rr2m<|>satisfypCharpEOF pTakeWhile2 pTakeWhilepManynotEmptypMany1 pSkipManyparsefcharfwsfcharpBlanks$fShowControl'