From 7e1b75c2e167c75ebc3a05f881ad7fb07c29af55 Mon Sep 17 00:00:00 2001 From: Wolfgang Witt Date: Wed, 24 Feb 2021 12:57:37 +0100 Subject: [PATCH] fix: shown ranges "include" special mappings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit previously, they stopped just before leading to clashes with the next range e.g. Äm would cause Am as mapping end with the next starting at An Now, the mapping end is AZ with the next starting at BA --- src/Handler/Utils/Exam.hs | 44 +++++++++++++++------------------- test/Handler/Utils/ExamSpec.hs | 36 ++++++++++------------------ 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/src/Handler/Utils/Exam.hs b/src/Handler/Utils/Exam.hs index a676f61ae..874b8144b 100644 --- a/src/Handler/Utils/Exam.hs +++ b/src/Handler/Utils/Exam.hs @@ -597,7 +597,7 @@ examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences go start borderLength acc ((_occurrenceId, []):t) = go start borderLength acc t go start borderLength acc ((occurrenceId, userTags):t) | matchMappingDescription mappingDescription userTags - && (null t || Just (toNullable nextStart) > maybeEnd) + && (null t || toNullable nextStart > end) = go nextStart borderLength ((occurrenceId, mappingDescription) : acc) t | borderLength < maxTagLength = go restartStart restartBorderLength [] result @@ -613,37 +613,33 @@ examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences _rule -> singleton $ head alphabet mappingDescription :: Set ExamOccurrenceMappingDescription - mappingDescription = Set.fromList $ case maybeEnd of - (Just end) -> ExamOccurrenceMappingRange (toNullable start) end : specialMapping - Nothing -> specialMapping + mappingDescription = Set.fromList $ ExamOccurrenceMappingRange (toNullable start) end : specialMapping specialMapping :: [ExamOccurrenceMappingDescription] - specialMapping = [ExamOccurrenceMappingSpecial $ transformTag borderLength tag | tag <- specialTags] + specialMapping + = [ExamOccurrenceMappingSpecial {eaomrSpecial=tag} + | (transformTag borderLength -> tag) <- userTags + , not $ all (`elem` alphabet) tag] - alphabetTags, specialTags :: [[CI Char]] - (alphabetTags, specialTags) = partition (all (`elem` alphabet) . transformTag borderLength) userTags -- | pre/suffix of largest user tag - -- special (i.e. non-ascii) tags use the largest smaller ascii-char according to RFC5051.compareUnicode - maybeEnd :: Maybe [CI Char] - maybeEnd = case t of - [] -> Just $ replicate borderLength $ last alphabet - _nonEmpty -> max alphabetEnd specialEnd + -- special (i.e. non-ascii) tags use the largest smaller ascii-char according to RFC5051.compareUnicode, + -- ending the tag with ..ZZZ-padding + end :: [CI Char] + end = case t of + [] -> replicate borderLength $ last alphabet + _nonEmpty -> withAlphabetChars + $ transformTag borderLength + $ maximumBy (\a b -> RFC5051.compareUnicode (pack $ map CI.foldedCase a) (pack $ map CI.foldedCase b)) + -- userTags is guaranteed non-null + $ impureNonNull userTags where - alphabetEnd :: Maybe [CI Char] - alphabetEnd = transformTag borderLength . maximum <$> fromNullable alphabetTags - specialEnd :: Maybe [CI Char] - specialEnd - = withAlphabetChars - . transformTag borderLength - . maximumBy (\a b -> RFC5051.compareUnicode (pack $ map CI.foldedCase a) (pack $ map CI.foldedCase b)) - <$> fromNullable specialTags withAlphabetChars :: [CI Char] -> [CI Char] withAlphabetChars [] = [] withAlphabetChars (c:cs) | elem c alphabet = c : withAlphabetChars cs | otherwise= case previousAlphabetChar c of Nothing -> [] - (Just c') -> c' : withAlphabetChars cs + (Just c') -> c' : replicate (length cs) (last alphabet) previousAlphabetChar :: CI Char -> Maybe (CI Char) previousAlphabetChar c = fmap last $ fromNullable $ nfilter ((== GT) . compareChars c) alphabet compareChars :: CI Char -> CI Char -> Ordering @@ -651,11 +647,9 @@ examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences nextStart :: NonNull [CI Char] -- end is guaranteed nonNull, all empty tags are filtered out in users' nextStart - | Nothing <- maybeEnd - = start - | (Just end) <- maybeEnd, length end < borderLength + | length end < borderLength = impureNonNull $ end <> [head alphabet] - | (Just end) <- maybeEnd + | otherwise = impureNonNull $ reverse $ increase $ reverse end alphabetCycle :: [CI Char] alphabetCycle = List.cycle $ toNullable alphabet diff --git a/test/Handler/Utils/ExamSpec.hs b/test/Handler/Utils/ExamSpec.hs index f4b8f716b..0bf308ba0 100644 --- a/test/Handler/Utils/ExamSpec.hs +++ b/test/Handler/Utils/ExamSpec.hs @@ -238,15 +238,21 @@ spec = do = (RFC5051.compareUnicode s0 s1 == LT && RFC5051.compareUnicode e0 s1 == LT) || (RFC5051.compareUnicode s0 e1 == GT && RFC5051.compareUnicode e0 s1 == GT) noDirectOverlap - ExamOccurrenceMappingRange {eaomrStart=(pack . map CI.foldedCase -> start), eaomrEnd=(pack . map CI.foldedCase -> end)} - ExamOccurrenceMappingSpecial {eaomrSpecial=(pack . map CI.foldedCase -> special)} - = RFC5051.compareUnicode special start == LT || RFC5051.compareUnicode special end == GT + ExamOccurrenceMappingRange {eaomrStart, eaomrEnd} + ExamOccurrenceMappingSpecial {eaomrSpecial} + = noDirectOverlapRangeSpecial eaomrStart eaomrEnd eaomrSpecial noDirectOverlap - ExamOccurrenceMappingSpecial {eaomrSpecial=(pack . map CI.foldedCase -> special)} - ExamOccurrenceMappingRange {eaomrStart=(pack . map CI.foldedCase -> start), eaomrEnd=(pack . map CI.foldedCase -> end)} - = RFC5051.compareUnicode special start == LT || RFC5051.compareUnicode special end == GT + ExamOccurrenceMappingSpecial {eaomrSpecial} + ExamOccurrenceMappingRange {eaomrStart, eaomrEnd} + = noDirectOverlapRangeSpecial eaomrStart eaomrEnd eaomrSpecial noDirectOverlap ExamOccurrenceMappingSpecial {eaomrSpecial=s1} ExamOccurrenceMappingSpecial {eaomrSpecial=s2} = s1 /= s2 + noDirectOverlapRangeSpecial :: [CI Char] -> [CI Char] -> [CI Char] -> Bool + noDirectOverlapRangeSpecial + (pack . map CI.foldedCase -> start) + (pack . map CI.foldedCase -> end) + (pack . map CI.foldedCase -> special) + = RFC5051.compareUnicode special start == LT || RFC5051.compareUnicode special end == GT -- RFC5051.compareUnicode :: Text -> Text -> Ordering -- | Does the (currently surname) User fit to the displayed ranges? -- Users with a previously assigned room are checked if the assignment stays the same, regardless of the ranges. @@ -335,21 +341,3 @@ spec = do predToPositive 0 = Nothing predToPositive 1 = Nothing predToPositive n = Just $ pred n - - -{- --- myAnnotate "room capacity exceeded" $ shouldSatisfy (userProperties, occurrences, userMap) $ uncurry3 fitsInRooms - - - test/Handler/Utils/ExamSpec.hs:135:55: - 9) Handler.Utils.Exam.examAutoOccurrence.Random.NoNudges NoPreselection - Falsifiable (after 60 tests): - -room capacity exceeded: predicate failed on: -(fromList [(SqlBackendKey {unSqlBackendKey = -125488664963424},(User {userSurname="Robinson", userMatrikelnummer=Just "7959961923374081932782214765091329305474015231525"},Nothing)),(SqlBackendKey {unSqlBackendKey = -123483339090133},(User {userSurname="Perez", userMatrikelnummer=Just "5482528910"},Nothing)),(SqlBackendKey {unSqlBackendKey = -118945904886272},(User {userSurname="Martin", userMatrikelnummer=Just "4784178434461032616814108700264975720374752709612135"},Nothing)),(SqlBackendKey {unSqlBackendKey = -117181862361768},(User {userSurname="Perez", userMatrikelnummer=Just "27558455292870832910016828815"},Nothing)),(SqlBackendKey {unSqlBackendKey = -114302016569843},(User {userSurname="Davis", userMatrikelnummer=Just "13763490282534291475261828187089653743850"},Nothing)),(SqlBackendKey {unSqlBackendKey = -110905706672434},(User {userSurname="Martin", userMatrikelnummer=Just "87771"},Nothing)),(SqlBackendKey {unSqlBackendKey = -110479309905059},(User {userSurname="Miller", userMatrikelnummer=Just "837319545717484402528719189423320042503"},Nothing)),(SqlBackendKey {unSqlBackendKey = -109870640673816},(User {userSurname="Lee", userMatrikelnummer=Just "683673990062514732641480572486537"},Nothing)),(SqlBackendKey {unSqlBackendKey = -107296620544089},(User {userSurname="Jones", userMatrikelnummer=Just "7"},Nothing)),(SqlBackendKey {unSqlBackendKey = -99513965188106},(User {userSurname="Fu", userMatrikelnummer=Just "2264126627908013626998446021883828"},Nothing)),(SqlBackendKey {unSqlBackendKey = -97272139724835},(User {userSurname="Garcia", userMatrikelnummer=Just "5805485123536183163399445024923068597940980999091514924"},Nothing)),(SqlBackendKey {unSqlBackendKey = -89689121706070},(User {userSurname="Moore", userMatrikelnummer=Just "25820678"},Nothing)),(SqlBackendKey {unSqlBackendKey = -82934672292134},(User {userSurname="Clark", userMatrikelnummer=Just "83230945777788677133587861253994"},Nothing)),(SqlBackendKey {unSqlBackendKey = -81484932509371},(User {userSurname="\218n\238c\242d\233", userMatrikelnummer=Just "796271116604649198108082157856143047513009465132"},Nothing)),(SqlBackendKey {unSqlBackendKey = -79707309005258},(User {userSurname="Harris", userMatrikelnummer=Just "5998333311682137188470568100"},Nothing)),(SqlBackendKey {unSqlBackendKey = -69397949201715},(User {userSurname="Martin", userMatrikelnummer=Just "1849501885698871440179319823942093451"},Nothing)),(SqlBackendKey {unSqlBackendKey = -65312057887791},(User {userSurname="Martin", userMatrikelnummer=Just "05371902463238399726808238970049391194390035"},Nothing)),(SqlBackendKey {unSqlBackendKey = -56774863263466},(User {userSurname="Martin", userMatrikelnummer=Just "92010521895170905"},Nothing)),(SqlBackendKey {unSqlBackendKey = -56507095173774},(User {userSurname="Walker", userMatrikelnummer=Just "9765482896810377276569097"},Nothing)),(SqlBackendKey {unSqlBackendKey = -56496232689807},(User {userSurname="Robinson", userMatrikelnummer=Just "10294507776310671607386609437514615"},Nothing)),(SqlBackendKey {unSqlBackendKey = -55463761962077},(User {userSurname="Clark", userMatrikelnummer=Just "96171302"},Nothing)),(SqlBackendKey {unSqlBackendKey = -47160256239906},(User {userSurname="Anderson", userMatrikelnummer=Just "629397997487829607735185241530689914126"},Nothing)),(SqlBackendKey {unSqlBackendKey = -47057392168715},(User {userSurname="Hernandez", userMatrikelnummer=Just "8596763052100458239111713860319080177090372"},Nothing)),(SqlBackendKey {unSqlBackendKey = -36475495367102},(User {userSurname="Thomas", userMatrikelnummer=Just "51974104532662646819818509235177796726237664473842280955"},Nothing)),(SqlBackendKey {unSqlBackendKey = -34853393045082},(User {userSurname="Williams", userMatrikelnummer=Just "8320889107863608561918076120272479388366042278927978933983"},Nothing)),(SqlBackendKey {unSqlBackendKey = -27809999196249},(User {userSurname="Hall", userMatrikelnummer=Just "18153649967432926989"},Nothing)),(SqlBackendKey {unSqlBackendKey = -24390731126883},(User {userSurname="Martin", userMatrikelnummer=Just "88605476038197997"},Nothing)),(SqlBackendKey {unSqlBackendKey = -23884949928568},(User {userSurname="Clark", userMatrikelnummer=Just "6014974616"},Nothing)),(SqlBackendKey {unSqlBackendKey = -13776289327290},(User {userSurname="Robinson", userMatrikelnummer=Just "90803593065964817526260"},Nothing)),(SqlBackendKey {unSqlBackendKey = -11748248612893},(User {userSurname="Hall", userMatrikelnummer=Nothing},Nothing)),(SqlBackendKey {unSqlBackendKey = -4509312461256},(User {userSurname="Garcia", userMatrikelnummer=Just "694356510727040"},Nothing)),(SqlBackendKey {unSqlBackendKey = -1743187887307},(User {userSurname="Davis", userMatrikelnummer=Just "1496965101193"},Nothing)),(SqlBackendKey {unSqlBackendKey = 2874744048737},(User {userSurname="Garcia", userMatrikelnummer=Just "6466567401474884506843768"},Nothing)),(SqlBackendKey {unSqlBackendKey = 12410189320441},(User {userSurname="\218n\238c\242d\233", userMatrikelnummer=Just "249355007798"},Nothing)),(SqlBackendKey {unSqlBackendKey = 13945499340929},(User {userSurname="Wilson", userMatrikelnummer=Just "478802399"},Nothing)),(SqlBackendKey {unSqlBackendKey = 15332482394253},(User {userSurname="Rodriguez", userMatrikelnummer=Just "49478483220134722266262819168998907436"},Nothing)),(SqlBackendKey {unSqlBackendKey = 20786997881191},(User {userSurname="zu Allen", userMatrikelnummer=Just "13454502298971605839584788590546110586249572167114748337"},Nothing)),(SqlBackendKey {unSqlBackendKey = 26440758724805},(User {userSurname="Lee", userMatrikelnummer=Just "65416960634076549440649"},Nothing)),(SqlBackendKey {unSqlBackendKey = 29004383225589},(User {userSurname="Harris", userMatrikelnummer=Just "96722250361346570517250196667002"},Nothing)),(SqlBackendKey {unSqlBackendKey = 33216070681630},(User {userSurname="Smith", userMatrikelnummer=Just "59208656078713048715115675467876458"},Nothing)),(SqlBackendKey {unSqlBackendKey = 39503876519131},(User {userSurname="Brown", userMatrikelnummer=Just "82692663039937699"},Nothing)),(SqlBackendKey {unSqlBackendKey = 48015035621295},(User {userSurname="Taylor", userMatrikelnummer=Just "43879521570872912108895666"},Nothing)),(SqlBackendKey {unSqlBackendKey = 48999734396033},(User {userSurname="Williams", userMatrikelnummer=Just "24057276275826"},Nothing)),(SqlBackendKey {unSqlBackendKey = 56867237245920},(User {userSurname="Taylor", userMatrikelnummer=Just "67027340148075094772624371190836209997485228788200"},Nothing)),(SqlBackendKey {unSqlBackendKey = 61258554389826},(User {userSurname="Brown", userMatrikelnummer=Just "6261759607074867643"},Nothing)),(SqlBackendKey {unSqlBackendKey = 69621863574605},(User {userSurname="Thomas", userMatrikelnummer=Just "7445292342334597558583006"},Nothing)),(SqlBackendKey {unSqlBackendKey = 70256775739937},(User {userSurname="Miller", userMatrikelnummer=Just "9073398641808433754346"},Nothing)),(SqlBackendKey {unSqlBackendKey = 78691366351881},(User {userSurname="Fu", userMatrikelnummer=Just "17364996010931508678470359"},Nothing)),(SqlBackendKey {unSqlBackendKey = 79725690720564},(User {userSurname="Lewis", userMatrikelnummer=Just "8530555313977746655083488750"},Nothing)),(SqlBackendKey {unSqlBackendKey = 81513533696125},(User {userSurname="Jones", userMatrikelnummer=Just "920937317885665192292993250312"},Nothing)),(SqlBackendKey {unSqlBackendKey = 81981029385368},(User {userSurname="Moore", userMatrikelnummer=Just "55414192514542311627214689525944119319963"},Nothing)),(SqlBackendKey {unSqlBackendKey = 85888535534493},(User {userSurname="Rodriguez", userMatrikelnummer=Just "76292280288944780625905"},Nothing)),(SqlBackendKey {unSqlBackendKey = 85996206274915},(User {userSurname="Moore", userMatrikelnummer=Just "32605623608816708701331766199244"},Nothing)),(SqlBackendKey {unSqlBackendKey = 101362991390633},(User {userSurname="White", userMatrikelnummer=Just "9727244257940392263436145522115750"},Nothing)),(SqlBackendKey {unSqlBackendKey = 121131121250399},(User {userSurname="Davis", userMatrikelnummer=Just "5149830893919046016400068583244951"},Nothing)),(SqlBackendKey {unSqlBackendKey = 126412353851801},(User {userSurname="Hall", userMatrikelnummer=Just "28496292322582"},Nothing)),(SqlBackendKey {unSqlBackendKey = 132619389067506},(User {userSurname="Fu", userMatrikelnummer=Just "375800051"},Nothing)),(SqlBackendKey {unSqlBackendKey = 135230960203442},(User {userSurname="Lewis", userMatrikelnummer=Just "2707463072751303"},Nothing))], - -fromList [(SqlBackendKey {unSqlBackendKey = -129100413068233},14),(SqlBackendKey {unSqlBackendKey = -75701987503352},58),(SqlBackendKey {unSqlBackendKey = -3193586858776},25)], - -fromList [(SqlBackendKey {unSqlBackendKey = -125488664963424},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -123483339090133},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -118945904886272},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -117181862361768},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -114302016569843},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -110905706672434},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -110479309905059},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -109870640673816},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -107296620544089},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -99513965188106},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -97272139724835},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -89689121706070},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -82934672292134},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -81484932509371},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -79707309005258},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -69397949201715},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -65312057887791},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -56774863263466},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -56507095173774},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -56496232689807},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -55463761962077},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -47160256239906},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -47057392168715},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -36475495367102},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = -34853393045082},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -27809999196249},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -24390731126883},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -23884949928568},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -13776289327290},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -11748248612893},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = -4509312461256},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = -1743187887307},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 2874744048737},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 12410189320441},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = 13945499340929},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 15332482394253},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 20786997881191},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 26440758724805},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 29004383225589},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 33216070681630},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = 39503876519131},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 48015035621295},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 48999734396033},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 56867237245920},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 61258554389826},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 69621863574605},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = 70256775739937},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 78691366351881},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 79725690720564},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 81513533696125},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = 81981029385368},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 85888535534493},Just (SqlBackendKey {unSqlBackendKey = -129100413068233})),(SqlBackendKey {unSqlBackendKey = 85996206274915},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 101362991390633},Just (SqlBackendKey {unSqlBackendKey = -75701987503352})),(SqlBackendKey {unSqlBackendKey = 121131121250399},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 126412353851801},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 132619389067506},Just (SqlBackendKey {unSqlBackendKey = -3193586858776})),(SqlBackendKey {unSqlBackendKey = 135230960203442},Just (SqlBackendKey {unSqlBackendKey = -129100413068233}))]) - --}