plunder

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

JetHash.hs (17389B)


      1 -- Copyright 2023 The Plunder Authors
      2 -- Use of this source code is governed by a BSD-style license that can be
      3 -- found in the LICENSE file.
      4 
      5 {- | This is a hack to avoid long compile times when changing jet hashes.
      6 
      7     TODO The `unsafePerformIO` hack could be avoided through careful
      8     engineering.
      9 
     10     TODO Maybe we should even read these from a file?
     11 -}
     12 
     13 module Fan.JetHash (jetHashes, installJetHashes) where
     14 
     15 import Fan.Jets
     16 import Fan.Print
     17 import Fan.RunHashes
     18 import Hash256
     19 import PlunderPrelude
     20 
     21 --------------------------------------------------------------------------------
     22 
     23 {-
     24     Call this immediatly on executable startup.
     25 -}
     26 installJetHashes :: IO ()
     27 installJetHashes =
     28     writeIORef vJetHash jetHashes
     29 
     30 checkHash :: ByteString -> ByteString
     31 checkHash bs | length bs == 32 = bs
     32 checkHash bs                   = error ("Bad hash: " <> show bs)
     33 
     34 e :: Text -> Text -> (Text, Hash256)
     35 e nam haz = (nam, btcToHash haz)
     36 
     37 tabulate :: [(Text, Hash256)] -> Map Text Hash256
     38 tabulate = go mempty
     39   where
     40     go :: Map Text Hash256 -> [(Text, Hash256)] -> Map Text Hash256
     41     go !acc []          = acc
     42     go !acc ((n,k):nks) =
     43          if member n nks then
     44              error ("Duplicate entries" <> show k)
     45          else
     46              go (insertMap n k acc) nks
     47 
     48 validate :: Map Text Hash256 -> Map Text Hash256
     49 validate tab = unsafePerformIO do
     50     for_ runHashes \(nam, hax) -> do
     51         unless (lookup nam tab == Just hax) do
     52             error (unpack nam <> " jet has conflicting hash definitions")
     53     pure tab
     54   where
     55     runHashes =
     56         [ ( "_If"       , ifHash        )
     57         , ( "_Seq"      , seqHash       )
     58         , ( "_Trace"    , traceHash     )
     59         , ( "_Add"      , addHash       )
     60         , ( "_Sub"      , subHash       )
     61         , ( "_Mul"      , mulHash       )
     62         , ( "_Switch"   , switchHash    )
     63         , ( "tabSwitch" , tabSwitchHash )
     64         , ( "_Idx"      , idxHash       )
     65         , ( "_Get"      , getHash       )
     66         , ( "_Eql"      , eqlHash       )
     67         , ( "_Ifz"      , ifzHash       )
     68         , ( "_Lte"      , lteHash       )
     69         , ( "_Lth"      , lthHash       )
     70         , ( "_Gte"      , gteHash       )
     71         , ( "_Gth"      , gthHash       )
     72         ]
     73 
     74 jetHashes :: Map Text Hash256
     75 jetHashes
     76     = validate $ tabulate
     77     [ e "_Force"              "A7ZtnajpFHHJ29VVzZoZ4BENtqNio1LZcG7Pdc9nMFvf"
     78     , e "_Seq"                "7fPzp1b5QXpDDkvpt2oBGUm3w6eCPVKjDnUQ8i8w8mj5"
     79     , e "_Trace"              "DWsz4CYrc3xzUQRxtibBiSXUx8HzR3tRgGNsbAMJLe9w"
     80     , e "_DeepTrace"          "7oDjbbsyiM1paMXmzzaR3P3KEit8MHRVSRduAX3qan5V"
     81     , e "_IsPin"              "9yKhatzX3nmiaJuvt9k4vC15TFpfLrdAJgBYAHbsNNLR"
     82     , e "_IsLaw"              "BWQ7azfQEprHXNumwKc2zKHSHxXdkydxg1zvCZKfXTGF"
     83     , e "_IsApp"              "2b6Ki7gnsoZnLFdXdNrdrF2PdehjsKpvFiHaD4y85VbY"
     84     , e "_IsNat"              "UUg4gA355ySzHkLR9uyNbH667o6b4NkAv4rQ3pwJYqj"
     85     , e "_PlanTag"            "Hbq7zzUZ4tQXWZv1RQLLTrvSvsCXWahVd4nzCn28kB4g"
     86     , e "_PinItem"            "7EaNWdf4EqHNCEBCScEuW4CrxbMzbadgkXgQcrbLwS2C"
     87     , e "_LawName"            "Gnorn9t78uWCBXACgxF2QEbXpXvHZZgA71Ryt8DL42Wx"
     88     , e "_LawArgs"            "Gvj7mVywtF79a5xV17UXceJLFtYAneSD1PJfrCEEMnEY"
     89     , e "_LawBody"            "CYHDZqaDfuN2MGLga3LuSUNeAHf5wmDvL928Ca97RwWw"
     90     , e "_Car"                "CT92yRzvnSAA5eqLf31G58S5kKCbv8A6JjWNtm8raZQp"
     91     , e "_Cdr"                "HiPkTzvPxdyzkza8Tq43m9kmAmv1jEgevkFngo8T7kGV"
     92     , e "_Eqz"                "HYgduheRaC4oQMy7qwLEGYLC9fhesds7HCgifxqfQHBR"
     93     , e "_If"                 "CGWi51frV26N7KUBbso2WzBad8W2mbix6HaejVem5YaZ"
     94     , e "_Not"                "6mbxDTonsXzZJowVdsQtP5bbqfHn6DTghb11eYi6s9qB"
     95     , e "_Bit"                "D518gnvYpR68fwAkvSghyATH1oCh8LVG9jeQDUuws7HG"
     96     , e "_And"                "9JhVfFRzAkwjt7VyhC5yi7wHekWx7h4CLn36Pd9xjD7c"
     97     , e "_Or"                 "ALbovHrbg3HkpkB1DPXDrkPCSSgNfoz5ZgF2j1z99yU1"
     98     , e "_Xor"                "E4tUTqjvQrnCpGFWNRhUoH2ZzrjxLyi7iDNVcPetqyMW"
     99     , e "_Nand"               "EcKTTCta47vbd1Fq85Dm214tZfuSbS5a3xeBX9LcPUkq"
    100     , e "_Nor"                "5Q3KgaFr5KdNVhMSA7CRD2WfNvaZM2JSG1XWnp8aK5BD"
    101     , e "_Xnor"               "XwJTASftvk563i9uqWyCjEnjHbNdtjwXEXDN5pXFGhP"
    102     , e "_Ifz"                "3C2F3FHjCiM8zaWbTKQnNJbCfs4vU11tpcj3wETVQJtZ"
    103     , e "_ToNat"              "HedgTAZEjCCShX97HZNsm4gGGWyxhRf9jepYzrtMR6RW"
    104     , e "_Dec"                "CQono44WNJmmGYhDL1zTmF38VwyZ2oUbhbeZxnyXcVhg"
    105     , e "_Times"              "FWYFvK5cNTUB1PAsYNvgzidAFxSMDTrqch7UsJjpJbvJ"
    106     , e "_Add"                "QeTTm1EFP1r7mkXJQVnBYUW2QeKUvjNfYA5PiGzFRVj"
    107     , e "_Mul"                "E2TXQPG89ykcNK9s7XSwDhvgQsUrc8ogjvoPsEZu7zyp"
    108     , e "_Sub"                "xruy2CzBgGc8fbn6wYDw4ofa4XXNgCsVGhySX6wr7LS"
    109     , e "_Pow"                "ENxYwA7Jp7wRsyaR8sHE3SPF3MoGzkmHWPC9g3ohSgR2"
    110     , e "_Bex"                "DGnbYD2zjfxzUt8WYxXPELfu2bULGhsjVeSyqBJdn97S"
    111     , e "_OrdWeld"            "8ZeTyQLBT1MSmfbD8ZBdaXJHzwv1MEpL2DSZfRTcyY8h"
    112     , e "_Div"                "7vNXXnoaLsR9p2YNq3rSxjMCFYiFStXY1BMDrh8xdqcN"
    113     , e "_Mod"                "AgLLsdcyTj4rs3WhqHq3jSSPDjPcfbLzovkxLgzo7xjD"
    114     , e "_Lsh"                "AF5txxxHqUzwbcECyb35uJiZzJSGS2fjSXu5uEtAzAoA"
    115     , e "_Rsh"                "B5FVxvLyygchJB5BTx4a8Lv52RbBqVFNtdzHYtGcW1wu"
    116     , e "_Bix"                "2GVVL9xRo2WRQSZuMVe58QfBTxxav6RH9aT24Wxk1zq5"
    117     , e "_Bitwise"            "2ZiA8Wr4ifoP9TkzRK9agq9X8oGVmSNco7RtbAneSizM"
    118     , e "_NatFold"            "FGFJ88epCE88jt81RhPrqCXPqxnvRpe4zeksX8WrSZdA"
    119     , e "_Dis"                "4DuWVnqNYy8qGoTa3c4q4YgZU1B7TkFiqGZTNrDkThq7"
    120     , e "_Con"                "EVyqt3GFkGS6qER6e4mQ5xVeaJMcS1HhGB2Vzszs6W9Z"
    121     , e "_Mix"                "7amwzY4GL3TAGHJ99MAdtGeExMZh4hXDvcBNy7AN9F3M"
    122     , e "_PopCount"           "BZzsw1Je8NZk9TVdSY71xJwkGTsY6JFF1XsJU61CmXwT"
    123     , e "_Met"                "35x4hER3vbGCkvmKwbsTV5yKpXmyLph3Erpxmyf9UqAb"
    124     , e "_Trunc"              "9S1a6oe76HtQTmccbsQCtgjfvCcpKvnLTShPkHfzpwsG"
    125     , e "_BitSlice"           "5jsdHdezv2mR5uCJL7krDJkKi6GW49vmb1eTzE3NwBZD"
    126     , e "_SetBit"             "J6GTmyBRkaV1ZpfvqnNJSCzdxuXLQBcLqaJQhKUfGkPs"
    127     , e "_TestBit"            "AHPngM8RAFxnicAWHhLnjAQtYwjBFciDFZSnCZg53wGU"
    128     , e "_ClearBit"           "421ARHwYHBeXFQoLgeTrZpGyj6W7JhpDoiEZhNHE66V5"
    129     , e "_Cmp"                "6MtBxTQmFyGU1nSGVLeAvefWjEmhA42MwcfDH5L718iR"
    130     , e "_Eql"                "Adf29h2HgWaoiya1ZWMeMp4iMQfeUnNZzbVyZ5ocNuUz"
    131     , e "_Neq"                "Bsn2Gzwu5akm1x7L6pj3QqxgL1x6biEgKxiS9ahMJM8E"
    132     , e "_Lth"                "AdoCNFpqJGYuhrayP8pVoqzyfSR7UcPwDt86gyL7oe4A"
    133     , e "_Lte"                "3ERFoKQNfT27Q9uf356rXiUA9wuBxH1EX2abyZmikeVy"
    134     , e "_Gth"                "vzmdUQLNpoqDJxoyVpU4ESQVZg4eWfv9ye55MzHH5AB"
    135     , e "_Gte"                "36re96oJE2udJvUgERtaYYFWVm7AJNHe8pVufjoXkQet"
    136     , e "_Min"                "9PS8RSccDegsbr8VBYX7gESoEYV97nLer882MvdyGpZG"
    137     , e "_Max"                "8YxA9BhNBELQykHmLTg2dKZvZ7mxm9W94Ra4gQ9YXbMy"
    138     , e "_Null"               "B7Yd7cPdoDFsLgkYmuWdsvM4NJfMSmasj3Jhp5agrFbF"
    139     , e "_Head"               "qdNQEg1BoJgcRm1qRGdNqDK86bm7XSean7torY3Q2XR"
    140     , e "_Arity"              "2jz4zz3a621Z6uhWSpTbv2wRi91aQfsSRn76Yi6me5gy"
    141     , e "_Len"                "AUDshrNCtvjQfRYsYHv9s4YJDZ3f7P5MKwPkLJrNX8aD"
    142     , e "_Put"                "ACEkgfjSxxhvXkh7iyPg64Siwp2fpURFFREkX935v1pj"
    143     , e "_Get"                "386VJFmFLRAcsu3gXtsNK4s5muQusWJ4SMzgjjS6YUPf"
    144     , e "_Idx"                "H4Zc8hKR4nzf2w1FC8mXQmsmMrNvJ86yRh2hLK9GL3ds"
    145     , e "_Mut"                "4a8fsQF4NQfaKfKpTzk7vxu2DaDCuDPUAtedb7k6nCua"
    146     , e "_Last"               "HKg4NMDUSy9FkBNmsdNvExNHLf6VrL5xAZrJzBHvxxQy"
    147     , e "_Switch"             "3vzrXZQeTFijPUj8F4rF3QWJnzbEEMNZbjmGsustvzo8"
    148     , e "_Cow"                "3gqiFBpFd6UwEJSqH2MLPE1s3C5hTSra5uF6GYzsW1za"
    149     , e "_CowSize"            "G6gN1nJbBtohntPrsG3v6edTtr78MMPJLaehkQ7sLcSL"
    150     , e "_IsCow"              "J9D6GAKqFiyfbzyr9ejHExr4avfRHS9EycgSTqMpk77s"
    151     , e "_IsRow"              "8t2nzyaUKEB4iXUcLVaLwFLDHJ6tddQK7Dp5W9oZQLDW"
    152     , e "_Gen"                "2Xjoe15B84gukTsF7RFCzQ9AvWq78pwRTgyAt3zRXdRC"
    153     , e "_Weld"               "2pMmhrxJDkduFASR3WXHPpZCSyQhwsSttmBSma8NALnf"
    154     , e "_Map"                "FZF5tePfHzx5fS8AKiguJFVNsxmru7qtW2gx3XnDAtse"
    155     , e "_Rev"                "JD4CrHMtAntrmHNK7MZCZK5JDtvw4m26vGsNqy51qq6P"
    156     , e "rowCons"             "Dnf9n4wW7M7i4Xc5BhXQGCpTC5BhUM3m1wceckTpA1fK"
    157     , e "rowSnoc"             "A3FxtWw4MGyq8T6HLLvnDEJwkrAej7MCHVVtUTnzXvZm"
    158     , e "sum"                 "F6ob6mjnYAtCSdJQRFNWQGa1NVdSNbr5b77gESTPCFDT"
    159     , e "sumOf"               "ahTFxWPHYCTdTKNW3ES6TTvBE3K2ZNrXs7Ta31atipQ"
    160     , e "cat"                 "89EWhEFWgFigSEwzcGfi3mAgDer1QTWspWWBMEVg6Bns"
    161     , e "zip"                 "8xVraNf4pPd2o6A7yYKV1N6oANPazsMzGCVXLccrXhQe"
    162     , e "drop"                "45ARChFpRYWa1o1n4jxYbqVvBmkWzxYQxCFPNkcnE1d8"
    163     , e "take"                "2gABh4WVzRnyRtdM49QGP4GTUGNidMercKgxaFDonvfP"
    164     , e "unfoldr"             "AqALs9y4dSE4nUxpGv6vYjqtq4eJL9ZXQSeMb9n7a2vK"
    165     , e "_SizedListToRow"     "12AFprhZ7HSa4451hkhveQTVCmuds6kvmLYmjQZsDUNf"
    166     , e "_SizedListToRowRev"  "EXQjpxzxxiLqW3xMwKqRYyUyFfxbEpbvfhRMsUBDmxtE"
    167     , e "bsearch"             "GL5YmUEpJm4dEqPSF7KHXATef9dQkA5eiZaq6vcwEk7J"
    168     , e "isDigit"             "A55EjKavUf9P9wSg7np7yqng75XWmcSURmmbAAaLTnBN"
    169     , e "implode"             "5WGW3TBZshBZvnnYcePG9mHFuSvEYwYck9PMkPnq72wY"
    170     , e "_MkSet"              "4RUfSzoWUyiYQ5omEL7XWABd3bCpp6Q92Gx62fdDvrVu"
    171     , e "_SetToRow"           "3GGGFTFjPGAJp75fDidHT2ir5gjRY96P9qhPAEi37L2R"
    172     , e "setSing"             "2S8yfCmRiecvoxgLJVJg5L6MxLm5avjoGqGJmnbukt27"
    173     , e "setIsEmpty"          "BDgQFXd9VbEEdoBcaqMys39ucwLS4WFhQLAxypncGj3W"
    174     , e "setLen"              "4yZ1gLVWzH46af8cUrqhJiAZdSNTpRMPw97JVZH3Z6Ya"
    175     , e "setHas"              "H54z14ukWmmsPWW1hVvtmg9LgHXXqL3CDAxat7hxHqZg"
    176     , e "setMin"              "99RzLRXhcLMYwmi3Z92BzxyP7ByJepiSNbMhH3tYThxr"
    177     , e "setIns"              "7XTSXHE3H5naGmKM1pHkN5K8Y5YCW2DXGKNmUZwSHSjW"
    178     , e "setDel"              "DRtJToYcbs4CeWJbsim6AC1wfQAvhawXaXBTRf9j15em"
    179     , e "setWeld"             "DiwkKspYbznDoaAB4hTMTeqhB9CWSDsxnAYU8jaXrb2v"
    180     , e "setCatRowAsc"        "3FxDUjMRkbL5YcH2VKrEcQrKqt1rxYjpE7jLVULvC4du"
    181     , e "isSet"               "Cg5qw1nsmxJZvrxyDcQkxvibHgARN5kwy8KHLqY2p8JR"
    182     , e "setDrop"             "59s1CVBM1sVCsu8goeVRtcZgo3MfSpsNpURxcugnJz5S"
    183     , e "setTake"             "6gHtpymH8Dr9mKh3ZVWK131L2xYXcn29PHUWokh3BBoC"
    184     , e "setSplitAt"          "8bHiTR25SEwWF44Jm4jxPb3dPpYjDobmjDYiJAkH3uXS"
    185     , e "setIntersect"        "6tABCWy2zvjbCbFyEFvrHBkJ54SWVpEGCymgZauuCeAf"
    186     , e "setSub"              "H4X1JaHYoS8DUbSnsevKrqu8LuXebWiARUEoppmYL174"
    187     , e "setSplitLT"          "C2ZGZw6xkURRqrDEVTyhYRCx31GRWKuDWJVj6KP91ACn"
    188     , e "_MkTab"              "5hFXwrFMAS1ETGYZDANKd5Eo9xkjNnxPRKTL7H3Td4yv"
    189     , e "tabSing"             "7AfouhmiExP9KSySjrw4k4VZ5JY2TE4cW53xo1EhHsfz"
    190     , e "isTab"               "3NVgkveHYdmX8AHVLhwB7qpKhtNmFanxv4c6z3QuJqEe"
    191     , e "_TabKeys"            "8b5KfdDnpHdUNavaYcVkyY4UWvgkmzhboa2WtHq8hvE8"
    192     , e "_TabVals"            "ChipTE8EqGJx8mKh7vKk3uLCoe87uzr57puknUVwGMGL"
    193     , e "_TabKeysRow"         "AbTABFk1h4qcAoW2nzQ37JtnzPfVgapUSXLBcZqid4rH"
    194     , e "_TabKeysList"        "HJCWTAgwp23pzpsfcFtztNa8uaNit6cSdYN19CqmejyZ"
    195     , e "_TabLen"             "4zBRGTdC8o8VqyVbae2RH7HhCXjkzahcyMvBKPegci3Z"
    196     , e "tabIdx"              "3TWf15DfN9xE991EbwQooXnD1wMQ1snqJBragTQ7vqai"
    197     , e "_TabIsEmpty"         "2pqKJoYtYzxGuojhjcD7APfxGauDgrJr6frjcEKY75Cr"
    198     , e "_TabHas"             "3CmdokqP7UZsYmUibrN8ZYenxxYNeg7pbujqL87uf7Yh"
    199     , e "_TabLookup"          "4ZU8AC43kfUmio84VTUWxZzkRFLd9PUcn3FYhacStXmn"
    200     , e "tabIns"              "6DntBfKNxnzojW5jz2HMm3qKMtMhTg5rzVyQ51zXc5uy"
    201     , e "tabSwitch"           "GAEvH1zJXuT4fpX9rhnonBPtQ1wxcDmgXgyz53vZxmSa"
    202     , e "tabToPairs"          "7XNsmym7XdJvy2GqXPqLnFDgHaNbsh2adrFZBQrunB3c"
    203     , e "tabFromPairs"        "9vDNgbSC1eKiVfti8GnjiuBLYptbW8Ct6NY48y14sE7"
    204     , e "tabToPairList"       "5BRqPnTopXM4gu9fTnrnxoDVWYZLiMK847eRjxn3tUj4"
    205     , e "tabElemIdx"          "EKW4vsYbgp825gXmTmbuZHdJXvJJg5ZgMZLDhhTd5zQr"
    206     , e "tabSplitAt"          "HSJeEynaytuz6Har7pzrD38a9fERYycpCfn9DdWbsoww"
    207     , e "tabSplitLT"          "9YdjLVV4RVRWNEd7WqFppRKrnT2A5yYZCzrJYKwQyFos"
    208     , e "tabAlter"            "GCz4BwUrQEWZpsprfRNJdrb342iSywauUKiGQ8usMsLB"
    209     , e "tabMapWithKey"       "C5KJzWkVKbKe3BkxrE5MKEMPywwqjtS2Wg3uYAdhWxuX"
    210     , e "tabMap"              "9d5ZFLjQTJiJWZ5nVu2HPERX87JE6useFs5hTLBxsEud"
    211     , e "tabUnionWith"        "GwJdmG4nEoqdyQk59881fJEyXohj1FSRYUtJvtNUZb7t"
    212     , e "tabWeld"             "5b6a45ecNGARY4eMDgoLBPR7rS4pLgXkYjSBsBeEdeHS"
    213     , e "tabMinKey"           "5e9RqAsaYgy7w8yt1DmgLN6e2nPUXqBT7ixPNvnG6MuW"
    214     , e "tabFoldlWithKey"     "DZ1uBEGqnQoVcC1sYiPSsSvZhfR4EZfghZAanHsag96M"
    215     , e "_TabFilterWithKey"   "LmKep1jfDMA1wRJUtMa4vQsotSPsrxfQeJySXapCzt8"
    216     , e "padWeld"             "3HYdLDt6xEBvr4sgd1NKBGt8fudaJsF7NeBAfifYdJ1x"
    217     , e "padCat"              "7oSvLzBPe2YutqfME1KZRT4Bey5NgTVjKhbRxeTVgMBw"
    218     , e "padFlat"             "9cU96nmmqDUvNvped7BHg5G6WE9xCwukSyvqyQgD1TDu"
    219     , e "isBar"               "BoDTAF88eG5ykFN5WxbBgfmYLsfcaCXJNjjVUxW1LGYV"
    220     , e "_Bar"                "3rEdAKuWvV2VjaZoXae5fD1H3mAqkLJjZhqSp2djP9ez"
    221     , e "natBar"              "8skazbEPVRUQkid2uQgQFJLRxveQqBepJXKCcSA1kVpT"
    222     , e "barNat"              "HzPryDAhioqTPGfFopyj29Pf6oo1KwYGAoLRZ7V5ZR5V"
    223     , e "barLen"              "FRQyoP5YeRoHtbXXaU5yaakGdaq7sm6PiNH9RHcH2Dwy"
    224     , e "barIsEmpty"          "8VoyMabPUNASM5PvxrUUVca6gk4Gf6HRvUHiFkMHuMw6"
    225     , e "_NatToSizedBar"      "CKuuEeyrhLLJqabF1zT2jEt9VjZPk2uKrHcPwRQL4Tt2"
    226     , e "barIdx"              "7EAWHpAwBQFBHLJBNUpTkP9E3RvWtCFcatDjUQi5yFUC"
    227     , e "barWeld"             "8LcLqd1ZBa1CPYRK4LDVyDxzwWCSoN5NZXqFPWrGy7RS"
    228     , e "barCat"              "E8ad3F9S1GGfCxmDwcZzUUrkjqWbzEDRnuxxvdh92Q5u"
    229     , e "barTake"             "BQZzhV3xiMvEJWpAzjv2nJTxKu9XfGRmCG8iYBynP7Uv"
    230     , e "barDrop"             "4zNT1Sfc7yv1ujqpZHN6HM3qbMQ3yAh9f4zpjwgB65ao"
    231     , e "_BarSliceToNat"      "DbKqsHmZ1ZnXXZt8SatkyVU1hPMEk4ZcE6nn4JLmx1vr"
    232     , e "barElemIndexEnd"     "JXHswKJpbWwi9nDXpWwZvhSLwQNDGwRKcg1Nc7p3Yw5"
    233     , e "barFlat"             "3wHv6z3N9k2ZdDK57ZMe7ak1bMt4SodmtZQPUrHqeBR6"
    234     , e "barElemIndexOff"     "BJJ426tHsJ8qsBCZzxuykJmhDZw7VTg5Vso1Whk1nxr7"
    235     , e "_DataTag"            "EDQm1rudzF71qQPiAERwabdVg3drR91iWvZ5wswYBqpP"
    236     , e "_LoadSeed"           "CrDqS8Sx88JDYEVHVUDcKKUUPCw3wNKufetVMueYj3im"
    237     , e "_SaveSeed"           "5Hi3rZBUwYk8gU2DLVbPZ9aSv9jTBmQrQgZoqiS1ipv9"
    238     , e "_LoadGerm"           "41RM5TPfNkERjDHCVgnbPRYXfEKHVGXG7EzBob3UKaRN"
    239     , e "_SaveGerm"           "2EBsumzBMKnDfRyX3mdEH3FDUZFZi9ZKuiPMk7mFFo39"
    240     , e "_TypeTag"            "3XohyijyCTrFjend5kYB4uWbai4nrj1EPZ5i5ri4mUC6"
    241     , e "w32"                 "75Y7bvtETWp2pyiH7cw2FamCWbtPozAaxjtryTHVRyEV"
    242     , e "add32"               "FRmrUPQBfwXEg5jzrnWFgwwd6kuB5E5y89y2fxpCPNtg"
    243     , e "mul32"               "87gy84iDhH2c3apkgbeLDELjgEooxmhyKB6tQpqBqK7e"
    244     , e "div32"               "2fJDSdzysSzhbAAoQTXDfzMBvywu2m54HVg3qQQtgkYX"
    245     , e "and32"               "FCTfDr3tXgmJkn7S6fHTgpkEDduGLyxWNvoYrCVNJaKs"
    246     , e "or32"                "9exT4skhpbwupT7NMs9P3WhfZSMJGMPEJ8WtJrwhz3tZ"
    247     , e "xor32"               "G8aQ6hEYU5zQxSwM2zzpKhQGvGdBw1p4bNsikwbGaSBF"
    248     , e "lsh32"               "DYk5Ni2veG7FsQBnbFbqEsNJUomvzfjU1eXx1NzwwTpG"
    249     , e "rsh32"               "HURMVABJ4BgTQXpvNLqGusYmbxJEoe7WwAZt5Ah3HTP7"
    250     , e "sub32"               "pmaUKHWyyQF54t4PK9APGATFRBpxQz2fDxuW4PtH3CN"
    251     , e "ror32"               "FqvahK5dGSuNLbkW8CckfCCk5E1hTRzgJZn49sN3n3Gk"
    252     , e "rol32"               "DkkPSvYjdeNfnHHRC7bEjcn59fBeJVpWhUVB3F344qjX"
    253     , e "w64"                 "DBMbSnHhw96KYiaiFBQwYmMZrZbn1quHXWojsB7fUcKg"
    254     , e "add64"               "Gfhro53zr1EYuSaaJ15ptB5HGT13GWRE7kUPeo67oVKQ"
    255     , e "mul64"               "GTEJu6YrprQMTAZpqsn7JY7V1NbL7RyoVLyucmRtxxZN"
    256     , e "div64"               "6MzX5sV1czkdE59zBZZfMik3W2hwYiYGh8TVh8T8FZyz"
    257     , e "and64"               "3WfSJyX34w4pKe43aXeGgxXTzJf4XcPLUtqq3hHm2xrH"
    258     , e "or64"                "QksgZSJQKejVMUYSSrNKzg5M5miESqjf1n29i3XBz8Z"
    259     , e "xor64"               "CM1986Y3XmvK4eUfMDajLwqJW2AQBKQ3eVutR7wMLQ47"
    260     , e "lsh64"               "HBzV4W5EqLCwv1Tq7T7pgAxhSVxXdr2PgD4J25p2Y9PF"
    261     , e "rsh64"               "8L5bR9nKiTpWCRGA6TZ7syiQv788niZohNVFPMSuSpV9"
    262     , e "sub64"               "3poQCVWizWJXY3HSbSWtF2L2Jx8StqqDyhHLo6og77YJ"
    263     , e "ror64"               "4NFvztAE1SoJFUK9Tq5HGNgo6cdGzyPxfqUWVajCkyrc"
    264     , e "rol64"               "D59osscU4cp8KkQbMzhcvhjmy8KSiP7vuACF4xZJgfAs"
    265     , e "iDiv64"              "tJQF43B78SBkzN5hLnDvDbux6fRBEhZ3WjazYVoMBSd"
    266     , e "_TryExp"             "FpKGptdncF6G5z68HwVzwgHNQCBUB6fMvq451ASsRAcW"
    267     , e "_Try"                "3UkUWS7GRBMmhqMx2fokCLCv3SgsRZoxCUtoiv7RA7Qr"
    268     , e "_Blake3"             "3SYhSaiJ8UBF3gqdZ2FuFipV4pHUo9DnL8x8A6wsAWAK"
    269     , e "par"                 "BfENjJMJwCJxcXUrfMkv2Z5Mpyt4npKH7aZaQ2BCDMEM"
    270     , e "pseq"                "3oUDABdakHWyyZyPQVBjRtGG3dXrLG3FdB1P1QR9V4os"
    271     , e "_PlanHash"           "BDcJhoneAK3vNRvfgyXsXLeoLXvRTpHVoTmrRFs1EzHx"
    272     , e "_PinHash"            "FM8i8x75ycTjJSVtvATMmC37bXsd5u7cF8x3NoAHdjkp"
    273     ]