diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # Revision history for `canadian-income-tax`
 
+## 2023.0
+
+* Updated for the 2023 tax return forms
+* Extended the T1 form support to all provinces and territories
+* Accepting the 428 forms for AB, BC, and MB beside the earlier ON support
+* Accepting the 479 forms for BC and ON
+* Accepting the federal schedule forms 6, 7, 9, and 11
+* Streamlined the command-line options
+* Allowed working directly with PDFs on the command line, with PDFTk installed
+* A simple web server with interactive UI
+* Refactored most of the code
+* Added test suites
+
 ## 2022.2.1
 
 * Fixed a duplicate field name
@@ -11,7 +24,7 @@
 ## 2022.2
 
 * Expanded README and renamed the executable
-* Added the Ontario tax form
+* Added the Ontario 428 tax form
 * Added `leastOf` and calculated line 31260 of `T1`
 * Fixed the credits left out from page 4 of `T1`
 * Tightened module exports
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,116 +1,116 @@
 Canadian Income Tax
 ===================
 
-## Manual ##
-
-### Use for Canadians outside Ontario ###
+This Haskell package consists of a library and a couple of executables to complete the Canadian income tax forms.
 
-This Haskell package consists of a library and executable to fill out the Canadian T1 tax form. The way to
-use it is as follows:
+## Command line ##
 
-1. Download the fillable PDF form from [the canada.ca Web
-site](https://www.canada.ca/en/revenue-agency/services/forms-publications/tax-packages-years/general-income-tax-benefit-package/ontario/5006-r.html).
+There's a command-line executable named `complete-canadian-taxes`. The way to use it is as follows:
 
-2. Fill in the downloaded T1 form; don't bother with any fields that are calculated from other fields in the same
-form, that part will be performed automatically.
+1. Download the fillable PDF forms from [the canada.ca Web
+site](https://www.canada.ca/en/revenue-agency/services/forms-publications/tax-packages-years/general-income-tax-benefit-package.html).
 
-3. Save the filled-out PDF form.
+2. Fill in the downloaded forms:
+   * T1 is supported and mandatory for all provinces and territories.
+   * If you're a resident of British Columbia or Ontario, you can also fill in the 428 and 479 forms for the province.
+   * If you're a resident of Alberta or Manitoba, you can also fill in the 428 form for the province.
+   * For all the other provinces only the T1 form and several federal schedules are getting completed at this time.
 
-4. Run
+   In any case, don't bother filling in any fields that are calculated from other fields in the supported forms, that
+   part will be performed automatically. You also don't need to fill any fields that don't matter for the rest of the
+   form: your name, SIN, and other identifying information fall into this category, except for the birth date and
+   marital status which may affect your tax credits.
 
-       pdftk 5006-r-fill-22e.pdf generate_fdf output 5006-r-fill-22e-filled.fdf
+3. Save the filled-in PDF form(s).
 
-where `5006-r-fill-22e.pdf` is the file you previously saved and `5006-r-fill-22e-filled.fdf` is the name of the
-output file; feel free to change them.
+4. Run
 
-5. Run
+       complete-canadian-taxes <province code> --t1 50??-r-fill-23e.pdf -o completed/
 
-       mkdir completed/
-       complete-canadian-taxes --t1 5006-r-fill-22e-filled.fdf -o completed/
+   where `<province code>` is the two-letter code of the province or territory (AB, BC, QC, etc),
+   `50??-r-fill-23e.pdf` is the T1 form file you previously saved and `completed/` is the name of the output
+   directory; feel free to change the names. If applicable, you can also supply the 428 and 479 form with the
+   command-line options of the same name. For example, to complete all three forms for Ontario (ON) taxes the full
+   command line would be
 
-   to complete all the field calculations and store the result in the output file
-   `completed/5006-r-fill-22e-filled.fdf`.
+       complete-canadian-taxes ON --t1 5006-r-fill-23e.pdf --428 5006-c-fill-23e.pdf --479 5006-tc-fill-23e.pdf -o completed/
 
-6. Run
+   The usual `--help` option will give you the full list of all supported forms.
 
-       pdftk 5006-r-fill-22e.pdf fill_form completed/5006-r-fill-22e-filled.fdf output 5006-r-fill-22e-filled.pdf
+At this point my job is done. The rest is all in your hands:
 
-to transfer the FDF field values from the previous step to the new PDF file, `5006-r-fill-22e-filled.pdf`.
+5. Carefully examine the completed PDF forms. The executable comes with no warranty and has not been verified by
+CRA. The responsibility for the correctness of the tax return is still yours. If you notice any problem in the way the
+forms were completed please [report](https://github.com/blamario/canadian-income-tax/issues) the issue.
 
-7. Carefully examine the final PDF. The executable comes with no warranty and has not been verified by CRA. The
-reponsibility for the correctness of the tax return is still yours.
+   If at any point you find you made a mistake in your initial form entry, or you want to adjust it for any reason,
+   you can make the adjustments either on the forms you kept from step #2 or on the final forms, and feed them back in
+   step #3. The executable will overwrite all calculated fields with their proper values.
 
-8. Print and sign the tax return, then send it to CRA by mail along with your other documents. At some point they'll
-hopefully leave the 19th century and let us digitally file the same information they accept on paper, but their EFILE
-protocol is so far not open to the public.
+6. Once you're satisfied with the forms: add your ID and print the tax return, sign it, then send it to CRA by mail
+along with your other documents. At some point they'll hopefully leave the 19th century and let us digitally file the
+same information they accept on paper, but their NETFILE protocol is not open to the public so far.
 
+### Design notes and hints ###
 
-### Use for Ontario tax returns ###
+The executable `complete-canadian-taxes` follows the Unix philosophy of doing one well-defined task and no more. It
+doesn't attempt to guide you, the user, through the entire process of filing the taxes. It merely performs the task
+that is easy to automate, and therefore also the most boring. It's not likely to make the tax-filing process a joy,
+but it should at least reduce the drudgery.
 
-1. Download the fillable federal
-[(T1)](https://www.canada.ca/en/revenue-agency/services/forms-publications/tax-packages-years/general-income-tax-benefit-package/ontario/5006-r.html)
-and provincial
-[(ON428)](https://www.canada.ca/en/revenue-agency/services/forms-publications/tax-packages-years/general-income-tax-benefit-package/ontario/5006-c.html)
-PDF forms from [the canada.ca Web site](https://www.canada.ca/en/revenue-agency/services/forms-publications/tax-packages-years/general-income-tax-benefit-package/ontario.html)
+### Manual FDF mode ###
 
-2. Fill in the two downloaded forms; don't bother with any fields that are copied or calculated from other fields in
-the two forms, that part will be performed automatically.
+   The executable `complete-canadian-taxes` automatically invokes `pdftk` to convert between PDF and FDF files. It
+   needs to be installed and in the executable path. If you'd prefer to handle the conversions manually, you can
+   replace step 4 with the following procedure:
 
-3. Save the filled-out PDF forms.
+41. Run
 
-4. Run
+        pdftk 5006-r-fill-23e.pdf generate_fdf output 5006-r-fill-23e-filled.fdf
 
-       pdftk 5006-r-fill-22e.pdf generate_fdf output 5006-r-fill-22e-filled.fdf
-       pdftk 5006-c-fill-22e.pdf generate_fdf output 5006-c-fill-22e-filled.fdf
+    where `5006-r-fill-23e.pdf` is the file you previously saved and `5006-r-fill-23e-filled.fdf` is the name of the
+    output file; feel free to change them.
 
-where `5006-r-fill-22e.pdf` and `5006-c-fill-22e.pdf` are the two PDFs you previously saved and
-`*-filled.fdf` are the names of the output FDF files; feel free to change them.
+42. Run
 
-5. Run
+        complete-canadian-taxes <province code> --t1 5006-r-fill-23e-filled.fdf -o completed/
 
-       mkdir completed/
-       complete-canadian-taxes --t1 5006-r-fill-22e-filled.fdf --on428 5006-c-fill-22e-filled.fdf -o completed/
+    to complete all the field calculations and store the result in the output file
+    `completed/5006-r-fill-23e-filled.fdf`.
 
-   to complete all the field calculations and store the result in the output directory `completed/`.
+43. Run
 
-6. Run
+        pdftk 5006-r-fill-23e.pdf fill_form completed/5006-r-fill-23e-filled.fdf output 5006-r-fill-23e-completed.pdf
 
-       pdftk 5006-r-fill-22e.pdf fill_form completed/5006-r-fill-22e-filled.fdf output completed/5006-r-fill-22e.pdf
-       pdftk 5006-c-fill-22e.pdf fill_form completed/5006-c-fill-22e-filled.fdf output completed/5006-c-fill-22e.pdf
+    to transfer the FDF field values from the previous step to the new PDF file, `5006-r-fill-23e-completed.pdf`.
 
-to transfer the FDF field values from the previous step to the new PDF files in the `completed/` directory.
+The FDF files are almost (but not quite) text files, which makes them `diff`able. You can use this to quickly compare
+the effects of different changes without eyeballing through the PDF forms.
 
-7. Carefully examine the final PDF outputs. The executable comes with no warranty and has not been verified by
-CRA. The reponsibility for the tax returns' correctness is still yours.
+## Web service ##
 
-8. Print the PDFs, sign the tax return, then send it to CRA by mail along with the rest of your documents. At some
-point they'll hopefully open a way to digitally file the same information they accept on paper, but their EFILE
-protocol is so far not open to the public.
+There's also an interactive Web server executable named `serve-canadian-taxes`. Launch the executable, visit
+[http://localhost:3000](http://localhost:3000) in your browser, and follow the instructions.
 
 ## Installation ##
 
-As you can see from the above instructions, you'll need to install the free `pdftk` executable to deal with
-PDF <-> FDF conversion. See [their instructions](https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/). On
-Ubuntu you can simply run
+As you can deduce from the above instructions, you'll need to install the free `pdftk` executable to deal with PDF <->
+FDF conversion. See [their instructions](https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/). On Ubuntu you can
+simply run
 
     sudo apt install pdftk
 
-To install the `complete-canadian-t1-form` executable, you'll need Haskell development tools. The simplest
+while on Fedora the invocation is
+
+    sudo dnf install pdftk-java
+
+To install the `complete-canadian-taxes` executable, you'll need Haskell development tools. The simplest
 procedure overall is to install [`ghcup`](https://www.haskell.org/ghcup/), then use it to install `ghc`
 (version 9.4 or greater) and `cabal`, then to run
 
     cabal install canadian-income-tax
 
-## Design notes and hints ##
-
-The executable `complete-canadian-taxes` follows the Unix philosphy of doing one well-defined thing. It doesn't
-attempt to guide you, the user, through the entire process of filing the taxes. It merely performs the task that is
-easy to automate, and therefore also the most boring. It's not likely to make the tax-filing process a joy, but at
-least it's going to reduce the drudgery.
-
-If at any point you find you made a mistake in your initial form entry, or you want to adjust it for any reason, you
-can make the adjustments either on the forms you kept from step #2 or on the final forms, and feed them back in
-step #3. The executable will overwrite all calculated fields with theit proper values.
+## Library documentation ##
 
-The FDF files are almost text files, which makes them `diff`able. You can use this to quickly compare the effect of
-different changes without eyeballing through the PDF forms.
+This is an open-source project licensed under GPL-3, and it comes with a library for easier reuse. The rendered
+library documentation is available at [Hackage](https://hackage.haskell.org/package/canadian-income-tax).
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,5 +1,8 @@
+{-# LANGUAGE Haskell2010 #-}
 {-# LANGUAGE ImportQualifiedPost #-}
 {-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Main where
@@ -7,91 +10,128 @@
 import Codec.Archive.Tar qualified as Tar
 import Codec.Archive.Tar.Entry (fileEntry, toTarPath)
 import Control.Applicative ((<**>), optional)
-import Control.Monad (when)
-import Control.Monad.Trans.State.Strict (get, put, evalState)
+import Control.Arrow ((&&&))
+import Control.Monad (unless, void, when)
+import Data.ByteString (ByteString)
 import Data.ByteString qualified as ByteString
+import Data.ByteString.Lazy qualified as Lazy
 import Data.ByteString.Lazy qualified as ByteString.Lazy
-import Options.Applicative (Parser, execParser,
-                            helper, info, long, metavar, progDesc, short, strArgument, strOption, switch, value)
-import System.Directory (doesDirectoryExist)
+import Data.CAProvinceCodes qualified as Province
+import Data.Char (toUpper)
+import Data.Foldable (toList)
+import Data.List (intercalate, sortOn)
+import Data.Map.Lazy qualified as Map
+import Data.Maybe (catMaybes)
+import Data.Semigroup (Any (Any))
+import Data.Semigroup.Cancellative (isPrefixOf, isSuffixOf)
+import Data.Text (Text)
+import Options.Applicative (Parser, ReadM, long, metavar, short)
+import Options.Applicative qualified as OptsAp
+import Rank2 qualified
+import System.Directory (createDirectoryIfMissing, doesDirectoryExist, doesFileExist)
 import System.FilePath (replaceDirectory, takeFileName)
 import System.IO (hPutStrLn, stderr)
-import Text.FDF (parse, serialize)
+import Text.FDF (FDF, parse, serialize)
 
+import Tax.Canada (completeForms)
+import Tax.FDF (FDFs)
 import Tax.FDF qualified as FDF
-import Tax.Canada (fixOntarioReturns, fixON428, fixT1, on428Fields, t1Fields)
+import Tax.PDFtk (fdf2pdf, pdf2fdf)
 
 main :: IO ()
-main = execParser (info optionsParser $ progDesc "Update all calculated fields in a Canadian T1 tax form")
+main = OptsAp.execParser (OptsAp.info optionsParser
+                          $ OptsAp.progDesc "Update all calculated fields in a Canadian T1 tax form")
        >>= process
 
 data Options = Options {
-   t1InputPath :: Maybe FilePath,
-   on428InputPath :: Maybe FilePath,
+   province :: Province.Code,
+   t1InputPath :: FilePath,
+   p428InputPath :: Maybe FilePath,
+   p479InputPath :: Maybe FilePath,
+   schedule6InputPath :: Maybe FilePath,
+   schedule7InputPath :: Maybe FilePath,
+   schedule9InputPath :: Maybe FilePath,
+   schedule11InputPath :: Maybe FilePath,
    outputPath :: FilePath,
    verbose :: Bool}
 
-
 optionsParser :: Parser Options
 optionsParser =
    Options
-   <$> optional (strOption (long "t1" <> metavar "<input T1 FDF file>"))
-   <*> optional (strOption (long "on428" <> metavar "<input ON428 FDF file>"))
-   <*> strOption (short 'o' <> long "output" <> value "-" <> metavar "<output FDF file>")
-   <*> switch (short 'v' <> long "verbose")
-   <**> helper
+   <$> OptsAp.argument readProvince (metavar "<two-letter province code>")
+   <*> OptsAp.strOption (long "t1" <> metavar "<input T1 form file>")
+   <*> optional (OptsAp.strOption (long "428" <> metavar "<input 428 form file>"))
+   <*> optional (OptsAp.strOption (long "479" <> metavar "<input 479 form file>"))
+   <*> optional (OptsAp.strOption (long "s6" <> metavar "<input Schedule 6 form file>"))
+   <*> optional (OptsAp.strOption (long "s7" <> metavar "<input Schedule 7 form file>"))
+   <*> optional (OptsAp.strOption (long "s9" <> metavar "<input Schedule 9 form file>"))
+   <*> optional (OptsAp.strOption (long "s11" <> metavar "<input Schedule 11 form file>"))
+   <*> OptsAp.strOption (short 'o' <> long "output" <> OptsAp.value "-" <> metavar "<output file or directory>")
+   <*> OptsAp.switch (short 'v' <> long "verbose")
+   <**> OptsAp.helper
 
+readProvince :: ReadM Province.Code
+readProvince = OptsAp.eitherReader (tryRead . map toUpper)
+   where tryRead s = case reads s
+                     of [(p, "")] -> Right p
+                        _ -> Left ("Invalid province code " <> s <> " - expecting one of "
+                                   <> intercalate ", " (onLast ("or " <>) $ show <$> Province.all))
+         onLast f [x] = [f x]
+         onLast f (x:xs) = x : onLast f xs
+         onLast _ [] = []
 
+readFDF :: FilePath -> IO (Bool, Lazy.ByteString)
+readFDF inputPath = do
+   exists <- doesFileExist inputPath
+   unless (inputPath == "-" || exists) (error $ "Input file " <> show inputPath <> " doesn't exist.")
+   content <- if inputPath == "-" then ByteString.Lazy.getContents else ByteString.Lazy.readFile inputPath
+   if "%FDF-1." `isPrefixOf` content
+      then pure (False, content)
+      else if "%PDF-1." `isPrefixOf` content
+           then either error ((,) True) <$> pdf2fdf content
+           else error "Expecting an FDF or PDF file"
+
 process :: Options -> IO ()
-process Options{t1InputPath, on428InputPath, outputPath, verbose} = do
-   let read path = if path == "-" then ByteString.getContents else ByteString.readFile path
-       writeFrom inputPath content =
+process Options{province, t1InputPath, p428InputPath, p479InputPath,
+                schedule6InputPath, schedule7InputPath, schedule9InputPath, schedule11InputPath,
+                outputPath, verbose} = do
+   let inputFiles :: [(Text, FilePath)]
+       inputFiles = sortOn fst $
+                    catMaybes [(,) "T1"  <$> Just t1InputPath,
+                               (,) "428" <$> p428InputPath,
+                               (,) "479" <$> p479InputPath,
+                               (,) "Schedule6" <$> schedule6InputPath,
+                               (,) "Schedule7" <$> schedule7InputPath,
+                               (,) "Schedule9" <$> schedule9InputPath,
+                               (,) "Schedule11" <$> schedule11InputPath]
+   inputs <- traverse (traverse readFDF) inputFiles :: IO [(Text, (Bool, Lazy.ByteString))]
+   let writeFrom :: FilePath -> Bool -> ByteString.ByteString -> IO ()
+       writeFrom inputPath asPDF content = do
+          content' <- (if asPDF then (either error Lazy.toStrict <$>) . fdf2pdf inputPath . Lazy.fromStrict else pure) content
           if outputPath == "-"
-          then ByteString.putStr content
-          else do isDir <- doesDirectoryExist outputPath
-                  if isDir
-                     then ByteString.writeFile (replaceDirectory inputPath outputPath) content
-                     else ByteString.writeFile outputPath content
-   case (t1InputPath, on428InputPath) of
-      (Nothing, Nothing) -> error "You must specify a T1 form, ON428 form, or both."
-      (Just path, Nothing) -> do
-         bytes <- read path
-         case parse bytes >>= \x-> (,) x <$> FDF.load t1Fields x of
-            Left err -> error err
-            Right (fdf, form) -> do
-               let fdf' = FDF.update t1Fields form' fdf
-                   form' = fixT1 form
-               when verbose (hPutStrLn stderr $ show form')
-               writeFrom path (serialize fdf')
-      (Nothing, Just path) -> do
-         bytes <- read path
-         case parse bytes >>= \x-> (,) x <$> FDF.load on428Fields x of
-            Left err -> error err
-            Right (fdf, form) -> do
-               let fdf' = FDF.update on428Fields form' fdf
-                   form' = fixON428 form
-               when verbose (hPutStrLn stderr $ show form')
-               writeFrom path (serialize fdf')
-      (Just pathT1, Just pathON) -> do
-         bytesT1 <- read pathT1
-         bytesON <- read pathON
-         case (,) <$> (parse bytesT1 >>= \x-> (,) x <$> FDF.load t1Fields x)
-                  <*> (parse bytesON >>= \x-> (,) x <$> FDF.load on428Fields x) of
-            Left err -> error err
-            Right ((fdfT1, formT1), (fdfON, formON)) -> do
-               let fdf'T1 = serialize $ FDF.update t1Fields form'T1 fdfT1
-                   fdf'ON = serialize $ FDF.update on428Fields form'ON fdfON
-                   (form'T1, form'ON) = fixOntarioReturns (formT1, formON)
-                   fdfEntry path content =
-                      (`fileEntry` ByteString.Lazy.fromStrict content) <$> toTarPath False (takeFileName path)
-                   tarEntries = sequenceA [fdfEntry pathT1 fdf'T1,
-                                           fdfEntry pathON fdf'ON]
-                   tarFile = either (error . ("Can't tar: " <>)) (ByteString.Lazy.toStrict . Tar.write) tarEntries 
-               when verbose (hPutStrLn stderr $ show (form'T1, form'ON))
-               if outputPath == "-"
-                  then ByteString.putStr tarFile
-                  else do isDir <- doesDirectoryExist outputPath
-                          if isDir
-                             then do writeFrom pathT1 fdf'T1
-                                     writeFrom pathON fdf'ON
-                             else ByteString.writeFile outputPath tarFile
+             then ByteString.putStr content'
+             else do
+                isDir <- doesDirectoryExist outputPath
+                if isDir
+                   then ByteString.writeFile (replaceDirectory inputPath outputPath) content'
+                   else ByteString.writeFile outputPath content'
+       paths = snd <$> inputFiles :: [FilePath]
+       arePDFs = fst . snd <$> inputs
+       bytesMap = Lazy.toStrict . snd <$> Map.fromAscList inputs
+   case traverse parse bytesMap >>= completeForms province of
+      Left err -> error err
+      Right fixedFDFs -> do
+         let bytesMap' = serialize <$> fixedFDFs
+             byteses' = toList bytesMap'
+             tarEntries = sequenceA (zipWith fdfEntry paths byteses')
+             fdfEntry path content =
+                (`fileEntry` ByteString.Lazy.fromStrict content) <$> toTarPath False (takeFileName path)
+             tarFile = either (error . ("Can't tar: " <>)) (ByteString.Lazy.toStrict . Tar.write) tarEntries
+         -- when verbose (hPutStrLn stderr $ show (form'T1, form'ON))
+         when ("/" `isSuffixOf` outputPath) (createDirectoryIfMissing True outputPath)
+         if outputPath == "-"
+            then ByteString.putStr tarFile
+            else do isDir <- doesDirectoryExist outputPath
+                    if isDir
+                       then void $ sequenceA (zipWith3 writeFrom paths arePDFs byteses')
+                       else ByteString.writeFile outputPath tarFile
diff --git a/canadian-income-tax.cabal b/canadian-income-tax.cabal
--- a/canadian-income-tax.cabal
+++ b/canadian-income-tax.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               canadian-income-tax
-version:            2022.2.1
+version:            2023.0
 
 synopsis: Canadian income tax calculation
 
@@ -16,34 +16,78 @@
 author:             Mario Blažević
 maintainer:         blamario@protonmail.com
 bug-reports:        https://github.com/blamario/canadian-income-tax/issues
-tested-with:        ghc == 9.4.4
+tested-with:        ghc == 9.4.4, ghc == 9.6.3
 
-extra-source-files: CHANGELOG.md, README.md
+extra-doc-files:    CHANGELOG.md, README.md
+data-dir:           data/
+data-files:         **/*.fdf **/*.pdf
 source-repository head
   type:     git
   location: https://github.com/blamario/canadian-income-tax
 
 library
     exposed-modules:
-        Tax.FDF
         Tax.Canada
-        Tax.Canada.T1.Types
-        Tax.Canada.T1.FieldNames
-        Tax.Canada.T1.Fix
-        Tax.Canada.ON428.Types
-        Tax.Canada.ON428.FieldNames
-        Tax.Canada.ON428.Fix
+        Tax.Canada.Federal
+        Tax.Canada.Federal.Schedule6
+        Tax.Canada.Federal.Schedule7
+        Tax.Canada.Federal.Schedule9
+        Tax.Canada.Federal.Schedule11
+        Tax.Canada.Province.AB
+        Tax.Canada.Province.BC
+        Tax.Canada.Province.MB
+        Tax.Canada.Province.NB
+        Tax.Canada.Province.NL
+        Tax.Canada.Province.ON
+        Tax.Canada.Province.PE
+        Tax.Canada.Province.QC
+        Tax.Canada.Territory.NT
+        Tax.Canada.Territory.NU
+        Tax.Canada.Territory.YT
+        Tax.Canada.Shared
+        Tax.Canada.T1
+        Tax.FDF
+        Tax.PDFtk
         Tax.Util
 
-    -- Modules included in this library but not exported.
-    -- other-modules:
+    other-modules:
+        Tax.Canada.T1.Types
+        Tax.Canada.T1.FieldNames.AB
+        Tax.Canada.T1.FieldNames.BC
+        Tax.Canada.T1.FieldNames.NB
+        Tax.Canada.T1.FieldNames.NL
+        Tax.Canada.T1.FieldNames.NT
+        Tax.Canada.T1.FieldNames.NU
+        Tax.Canada.T1.FieldNames.ON
+        Tax.Canada.T1.FieldNames.PE
+        Tax.Canada.T1.FieldNames.QC
+        Tax.Canada.T1.FieldNames.YT
+        Tax.Canada.T1.Fix
+        Tax.Canada.Province.AB.AB428.Types
+        Tax.Canada.Province.AB.AB428.FieldNames
+        Tax.Canada.Province.AB.AB428.Fix
+        Tax.Canada.Province.BC.BC428.Types
+        Tax.Canada.Province.BC.BC428.FieldNames
+        Tax.Canada.Province.BC.BC428.Fix
+        Tax.Canada.Province.BC.BC479.Types
+        Tax.Canada.Province.BC.BC479.FieldNames
+        Tax.Canada.Province.BC.BC479.Fix
+        Tax.Canada.Province.MB.MB428.Types
+        Tax.Canada.Province.MB.MB428.FieldNames
+        Tax.Canada.Province.MB.MB428.Fix
+        Tax.Canada.Province.ON.ON428.Types
+        Tax.Canada.Province.ON.ON428.FieldNames
+        Tax.Canada.Province.ON.ON428.Fix
+        Tax.Canada.Province.ON.ON479.Types
+        Tax.Canada.Province.ON.ON479.FieldNames
+        Tax.Canada.Province.ON.ON479.Fix
 
     -- LANGUAGE extensions used by modules in this package.
     -- other-extensions:
-    build-depends:    base == 4.*, text >= 1.0 && < 2.1,
-                      time == 1.*, containers >= 0.5 && < 0.7,
-                      monoid-subclasses == 1.*, rank2classes ^>= 1.5,
-                      ca-province-codes == 1.0.*, forms-data-format ^>= 0.2,
+    build-depends:    base == 4.*, text >= 1.0 && < 2.2, bytestring >= 0.10.4 && < 1,
+                      time == 1.*, containers >= 0.5 && < 0.8, bitwise-enum ^>= 1.0.0, bifunctors ^>= 5.6,
+                      monoid-subclasses == 1.*, rank2classes ^>= 1.5.3, deep-transformations ^>= 0.2.2,
+                      ca-province-codes == 1.0.*, forms-data-format ^>= 0.2, typed-process >= 0.1 && ^>=0.2,
                       template-haskell == 2.*
     hs-source-dirs:   src
     default-language: Haskell2010
@@ -57,10 +101,61 @@
     -- LANGUAGE extensions used by modules in this package.
     -- other-extensions:
     build-depends:
-        base == 4.*, text, bytestring >= 0.10.4 && < 1, transformers >= 0.1 && < 0.7,
-        rank2classes, optparse-applicative >= 0.15 && < 0.18,
+        base == 4.*, text, bytestring, containers,
+        monoid-subclasses, rank2classes,
+        optparse-applicative >= 0.15 && < 0.19,
         filepath >= 1.3 && < 1.5, directory >= 1.2 && < 1.4, tar >= 0.4 && < 0.6,
+        ca-province-codes,
         forms-data-format, canadian-income-tax
 
     hs-source-dirs:   app
     default-language: Haskell2010
+
+executable serve-canadian-taxes
+    main-is:          Main.hs
+    other-modules:    Paths_canadian_income_tax
+    autogen-modules:  Paths_canadian_income_tax
+
+    -- Modules included in this executable, other than Main.
+    -- other-modules:
+
+    -- LANGUAGE extensions used by modules in this package.
+    -- other-extensions:
+    build-depends:
+        base == 4.*, text, bytestring, containers, monoid-subclasses,
+        filepath >= 1.3 && < 1.5, unix >= 2.6 && < 2.9, directory >= 1.2 && < 1.4,
+        time >= 1.9.1 && < 1.13, zip-archive ^>= 0.4,
+        http-types ^>= 0.12, scotty ^>= 0.21, wai-extra ^>= 3.1.10, wai-middleware-static ^>= 0.9.1,
+        forms-data-format, canadian-income-tax
+
+    hs-source-dirs:   web
+    default-language: Haskell2010
+    ghc-options: -threaded
+
+test-suite             properties
+    type:                exitcode-stdio-1.0
+    build-depends:       base >= 4.7 && < 5, bytestring,
+                         directory ^>= 1.3, filepath ^>= 1.4,
+                         forms-data-format, monoid-subclasses, rank2classes, deep-transformations,
+                         text, time >= 1.9.1 && < 1.13, ca-province-codes,
+                         tasty >= 0.7, tasty-hedgehog ^>= 1.4, hedgehog ^>= 1.4,
+                         canadian-income-tax
+    hs-source-dirs:      test
+    main-is:             Properties.hs
+    other-modules:       Test.Transformations
+                         Paths_canadian_income_tax
+    autogen-modules:     Paths_canadian_income_tax
+    default-language:    Haskell2010
+
+test-suite             regression
+    type:                exitcode-stdio-1.0
+    build-depends:       base >= 4.7 && < 5, bytestring, containers,
+                         directory ^>= 1.3, filepath ^>= 1.4,
+                         forms-data-format,
+                         rank2classes, deep-transformations,
+                         text, time >= 1.9.1 && < 1.13, ca-province-codes,
+                         tasty >= 0.7, tasty-golden ^>=2.3,
+                         canadian-income-tax
+    hs-source-dirs:      test
+    main-is:             Regression.hs
+    default-language:    Haskell2010
diff --git a/data/428/5006-c-fill-23e.fdf b/data/428/5006-c-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/428/5006-c-fill-23e.fdf
@@ -0,0 +1,1258 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line52[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line54[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line50[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Min-Tax-Carryover[0])
+/Kids [
+<<
+/T (Line59[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line58[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line60[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line56[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line61[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Donations[0])
+/Kids [
+<<
+/T (Line49[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line44[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line53[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line55[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line51[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Medical-Expenses[0])
+/Kids [
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (3%)
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line45[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (5.05%)
+>>]
+>> 
+<<
+/T (Line43[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Line77[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line76[0])
+/Kids [
+<<
+/T (Line_60970[0])
+/Kids [
+<<
+/T (Number[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line80[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line74[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (274.00)
+>>]
+>> 
+<<
+/T (Line75[0])
+/Kids [
+<<
+/T (Line_60969[0])
+/Kids [
+<<
+/T (Number[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line78[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line79[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line73[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line70[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line72[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line71[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line66[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (ON-Surtax[0])
+/Kids [
+<<
+/T (Line65[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line64[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line63[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line68[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line67[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line69[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line82[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line81[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line62[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Chart[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (11.16%)
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (6,990.89)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (98,463.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (13.16%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (21,254.42)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (220,000.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (12.16%)
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (12,742.42)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (150,000.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (9.15%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (2,486.17)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (49,231.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (5.05%)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (0.00)
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (0.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Part_B[0])
+/Kids [
+<<
+/T (Employment-Insurance[0])
+/Kids [
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Eligible-Dependant[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (11,082.00)
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (CPP-QPP[0])
+/Kids [
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Spouse-Amount[0])
+/Kids [
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (11,082.00)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Line90[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line89[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line86[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line85[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line87[0])
+/Kids [
+<<
+/T (Line62150[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line88[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (ON_Health_Prenium-worksheet[0])
+/Kids [
+<<
+/T (Chart_ON_Health_Prenium[0])
+/Kids [
+<<
+/T (Taxable_Line8[0])
+/Kids [
+<<
+/T (Amount3[0])
+/V ()
+>> 
+<<
+/T (Amount4[0])
+/V ()
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Taxable_Line10[0])
+/Kids [
+<<
+/T (Amount4[0])
+/V ()
+>> 
+<<
+/T (Amount3[0])
+/V ()
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Taxable_Line6[0])
+/Kids [
+<<
+/T (Amount3[0])
+/V ()
+>> 
+<<
+/T (Amount4[0])
+/V ()
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Taxable_Line4[0])
+/Kids [
+<<
+/T (Amount4[0])
+/V ()
+>> 
+<<
+/T (Amount3[0])
+/V ()
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Taxable_Line2[0])
+/Kids [
+<<
+/T (Amount3[0])
+/V ()
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/428/5007-c-fill-23e.fdf b/data/428/5007-c-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/428/5007-c-fill-23e.fdf
@@ -0,0 +1,898 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line53[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line52[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (10.8%)
+>>]
+>> 
+<<
+/T (Line54[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line55[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line49[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line56[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line50[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line51[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (MedicalExpenses[0])
+/Kids [
+<<
+/T (Line48[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (3%)
+>>]
+>> 
+<<
+/T (Line46[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line77[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line75[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line79[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line58[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line73[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line71[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line65[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line63[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line67[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line69[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line82[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line61[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line76[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line80[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line74[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line78[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line59[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line70[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line72[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line66[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line64[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line68[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line60[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line81[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line62[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Table[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (17.4%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (9,433.77)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (79,625.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (10.8%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (0.00)
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (0.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (12.75%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (3,978.94)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (36,842.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (9,134.00)
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (9,134.00)
+>>]
+>> 
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (line13[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/428/5009-c-fill-23e.fdf b/data/428/5009-c-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/428/5009-c-fill-23e.fdf
@@ -0,0 +1,942 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (PartB_Page2[0])
+/Kids [
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line50[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line51[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (MedicalExp[0])
+/Kids [
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (PercentAmount[0])
+/V (3%)
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (DonationGift[0])
+/Kids [
+<<
+/T (Line49[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line45[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (10%)
+>>]
+>> 
+<<
+/T (Line43[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line53[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line52[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line54[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line55[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line58[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line59[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line56[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (PoliticalCont[0])
+/Kids [
+<<
+/T (Line65[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line66[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line64[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line63[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (UAITC[0])
+/Kids [
+<<
+/T (Line67[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line68[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line69[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line60[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line61[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line62[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Line19to20[0])
+/Kids [
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11to13[0])
+/Kids [
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 21,003.00)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14to16[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 21,003.00)
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Chart[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 17,644.28)
+>>]
+>> 
+<<
+/T (LIne5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ( 13%)
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 170,751.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ( 15%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 40,980.25)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 341,502.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ( 14%)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 25,043.49)
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 227,668.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ( 10%)
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 0.00)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 0.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ( 12%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 14,229.20)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_Fixed[0])
+/V ( 142,292.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line21to22[0])
+/Kids [
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/428/5010-c-fill-23e.fdf b/data/428/5010-c-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/428/5010-c-fill-23e.fdf
@@ -0,0 +1,1182 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line52[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line54[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line58[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line56[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (I2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line53[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line55[0])
+/Kids [
+<<
+/T (PercentAmount_ReadOnly[0])
+/V (5.06%)
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line59[0])
+/Kids [
+<<
+/T (Gifts_from_57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (MedicalExp[0])
+/Kids [
+<<
+/T (Line49[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48[0])
+/Kids [
+<<
+/T (PercentAmount_ReadOnly[0])
+/V (3%)
+>>]
+>> 
+<<
+/T (Line47[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line50[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line51[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line60[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Line77[0])
+/Kids [
+<<
+/T (PercentAmount_ReadOnly[0])
+/V (3.56%)
+>>]
+>> 
+<<
+/T (Line75[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 23,179.00)
+>>]
+>> 
+<<
+/T (Line79[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line73[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line71[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line65[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line90[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line63[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line86[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line67[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line69[0])
+/Kids [
+<<
+/T (Line120[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line88[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line61[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line82[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line76[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line80[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line74[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line78[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line70[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line72[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line89[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line91[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line66[0])
+/Kids [
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line64[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line68[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line85[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line87[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line81[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line62[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount_Eligible_Dependant[0])
+/Kids [
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ( 11,285.00)
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Spouse_CPL_Amount[0])
+/Kids [
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ( 11,285.00)
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column7[0])
+/Kids [
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (240,716.00)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (20.5%)
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (28,109.25)
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (10.5%)
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 5,825.60)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 91,310.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column6[0])
+/Kids [
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (172,602.00)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Percent_amount[0])
+/V (16.8%)
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (16,666.10)
+>>]
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (LIne15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (127,299.00)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (14.7%)
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V (10,006.56)
+>>]
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (12.29%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 7,245.73)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 104,835.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (5.06%)
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 0.00)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 0.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Percent_Amount[0])
+/V (7.7%)
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 2,310.09)
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 45,654.00)
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/479/5006-tc-fill-23e.fdf b/data/479/5006-tc-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/479/5006-tc-fill-23e.fdf
@@ -0,0 +1,270 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (ON_Political_Contribution[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Line63220[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (ON_coop_education[0])
+/Kids [
+<<
+/T (Line63265[0])
+/Kids [
+<<
+/T (RadioButtonGroup[0])
+/V /
+>>]
+>> 
+<<
+/T (Line63260[0])
+/Kids [
+<<
+/T (NmbrApprentices[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line63270[0])
+/Kids [
+<<
+/T (BusinessNumber_9_Comb_Bottom_Adv[0])
+/Kids [
+<<
+/T (BusinessNumber[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V (35,000.00)
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (5%)
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Line63100[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Percent_ReadOnly[0])
+/V (25%)
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/479/5010-tc-fill-23e.fdf b/data/479/5010-tc-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/479/5010-tc-fill-23e.fdf
@@ -0,0 +1,634 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (BCMETC[0])
+/Kids [
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (BCTTC[0])
+/Kids [
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (I2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (BCVCTC[0])
+/Kids [
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Account_Number_Comb_EN[0])
+/Kids [
+<<
+/T (Account_Number[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Note1[0])
+/V /
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Note1[0])
+/V /
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Account_Number[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (I2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (BCCBTC[0])
+/Kids [
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (I2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (I2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (I1[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Table[0])
+/Kids [
+<<
+/T (Row1[0])
+/Kids [
+<<
+/T (Nameoflandlord[0])
+/V ()
+>> 
+<<
+/T (Rentaladdress[0])
+/V ()
+>> 
+<<
+/T (Numberofmonths[0])
+/V ()
+>> 
+<<
+/T (RentPaid[0])
+/V ()
+>>]
+>> 
+<<
+/T (Headers[0])
+/Kids [
+<<
+/T (Footnote1[0])
+/V /
+>>]
+>> 
+<<
+/T (Row2[0])
+/Kids [
+<<
+/T (Nameoflandlord[0])
+/V ()
+>> 
+<<
+/T (Rentpaid[0])
+/V ()
+>> 
+<<
+/T (Rentaladdress[0])
+/V ()
+>> 
+<<
+/T (Numberofmonths[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (PercentAmount_ReadOnly[0])
+/V (2%)
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount_ReadOnly[0])
+/V ( 400.00)
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (AmountRead_Only[0])
+/V ( 60,000.00)
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (L1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (L2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Chart[0])
+/Kids [
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Col2_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Col2_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Col2_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Col2_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Col2_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Col1_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Col1_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Col1_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Col1_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Col1_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (BCSHRTC[0])
+/Kids [
+<<
+/T (Line60890[0])
+/Kids [
+<<
+/T (CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Line60480[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (Background[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (Background[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Background[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/5000-s11-fill-23e.fdf b/data/5000-s11-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/5000-s11-fill-23e.fdf
@@ -0,0 +1,302 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Transfer_CF[0])
+/Kids [
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount25[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount20[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount18[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount19[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount24[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount21[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount22[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount22[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Enrolment[0])
+/Kids [
+<<
+/T (Line32020[0])
+/Kids [
+<<
+/T (Fulltime_Months[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32010[0])
+/Kids [
+<<
+/T (parttime_Months[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32005[0])
+/Kids [
+<<
+/T (CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (YourTuition[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Amount6[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount7[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount8[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount11[0])
+/V ()
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount11[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount10[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount13[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount12[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount17[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount15[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount14[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount16[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/5000-s6-fill-23e.fdf b/data/5000-s6-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/5000-s6-fill-23e.fdf
@@ -0,0 +1,758 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Step1_tickboxes[0])
+/Kids [
+<<
+/T (Questions[0])
+/Kids [
+<<
+/T (Line38104[0])
+/Kids [
+<<
+/T (Line38104_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38104_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38104_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Line38103[0])
+/Kids [
+<<
+/T (Line38103_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38103_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38103_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Line38101[0])
+/Kids [
+<<
+/T (Line38101_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38101_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38101_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Line38102[0])
+/Kids [
+<<
+/T (Line38102_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38102_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38102_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Line38105[0])
+/Kids [
+<<
+/T (Note1[0])
+/V /
+>> 
+<<
+/T (Line38105_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38105_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38105_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Line38100[0])
+/Kids [
+<<
+/T (Line38100_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line38100_CheckBox_EN[1])
+/V /
+>> 
+<<
+/T (Line38100_CheckBox_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Chart[0])
+/Kids [
+<<
+/T (Line5_Sub[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (line4[0])
+/Kids [
+<<
+/T (Note1[0])
+/V /
+>> 
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Note2[0])
+/V /
+>> 
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Chart[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line49[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Step3[0])
+/Kids [
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line36[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line37[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ( 1,150.00)
+>>]
+>> 
+<<
+/T (Line33[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (27%)
+>>]
+>> 
+<<
+/T (Line41[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line39[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line38[0])
+/Kids [
+<<
+/T (Percent[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Step2[0])
+/Kids [
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (27%)
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ( 3,000.00)
+>>]
+>> 
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/5000-s7-fill-23e.fdf b/data/5000-s7-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/5000-s7-fill-23e.fdf
@@ -0,0 +1,334 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Note1[0])
+/V /
+>> 
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (PartE[0])
+/Kids [
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Box_Line27[0])
+/V /
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26[0])
+/Kids [
+<<
+/T (Box_Line25[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (PartD[0])
+/Kids [
+<<
+/T (Line24[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartF[0])
+/Kids [
+<<
+/T (Line29[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/5000-s9-fill-23e.fdf b/data/5000-s9-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/5000-s9-fill-23e.fdf
@@ -0,0 +1,286 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (AmountC[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line8[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line6[0])
+/Kids [
+<<
+/T (AmountA[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (AmountE[0])
+/Kids [
+<<
+/T (Amount_Line14[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line19[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line17[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount_Line14[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line16[0])
+/Kids [
+<<
+/T (NumWithoutCurrency[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (AmountG[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line5[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line7[0])
+/Kids [
+<<
+/T (AmountD[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line9[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (AmountB[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13[0])
+/Kids [
+<<
+/T (Amount_Line13[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line18[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ( 235,675.00)
+>>]
+>> 
+<<
+/T (Line15[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20[0])
+/Kids [
+<<
+/T (AmountF[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22[0])
+/Kids [
+<<
+/T (AmountH[0])
+/Kids [
+<<
+/T (Amount_Line14[0])
+/V ()
+>>]
+>> 
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5001-r-fill-23e.fdf b/data/T1/fdf/5001-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5001-r-fill-23e.fdf
@@ -0,0 +1,2206 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[1])
+/V /
+>> 
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Indian_Act[0])
+/Kids [
+<<
+/T (IndianAct_Question[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (CAI[0])
+/Kids [
+<<
+/T (AB_CAI[0])
+/Kids [
+<<
+/T (Tick_box[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ResidencyInformation[0])
+/Kids [
+<<
+/T (Question[0])
+/Kids [
+<<
+/T (Residency_CheckBox[1])
+/V /
+>> 
+<<
+/T (Residency_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Step6-Cont[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5002-r-fill-23e.fdf b/data/T1/fdf/5002-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5002-r-fill-23e.fdf
@@ -0,0 +1,2190 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Return-pg2[0])
+/Kids [
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5004-r-fill-23e.fdf b/data/T1/fdf/5004-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5004-r-fill-23e.fdf
@@ -0,0 +1,2206 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (CAI[0])
+/Kids [
+<<
+/T (CAI-2023[0])
+/Kids [
+<<
+/T (Tick_box[0])
+/V /
+>>]
+>> 
+<<
+/T (CAI_2024[0])
+/Kids [
+<<
+/T (Tick_box[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Refund_or_Balance-Owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5005-r-fill-23e.fdf b/data/T1/fdf/5005-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5005-r-fill-23e.fdf
@@ -0,0 +1,2222 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Return-pg2[0])
+/Kids [
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line58[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Part_A[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Amount_Line77[0])
+/V ()
+>> 
+<<
+/T (Amount_Line76[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Amount_Line75[0])
+/V ()
+>> 
+<<
+/T (Percent_Line74[0])
+/V (26%)
+>> 
+<<
+/T (Amount_Line71[0])
+/V ()
+>> 
+<<
+/T (Amount_Line72[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Amount_Line73[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line44Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line39Amount5[0])
+/V ()
+>> 
+<<
+/T (Line43Amount5[0])
+/V ()
+>> 
+<<
+/T (Line40Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line45Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line42Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ()
+>> 
+<<
+/T (Line44Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Amount_Line71[0])
+/V ()
+>> 
+<<
+/T (Amount_Line72[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line43Amount4[0])
+/V ()
+>> 
+<<
+/T (Line45Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Amount_Line77[0])
+/V ()
+>> 
+<<
+/T (Amount_Line76[0])
+/V ( 0.00)
+>> 
+<<
+/T (Amount_Line75[0])
+/V ()
+>> 
+<<
+/T (Percent_Line74[0])
+/V (15%)
+>> 
+<<
+/T (Amount_Line71[0])
+/V ()
+>> 
+<<
+/T (Amount_Line72[0])
+/V ( 0.00)
+>> 
+<<
+/T (Amount_Line73[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Amount_Line77[0])
+/V ()
+>> 
+<<
+/T (Amount_Line75[0])
+/V ()
+>> 
+<<
+/T (Amount_Line76[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Percent_Line74[0])
+/V (20.5%)
+>> 
+<<
+/T (Amount_Line71[0])
+/V ()
+>> 
+<<
+/T (Amount_Line72[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Amount_Line73[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Part_B[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30499_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_Number[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Step3[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22300[0])
+/Kids [
+<<
+/T (Line_22300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31215[0])
+/Kids [
+<<
+/T (Line_31215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line100[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line102[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line112[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_mount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Line32Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31210[0])
+/Kids [
+<<
+/T (Line_31210_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31205[0])
+/Kids [
+<<
+/T (Line_31205_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line85[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line105[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line113[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line146[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line122[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line125[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line128[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line134[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line133[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line135[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line136[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Line_49000_IfFeeWasCharged[0])
+/Kids [
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (EFileNumber_Comb[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45355_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line172[0])
+/Kids [
+<<
+/T (Refund_or_BalanceOwing_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43900[0])
+/Kids [
+<<
+/T (Line_43900_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_43900_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line157[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_44000_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45100[0])
+/Kids [
+<<
+/T (Line_45100_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_45100_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line151[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43800[0])
+/Kids [
+<<
+/T (Line_43800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Refund_or_Balancing-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5006-r-fill-23e.fdf b/data/T1/fdf/5006-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5006-r-fill-23e.fdf
@@ -0,0 +1,2242 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10100[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (CAI[0])
+/Kids [
+<<
+/T (CAI_ON[0])
+/Kids [
+<<
+/T (Tick_box[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Organ_donor[0])
+/Kids [
+<<
+/T (Question[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (OrganDonor_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (OrganDonor_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Line_49000_IfFeeWasCharged[0])
+/Kids [
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (EFileNumber_Comb[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45355_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (ONOpportunitiesFund2[0])
+/Kids [
+<<
+/T (Line_3[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_2[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_1[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5010-r-fill-23e.fdf b/data/T1/fdf/5010-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5010-r-fill-23e.fdf
@@ -0,0 +1,2234 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (ResidencyInformation[0])
+/Kids [
+<<
+/T (Question1[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (Residency_CheckBox1[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (Residency_CheckBox1[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Question2[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (Residency_CheckBox2[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (Residency_CheckBox2[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line1[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Step3[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5011-r-fill-23e.fdf b/data/T1/fdf/5011-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5011-r-fill-23e.fdf
@@ -0,0 +1,2242 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Step1-Continued[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (ResidencyInformation[0])
+/Kids [
+<<
+/T (Question1[0])
+/Kids [
+<<
+/T (Residency_CheckBox[1])
+/V /
+>> 
+<<
+/T (Residency_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (QuestionB[0])
+/Kids [
+<<
+/T (B_CheckBox[1])
+/V /
+>> 
+<<
+/T (B_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (QuestionA[0])
+/Kids [
+<<
+/T (A_Self_Governing_Field[0])
+/V ()
+>> 
+<<
+/T (A_IdentificationNumber[0])
+/Kids [
+<<
+/T (IdentificationNum[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10100[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line142[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43200[0])
+/Kids [
+<<
+/T (Line_43200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line4100[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Line_49000_IfFeeWasCharged[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Step6-Cont[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45355_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (sfline46800end[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line149[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line169[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44100[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5012-r-fill-23e.fdf b/data/T1/fdf/5012-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5012-r-fill-23e.fdf
@@ -0,0 +1,2230 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10100[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Step1[0])
+/Kids [
+<<
+/T (ResidencyInformation[0])
+/Kids [
+<<
+/T (Q1[0])
+/Kids [
+<<
+/T (Residency_CheckBox[1])
+/V /
+>> 
+<<
+/T (Residency_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Q2[0])
+/Kids [
+<<
+/T (ResidencyB_CheckBox[1])
+/V /
+>> 
+<<
+/T (ResidencyB_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Q3[0])
+/Kids [
+<<
+/T (B_CheckBox[1])
+/V /
+>> 
+<<
+/T (B_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5014-r-fill-23e.fdf b/data/T1/fdf/5014-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5014-r-fill-23e.fdf
@@ -0,0 +1,2214 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Step1[0])
+/Kids [
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Organ_donor[0])
+/Kids [
+<<
+/T (Question[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (OrganDonor_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (OrganDonor_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10100[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Step6-Continued[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Refund_or_Balance-owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/fdf/5015-r-fill-23e.fdf b/data/T1/fdf/5015-r-fill-23e.fdf
new file mode 100644
--- /dev/null
+++ b/data/T1/fdf/5015-r-fill-23e.fdf
@@ -0,0 +1,2202 @@
+%FDF-1.2
+%âãÏÓ
+1 0 obj
+
+<<
+/FDF 
+<<
+/Fields [
+<<
+/T (form1[0])
+/Kids [
+<<
+/T (Page2[0])
+/Kids [
+<<
+/T (Step1-Cont[0])
+/Kids [
+<<
+/T (Foreign_property[0])
+/Kids [
+<<
+/T (Line26600[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (ForeignProperty_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Tax_exempt[0])
+/Kids [
+<<
+/T (Exempt[0])
+/Kids [
+<<
+/T (Spouse_SelfEmployed[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (ElectionsCanada[0])
+/Kids [
+<<
+/T (LineA[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (A_CheckBox[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (LineB[0])
+/Kids [
+<<
+/T (Option2[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>> 
+<<
+/T (Option1[0])
+/Kids [
+<<
+/T (B_Authorize_CheckBox[0])
+/V /
+>>]
+>>]
+>>]
+>> 
+<<
+/T (CAI[0])
+/Kids [
+<<
+/T (AB_CAI[0])
+/Kids [
+<<
+/T (Tick_box[0])
+/V /
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page3[0])
+/Kids [
+<<
+/T (Return-pg3[0])
+/Kids [
+<<
+/T (Line11410[0])
+/Kids [
+<<
+/T (Line_11410_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13700[0])
+/Kids [
+<<
+/T (Line_13700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13699[0])
+/Kids [
+<<
+/T (Line_13699_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line27[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12000[0])
+/Kids [
+<<
+/T (Line_12000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14500[0])
+/Kids [
+<<
+/T (Line_14500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12600[0])
+/Kids [
+<<
+/T (Line12599[0])
+/Kids [
+<<
+/T (Line_12599_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_12600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10130[0])
+/Kids [
+<<
+/T (Line_10130_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12900[0])
+/Kids [
+<<
+/T (Line_12900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13010[0])
+/Kids [
+<<
+/T (Line_13010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line15000[0])
+/Kids [
+<<
+/T (Line_15000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12010[0])
+/Kids [
+<<
+/T (Line_12010_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10400[0])
+/Kids [
+<<
+/T (Line_10400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12905[0])
+/Kids [
+<<
+/T (Line_12905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14300[0])
+/Kids [
+<<
+/T (Line14299[0])
+/Kids [
+<<
+/T (Line_14299_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_14300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13500[0])
+/Kids [
+<<
+/T (Line13499[0])
+/Kids [
+<<
+/T (Line_13499_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_13500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11500[0])
+/Kids [
+<<
+/T (Line_11500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10100[0])
+/Kids [
+<<
+/T (Line_10100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11701[0])
+/Kids [
+<<
+/T (Line_11701_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14600[0])
+/Kids [
+<<
+/T (Line_14600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11900[0])
+/Kids [
+<<
+/T (Line_11900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line28[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14100[0])
+/Kids [
+<<
+/T (Line_14100_Amount[0])
+/V ()
+>> 
+<<
+/T (Line14099[0])
+/Kids [
+<<
+/T (Line_14099_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line11600[0])
+/Kids [
+<<
+/T (Line_11600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14700[0])
+/Kids [
+<<
+/T (Line_14700_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_14700_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14400[0])
+/Kids [
+<<
+/T (Line_14400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12700[0])
+/Kids [
+<<
+/T (Line_12700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12100[0])
+/Kids [
+<<
+/T (Line_12100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11300[0])
+/Kids [
+<<
+/T (Line_11300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12800[0])
+/Kids [
+<<
+/T (Line_12800_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_12799[0])
+/Kids [
+<<
+/T (Line_12799_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line12906[0])
+/Kids [
+<<
+/T (Line_12906_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11400[0])
+/Kids [
+<<
+/T (Line_11400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line13900[0])
+/Kids [
+<<
+/T (Line_13900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line13899[0])
+/Kids [
+<<
+/T (Line_13899_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line13000[0])
+/Kids [
+<<
+/T (Line_13000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_13000_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11905[0])
+/Kids [
+<<
+/T (Line_11905_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12200[0])
+/Kids [
+<<
+/T (Line_12200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Line_11700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10105[0])
+/Kids [
+<<
+/T (Line_10105_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line10120[0])
+/Kids [
+<<
+/T (Line_10120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line12500[0])
+/Kids [
+<<
+/T (Line_12500_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (Return-pg1[0])
+/Kids [
+<<
+/T (Identification[0])
+/Kids [
+<<
+/T (EmailAddress[0])
+/V ()
+>> 
+<<
+/T (DateDeath_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateDeath_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (PostalCode_Comb_BordersAll[0])
+/Kids [
+<<
+/T (PostalCode[0])
+/V ()
+>>]
+>> 
+<<
+/T (Your_Language[0])
+/Kids [
+<<
+/T (RadioButtonlanguaget[0])
+/V /
+>>]
+>> 
+<<
+/T (ID_City[0])
+/V ()
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_LastName[0])
+/V ()
+>> 
+<<
+/T (DateBirth_Comb_BordersAll[0])
+/Kids [
+<<
+/T (DateBirth_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (ID_FirstNameInitial[0])
+/V ()
+>> 
+<<
+/T (ID_MailingAddress[0])
+/V ()
+>> 
+<<
+/T (MaritalStatus_Checkbox[0])
+/Kids [
+<<
+/T (MaritalStatus[2])
+/V /
+>> 
+<<
+/T (MaritalStatus[1])
+/V /
+>> 
+<<
+/T (MaritalStatus[0])
+/V /
+>> 
+<<
+/T (MaritalStatus[5])
+/V /
+>> 
+<<
+/T (MaritalStatus[4])
+/V /
+>> 
+<<
+/T (MaritalStatus[3])
+/V /
+>>]
+>> 
+<<
+/T (ID_RuralRoute[0])
+/V ()
+>> 
+<<
+/T (ID_POBox[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Residence_Info[0])
+/Kids [
+<<
+/T (Prov_DropDown-Business[0])
+/V ()
+>> 
+<<
+/T (Prov_DropDown-Residence[0])
+/V ()
+>> 
+<<
+/T (Date_Departure[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Date_Entry[0])
+/Kids [
+<<
+/T (DateMMDD_Comb_BordersAll_Std[0])
+/Kids [
+<<
+/T (DateMMDD_Comb[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Prov_DropDown[0])
+/V ()
+>>]
+>> 
+<<
+/T (Info_Spouse_CLP[0])
+/Kids [
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Self-employment[0])
+/Kids [
+<<
+/T (Checkbox[0])
+/V /
+>>]
+>> 
+<<
+/T (Spouse_First_Name[0])
+/V ()
+>> 
+<<
+/T (Line11700[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (SIN_Comb_BordersAll[0])
+/Kids [
+<<
+/T (SIN_Comb[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (#pageSet[0])
+/Kids [
+<<
+/T (Page1[2])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[1])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[0])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[6])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[5])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[4])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[3])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>> 
+<<
+/T (Page1[7])
+/Kids [
+<<
+/T (ClearData_EN[0])
+/V /
+>>]
+>>]
+>> 
+<<
+/T (Page5[0])
+/Kids [
+<<
+/T (Return-pg5[0])
+/Kids [
+<<
+/T (Step4[0])
+/Kids [
+<<
+/T (Line25500[0])
+/Kids [
+<<
+/T (Line_25500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24900[0])
+/Kids [
+<<
+/T (Line_24900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line24400[0])
+/Kids [
+<<
+/T (Line_24400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25200[0])
+/Kids [
+<<
+/T (Line_25200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25600[0])
+/Kids [
+<<
+/T (Line_25600_Specify[0])
+/V ()
+>> 
+<<
+/T (Line_25600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25100[0])
+/Kids [
+<<
+/T (Line_25100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line26000[0])
+/Kids [
+<<
+/T (Line_26000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line57[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25700[0])
+/Kids [
+<<
+/T (Line_25700_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_25700_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25300[0])
+/Kids [
+<<
+/T (Line_25300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25000[0])
+/Kids [
+<<
+/T (Line_25000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line25400[0])
+/Kids [
+<<
+/T (Line_25400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line30100[0])
+/Kids [
+<<
+/T (Line_30100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30400[0])
+/Kids [
+<<
+/T (Line_30400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30300[0])
+/Kids [
+<<
+/T (Line_30300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30425[0])
+/Kids [
+<<
+/T (Line_30425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30450[0])
+/Kids [
+<<
+/T (Line_30450_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30500[0])
+/Kids [
+<<
+/T (Line_30500_Amount[0])
+/V ()
+>> 
+<<
+/T (Line30499[0])
+/Kids [
+<<
+/T (Line_30499_ChildrenNum[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line83[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30000[0])
+/Kids [
+<<
+/T (Line_30000_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartA[0])
+/Kids [
+<<
+/T (Column3[0])
+/Kids [
+<<
+/T (Line42Amount3[0])
+/V ()
+>> 
+<<
+/T (Line37Amount3[0])
+/V ( 106,717.00)
+>> 
+<<
+/T (Line39Rate3[0])
+/V (26%)
+>> 
+<<
+/T (Line41Amount3[0])
+/V ( 18,942.24)
+>> 
+<<
+/T (Line36Amount3[0])
+/V ()
+>> 
+<<
+/T (Line40Amount3[0])
+/V ()
+>> 
+<<
+/T (Line38Amount3[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column5[0])
+/Kids [
+<<
+/T (Line41Amount5[0])
+/V ( 54,578.67)
+>> 
+<<
+/T (Line36Amount5[0])
+/V ()
+>> 
+<<
+/T (Line37Amount5[0])
+/V ( 235,675.00)
+>> 
+<<
+/T (Line39Rate5[0])
+/V (33%)
+>> 
+<<
+/T (Line40Amount5[0])
+/V ()
+>> 
+<<
+/T (Line42Amount5[0])
+/V ()
+>> 
+<<
+/T (Line38Amount5[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column4[0])
+/Kids [
+<<
+/T (Line36Amount4[0])
+/V ()
+>> 
+<<
+/T (Line37Amount4[0])
+/V ( 165,430.00)
+>> 
+<<
+/T (Line39Rate4[0])
+/V (29%)
+>> 
+<<
+/T (Line41Amount4[0])
+/V ( 34,207.62)
+>> 
+<<
+/T (Line40Amount4[0])
+/V ()
+>> 
+<<
+/T (Line42Amount4[0])
+/V ()
+>> 
+<<
+/T (Line38Amount4[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column2[0])
+/Kids [
+<<
+/T (Line37Amount2[0])
+/V ( 53,359.00)
+>> 
+<<
+/T (Line41Amount2[0])
+/V ( 8,003.85)
+>> 
+<<
+/T (Line36Amount2[0])
+/V ()
+>> 
+<<
+/T (Line40Amount2[0])
+/V ()
+>> 
+<<
+/T (Line39Rate2[0])
+/V (20.5%)
+>> 
+<<
+/T (Line38Amount2[0])
+/V ()
+>> 
+<<
+/T (Line42Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Column1[0])
+/Kids [
+<<
+/T (Line38Amount1[0])
+/V ()
+>> 
+<<
+/T (Line37Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line36Amount1[0])
+/V ()
+>> 
+<<
+/T (Line39Rate1[0])
+/V (15%)
+>> 
+<<
+/T (Line40Amount1[0])
+/V ()
+>> 
+<<
+/T (Line41Amount1[0])
+/V ( 0.00)
+>> 
+<<
+/T (Line42Amount1[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page4[0])
+/Kids [
+<<
+/T (Return-pg4[0])
+/Kids [
+<<
+/T (Line23400[0])
+/Kids [
+<<
+/T (Line_23400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22000[0])
+/Kids [
+<<
+/T (Line21999[0])
+/Kids [
+<<
+/T (Line_21999_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line_22000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23100[0])
+/Kids [
+<<
+/T (Line_23100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22900[0])
+/Kids [
+<<
+/T (Line_22900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23200[0])
+/Kids [
+<<
+/T (Line_23200_Amount[0])
+/V ()
+>> 
+<<
+/T (Line_23200_Specify[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23500[0])
+/Kids [
+<<
+/T (Line_23500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21500[0])
+/Kids [
+<<
+/T (Line_21500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20700[0])
+/Kids [
+<<
+/T (Line_20700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21200[0])
+/Kids [
+<<
+/T (Line_21200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21000[0])
+/Kids [
+<<
+/T (Line_21000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21900[0])
+/Kids [
+<<
+/T (Line_21900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22400[0])
+/Kids [
+<<
+/T (Line_22400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20800[0])
+/Kids [
+<<
+/T (Line_20800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22100[0])
+/Kids [
+<<
+/T (Line_22100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22215[0])
+/Kids [
+<<
+/T (Line_22215_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21300[0])
+/Kids [
+<<
+/T (Line_21300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line22200[0])
+/Kids [
+<<
+/T (Line_22200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20810[0])
+/Kids [
+<<
+/T (Line_20810_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23600[0])
+/Kids [
+<<
+/T (Line_23600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20805[0])
+/Kids [
+<<
+/T (Line_20805_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21400[0])
+/Kids [
+<<
+/T (Line_21400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line20600[0])
+/Kids [
+<<
+/T (Line_20600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line23300[0])
+/Kids [
+<<
+/T (Line_23300_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_23300_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line21700[0])
+/Kids [
+<<
+/T (Line_21700_Amount[0])
+/V ()
+>> 
+<<
+/T (Line21699[0])
+/Kids [
+<<
+/T (Line_21699_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page7[0])
+/Kids [
+<<
+/T (Return-pg7[0])
+/Kids [
+<<
+/T (Step6[0])
+/Kids [
+<<
+/T (Line42200[0])
+/Kids [
+<<
+/T (Line_42200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43500[0])
+/Kids [
+<<
+/T (Line_43500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42120[0])
+/Kids [
+<<
+/T (Line_42120_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42800[0])
+/Kids [
+<<
+/T (Line_42800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42100[0])
+/Kids [
+<<
+/T (Line_42100_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line14[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (PartC[0])
+/Kids [
+<<
+/T (Line40600[0])
+/Kids [
+<<
+/T (Line_40600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41000[0])
+/Kids [
+<<
+/T (Line_41000_Amount[0])
+/V ()
+>> 
+<<
+/T (Line40900[0])
+/Kids [
+<<
+/T (Line_40900_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line118[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line124[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line121[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line127[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40427[0])
+/Kids [
+<<
+/T (Line_40427_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line126[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41600[0])
+/Kids [
+<<
+/T (Line_41600_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_41600_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line129[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line42900[0])
+/Kids [
+<<
+/T (Line_42900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40500[0])
+/Kids [
+<<
+/T (Line_40500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41200[0])
+/Kids [
+<<
+/T (Line_41200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41800[0])
+/Kids [
+<<
+/T (Line_41800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line131[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40424[0])
+/Kids [
+<<
+/T (Line_40424_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40425[0])
+/Kids [
+<<
+/T (Line_40425_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line132[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line130[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41500[0])
+/Kids [
+<<
+/T (Line_41500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41400[0])
+/Kids [
+<<
+/T (Line_41400_Amount[0])
+/V ()
+>> 
+<<
+/T (Line41300[0])
+/Kids [
+<<
+/T (Line_41300_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line42000[0])
+/Kids [
+<<
+/T (Line_42000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line40400[0])
+/Kids [
+<<
+/T (Line_40400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line41700[0])
+/Kids [
+<<
+/T (Line_41700_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page6[0])
+/Kids [
+<<
+/T (Return-pg6[0])
+/Kids [
+<<
+/T (PartB[0])
+/Kids [
+<<
+/T (Line31240[0])
+/Kids [
+<<
+/T (Line_31240_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line98[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32300[0])
+/Kids [
+<<
+/T (Line_32300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line96[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31217[0])
+/Kids [
+<<
+/T (Line_31217_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32600[0])
+/Kids [
+<<
+/T (Line_32600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line35000[0])
+/Kids [
+<<
+/T (Line_35000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line110[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line108[0])
+/Kids [
+<<
+/T (Amount2[0])
+/V ()
+>> 
+<<
+/T (Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31800[0])
+/Kids [
+<<
+/T (Line_31800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line106[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33099[0])
+/Kids [
+<<
+/T (Line_33099_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line114[0])
+/Kids [
+<<
+/T (Percent[0])
+/V (15%)
+>>]
+>> 
+<<
+/T (Line84[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33500[0])
+/Kids [
+<<
+/T (Line_33500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33800[0])
+/Kids [
+<<
+/T (Line_33800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31200[0])
+/Kids [
+<<
+/T (Line_31200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line34900[0])
+/Kids [
+<<
+/T (Line_34900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31000[0])
+/Kids [
+<<
+/T (Line_31000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31600[0])
+/Kids [
+<<
+/T (Line_31600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31350[0])
+/Kids [
+<<
+/T (Line_31350_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31900[0])
+/Kids [
+<<
+/T (Line_31900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line32400[0])
+/Kids [
+<<
+/T (Line_32400_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33199[0])
+/Kids [
+<<
+/T (Line_33199_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line101[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31260[0])
+/Kids [
+<<
+/T (Line_31260_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line33200[0])
+/Kids [
+<<
+/T (Line_33200_Amount2[0])
+/V ()
+>> 
+<<
+/T (Line_33200_Amount1[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line30800[0])
+/Kids [
+<<
+/T (Line_30800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31285[0])
+/Kids [
+<<
+/T (Line_31285_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31300[0])
+/Kids [
+<<
+/T (Line_31300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line109[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31270[0])
+/Kids [
+<<
+/T (Line_31270_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31220[0])
+/Kids [
+<<
+/T (Line_31220_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line31400[0])
+/Kids [
+<<
+/T (Line_31400_Amount[0])
+/V ()
+>>]
+>>]
+>>]
+>>]
+>> 
+<<
+/T (Page8[0])
+/Kids [
+<<
+/T (Return-pg8[0])
+/Kids [
+<<
+/T (Refund_or_Balance-Owing[0])
+/Kids [
+<<
+/T (Line48500[0])
+/Kids [
+<<
+/T (Line_48500_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48400[0])
+/Kids [
+<<
+/T (Line_48400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Step6-Cont[0])
+/Kids [
+<<
+/T (Line44800[0])
+/Kids [
+<<
+/T (Line_44800_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45355[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line46900[0])
+/Kids [
+<<
+/T (Line_46900_Amount[0])
+/V ()
+>> 
+<<
+/T (Line46800[0])
+/Kids [
+<<
+/T (Line_46800_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Line47600[0])
+/Kids [
+<<
+/T (Line_47600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45200[0])
+/Kids [
+<<
+/T (Line_45200_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45600[0])
+/Kids [
+<<
+/T (Line_45600_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45350[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45300[0])
+/Kids [
+<<
+/T (Line_45300_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45000[0])
+/Kids [
+<<
+/T (Line_45000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47900[0])
+/Kids [
+<<
+/T (Line_47900_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47557[0])
+/Kids [
+<<
+/T (Line_47557_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47556[0])
+/Kids [
+<<
+/T (Line_47556_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line47555[0])
+/Kids [
+<<
+/T (Line_47555_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line167[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line43700[0])
+/Kids [
+<<
+/T (Line_43700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line148[0])
+/Kids [
+<<
+/T (Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line48200[0])
+/Kids [
+<<
+/T (Line_48200_Amount1[0])
+/V ()
+>> 
+<<
+/T (Line_48200_Amount2[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45700[0])
+/Kids [
+<<
+/T (Line_45700_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line44000[0])
+/Kids [
+<<
+/T (Line_44000_Amount[0])
+/V ()
+>>]
+>> 
+<<
+/T (Line45400[0])
+/Kids [
+<<
+/T (Line_45400_Amount[0])
+/V ()
+>>]
+>>]
+>> 
+<<
+/T (Certification[0])
+/Kids [
+<<
+/T (Date[0])
+/V ()
+>> 
+<<
+/T (Telephone[0])
+/V ()
+>>]
+>> 
+<<
+/T (Efile[0])
+/Kids [
+<<
+/T (Line48900[0])
+/Kids [
+<<
+/T (EFile[0])
+/V ()
+>>]
+>> 
+<<
+/T (TelephoneOfPreparer[0])
+/V ()
+>> 
+<<
+/T (NameOfPreparer[0])
+/V ()
+>> 
+<<
+/T (Line49000[0])
+/Kids [
+<<
+/T (Line49000_CheckBoxGroup[0])
+/Kids [
+<<
+/T (Line49000_CheckBox_EN[0])
+/V /
+>> 
+<<
+/T (Line49000_CheckBox_EN[1])
+/V /
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>]
+>>
+>>
+endobj
+
+trailer
+
+<<
+/Root 1 0 R
+>>
+%%EOF
diff --git a/data/T1/pdf/5000-r-fill-22e.pdf b/data/T1/pdf/5000-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5000-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5001-r-fill-22e.pdf b/data/T1/pdf/5001-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5001-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5005-r-fill-22e.pdf b/data/T1/pdf/5005-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5005-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5006-r-fill-22e.pdf b/data/T1/pdf/5006-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5006-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5010-r-fill-22e.pdf b/data/T1/pdf/5010-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5010-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5011-r-fill-22e.pdf b/data/T1/pdf/5011-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5011-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5012-r-fill-22e.pdf b/data/T1/pdf/5012-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5012-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5014-r-fill-22e.pdf b/data/T1/pdf/5014-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5014-r-fill-22e.pdf differ
diff --git a/data/T1/pdf/5015-r-fill-22e.pdf b/data/T1/pdf/5015-r-fill-22e.pdf
new file mode 100644
Binary files /dev/null and b/data/T1/pdf/5015-r-fill-22e.pdf differ
diff --git a/src/Tax/Canada.hs b/src/Tax/Canada.hs
--- a/src/Tax/Canada.hs
+++ b/src/Tax/Canada.hs
@@ -1,41 +1,27 @@
-{-# LANGUAGE DisambiguateRecordFields #-}
 {-# LANGUAGE ImportQualifiedPost #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# LANGUAGE OverloadedRecordDot #-}
 
-module Tax.Canada (T1, ON428, fixOntarioReturns, fixT1, fixON428, t1Fields, on428Fields) where
+module Tax.Canada (completeForms) where
 
-import Tax.Canada.T1.Types qualified as T1
-import Tax.Canada.T1.Types (T1 (T1, page7), Page7(Page7, step6_RefundOrBalanceOwing))
-import Tax.Canada.T1.Fix (fixT1)
-import Tax.Canada.T1.FieldNames (t1Fields)
-import Tax.Canada.ON428.Types qualified as ON hiding (Page1(..))
-import Tax.Canada.ON428.Types (ON428 (ON428, page1, page2),
-                               Page1(Page1, line1, partB))
-import Tax.Canada.ON428.Fix (fixON428)
-import Tax.Canada.ON428.FieldNames (on428Fields)
-import Tax.Util (fixEq)
+import Data.CAProvinceCodes qualified as Province
+import Data.Functor.Const (Const)
+import Data.Functor.Product (Product (Pair))
+import Data.Kind (Type)
 
-fixOntarioReturns :: (T1 Maybe, ON428 Maybe) -> (T1 Maybe, ON428 Maybe)
-fixOntarioReturns =
-  fixEq $ \(t1@T1{page7 = page7@Page7{step6_RefundOrBalanceOwing}},
-            on428@ON428{page1 = page1@Page1{partB},
-                        page2 = page2@ON.Page2{ON.partB = partB2@ON.Page2PartB{ON.medicalExpenses},
-                                               ON.partC}})
-          -> (fixT1 t1{page7 =
-                       page7{step6_RefundOrBalanceOwing =
-                             step6_RefundOrBalanceOwing{T1.line_42800_ProvTerrTax = on428.page4.line90}}},
-              fixON428 on428{page1 =
-                             page1{line1 = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
-                                   partB = partB{ON.line12_spouseIncome = t1.page1.spouse.line23600,
-                                                 ON.line19_cppQpp = t1.page6.line30800,
-                                                 ON.line20_cppQpp = t1.page6.line31000,
-                                                 ON.line21_employmentInsurance = t1.page6.line31200,
-                                                 ON.line22_employmentInsurance = t1.page6.line31217}},
-                             page2 =
-                             page2{ON.partB = partB2{ON.line32_interest = t1.page6.line31900,
-                                                     ON.medicalExpenses =
-                                                        medicalExpenses{ON.line37_income =
-                                                                        t1.page4.line_23600_NetIncome}},
-                                   ON.partC = partC{ON.line59_copy = t1.page7.partC_NetFederalTax.line40427}}})
+import Tax.Canada.Federal qualified as Federal
+import Tax.Canada.Federal (fixFederalForms)
+import Tax.Canada.Province.AB qualified as AB
+import Tax.Canada.Province.BC qualified as BC
+import Tax.Canada.Province.MB qualified as MB
+import Tax.Canada.Province.ON qualified as ON
+import Tax.Canada.T1 (T1, fixT1, t1FieldsForProvince)
+import Tax.FDF (FDFs)
+import Tax.FDF qualified as FDF
+
+-- | Complete all FDF forms in the given map, keyed by identifiers (@T1@, @428@, @Schedule9@, etc). The inter-form
+-- field references are resolved as well.
+completeForms :: Province.Code -> FDFs -> Either String FDFs
+completeForms Province.AB = FDF.mapForms AB.returnFields AB.fixReturns
+completeForms Province.BC = FDF.mapForms BC.returnFields BC.fixReturns
+completeForms Province.MB = FDF.mapForms MB.returnFields MB.fixReturns
+completeForms Province.ON = FDF.mapForms ON.returnFields ON.fixReturns
+completeForms p = FDF.mapForms (Federal.formFieldsForProvince p) fixFederalForms
diff --git a/src/Tax/Canada/Federal.hs b/src/Tax/Canada/Federal.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Federal.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+-- | The federal income tax forms
+
+module Tax.Canada.Federal (Forms(..), fixFederalForms, formFieldsForProvince) where
+
+import Control.Applicative ((<|>))
+import Data.CAProvinceCodes qualified as Province
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Data.Time (Day)
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Federal.Schedule6 qualified as Schedule6
+import Tax.Canada.Federal.Schedule6 (Schedule6, fixSchedule6, schedule6Fields)
+import Tax.Canada.Federal.Schedule7 qualified
+import Tax.Canada.Federal.Schedule7 (Schedule7, fixSchedule7, schedule7Fields)
+import Tax.Canada.Federal.Schedule9 (Schedule9(line23_sum), fixSchedule9, schedule9Fields)
+import Tax.Canada.Federal.Schedule11 (Schedule11(page1), Page1(line5_trainingClaim, line17_sum), fixSchedule11, schedule11Fields)
+import Tax.Canada.T1 (fixT1, t1FieldsForProvince)
+import Tax.Canada.T1.Types (T1(page4, page6, page8),
+                            Page4(line_20800_RRSPDeduction), Page6(line32300, line34900), Page8(step6_RefundOrBalanceOwing),
+                            Page8Step6(line_45300_CWB, line_45350_CTC), LanguageOfCorrespondence, MaritalStatus)
+import Tax.FDF (Entry (Amount), FieldConst (Field), within)
+import Tax.Util (fixEq)
+
+-- | All supported federal forms
+data Forms line = Forms{
+   t1 :: T1 line,
+   schedule6 :: Schedule6 line,
+   schedule7 :: Schedule7 line,
+   schedule9 :: Schedule9 line,
+   schedule11 :: Schedule11 line}
+
+deriving instance (Show (line Bool), Show (line Centi), Show (line Word), Show (line Text),
+                   Show (line Rational), Show (line Province.Code), Show (line Day),
+                   Show (line LanguageOfCorrespondence), Show (line MaritalStatus))
+               => Show (Forms line)
+deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Word), Eq (line Text),
+                   Eq (line Rational), Eq (line Province.Code), Eq (line Day),
+                   Eq (line LanguageOfCorrespondence), Eq (line MaritalStatus))
+               => Eq (Forms line)
+
+Rank2.TH.deriveAll ''Forms
+Transformation.Shallow.TH.deriveAll ''Forms
+
+-- | Complete all the federal forms, also handling the inter-form field references.
+fixFederalForms :: Forms Maybe -> Forms Maybe
+fixFederalForms = fixEq $ \Forms{t1, schedule6, schedule7, schedule9, schedule11}-> Forms{
+   t1 = fixT1 t1{page4 = t1.page4{line_20800_RRSPDeduction = schedule7.page3.partC.line20_deduction},
+                 page6 = t1.page6{line32300 = schedule11.page1.line17_sum, line34900 = schedule9.line23_sum},
+                 page8 = t1.page8{step6_RefundOrBalanceOwing =
+                                  t1.page8.step6_RefundOrBalanceOwing{line_45300_CWB = schedule6.page4.step3.line42_sum <|>
+                                                                                       schedule6.page4.step2.line28_difference,
+                                                                      line_45350_CTC = schedule11.page1.line5_trainingClaim}}},
+   schedule6 = fixSchedule6 Nothing t1 schedule6,
+   schedule7 = fixSchedule7 t1 schedule7,
+   schedule9 = fixSchedule9 t1 schedule9,
+   schedule11 = fixSchedule11 t1 schedule11}
+
+-- | The paths of all the fields in all federal forms, with the form key added as the head of every field path.
+formFieldsForProvince :: Province.Code -> Forms FieldConst
+formFieldsForProvince p = Forms{
+  t1 = within "T1" Rank2.<$> t1FieldsForProvince p,
+  schedule6 = within "Schedule6" Rank2.<$> schedule6Fields,
+  schedule7 = within "Schedule7" Rank2.<$> schedule7Fields,
+  schedule9 = within "Schedule9" Rank2.<$> schedule9Fields,
+  schedule11 = within "Schedule11" Rank2.<$> schedule11Fields}
diff --git a/src/Tax/Canada/Federal/Schedule11.hs b/src/Tax/Canada/Federal/Schedule11.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Federal/Schedule11.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Federal.Schedule11 where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (SubCalculation(result), fixSubCalculation, subCalculationFields)
+import Tax.Canada.T1.Types (T1)
+import Tax.Canada.T1.Types qualified
+import Tax.FDF (Entry (Amount, Checkbox, Count), FieldConst (Field), within)
+import Tax.Util (fixEq, fractionOf, difference, nonNegativeDifference, totalOf)
+
+data Schedule11 line = Schedule11{
+   page1 :: Page1 line,
+   page2 :: Page2 line}
+
+data Page1 line = Page1{
+   line_32000_tuition :: line Centi,
+   line2_copy :: line Centi,
+   line2_fraction :: line Centi,
+   line3_limit :: line Centi,
+   line4_min :: line Centi,
+   line5_trainingClaim :: line Centi,
+   line6_difference :: line Centi,
+   line_32001_eligible :: line Centi,
+   line8_sum :: line Centi,
+   line9_pastUnused :: line Centi,
+   line10_sum :: line Centi,
+   line11_copy :: line Centi,
+   line11_numerator :: line Centi,
+   line12_copy :: line Centi,
+   line13_difference :: line Centi,
+   line14_minUnused :: SubCalculation line,
+   line15_difference :: line Centi,
+   line16_min :: line Centi,
+   line17_sum :: line Centi}
+
+data Page2 line = Page2{
+   line_32005_diability :: line Bool,
+   line_32010_partTimeMonths :: line Word,
+   line_32020_fullTimeMonths :: line Word,
+   line18_copy :: line Centi,
+   line19_copy :: line Centi,
+   line20_difference :: line Centi,
+   line21_copy :: line Centi,
+   line22_copy :: line Centi,
+   line23_difference :: line Centi,
+   line24_transferred :: line Centi,
+   line25_difference :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Bool), Show (line Centi),
+                              Show (line Rational), Show (line Word)) => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Bool), Eq (line Centi),
+                              Eq (line Rational), Eq (line Word)) => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''Schedule11, ''Page1, ''Page2])
+
+fixSchedule11 :: T1 Maybe -> Schedule11 Maybe -> Schedule11 Maybe
+fixSchedule11 t1 = fixEq $ \Schedule11{page1 = page1@Page1{..}, page2 = page2@Page2{..}} -> Schedule11{
+   page1 = page1{
+      line2_copy = line_32000_tuition,
+      line2_fraction = (0.5 *) <$> line2_copy,
+      line4_min = minimum [line2_fraction, line3_limit],
+      line6_difference = difference line_32000_tuition line5_trainingClaim,
+      line8_sum = totalOf [line6_difference, line_32001_eligible],
+      line10_sum = totalOf [line9_pastUnused, line8_sum],
+      line11_copy = if taxableIncomeUnderThreshold then Nothing else t1.page7.partC_NetFederalTax.line116,
+      line11_numerator = if taxableIncomeUnderThreshold then taxableIncome else (/ 0.15) <$> line11_copy,
+      line12_copy = t1.page6.line99,
+      line13_difference = nonNegativeDifference line11_numerator line12_copy,
+      line14_minUnused = fixSubCalculation $ minimum [line9_pastUnused, line13_difference],
+      line15_difference = difference line13_difference line14_minUnused.result,
+      line16_min = minimum [line8_sum, line15_difference],
+      line17_sum = totalOf [line14_minUnused.result, line16_min]},
+   page2 = page2{
+      line18_copy = line10_sum,
+      line19_copy = line17_sum,
+      line20_difference = difference line18_copy line19_copy,
+      line21_copy = min 5000 <$> line8_sum,
+      line22_copy = line16_min,
+      line23_difference = nonNegativeDifference line21_copy line22_copy,
+      line25_difference = nonNegativeDifference line20_difference line24_transferred}}
+   where taxableIncome = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome
+         taxableIncomeUnderThreshold = taxableIncome <= Just 50_197
+
+schedule11Fields :: Schedule11 FieldConst
+schedule11Fields = within "form1" Rank2.<$> Schedule11 {
+   page1 = page1Fields,
+   page2 = page2Fields}
+
+page1Fields :: Page1 FieldConst
+page1Fields = within "Page1"  . within "YourTuition" Rank2.<$> Page1 {
+   line_32000_tuition = Field ["Line1", "Amount2"] Amount,
+   line2_copy = Field ["Line2", "Amount1"] Amount,
+   line2_fraction = Field ["Line2", "Amount2"] Amount,
+   line3_limit = Field ["Line3", "Amount4"] Amount,
+   line4_min = Field ["Line4", "Amount5"] Amount,
+   line5_trainingClaim = Field ["Line5", "Amount6"] Amount,
+   line6_difference = Field ["Line6", "Amount7"] Amount,
+   line_32001_eligible = Field ["Line7", "Amount8"] Amount,
+   line8_sum = Field ["Line8", "Amount1"] Amount,
+   line9_pastUnused = Field ["Line9", "Amount1"] Amount,
+   line10_sum = Field ["Line10", "Amount10"] Amount,
+   line11_copy = Field ["Line11", "Line11", "Amount11"] Amount,
+   line11_numerator = Field ["Line11", "Amount11"] Amount,
+   line12_copy = Field ["Line12", "Amount12"] Amount,
+   line13_difference = Field ["Line13", "Amount13"] Amount,
+   line14_minUnused = subCalculationFields "Line14" ["Amount1"] ["Amount14"],
+   line15_difference = Field ["Line15", "Amount15"] Amount,
+   line16_min = Field ["Line16", "Amount16"] Amount,
+   line17_sum = Field ["Line17", "Amount17"] Amount}
+
+page2Fields :: Page2 FieldConst
+page2Fields = within "Page2" Rank2.<$> Page2 {
+   line_32005_diability = Field ["Enrolment", "Line32005", "CheckBox"] Checkbox,
+   line_32010_partTimeMonths = Field ["Enrolment", "Line32010", "parttime_Months"] Count,
+   line_32020_fullTimeMonths = Field ["Enrolment", "Line32020", "Fulltime_Months"] Count,
+   line18_copy = Field ["Transfer_CF", "Line18", "Amount18"] Amount,
+   line19_copy = Field ["Transfer_CF", "Line19", "Amount19"] Amount,
+   line20_difference = Field ["Transfer_CF", "Line20", "Amount20"] Amount,
+   line21_copy = Field ["Transfer_CF", "Line21", "Amount21"] Amount,
+   line22_copy = Field ["Transfer_CF", "Line22", "Amount22"] Amount,
+   line23_difference = Field ["Transfer_CF", "Line23", "Amount22"] Amount,
+   line24_transferred = Field ["Transfer_CF", "Line24", "Amount24"] Amount,
+   line25_difference = Field ["Transfer_CF", "Line25", "Amount25"] Amount}
diff --git a/src/Tax/Canada/Federal/Schedule6.hs b/src/Tax/Canada/Federal/Schedule6.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Federal/Schedule6.hs
@@ -0,0 +1,254 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Federal.Schedule6 where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (SubCalculation(SubCalculation, calculation, result), fixSubCalculation, subCalculationFields)
+import Tax.Canada.T1.Types (T1)
+import Tax.Canada.T1.Types qualified as T1
+import Tax.FDF (Entry (Amount, Constant, Percent, Switch'), FieldConst (Field), within)
+import Tax.Util (fixEq, fractionOf, difference, nonNegativeDifference, totalOf)
+
+data Schedule6 line = Schedule6{
+   page2 :: Page2 line,
+   page3 :: Page3 line,
+   page4 :: Page4 line}
+
+data Page2 line = Page2{
+   questions :: Questions line,
+   partA_self :: PartAColumn line,
+   partA_spouse :: PartAColumn line,
+   line6_sum :: line Centi}
+
+data Questions line = Questions{
+   line_38100 :: line Bool,
+   line_38101 :: line Bool,
+   line_38102 :: line Bool,
+   line_38103 :: line Bool,
+   line_38104 :: line Bool,
+   line_38105 :: line Bool}
+
+data PartAColumn line = PartAColumn{
+   line1_employmentIncome_copy :: line Centi,
+   line_38106_grants_copy :: line Centi,
+   line3_selfEmploymentIncome_sum :: line Centi,
+   line_38107_exemptIncome :: line Centi,
+   line_38108_sum :: line Centi}
+
+data Page3 line = Page3{
+   partB_self :: PartBColumn line,
+   partB_spouse :: PartBColumn line,
+   line13_sum :: line Centi,
+   line14_least :: line Centi,
+   line15_difference :: line Centi}
+
+data PartBColumn line = PartBColumn{
+   line7_netIncome_copy :: line Centi,
+   line_38109_exempt :: line Centi,
+   line9_uccbRdspRepayments :: line Centi,
+   line10_sum :: line Centi,
+   line11_uccbRdspIncome :: line Centi,
+   line_38110_difference :: line Centi}
+
+data Page4 line = Page4{
+   step2 :: Step2 line,
+   step3 :: Step3 line}
+
+data Step2 line = Step2{
+   line16_copy :: line Centi,
+   line17_threshold :: line Centi,
+   line18_difference :: line Centi,
+   line19_rate :: line Rational,
+   line20_fraction :: line Centi,
+   line21_ceiling :: line Centi,
+   line22_least :: line Centi,
+   line23_copy :: line Centi,
+   line24_threshold :: line Centi,
+   line25_difference :: line Centi,
+   line26_rate :: line Rational,
+   line27_fraction :: SubCalculation line,
+   line28_difference :: line Centi}
+
+data Step3 line = Step3{
+   line29_copy :: line Centi,
+   line30_threshold :: line Centi,
+   line31_difference :: line Centi,
+   line32_rate :: line Rational,
+   line33_fraction :: line Centi,
+   line34_capped :: line Centi,
+   line35_copy :: line Centi,
+   line36_threshold :: line Centi,
+   line37_difference :: line Centi,
+   line38_rate :: line Rational,
+   line39_fraction :: SubCalculation line,
+   line40_difference :: line Centi,
+   line41_copy :: line Centi,
+   line42_sum :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Bool), Show (line Centi), Show (line Rational)) => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Rational)) => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''Schedule6, ''Page2, ''Page3, ''Page4, ''Questions, ''PartAColumn, ''PartBColumn, ''Step2, ''Step3])
+
+fixSchedule6 :: Maybe (T1 Maybe) -> T1 Maybe -> Schedule6 Maybe -> Schedule6 Maybe
+fixSchedule6 t1spouse t1  =
+   fixEq $ \Schedule6{page2, page3, page4=Page4{step2, step3}} ->
+            let eitherEligible = or page2.questions.line_38100 || or page2.questions.line_38101 in Schedule6{
+   page2 = Page2{
+      questions = page2.questions,
+      partA_self = fixPartAColumn t1 page2.partA_self,
+      partA_spouse = maybe id fixPartAColumn t1spouse page2.partA_spouse,
+      line6_sum = totalOf [page2.partA_self.line_38108_sum, page2.partA_spouse.line_38108_sum]},
+   page3 = let Page3{..} = page3 in Page3{
+      partB_self = fixPartBColumn t1 partB_self,
+      partB_spouse = maybe id fixPartBColumn t1spouse partB_spouse,
+      line13_sum = totalOf [partB_self.line_38110_difference, partB_spouse.line_38110_difference],
+      line14_least = min 15_239 <$>
+                     if or ((<) <$> page2.partA_self.line_38108_sum <*> page2.partA_spouse.line_38108_sum)
+                     then min page2.partA_self.line_38108_sum partB_self.line_38110_difference
+                     else min page2.partA_spouse.line_38108_sum partB_spouse.line_38110_difference,
+      line15_difference = difference line13_sum line14_least},
+   page4 = Page4{
+      step2 = if all not page2.questions.line_38102 then Rank2.pure Nothing else let Step2{..} = step2 in step2{
+         line16_copy = page2.line6_sum,
+         line18_difference = nonNegativeDifference line16_copy line17_threshold,
+         line20_fraction = line19_rate `fractionOf` line18_difference,
+         line21_ceiling = if eitherEligible then Just 2_616 else Just 1_518,
+         line22_least = min line20_fraction line21_ceiling,
+         line23_copy = page3.line15_difference,
+         line24_threshold = if eitherEligible then Just 28_494 else Just 24_975,
+         line25_difference = nonNegativeDifference line23_copy line24_threshold,
+         line27_fraction = fixSubCalculation $ line26_rate `fractionOf` line25_difference,
+         line28_difference = nonNegativeDifference line22_least line27_fraction.result},
+      step3 = if all not page2.questions.line_38103 then Rank2.pure Nothing else let Step3{..} = step3 in step3{
+         line29_copy = page2.partA_self.line_38108_sum,
+         line31_difference = nonNegativeDifference line29_copy line30_threshold,
+         line33_fraction = line32_rate `fractionOf` line31_difference,
+         line34_capped = min 784 <$> line33_fraction,
+         line35_copy = page3.line15_difference,
+         line36_threshold = if eitherEligible then Just 45_932 else Just 35_098,
+         line37_difference = nonNegativeDifference line35_copy line36_threshold,
+         line38_rate = if or page2.questions.line_38104 then Just 0.075 else Just 0.15,
+         line39_fraction = fixSubCalculation $ line38_rate `fractionOf` line37_difference,
+         line40_difference = nonNegativeDifference line34_capped line39_fraction.result,
+         line41_copy = if or page2.questions.line_38102 then step2.line28_difference else Just 0,
+         line42_sum = totalOf [line40_difference, line41_copy]}}}
+
+fixPartAColumn :: T1 Maybe -> PartAColumn Maybe -> PartAColumn Maybe
+fixPartAColumn t1 PartAColumn{..} = PartAColumn{
+   line1_employmentIncome_copy =
+      totalOf [t1.page3.line_10100_EmploymentIncome, t1.page3.line_10400_OtherEmploymentIncome],
+   line_38106_grants_copy = t1.page3.line_13010_TaxableScholarship,
+   line3_selfEmploymentIncome_sum =
+      let T1.SelfEmploymentIncome{..} = t1.page3.selfEmployment
+      in totalOf [line_13500_Amount, line_13700_Amount, line_13900_Amount, line_14100_Amount, line_14300_Amount],
+   line_38107_exemptIncome = line_38107_exemptIncome,
+   line_38108_sum = totalOf [line1_employmentIncome_copy, line_38106_grants_copy,
+                              line3_selfEmploymentIncome_sum, line_38107_exemptIncome]}
+
+fixPartBColumn :: T1 Maybe -> PartBColumn Maybe -> PartBColumn Maybe
+fixPartBColumn t1 column@PartBColumn{..} = column{
+      line7_netIncome_copy = t1.page4.line_23600_NetIncome,
+--      line9_uccbRdspRepayments = totalOf [t1.page4.line_21300_UCCBRepayment, t1.page4.line_23200],
+      line10_sum = totalOf [line7_netIncome_copy, line_38109_exempt, line9_uccbRdspRepayments],
+      line11_uccbRdspIncome = totalOf [t1.page3.line_11700_UCCB, t1.page3.line_12500_RDSP],
+      line_38110_difference = nonNegativeDifference line10_sum line11_uccbRdspIncome}
+
+schedule6Fields :: Schedule6 FieldConst
+schedule6Fields = within "form1" Rank2.<$> Schedule6{
+   page2 = within "Page2" Rank2.<$> Page2{
+      questions = within "Step1_tickboxes" . within "Questions" Rank2.<$> Questions{
+         line_38100 = Field ["Line38100", "Line38100_CheckBoxGroup"] $ Switch' "Line38100_CheckBox_EN",
+         line_38101 = Field ["Line38101", "Line38101_CheckBoxGroup"] $ Switch' "Line38101_CheckBox_EN",
+         line_38102 = Field ["Line38102", "Line38102_CheckBoxGroup"] $ Switch' "Line38102_CheckBox_EN",
+         line_38103 = Field ["Line38103", "Line38103_CheckBoxGroup"] $ Switch' "Line38103_CheckBox_EN",
+         line_38104 = Field ["Line38104", "Line38104_CheckBoxGroup"] $ Switch' "Line38104_CheckBox_EN",
+         line_38105 = Field ["Line38105", "Line38105_CheckBoxGroup"] $ Switch' "Line38105_CheckBox_EN"},
+      partA_self = within "PartA" . within "Chart" Rank2.<$> PartAColumn{
+         line1_employmentIncome_copy = Field ["Line1", "Amount1", "Amount"] Amount,
+         line_38106_grants_copy = Field ["Line2", "Amount1", "Amount"] Amount,
+         line3_selfEmploymentIncome_sum = Field ["Line3", "Amount1", "Amount"] Amount,
+         line_38107_exemptIncome = Field ["line4", "Amount1", "Amount"] Amount,
+         line_38108_sum = Field ["Line5_Sub", "Amount1", "Amount"] Amount},
+      partA_spouse = within "PartA" . within "Chart" Rank2.<$> PartAColumn{
+         line1_employmentIncome_copy = Field ["Line1", "Amount2", "Amount"] Amount,
+         line_38106_grants_copy = Field ["Line2", "Amount2", "Amount"] Amount,
+         line3_selfEmploymentIncome_sum = Field ["Line3", "Amount2", "Amount"] Amount,
+         line_38107_exemptIncome = Field ["line4", "Amount2", "Amount"] Amount,
+         line_38108_sum = Field ["Line5_Sub", "Amount2", "Amount"] Amount},
+      line6_sum = Field ["PartA", "Line6", "Amount"] Amount},
+   page3 = within "Page3" . within "PartB" Rank2.<$> Page3{
+      partB_self = within "Chart" Rank2.<$> PartBColumn{
+         line7_netIncome_copy = Field ["Line7", "Amount1", "Amount"] Amount,
+         line_38109_exempt = Field ["Line8", "Amount1", "Amount"] Amount,
+         line9_uccbRdspRepayments = Field ["Line9", "Amount1", "Amount"] Amount,
+         line10_sum = Field ["Line10", "Amount1", "Amount"] Amount,
+         line11_uccbRdspIncome = Field ["Line11", "Amount1", "Amount"] Amount,
+         line_38110_difference = Field ["Line12", "Amount1", "Amount"] Amount},
+      partB_spouse = within "Chart" Rank2.<$> PartBColumn{
+         line7_netIncome_copy = Field ["Line7", "Amount2", "Amount"] Amount,
+         line_38109_exempt = Field ["Line8", "Amount2", "Amount"] Amount,
+         line9_uccbRdspRepayments = Field ["Line9", "Amount2", "Amount"] Amount,
+         line10_sum = Field ["Line10", "Amount2", "Amount"] Amount,
+         line11_uccbRdspIncome = Field ["Line11", "Amount2", "Amount"] Amount,
+         line_38110_difference = Field ["Line12", "Amount2", "Amount"] Amount},
+      line13_sum = Field ["Line13", "Amount"] Amount,
+      line14_least = Field ["Line14", "Amount"] Amount,
+      line15_difference = Field ["Line15", "Amount"] Amount},
+   page4 = within "Page4" Rank2.<$> Page4{
+      step2 = within "Step2" Rank2.<$> Step2{
+         line16_copy = Field ["Line16", "Amount"] Amount,
+         line17_threshold = Field ["Line17", "Amount"] $ Constant 3_000 Amount,
+         line18_difference = Field ["Line18", "Amount"] Amount,
+         line19_rate = Field ["Line19", "Percent"] $ Constant 0.27 Percent,
+         line20_fraction = Field ["Line20", "Amount"] Amount,
+         line21_ceiling = Field ["Line21", "Amount"] Amount,
+         line22_least = Field ["Line22", "Amount"] Amount,
+         line23_copy = Field ["Line23", "Amount"] Amount,
+         line24_threshold = Field ["Line24", "Amount"] Amount,
+         line25_difference = Field ["Line25", "Amount"] Amount,
+         line26_rate = Field ["Line26", "Percent"] $ Constant 0.15 Percent,
+         line27_fraction = subCalculationFields "Line27" ["Amount1"] ["Amount2"],
+         line28_difference = Field ["Line28", "Amount"] Amount},
+      step3 = within "Step3" Rank2.<$> Step3{
+         line29_copy = Field ["Line29", "Amount"] Amount,
+         line30_threshold = Field ["Line30", "Amount"] $ Constant 1_150 Amount,
+         line31_difference = Field ["Line31", "Amount"] Amount,
+         line32_rate = Field ["Line32", "Percent"] $ Constant 0.27 Percent,
+         line33_fraction = Field ["Line33", "Amount"] Amount,
+         line34_capped = Field ["Line34", "Amount"] Amount,
+         line35_copy = Field ["Line35", "Amount"] Amount,
+         line36_threshold = Field ["Line36", "Amount"] Amount,
+         line37_difference = Field ["Line37", "Amount"] Amount,
+         line38_rate = Field ["Line38", "Percent"] Percent,
+         line39_fraction = subCalculationFields "Line39" ["Amount1"] ["Amount2"],
+         line40_difference = Field ["Line40", "Amount"] Amount,
+         line41_copy = Field ["Line41", "Amount"] Amount,
+         line42_sum = Field ["Line42", "Amount"] Amount}}}
+
diff --git a/src/Tax/Canada/Federal/Schedule7.hs b/src/Tax/Canada/Federal/Schedule7.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Federal/Schedule7.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Federal.Schedule7 where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (SubCalculation(SubCalculation, result), fixSubCalculation, subCalculationFields)
+import Tax.Canada.T1.Types (T1)
+import Tax.Canada.T1.Types qualified as T1
+import Tax.FDF (Entry (Amount, Checkbox), FieldConst (Field), within)
+import Tax.Util (fixEq, fractionOf, difference, nonNegativeDifference, totalOf)
+
+data Schedule7 line = Schedule7{
+   page2 :: Page2 line,
+   page3 :: Page3 line,
+   page4 :: Page4 line}
+
+data Page2 line = Page2{
+   line1_pastUnused :: line Centi,
+   line2_pastYearContributions :: line Centi,
+   line3_thisYearContributions :: line Centi,
+   line_24500_contributions_sum :: SubCalculation line,
+   line5_sum :: line Centi}
+
+data Page3 line = Page3{
+   partB :: PartB line,
+   partC :: PartC line}
+
+data PartB line = PartB{
+   line6_contributions_copy :: line Centi,
+   line_24600_hbp :: line Centi,
+   line_24620_llp :: line Centi,
+   line9_repayments_sum :: SubCalculation line,
+   line10_difference :: line Centi}
+
+data PartC line = PartC{
+   line11_deductionLimit :: line Centi,
+   line12_prpp_copy :: line Centi,
+   line13_difference :: line Centi,
+   line14_copy :: line Centi,
+   line_24640_transfers :: line Centi,
+   line15_cont :: line Centi,
+   line16_difference :: line Centi,
+   line17_lesser :: line Centi,
+   line18_deducting :: line Centi,
+   line19_sum :: line Centi,
+   line20_deduction :: line Centi}
+
+data Page4 line = Page4{
+   partD :: PartD line,
+   partE :: PartE line,
+   line_26700_athleteTrust :: line Centi}
+
+data PartD line = PartD{
+   line21_copy :: line Centi,
+   line22_copy :: line Centi,
+   line23_difference :: line Centi}
+
+data PartE line = PartE{
+   line_24700_hbp :: line Centi,
+   line_25900_hbpSame :: line Bool,
+   line_26300_llp :: line Centi,
+   line_26400_llpSpouse :: line Bool}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Bool), Show (line Centi), Show (line Rational)) => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Rational)) => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''Schedule7, ''Page2, ''Page3, ''Page4, ''PartB, ''PartC, ''PartD, ''PartE])
+
+fixSchedule7 :: T1 Maybe -> Schedule7 Maybe -> Schedule7 Maybe
+fixSchedule7 t1  = fixEq $ \Schedule7{page2, page3, page4} -> Schedule7{
+   page2 = let Page2{..} = page2 in page2{
+      line_24500_contributions_sum = fixSubCalculation $ totalOf [line2_pastYearContributions, line3_thisYearContributions],
+      line5_sum = totalOf [line1_pastUnused, line_24500_contributions_sum.result]},
+   page3 = let Page3{partB = partB@PartB{..}, partC = partC@PartC{..}} = page3 in Page3{
+      partB = partB{
+         line6_contributions_copy = page2.line5_sum,
+         line9_repayments_sum = fixSubCalculation $ totalOf [line_24600_hbp, line_24620_llp],
+         line10_difference = difference line6_contributions_copy line9_repayments_sum.result},
+      partC = partC{
+         line12_prpp_copy = t1.page4.line_20810_PRPP,
+         line13_difference = difference line11_deductionLimit line12_prpp_copy,
+         line14_copy = partB.line10_difference,
+         line15_cont = line_24640_transfers,
+         line16_difference = difference line14_copy line15_cont,
+         line17_lesser = min line13_difference line16_difference,
+         line19_sum = totalOf [line15_cont, line18_deducting],
+         line20_deduction = min line10_difference line19_sum}},
+   page4 = page4{
+      partD = let PartD{line21_copy, line22_copy} = page4.partD in PartD{
+         line21_copy = page3.partB.line10_difference,
+         line22_copy = page3.partC.line20_deduction,
+         line23_difference = difference line21_copy line22_copy}}}
+
+schedule7Fields :: Schedule7 FieldConst
+schedule7Fields = within "form1" Rank2.<$> Schedule7{
+   page2 = within "Page2" . within "PartA" Rank2.<$> Page2{
+      line1_pastUnused = Field ["Line1", "Amount"] Amount,
+      line2_pastYearContributions = Field ["Line2", "Amount"] Amount,
+      line3_thisYearContributions = Field ["Line3", "Amount"] Amount,
+      line_24500_contributions_sum = subCalculationFields "Line4" ["Amount1"] ["Amount2"],
+      line5_sum = Field ["Line5", "Amount"] Amount},
+   page3 = within "Page3" Rank2.<$> Page3{
+      partB = within "PartB" Rank2.<$> PartB{
+         line6_contributions_copy = Field ["Line6", "Amount"] Amount,
+         line_24600_hbp = Field ["Line7", "Amount"] Amount,
+         line_24620_llp = Field ["Line8", "Amount"] Amount,
+         line9_repayments_sum = subCalculationFields "Line9" ["Amount1"] ["Amount2"],
+         line10_difference = Field ["Line10", "Amount"] Amount},
+      partC = within "PartC" Rank2.<$> PartC{
+         line11_deductionLimit = Field ["Line11", "Amount"] Amount,
+         line12_prpp_copy = Field ["Line12", "Amount"] Amount,
+         line13_difference = Field ["Line13", "Amount"] Amount,
+         line14_copy = Field ["Line14", "Amount"] Amount,
+         line_24640_transfers = Field ["Line15", "Amount1"] Amount,
+         line15_cont = Field ["Line15", "Amount2"] Amount,
+         line16_difference = Field ["Line16", "Amount"] Amount,
+         line17_lesser = Field ["Line17", "Amount"] Amount,
+         line18_deducting = Field ["Line18", "Amount"] Amount,
+         line19_sum = Field ["Line19", "Amount"] Amount,
+         line20_deduction = Field ["Line20", "Amount"] Amount}},
+   page4 = within "Page4" Rank2.<$> Page4{
+      partD = within "PartD" Rank2.<$> PartD{
+         line21_copy = Field ["Line22", "Amount"] Amount,
+         line22_copy = Field ["Line23", "Amount"] Amount,
+         line23_difference = Field ["Line24", "Amount"] Amount},
+      partE = within "PartE" Rank2.<$> PartE{
+         line_24700_hbp = Field ["Line25", "Amount"] Amount,
+         line_25900_hbpSame = Field ["Line26", "Box_Line25"] Checkbox,
+         line_26300_llp = Field ["Line27", "Amount"] Amount,
+         line_26400_llpSpouse = Field ["Line28", "Box_Line27"] Checkbox},
+      line_26700_athleteTrust = Field ["PartF", "Line29", "Amount"] Amount}}
diff --git a/src/Tax/Canada/Federal/Schedule9.hs b/src/Tax/Canada/Federal/Schedule9.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Federal/Schedule9.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Federal.Schedule9 where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.T1.Types (T1)
+import Tax.Canada.T1.Types qualified
+import Tax.FDF (Entry (Amount, Constant), FieldConst (Field), within)
+import Tax.Util (fixEq, fractionOf, difference, nonNegativeDifference, totalOf)
+
+data Schedule9 line = Schedule9{
+   line1_charities :: line Centi,
+   line_32900_government :: line Centi,
+   line_33300_universities :: line Centi,
+   line_33400_UN :: line Centi,
+   line5_sum :: line Centi,
+   line6_copy :: line Centi,
+   line6_fraction :: line Centi,
+   line_33700_depreciable :: line Centi,
+   line_33900_capital :: line Centi,
+   line7_sum :: line Centi,
+   line7_fraction :: line Centi,
+   line8_sum :: line Centi,
+   line9_limit :: line Centi,
+   line_34000_allowable :: line Centi,
+   line_34200_ecocultural :: line Centi,
+   line12_sum :: line Centi,
+   line13_min :: line Centi,
+   line14_difference :: line Centi,
+   line_34210_ecological :: line Centi,
+   line16_difference :: line Centi,
+   line17_copy :: line Centi,
+   line18_threshold :: line Centi,
+   line19_difference :: line Centi,
+   lineE_copy :: line Centi,
+   line20_min :: line Centi,
+   line20_fraction :: line Centi,
+   line21_difference :: line Centi,
+   line21_fraction :: line Centi,
+   line22_copy :: line Centi,
+   line22_fraction :: line Centi,
+   line23_sum :: line Centi}
+
+deriving instance Show (line Centi) => Show (Schedule9 line)
+deriving instance Eq (line Centi) => Eq (Schedule9 line)
+
+Rank2.TH.deriveAll ''Schedule9
+Transformation.Shallow.TH.deriveAll ''Schedule9
+
+fixSchedule9 :: T1 Maybe -> Schedule9 Maybe -> Schedule9 Maybe
+fixSchedule9 t1 = fixEq $ \form@Schedule9{..} -> form{
+   line5_sum = totalOf [line1_charities, line_32900_government, line_33300_universities, line_33400_UN],
+   line6_copy = t1.page4.line_23600_NetIncome,
+   line6_fraction = (0.75 *) <$> line6_copy,
+   line7_sum = totalOf [line_33700_depreciable, line_33900_capital],
+   line7_fraction = (0.25 *) <$> line7_sum,
+   line8_sum = totalOf [line6_fraction, line7_fraction],
+   line9_limit = minimum [line6_copy, line8_sum],
+   line_34000_allowable = minimum [line5_sum, line9_limit],
+   line12_sum = totalOf [line_34000_allowable, line_34200_ecocultural],
+   line13_min = minimum [line12_sum, Just 200],
+   line14_difference = difference line12_sum line13_min,
+   line16_difference = nonNegativeDifference line14_difference line_34210_ecological,
+   line17_copy = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
+   line19_difference = nonNegativeDifference line17_copy line18_threshold,
+   lineE_copy = line14_difference,
+   line20_min = minimum [line16_difference, line19_difference],
+   line20_fraction = (0.33 *) <$> line20_min,
+   line21_difference = difference lineE_copy line20_min,
+   line21_fraction = (0.29 *) <$> line21_difference,
+   line22_copy = line13_min,
+   line22_fraction = (0.15 *) <$> line22_copy,
+   line23_sum = totalOf [line20_fraction, line21_fraction, line22_fraction]}
+
+schedule9Fields :: Schedule9 FieldConst
+schedule9Fields = within "form1" . within "Page1" Rank2.<$> Schedule9 {
+   line1_charities = Field ["Line1", "Amount"] Amount,
+   line_32900_government = Field ["Line2", "Amount"] Amount,
+   line_33300_universities = Field ["Line3", "Amount"] Amount,
+   line_33400_UN = Field ["Line4", "Amount"] Amount,
+   line5_sum = Field ["Line5", "Amount"] Amount,
+   line6_copy = Field ["Line6", "AmountA", "Amount"] Amount,
+   line6_fraction = Field ["Line6", "Amount"] Amount,
+   line_33700_depreciable = Field ["AmountB", "Amount"] Amount,
+   line_33900_capital = Field ["AmountC", "Amount"] Amount,
+   line7_sum = Field ["Line7", "AmountD", "Amount"] Amount,
+   line7_fraction = Field ["Line7", "Amount"] Amount,
+   line8_sum = Field ["Line8", "Amount"] Amount,
+   line9_limit = Field ["Line9", "Amount"] Amount,
+   line_34000_allowable = Field ["Line10", "Amount"] Amount,
+   line_34200_ecocultural = Field ["Line11", "Amount"] Amount,
+   line12_sum = Field ["Line12", "Amount"] Amount,
+   line13_min = Field ["Line13", "Amount_Line13"] Amount,
+   line14_difference = Field ["Line14", "Amount_Line14"] Amount,
+   line_34210_ecological = Field ["Line15", "Amount"] Amount,
+   line16_difference = Field ["Line16", "NumWithoutCurrency"] Amount,
+   line17_copy = Field ["Line17", "Amount"] Amount,
+   line18_threshold = Field ["Line18", "Amount"] $ Constant 235_675 Amount,
+   line19_difference = Field ["Line19", "Amount"] Amount,
+   lineE_copy = Field ["AmountE", "Amount_Line14"] Amount,
+   line20_min = Field ["Line20", "AmountF", "Amount"] Amount,
+   line20_fraction = Field ["Line20", "Amount"] Amount,
+   line21_difference = Field ["Line21", "AmountG", "Amount"] Amount,
+   line21_fraction = Field ["Line21", "Amount"] Amount,
+   line22_copy = Field ["Line22", "AmountH", "Amount_Line14"] Amount,
+   line22_fraction = Field ["Line22", "Amount"] Amount,
+   line23_sum = Field ["Line23", "Amount"] Amount}
+
diff --git a/src/Tax/Canada/ON428/FieldNames.hs b/src/Tax/Canada/ON428/FieldNames.hs
deleted file mode 100644
--- a/src/Tax/Canada/ON428/FieldNames.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE ImportQualifiedPost #-}
-{-# LANGUAGE DisambiguateRecordFields #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Tax.Canada.ON428.FieldNames (on428Fields) where
-
-import Data.Fixed (Centi)
-import Rank2 qualified
-
-import Tax.Canada.ON428.Types
-import Tax.FDF (Entry (Count, Amount, Percent), FieldConst (Field), within)
-
-on428Fields = within "form1" Rank2.<$> ON428 {
-   page1 = within "Page1" Rank2.<$> page1Fields,
-   page2 = within "Page2" Rank2.<$> page2Fields,
-   page3 = within "Page3" Rank2.<$> page3Fields,
-   page4 = within "Page4" Rank2.<$> page4Fields}
-
-
-page1Fields = Page1 {
-   line1 = Field ["Line1", "Amount"] Amount,
-   partA = within "Chart" Rank2.<$> page1PartAFields,
-   partB = within "Part_B" Rank2.<$> page1PartBFields}
-
-page1PartAFields = Page1PartA {
-   column1 = within "Column1" Rank2.<$> taxIncomeBracketFields,
-   column2 = within "Column2" Rank2.<$> taxIncomeBracketFields,
-   column3 = within "Column3" Rank2.<$> taxIncomeBracketFields,
-   column4 = within "Column4" Rank2.<$> taxIncomeBracketFields,
-   column5 = within "Column5" Rank2.<$> taxIncomeBracketFields}
-
-taxIncomeBracketFields = TaxIncomeBracket {
-   line2_income = Field ["Line2", "Amount"] Amount,
-   line3_threshold = Field ["Line3", "Amount"] Amount,
-   line4_overThreshold = Field ["Line4", "Amount"] Amount,
-   line5_rate = Field ["Line5", "Percent"] Percent,
-   line6_timesRate = Field ["Line6", "Amount"] Amount,
-   line7_baseTax = Field ["Line7", "Amount"] Amount,
-   line8_equalsTax = Field ["Line8", "Amount"] Amount}
-
-page1PartBFields = Page1PartB {
-   line9_basic = Field ["Line9", "Amount"] Amount,
-   line10_age = Field ["Line10", "Amount"] Amount,
-   line11_base = Field ["Spouse-Amount", "Line11", "Amount"] Amount,
-   line12_spouseIncome = Field ["Spouse-Amount", "Line12", "Amount"] Amount,
-   line13_difference = Field ["Spouse-Amount", "Line13", "Amount1"] Amount,
-   line13_cont = Field ["Spouse-Amount", "Line13", "Amount2"] Amount,
-   line14_base = Field ["Eligible-Dependant", "Line14", "Amount"] Amount,
-   line15_dependentIncome = Field ["Eligible-Dependant", "Line15", "Amount"] Amount,
-   line16_difference = Field ["Eligible-Dependant", "Line16", "Amount1"] Amount,
-   line16_cont = Field ["Eligible-Dependant", "Line16", "Amount2"] Amount,
-   line17_caregiver = Field ["Line17", "Amount"] Amount,
-   line18 = Field ["Line18", "Amount"] Amount,
-   line19_cppQpp = Field ["CPP-QPP", "Line19", "Amount"] Amount,
-   line20_cppQpp = Field ["CPP-QPP", "Line20", "Amount"] Amount,
-   line21_employmentInsurance = Field ["Employment-Insurance", "Line21", "Amount"] Amount,
-   line22_employmentInsurance = Field ["Employment-Insurance", "Line22", "Amount"] Amount,
-   line23_adoption = Field ["Line23", "Amount"] Amount,
-   line24_sum = Field ["Line24", "Amount1"] Amount,
-   line24_cont = Field ["Line24", "Amount2"] Amount,
-   line25 = Field ["Line25", "Amount"] Amount}
-
-page2Fields = Page2 {
-  partB = page2PartBFields,
-  partC = page2PartCFields}
-
-page2PartBFields = Page2PartB {
-   line26 = Field ["Line26", "Amount"] Amount,
-   line27_pension = Field ["Line27", "Amount"] Amount,
-   line28 = Field ["Line28", "Amount"] Amount,
-   line29_disability = Field ["Line29", "Amount"] Amount,
-   line30 = Field ["Line30", "Amount"] Amount,
-   line31 = Field ["Line31", "Amount"] Amount,
-   line32_interest = Field ["Line32", "Amount"] Amount,
-   line33_education = Field ["Line33", "Amount"] Amount,
-   line34_transferred = Field ["Line34", "Amount"] Amount,
-   line35 = Field ["Line35", "Amount"] Amount,
-   medicalExpenses = within "Medical-Expenses" Rank2.<$> medicalExpensesFields,
-   line42 = Field ["Line42", "Amount"] Amount,
-   line43_sum = Field ["Line43", "Amount1"] Amount,
-   line43_cont = Field ["Line43", "Amount2"] Amount,
-   line44 = Field ["Line44", "Amount"] Amount,
-   line45_rate = Field ["Line45", "Percent_ReadOnly"] Percent,
-   line46_fraction = Field ["Line46", "Amount"] Amount,
-   donations = within "Donations" Rank2.<$> donationsFields,
-   line50 = Field ["Line50", "Amount"] Amount}
-
-medicalExpensesFields = MedicalExpenses {
-   line36_expenses = Field ["Line36", "Amount"] Amount,
-   line37_income = Field ["Line37", "Amount"] Amount,
-   line38_rate = Field ["Line38", "Percent_ReadOnly"] Percent,
-   line39_fraction = Field ["Line39", "Amount"] Amount,
-   line40_lesser = Field ["Line40", "Amount"] Amount,
-   line41_difference = Field ["Line41", "Amount"] Amount}
-
-donationsFields = Donations {
-   line47_base = Field ["Line47", "Amount1"] Amount,
-   line47_fraction = Field ["Line47", "Amount2"] Amount,
-   line48_base = Field ["Line48", "Amount1"] Amount,
-   line48_fraction = Field ["Line48", "Amount2"] Amount,
-   line49_sum = Field ["Line49", "Amount1"] Amount,
-   line49_cont = Field ["Line49", "Amount2"] Amount}
-
-page2PartCFields = Page2PartC {
-   line51_tax = Field ["Line51", "Amount"] Amount,
-   line52_credits = Field ["Line52", "Amount"] Amount,
-   line53 = Field ["Line53", "Amount"] Amount,
-   line54 = Field ["Line54", "Amount"] Amount,
-   line55 = Field ["Line55", "Amount"] Amount,
-   line56 = Field ["Min-Tax-Carryover", "Line56", "Amount"] Amount,
-   line57 = Field ["Min-Tax-Carryover", "Line57", "Amount"] Amount,
-   line58 = Field ["Min-Tax-Carryover", "Line58", "Amount"] Amount,
-   line59_copy = Field ["Min-Tax-Carryover", "Line59", "Amount1"] Amount,
-   line59_product = Field ["Min-Tax-Carryover", "Line59", "Amount2"] Amount,
-   line60_lesser = Field ["Min-Tax-Carryover", "Line60", "Amount"] Amount,
-   line61 = Field ["Line61", "Amount"] Amount}
-
-page3Fields = Page3 {
-   line62 = Field ["Line62", "Amount"] Amount,
-   line63 = Field ["ON-Surtax", "Line63", "Amount"] Amount,
-   line64 = Field ["ON-Surtax", "Line64", "Amount"] Amount,
-   line65 = Field ["ON-Surtax", "Line65", "Amount"] Amount,
-   line66_copy = Field ["Line66", "Amount1"] Amount,
-   line66_surtax = Field ["Line66", "Amount2"] Amount,
-   line67_copy = Field ["Line67", "Amount1"] Amount,
-   line67_surtax = Field ["Line67", "Amount2"] Amount,
-   line68_sum = Field ["Line68", "Amount1"] Amount,
-   line68_cont = Field ["Line68", "Amount2"] Amount,
-   line69 = Field ["Line69", "Amount2"] Amount,
-   line70 = Field ["Line70", "Amount"] Amount,
-   line71 = Field ["Line71", "Amount"] Amount,
-   line72 = Field ["Line72", "Amount"] Amount,
-   line73 = Field ["Line73", "Amount"] Amount,
-   line74_basicReduction = Field ["Line74", "Amount"] Amount,
-   line75_childrenNum = Field ["Line75", "Line_60969", "Number"] Count,
-   line75_amount = Field ["Line75", "Amount"] Amount,
-   line76_childrenNum = Field ["Line76", "Line_60970", "Number"] Count,
-   line76_amount = Field ["Line76", "Amount"] Amount,
-   line77 = Field ["Line77", "Amount"] Amount,
-   line78_copy = Field ["Line78", "Amount1"] Amount,
-   line78_product = Field ["Line78", "Amount2"] Amount,
-   line79 = Field ["Line79", "Amount"] Amount,
-   line80_difference = Field ["Line80", "Amount1"] Amount,
-   line80_cont = Field ["Line80", "Amount2"] Amount,
-   line81 = Field ["Line81", "Amount"] Amount,
-   line82 = Field ["Line82", "Amount"] Amount,
-   line83 = Field ["Line83", "Amount"] Amount}
-
-page4Fields = Page4 {
-   line84 = Field ["Line84", "Amount"] Amount,
-   line85_lift = Field ["Line85", "Amount"] Amount,
-   line86 = Field ["Line86", "Amount"] Amount,
-   line87_foodDonations = Field ["Line87", "Line62150", "Amount1"] Amount,
-   line87_fraction = Field ["Line87", "Amount2"] Amount,
-   line88 = Field ["Line88", "Amount"] Amount,
-   line89_health = Field ["Line89", "Amount"] Amount,
-   line90 = Field ["Line90", "Amount"] Amount,
-   healthPremium = within "ON_Health_Prenium-worksheet" . within "Chart_ON_Health_Prenium" Rank2.<$> healthPremiumFields}
-
-healthPremiumFields = HealthPremium {
-   row1 = within "Taxable_Line2" Rank2.<$> healthPremiumBracketFields{equalsTax = Field ["Amount3"] Amount},
-   row2 = within "Taxable_Line4" Rank2.<$> healthPremiumBracketFields,
-   row3 = within "Taxable_Line6" Rank2.<$> healthPremiumBracketFields,
-   row4 = within "Taxable_Line8" Rank2.<$> healthPremiumBracketFields,
-   row5 = within "Taxable_Line10" Rank2.<$> healthPremiumBracketFields}
-
-healthPremiumBracketFields = HealthPremiumBracket {
-   taxableIncome = Field ["Amount1"] Amount,
-   overThreshold = Field ["Amount2"] Amount,
-   timesRate     = Field ["Amount3"] Amount,
-   equalsTax     = Field ["Amount4"] Amount}
diff --git a/src/Tax/Canada/ON428/Fix.hs b/src/Tax/Canada/ON428/Fix.hs
deleted file mode 100644
--- a/src/Tax/Canada/ON428/Fix.hs
+++ /dev/null
@@ -1,184 +0,0 @@
-{-# LANGUAGE ImportQualifiedPost #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedRecordDot #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-
-module Tax.Canada.ON428.Fix (fixON428) where
-
-import Control.Applicative (liftA2)
-import Control.Monad (guard, mfilter)
-import Data.Fixed (Centi)
-import Rank2 qualified
-
-import Tax.Canada.ON428.Types
-import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
-
-fixON428 :: ON428 Maybe -> ON428 Maybe
-fixON428 = fixEq $ \on428@ON428{..}-> ON428{page1 = fixPage1 page1,
-                                            page2 = fixPage2 on428 page2,
-                                            page3 = fixPage3 on428 page3,
-                                            page4 = fixPage4 on428 page4}
-
-fixPage1 :: Page1 Maybe -> Page1 Maybe
-fixPage1 = fixEq $ \Page1{..}-> Page1{
-   line1 = line1,
-   partA = fixPage1PartA line1 partA,
-   partB = fixPage1PartB partB}
-
-fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe
-fixPage1PartA income = fixEq $ \Page1PartA{..}-> Page1PartA{
-   column1 = fixTaxIncomeBracket income (Just column2) column1,
-   column2 = fixTaxIncomeBracket income (Just column3) column2,
-   column3 = fixTaxIncomeBracket income (Just column4) column3,
-   column4 = fixTaxIncomeBracket income (Just column5) column4,
-   column5 = fixTaxIncomeBracket income Nothing column5}
-
-fixTaxIncomeBracket :: Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe
-fixTaxIncomeBracket income nextBracket bracket@TaxIncomeBracket{..} = bracket{
-   line2_income = do i <- income
-                     floor <- line3_threshold
-                     let ceiling = nextBracket >>= (.line3_threshold)
-                     guard (floor <= i && all (i <) ceiling)
-                     income,
-   line4_overThreshold = liftA2 (-) line2_income line3_threshold,
-   line6_timesRate = fromRational <$> liftA2 (*) (toRational <$> line4_overThreshold) line5_rate,
-   line8_equalsTax = liftA2 (+) line6_timesRate line7_baseTax}
-
-fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe
-fixPage1PartB = fixEq $ \part@Page1PartB{..}-> part{
-   line9_basic = Just 11141,
-   line11_base = Just 10406,
-   line13_difference = mfilter (> 0) $ liftA2 (-) line11_base line12_spouseIncome,
-   line13_cont = line13_difference,
-   line14_base = Just 10406,
-   line16_difference = mfilter (> 0) $ liftA2 (-) line14_base line15_dependentIncome,
-   line16_cont = line16_difference,
-   line18 = totalOf [line9_basic, line10_age, line13_cont, line16_cont, line17_caregiver],
-   line24_sum = totalOf [line19_cppQpp,
-                         line20_cppQpp,
-                         line21_employmentInsurance,
-                         line22_employmentInsurance,
-                         line23_adoption],
-   line24_cont = line24_sum,
-   line25 = totalOf [line18, line24_cont]}
-
-fixPage2 :: ON428 Maybe -> Page2 Maybe -> Page2 Maybe
-fixPage2 on428 = fixEq $ \Page2{..}-> Page2{
-  partB = fixPage2PartB on428 partB,
-  partC = fixPage2PartC on428 partC}
-
-fixPage2PartB :: ON428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe
-fixPage2PartB on428 = fixEq $ \part@Page2PartB{..}-> part{
-   line26 = on428.page1.partB.line25,
-   line28 = totalOf [line26, line27_pension],
-   line31 = totalOf [line28, line29_disability, line30],
-   line35 = totalOf [line31, line32_interest, line33_education, line34_transferred],
-   medicalExpenses = fixMedicalExpenses medicalExpenses,
-   line43_sum = totalOf [medicalExpenses.line41_difference, line42],
-   line43_cont = line43_sum,
-   line44 = totalOf [line35, line43_cont],
-   line46_fraction = line45_rate `fractionOf` line44,
-   donations = fixDonations donations,
-   line50 = totalOf [line46_fraction, donations.line49_cont]}
-
-fixPage2PartC :: ON428 Maybe -> Page2PartC Maybe -> Page2PartC Maybe
-fixPage2PartC on428 = fixEq $ \part@Page2PartC{..}-> part{
-   line51_tax = totalOf [on428.page1.partA.column1.line8_equalsTax,
-                         on428.page1.partA.column2.line8_equalsTax,
-                         on428.page1.partA.column3.line8_equalsTax,
-                         on428.page1.partA.column4.line8_equalsTax,
-                         on428.page1.partA.column5.line8_equalsTax],
-   line52_credits = on428.page2.partB.line50,
-   line53 = nonNegativeDifference line51_tax line52_credits,
-   line55 = totalOf [line53, line54],
-   line56 = line53,
-   line58 = nonNegativeDifference line56 line57,
-   line59_product = Just 0.3367 `fractionOf` line59_copy,
-   line60_lesser = min <$> line58 <*> line59_product,
-   line61 = nonNegativeDifference line55 line60_lesser}
-
-fixMedicalExpenses :: MedicalExpenses Maybe -> MedicalExpenses Maybe
-fixMedicalExpenses = fixEq $ \part@MedicalExpenses{..} -> part{
-   line38_rate = Just 0.03,
-   line39_fraction = line38_rate `fractionOf` line37_income,
-   line40_lesser = min 2522 <$> line39_fraction,
-   line41_difference = nonNegativeDifference line36_expenses line40_lesser}
-
-fixDonations :: Donations Maybe -> Donations Maybe
-fixDonations = fixEq $ \part@Donations{..} -> part{
-   line47_fraction = Just 0.0505 `fractionOf` line47_base,
-   line48_fraction = Just 0.1116 `fractionOf` line48_base,
-   line49_sum = totalOf [line47_fraction, line48_fraction],
-   line49_cont = line49_sum}
-
-fixPage3 :: ON428 Maybe -> Page3 Maybe -> Page3 Maybe
-fixPage3 on428 = fixEq $ \page@Page3{..}-> page{
-   line62 = on428.page2.partC.line61,
-   line63 = line62,
-   line64 = on428.page2.partC.line54,
-   line65 = nonNegativeDifference line63 line64,
-   line66_copy = line65,
-   line66_surtax = Just 0.2 `fractionOf` nonNegativeDifference line66_copy (Just 4991),
-   line67_copy = line65,
-   line67_surtax = Just 0.36 `fractionOf` nonNegativeDifference line67_copy (Just 6387),
-   line68_sum = totalOf [line66_surtax, line67_surtax],
-   line68_cont = line68_sum,
-   line69 = totalOf [line62, line68_cont],
-   line70 = on428.page2.partC.line57,
-   line71 = nonNegativeDifference line69 line70,
-   line73 = totalOf [line71, line72],
-   line74_basicReduction = Just 257,
-   line75_amount = ((475 *) . fromIntegral) <$> line75_childrenNum,
-   line76_amount = ((475 *) . fromIntegral) <$> line76_childrenNum,
-   line77 = totalOf [line74_basicReduction, line75_amount, line76_amount],
-   line78_copy = line77,
-   line78_product = (2 *) <$> line78_copy,
-   line79 = line73,
-   line80_difference = nonNegativeDifference line78_product line79,
-   line80_cont = line80_difference,
-   line81 = nonNegativeDifference line73 line80_cont,
-   line83 = nonNegativeDifference line81 line82}
-
-fixPage4 :: ON428 Maybe -> Page4 Maybe -> Page4 Maybe
-fixPage4 on428 = fixEq $ \page@Page4{..}-> page{
-   line84 = on428.page3.line83,
-   line86 = nonNegativeDifference line84 line85_lift,
-   line87_fraction = Just 0.25 `fractionOf` line87_foodDonations,
-   line88 = nonNegativeDifference line86 line87_fraction,
-   line89_health = totalOf [between 0 20000 0,
-                            healthPremium.row1.equalsTax,
-                            between 25000 36000 300,
-                            healthPremium.row2.equalsTax,
-                            between 38500 48000 450,
-                            healthPremium.row3.equalsTax,
-                            between 48600 72000 600,
-                            healthPremium.row4.equalsTax,
-                            between 72600 200000 750,
-                            healthPremium.row5.equalsTax,
-                            if income > 200600 then Just 900 else Nothing],
-   line90 = totalOf [line88, line89_health],
-   healthPremium = fixHealthPremium income healthPremium}
-   where income = sum on428.page1.line1
-         between floor ceiling tax
-            | income > floor && income <= ceiling = Just tax
-            | otherwise = Nothing
-
-fixHealthPremium :: Centi -> HealthPremium Maybe -> HealthPremium Maybe
-fixHealthPremium income = fixEq $ \HealthPremium{..}-> HealthPremium{
-   row1 = fixHealthPremiumBracket income 20000 25000 0.06 0 row1,
-   row2 = fixHealthPremiumBracket income 36000 38500 0.06 300 row2,
-   row3 = fixHealthPremiumBracket income 48000 48600 0.25 450 row3,
-   row4 = fixHealthPremiumBracket income 72000 72600 0.25 600 row4,
-   row5 = fixHealthPremiumBracket income 200000 200600 0.25 750 row5}
-
-fixHealthPremiumBracket :: Centi -> Centi -> Centi -> Rational -> Centi -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe
-fixHealthPremiumBracket income floor ceiling rate base HealthPremiumBracket{..}
-   | income > floor && income < ceiling = HealthPremiumBracket{
-       taxableIncome = Just income,
-       overThreshold = Just $ income - floor,
-       timesRate = Just rate `fractionOf` overThreshold,
-       equalsTax = totalOf [timesRate, Just base]}
-   | otherwise = Rank2.pure Nothing
diff --git a/src/Tax/Canada/ON428/Types.hs b/src/Tax/Canada/ON428/Types.hs
deleted file mode 100644
--- a/src/Tax/Canada/ON428/Types.hs
+++ /dev/null
@@ -1,193 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE ImportQualifiedPost #-}
-{-# LANGUAGE InstanceSigs #-}
-{-# LANGUAGE NoFieldSelectors #-}
-{-# LANGUAGE OverloadedRecordDot #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module Tax.Canada.ON428.Types where
-
-import Data.Fixed (Centi)
-import Language.Haskell.TH qualified as TH
-import Rank2.TH qualified
-
-data ON428 line = ON428 {
-   page1 :: Page1 line,
-   page2 :: Page2 line,
-   page3 :: Page3 line,
-   page4 :: Page4 line}
-
-data Page1 line = Page1 {
-   line1 :: line Centi,
-   partA :: Page1PartA line,
-   partB :: Page1PartB line}
-
-data Page1PartA line = Page1PartA {
-   column1 :: TaxIncomeBracket line,
-   column2 :: TaxIncomeBracket line,
-   column3 :: TaxIncomeBracket line,
-   column4 :: TaxIncomeBracket line,
-   column5 :: TaxIncomeBracket line}
-
-data TaxIncomeBracket line = TaxIncomeBracket {
-   line2_income :: line Centi,
-   line3_threshold :: line Centi,
-   line4_overThreshold :: line Centi,
-   line5_rate :: line Rational,
-   line6_timesRate :: line Centi,
-   line7_baseTax :: line Centi,
-   line8_equalsTax :: line Centi
-   }
-
-data Page1PartB line = Page1PartB {
-   line9_basic :: line Centi,
-   line10_age :: line Centi,
-   line11_base :: line Centi,
-   line12_spouseIncome :: line Centi,
-   line13_difference :: line Centi,
-   line13_cont :: line Centi,
-   line14_base :: line Centi,
-   line15_dependentIncome :: line Centi,
-   line16_difference :: line Centi,
-   line16_cont :: line Centi,
-   line17_caregiver :: line Centi,
-   line18 :: line Centi,
-   line19_cppQpp :: line Centi,
-   line20_cppQpp :: line Centi,
-   line21_employmentInsurance :: line Centi,
-   line22_employmentInsurance :: line Centi,
-   line23_adoption :: line Centi,
-   line24_sum :: line Centi,
-   line24_cont :: line Centi,
-   line25 :: line Centi}
-
-data Page2 line = Page2 {
-  partB :: Page2PartB line,
-  partC :: Page2PartC line}
-
-data Page2PartB line = Page2PartB {
-   line26 :: line Centi,
-   line27_pension :: line Centi,
-   line28 :: line Centi,
-   line29_disability :: line Centi,
-   line30 :: line Centi,
-   line31 :: line Centi,
-   line32_interest :: line Centi,
-   line33_education :: line Centi,
-   line34_transferred :: line Centi,
-   line35 :: line Centi,
-   medicalExpenses :: MedicalExpenses line,
-   line42 :: line Centi,
-   line43_sum :: line Centi,
-   line43_cont :: line Centi,
-   line44 :: line Centi,
-   line45_rate :: line Rational,
-   line46_fraction :: line Centi,
-   donations :: Donations line,
-   line50 :: line Centi}
-
-data MedicalExpenses line = MedicalExpenses {
-   line36_expenses :: line Centi,
-   line37_income :: line Centi,
-   line38_rate :: line Rational,
-   line39_fraction :: line Centi,
-   line40_lesser :: line Centi,
-   line41_difference :: line Centi}
-
-data Donations line = Donations {
-   line47_base :: line Centi,
-   line47_fraction :: line Centi,
-   line48_base :: line Centi,
-   line48_fraction :: line Centi,
-   line49_sum :: line Centi,
-   line49_cont :: line Centi}
-
-data Page2PartC line = Page2PartC {
-   line51_tax :: line Centi,
-   line52_credits :: line Centi,
-   line53 :: line Centi,
-   line54 :: line Centi,
-   line55 :: line Centi,
-   line56 :: line Centi,
-   line57 :: line Centi,
-   line58 :: line Centi,
-   line59_copy :: line Centi,
-   line59_product :: line Centi,
-   line60_lesser :: line Centi,
-   line61 :: line Centi}
-
-data Page3 line = Page3 {
-   line62 :: line Centi,
-   line63 :: line Centi,
-   line64 :: line Centi,
-   line65 :: line Centi,
-   line66_copy :: line Centi,
-   line66_surtax :: line Centi,
-   line67_copy :: line Centi,
-   line67_surtax :: line Centi,
-   line68_cont :: line Centi,
-   line68_sum :: line Centi,
-   line69 :: line Centi,
-   line70 :: line Centi,
-   line71 :: line Centi,
-   line72 :: line Centi,
-   line73 :: line Centi,
-   line74_basicReduction :: line Centi,
-   line75_amount :: line Centi,
-   line75_childrenNum :: line Word,
-   line76_amount :: line Centi,
-   line76_childrenNum :: line Word,
-   line77 :: line Centi,
-   line78_copy :: line Centi,
-   line78_product :: line Centi,
-   line79 :: line Centi,
-   line80_cont :: line Centi,
-   line80_difference :: line Centi,
-   line81 :: line Centi,
-   line82 :: line Centi,
-   line83 :: line Centi}
-
-data Page4 line = Page4 {
-   line84 :: line Centi,
-   line85_lift :: line Centi,
-   line86 :: line Centi,
-   line87_foodDonations :: line Centi,
-   line87_fraction :: line Centi,
-   line88 :: line Centi,
-   line89_health :: line Centi,
-   line90 :: line Centi,
-   healthPremium :: HealthPremium line}
-
-data HealthPremium line = HealthPremium {
-   row1 :: HealthPremiumBracket line,
-   row2 :: HealthPremiumBracket line,
-   row3 :: HealthPremiumBracket line,
-   row4 :: HealthPremiumBracket line,
-   row5 :: HealthPremiumBracket line}
-
-data HealthPremiumBracket line = HealthPremiumBracket {
-   taxableIncome :: line Centi,
-   overThreshold :: line Centi,
-   timesRate :: line Centi,
-   equalsTax :: line Centi}
-
-$(foldMap
-   (\t-> [d|
-           deriving instance (Show (line Centi), Show (line Rational), Show (line Word))
-                          => Show ($(TH.conT t) line)
-           deriving instance (Eq (line Centi), Eq (line Rational), Eq (line Word))
-                          => Eq ($(TH.conT t) line)
-    |])
-   [''ON428, ''Page1, ''Page2, ''Page3, ''Page4,
-    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''Page2PartC,
-    ''MedicalExpenses, ''Donations,
-    ''TaxIncomeBracket, ''HealthPremium, ''HealthPremiumBracket])
-
-$(foldMap Rank2.TH.deriveAll
-   [''ON428, ''Page1, ''Page2, ''Page3, ''Page4,
-    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''Page2PartC,
-    ''MedicalExpenses, ''Donations,
-    ''TaxIncomeBracket, ''HealthPremium, ''HealthPremiumBracket])
diff --git a/src/Tax/Canada/Province/AB.hs b/src/Tax/Canada/Province/AB.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/AB.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.AB (AB428, ab428Fields, fixAB428, fixReturns, returnFields, t1Fields) where
+
+import Data.CAProvinceCodes (Code(AB))
+import qualified Rank2
+
+import Tax.Canada.Federal qualified as Federal
+import Tax.Canada.Federal (Forms(t1), fixFederalForms)
+import Tax.Canada.Federal.Schedule9 qualified as Schedule9
+import Tax.Canada.T1.Types (T1 (T1, page7, page8), Page7(Page7, step6_RefundOrBalanceOwing), Page8(Page8))
+import Tax.Canada.T1.Types qualified as T1
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.AB (t1Fields)
+
+import Tax.Canada.Province.AB.AB428.Types qualified as AB
+import Tax.Canada.Province.AB.AB428.Types qualified as AB.Page1 (Page1(..))
+import Tax.Canada.Province.AB.AB428.Types qualified as AB.Page2 (Page2(..))
+import Tax.Canada.Province.AB.AB428.Types (AB428 (AB428))
+import Tax.Canada.Province.AB.AB428.Fix (fixAB428)
+import Tax.Canada.Province.AB.AB428.FieldNames (ab428Fields)
+
+import Tax.Canada.Shared(MedicalExpenses(..), BaseCredit(..))
+import Tax.FDF (FieldConst, within)
+import Tax.Util (fixEq)
+
+import Data.Functor.Product (Product(Pair))
+
+type Returns = Product Federal.Forms AB428
+
+fixReturns :: Returns Maybe -> Returns Maybe
+fixReturns =
+  fixEq $ \(Pair
+            ff@Federal.Forms{t1 = t1@T1{page7 = page7@Page7{step6_RefundOrBalanceOwing},
+                                        page8 = page8@Page8{step6_RefundOrBalanceOwing = page8step6}},
+                             schedule9}
+            ab428@AB428{page1 = page1@AB.Page1{partA, partB = partB1@AB.Page1PartB{spouseAmount}},
+                        page2 = page2@AB.Page2{AB.partB = partB2@AB.Page2PartB{AB.medicalExpenses}},
+                        page3 = page3@AB.Page3{AB.partC}})
+          -> (fixFederalForms ff{t1 = t1{page7 =
+                                         page7{step6_RefundOrBalanceOwing =
+                                               step6_RefundOrBalanceOwing{T1.line_42800_ProvTerrTax =
+                                                                          ab428.page3.partC.line66_tax}},
+                                         page8 =
+                                         page8{Page8.step6_RefundOrBalanceOwing =
+                                               page8step6{T1.line_47900_ProvTerrCredits =
+                                                          ab428.page3.partD.line69_credits}}}}
+              `Pair`
+              fixAB428 ab428{AB.page1 =
+                             page1{AB.Page1.income = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
+                                   AB.Page1.partB = partB1{AB.spouseAmount = spouseAmount{reduction = t1.page1.spouse.line23600},
+                                                           AB.line19_cppQpp = t1.page6.line30800,
+                                                           AB.line20_cppQpp = t1.page6.line31000,
+                                                           AB.line21_employmentInsurance = t1.page6.line31200,
+                                                           AB.line22_employmentInsurance = t1.page6.line31217}},
+                             AB.page2 =
+                             page2{AB.Page2.partB = partB2{AB.line33_interest = t1.page6.line31900,
+                                                           AB.medicalExpenses =
+                                                           medicalExpenses{
+                                                              expenses = t1.page6.medical_expenses.familyExpenses,
+                                                              netIncome = t1.page4.line_23600_NetIncome},
+                                                                AB.donations = partB2.donations{
+                                                                   AB.line48_base = schedule9.line13_min,
+                                                                   AB.line49_base = schedule9.line14_difference}}},
+                             AB.page3 =
+                             page3{AB.partC = partC{AB.line57_copy = t1.page7.partC_NetFederalTax.line40427}}})
+
+returnFields :: Returns FieldConst
+returnFields = Pair (Federal.formFieldsForProvince AB) (within "428" Rank2.<$> ab428Fields)
diff --git a/src/Tax/Canada/Province/AB/AB428/FieldNames.hs b/src/Tax/Canada/Province/AB/AB428/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/AB/AB428/FieldNames.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.AB.AB428.FieldNames (ab428Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.AB.AB428.Types
+import Tax.Canada.Shared (BaseCredit(..), MedicalExpenses(..), TaxIncomeBracket (..), subCalculationFields)
+import Tax.FDF (Entry (Count, Constant, Amount, Percent), FieldConst (Field, NoField), within)
+
+ab428Fields = within "form1" Rank2.<$> AB428 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" Rank2.<$> page3Fields}
+
+
+page1Fields = Page1 {
+   income = Field ["Line1", "Amount"] Amount,
+   partA = within "Chart" Rank2.<$> page1PartAFields,
+   partB = page1PartBFields}
+
+page1PartAFields = Page1PartA {
+   column1 = within "Column1" Rank2.<$> taxIncomeBracketFields       0 0.10      0,
+   column2 = within "Column2" Rank2.<$> taxIncomeBracketFields 142_292 0.12 14_229.20,
+   column3 = within "Column3" Rank2.<$> (taxIncomeBracketFields 170_751 0.13 17_644.28){rate = Field ["LIne5", "Percent"] $ Constant 0.13 Percent},
+   column4 = within "Column4" Rank2.<$> taxIncomeBracketFields 227_668 0.14 25_043.49,
+   column5 = within "Column5" Rank2.<$> taxIncomeBracketFields 341_502 0.15 40_980.25}
+
+taxIncomeBracketFields :: Centi -> Rational -> Centi -> TaxIncomeBracket FieldConst
+taxIncomeBracketFields threshold rate baseTax = TaxIncomeBracket {
+   income = Field ["Line2", "Amount"] Amount,
+   threshold = Field ["Line3", "Amount_Fixed"] $ Constant threshold Amount,
+   overThreshold = Field ["Line4", "Amount"] Amount,
+   rate = Field ["Line5", "Percent"] $ Constant rate Percent,
+   timesRate = Field ["Line6", "Amount"] Amount,
+   baseTax = Field ["Line7", "Amount_Fixed"] $ Constant baseTax Amount,
+   equalsTax = Field ["Line8", "Amount"] Amount}
+
+page1PartBFields = Page1PartB {
+   line9_basic = Field ["Line9", "Amount"] Amount,
+   line10_age = Field ["Line10", "Amount"] Amount,
+   spouseAmount = within "Line11to13" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line11", "Amount_Fixed"] $ Constant 21_003 Amount,
+       reduction = Field ["Line12", "Amount"] Amount,
+       difference = Field ["Line13", "Amount1"] Amount,
+       cont = Field ["Line13", "Amount2"] Amount},
+   dependantAmount = within "Line14to16" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line14", "Amount_Fixed"] $ Constant 21_003 Amount,
+       reduction = Field ["Line15", "Amount"] Amount,
+       difference = Field ["Line16", "Amount1"] Amount,
+       cont = Field ["Line16", "Amount2"] Amount},
+   line17_infirm = Field ["Line17", "Amount"] Amount,
+   line18 = Field ["Line18", "Amount"] Amount,
+   line19_cppQpp = Field ["Line19to20", "Line19", "Amount"] Amount,
+   line20_cppQpp = Field ["Line19to20", "Line20", "Amount"] Amount,
+   line21_employmentInsurance = Field ["Line21to22", "Line21", "Amount"] Amount,
+   line22_employmentInsurance = Field ["Line21to22", "Line22", "Amount"] Amount,
+   line23_adoption = Field ["Line23", "Amount"] Amount,
+   line24_sum = subCalculationFields "Line24" ["Amount1"] ["Amount2"],
+   line25 = Field ["Line25", "Amount"] Amount}
+
+page2Fields = Page2 {
+  partB = within "PartB_Page2" Rank2.<$> page2PartBFields}
+
+page2PartBFields = Page2PartB {
+   line26 = Field ["Line26", "Amount"] Amount,
+   line27_pension = Field ["Line27", "Amount"] Amount,
+   line28_caregiver = Field ["Line28", "Amount"] Amount,
+   line29 = Field ["Line29", "Amount"] Amount,
+   line30_disability = Field ["Line30", "Amount"] Amount,
+   line31 = Field ["Line31", "Amount"] Amount,
+   line32 = Field ["Line32", "Amount"] Amount,
+   line33_interest = Field ["Line33", "Amount"] Amount,
+   line34_education = Field ["Line34", "Amount"] Amount,
+   line35_transferredSpouse = Field ["Line35", "Amount"] Amount,
+   line36 = Field ["Line36", "Amount"] Amount,
+   medicalExpenses = within "MedicalExp" Rank2.<$> medicalExpensesFields,
+   line43 = Field ["Line43", "Amount"] Amount,
+   line44_sum = subCalculationFields "Line44" ["Amount1"] ["Amount2"],
+   line45 = Field ["Line45", "Amount"] Amount,
+   line46_rate = Field ["Line46", "Percent"] $ Constant 0.10 Percent,
+   line47_fraction = Field ["Line47", "Amount"] Amount,
+   donations = within "DonationGift" Rank2.<$> donationFields,
+   line50_sum = subCalculationFields "Line50" ["Amount1"] ["Amount2"],
+   line51 = Field ["Line51", "Amount"] Amount}
+
+medicalExpensesFields = MedicalExpenses {
+   expenses = Field ["Line37", "Amount"] Amount,
+   netIncome = Field ["Line38", "Amount"] Amount,
+   incomeRate = Field ["Line39", "PercentAmount"] $ Constant 0.03 Percent,
+   fraction = Field ["Line40", "Amount1"] Amount,
+   lesser = Field ["Line41", "Amount"] Amount,
+   difference = Field ["Line42", "Amount"] Amount}
+
+donationFields = Donations {
+   line48_base = Field ["Line48", "Amount1"] Amount,
+   line48_fraction = Field ["Line48", "Amount2"] Amount,
+   line49_base = Field ["Line49", "Amount1"] Amount,
+   line49_fraction = Field ["Line49", "Amount2"] Amount}
+
+page3Fields = Page3 {
+   partC = within "PartC" Rank2.<$> partCFields,
+   partD = within "PartC" . within "UAITC" Rank2.<$> partDFields}
+
+partCFields = PartC {
+   line52_tax = Field ["Line52", "Amount"] Amount,
+   line53_splitIncomeTax = Field ["Line53", "Amount"] Amount,
+   line54 = Field ["Line54", "Amount"] Amount,
+   line55_copy = Field ["Line55", "Amount"] Amount,
+   line56_dividendCredits = Field ["Line56", "Amount"] Amount,
+   line57_copy = Field ["Line57", "Amount1"] Amount,
+   line57_fraction = Field ["Line57", "Amount2"] Amount,
+   line58_sum = subCalculationFields "Line58" ["Amount1"] ["Amount2"],
+   line59_difference = Field ["Line59", "Amount"] Amount,
+   line60_fromT691 = Field ["Line60", "Amount1"] Amount,
+   line60_fraction = Field ["Line60", "Amount2"] Amount,
+   line61 = Field ["Line61", "Amount"] Amount,
+   line62_foreignCredit = Field ["Line62", "Amount"] Amount,
+   line63_difference = Field ["Line63", "Amount"] Amount,
+   line64_political = Field ["PoliticalCont", "Line64", "Amount"] Amount,
+   line65_political = Field ["PoliticalCont", "Line65", "Amount"] Amount,
+   line66_tax = Field ["PoliticalCont", "Line66", "Amount"] Amount}
+
+partDFields = PartD {
+   line67_investorCredit = Field ["Line67", "Amount"] Amount,
+   line68_stockCredit = Field ["Line68", "Amount"] Amount,
+   line69_credits = Field ["Line69", "Amount"] Amount}
diff --git a/src/Tax/Canada/Province/AB/AB428/Fix.hs b/src/Tax/Canada/Province/AB/AB428/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/AB/AB428/Fix.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.AB.AB428.Fix (AB428, fixAB428) where
+
+import Control.Applicative (liftA2)
+import Control.Monad (guard)
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.AB.AB428.Types
+import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket,
+                          BaseCredit(cont), MedicalExpenses (difference),
+                          SubCalculation (result), TaxIncomeBracket (equalsTax))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixAB428 :: AB428 Maybe -> AB428 Maybe
+fixAB428 = fixEq $ \ab428@AB428{..}-> AB428{page1 = fixPage1 page1,
+                                            page2 = fixPage2 ab428 page2,
+                                            page3 = fixPage3 ab428 page3}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \Page1{..}-> Page1{
+   income = income,
+   partA = fixPage1PartA income partA,
+   partB = fixPage1PartB partB}
+
+fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe
+fixPage1PartA income = fixEq $ \Page1PartA{..}-> Page1PartA{
+   column1 = fixTaxIncomeBracket income (Just column2) column1,
+   column2 = fixTaxIncomeBracket income (Just column3) column2,
+   column3 = fixTaxIncomeBracket income (Just column4) column3,
+   column4 = fixTaxIncomeBracket income (Just column5) column4,
+   column5 = fixTaxIncomeBracket income Nothing column5}
+
+fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe
+fixPage1PartB = fixEq $ \part@Page1PartB{..}-> part{
+   line9_basic = Just 21003,
+   spouseAmount = fixBaseCredit spouseAmount,
+   dependantAmount = fixBaseCredit dependantAmount,
+   line18 = totalOf [line9_basic, line10_age, spouseAmount.cont, dependantAmount.cont, line17_infirm],
+   line24_sum = fixSubCalculation $
+                totalOf [line19_cppQpp,
+                         line20_cppQpp,
+                         line21_employmentInsurance,
+                         line22_employmentInsurance,
+                         line23_adoption],
+   line25 = totalOf [line18, line24_sum.result]}
+
+fixPage2 :: AB428 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 ab428 = fixEq $ \Page2{..}-> Page2{
+  partB = fixPage2PartB ab428 partB}
+
+fixPage2PartB :: AB428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe
+fixPage2PartB ab428 = fixEq $ \part@Page2PartB{..}-> part{
+   line26 = ab428.page1.partB.line25,
+   line29 = totalOf [line26, line27_pension, line28_caregiver],
+   line32 = totalOf [line29, line30_disability, line31],
+   line36 = totalOf [line32, line33_interest, line34_education, line35_transferredSpouse],
+   medicalExpenses = fixMedicalExpenses 2714 medicalExpenses,
+   line44_sum = fixSubCalculation $ totalOf [medicalExpenses.difference, line43],
+   line45 = totalOf [line36, line44_sum.result],
+   line47_fraction = line46_rate `fractionOf` line45,
+   donations = fixDonations donations,
+   line50_sum = fixSubCalculation $ totalOf [donations.line48_fraction, donations.line49_fraction],
+   line51 = totalOf [line47_fraction, line50_sum.result]}
+
+fixDonations :: Donations Maybe -> Donations Maybe
+fixDonations = fixEq $ \part@Donations{..} -> part{
+   line48_fraction = Just 0.6 `fractionOf` line48_base,
+   line49_fraction = Just 0.21 `fractionOf` line49_base}
+
+fixPage3 :: AB428 Maybe -> Page3 Maybe -> Page3 Maybe
+fixPage3 ab428 = fixEq $ \page@Page3{..}-> page{
+   partC = fixPartC ab428 partC,
+   partD = fixPartD ab428 partD}
+
+fixPartC :: AB428 Maybe -> PartC Maybe -> PartC Maybe
+fixPartC ab428 = fixEq $ \part@PartC{..}-> part{
+   line52_tax = totalOf [ab428.page1.partA.column1.equalsTax,
+                         ab428.page1.partA.column2.equalsTax,
+                         ab428.page1.partA.column3.equalsTax,
+                         ab428.page1.partA.column4.equalsTax,
+                         ab428.page1.partA.column5.equalsTax],
+   line54 = totalOf [line52_tax, line53_splitIncomeTax],
+   line55_copy = ab428.page2.partB.line51,
+   line57_fraction = Just 0.35 `fractionOf` line57_copy,
+   line58_sum = fixSubCalculation $ totalOf [line55_copy, line56_dividendCredits, line57_fraction],
+   line59_difference = nonNegativeDifference line54 line58_sum.result,
+   line60_fraction = Just 0.35 `fractionOf` line60_fromT691,
+   line61 = totalOf [line59_difference, line60_fraction],
+   line63_difference = nonNegativeDifference line61 line62_foreignCredit,
+   line66_tax = nonNegativeDifference line63_difference line65_political}
+
+fixPartD :: AB428 Maybe -> PartD Maybe -> PartD Maybe
+fixPartD _ab428 = fixEq $ \part@PartD{..}-> part{
+   line69_credits = totalOf [line67_investorCredit, line68_stockCredit]}
diff --git a/src/Tax/Canada/Province/AB/AB428/Types.hs b/src/Tax/Canada/Province/AB/AB428/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/AB/AB428/Types.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.AB.AB428.Types where
+
+import Data.Fixed (Centi)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (BaseCredit, MedicalExpenses, SubCalculation, TaxIncomeBracket)
+
+data AB428 line = AB428 {
+   page1 :: Page1 line,
+   page2 :: Page2 line,
+   page3 :: Page3 line}
+
+data Page1 line = Page1 {
+   income :: line Centi,
+   partA :: Page1PartA line,
+   partB :: Page1PartB line}
+
+data Page1PartA line = Page1PartA {
+   column1 :: TaxIncomeBracket line,
+   column2 :: TaxIncomeBracket line,
+   column3 :: TaxIncomeBracket line,
+   column4 :: TaxIncomeBracket line,
+   column5 :: TaxIncomeBracket line}
+
+data Page1PartB line = Page1PartB {
+   line9_basic :: line Centi,
+   line10_age :: line Centi,
+   spouseAmount :: BaseCredit line,
+   dependantAmount :: BaseCredit line,
+   line17_infirm :: line Centi,
+   line18 :: line Centi,
+   line19_cppQpp :: line Centi,
+   line20_cppQpp :: line Centi,
+   line21_employmentInsurance :: line Centi,
+   line22_employmentInsurance :: line Centi,
+   line23_adoption :: line Centi,
+   line24_sum :: SubCalculation line,
+   line25 :: line Centi}
+
+data Page2 line = Page2 {
+  partB :: Page2PartB line}
+
+data Page2PartB line = Page2PartB {
+   line26 :: line Centi,
+   line27_pension :: line Centi,
+   line28_caregiver :: line Centi,
+   line29 :: line Centi,
+   line30_disability :: line Centi,
+   line31 :: line Centi,
+   line32 :: line Centi,
+   line33_interest :: line Centi,
+   line34_education :: line Centi,
+   line35_transferredSpouse :: line Centi,
+   line36 :: line Centi,
+   medicalExpenses :: MedicalExpenses line,
+   line43 :: line Centi,
+   line44_sum :: SubCalculation line,
+   line45 :: line Centi,
+   line46_rate :: line Rational,
+   line47_fraction :: line Centi,
+   donations :: Donations line,
+   line50_sum :: SubCalculation line,
+   line51 :: line Centi}
+
+data Donations line = Donations {
+   line48_base :: line Centi,
+   line48_fraction :: line Centi,
+   line49_base :: line Centi,
+   line49_fraction :: line Centi}
+
+data Page3 line = Page3 {
+   partC :: PartC line,
+   partD :: PartD line}
+
+data PartC line = PartC {
+   line52_tax :: line Centi,
+   line53_splitIncomeTax :: line Centi,
+   line54 :: line Centi,
+   line55_copy :: line Centi,
+   line56_dividendCredits :: line Centi,
+   line57_copy :: line Centi,
+   line57_fraction :: line Centi,
+   line58_sum :: SubCalculation line,
+   line59_difference :: line Centi,
+   line60_fromT691 :: line Centi,
+   line60_fraction :: line Centi,
+   line61 :: line Centi,
+   line62_foreignCredit :: line Centi,
+   line63_difference :: line Centi,
+   line64_political :: line Centi,
+   line65_political :: line Centi,
+   line66_tax :: line Centi}
+
+data PartD line = PartD {
+   line67_investorCredit :: line Centi,
+   line68_stockCredit :: line Centi,
+   line69_credits :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Centi), Show (line Rational), Show (line Word))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Centi), Eq (line Rational), Eq (line Word))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''AB428, ''Page1, ''Page2, ''Page3,
+    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''PartC, ''PartD, ''Donations])
diff --git a/src/Tax/Canada/Province/BC.hs b/src/Tax/Canada/Province/BC.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.BC (BC428, bc428Fields, bc479Fields, fixBC428, fixBC479, fixReturns, returnFields, t1Fields) where
+
+import Data.CAProvinceCodes (Code(BC))
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Federal qualified as Federal
+import Tax.Canada.Federal (Forms(t1), fixFederalForms)
+import Tax.Canada.T1.Types (T1 (T1, page7, page8), Page7(Page7, step6_RefundOrBalanceOwing), Page8(Page8))
+import Tax.Canada.T1.Types qualified as T1
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.BC (t1Fields)
+
+import Tax.Canada.Province.BC.BC428.Types qualified as BC
+import Tax.Canada.Province.BC.BC428.Types qualified as BC.Page1 (Page1(..))
+import Tax.Canada.Province.BC.BC428.Types qualified as BC.Page2 (Page2(..))
+import Tax.Canada.Province.BC.BC428.Types (BC428 (BC428))
+import Tax.Canada.Province.BC.BC428.Fix (fixBC428)
+import Tax.Canada.Province.BC.BC428.FieldNames (bc428Fields)
+import Tax.Canada.Province.BC.BC479.Types qualified as BCC
+import Tax.Canada.Province.BC.BC479.Types (BC479 (BC479))
+import Tax.Canada.Province.BC.BC479.Fix (fixBC479)
+import Tax.Canada.Province.BC.BC479.FieldNames (bc479Fields)
+
+import Tax.Canada.Shared(MedicalExpenses(..), BaseCredit(..))
+import Tax.FDF (FieldConst, within)
+import Tax.Util (fixEq, totalOf)
+
+data Returns line = Returns {
+  federal :: Federal.Forms line,
+  bc428 :: BC428 line,
+  bc479 :: BC479 line}
+
+deriving instance (Show (Federal.Forms line), Show (BC428 line), Show (BC479 line)) => Show (Returns line)
+deriving instance (Eq (Federal.Forms line), Eq (BC428 line), Eq (BC479 line)) => Eq (Returns line)
+Rank2.TH.deriveAll ''Returns
+Transformation.Shallow.TH.deriveAll ''Returns
+
+fixReturns :: Returns Maybe -> Returns Maybe
+fixReturns =
+  fixEq $ \Returns{federal = ff@Federal.Forms{t1 = t1@T1{page7 = page7@Page7{step6_RefundOrBalanceOwing},
+                                                         page8 = page8@Page8{step6_RefundOrBalanceOwing = page8step6}}},
+                   bc428 = bc428@BC428{page1 = page1@BC.Page1{partA, partB = partB1@BC.Page1PartB{spouseAmount}},
+                                       page2 = page2@BC.Page2{BC.partB = partB2@BC.Page2PartB{BC.medicalExpenses}},
+                                       page3 = page3@BC.Page3{BC.partC}},
+                   bc479}
+          -> Returns{federal = fixFederalForms
+                               ff{t1 = t1{page7 =
+                                          page7{step6_RefundOrBalanceOwing =
+                                                step6_RefundOrBalanceOwing{T1.line_42800_ProvTerrTax =
+                                                                           bc428.page3.line91_tax}},
+                                          page8 =
+                                          page8{Page8.step6_RefundOrBalanceOwing =
+                                                page8step6{T1.line_47900_ProvTerrCredits =
+                                                           bc479.page3.line42_credits}}}},
+                     bc428 = fixBC428
+                             bc428{BC.page1 =
+                                   page1{BC.Page1.partA =
+                                         partA{BC.income = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome},
+                                         BC.Page1.partB =
+                                         partB1{BC.spouseAmount = spouseAmount{reduction = t1.page1.spouse.line23600}}
+                                        },
+                                   BC.page2 =
+                                   page2{BC.Page2.partB = partB2{BC.line27_cppQpp = t1.page6.line30800,
+                                                                 BC.line28_cppQpp = t1.page6.line31000,
+                                                                 BC.line29_employmentInsurance = t1.page6.line31200,
+                                                                 BC.line30_employmentInsurance = t1.page6.line31217,
+                                                                 BC.line41_interest = t1.page6.line31900,
+                                                                 BC.medicalExpenses =
+                                                                 medicalExpenses{
+                                                                    expenses = t1.page6.medical_expenses.familyExpenses,
+                                                                    netIncome = t1.page4.line_23600_NetIncome}}},
+                                    BC.page3 =
+                                    page3{BC.partC = partC{BC.line66_copy = t1.page7.partC_NetFederalTax.line40427},
+                                          BC.line74_copy = t1.page4.line_23600_NetIncome}},
+                     bc479 = fixBC479
+                             bc479{BCC.page1 =
+                                   bc479.page1{BCC.line1_netIncome_self = t1.page4.line_23600_NetIncome,
+                                               BCC.line1_netIncome_spouse = t1.page1.spouse.line23600,
+                                               BCC.line4_uccb_rdsp_income_self = totalOf [t1.page3.line_11700_UCCB,
+                                                                                          t1.page3.line_12500_RDSP],
+                                               BCC.line7_threshold = if t1.page1.identification.maritalStatus
+                                                                        `elem` [Just T1.Married,
+                                                                                Just T1.LivingCommonLaw]
+                                                                     then Just 18_000
+                                                                     else 15_000 <$ t1.page1.identification.maritalStatus}}}
+
+returnFields :: Returns FieldConst
+returnFields = Returns{
+  federal = Federal.formFieldsForProvince BC,
+  bc428 = within "428" Rank2.<$> bc428Fields,
+  bc479 = within "479" Rank2.<$> bc479Fields}
diff --git a/src/Tax/Canada/Province/BC/BC428/FieldNames.hs b/src/Tax/Canada/Province/BC/BC428/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC428/FieldNames.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.BC.BC428.FieldNames (bc428Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.BC.BC428.Types
+import Tax.Canada.Shared (BaseCredit(..), MedicalExpenses(..), TaxIncomeBracket (..), subCalculationFields)
+import Tax.FDF (Entry (Count, Constant, Amount, Percent), FieldConst (Field, NoField), within)
+
+bc428Fields = within "form1" Rank2.<$> BC428 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" Rank2.<$> page3Fields}
+
+
+page1Fields = Page1 {
+   partA = within "PartA" Rank2.<$> page1PartAFields,
+   partB = within "PartB" Rank2.<$> page1PartBFields}
+
+page1PartAFields = Page1PartA {
+   income = Field ["Line1", "Amount"] Amount,
+   column1 = within "Column1" Rank2.<$>  taxIncomeBracketFields        0 0.0506      0,
+   column2 = within "Column2" Rank2.<$>  taxIncomeBracketFields   45_654 0.077   2_310.09,
+   column3 = within "Column3" Rank2.<$>  taxIncomeBracketFields   91_310 0.105   5_825.60,
+   column4 = within "Column4" Rank2.<$>  taxIncomeBracketFields  104_835 0.1229  7_245.73,
+   column5 = within "Column5" Rank2.<$> (taxIncomeBracketFields' 127_299 0.147  10_006.56){equalsTax = Field ["LIne15", "Amount"] Amount},
+   column6 = within "Column6" Rank2.<$> (taxIncomeBracketFields' 172_602 0.168  16_666.10){rate = Field ["Line12", "Percent_amount"] $ Constant 0.168 Percent},
+   column7 = within "Column7" Rank2.<$>  taxIncomeBracketFields' 240_716 0.205  28_109.25}
+
+taxIncomeBracketFields :: Centi -> Rational -> Centi -> TaxIncomeBracket FieldConst
+taxIncomeBracketFields threshold rate baseTax = TaxIncomeBracket {
+   income = Field ["Line2", "Amount"] Amount,
+   threshold = Field ["Line3", "Amount_ReadOnly"] $ Constant threshold Amount,
+   overThreshold = Field ["Line4", "Amount"] Amount,
+   rate = Field ["Line5", "Percent_Amount"] $ Constant rate Percent,
+   timesRate = Field ["Line6", "Amount"] Amount,
+   baseTax = Field ["Line7", "Amount_ReadOnly"] $ Constant baseTax Amount,
+   equalsTax = Field ["Line8", "Amount"] Amount}
+
+taxIncomeBracketFields' :: Centi -> Rational -> Centi -> TaxIncomeBracket FieldConst
+taxIncomeBracketFields' threshold rate baseTax = TaxIncomeBracket {
+   income = Field ["Line9", "Amount"] Amount,
+   threshold = Field ["Line10", "Amount_ReadOnly"] $ Constant threshold Amount,
+   overThreshold = Field ["Line11", "Amount"] Amount,
+   rate = Field ["Line12", "Percent_Amount"] $ Constant rate Percent,
+   timesRate = Field ["Line13", "Amount"] Amount,
+   baseTax = Field ["Line14", "Amount_ReadOnly"] $ Constant baseTax Amount,
+   equalsTax = Field ["Line15", "Amount"] Amount}
+
+page1PartBFields = Page1PartB {
+   line16_basic = Field ["Line16", "Amount"] Amount,
+   line17_age = Field ["Line17", "Amount"] Amount,
+   spouseAmount = within "Spouse_CPL_Amount" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line18", "Amount"] $ Constant 11_285 Amount,
+       reduction = Field ["Line19", "Amount"] Amount,
+       difference = Field ["Line20", "Amount1"] Amount,
+       cont = Field ["Line20", "Amount2"] Amount},
+   dependantAmount = within "Amount_Eligible_Dependant" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line21", "Amount"] $ Constant 11_285 Amount,
+       reduction = Field ["Line22", "Amount"] Amount,
+       difference = Field ["Line23", "Amount1"] Amount,
+       cont = Field ["Line23", "Amount2"] Amount},
+   line24_caregiver = Field ["Line24", "Amount"] Amount,
+   line25 = Field ["Line25", "Amount"] Amount}
+
+page2Fields = Page2 {
+  partB = page2PartBFields}
+
+page2PartBFields = Page2PartB {
+   line26 = Field ["Line26", "Amount"] Amount,
+   line27_cppQpp = Field ["Line27", "Amount"] Amount,
+   line28_cppQpp = Field ["Line28", "Amount"] Amount,
+   line29_employmentInsurance = Field ["Line29", "Amount"] Amount,
+   line30_employmentInsurance = Field ["Line30", "Amount"] Amount,
+   line31_firefighters = Field ["Line31", "Amount"] Amount,
+   line32_rescue = Field ["Line32", "Amount"] Amount,
+   line33_sum = subCalculationFields "Line33" ["I1", "Amount"] ["I2", "Amount"],
+   line34_adoption = Field ["Line34", "Amount"] Amount,
+   line35 = Field ["Line35", "Amount"] Amount,
+   line36_pension = Field ["Line36", "Amount"] Amount,
+   line37 = Field ["Line37", "Amount"] Amount,
+   line38_disability = Field ["Line38", "Amount"] Amount,
+   line39 = Field ["Line39", "Amount"] Amount,
+   line40 = Field ["Line40", "Amount"] Amount,
+   line41_interest = Field ["Line41", "Amount"] Amount,
+   line42_education = Field ["Line42", "Amount"] Amount,
+   line43_transferredChild = Field ["Line43", "Amount"] Amount,
+   line44_transferredSpouse = Field ["Line44", "Amount"] Amount,
+   line45 = Field ["Line45", "Amount"] Amount,
+   medicalExpenses = within "MedicalExp" Rank2.<$> medicalExpensesFields,
+   line52 = Field ["Line52", "Amount"] Amount,
+   line53_sum = subCalculationFields "Line53" ["Amount1"] ["Amount2"],
+   line54 = Field ["Line54", "Amount"] Amount,
+   line55_rate = Field ["Line55", "PercentAmount_ReadOnly"] $ Constant 0.0506 Percent,
+   line56_fraction = Field ["Line56", "Amount"] Amount,
+   line57_donations = Field ["Line57", "Amount"] Amount,
+   line58 = Field ["Line58", "Amount"] Amount,
+   line59_food = Field ["Line59", "Gifts_from_57", "Amount"] Amount,
+   line59_fraction = Field ["Line59", "Amount"] Amount,
+   line60 = Field ["Line60", "Amount"] Amount}
+
+medicalExpensesFields = MedicalExpenses {
+   expenses = Field ["Line46", "Amount"] Amount,
+   netIncome = Field ["Line47", "Amount"] Amount,
+   incomeRate = Field ["Line48", "PercentAmount_ReadOnly"] $ Constant 0.03 Percent,
+   fraction = Field ["Line49", "Amount"] Amount,
+   lesser = Field ["Line50", "Amount"] Amount,
+   difference = Field ["Line51", "Amount"] Amount}
+
+partCFields = PartC {
+   line61_tax = Field ["Line61", "Amount"] Amount,
+   line62_splitIncomeTax = Field ["Line62", "Amount"] Amount,
+   line63 = Field ["Line63", "Amount"] Amount,
+   line64_copy = Field ["Line64", "Amount"] Amount,
+   line65_dividendCredits = Field ["Line65", "Amount"] Amount,
+   line66_copy = Field ["Line66", "Line40427", "Amount"] Amount,
+   line66_fraction = Field ["Line66", "Amount"] Amount,
+   line67_sum = subCalculationFields "Line67" ["Amount1"] ["Amount2"],
+   line68 = Field ["Line68", "Amount"] Amount,
+   line69_copy = Field ["Line69", "Line120", "Amount"] Amount,
+   line69_fraction = Field ["Line69", "Amount"] Amount,
+   line70 = Field ["Line70", "Amount"] Amount,
+   line71_foreignCredit = Field ["Line71", "Amount"] Amount,
+   line72 = Field ["Line72", "Amount"] Amount}
+
+page3Fields = Page3 {
+   partC = partCFields,
+   line73_basicReduction = Field ["Line73", "Amount"] Amount,
+   line74_copy = Field ["Line74", "Amount"] Amount,
+   line75_base = Field ["Line75", "Amount_ReadOnly"] $ Constant 23_179 Amount,
+   line76_difference = Field ["Line76", "Amount"] Amount,
+   line77_rate = Field ["Line77", "PercentAmount_ReadOnly"] $ Constant 0.0356 Percent,
+   line78_fraction = subCalculationFields "Line78" ["Amount1"] ["Amount2"],
+   line79_difference = subCalculationFields "Line79" ["Amount1"] ["Amount2"],
+   line80_difference = Field ["Line80", "Amount"] Amount,
+   line81_logging = Field ["Line81", "Amount"] Amount,
+   line82_difference = Field ["Line82", "Amount"] Amount,
+   line83_political = Field ["Line83", "Amount"] Amount,
+   line84_political = Field ["Line84", "Amount"] Amount,
+   line85_difference = Field ["Line85", "Amount"] Amount,
+   line86_esop20 = Field ["Line86", "Amount"] Amount,
+   line87_evcc30 = Field ["Line87", "Amount"] Amount,
+   line88_sum = subCalculationFields "Line88" ["Amount1"] ["Amount2"],
+   line89_difference = Field ["Line89", "Amount"] Amount,
+   line90_mining = Field ["Line90", "Amount"] Amount,
+   line91_tax = Field ["Line91", "Amount"] Amount}
diff --git a/src/Tax/Canada/Province/BC/BC428/Fix.hs b/src/Tax/Canada/Province/BC/BC428/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC428/Fix.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.BC.BC428.Fix (BC428, fixBC428) where
+
+import Control.Applicative (liftA2)
+import Control.Monad (guard, mfilter)
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.BC.BC428.Types
+import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket,
+                          BaseCredit(cont), MedicalExpenses (difference),
+                          SubCalculation (result), TaxIncomeBracket (equalsTax))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixBC428 :: BC428 Maybe -> BC428 Maybe
+fixBC428 = fixEq $ \bc428@BC428{..}-> BC428{page1 = fixPage1 page1,
+                                            page2 = fixPage2 bc428 page2,
+                                            page3 = fixPage3 bc428 page3}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \Page1{..}-> Page1{
+   partA = fixPage1PartA partA,
+   partB = fixPage1PartB partB}
+
+fixPage1PartA :: Page1PartA Maybe -> Page1PartA Maybe
+fixPage1PartA = fixEq $ \Page1PartA{..}-> Page1PartA{
+   income = income,
+   column1 = fixTaxIncomeBracket income (Just column2) column1,
+   column2 = fixTaxIncomeBracket income (Just column3) column2,
+   column3 = fixTaxIncomeBracket income (Just column4) column3,
+   column4 = fixTaxIncomeBracket income (Just column5) column4,
+   column5 = fixTaxIncomeBracket income (Just column6) column5,
+   column6 = fixTaxIncomeBracket income (Just column7) column6,
+   column7 = fixTaxIncomeBracket income Nothing column7}
+
+fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe
+fixPage1PartB = fixEq $ \part@Page1PartB{..}-> part{
+   line16_basic = Just 11981,
+   spouseAmount = fixBaseCredit spouseAmount,
+   dependantAmount = fixBaseCredit dependantAmount,
+   line25 = totalOf [line16_basic, line17_age, spouseAmount.cont, dependantAmount.cont, line24_caregiver]}
+
+fixPage2 :: BC428 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 bc428 = fixEq $ \Page2{..}-> Page2{
+  partB = fixPage2PartB bc428 partB}
+
+fixPage2PartB :: BC428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe
+fixPage2PartB bc428 = fixEq $ \part@Page2PartB{..}-> part{
+   line26 = bc428.page1.partB.line25,
+   line33_sum = fixSubCalculation $
+                totalOf [line27_cppQpp,
+                         line28_cppQpp,
+                         line29_employmentInsurance,
+                         line30_employmentInsurance,
+                         line31_firefighters,
+                         line32_rescue],
+   line35 = totalOf [line26, line33_sum.result, line34_adoption],
+   line37 = totalOf [line35, line36_pension],
+   line40 = totalOf [line37, line38_disability, line39],
+   line45 = totalOf [line40, line41_interest, line42_education, line43_transferredChild, line44_transferredSpouse],
+   medicalExpenses = fixMedicalExpenses 2491 medicalExpenses,
+   line53_sum = fixSubCalculation $ totalOf [medicalExpenses.difference, line52],
+   line54 = totalOf [line45, line53_sum.result],
+   line56_fraction = line55_rate `fractionOf` line54,
+   line58 = totalOf [line56_fraction, line57_donations],
+   line59_fraction = Just 0.25 `fractionOf` line59_food,
+   line60 = totalOf [line58, line59_fraction]}
+
+fixPartC :: BC428 Maybe -> PartC Maybe -> PartC Maybe
+fixPartC bc428 = fixEq $ \part@PartC{..}-> part{
+   line61_tax = totalOf [bc428.page1.partA.column1.equalsTax,
+                         bc428.page1.partA.column2.equalsTax,
+                         bc428.page1.partA.column3.equalsTax,
+                         bc428.page1.partA.column4.equalsTax,
+                         bc428.page1.partA.column5.equalsTax,
+                         bc428.page1.partA.column6.equalsTax,
+                         bc428.page1.partA.column7.equalsTax],
+   line63 = totalOf [line61_tax, line62_splitIncomeTax],
+   line64_copy = bc428.page2.partB.line60,
+   line66_fraction = Just 0.337 `fractionOf` line66_copy,
+   line67_sum = fixSubCalculation $ totalOf [line64_copy, line65_dividendCredits, line66_fraction],
+   line68 = nonNegativeDifference line63 line67_sum.result,
+   line69_fraction = Just 0.337 `fractionOf` line69_copy,
+   line70 = totalOf [line68, line69_fraction],
+   line72 = nonNegativeDifference line70 line71_foreignCredit}
+
+fixPage3 :: BC428 Maybe -> Page3 Maybe -> Page3 Maybe
+fixPage3 bc428 = fixEq $ \page@Page3{..}-> page{
+   partC = fixPartC bc428 partC,
+   line73_basicReduction = Just 521,
+   line76_difference = nonNegativeDifference line74_copy line75_base,
+   line78_fraction = fixSubCalculation $ line77_rate `fractionOf` line76_difference,
+   line79_difference = fixSubCalculation $ nonNegativeDifference line73_basicReduction line78_fraction.result,
+   line80_difference = nonNegativeDifference partC.line72 line79_difference.result,
+   line82_difference = nonNegativeDifference line80_difference line81_logging,
+   line85_difference = nonNegativeDifference line82_difference line84_political,
+   line88_sum = fixSubCalculation $ min 2000 <$> totalOf [line86_esop20, line87_evcc30],
+   line89_difference = nonNegativeDifference line85_difference line88_sum.result,
+   line91_tax = nonNegativeDifference line89_difference line90_mining}
diff --git a/src/Tax/Canada/Province/BC/BC428/Types.hs b/src/Tax/Canada/Province/BC/BC428/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC428/Types.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.BC.BC428.Types where
+
+import Data.Fixed (Centi)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (BaseCredit, MedicalExpenses, SubCalculation, TaxIncomeBracket)
+
+data BC428 line = BC428 {
+   page1 :: Page1 line,
+   page2 :: Page2 line,
+   page3 :: Page3 line}
+
+data Page1 line = Page1 {
+   partA :: Page1PartA line,
+   partB :: Page1PartB line}
+
+data Page1PartA line = Page1PartA {
+   income :: line Centi,
+   column1 :: TaxIncomeBracket line,
+   column2 :: TaxIncomeBracket line,
+   column3 :: TaxIncomeBracket line,
+   column4 :: TaxIncomeBracket line,
+   column5 :: TaxIncomeBracket line,
+   column6 :: TaxIncomeBracket line,
+   column7 :: TaxIncomeBracket line}
+
+data Page1PartB line = Page1PartB {
+   line16_basic :: line Centi,
+   line17_age :: line Centi,
+   spouseAmount :: BaseCredit line,
+   dependantAmount :: BaseCredit line,
+   line24_caregiver :: line Centi,
+   line25 :: line Centi}
+
+data Page2 line = Page2 {
+  partB :: Page2PartB line}
+
+data Page2PartB line = Page2PartB {
+   line26 :: line Centi,
+   line27_cppQpp :: line Centi,
+   line28_cppQpp :: line Centi,
+   line29_employmentInsurance :: line Centi,
+   line30_employmentInsurance :: line Centi,
+   line31_firefighters :: line Centi,
+   line32_rescue :: line Centi,
+   line33_sum :: SubCalculation line,
+   line34_adoption :: line Centi,
+   line35 :: line Centi,
+   line36_pension :: line Centi,
+   line37 :: line Centi,
+   line38_disability :: line Centi,
+   line39 :: line Centi,
+   line40 :: line Centi,
+   line41_interest :: line Centi,
+   line42_education :: line Centi,
+   line43_transferredChild :: line Centi,
+   line44_transferredSpouse :: line Centi,
+   line45 :: line Centi,
+   medicalExpenses :: MedicalExpenses line,
+   line52 :: line Centi,
+   line53_sum :: SubCalculation line,
+   line54 :: line Centi,
+   line55_rate :: line Rational,
+   line56_fraction :: line Centi,
+   line57_donations :: line Centi,
+   line58 :: line Centi,
+   line59_food :: line Centi,
+   line59_fraction :: line Centi,
+   line60 :: line Centi}
+
+data PartC line = PartC {
+   line61_tax :: line Centi,
+   line62_splitIncomeTax :: line Centi,
+   line63 :: line Centi,
+   line64_copy :: line Centi,
+   line65_dividendCredits :: line Centi,
+   line66_copy :: line Centi,
+   line66_fraction :: line Centi,
+   line67_sum :: SubCalculation line,
+   line68 :: line Centi,
+   line69_copy :: line Centi,
+   line69_fraction :: line Centi,
+   line70 :: line Centi,
+   line71_foreignCredit :: line Centi,
+   line72 :: line Centi}
+
+data Page3 line = Page3 {
+   partC :: PartC line,
+   line73_basicReduction :: line Centi,
+   line74_copy :: line Centi,
+   line75_base :: line Centi,
+   line76_difference :: line Centi,
+   line77_rate :: line Rational,
+   line78_fraction :: SubCalculation line,
+   line79_difference :: SubCalculation line,
+   line80_difference :: line Centi,
+   line81_logging :: line Centi,
+   line82_difference :: line Centi,
+   line83_political :: line Centi,
+   line84_political :: line Centi,
+   line85_difference :: line Centi,
+   line86_esop20 :: line Centi,
+   line87_evcc30 :: line Centi,
+   line88_sum :: SubCalculation line,
+   line89_difference :: line Centi,
+   line90_mining :: line Centi,
+   line91_tax :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Centi), Show (line Rational), Show (line Word))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Centi), Eq (line Rational), Eq (line Word))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''BC428, ''Page1, ''Page2, ''Page3,
+    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''PartC])
diff --git a/src/Tax/Canada/Province/BC/BC479/FieldNames.hs b/src/Tax/Canada/Province/BC/BC479/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC479/FieldNames.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.BC.BC479.FieldNames (bc479Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.BC.BC479.Types
+import Tax.Canada.Shared (subCalculationFields)
+import Tax.FDF (Entry (Amount, Checkbox, Constant, Count, Percent, Textual), FieldConst (Field), within)
+
+bc479Fields = within "form1" Rank2.<$> BC479 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" Rank2.<$> page3Fields}
+
+page1Fields = Page1 {
+   line1_netIncome_self = Field ["Chart", "Column1", "Line1", "Col1_Amount"] Amount,
+   line1_netIncome_spouse = Field ["Chart", "Column2", "Line1", "Col2_Amount"] Amount,
+   line2_uccb_rdsp_repayment_self = Field ["Chart", "Column1", "Line2", "Col1_Amount"] Amount,
+   line2_uccb_rdsp_repayment_spouse = Field ["Chart", "Column2", "Line2", "Col2_Amount"] Amount,
+   line3_sum_self = Field ["Chart", "Column1", "Line3", "Col1_Amount"] Amount,
+   line3_sum_spouse = Field ["Chart", "Column2", "Line3", "Col2_Amount"] Amount,
+   line4_uccb_rdsp_income_self = Field ["Chart", "Column1", "Line4", "Col1_Amount"] Amount,
+   line4_uccb_rdsp_income_spouse = Field ["Chart", "Column2", "Line4", "Col2_Amount"] Amount,
+   line5_difference_self = Field ["Chart", "Column1", "Line5", "Col1_Amount"] Amount,
+   line5_difference_spouse = Field ["Chart", "Column2", "Line5", "Col2_Amount"] Amount,
+   line6_sum = Field ["Chart", "Line6", "Amount"] Amount,
+   line7_threshold = Field ["Line7", "Amount"] Amount,
+   line8_difference = Field ["Line8", "Amount"] Amount,
+   line_60330_sales = Field ["Line9", "Amount"] Amount,
+   line_60350_spouse = Field ["Line10", "Amount"] Amount,
+   line11_sum = Field ["Line11", "Amount"] Amount,
+   line12_copy = Field ["Line12", "Amount1"] Amount,
+   line12_fraction = Field ["Line12", "Amount2"] Amount,
+   line13_difference = Field ["Line13", "Amount"] Amount,
+   line_60890_separate = Field ["BCSHRTC", "Line60890", "CheckBox"] Checkbox,
+   line_60480_renovation = Field ["BCSHRTC", "Line14", "Line60480", "Amount"] Amount,
+   line14_fraction = Field ["BCSHRTC", "Line14", "Amount"] Amount,
+   line15_sum = Field ["BCSHRTC", "Line15", "Amount"] Amount}
+
+page2Fields = Page2 {
+   line16_copy = Field ["Line16", "Amount"] Amount,
+   line17_venture = Field ["BCVCTC", "Line17", "Amount"] Amount,
+   line_60490_shares = Field ["BCVCTC", "Line18", "Amount"] Amount,
+   line_60491_certificate = Field ["BCVCTC", "Line19", "Account_Number_Comb_EN", "Account_Number"] Textual,
+   line_60495_shares = Field ["BCVCTC", "Line20", "Amount"] Amount,
+   line_60496_certificate = Field ["BCVCTC", "Line21", "Account_Number"] Textual,
+   line22_sum = subCalculationFields "BCVCTC" ["Line22", "I1", "Amount1"] ["Line22", "I2", "Amount2"],
+   line_60510_fromT88 = Field ["BCMETC", "Line23", "Amount"] Amount,
+   line_60530_fromT88 = Field ["BCMETC", "Line24", "Amount"] Amount,
+   line_60545_buildings = Field ["BCCBTC", "Line25", "I1", "Amount1"] Amount,
+   line_60546_partnership = Field ["BCCBTC", "Line26", "I1", "Amount1"] Amount,
+   line27_sum = subCalculationFields "BCCBTC" ["Line27", "I1", "Amount1"] ["Line27", "I2", "Amount2"],
+   line_60550_training = Field ["BCTTC", "Line28", "Amount"] Amount,
+   line_60560_training = Field ["BCTTC", "Line29", "Amount"] Amount,
+   line_60570_ships = Field ["BCTTC", "Line30", "Amount"] Amount,
+   line31_sum = subCalculationFields "BCTTC" ["Line31", "I1", "Amount1"] ["Line31", "I2", "Amount2"],
+   line32_credits = Field ["BCTTC", "Line32", "Amount"] Amount}
+
+page3Fields = Page3 {
+   line33_copy = Field ["Line33", "Amount"] Amount,
+   tenancy_months1 = Field ["Table", "Row1", "Numberofmonths"] Count,
+   tenancy_months2 = Field ["Table", "Row2", "Numberofmonths"] Count,
+   rent_paid1 = Field ["Table", "Row1", "RentPaid"] Amount,
+   rent_paid2 = Field ["Table", "Row2", "Rentpaid"] Amount,
+   line_60575_sum = Field ["Line34", "Amount"] Count,
+   line35_ceiling = Field ["Line35", "Amount_ReadOnly"] $ Constant 400 Amount,
+   line36_income_copy = Field ["Line36", "Amount"] Amount,
+   line37_threshold = Field ["Line37", "AmountRead_Only"] $ Constant 60_000 Amount,
+   line38_difference = Field ["Line38", "Amount"] Amount,
+   line39_rate = Field ["Line39", "PercentAmount_ReadOnly"] $ Constant 0.02 Percent,
+   line40_fraction = subCalculationFields "Line40" ["L1", "Amount"] ["L2", "Amount2"],
+   line_60576_difference = subCalculationFields "Line41" ["I1", "Amount1"] ["I2", "Amount2"],
+   line42_credits = Field ["Line42", "Amount"] Amount}
diff --git a/src/Tax/Canada/Province/BC/BC479/Fix.hs b/src/Tax/Canada/Province/BC/BC479/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC479/Fix.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.BC.BC479.Fix (BC479, fixBC479) where
+
+import Tax.Canada.Province.BC.BC479.Types
+import Tax.Canada.Shared (fixSubCalculation, SubCalculation(result))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixBC479 :: BC479 Maybe -> BC479 Maybe
+fixBC479 = fixEq $ \bc479@BC479{..}-> BC479{page1 = fixPage1 page1,
+                                            page2 = fixPage2 bc479 page2,
+                                            page3 = fixPage3 bc479 page3}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \page@Page1{..}-> page{
+   line3_sum_self = totalOf [line1_netIncome_self, line2_uccb_rdsp_repayment_self],
+   line3_sum_spouse = totalOf [line1_netIncome_spouse, line2_uccb_rdsp_repayment_spouse],
+   line5_difference_self = nonNegativeDifference line3_sum_self line4_uccb_rdsp_income_self,
+   line5_difference_spouse = nonNegativeDifference line3_sum_spouse line4_uccb_rdsp_income_spouse,
+   line6_sum = totalOf [line5_difference_self, line5_difference_spouse],
+   line8_difference = nonNegativeDifference line6_sum line7_threshold,
+   line_60330_sales = Just 75,
+   line11_sum = totalOf [line_60330_sales, line_60350_spouse],
+   line12_copy = line8_difference,
+   line12_fraction = (0.02 *) <$> line8_difference,
+   line13_difference = nonNegativeDifference line11_sum line12_fraction,
+   line14_fraction = (0.1 *) <$> line_60480_renovation,
+   line15_sum = totalOf [line13_difference, line14_fraction]}
+
+fixPage2 :: BC479 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 bc479 = fixEq $ \page2@Page2{..}-> page2{
+   line16_copy = bc479.page1.line15_sum,
+   line22_sum = fixSubCalculation $ totalOf [line17_venture, line_60490_shares, line_60495_shares],
+   line27_sum = fixSubCalculation $ totalOf [line_60545_buildings, line_60546_partnership],
+   line31_sum = fixSubCalculation $ totalOf [line_60550_training, line_60560_training, line_60570_ships],
+   line32_credits = totalOf [line16_copy, line22_sum.result, line27_sum.result, line_60510_fromT88, line31_sum.result]}
+
+fixPage3 :: BC479 Maybe -> Page3 Maybe -> Page3 Maybe
+fixPage3 bc479 = fixEq $ \page3@Page3{..}-> page3{
+   line33_copy = bc479.page2.line32_credits,
+   line_60575_sum = totalOf [tenancy_months1, tenancy_months2],
+   line36_income_copy = bc479.page1.line6_sum,
+   line38_difference = nonNegativeDifference line36_income_copy line37_threshold,
+   line40_fraction = fixSubCalculation $ line39_rate `fractionOf` line38_difference,
+   line_60576_difference = fixSubCalculation $ nonNegativeDifference line35_ceiling line40_fraction.result,
+   line42_credits = totalOf [line33_copy, line_60576_difference.result]}
diff --git a/src/Tax/Canada/Province/BC/BC479/Types.hs b/src/Tax/Canada/Province/BC/BC479/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/BC/BC479/Types.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.BC.BC479.Types where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (SubCalculation)
+
+data BC479 line = BC479 {
+   page1 :: Page1 line,
+   page2 :: Page2 line,
+   page3 :: Page3 line}
+
+data Page1 line = Page1 {
+   line1_netIncome_self :: line Centi,
+   line1_netIncome_spouse :: line Centi,
+   line2_uccb_rdsp_repayment_self :: line Centi,
+   line2_uccb_rdsp_repayment_spouse :: line Centi,
+   line3_sum_self :: line Centi,
+   line3_sum_spouse :: line Centi,
+   line4_uccb_rdsp_income_self :: line Centi,
+   line4_uccb_rdsp_income_spouse :: line Centi,
+   line5_difference_self :: line Centi,
+   line5_difference_spouse :: line Centi,
+   line6_sum :: line Centi,
+   line7_threshold :: line Centi,
+   line8_difference :: line Centi,
+   line_60330_sales :: line Centi,
+   line_60350_spouse :: line Centi,
+   line11_sum :: line Centi,
+   line12_copy :: line Centi,
+   line12_fraction :: line Centi,
+   line13_difference :: line Centi,
+   line_60890_separate :: line Bool,
+   line_60480_renovation :: line Centi,
+   line14_fraction :: line Centi,
+   line15_sum :: line Centi}
+
+data Page2 line = Page2 {
+   line16_copy :: line Centi,
+   line17_venture :: line Centi,
+   line_60490_shares :: line Centi,
+   line_60491_certificate :: line Text,
+   line_60495_shares :: line Centi,
+   line_60496_certificate :: line Text,
+   line22_sum :: SubCalculation line,
+   line_60510_fromT88 :: line Centi,
+   line_60530_fromT88 :: line Centi,
+   line_60545_buildings :: line Centi,
+   line_60546_partnership :: line Centi,
+   line27_sum :: SubCalculation line,
+   line_60550_training :: line Centi,
+   line_60560_training :: line Centi,
+   line_60570_ships :: line Centi,
+   line31_sum :: SubCalculation line,
+   line32_credits :: line Centi}
+
+data Page3 line = Page3 {
+   line33_copy :: line Centi,
+   tenancy_months1 :: line Word,
+   tenancy_months2 :: line Word,
+   rent_paid1 :: line Centi,
+   rent_paid2 :: line Centi,
+   line_60575_sum :: line Word,
+   line35_ceiling :: line Centi,
+   line36_income_copy :: line Centi,
+   line37_threshold :: line Centi,
+   line38_difference :: line Centi,
+   line39_rate :: line Rational,
+   line40_fraction :: SubCalculation line,
+   line_60576_difference :: SubCalculation line,
+   line42_credits :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Bool), Show (line Centi), Show (line Word),
+                              Show (line Rational), Show (line Text)) => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Word),
+                              Eq (line Rational), Eq (line Text)) => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''BC479, ''Page1, ''Page2, ''Page3])
diff --git a/src/Tax/Canada/Province/MB.hs b/src/Tax/Canada/Province/MB.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/MB.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.MB (MB428, fixMB428, fixReturns, mb428Fields, returnFields, t1Fields) where
+
+import qualified Rank2
+
+import Data.CAProvinceCodes (Code(MB))
+
+import Tax.Canada.Federal qualified as Federal
+import Tax.Canada.Federal (Forms(t1), fixFederalForms)
+import Tax.Canada.Federal.Schedule9 qualified as Schedule9
+import Tax.Canada.T1.Types (T1 (T1, page7, page8), Page7(Page7, step6_RefundOrBalanceOwing), Page8(Page8))
+import Tax.Canada.T1.Types qualified as T1
+import Tax.Canada.T1.FieldNames.AB (t1Fields)  -- same T1 form as Alberta
+import Tax.Canada.T1.Fix (fixT1)
+
+import Tax.Canada.Province.MB.MB428.Types qualified as MB
+import Tax.Canada.Province.MB.MB428.Types qualified as MB.Page1 (Page1(..))
+import Tax.Canada.Province.MB.MB428.Types qualified as MB.Page2 (Page2(..))
+import Tax.Canada.Province.MB.MB428.Types (MB428 (MB428))
+import Tax.Canada.Province.MB.MB428.Fix (fixMB428)
+import Tax.Canada.Province.MB.MB428.FieldNames (mb428Fields)
+
+import Tax.Canada.Shared(MedicalExpenses(..), BaseCredit(..))
+import Tax.FDF (FieldConst, within)
+import Tax.Util (fixEq)
+
+import Data.Functor.Product (Product(Pair))
+
+type Returns = Product Federal.Forms MB428
+
+fixReturns :: Returns Maybe -> Returns Maybe
+fixReturns =
+  fixEq $ \(Pair ff@Federal.Forms{t1 = t1@T1{page7 = page7@Page7{step6_RefundOrBalanceOwing},
+                                             page8 = page8@Page8{step6_RefundOrBalanceOwing = page8step6}},
+                                  schedule9}
+                 mb428@MB428{page1 = page1@MB.Page1{partA, partB = partB1@MB.Page1PartB{spouseAmount}},
+                             page2 = page2@MB.Page2{MB.partB = partB2@MB.Page2PartB{MB.medicalExpenses}},
+                             page3 = page3@MB.Page3{MB.partC}})
+          -> Pair (fixFederalForms ff{t1 = t1{page7 =
+                                              page7{step6_RefundOrBalanceOwing =
+                                                    step6_RefundOrBalanceOwing{T1.line_42800_ProvTerrTax =
+                                                                               mb428.page3.partC.line82_tax}}}})
+                  (fixMB428 mb428{MB.page1 =
+                                  page1{MB.Page1.income = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
+                                        MB.Page1.partB = partB1{MB.spouseAmount =
+                                                                   spouseAmount{reduction = t1.page1.spouse.line23600},
+                                                                MB.line19_cppQpp = t1.page6.line30800,
+                                                                MB.line20_cppQpp = t1.page6.line31000,
+                                                                MB.line21_employmentInsurance = t1.page6.line31200,
+                                                                MB.line22_employmentInsurance = t1.page6.line31217}},
+                                  MB.page2 =
+                                  page2{MB.Page2.partB = partB2{MB.line37_interest = t1.page6.line31900,
+                                                                MB.medicalExpenses =
+                                                                medicalExpenses{
+                                                                   expenses = t1.page6.medical_expenses.familyExpenses,
+                                                                   netIncome = t1.page4.line_23600_NetIncome},
+                                                                MB.donations = partB2.donations{
+                                                                   MB.line54_base = schedule9.line13_min,
+                                                                   MB.line55_base = schedule9.line14_difference}}},
+                                  MB.page3 =
+                                  page3{MB.partC = partC{MB.line63_copy = t1.page7.partC_NetFederalTax.line40427}}})
+
+returnFields :: Returns FieldConst
+returnFields = Pair (Federal.formFieldsForProvince MB) (within "428" Rank2.<$> mb428Fields)
diff --git a/src/Tax/Canada/Province/MB/MB428/FieldNames.hs b/src/Tax/Canada/Province/MB/MB428/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/MB/MB428/FieldNames.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.MB.MB428.FieldNames (mb428Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.MB.MB428.Types
+import Tax.Canada.Shared (BaseCredit(..), MedicalExpenses(..), TaxIncomeBracket (..), subCalculationFields)
+import Tax.FDF (Entry (Count, Constant, Amount, Percent), FieldConst (Field, NoField), within)
+
+mb428Fields = within "form1" Rank2.<$> MB428 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" Rank2.<$> page3Fields}
+
+
+page1Fields = Page1 {
+   income = Field ["Line1", "Amount"] Amount,
+   partA = within "Table" Rank2.<$> page1PartAFields,
+   partB = page1PartBFields}
+
+page1PartAFields = Page1PartA {
+   column1 = within "Column1" Rank2.<$> taxIncomeBracketFields      0  0.108      0,
+   column2 = within "Column2" Rank2.<$> taxIncomeBracketFields  36_842 0.1275 3_978.94,
+   column3 = within "Column3" Rank2.<$> (taxIncomeBracketFields 79_625 0.174  9_433.77)}
+
+taxIncomeBracketFields :: Centi -> Rational -> Centi -> TaxIncomeBracket FieldConst
+taxIncomeBracketFields threshold rate baseTax = TaxIncomeBracket {
+   income = Field ["Line2", "Amount"] Amount,
+   threshold = Field ["Line3", "Amount"] $ Constant threshold Amount,
+   overThreshold = Field ["Line4", "Amount"] Amount,
+   rate = Field ["Line5", "Percent"] $ Constant rate Percent,
+   timesRate = Field ["Line6", "Amount"] Amount,
+   baseTax = Field ["Line7", "Amount"] $ Constant baseTax Amount,
+   equalsTax = Field ["Line8", "Amount"] Amount}
+
+page1PartBFields = Page1PartB {
+   line9_basic = Field ["Line9", "Amount"] Amount,
+   line10_age = Field ["Line10", "Amount"] Amount,
+   spouseAmount = BaseCredit{
+       baseAmount = Field ["Line11", "Amount"] $ Constant 9_134 Amount,
+       reduction = Field ["Line12", "Amount"] Amount,
+       difference = Field ["line13", "Amount1"] Amount,
+       cont = Field ["line13", "Amount2"] Amount},
+   dependantAmount = BaseCredit{
+       baseAmount = Field ["Line14", "Amount"] $ Constant 9_134 Amount,
+       reduction = Field ["Line15", "Amount"] Amount,
+       difference = Field ["Line16", "Amount1"] Amount,
+       cont = Field ["Line16", "Amount2"] Amount},
+   line17_infirm = Field ["Line17", "Amount"] Amount,
+   line18 = Field ["Line18", "Amount"] Amount,
+   line19_cppQpp = Field ["Line19", "Amount"] Amount,
+   line20_cppQpp = Field ["Line20", "Amount"] Amount,
+   line21_employmentInsurance = Field ["Line21", "Amount"] Amount,
+   line22_employmentInsurance = Field ["Line22", "Amount"] Amount,
+   line23_firefighters = Field ["Line23", "Amount"] Amount,
+   line24_rescue = Field ["Line24", "Amount"] Amount,
+   line25_fitness = Field ["Line25", "Amount"] Amount,
+   line26_arts = Field ["Line26", "Amount"] Amount,
+   line27_adoption = Field ["Line27", "Amount"] Amount,
+   line28_sum = subCalculationFields "Line28" ["Amount1"] ["Amount2"],
+   line29 = Field ["Line29", "Amount"] Amount}
+
+page2Fields = Page2 {
+  partB = within "PartB" Rank2.<$> page2PartBFields}
+
+page2PartBFields = Page2PartB {
+   line30 = Field ["Line30", "Amount"] Amount,
+   line31_pension = Field ["Line31", "Amount"] Amount,
+   line32_caregiver = Field ["Line32", "Amount"] Amount,
+   line33 = Field ["Line33", "Amount"] Amount,
+   line34_disability = Field ["Line34", "Amount"] Amount,
+   line35 = Field ["Line35", "Amount"] Amount,
+   line36 = Field ["Line36", "Amount"] Amount,
+   line37_interest = Field ["Line37", "Amount"] Amount,
+   line38_education = Field ["Line38", "Amount"] Amount,
+   line39_transferredChild = Field ["Line39", "Amount"] Amount,
+   line40_transferredSpouse = Field ["Line40", "Amount"] Amount,
+   line41_family = Field ["Line41", "Amount"] Amount,
+   line42_sum = Field ["Line42", "Amount"] Amount,
+   medicalExpenses = within "MedicalExpenses" Rank2.<$> medicalExpensesFields,
+   line49 = Field ["Line49", "Amount"] Amount,
+   line50_sum = subCalculationFields "Line50" ["Amount1"] ["Amount2"],
+   line51 = Field ["Line51", "Amount"] Amount,
+   line52_rate = Field ["Line52", "Percent_ReadOnly"] $ Constant 0.108 Percent,
+   line53_fraction = Field ["Line53", "Amount"] Amount,
+   donations = donationFields,
+   line56_sum = subCalculationFields "Line56" ["Amount1"] ["Amount2"],
+   line57 = Field ["Line57", "Amount"] Amount}
+
+medicalExpensesFields = MedicalExpenses {
+   expenses = Field ["Line43", "Amount"] Amount,
+   netIncome = Field ["Line44", "Amount"] Amount,
+   incomeRate = Field ["Line45", "Percent_ReadOnly"] $ Constant 0.03 Percent,
+   fraction = Field ["Line46", "Amount"] Amount,
+   lesser = Field ["Line47", "Amount"] Amount,
+   difference = Field ["Line48", "Amount"] Amount}
+
+donationFields = Donations {
+   line54_base = Field ["Line54", "Amount1"] Amount,
+   line54_fraction = Field ["Line54", "Amount2"] Amount,
+   line55_base = Field ["Line55", "Amount1"] Amount,
+   line55_fraction = Field ["Line55", "Amount2"] Amount}
+
+page3Fields = Page3 {
+   partC = within "PartC" Rank2.<$> partCFields}
+
+partCFields = PartC {
+   line58_tax = Field ["Line58", "Amount"] Amount,
+   line59_splitIncomeTax = Field ["Line59", "Amount"] Amount,
+   line60 = Field ["Line60", "Amount"] Amount,
+   line61_copy = Field ["Line61", "Amount"] Amount,
+   line62_dividendCredits = Field ["Line62", "Amount"] Amount,
+   line63_copy = Field ["Line63", "Amount1"] Amount,
+   line63_fraction = Field ["Line63", "Amount2"] Amount,
+   line64_sum = subCalculationFields "Line64" ["Amount1"] ["Amount2"],
+   line65_difference = Field ["Line65", "Amount"] Amount,
+   line66_fromT691 = Field ["Line66", "Amount1"] Amount,
+   line66_fraction = Field ["Line66", "Amount2"] Amount,
+   line67 = Field ["Line67", "Amount"] Amount,
+   line68_political = Field ["Line68", "Amount"] Amount,
+   line69_political = Field ["Line69", "Amount"] Amount,
+   line70_difference = Field ["Line70", "Amount"] Amount,
+   line71_labour = Field ["Line71", "Amount"] Amount,
+   line72_difference = Field ["Line72", "Amount"] Amount,
+   line73_foreignCredit = Field ["Line73", "Amount"] Amount,
+   line74_difference = Field ["Line74", "Amount"] Amount,
+   line75_community = Field ["Line75", "Amount"] Amount,
+   line76_difference = Field ["Line76", "Amount"] Amount,
+   line77_venture = Field ["Line77", "Amount"] Amount,
+   line78_difference = Field ["Line78", "Amount"] Amount,
+   line79_sharePurchase = Field ["Line79", "Amount"] Amount,
+   line80_difference = Field ["Line80", "Amount"] Amount,
+   line81_mineral = Field ["Line81", "Amount"] Amount,
+   line82_tax = Field ["Line82", "Amount"] Amount}
diff --git a/src/Tax/Canada/Province/MB/MB428/Fix.hs b/src/Tax/Canada/Province/MB/MB428/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/MB/MB428/Fix.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.MB.MB428.Fix (MB428, fixMB428) where
+
+import Control.Applicative (liftA2)
+import Control.Monad (guard)
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.MB.MB428.Types
+import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket,
+                          BaseCredit(cont), MedicalExpenses (difference),
+                          SubCalculation (result), TaxIncomeBracket (equalsTax))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixMB428 :: MB428 Maybe -> MB428 Maybe
+fixMB428 = fixEq $ \mb428@MB428{..}-> MB428{page1 = fixPage1 page1,
+                                            page2 = fixPage2 mb428 page2,
+                                            page3 = fixPage3 mb428 page3}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \Page1{..}-> Page1{
+   income = income,
+   partA = fixPage1PartA income partA,
+   partB = fixPage1PartB partB}
+
+fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe
+fixPage1PartA income = fixEq $ \Page1PartA{..}-> Page1PartA{
+   column1 = fixTaxIncomeBracket income (Just column2) column1,
+   column2 = fixTaxIncomeBracket income (Just column3) column2,
+   column3 = fixTaxIncomeBracket income Nothing column3}
+
+fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe
+fixPage1PartB = fixEq $ \part@Page1PartB{..}-> part{
+   line9_basic = Just 15000,
+   spouseAmount = fixBaseCredit spouseAmount,
+   dependantAmount = fixBaseCredit dependantAmount,
+   line18 = totalOf [line9_basic, line10_age, spouseAmount.cont, dependantAmount.cont, line17_infirm],
+   line28_sum = fixSubCalculation $
+                totalOf [line19_cppQpp,
+                         line20_cppQpp,
+                         line21_employmentInsurance,
+                         line22_employmentInsurance,
+                         line23_firefighters,
+                         line24_rescue,
+                         line25_fitness,
+                         line26_arts,
+                         line27_adoption],
+   line29 = totalOf [line18, line28_sum.result]}
+
+fixPage2 :: MB428 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 mb428 = fixEq $ \Page2{..}-> Page2{
+  partB = fixPage2PartB mb428 partB}
+
+fixPage2PartB :: MB428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe
+fixPage2PartB mb428 = fixEq $ \part@Page2PartB{..}-> part{
+   line30 = mb428.page1.partB.line29,
+   line33 = totalOf [line30, line31_pension, line32_caregiver],
+   line36 = totalOf [line33, line34_disability, line35],
+   line42_sum = totalOf [line36,
+                         line37_interest,
+                         line38_education,
+                         line39_transferredChild,
+                         line40_transferredSpouse,
+                         line41_family],
+   medicalExpenses = fixMedicalExpenses 1728 medicalExpenses,
+   line50_sum = fixSubCalculation $ totalOf [medicalExpenses.difference, line49],
+   line51 = totalOf [line42_sum, line50_sum.result],
+   line53_fraction = line52_rate `fractionOf` line51,
+   donations = fixDonations donations,
+   line56_sum = fixSubCalculation $ totalOf [donations.line54_fraction, donations.line55_fraction],
+   line57 = totalOf [line53_fraction, line56_sum.result]}
+
+fixDonations :: Donations Maybe -> Donations Maybe
+fixDonations = fixEq $ \part@Donations{..} -> part{
+   line54_fraction = Just 0.108 `fractionOf` line54_base,
+   line55_fraction = Just 0.174 `fractionOf` line55_base}
+
+fixPage3 :: MB428 Maybe -> Page3 Maybe -> Page3 Maybe
+fixPage3 mb428 = fixEq $ \page@Page3{..}-> page{
+   partC = fixPartC mb428 partC}
+
+fixPartC :: MB428 Maybe -> PartC Maybe -> PartC Maybe
+fixPartC mb428 = fixEq $ \part@PartC{..}-> part{
+   line58_tax = totalOf [mb428.page1.partA.column1.equalsTax,
+                         mb428.page1.partA.column2.equalsTax,
+                         mb428.page1.partA.column3.equalsTax],
+   line60 = totalOf [line58_tax, line59_splitIncomeTax],
+   line61_copy = mb428.page2.partB.line57,
+   line63_fraction = Just 0.5 `fractionOf` line63_copy,
+   line64_sum = fixSubCalculation $ totalOf [line61_copy, line62_dividendCredits, line63_fraction],
+   line65_difference = nonNegativeDifference line60 line64_sum.result,
+   line66_fraction = Just 0.5 `fractionOf` line66_fromT691,
+   line67 = totalOf [line65_difference, line66_fraction],
+   line70_difference = nonNegativeDifference line67 line69_political,
+   line72_difference = nonNegativeDifference line70_difference line71_labour,
+   line74_difference = nonNegativeDifference line72_difference line73_foreignCredit,
+   line76_difference = nonNegativeDifference line74_difference line75_community,
+   line78_difference = nonNegativeDifference line76_difference line77_venture,
+   line80_difference = nonNegativeDifference line78_difference line79_sharePurchase,
+   line82_tax = nonNegativeDifference line80_difference line81_mineral}
diff --git a/src/Tax/Canada/Province/MB/MB428/Types.hs b/src/Tax/Canada/Province/MB/MB428/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/MB/MB428/Types.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.MB.MB428.Types where
+
+import Data.Fixed (Centi)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (BaseCredit, MedicalExpenses, SubCalculation, TaxIncomeBracket)
+
+data MB428 line = MB428 {
+   page1 :: Page1 line,
+   page2 :: Page2 line,
+   page3 :: Page3 line}
+
+data Page1 line = Page1 {
+   income :: line Centi,
+   partA :: Page1PartA line,
+   partB :: Page1PartB line}
+
+data Page1PartA line = Page1PartA {
+   column1 :: TaxIncomeBracket line,
+   column2 :: TaxIncomeBracket line,
+   column3 :: TaxIncomeBracket line}
+
+data Page1PartB line = Page1PartB {
+   line9_basic :: line Centi,
+   line10_age :: line Centi,
+   spouseAmount :: BaseCredit line,
+   dependantAmount :: BaseCredit line,
+   line17_infirm :: line Centi,
+   line18 :: line Centi,
+   line19_cppQpp :: line Centi,
+   line20_cppQpp :: line Centi,
+   line21_employmentInsurance :: line Centi,
+   line22_employmentInsurance :: line Centi,
+   line23_firefighters :: line Centi,
+   line24_rescue :: line Centi,
+   line25_fitness :: line Centi,
+   line26_arts :: line Centi,
+   line27_adoption :: line Centi,
+   line28_sum :: SubCalculation line,
+   line29 :: line Centi}
+
+data Page2 line = Page2 {
+  partB :: Page2PartB line}
+
+data Page2PartB line = Page2PartB {
+   line30 :: line Centi,
+   line31_pension :: line Centi,
+   line32_caregiver :: line Centi,
+   line33 :: line Centi,
+   line34_disability :: line Centi,
+   line35 :: line Centi,
+   line36 :: line Centi,
+   line37_interest :: line Centi,
+   line38_education :: line Centi,
+   line39_transferredChild :: line Centi,
+   line40_transferredSpouse :: line Centi,
+   line41_family :: line Centi,
+   line42_sum :: line Centi,
+   medicalExpenses :: MedicalExpenses line,
+   line49 :: line Centi,
+   line50_sum :: SubCalculation line,
+   line51 :: line Centi,
+   line52_rate :: line Rational,
+   line53_fraction :: line Centi,
+   donations :: Donations line,
+   line56_sum :: SubCalculation line,
+   line57 :: line Centi}
+
+data Donations line = Donations {
+   line54_base :: line Centi,
+   line54_fraction :: line Centi,
+   line55_base :: line Centi,
+   line55_fraction :: line Centi}
+
+data Page3 line = Page3 {
+   partC :: PartC line}
+
+data PartC line = PartC {
+   line58_tax :: line Centi,
+   line59_splitIncomeTax :: line Centi,
+   line60 :: line Centi,
+   line61_copy :: line Centi,
+   line62_dividendCredits :: line Centi,
+   line63_copy :: line Centi,
+   line63_fraction :: line Centi,
+   line64_sum :: SubCalculation line,
+   line65_difference :: line Centi,
+   line66_fromT691 :: line Centi,
+   line66_fraction :: line Centi,
+   line67 :: line Centi,
+   line68_political :: line Centi,
+   line69_political :: line Centi,
+   line70_difference :: line Centi,
+   line71_labour :: line Centi,
+   line72_difference :: line Centi,
+   line73_foreignCredit :: line Centi,
+   line74_difference :: line Centi,
+   line75_community :: line Centi,
+   line76_difference :: line Centi,
+   line77_venture :: line Centi,
+   line78_difference :: line Centi,
+   line79_sharePurchase :: line Centi,
+   line80_difference :: line Centi,
+   line81_mineral :: line Centi,
+   line82_tax :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Centi), Show (line Rational), Show (line Word))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Centi), Eq (line Rational), Eq (line Word))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''MB428, ''Page1, ''Page2, ''Page3,
+    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''PartC, ''Donations])
diff --git a/src/Tax/Canada/Province/NB.hs b/src/Tax/Canada/Province/NB.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/NB.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Province.NB (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.NB (t1Fields)
diff --git a/src/Tax/Canada/Province/NL.hs b/src/Tax/Canada/Province/NL.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/NL.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Province.NL (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.NL (t1Fields)
diff --git a/src/Tax/Canada/Province/ON.hs b/src/Tax/Canada/Province/ON.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.ON (Returns(..), ON428, ON479, fixON428, fixON479, fixReturns,
+                               returnFields, t1Fields, on428Fields, on479Fields) where
+
+import Data.CAProvinceCodes (Code(ON))
+import Rank2 qualified
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Federal qualified as Federal
+import Tax.Canada.Federal (Forms(t1), fixFederalForms)
+import Tax.Canada.Federal.Schedule9 qualified as Schedule9
+import Tax.Canada.T1.Types (T1 (T1, page7, page8), Page7(Page7, step6_RefundOrBalanceOwing), Page8(Page8))
+import Tax.Canada.T1.Types qualified as T1
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.ON (t1Fields)
+
+import Tax.Canada.Province.ON.ON428.Types qualified as ON
+import Tax.Canada.Province.ON.ON428.Types qualified as ON.Page1 (Page1(..))
+import Tax.Canada.Province.ON.ON428.Types qualified as ON.Page2 (Page2(..))
+import Tax.Canada.Province.ON.ON428.Types (ON428 (ON428))
+import Tax.Canada.Province.ON.ON428.Fix (fixON428)
+import Tax.Canada.Province.ON.ON428.FieldNames (on428Fields)
+import Tax.Canada.Province.ON.ON479.Types (ON479 (ON479, page2), Page2(line23_credits))
+import Tax.Canada.Province.ON.ON479.Fix (fixON479)
+import Tax.Canada.Province.ON.ON479.FieldNames (on479Fields)
+
+import Tax.Canada.Shared(MedicalExpenses(..), BaseCredit(..))
+import Tax.FDF (FieldConst, within)
+import Tax.Util (fixEq)
+
+data Returns line = Returns {
+  federal :: Federal.Forms line,
+  on428 :: ON428 line,
+  on479 :: ON479 line}
+
+deriving instance (Show (Federal.Forms line), Show (ON428 line), Show (ON479 line)) => Show (Returns line)
+deriving instance (Eq (Federal.Forms line), Eq (ON428 line), Eq (ON479 line)) => Eq (Returns line)
+Rank2.TH.deriveAll ''Returns
+Transformation.Shallow.TH.deriveAll ''Returns
+
+fixReturns :: Returns Maybe -> Returns Maybe
+fixReturns =
+  fixEq $ \Returns{federal = ff@Federal.Forms{t1 = t1@T1{page7 = page7@Page7{step6_RefundOrBalanceOwing},
+                                                         page8 = page8@Page8{step6_RefundOrBalanceOwing = page8step6}},
+                                              schedule9},
+                   on428 = on428@ON428{page1 = page1@ON.Page1{partB = partB1@ON.Page1PartB{spouseAmount}},
+                                       page2 = page2@ON.Page2{ON.partB = partB2@ON.Page2PartB{ON.medicalExpenses},
+                                                              ON.partC}},
+                   on479}
+          -> Returns{federal = fixFederalForms ff{t1 =
+                                                  t1{page7 =
+                                                     page7{step6_RefundOrBalanceOwing =
+                                                           step6_RefundOrBalanceOwing{T1.line_42800_ProvTerrTax=
+                                                                                      on428.page4.line90}},
+                                                     page8 =
+                                                     page8{Page8.step6_RefundOrBalanceOwing =
+                                                           page8step6{T1.line_47900_ProvTerrCredits =
+                                                                      on479.page2.line23_credits}}}},
+                     on428 = fixON428 on428{
+                        ON.page1 =
+                            page1{ON.line1 = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome,
+                                  ON.Page1.partB = partB1{ON.spouseAmount = spouseAmount{reduction = t1.page1.spouse.line23600},
+                                                          ON.line19_cppQpp = t1.page6.line30800,
+                                                          ON.line20_cppQpp = t1.page6.line31000,
+                                                          ON.line21_employmentInsurance = t1.page6.line31200,
+                                                          ON.line22_employmentInsurance = t1.page6.line31217}},
+                        ON.page2 =
+                            page2{ON.Page2.partB = partB2{ON.line32_interest = t1.page6.line31900,
+                                                          ON.medicalExpenses =
+                                                             medicalExpenses{
+                                                             netIncome = t1.page4.line_23600_NetIncome},
+                                                          ON.donations = partB2.donations{
+                                                             ON.line47_base = schedule9.line13_min,
+                                                             ON.line48_base = schedule9.line14_difference}},
+                                  ON.partC = partC{ON.line59_copy = t1.page7.partC_NetFederalTax.line40427}}},
+                     on479}
+
+returnFields :: Returns FieldConst
+returnFields = Returns{
+  federal = Federal.formFieldsForProvince ON,
+  on428 = within "428" Rank2.<$> on428Fields,
+  on479 = within "479" Rank2.<$> on479Fields}
diff --git a/src/Tax/Canada/Province/ON/ON428/FieldNames.hs b/src/Tax/Canada/Province/ON/ON428/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON428/FieldNames.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.ON.ON428.FieldNames (on428Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.ON.ON428.Types
+import Tax.Canada.Province.ON.ON428.Types qualified as HealthPremiumBracket (HealthPremiumBracket(..))
+import Tax.Canada.Shared (BaseCredit(..), MedicalExpenses(..), TaxIncomeBracket (..), subCalculationFields)
+import Tax.FDF (Entry (Count, Constant, Amount, Percent), FieldConst (Field, NoField), within)
+
+on428Fields = within "form1" Rank2.<$> ON428 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" Rank2.<$> page3Fields,
+   page4 = within "Page4" Rank2.<$> page4Fields}
+
+
+page1Fields = Page1 {
+   line1 = Field ["Line1", "Amount"] Amount,
+   partA = within "Chart" Rank2.<$> page1PartAFields,
+   partB = within "Part_B" Rank2.<$> page1PartBFields}
+
+page1PartAFields = Page1PartA {
+   column1 = within "Column1" Rank2.<$> taxIncomeBracketFields 0 0.0505 0,
+   column2 = within "Column2" Rank2.<$> taxIncomeBracketFields 49_231.00 0.0915 2_486.17,
+   column3 = within "Column3" Rank2.<$> taxIncomeBracketFields 98_463.00 0.1116 6_990.89,
+   column4 = within "Column4" Rank2.<$> taxIncomeBracketFields 150_000.00 0.1216 12_742.42,
+   column5 = within "Column5" Rank2.<$> taxIncomeBracketFields 220_000.00 0.1316 21_254.42}
+
+taxIncomeBracketFields :: Centi -> Rational -> Centi -> TaxIncomeBracket FieldConst
+taxIncomeBracketFields threshold rate baseTax = TaxIncomeBracket {
+   income = Field ["Line2", "Amount"] Amount,
+   threshold = Field ["Line3", "Amount"] $ Constant threshold Amount,
+   overThreshold = Field ["Line4", "Amount"] Amount,
+   rate = Field ["Line5", "Percent"] $ Constant rate Percent,
+   timesRate = Field ["Line6", "Amount"] Amount,
+   baseTax = Field ["Line7", "Amount"] $ Constant baseTax Amount,
+   equalsTax = Field ["Line8", "Amount"] Amount}
+
+page1PartBFields = Page1PartB {
+   line9_basic = Field ["Line9", "Amount"] Amount,
+   line10_age = Field ["Line10", "Amount"] Amount,
+   spouseAmount = within "Spouse-Amount" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line11", "Amount"] $ Constant 11_082 Amount,
+       reduction = Field ["Line12", "Amount"] Amount,
+       difference = Field ["Line13", "Amount1"] Amount,
+       cont = Field ["Line13", "Amount2"] Amount},
+   dependantAmount = within "Eligible-Dependant" Rank2.<$> BaseCredit{
+       baseAmount = Field ["Line14", "Amount"] $ Constant 11_082 Amount,
+       reduction = Field ["Line15", "Amount"] Amount,
+       difference = Field ["Line16", "Amount1"] Amount,
+       cont = Field ["Line16", "Amount2"] Amount},
+   line17_caregiver = Field ["Line17", "Amount"] Amount,
+   line18 = Field ["Line18", "Amount"] Amount,
+   line19_cppQpp = Field ["CPP-QPP", "Line19", "Amount"] Amount,
+   line20_cppQpp = Field ["CPP-QPP", "Line20", "Amount"] Amount,
+   line21_employmentInsurance = Field ["Employment-Insurance", "Line21", "Amount"] Amount,
+   line22_employmentInsurance = Field ["Employment-Insurance", "Line22", "Amount"] Amount,
+   line23_adoption = Field ["Line23", "Amount"] Amount,
+   line24_sum = subCalculationFields "Line24" ["Amount1"] ["Amount2"],
+   line25 = Field ["Line25", "Amount"] Amount}
+
+page2Fields = Page2 {
+  partB = page2PartBFields,
+  partC = page2PartCFields}
+
+page2PartBFields = Page2PartB {
+   line26 = Field ["Line26", "Amount"] Amount,
+   line27_pension = Field ["Line27", "Amount"] Amount,
+   line28 = Field ["Line28", "Amount"] Amount,
+   line29_disability = Field ["Line29", "Amount"] Amount,
+   line30 = Field ["Line30", "Amount"] Amount,
+   line31 = Field ["Line31", "Amount"] Amount,
+   line32_interest = Field ["Line32", "Amount"] Amount,
+   line33_education = Field ["Line33", "Amount"] Amount,
+   line34_transferred = Field ["Line34", "Amount"] Amount,
+   line35 = Field ["Line35", "Amount"] Amount,
+   medicalExpenses = within "Medical-Expenses" Rank2.<$> medicalExpensesFields,
+   line42 = Field ["Line42", "Amount"] Amount,
+   line43_sum = subCalculationFields "Line43" ["Amount1"] ["Amount2"],
+   line44 = Field ["Line44", "Amount"] Amount,
+   line45_rate = Field ["Line45", "Percent_ReadOnly"] $ Constant 0.0505 Percent,
+   line46_fraction = Field ["Line46", "Amount"] Amount,
+   donations = within "Donations" Rank2.<$> donationsFields,
+   line50 = Field ["Line50", "Amount"] Amount}
+
+medicalExpensesFields = MedicalExpenses {
+   expenses = Field ["Line36", "Amount"] Amount,
+   netIncome = Field ["Line37", "Amount"] Amount,
+   incomeRate = Field ["Line38", "Percent_ReadOnly"] $ Constant 0.03 Percent,
+   fraction = Field ["Line39", "Amount"] Amount,
+   lesser = Field ["Line40", "Amount"] Amount,
+   difference = Field ["Line41", "Amount"] Amount}
+
+donationsFields = Donations {
+   line47_base = Field ["Line47", "Amount1"] Amount,
+   line47_fraction = Field ["Line47", "Amount2"] Amount,
+   line48_base = Field ["Line48", "Amount1"] Amount,
+   line48_fraction = Field ["Line48", "Amount2"] Amount,
+   line49_sum = subCalculationFields "Line49" ["Amount1"] ["Amount2"]}
+
+page2PartCFields = Page2PartC {
+   line51_tax = Field ["Line51", "Amount"] Amount,
+   line52_credits = Field ["Line52", "Amount"] Amount,
+   line53 = Field ["Line53", "Amount"] Amount,
+   line54 = Field ["Line54", "Amount"] Amount,
+   line55 = Field ["Line55", "Amount"] Amount,
+   line56 = Field ["Min-Tax-Carryover", "Line56", "Amount"] Amount,
+   line57 = Field ["Min-Tax-Carryover", "Line57", "Amount"] Amount,
+   line58 = Field ["Min-Tax-Carryover", "Line58", "Amount"] Amount,
+   line59_copy = Field ["Min-Tax-Carryover", "Line59", "Amount1"] Amount,
+   line59_product = Field ["Min-Tax-Carryover", "Line59", "Amount2"] Amount,
+   line60_lesser = Field ["Min-Tax-Carryover", "Line60", "Amount"] Amount,
+   line61 = Field ["Line61", "Amount"] Amount}
+
+page3Fields = Page3 {
+   line62 = Field ["Line62", "Amount"] Amount,
+   line63 = Field ["ON-Surtax", "Line63", "Amount"] Amount,
+   line64 = Field ["ON-Surtax", "Line64", "Amount"] Amount,
+   line65 = Field ["ON-Surtax", "Line65", "Amount"] Amount,
+   line66_copy = Field ["Line66", "Amount1"] Amount,
+   line66_surtax = Field ["Line66", "Amount2"] Amount,
+   line67_copy = Field ["Line67", "Amount1"] Amount,
+   line67_surtax = Field ["Line67", "Amount2"] Amount,
+   line68_sum = subCalculationFields "Line68" ["Amount1"] ["Amount2"],
+   line69 = Field ["Line69", "Amount2"] Amount,
+   line70 = Field ["Line70", "Amount"] Amount,
+   line71 = Field ["Line71", "Amount"] Amount,
+   line72 = Field ["Line72", "Amount"] Amount,
+   line73 = Field ["Line73", "Amount"] Amount,
+   line74_basicReduction = Field ["Line74", "Amount"] $ Constant 274 Amount,
+   line75_childrenNum = Field ["Line75", "Line_60969", "Number"] Count,
+   line75_amount = Field ["Line75", "Amount"] Amount,
+   line76_childrenNum = Field ["Line76", "Line_60970", "Number"] Count,
+   line76_amount = Field ["Line76", "Amount"] Amount,
+   line77 = Field ["Line77", "Amount"] Amount,
+   line78_copy = Field ["Line78", "Amount1"] Amount,
+   line78_product = Field ["Line78", "Amount2"] Amount,
+   line79 = Field ["Line79", "Amount"] Amount,
+   line80_difference = subCalculationFields "Line80" ["Amount1"] ["Amount2"],
+   line81 = Field ["Line81", "Amount"] Amount,
+   line82 = Field ["Line82", "Amount"] Amount,
+   line83 = Field ["Line83", "Amount"] Amount}
+
+page4Fields = Page4 {
+   line84 = Field ["Line84", "Amount"] Amount,
+   line85_lift = Field ["Line85", "Amount"] Amount,
+   line86 = Field ["Line86", "Amount"] Amount,
+   line87_foodDonations = Field ["Line87", "Line62150", "Amount1"] Amount,
+   line87_fraction = Field ["Line87", "Amount2"] Amount,
+   line88 = Field ["Line88", "Amount"] Amount,
+   line89_health = Field ["Line89", "Amount"] Amount,
+   line90 = Field ["Line90", "Amount"] Amount,
+   healthPremium = within "ON_Health_Prenium-worksheet" . within "Chart_ON_Health_Prenium" Rank2.<$> healthPremiumFields}
+
+healthPremiumFields = HealthPremium {
+   row1 = within "Taxable_Line2" Rank2.<$> healthPremiumBracketFields{HealthPremiumBracket.equalsTax = NoField},
+   row2 = within "Taxable_Line4" Rank2.<$> healthPremiumBracketFields,
+   row3 = within "Taxable_Line6" Rank2.<$> healthPremiumBracketFields,
+   row4 = within "Taxable_Line8" Rank2.<$> healthPremiumBracketFields,
+   row5 = within "Taxable_Line10" Rank2.<$> healthPremiumBracketFields}
+
+healthPremiumBracketFields = HealthPremiumBracket {
+   taxableIncome = Field ["Amount1"] Amount,
+   overThreshold = Field ["Amount2"] Amount,
+   timesRate     = Field ["Amount3"] Amount,
+   equalsTax     = Field ["Amount4"] Amount}
diff --git a/src/Tax/Canada/Province/ON/ON428/Fix.hs b/src/Tax/Canada/Province/ON/ON428/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON428/Fix.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.ON.ON428.Fix (ON428, fixON428) where
+
+import Control.Applicative (liftA2)
+import Control.Monad (guard, mfilter)
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.ON.ON428.Types
+import Tax.Canada.Shared (fixBaseCredit, fixMedicalExpenses, fixSubCalculation, fixTaxIncomeBracket,
+                          BaseCredit(cont), MedicalExpenses (difference),
+                          SubCalculation (result), TaxIncomeBracket (equalsTax))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixON428 :: ON428 Maybe -> ON428 Maybe
+fixON428 = fixEq $ \on428@ON428{..}-> ON428{page1 = fixPage1 page1,
+                                            page2 = fixPage2 on428 page2,
+                                            page3 = fixPage3 on428 page3,
+                                            page4 = fixPage4 on428 page4}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \Page1{..}-> Page1{
+   line1 = line1,
+   partA = fixPage1PartA line1 partA,
+   partB = fixPage1PartB partB}
+
+fixPage1PartA :: Maybe Centi -> Page1PartA Maybe -> Page1PartA Maybe
+fixPage1PartA income = fixEq $ \Page1PartA{..}-> Page1PartA{
+   column1 = fixTaxIncomeBracket income (Just column2) column1,
+   column2 = fixTaxIncomeBracket income (Just column3) column2,
+   column3 = fixTaxIncomeBracket income (Just column4) column3,
+   column4 = fixTaxIncomeBracket income (Just column5) column4,
+   column5 = fixTaxIncomeBracket income Nothing column5}
+
+fixPage1PartB :: Page1PartB Maybe -> Page1PartB Maybe
+fixPage1PartB = fixEq $ \part@Page1PartB{..}-> part{
+   line9_basic = Just 11865,
+   spouseAmount = fixBaseCredit spouseAmount,
+   dependantAmount = fixBaseCredit dependantAmount,
+   line18 = totalOf [line9_basic, line10_age, spouseAmount.cont, dependantAmount.cont, line17_caregiver],
+   line24_sum = fixSubCalculation $
+                totalOf [line19_cppQpp,
+                         line20_cppQpp,
+                         line21_employmentInsurance,
+                         line22_employmentInsurance,
+                         line23_adoption],
+   line25 = totalOf [line18, line24_sum.result]}
+
+fixPage2 :: ON428 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 on428 = fixEq $ \Page2{..}-> Page2{
+  partB = fixPage2PartB on428 partB,
+  partC = fixPage2PartC on428 partC}
+
+fixPage2PartB :: ON428 Maybe -> Page2PartB Maybe -> Page2PartB Maybe
+fixPage2PartB on428 = fixEq $ \part@Page2PartB{..}-> part{
+   line26 = on428.page1.partB.line25,
+   line28 = totalOf [line26, line27_pension],
+   line31 = totalOf [line28, line29_disability, line30],
+   line35 = totalOf [line31, line32_interest, line33_education, line34_transferred],
+   medicalExpenses = fixMedicalExpenses 2685 medicalExpenses,
+   line43_sum = fixSubCalculation $ totalOf [medicalExpenses.difference, line42],
+   line44 = totalOf [line35, line43_sum.result],
+   line46_fraction = line45_rate `fractionOf` line44,
+   donations = fixDonations donations,
+   line50 = totalOf [line46_fraction, donations.line49_sum.result]}
+
+fixPage2PartC :: ON428 Maybe -> Page2PartC Maybe -> Page2PartC Maybe
+fixPage2PartC on428 = fixEq $ \part@Page2PartC{..}-> part{
+   line51_tax = totalOf [on428.page1.partA.column1.equalsTax,
+                         on428.page1.partA.column2.equalsTax,
+                         on428.page1.partA.column3.equalsTax,
+                         on428.page1.partA.column4.equalsTax,
+                         on428.page1.partA.column5.equalsTax],
+   line52_credits = on428.page2.partB.line50,
+   line53 = nonNegativeDifference line51_tax line52_credits,
+   line55 = totalOf [line53, line54],
+   line56 = line53,
+   line58 = nonNegativeDifference line56 line57,
+   line59_product = Just 0.3367 `fractionOf` line59_copy,
+   line60_lesser = min <$> line58 <*> line59_product,
+   line61 = nonNegativeDifference line55 line60_lesser}
+
+fixDonations :: Donations Maybe -> Donations Maybe
+fixDonations = fixEq $ \part@Donations{..} -> part{
+   line47_fraction = Just 0.0505 `fractionOf` line47_base,
+   line48_fraction = Just 0.1116 `fractionOf` line48_base,
+   line49_sum = fixSubCalculation $ totalOf [line47_fraction, line48_fraction]}
+
+fixPage3 :: ON428 Maybe -> Page3 Maybe -> Page3 Maybe
+fixPage3 on428 = fixEq $ \page@Page3{..}-> page{
+   line62 = on428.page2.partC.line61,
+   line63 = line62,
+   line64 = on428.page2.partC.line54,
+   line65 = nonNegativeDifference line63 line64,
+   line66_copy = line65,
+   line66_surtax = Just 0.2 `fractionOf` nonNegativeDifference line66_copy (Just 5315),
+   line67_copy = line65,
+   line67_surtax = Just 0.36 `fractionOf` nonNegativeDifference line67_copy (Just 6802),
+   line68_sum = fixSubCalculation $ totalOf [line66_surtax, line67_surtax],
+   line69 = totalOf [line62, line68_sum.result],
+   line70 = on428.page2.partC.line57,
+   line71 = nonNegativeDifference line69 line70,
+   line73 = totalOf [line71, line72],
+   line75_amount = ((506 *) . fromIntegral) <$> line75_childrenNum,
+   line76_amount = ((506 *) . fromIntegral) <$> line76_childrenNum,
+   line77 = totalOf [line74_basicReduction, line75_amount, line76_amount],
+   line78_copy = line77,
+   line78_product = (2 *) <$> line78_copy,
+   line79 = line73,
+   line80_difference = fixSubCalculation $ nonNegativeDifference line78_product line79,
+   line81 = nonNegativeDifference line73 line80_difference.result,
+   line83 = nonNegativeDifference line81 line82}
+
+fixPage4 :: ON428 Maybe -> Page4 Maybe -> Page4 Maybe
+fixPage4 on428 = fixEq $ \page@Page4{..}-> page{
+   line84 = on428.page3.line83,
+   line86 = nonNegativeDifference line84 line85_lift,
+   line87_fraction = Just 0.25 `fractionOf` line87_foodDonations,
+   line88 = nonNegativeDifference line86 line87_fraction,
+   line89_health = totalOf [between 0 20000 0,
+                            healthPremium.row1.equalsTax,
+                            between 25000 36000 300,
+                            healthPremium.row2.equalsTax,
+                            between 38500 48000 450,
+                            healthPremium.row3.equalsTax,
+                            between 48600 72000 600,
+                            healthPremium.row4.equalsTax,
+                            between 72600 200000 750,
+                            healthPremium.row5.equalsTax,
+                            if income > 200600 then Just 900 else Nothing],
+   line90 = totalOf [line88, line89_health],
+   healthPremium = fixHealthPremium income healthPremium}
+   where income = sum on428.page1.line1
+         between floor ceiling tax
+            | income > floor && income <= ceiling = Just tax
+            | otherwise = Nothing
+
+fixHealthPremium :: Centi -> HealthPremium Maybe -> HealthPremium Maybe
+fixHealthPremium income = fixEq $ \HealthPremium{..}-> HealthPremium{
+   row1 = fixHealthPremiumBracket income 20000 25000 0.06 0 row1,
+   row2 = fixHealthPremiumBracket income 36000 38500 0.06 300 row2,
+   row3 = fixHealthPremiumBracket income 48000 48600 0.25 450 row3,
+   row4 = fixHealthPremiumBracket income 72000 72600 0.25 600 row4,
+   row5 = fixHealthPremiumBracket income 200000 200600 0.25 750 row5}
+
+fixHealthPremiumBracket :: Centi -> Centi -> Centi -> Rational -> Centi
+                        -> HealthPremiumBracket Maybe -> HealthPremiumBracket Maybe
+fixHealthPremiumBracket income floor ceiling rate base HealthPremiumBracket{..}
+   | income > floor && income < ceiling = HealthPremiumBracket{
+       taxableIncome = Just income,
+       overThreshold = Just $ income - floor,
+       timesRate = Just rate `fractionOf` overThreshold,
+       equalsTax = totalOf [timesRate, Just base]}
+   | otherwise = Rank2.pure Nothing
diff --git a/src/Tax/Canada/Province/ON/ON428/Types.hs b/src/Tax/Canada/Province/ON/ON428/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON428/Types.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.ON.ON428.Types where
+
+import Data.Fixed (Centi)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (BaseCredit, MedicalExpenses, SubCalculation, TaxIncomeBracket)
+
+data ON428 line = ON428 {
+   page1 :: Page1 line,
+   page2 :: Page2 line,
+   page3 :: Page3 line,
+   page4 :: Page4 line}
+
+data Page1 line = Page1 {
+   line1 :: line Centi,
+   partA :: Page1PartA line,
+   partB :: Page1PartB line}
+
+data Page1PartA line = Page1PartA {
+   column1 :: TaxIncomeBracket line,
+   column2 :: TaxIncomeBracket line,
+   column3 :: TaxIncomeBracket line,
+   column4 :: TaxIncomeBracket line,
+   column5 :: TaxIncomeBracket line}
+
+data Page1PartB line = Page1PartB {
+   line9_basic :: line Centi,
+   line10_age :: line Centi,
+   spouseAmount :: BaseCredit line,
+   dependantAmount :: BaseCredit line,
+   line17_caregiver :: line Centi,
+   line18 :: line Centi,
+   line19_cppQpp :: line Centi,
+   line20_cppQpp :: line Centi,
+   line21_employmentInsurance :: line Centi,
+   line22_employmentInsurance :: line Centi,
+   line23_adoption :: line Centi,
+   line24_sum :: SubCalculation line,
+   line25 :: line Centi}
+
+data Page2 line = Page2 {
+  partB :: Page2PartB line,
+  partC :: Page2PartC line}
+
+data Page2PartB line = Page2PartB {
+   line26 :: line Centi,
+   line27_pension :: line Centi,
+   line28 :: line Centi,
+   line29_disability :: line Centi,
+   line30 :: line Centi,
+   line31 :: line Centi,
+   line32_interest :: line Centi,
+   line33_education :: line Centi,
+   line34_transferred :: line Centi,
+   line35 :: line Centi,
+   medicalExpenses :: MedicalExpenses line,
+   line42 :: line Centi,
+   line43_sum :: SubCalculation line,
+   line44 :: line Centi,
+   line45_rate :: line Rational,
+   line46_fraction :: line Centi,
+   donations :: Donations line,
+   line50 :: line Centi}
+
+data Donations line = Donations {
+   line47_base :: line Centi,
+   line47_fraction :: line Centi,
+   line48_base :: line Centi,
+   line48_fraction :: line Centi,
+   line49_sum :: SubCalculation line}
+
+data Page2PartC line = Page2PartC {
+   line51_tax :: line Centi,
+   line52_credits :: line Centi,
+   line53 :: line Centi,
+   line54 :: line Centi,
+   line55 :: line Centi,
+   line56 :: line Centi,
+   line57 :: line Centi,
+   line58 :: line Centi,
+   line59_copy :: line Centi,
+   line59_product :: line Centi,
+   line60_lesser :: line Centi,
+   line61 :: line Centi}
+
+data Page3 line = Page3 {
+   line62 :: line Centi,
+   line63 :: line Centi,
+   line64 :: line Centi,
+   line65 :: line Centi,
+   line66_copy :: line Centi,
+   line66_surtax :: line Centi,
+   line67_copy :: line Centi,
+   line67_surtax :: line Centi,
+   line68_sum :: SubCalculation line,
+   line69 :: line Centi,
+   line70 :: line Centi,
+   line71 :: line Centi,
+   line72 :: line Centi,
+   line73 :: line Centi,
+   line74_basicReduction :: line Centi,
+   line75_amount :: line Centi,
+   line75_childrenNum :: line Word,
+   line76_amount :: line Centi,
+   line76_childrenNum :: line Word,
+   line77 :: line Centi,
+   line78_copy :: line Centi,
+   line78_product :: line Centi,
+   line79 :: line Centi,
+   line80_difference :: SubCalculation line,
+   line81 :: line Centi,
+   line82 :: line Centi,
+   line83 :: line Centi}
+
+data Page4 line = Page4 {
+   line84 :: line Centi,
+   line85_lift :: line Centi,
+   line86 :: line Centi,
+   line87_foodDonations :: line Centi,
+   line87_fraction :: line Centi,
+   line88 :: line Centi,
+   line89_health :: line Centi,
+   line90 :: line Centi,
+   healthPremium :: HealthPremium line}
+
+data HealthPremium line = HealthPremium {
+   row1 :: HealthPremiumBracket line,
+   row2 :: HealthPremiumBracket line,
+   row3 :: HealthPremiumBracket line,
+   row4 :: HealthPremiumBracket line,
+   row5 :: HealthPremiumBracket line}
+
+data HealthPremiumBracket line = HealthPremiumBracket {
+   taxableIncome :: line Centi,
+   overThreshold :: line Centi,
+   timesRate :: line Centi,
+   equalsTax :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Centi), Show (line Rational), Show (line Word))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Centi), Eq (line Rational), Eq (line Word))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''ON428, ''Page1, ''Page2, ''Page3, ''Page4,
+    ''Page1PartA, ''Page1PartB, ''Page2PartB, ''Page2PartC,
+    ''Donations, ''HealthPremium, ''HealthPremiumBracket])
diff --git a/src/Tax/Canada/Province/ON/ON479/FieldNames.hs b/src/Tax/Canada/Province/ON/ON479/FieldNames.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON479/FieldNames.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.Province.ON.ON479.FieldNames (on479Fields) where
+
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.ON.ON479.Types
+import Tax.Canada.Shared (subCalculationFields)
+import Tax.FDF (Entry (Count, Constant, Amount, Percent, RadioButton, Textual), FieldConst (Field), within)
+
+on479Fields = within "form1" Rank2.<$> ON479 {
+   page1 = within "Page1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields}
+
+
+page1Fields = Page1 {
+   line_63050_childcare = Field ["Line1", "Amount"] Amount,
+   line4_homecare_copy = Field ["Line2", "Amount"] Amount,
+   line5_allowable = Field ["Line3", "Percent_ReadOnly"] $ Constant 0.25 Percent,
+   line6_fraction = Field ["Line4", "Amount"] Amount,
+   line7_netIncome_copy = Field ["Line5", "Amount"] Amount,
+   line8_spouse_copy = Field ["Line6", "Amount"] Amount,
+   line9_sum = Field ["Line7", "Amount1"] Amount,
+   line10_base = Field ["Line8", "Amount"] $ Constant 35_000 Amount,
+   line11_difference = Field ["Line9", "Amount"] Amount,
+   line12_rate = Field ["Line10", "Percent_ReadOnly"] $ Constant 0.05 Percent,
+   line13_fraction = subCalculationFields "Line11" ["Amount1"] ["Amount2"],
+   line_63095_difference = subCalculationFields "Line12" ["Amount1"] ["Amount2"],
+   line_63100_transit = Field ["Line13", "Line63100", "Amount"] Amount,
+   line_63100_fraction = Field ["Line13", "Amount"] Amount,
+   line16_sum = Field ["Line14", "Amount"] Amount}
+
+page2Fields = Page2 {
+   line17_copy = Field ["Line15", "Amount"] Amount,
+   line_63110_contributions = Field ["ON_Political_Contribution", "Line16", "Amount"] Amount,
+   line_63110_credit = Field ["ON_Political_Contribution", "Line17", "Amount"] Amount,
+   line_63220_fromT1221 = Field ["Line18", "Line63220", "Amount1"] Amount,
+   line_63220_fraction = Field ["Line18", "Amount2"] Amount,
+   line_63260_placements = Field ["ON_coop_education", "Line63260", "NmbrApprentices"] Count,
+   line_63265_partnership = Field ["ON_coop_education", "Line63265", "RadioButtonGroup"] $ RadioButton [True, False],
+   line_63270_business = Field ["ON_coop_education", "Line63270", "BusinessNumber_9_Comb_Bottom_Adv", "BusinessNumber"] Textual,
+   line_63300_total = Field ["Line19", "Amount"] Amount,
+   line23_credits = Field ["Line20", "Amount"] Amount}
diff --git a/src/Tax/Canada/Province/ON/ON479/Fix.hs b/src/Tax/Canada/Province/ON/ON479/Fix.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON479/Fix.hs
@@ -0,0 +1,39 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Tax.Canada.Province.ON.ON479.Fix (ON479, fixON479) where
+
+import Control.Applicative (liftA2)
+import Control.Monad (guard, mfilter)
+import Data.Fixed (Centi)
+import Rank2 qualified
+
+import Tax.Canada.Province.ON.ON479.Types
+import Tax.Canada.Shared (fixSubCalculation, SubCalculation(result))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference, totalOf)
+
+fixON479 :: ON479 Maybe -> ON479 Maybe
+fixON479 = fixEq $ \on479@ON479{..}-> ON479{page1 = fixPage1 page1,
+                                            page2 = fixPage2 on479 page2}
+
+fixPage1 :: Page1 Maybe -> Page1 Maybe
+fixPage1 = fixEq $ \page@Page1{..}-> page{
+   line6_fraction = line5_allowable `fractionOf` line4_homecare_copy,
+   line9_sum = totalOf [line7_netIncome_copy, line8_spouse_copy],
+   line11_difference = nonNegativeDifference line9_sum line10_base,
+   line13_fraction = fixSubCalculation $ line12_rate `fractionOf` line11_difference,
+   line_63095_difference = fixSubCalculation $ nonNegativeDifference line6_fraction line13_fraction.result,
+   line_63100_fraction = (0.15 *) <$> line_63100_transit,
+   line16_sum = totalOf [line_63050_childcare, line_63095_difference.result, line_63100_fraction]}
+
+fixPage2 :: ON479 Maybe -> Page2 Maybe -> Page2 Maybe
+fixPage2 on479 = fixEq $ \page2@Page2{..}-> page2{
+   line17_copy = on479.page1.line16_sum,
+   line_63110_credit = if line_63110_contributions >= Just 3531 then Just 1552 else line_63110_credit, -- TODO worksheet?
+   line_63220_fraction = (0.05 *) <$> line_63220_fromT1221,
+   line23_credits = totalOf [line17_copy, line_63110_credit, line_63220_fraction, line_63300_total]}
diff --git a/src/Tax/Canada/Province/ON/ON479/Types.hs b/src/Tax/Canada/Province/ON/ON479/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/ON/ON479/Types.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Tax.Canada.Province.ON.ON479.Types where
+
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.Canada.Shared (SubCalculation)
+
+data ON479 line = ON479 {
+   page1 :: Page1 line,
+   page2 :: Page2 line}
+
+data Page1 line = Page1 {
+   line_63050_childcare :: line Centi,
+   line4_homecare_copy :: line Centi,
+   line5_allowable :: line Rational,
+   line6_fraction :: line Centi,
+   line7_netIncome_copy :: line Centi,
+   line8_spouse_copy :: line Centi,
+   line9_sum :: line Centi,
+   line10_base :: line Centi,
+   line11_difference :: line Centi,
+   line12_rate :: line Rational,
+   line13_fraction :: SubCalculation line,
+   line_63095_difference :: SubCalculation line,
+   line_63100_transit :: line Centi,
+   line_63100_fraction :: line Centi,
+   line16_sum :: line Centi}
+
+data Page2 line = Page2 {
+   line17_copy :: line Centi,
+   line_63110_contributions :: line Centi,
+   line_63110_credit :: line Centi,
+   line_63220_fromT1221 :: line Centi,
+   line_63220_fraction :: line Centi,
+   line_63260_placements :: line Word,
+   line_63265_partnership :: line Bool,
+   line_63270_business :: line Text,
+   line_63300_total :: line Centi,
+   line23_credits :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Bool), Show (line Centi), Show (line Rational), Show (line Text), Show (line Word))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Rational), Eq (line Text), Eq (line Word))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''ON479, ''Page1, ''Page2])
diff --git a/src/Tax/Canada/Province/PE.hs b/src/Tax/Canada/Province/PE.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/PE.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Province.PE (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.PE (t1Fields)
diff --git a/src/Tax/Canada/Province/QC.hs b/src/Tax/Canada/Province/QC.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Province/QC.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Province.QC (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.QC (t1Fields)
diff --git a/src/Tax/Canada/Shared.hs b/src/Tax/Canada/Shared.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Shared.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+-- | Common types and functions shared by multiple Canadian tax forms
+module Tax.Canada.Shared where
+
+import Control.Monad (guard, mfilter)
+import Data.Fixed (Centi)
+import Data.Text (Text)
+import Language.Haskell.TH qualified as TH
+import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
+
+import Tax.FDF (FieldConst(Field), Entry(Amount))
+import Tax.Util (fixEq, fractionOf, nonNegativeDifference)
+
+data TaxIncomeBracket line = TaxIncomeBracket {
+   income :: line Centi,
+   threshold :: line Centi,
+   overThreshold :: line Centi,
+   rate :: line Rational,
+   timesRate :: line Centi,
+   baseTax :: line Centi,
+   equalsTax :: line Centi}
+
+data MedicalExpenses line = MedicalExpenses {
+   expenses :: line Centi,
+   netIncome :: line Centi,
+   incomeRate :: line Rational,
+   fraction :: line Centi,
+   lesser :: line Centi,
+   difference :: line Centi}
+
+-- | Used in several provincial forms to calculate a fixed amount of tax credit reduced by income.
+data BaseCredit line = BaseCredit {
+   baseAmount :: line Centi,
+   reduction :: line Centi,
+   difference :: line Centi,
+   cont :: line Centi}
+
+-- | A pair of form fields appearing next to each other at the same line, the right field value always a copy of the
+-- left one.
+data SubCalculation line = SubCalculation {
+   calculation :: line Centi,
+   result :: line Centi}
+
+$(foldMap
+   (\t-> concat <$> sequenceA [
+       [d|
+           deriving instance (Show (line Centi), Show (line Rational))
+                          => Show ($(TH.conT t) line)
+           deriving instance (Eq (line Centi), Eq (line Rational))
+                          => Eq ($(TH.conT t) line)
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
+   [''BaseCredit, ''MedicalExpenses, ''SubCalculation, ''TaxIncomeBracket])
+
+fixTaxIncomeBracket :: Maybe Centi -> Maybe (TaxIncomeBracket Maybe) -> TaxIncomeBracket Maybe -> TaxIncomeBracket Maybe
+fixTaxIncomeBracket theIncome nextBracket = fixEq $ \bracket@TaxIncomeBracket{..} -> bracket{
+   income = do i <- theIncome
+               floor <- threshold
+               let ceiling = nextBracket >>= (.threshold)
+               guard (floor <= i && all (i <) ceiling)
+               Just i,
+   overThreshold = liftA2 (-) income threshold,
+   timesRate = fromRational <$> liftA2 (*) (toRational <$> overThreshold) rate,
+   equalsTax = liftA2 (+) timesRate baseTax}
+
+fixBaseCredit :: BaseCredit Maybe -> BaseCredit Maybe
+fixBaseCredit = fixEq $ \credit@BaseCredit{..}-> credit{
+   difference = mfilter (> 0) $ liftA2 (-) baseAmount reduction,
+   cont = difference}
+
+fixMedicalExpenses :: Centi -> MedicalExpenses Maybe -> MedicalExpenses Maybe
+fixMedicalExpenses ceiling = fixEq $ \part@MedicalExpenses{..} -> part{
+   fraction = incomeRate `fractionOf` netIncome,
+   lesser = min ceiling <$> fraction,
+   difference = nonNegativeDifference expenses lesser}
+
+fixSubCalculation :: Maybe Centi -> SubCalculation Maybe
+fixSubCalculation result = SubCalculation{
+   calculation = result,
+   result = result}
+
+subCalculationFields :: Text -> [Text] -> [Text] -> SubCalculation FieldConst
+subCalculationFields parent calculationPath resultPath = SubCalculation{
+   calculation = Field (parent : calculationPath) Amount,
+   result = Field (parent : resultPath) Amount}
diff --git a/src/Tax/Canada/T1.hs b/src/Tax/Canada/T1.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+
+-- | The T1 forms look similar, but there are subtle differences between different provinces and
+-- territories. Therefore they share the same 'T1' form type and the same 'fixT1' completion function, but field
+-- paths are separately provided by 't1FieldsForProvince'.
+module Tax.Canada.T1 (fixT1, formPrefixForProvince, t1FieldsForProvince, module Tax.Canada.T1.Types) where
+
+import Data.CAProvinceCodes qualified as Province
+import Data.Enum.Memo (memoize)
+
+import Tax.FDF (FieldConst)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Fix (fixT1)
+import Tax.Canada.T1.FieldNames.AB qualified as AB
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+import Tax.Canada.T1.FieldNames.NB qualified as NB
+import Tax.Canada.T1.FieldNames.NL qualified as NL
+import Tax.Canada.T1.FieldNames.NT qualified as NT
+import Tax.Canada.T1.FieldNames.NU qualified as NU
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+import Tax.Canada.T1.FieldNames.QC qualified as QC
+import Tax.Canada.T1.FieldNames.YT qualified as YT
+
+-- | The distinct provincial prefix of the T1 form PDF file, such as @5006@ in @5006-r-fill-23e.pdf@ for Ontario
+formPrefixForProvince :: Province.Code -> String
+formPrefixForProvince = memoize $ \case
+   Province.AB -> "5015"
+   Province.BC -> "5010"
+   Province.MB -> "5015"
+   Province.NB -> "5000"
+   Province.NL -> "5001"
+   Province.NS -> "5015"
+   Province.NT -> "5012"
+   Province.NU -> "5014"
+   Province.ON -> "5006"
+   Province.PE -> "5000"
+   Province.QC -> "5005"
+   Province.SK -> "5015"
+   Province.YT -> "5011"
+
+-- | T1 field paths for the given province
+t1FieldsForProvince :: Province.Code -> T1 FieldConst
+t1FieldsForProvince = memoize $ \case
+   Province.AB -> AB.t1Fields
+   Province.BC -> BC.t1Fields
+   Province.MB -> AB.t1Fields
+   Province.NB -> NB.t1Fields
+   Province.NL -> NL.t1Fields
+   Province.NS -> AB.t1Fields
+   Province.NT -> NT.t1Fields
+   Province.NU -> NU.t1Fields
+   Province.ON -> ON.t1Fields
+   Province.PE -> NB.t1Fields
+   Province.QC -> QC.t1Fields
+   Province.SK -> AB.t1Fields
+   Province.YT -> YT.t1Fields
diff --git a/src/Tax/Canada/T1/FieldNames.hs b/src/Tax/Canada/T1/FieldNames.hs
deleted file mode 100644
--- a/src/Tax/Canada/T1/FieldNames.hs
+++ /dev/null
@@ -1,336 +0,0 @@
-{-# LANGUAGE ImportQualifiedPost #-}
-{-# LANGUAGE DisambiguateRecordFields #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Tax.Canada.T1.FieldNames (t1Fields) where
-
-import Data.Fixed (Centi)
-import Data.Text (Text)
-import Data.Time (Day)
-import Rank2 qualified
-
-import Tax.FDF (FieldConst (Field), Entry (..), within)
-import Tax.Canada.T1.Types
-
-t1Fields :: T1 FieldConst
-t1Fields = within "form1" Rank2.<$> T1 {
-   page1 = within "Page1" . within "Step1" Rank2.<$> page1Fields,
-   page2 = within "Page2" Rank2.<$> page2Fields,
-   page3 = within "Page3" . within "Step2" Rank2.<$> page3Fields,
-   page4 = within "Page4" . within "Step3" Rank2.<$> page4Fields,
-   page5 = within "Page5" Rank2.<$> page5Fields,
-   page6 = within "Page6" . within "PartB" Rank2.<$> page6Fields,
-   page7 = within "Page7" Rank2.<$> page7Fields,
-   page8 = within "Page8" Rank2.<$> page8Fields}
-
-page1Fields = Page1 {
-   identification = within "Identification" Rank2.<$> page1IdentificationFields,
-   residence = within "Residence_Info" Rank2.<$> page1ResidenceFields,
-   spouse = within "Info_Spouse_CLP" Rank2.<$> page1SpouseFields}
-
-page1IdentificationFields = Identification {
-   emailAddress = Field ["EmailAddress"] Textual,
-   dateDeath = Field ["DateDeath_Comb_BordersAll", "DateDeath_Comb"] Date,
-   postalCode = Field ["PostalCode_Comb_BordersAll", "PostalCode"] Textual,
-   your_Language = Field ["Your_Language", "RadioButtonlanguaget"] $ RadioButton [English, French],
-   id_City = Field ["ID_City"] Textual,
-   sin = Field ["SIN_Comb_BordersAll", "SIN_Comb"] Textual,
-   id_LastName = Field ["ID_LastName"] Textual,
-   dateBirth = Field ["DateBirth_Comb_BordersAll", "DateBirth_Comb"] Date,
-   id_FirstNameInitial = Field ["ID_FirstNameInitial"] Textual,
-   id_MailingAddress = Field ["ID_MailingAddress"] Textual,
-   maritalStatus = Field ["MaritalStatus_Checkbox"] $ RadioButtons "MaritalStatus" [Married .. Single],
-   id_RuralRoute = Field ["ID_RuralRoute"] Textual,
-   id_POBox = Field ["ID_POBox"] Textual,
-   prov_DropDown = Field ["Prov_DropDown"] Province}
-
-page1ResidenceFields = Residence {
-   prov_DropDown_Business = Field ["Prov_DropDown-Business"] Province,
-   prov_DropDown_Residence = Field ["Prov_DropDown-Residence"] Province,
-   date_Departure = Field ["Date_Departure", "DateMMDD_Comb_BordersAll_Std", "DateMMDD_Comb"] Date,
-   date_Entry = Field ["Date_Entry", "DateMMDD_Comb_BordersAll_Std", "DateMMDD_Comb"] Date,
-   prov_DropDown = Field ["Prov_DropDown"] Textual}
-  
-page1SpouseFields = Spouse {
-   line23600 = Field ["Line23600", "Amount"] Amount,
-   self_employment = Field ["Self-employment", "Checkbox"] Checkbox,
-   spouse_First_Name = Field ["Spouse_First_Name"] Textual,
-   line11700 = Field ["Line11700", "Amount"] Amount,
-   line21300 = Field ["Line21300", "Amount"] Amount,
-   sin = Field ["SIN_Comb_BordersAll", "SIN_Comb"] Textual}
-
-page2Fields = Page2 {
-   foreign_property = Field ["Foreign_property", "Line26600"] $ Switch "Option1" "Option2" "ForeignProperty_CheckBox",
-   tax_exempt = Field ["Tax_exempt", "Exempt", "Spouse_SelfEmployed"] Checkbox,
-   electionsCanada = within "ElectionsCanada" Rank2.<$> page2ElectionsCanadaFields,
-   cai = Field ["CAI", "CAI_ON", "Tick_box"] Checkbox,
-   organ_donor = Field ["Organ_donor", "Question"] $ Switch "Option1" "Option2" "OrganDonor_CheckBox"
-}
-
-page2ElectionsCanadaFields = ElectionsCanada {
-   citizenship = Field ["LineA"] $ Switch "Option1" "Option2" "A_CheckBox",
-   authorization = Field ["LineB"] $ Switch "Option1" "Option2" "B_Authorize_CheckBox"}
-
-page3Fields = Page3 {
-   line_10400_OtherEmploymentIncome = Field ["Line_10400_OtherEmploymentIncome", "Line_10400_Amount"] Amount,
-   line_12100_InvestmentIncome = Field ["Line_12100_InvestmentIncome", "Line_12100_Amount"] Amount,
-   line_11300_OldAgeSecurityPension = Field ["Line_11300_OldAgeSecurityPension", "Line_11300_Amount"] Amount,
-   line_11500_OtherPensions = Field ["Line_11500_OtherPensions", "Line_11500_Amount"] Amount,
-   line_13000_OtherIncome = Field ["Line_13000_OtherIncome", "Line_13000_Amount"] Amount,
-   line_13000_OtherIncomeSource = Field ["Line_13000_OtherIncome", "Line_13000_Specify"] Textual,
-   line_11410_DisabilityBenefits = Field ["Line_11410_DisabilityBenefits", "Line_11410_Amount"] Amount,
-   line_14400_WorkersCompBen = Field ["Line_14400_WorkersCompBen", "Line_14400_Amount"] Amount,
-   line_11400_CPP_QPP = Field ["Line_11400_CPP_QPP", "Line_11400_Amount"] Amount,
-   line_25_sum = Field ["Line_25", "Amount1"] Amount,
-   line_25_cont = Field ["Line_25", "Amount2"] Amount,
-   line_11700_UCCB = Field ["Line_11700_UCCB", "Line_11700_Amount"] Amount,
-   line_10100_EmploymentIncome = Field ["Line_10100_EmploymentIncome", "Line_10100_Amount"] Amount,
-   line_12700_TaxableCapitalGains = Field ["Line_12700_TaxableCapitalGains", "Line_12700_Amount"] Amount,
-   line_13700_Amount = Field ["Line21", "Line_13700_Amount"] Amount,
-   line_13699_Amount = Field ["Line21", "Line_13699_Amount"] Amount,
-   line_11900_EmploymentInsurance = Field ["Line_11900_EmploymentInsurance", "Line_11900_Amount"] Amount,
-   line_14100_Amount = Field ["Line23", "Line_14100_Amount"] Amount,
-   line_14099_Amount = Field ["Line23", "Line_14099_Amount"] Amount,
-   line_10120_Commissions = Field ["Line_10120_Commissions", "Line_10120_Amount"] Amount,
-   line_11600_ElectedSplitPension = Field ["Line_11600_ElectedSplitPension", "Line_11600_Amount"] Amount,
-   line_14700_EqualsAmount = Field ["Line_14700_AddLines", "Line_14700_EqualsAmount"] Amount,
-   line_14700_PlusAmount = Field ["Line_14700_AddLines", "Line_14700_PlusAmount"] Amount,
-   line_13010_Taxablescholarship = Field ["Line_13010_Taxablescholarship", "Amount"] Amount,
-   line_19 = Field ["Line_19", "Amount"] Amount,
-   line_12599_12600_RentalIncome = Field ["Line_12599_12600_RentalIncome", "Line_12599_Amount"] Amount,
-   line_12600_Amount = Field ["Line_12599_12600_RentalIncome", "Line_12600_Amount"] Amount,
-   line_12200_PartnershipIncome = Field ["Line_12200_PartnershipIncome", "Line_12200_Amount"] Amount,
-   line_11905_Employmentmaternity = Field ["Line_11905_Employmentmaternity", "Line_11905_Amount"] Amount,
-   line_14500_SocialAssistPay = Field ["Line_14500_SocialAssistPay", "Line_14500_Amount"] Amount,
-   line_15000_TotalIncome = Field ["Line_15000_TotalIncome", "Line_15000_Amount"] Amount,
-   line_10105_Taxexemptamount = Field ["Line_10105_Taxexemptamount", "Line_10105_Amount"] Amount,
-   line_12900_RRSPIncome = Field ["Line_12900_RRSPIncome", "Line_12900_Amount"] Amount,
-   line_12500_RDSP = Field ["Line_12500_RDSP", "Line_12500_Amount"] Amount,
-   line_26 = Field ["Line_26", "Amount1"] Amount,
-   line_12000_TaxableDividends = Field ["Line_12000_TaxableDividends", "Amount"] Amount,
-   line_14600_NetFedSupplements = Field ["Line_14600_NetFedSupplements", "Line_14600_Amount"] Amount,
-   line_10130_sf = Field ["Line_10130_sf", "Line_10130_Amount"] Amount,
-   line_12010_OtherTaxableDividends = Field ["Line_12010_OtherTaxableDividends", "Line_12010_Amount"] Amount,
-   line_11701_UCCBDesignated = Field ["Line_11701_UCCBDesignated", "Line_11701_Amount"] Amount,
-   line_13499_Amount = Field ["Line20", "Line_13499_Amount"] Amount,
-   line_13500_Amount = Field ["Line20", "Line_13500_Amount"] Amount,
-   line_12800_Amount = Field ["Line_12799_12800_SupportPayReceived", "Line_12800_Amount"] Amount,
-   line_12799_Amount = Field ["Line_12799_12800_SupportPayReceived", "Line_12799_Amount"] Amount,
-   line_14299_Amount = Field ["Line24", "Line_14299_Amount"] Amount,
-   line_14300_Amount = Field ["Line24", "Line_14300_Amount"] Amount,
-   line_13900_Amount = Field ["Line22", "Line_13900_Amount"] Amount,
-   line_13899_Amount = Field ["Line22", "Line_13899_Amount"] Amount}
-                                                                                           
-page4Fields = Page4 {
-   line_21000_SplitPensionDeduction = Field ["Line_21000_SplitPensionDeduction", "Line_21000_Amount"] Amount,
-   line_23500_SocialBenefits = Field ["Line_23500_SocialBenefits", "Line_23500_Amount"] Amount,
-   line_23400_NetBeforeAdjust = Field ["Line_23400_NetBeforeAdjust", "Line_23400_Amount"] Amount,
-   line_22100_CarryingChargesInterest = Field ["Line_22100_CarryingChargesInterest", "Line_22100_Amount"] Amount,
-   line_21500_DisabilityDeduction = Field ["Line_21500_DisabilityDeduction", "Line_21500_Amount"] Amount,
-   line_15000_TotalIncome_2 = Field ["Line_15000_TotalIncome_2", "Line_15000_Amount"] Amount,
-   line_22900_OtherEmployExpenses = Field ["Line_22900_OtherEmployExpenses", "Line_22900_Amount"] Amount,
-   line_20800_RRSPDeduction = Field ["Line_20800_RRSPDeduction", "Line_20800_Amount"] Amount,
-   line_22000_Amount = Field ["Line42", "Line_22000_Amount"] Amount,
-   line_21999_Amount = Field ["Line42", "Line_21999_Amount"] Amount,
-   line_21699_Amount = Field ["Line40", "Line_21699_Amount"] Amount,
-   line_21700_Amount = Field ["Line40", "Line_21700_Amount"] Amount,
-   line_23210 = Field ["Line23210", "Amount"] Amount,
-   line_20810_PRPP = Field ["Line_20810_PRPP", "Line_20810_Amount"] Amount,
-   line_20700_RPPDeduction = Field ["Line_20700_RPPDeduction", "Line_20700_Amount"] Amount,
-   line_22215_DeductionCPP_QPP = Field ["Line_22215_DeductionCPP_QPP", "Line_22215_Amount"] Amount,
-   line_23300_sum = Field ["Line_23300_AddLines", "Line_23300_Amount1"] Amount,
-   line_23300_cont = Field ["Line_23300_AddLines", "Line_23300_Amount2"] Amount,
-   line_23600_NetIncome = Field ["Line_23600_NetIncome", "Line_23600_Amount"] Amount,
-   line_21200_Dues = Field ["Line_21200_Dues", "Line_21200_Amount"] Amount,
-   line_20600_PensionAdjustment = Field ["Line_20600_PensionAdjustment", "Line_20600_Amount"] Amount,
-   line_22400_XplorationDevExpenses = Field ["Line_22400_XplorationDevExpenses", "Line_22400_Amount"] Amount,
-   line_23200_OtherDeductions = Field ["Line_23200_OtherDeductions", "Line_23200_Amount"] Amount,
-   line_23200_Specify = Field ["Line_23200_OtherDeductions", "Line_23200_Specify"] Textual,
-   line_21900_MovingExpenses = Field ["Line_21900_MovingExpenses", "Line_21900_Amount"] Amount,
-   line_21400_ChildCareExpenses = Field ["Line_21400_ChildCareExpenses", "Line_21400_Amount"] Amount,
-   line_22200_CPP_QPP_Contributions = Field ["Line_22200_CPP_QPP_Contributions", "Line_22200_Amount"] Amount,
-   line_21300_UCCBRepayment = Field ["Line_21300_UCCBRepayment", "Line_21300_Amount"] Amount,
-   line_23100_ClergyResDeduction = Field ["Line_23100_ClergyResDeduction", "Line_23100_Amount"] Amount}
-                                                                                           
-page5Fields = Page5 {
-   step4_TaxableIncome = within "Step4_TaxableIncome" Rank2.<$> step4Fields,
-   partA_FederalTax = within "PartA" Rank2.<$> partAFields,
-   partB_FederalTaxCredits = within "PartB" Rank2.<$> partBFields}
-
-step4Fields = Step4 {
-   line_23600_NetIncome_2 = Field ["Line_23600_NetIncome_2", "Line_15000_Amount"] Amount,
-   line_24400_MilitaryPoliceDeduction = Field ["Line_24400_MilitaryPoliceDeduction", "Line_24400_Amount"] Amount,
-   line_24900_SecurityDeductions = Field ["Line_24900_SecurityDeductions", "Line_24900_Amount"] Amount,
-   line_25000_OtherPayDeductions = Field ["Line_25000_OtherPayDeductions", "Line_25000_Amount"] Amount,
-   line_25100_PartnershipLosses = Field ["Line_25100_PartnershipLosses", "Line_25100_Amount"] Amount,
-   line_25200_NoncapitalLosses = Field ["Line_25200_NoncapitalLosses", "Line_25200_Amount"] Amount,
-   line_25300_NetCapitalLosses = Field ["Line_25300_NetCapitalLosses", "Line_25300_Amount"] Amount,
-   line_25400_CapitalGainsDeduction = Field ["Line_25400_CapitalGainsDeduction", "Line_25400_Amount"] Amount,
-   line_25500_NorthernDeductions = Field ["Line_25500_NorthernDeductions", "Line_25500_Amount"] Amount,
-   line_25600_AdditionalDeductions_Amount = Field ["Line_25600_AdditionalDeductions", "Line_25600_Amount"] Amount,
-   line_25600_AdditionalDeductions_Specify = Field ["Line_25600_AdditionalDeductions", "Line_25600_Specify"] Textual,
-   line_25700_AddLines_cont = Field ["Line_25700_AddLines", "Line_25700_Amount2"] Amount,
-   line_25700_AddLines_sum = Field ["Line_25700_AddLines", "Line_25700_Amount1"] Amount,
-   line_26000_TaxableIncome = Field ["Line_26000_TaxableIncome", "Line_26000_Amount"] Amount}
-
-partAFields = Page5PartA {
-   column1 = within "Column1" Rank2.<$> TaxIncomeBracket {
-       line67_income = Field ["Line36Amount1"] Amount,
-       line69_overThreshold = Field ["Line38Amount1"] Amount,
-       line71_timesRate = Field ["Line40Amount1"] Amount,
-       line73_equalsTax = Field ["Line42Amount1"] Amount},
-   column2 = within "Column2" Rank2.<$> TaxIncomeBracket {
-       line67_income = Field ["Line36Amount2"] Amount,
-       line69_overThreshold = Field ["Line38Amount2"] Amount,
-       line71_timesRate = Field ["Line40Amount2"] Amount,
-       line73_equalsTax = Field ["Line42Amount2"] Amount},
-   column3 = within "Column3" Rank2.<$> TaxIncomeBracket {
-       line67_income = Field ["Line36Amount3"] Amount,
-       line69_overThreshold = Field ["Line38Amount3"] Amount,
-       line71_timesRate = Field ["Line40Amount3"] Amount,
-       line73_equalsTax = Field ["Line42Amount3"] Amount},
-   column4 = within "Column4" Rank2.<$> TaxIncomeBracket {
-       line67_income = Field ["Line36Amount4"] Amount,
-       line69_overThreshold = Field ["Line38Amount4"] Amount,
-       line71_timesRate = Field ["Line40Amount4"] Amount,
-       line73_equalsTax = Field ["Line42Amount4"] Amount},
-   column5 = within "Column5" Rank2.<$> TaxIncomeBracket {
-       line67_income = Field ["Line36Amount5"] Amount,
-       line69_overThreshold = Field ["Line38Amount5"] Amount,
-       line71_timesRate = Field ["Line40Amount5"] Amount,
-       line73_equalsTax = Field ["Line42Amount5"] Amount}}
-
-partBFields = Page5PartB {
-   line30000 = Field ["Line30000_Sub", "Line1_Amount"] Amount,
-   line30100 = Field ["Line30100_Sub", "Line2_Amount"] Amount,
-   line30300 = Field ["Line30300_Sub", "Line3_Amount"] Amount,
-   line30400 = Field ["Line30400_Sub", "Line4_Amount"] Amount,
-   line30425 = Field ["Line30425_sub", "Line4_Amount"] Amount,
-   line30450 = Field ["Line30450_Sub", "Line6_Amount"] Amount,
-   line30499_ChildrenNum = Field ["Line30500", "Line7_ChildrenNum"] Count,
-   line30500 = Field ["Line30500", "Line7_Amount"] Amount,
-   line_81 = Field ["Line_81", "Line30_Amount"] Amount}
-                                                                                           
-page6Fields = Page6 {
-   line82 = Field ["Line_79", "Line43Amount"] Amount,
-   line30800 = Field ["CPP_QPP_Sub", "Line30800_Sub", "Line8_Amount"] Amount,
-   line31000 = Field ["CPP_QPP_Sub", "Line31000_Sub", "Line9_Amount"] Amount,
-   line31200 = Field ["EIPremiums_Sub", "Line31200_Sub", "Line10_Amount"] Amount,
-   line31217 = Field ["Line31217_Sub", "Line11_Amount"] Amount,
-   line31220 = Field ["Line31220_Sub", "Line12_Amount"] Amount,
-   line31240 = Field ["Line31240_Sub", "Line13_Amount"] Amount,
-   line31260 = Field ["Line31260_Sub", "Line14_Amount"] Amount,
-   line31270 = Field ["Line31270_Sub", "Line15_Amount"] Amount,
-   line31285 = Field ["Line31285_sub", "Line16_Amount"] Amount,
-   line31300 = Field ["Line31300_Sub", "Line17_Amount"] Amount,
-   line31350 = Field ["Line31350_Sub", "Amount"] Amount,
-   line94_sum = Field ["Line93", "Amount1"] Amount,
-   line94_cont = Field ["Line93", "Amount2"] Amount,
-   line31400 = Field ["Line31400_Sub", "Line18_Amount"] Amount,
-   line96 = Field ["Line95", "Amount1"] Amount,
-   line31600 = Field ["Line31600_Sub", "Line19_Amount"] Amount,
-   line31800 = Field ["Line31800_Sub", "Line20_Amount"] Amount,
-   line99 = Field ["Line98", "Amount1"] Amount,
-   line31900 = Field ["Line31900_Sub", "Line21_Amount"] Amount,
-   line32300 = Field ["Line32300_Sub", "Line22_Amount"] Amount,
-   line32400 = Field ["Line32400_Sub", "Line23_Amount"] Amount,
-   line32600 = Field ["Line32600_Sub", "Line24_Amount"] Amount,
-   line104 = Field ["Line103", "Amount1"] Amount,
-   medical_expenses = within "Medical_expenses" Rank2.<$> page6MedicalExpensesFields,
-   line33200_sum = Field ["Line33200_Sub", "Line29_Amount1"] Amount,
-   line33200_cont = Field ["Line33200_Sub", "Line29_Amount2"] Amount,
-   line33500 = Field ["Line33500_Sub", "Line30_Amount"] Amount,
-   line33800 = Field ["Line33800_Sub", "Line32_Amount"] Amount,
-   line34900 = Field ["Line34900_Sub", "Line33_Amount"] Amount,
-   line35000 = Field ["Line35000_Sub", "Line34_Amount"] Amount}
-
-page6MedicalExpensesFields = MedicalExpenses {
-   familyExpenses = Field ["Line104", "Amount"] Amount,
-   taxableIncome = Field ["Line105", "Amount1"] Amount,
-   taxableIncomeFraction = Field ["Line105", "Amount2"] Amount,
-   threshold = Field ["Line26_Sub", "Line26_Amount"] Amount,
-   difference = Field ["Line27_Sub", "Line27_Amount"] Amount,
-   otherDependants = Field ["Line33199_Sub", "Line28_Amount"] Amount}
-
-page7Fields = Page7 {
-   partC_NetFederalTax = within "PartC" Rank2.<$> partCFields,
-   step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> page7step6Fields}
-
-partCFields = Page7PartC {
-   line116 = Field ["Line108_sub", "Line43Amount"] Amount,
-   line40424 = Field ["Line40424_Sub", "Line44Amount"] Amount,
-   line40400 = Field ["Line40400_Sub", "Line45Amount1"] Amount,
-   line119 = Field ["Line35000_sub", "Line46Amount"] Amount,
-   line40425 = Field ["Line40425_Sub", "Line47Amount"] Amount,
-   line40427 = Field ["Line40427_Sub", "Line48Amount"] Amount,
-   line122_sum = Field ["Line114_sub", "Line49Amount1"] Amount,
-   line122_cont = Field ["Line114_sub", "Line49Amount2"] Amount,
-   line123 = Field ["Line122", "Amount"] Amount,
-   line124 = Field ["Line123", "Amount"] Amount,
-   line125 = Field ["Line124", "Amount"] Amount,
-   line40500 = Field ["Line40500_sub", "Line51Amount"] Amount,
-   line127 = Field ["Line40600_sub", "Line52Amount"] Amount,
-   line128 = Field ["Line127", "Amount"] Amount,
-   line129 = Field ["Line128", "Amount"] Amount,
-   line130 = Field ["Line129", "Amount"] Amount,
-   line131 = Field ["Line130", "Amount"] Amount,
-   line40900 = Field ["Line131", "F40900", "Amount"] Amount,
-   line41000 = Field ["Line131", "Amount"] Amount,
-   line41200 = Field ["Line41200_sub", "Line55Amount"] Amount,
-   line41300 = Field ["Line41400_sub", "Line56Amount1"] Amount,
-   line41400 = Field ["Line41400_sub", "Line56Amount2"] Amount,
-   line41600_sum = Field ["Line41600_sub", "Line57Amount1"] Amount,
-   line41600_cont = Field ["Line41600_sub", "Line57Amount2"] Amount,
-   line41700 = Field ["Line41700_sub", "Line58Amount"] Amount,
-   line41500 = Field ["Line41500_sub", "Line59Amount"] Amount,
-   line41800 = Field ["Line41800_sub", "Line61Amount"] Amount,
-   line42000 = Field ["Line42000_sub", "Line60Amount"] Amount}
-
-page7step6Fields = Page7Step6 {
-   line140 = Field ["Line_Y", "Line_42120_Amount"] Amount,
-   line_42100_CPPContributions = Field ["Line_42100_CPPContributions", "Line_42100_Amount"] Amount,
-   line_42120_EIPremiums = Field ["Line_42120_EIPremiums", "Line_42120_Amount"] Amount,
-   line_42200_SocialBenefits = Field ["Line_42200_SocialBenefits", "Line_42200_Amount"] Amount,
-   line_42800_ProvTerrTax = Field ["Line_42800_ProvTerrTax", "Line_42800_Amount"] Amount,
-   line_43500_TotalPayable = Field ["Line_43500_TotalPayable", "Line_43500_Amount"] Amount}
-                                                                                           
-page8Fields = Page8 {
-   step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> page8step6Fields,
-   line48400_Refund = Field ["Line48400_48500", "Line48400", "Line_48400_Amount"] Amount,
-   line48500_BalanceOwing = Field ["Line48400_48500", "Line48500", "Line_48500_Amount"] Amount,
-   telephone = Field ["Certification", "Telephone"] Amount,
-   date = Field ["Certification", "Date"] Amount,
-   taxPreparer = within "Line_49000_IfFeeWasCharged" Rank2.<$> taxPreparerFields,
-   line_1_ONOpportunitiesFund = Field ["ONOpportunitiesFund2", "Line_1", "Amount"] Amount,
-   line_46500 = Field ["ONOpportunitiesFund2", "Line_2", "Amount"] Amount,
-   line_46600 = Field ["ONOpportunitiesFund2", "Line_3", "Amount"] Amount}
-
-page8step6Fields = Page8Step6 {
-   line_43500_totalpayable = Field ["Line_43500_totalpayable", "Line_42000_Amount"] Amount,
-   line_43700_Total_income_tax_ded = Field ["LIne_43700_Total_income_tax_ded", "Line_43700_Amount"] Amount,
-   line_44000 = Field ["Line_44000Sub", "Line_44000_Amount"] Amount,
-   line_44800_CPPOverpayment = Field ["Line_44800_CPPOverpayment", "Line_44800_Amount"] Amount,
-   line_45000_EIOverpayment = Field ["Line_45000_EIOverpayment", "Line_45000_Amount"] Amount,
-   line_45200_MedicalExpense = Field ["Line_45200_MedicalExpense", "Line_45200_Amount"] Amount,
-   line_45300_CWB = Field ["Line_45300_CWB", "Line_45300_Amount"] Amount,
-   line_45350_CTC = Field ["Line_45350_CTC", "Line_45300_Amount"] Amount,
-   line_45400_InvestmentTaxCredit = Field ["Line_45400_InvestmentTaxCredit", "Line_45400_Amount"] Amount,
-   line_45600_TrustTaxCredit = Field ["Line_45600_TrustTaxCredit", "Line_45600_Amount"] Amount,
-   line_45700_GST_HST_Rebate = Field ["Line_45700_GST_HST_Rebate", "Line_45700_Amount"] Amount,
-   line_46800 = Field ["EligibleEducatorSchoolSypplyTaxCredit", "F46800", "Amount"] Amount,
-   line_46900 = Field ["EligibleEducatorSchoolSypplyTaxCredit", "Amount"] Amount,
-   line_47555_TaxPaid = Field ["Line_47555_TaxPaid", "Line_47600_Amount"] Amount,
-   line_47556 = Field ["Line159", "Amount"] Amount,
-   line_47557 = Field ["Line160", "Amount"] Amount,
-   line_47600_TaxPaid = Field ["Line_47600_TaxPaid", "Line_47600_Amount"] Amount,
-   line_47900_ProvTerrCredits = Field ["Line_47900_ProvTerrCredits", "Line_47900_Amount"] Amount,
-   line_48200_sum = Field ["Line_48200_AddLines", "Line_48200_Amount1"] Amount,
-   line_48200_cont = Field ["Line_48200_AddLines", "Line_48200_Amount2"] Amount,
-   line164_Refund_or_BalanceOwing = Field ["Line_162", "Refund_or_BalanceOwing_Amount"] Amount}
-
-taxPreparerFields = TaxPreparer {
-   eFileNumber = Field ["EFileNumber_Comb", "EFile"] Textual,
-   nameOfPreparer = Field ["NameOfPreparer"] Textual,
-   telephoneOfPreparer = Field ["TelephoneOfPreparer"] Textual,
-   line49000_WasAFeeCharged = Field ["Line49000_CheckBoxGroup"] $ Switch' "Line49000_CheckBox_EN"}
diff --git a/src/Tax/Canada/T1/FieldNames/AB.hs b/src/Tax/Canada/T1/FieldNames/AB.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/AB.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.AB (module Tax.Canada.T1.FieldNames.AB, ON.page1Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (subCalculationFields)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+
+t1Fields :: T1 FieldConst
+t1Fields = within "form1" Rank2.<$> T1 {
+   page1 = within "Page1" . within "Return-pg1" Rank2.<$> ON.page1Fields,
+   page2 = within "Page2" . within "Step1-Cont" Rank2.<$> page2Fields,
+   page3 = within "Page3" . within "Return-pg3" Rank2.<$> ON.page3Fields,
+   page4 = within "Page4" . within "Return-pg4" Rank2.<$> ON.page4Fields,
+   page5 = within "Page5" . within "Return-pg5" Rank2.<$> ON.page5Fields,
+   page6 = within "Page6" . within "Return-pg6" . within "PartB" Rank2.<$> ON.page6Fields,
+   page7 = within "Page7" . within "Return-pg7" Rank2.<$> ON.page7Fields,
+   page8 = within "Page8" . within "Return-pg8" Rank2.<$> page8Fields}
+
+page2Fields = ON.page2Fields {
+   cai = Field ["CAI", "AB_CAI", "Tick_box"] Checkbox,
+   organ_donor = NoField}
+
+page8Fields = BC.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6-Cont" Rank2.<$> BC.page8step6Fields,
+   line48400_Refund = Field ["Refund_or_Balance-Owing", "Line48400", "Line_48400_Amount"] Amount,
+   line48500_BalanceOwing = Field ["Refund_or_Balance-Owing", "Line48500", "Line_48500_Amount"] Amount}
diff --git a/src/Tax/Canada/T1/FieldNames/BC.hs b/src/Tax/Canada/T1/FieldNames/BC.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/BC.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.BC where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+
+t1Fields :: T1 FieldConst
+t1Fields = ON.t1Fields {
+   page2 = within "form1" . within "Page2" Rank2.<$> page2Fields,
+   page3 = within "form1" . within "Page3" . within "Return-pg3" Rank2.<$> page3Fields,
+   page4 = within "form1" . within "Page4" . within "Return-pg4" . within "Step3" Rank2.<$> ON.page4Fields,
+   page8 = within "form1" . within "Page8" . within "Return-pg8" Rank2.<$> page8Fields}
+
+page2Fields = ON.page2Fields {
+   cai = NoField,
+   organ_donor = NoField}
+
+page3Fields = ON.page3Fields{
+   line_10100_EmploymentIncome = Field ["Line1", "Line_10100_Amount"] Amount}
+
+page8Fields = ON.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6-Continued" Rank2.<$> page8step6Fields,
+   taxPreparer = within "Efile" Rank2.<$> taxPreparerFields,
+   line_1_ONOpportunitiesFund = NoField,
+   line_46500 = NoField,
+   line_46600 = NoField}
+
+page8step6Fields = ON.page8step6Fields {
+   line_45350_CTC = Field ["Line45350", "Line_45300_Amount"] Amount,
+   line_45355_MHRTC = Field ["Line45355", "Line_45300_Amount"] Amount,
+   line_47555_TaxPaid = Field ["Line47555", "Line_47555_Amount"] Amount}
+
+taxPreparerFields = ON.taxPreparerFields {
+   eFileNumber = Field ["Line48900", "EFile"] Textual,
+   line49000_WasAFeeCharged = Field ["Line49000", "Line49000_CheckBoxGroup"] $ Switch' "Line49000_CheckBox_EN"}
diff --git a/src/Tax/Canada/T1/FieldNames/NB.hs b/src/Tax/Canada/T1/FieldNames/NB.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/NB.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.NB where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field), Entry (..), within)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.FieldNames.PE qualified as PE
+
+t1Fields :: T1 FieldConst
+t1Fields = PE.t1Fields{
+   page2 = within "form1" . within "Page2" Rank2.<$> page2Fields,
+   page8 = within "form1" . within "Page8" . within "Return-pg8" Rank2.<$> page8Fields}
+
+page2Fields = PE.page2Fields{
+   cai = Field ["CAI", "CAI_2024", "Tick_box"] Checkbox}
+
+page8Fields = PE.page8Fields {
+   line48400_Refund = Field ["Refund_or_Balance-Owing", "Line48400", "Line_48400_Amount"] Amount,
+   line48500_BalanceOwing = Field ["Refund_or_Balance-Owing", "Line48500", "Line_48500_Amount"] Amount}
diff --git a/src/Tax/Canada/T1/FieldNames/NL.hs b/src/Tax/Canada/T1/FieldNames/NL.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/NL.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.NL (t1Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (subCalculationFields, TaxIncomeBracket (timesRate))
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+import Tax.Canada.T1.FieldNames.AB qualified as AB
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+
+t1Fields :: T1 FieldConst
+t1Fields = within "form1" Rank2.<$> T1 {
+   page1 = within "Page1" . within "Return-pg1" Rank2.<$> ON.page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" . within "Return-pg3" Rank2.<$> BC.page3Fields,
+   page4 = within "Page4" . within "Return-pg4" Rank2.<$> ON.page4Fields,
+   page5 = within "Page5" . within "Return-pg5" Rank2.<$> ON.page5Fields,
+   page6 = within "Page6" . within "Return-pg6" . within "PartB" Rank2.<$> ON.page6Fields,
+   page7 = within "Page7" . within "Return-pg7" Rank2.<$> ON.page7Fields,
+   page8 = within "Page8" . within "Return-pg8" Rank2.<$> page8Fields}
+
+page2Fields = AB.page2Fields {
+   foreign_property = Field ["Foreign_property", "Line26600"] $ Switch' "ForeignProperty_CheckBox",
+   tax_exempt = Field ["Indian_Act", "IndianAct_Question", "Checkbox"] Checkbox}
+
+page8Fields = BC.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6-Cont" Rank2.<$> BC.page8step6Fields,
+   telephone = Field ["Certification", "Telephone"] Amount,
+   date = Field ["Certification", "Date"] Amount}
diff --git a/src/Tax/Canada/T1/FieldNames/NT.hs b/src/Tax/Canada/T1/FieldNames/NT.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/NT.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.NT (module Tax.Canada.T1.FieldNames.NT, page1Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (subCalculationFields)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.ON
+  hiding (t1Fields,
+          page2Fields, page3Fields, page4Fields, page5Fields, page6Fields, page7Fields, page8Fields,
+          step4Fields, partBFields, page6MedicalExpensesFields, partCFields, page7step6Fields, page8step6Fields,
+          taxPreparerFields)
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+
+t1Fields :: T1 FieldConst
+t1Fields = ON.t1Fields {
+   page2 = within "form1" . within "Page2" Rank2.<$> BC.page2Fields,
+   page8 = within "form1" . within "Page8" . within "Return-pg8" Rank2.<$> page8Fields}
+
+page8Fields = BC.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> BC.page8step6Fields}
diff --git a/src/Tax/Canada/T1/FieldNames/NU.hs b/src/Tax/Canada/T1/FieldNames/NU.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/NU.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.NU (t1Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (NoField), within)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.FieldNames.PE qualified as PE
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+
+t1Fields :: T1 FieldConst
+t1Fields = PE.t1Fields{
+   page2 = within "form1" . within "Page2" . within "Step1" Rank2.<$> PE.page2Fields,
+   page3 = within "form1" . within "Page3" . within "Return-pg3" Rank2.<$> ON.page3Fields}
diff --git a/src/Tax/Canada/T1/FieldNames/ON.hs b/src/Tax/Canada/T1/FieldNames/ON.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/ON.hs
@@ -0,0 +1,345 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.ON where
+
+import Rank2 qualified
+
+import Data.Text (Text)
+import Data.Text.Lazy (toStrict)
+import Data.Text.Lazy.Builder (fromText, toLazyText)
+import Data.Text.Lazy.Builder.Int (decimal)
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (TaxIncomeBracket (..), subCalculationFields)
+import Tax.Canada.T1.Types
+
+t1Fields :: T1 FieldConst
+t1Fields = within "form1" Rank2.<$> T1 {
+   page1 = within "Page1" . within "Return-pg1" Rank2.<$> page1Fields,
+   page2 = within "Page2" Rank2.<$> page2Fields,
+   page3 = within "Page3" . within "Return-pg3" Rank2.<$> page3Fields,
+   page4 = within "Page4" . within "Return-pg4" Rank2.<$> page4Fields,
+   page5 = within "Page5" . within "Return-pg5" Rank2.<$> page5Fields,
+   page6 = within "Page6" . within "Return-pg6" . within "PartB" Rank2.<$> page6Fields,
+   page7 = within "Page7" . within "Return-pg7" Rank2.<$> page7Fields,
+   page8 = within "Page8" Rank2.<$> page8Fields}
+
+page1Fields = Page1 {
+   identification = within "Identification" Rank2.<$> page1IdentificationFields,
+   residence = within "Residence_Info" Rank2.<$> page1ResidenceFields,
+   spouse = within "Info_Spouse_CLP" Rank2.<$> page1SpouseFields}
+
+page1IdentificationFields = Identification {
+   emailAddress = Field ["EmailAddress"] Textual,
+   dateDeath = Field ["DateDeath_Comb_BordersAll", "DateDeath_Comb"] Date,
+   postalCode = Field ["PostalCode_Comb_BordersAll", "PostalCode"] Textual,
+   your_Language = Field ["Your_Language", "RadioButtonlanguaget"] $ RadioButton [English, French],
+   id_City = Field ["ID_City"] Textual,
+   sin = Field ["SIN_Comb_BordersAll", "SIN_Comb"] Textual,
+   id_LastName = Field ["ID_LastName"] Textual,
+   dateBirth = Field ["DateBirth_Comb_BordersAll", "DateBirth_Comb"] Date,
+   id_FirstNameInitial = Field ["ID_FirstNameInitial"] Textual,
+   id_MailingAddress = Field ["ID_MailingAddress"] Textual,
+   maritalStatus = Field ["MaritalStatus_Checkbox"] $ RadioButtons 0 1 "MaritalStatus" [Married .. Single],
+   id_RuralRoute = Field ["ID_RuralRoute"] Textual,
+   id_POBox = Field ["ID_POBox"] Textual,
+   prov_DropDown = Field ["Prov_DropDown"] Province}
+
+page1ResidenceFields = Residence {
+   prov_DropDown_Business = Field ["Prov_DropDown-Business"] Province,
+   prov_DropDown_Residence = Field ["Prov_DropDown-Residence"] Province,
+   date_Departure = Field ["Date_Departure", "DateMMDD_Comb_BordersAll_Std", "DateMMDD_Comb"] Date,
+   date_Entry = Field ["Date_Entry", "DateMMDD_Comb_BordersAll_Std", "DateMMDD_Comb"] Date,
+   prov_DropDown = Field ["Prov_DropDown"] Textual}
+  
+page1SpouseFields = Spouse {
+   line23600 = Field ["Line23600", "Amount"] Amount,
+   self_employment = Field ["Self-employment", "Checkbox"] Checkbox,
+   spouse_First_Name = Field ["Spouse_First_Name"] Textual,
+   line11700 = Field ["Line11700", "Amount"] Amount,
+   line21300 = Field ["Line21300", "Amount"] Amount,
+   sin = Field ["SIN_Comb_BordersAll", "SIN_Comb"] Textual}
+
+page2Fields = Page2 {
+   foreign_property = Field ["Foreign_property", "Line26600"] $ Switch "Option1" "Option2" "ForeignProperty_CheckBox",
+   tax_exempt = Field ["Tax_exempt", "Exempt", "Spouse_SelfEmployed"] Checkbox,
+   electionsCanada = within "ElectionsCanada" Rank2.<$> page2ElectionsCanadaFields,
+   cai = Field ["CAI", "CAI_ON", "Tick_box"] Checkbox,
+   organ_donor = Field ["Organ_donor", "Question"] $ Switch "Option1" "Option2" "OrganDonor_CheckBox"
+}
+
+page2ElectionsCanadaFields = ElectionsCanada {
+   citizenship = Field ["LineA"] $ Switch "Option1" "Option2" "A_CheckBox",
+   authorization = Field ["LineB"] $ Switch "Option1" "Option2" "B_Authorize_CheckBox"}
+
+page3Fields = Page3 {
+   line_10100_EmploymentIncome = Field ["Line10100", "Line_10100_Amount"] Amount,
+   line_10105_Taxexemptamount = Field ["Line10105", "Line_10105_Amount"] Amount,
+   line_10120_Commissions = Field ["Line10120", "Line_10120_Amount"] Amount,
+   line_10130_sf = Field ["Line10130", "Line_10130_Amount"] Amount,
+   line_10400_OtherEmploymentIncome = Field ["Line10400", "Line_10400_Amount"] Amount,
+   line_11300_OldAgeSecurityPension = Field ["Line11300", "Line_11300_Amount"] Amount,
+   line_11400_CPP_QPP = Field ["Line11400", "Line_11400_Amount"] Amount,
+   line_11410_DisabilityBenefits = Field ["Line11410", "Line_11410_Amount"] Amount,
+   line_11500_OtherPensions = Field ["Line11500", "Line_11500_Amount"] Amount,
+   line_11600_ElectedSplitPension = Field ["Line11600", "Line_11600_Amount"] Amount,
+   line_11700_UCCB = Field ["Line11700", "Line_11700_Amount"] Amount,
+   line_11701_UCCBDesignated = Field ["Line11701", "Line_11701_Amount"] Amount,
+   line_11900_EmploymentInsurance = Field ["Line11900", "Line_11900_Amount"] Amount,
+   line_11905_Employmentmaternity = Field ["Line11905", "Line_11905_Amount"] Amount,
+   line_12000_TaxableDividends = Field ["Line12000", "Line_12000_Amount"] Amount,
+   line_12010_OtherTaxableDividends = Field ["Line12010", "Line_12010_Amount"] Amount,
+   line_12100_InvestmentIncome = Field ["Line12100", "Line_12100_Amount"] Amount,
+   line_12200_PartnershipIncome = Field ["Line12200", "Line_12200_Amount"] Amount,
+   line_12500_RDSP = Field ["Line12500", "Line_12500_Amount"] Amount,
+   line_12599_12600_RentalIncome = Field ["Line12600", "Line12599", "Line_12599_Amount"] Amount,
+   line_12600_Amount = Field ["Line12600", "Line_12600_Amount"] Amount,
+   line_12700_TaxableCapitalGains = Field ["Line12700", "Line_12700_Amount"] Amount,
+   line_12799_Amount = Field ["Line12800", "Line_12799", "Line_12799_Amount"] Amount,
+   line_12800_Amount = Field ["Line12800", "Line_12800_Amount"] Amount,
+   line_12900_RRSPIncome = Field ["Line12900", "Line_12900_Amount"] Amount,
+   line_12905_FHSAIncome = Field ["Line12905", "Line_12905_Amount"] Amount,
+   line_12906_OtherFHSAIncome = Field ["Line12906", "Line_12906_Amount"] Amount,
+   line_13000_OtherIncome = Field ["Line13000", "Line_13000_Amount"] Amount,
+   line_13000_OtherIncomeSource = Field ["Line13000", "Line_13000_Specify"] Textual,
+   line_13010_TaxableScholarship = Field ["Line13010", "Line_13010_Amount"] Amount,
+   line_19 = Field ["Line21", "Amount"] Amount,
+   selfEmployment = selfEmploymentFields,
+   line_25_sum = subCalculationFields "Line27" ["Amount1"] ["Amount2"],
+   line_26 = Field ["Line28", "Amount"] Amount,
+   line_14400_WorkersCompBen = Field ["Line14400", "Line_14400_Amount"] Amount,
+   line_14500_SocialAssistPay = Field ["Line14500", "Line_14500_Amount"] Amount,
+   line_14600_NetFedSupplements = Field ["Line14600", "Line_14600_Amount"] Amount,
+   line_14700_EqualsAmount = Field ["Line14700", "Line_14700_Amount1"] Amount,
+   line_14700_PlusAmount = Field ["Line14700", "Line_14700_Amount2"] Amount,
+   line_15000_TotalIncome = Field ["Line15000", "Line_15000_Amount"] Amount}
+
+selfEmploymentFields = SelfEmploymentIncome {
+   line_13499_Amount = Field ["Line13500", "Line13499", "Line_13499_Amount"] Amount,
+   line_13500_Amount = Field ["Line13500", "Line_13500_Amount"] Amount,
+   line_13699_Amount = Field ["Line13700", "Line13699", "Line_13699_Amount"] Amount,
+   line_13700_Amount = Field ["Line13700", "Line_13700_Amount"] Amount,
+   line_13899_Amount = Field ["Line13900", "Line13899", "Line_13899_Amount"] Amount,
+   line_13900_Amount = Field ["Line13900", "Line_13900_Amount"] Amount,
+   line_14099_Amount = Field ["Line14100", "Line14099", "Line_14099_Amount"] Amount,
+   line_14100_Amount = Field ["Line14100", "Line_14100_Amount"] Amount,
+   line_14299_Amount = Field ["Line14300", "Line14299", "Line_14299_Amount"] Amount,
+   line_14300_Amount = Field ["Line14300", "Line_14300_Amount"] Amount}
+
+page4Fields = Page4 {
+   line_15000_TotalIncome_2 = Field ["Line34", "Amount"] Amount,
+   line_20600_PensionAdjustment = Field ["Line20600", "Line_20600_Amount"] Amount,
+   line_20700_RPPDeduction = Field ["Line20700", "Line_20700_Amount"] Amount,
+   line_20800_RRSPDeduction = Field ["Line20800", "Line_20800_Amount"] Amount,
+   line_20805_FHSADeduction = Field ["Line20805", "Line_20805_Amount"] Amount,
+   line_20810_PRPP = Field ["Line20810", "Line_20810_Amount"] Amount,
+   line_21000_SplitPensionDeduction = Field ["Line21000", "Line_21000_Amount"] Amount,
+   line_21200_Dues = Field ["Line21200", "Line_21200_Amount"] Amount,
+   line_21300_UCCBRepayment = Field ["Line21300", "Line_21300_Amount"] Amount,
+   line_21400_ChildCareExpenses = Field ["Line21400", "Line_21400_Amount"] Amount,
+   line_21500_DisabilityDeduction = Field ["Line21500", "Line_21500_Amount"] Amount,
+   line_21699_Amount = Field ["Line21700", "Line21699", "Line_21699_Amount"] Amount,
+   line_21700_Amount = Field ["Line21700", "Line_21700_Amount"] Amount,
+   line_21900_MovingExpenses = Field ["Line21900", "Line_21900_Amount"] Amount,
+   line_21999_Amount = Field ["Line22000", "Line21999", "Line_21999_Amount"] Amount,
+   line_22000_Amount = Field ["Line22000", "Line_22000_Amount"] Amount,
+   line_22100_CarryingChargesInterest = Field ["Line22100", "Line_22100_Amount"] Amount,
+   line_22200_CPP_QPP_Contributions = Field ["Line22200", "Line_22200_Amount"] Amount,
+   line_22215_DeductionCPP_QPP = Field ["Line22215", "Line_22215_Amount"] Amount,
+   line_22300_DeductionPPIP = NoField,
+   line_22400_XplorationDevExpenses = Field ["Line22400", "Line_22400_Amount"] Amount,
+   line_22900_OtherEmployExpenses = Field ["Line22900", "Line_22900_Amount"] Amount,
+   line_23100_ClergyResDeduction = Field ["Line23100", "Line_23100_Amount"] Amount,
+   line_23200_OtherDeductions = Field ["Line23200", "Line_23200_Amount"] Amount,
+   line_23200_Specify = Field ["Line23200", "Line_23200_Specify"] Textual,
+   line_23300_sum = subCalculationFields "Line23300" ["Line_23300_Amount1"] ["Line_23300_Amount2"],
+   line_23400_NetBeforeAdjust = Field ["Line23400", "Line_23400_Amount"] Amount,
+   line_23500_SocialBenefits = Field ["Line23500", "Line_23500_Amount"] Amount,
+   line_23600_NetIncome = Field ["Line23600", "Line_23600_Amount"] Amount}
+
+page5Fields = Page5 {
+   step4_TaxableIncome = within "Step4" Rank2.<$> step4Fields,
+   partA_FederalTax = within "PartA" Rank2.<$> partAFields "Column" 36,
+   partB_FederalTaxCredits = within "PartB" Rank2.<$> partBFields}
+
+step4Fields = Step4 {
+   line_23600_NetIncome_2 = Field ["Line57", "Amount"] Amount,
+   line_24400_MilitaryPoliceDeduction = Field ["Line24400", "Line_24400_Amount"] Amount,
+   line_24900_SecurityDeductions = Field ["Line24900", "Line_24900_Amount"] Amount,
+   line_25000_OtherPayDeductions = Field ["Line25000", "Line_25000_Amount"] Amount,
+   line_25100_PartnershipLosses = Field ["Line25100", "Line_25100_Amount"] Amount,
+   line_25200_NoncapitalLosses = Field ["Line25200", "Line_25200_Amount"] Amount,
+   line_25300_NetCapitalLosses = Field ["Line25300", "Line_25300_Amount"] Amount,
+   line_25400_CapitalGainsDeduction = Field ["Line25400", "Line_25400_Amount"] Amount,
+   line_25500_NorthernDeductions = Field ["Line25500", "Line_25500_Amount"] Amount,
+   line_25600_AdditionalDeductions_Amount = Field ["Line25600", "Line_25600_Amount"] Amount,
+   line_25600_AdditionalDeductions_Specify = Field ["Line25600", "Line_25600_Specify"] Textual,
+   line_25700_AddLines_sum = subCalculationFields "Line25700" ["Line_25700_Amount1"] ["Line_25700_Amount2"],
+   line_26000_TaxableIncome = Field ["Line26000", "Line_26000_Amount"] Amount}
+
+partAFields :: Text -> Int -> Page5PartA FieldConst
+partAFields = partAFieldsWith fieldNameAt
+   where fieldNameAt line column isRate =
+            toText $ "Line" <> decimal line <> (if isRate then "Rate" else "Amount") <> decimal column
+         toText = toStrict . toLazyText
+
+partAFieldsWith :: (Int -> Int -> Bool -> Text) -> Text -> Int -> Page5PartA FieldConst
+partAFieldsWith fieldNameAt columnPrefix startLine = Page5PartA {
+   column1 = column 1 0 0.15 0,
+   column2 = column 2 53_359.00 0.205 8_003.85,
+   column3 = column 3 106_717.00 0.26 18_942.24,
+   column4 = column 4 165_430.00 0.29 34_207.62,
+   column5 = column 5 235_675.00 0.33 54_578.67}
+   where column n threshold rate baseTax = within (columnPrefix <> toText (decimal n)) Rank2.<$> TaxIncomeBracket {
+            income = Field [fieldNameAt startLine n False] Amount,
+            threshold = Field [fieldNameAt (startLine + 1) n False] $ Constant threshold Amount,
+            overThreshold = Field [fieldNameAt (startLine + 2) n False] Amount,
+            rate = Field [fieldNameAt (startLine + 3) n True] $ Constant rate Percent,
+            timesRate = Field [fieldNameAt (startLine + 4) n False] Amount,
+            baseTax = Field [fieldNameAt (startLine + 5) n False] $ Constant baseTax Amount,
+            equalsTax = Field [fieldNameAt (startLine + 6) n False] Amount}
+         toText = toStrict . toLazyText
+
+partBFields = Page5PartB {
+   line30000 = Field ["Line30000", "Line_30000_Amount"] Amount,
+   line30100 = Field ["Line30100", "Line_30100_Amount"] Amount,
+   line30300 = Field ["Line30300", "Line_30300_Amount"] Amount,
+   line30400 = Field ["Line30400", "Line_30400_Amount"] Amount,
+   line30425 = Field ["Line30425", "Line_30425_Amount"] Amount,
+   line30450 = Field ["Line30450", "Line_30450_Amount"] Amount,
+   line30499_ChildrenNum = Field ["Line30500", "Line30499", "Line_30499_ChildrenNum"] Count,
+   line30500 = Field ["Line30500", "Line_30500_Amount"] Amount,
+   line_81 = Field ["Line83", "Amount"] Amount}
+                                                                                           
+page6Fields = Page6 {
+   line82 = Field ["Line84", "Amount"] Amount,
+   line30800 = Field ["Line30800", "Line_30800_Amount"] Amount,
+   line31000 = Field ["Line31000", "Line_31000_Amount"] Amount,
+   line31200 = Field ["Line31200", "Line_31200_Amount"] Amount,
+   line31205 = NoField,
+   line31210 = NoField,
+   line31215 = NoField,
+   line31217 = Field ["Line31217", "Line_31217_Amount"] Amount,
+   line31220 = Field ["Line31220", "Line_31220_Amount"] Amount,
+   line31240 = Field ["Line31240", "Line_31240_Amount"] Amount,
+   line31260 = Field ["Line31260", "Line_31260_Amount"] Amount,
+   line31270 = Field ["Line31270", "Line_31270_Amount"] Amount,
+   line31285 = Field ["Line31285", "Line_31285_Amount"] Amount,
+   line31300 = Field ["Line31300", "Line_31300_Amount"] Amount,
+   line31350 = Field ["Line31350", "Line_31350_Amount"] Amount,
+   line94_sum = subCalculationFields "Line96" ["Amount1"] ["Amount2"],
+   line31400 = Field ["Line31400", "Line_31400_Amount"] Amount,
+   line96 = Field ["Line98", "Amount"] Amount,
+   line31600 = Field ["Line31600", "Line_31600_Amount"] Amount,
+   line31800 = Field ["Line31800", "Line_31800_Amount"] Amount,
+   line99 = Field ["Line101", "Amount"] Amount,
+   line31900 = Field ["Line31900", "Line_31900_Amount"] Amount,
+   line32300 = Field ["Line32300", "Line_32300_Amount"] Amount,
+   line32400 = Field ["Line32400", "Line_32400_Amount"] Amount,
+   line32600 = Field ["Line32600", "Line_32600_Amount"] Amount,
+   line104 = Field ["Line106", "Amount"] Amount,
+   medical_expenses = page6MedicalExpensesFields,
+   line33200_sum = subCalculationFields "Line33200" ["Line_33200_Amount1"] ["Line_33200_Amount2"],
+   line33500 = Field ["Line33500", "Line_33500_Amount"] Amount,
+   line112 = Field ["Line114", "Percent"] $ Constant 0.15 Percent,
+   line33800 = Field ["Line33800", "Line_33800_Amount"] Amount,
+   line34900 = Field ["Line34900", "Line_34900_Amount"] Amount,
+   line35000 = Field ["Line35000", "Line_35000_Amount"] Amount}
+
+page6MedicalExpensesFields = MedicalExpenses {
+   familyExpenses = Field ["Line33099", "Line_33099_Amount"] Amount,
+   taxableIncome = Field ["Line108", "Amount1"] Amount,
+   taxableIncomeFraction = Field ["Line108", "Amount2"] Amount,
+   threshold = Field ["Line109", "Amount"] Amount,
+   difference = Field ["Line110", "Amount"] Amount,
+   otherDependants = Field ["Line33199", "Line_33199_Amount"] Amount}
+
+page7Fields = Page7 {
+   partC_NetFederalTax = within "PartC" Rank2.<$> partCFields,
+   step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> page7step6Fields}
+
+partCFields = Page7PartC {
+   line116 = Field ["Line118", "Amount"] Amount,
+   line40424 = Field ["Line40424", "Line_40424_Amount"] Amount,
+   line40400 = Field ["Line40400", "Line_40400_Amount"] Amount,
+   line119 = Field ["Line121", "Amount"] Amount,
+   line40425 = Field ["Line40425", "Line_40425_Amount"] Amount,
+   line40427 = Field ["Line40427", "Line_40427_Amount"] Amount,
+   line122_sum = subCalculationFields "Line124" ["Amount1"] ["Amount2"],
+   line42900 = Field ["Line42900", "Line_42900_Amount"] Amount,
+   line124 = Field ["Line126", "Amount"] Amount,
+   line125 = Field ["Line127", "Amount"] Amount,
+   line40500 = Field ["Line40500", "Line_40500_Amount"] Amount,
+   line127 = Field ["Line129", "Amount"] Amount,
+   line128 = Field ["Line130", "Amount"] Amount,
+   line129 = Field ["Line131", "Amount"] Amount,
+   line130 = Field ["Line132", "Amount"] Amount,
+   line40600 = Field ["Line40600", "Line_40600_Amount"] Amount,
+   line40900 = Field ["Line41000", "Line40900", "Line_40900_Amount"] Amount,
+   line41000 = Field ["Line41000", "Line_41000_Amount"] Amount,
+   line41200 = Field ["Line41200", "Line_41200_Amount"] Amount,
+   line41300 = Field ["Line41400", "Line41300", "Line_41300_Amount"] Amount,
+   line41400 = Field ["Line41400", "Line_41400_Amount"] Amount,
+   line41600_sum = subCalculationFields "Line41600" ["Line_41600_Amount1"] ["Line_41600_Amount2"],
+   line41700 = Field ["Line41700", "Line_41700_Amount"] Amount,
+   line41500 = Field ["Line41500", "Line_41500_Amount"] Amount,
+   line41800 = Field ["Line41800", "Line_41800_Amount"] Amount,
+   line42000 = Field ["Line42000", "Line_42000_Amount"] Amount}
+
+page7step6Fields = Page7Step6 {
+   line140 = Field ["Line14", "Amount"] Amount,
+   line_42100_CPPContributions = Field ["Line42100", "Line_42100_Amount"] Amount,
+   line_42120_EIPremiums = Field ["Line42120", "Line_42120_Amount"] Amount,
+   line_42200_SocialBenefits = Field ["Line42200", "Line_42200_Amount"] Amount,
+   line_42800_ProvTerrTax = Field ["Line42800", "Line_42800_Amount"] Amount,
+   line_43200_FirstNationsTax = NoField,
+   line_43500_TotalPayable = Field ["Line43500", "Line_43500_Amount"] Amount}
+                                                                                           
+page8Fields = Page8 {
+   step6_RefundOrBalanceOwing = within "Step6-Continued" Rank2.<$> page8step6Fields,
+   line48400_Refund = Field ["Refund_or_Balance-owing", "Line48400", "Line_48400_Amount"] Amount,
+   line48500_BalanceOwing = Field ["Refund_or_Balance-owing", "Line48500", "Line_48500_Amount"] Amount,
+   telephone = Field ["Certification", "Telephone"] Amount,
+   date = Field ["Certification", "Date"] Amount,
+   taxPreparer = within "Line_49000_IfFeeWasCharged" Rank2.<$> taxPreparerFields,
+   line_1_ONOpportunitiesFund = Field ["ONOpportunitiesFund2", "Line_1", "Amount"] Amount,
+   line_46500 = Field ["ONOpportunitiesFund2", "Line_2", "Amount"] Amount,
+   line_46600 = Field ["ONOpportunitiesFund2", "Line_3", "Amount"] Amount}
+
+page8step6Fields = Page8Step6 {
+   line_43500_totalpayable = Field ["Line148", "Amount"] Amount,
+   line_43700_Total_income_tax_ded = Field ["Line43700", "Line_43700_Amount"] Amount,
+   line_43800_TaxTransferQC = NoField,
+   line_43850_diff = Rank2.pure NoField,
+   line_42900_copy = NoField,
+   line_44000 = Field ["Line44000", "Line_44000_Amount"] Amount,
+   line_44100 = NoField,
+   line_44800_CPPOverpayment = Field ["Line44800", "Line_44800_Amount"] Amount,
+   line_45000_EIOverpayment = Field ["Line45000", "Line_45000_Amount"] Amount,
+   line_31210_copy = NoField,
+   line_45100_diff = Rank2.pure NoField,
+   line_45200_MedicalExpense = Field ["Line45200", "Line_45200_Amount"] Amount,
+   line_45300_CWB = Field ["Line45300", "Line_45300_Amount"] Amount,
+   line_45350_CTC = Field ["Line45350", "Line_45350_Amount"] Amount,
+   line_45355_MHRTC = Field ["Line45355", "Line_45355_Amount"] Amount,
+   line_45400_InvestmentTaxCredit = Field ["Line45400", "Line_45400_Amount"] Amount,
+   line_45600_TrustTaxCredit = Field ["Line45600", "Line_45600_Amount"] Amount,
+   line_45700_GST_HST_Rebate = Field ["Line45700", "Line_45700_Amount"] Amount,
+   line_46800 = Field ["Line46900", "Line46800", "Line_46800_Amount"] Amount,
+   line_46900 = Field ["Line46900", "Line_46900_Amount"] Amount,
+   line_47555_TaxPaid = Field ["Line47555", "Line_47600_Amount"] Amount,
+   line_47556 = Field ["Line47556", "Line_47556_Amount"] Amount,
+   line_47557 = Field ["Line47557", "Line_47557_Amount"] Amount,
+   line_47600_TaxPaid = Field ["Line47600", "Line_47600_Amount"] Amount,
+   line_47900_ProvTerrCredits = Field ["Line47900", "Line_47900_Amount"] Amount,
+   line_48200_sum = subCalculationFields "Line48200" ["Line_48200_Amount1"] ["Line_48200_Amount2"],
+   line164_Refund_or_BalanceOwing = Field ["Line167", "Amount"] Amount}
+
+taxPreparerFields = TaxPreparer {
+   eFileNumber = Field ["EFileNumber_Comb", "EFile"] Textual,
+   nameOfPreparer = Field ["NameOfPreparer"] Textual,
+   telephoneOfPreparer = Field ["TelephoneOfPreparer"] Textual,
+   line49000_WasAFeeCharged = Field ["Line49000_CheckBoxGroup"] $ Switch' "Line49000_CheckBox_EN"}
diff --git a/src/Tax/Canada/T1/FieldNames/PE.hs b/src/Tax/Canada/T1/FieldNames/PE.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/PE.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.PE (t1Fields, BC.page2Fields, BC.page8Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field), Entry (..), within)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.FieldNames.AB qualified as AB
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+
+t1Fields :: T1 FieldConst
+t1Fields = AB.t1Fields{
+   page2 = within "form1" . within "Page2" . within "Return-pg2" Rank2.<$> BC.page2Fields,
+   page3 = BC.t1Fields.page3,
+   page8 = BC.t1Fields.page8}
diff --git a/src/Tax/Canada/T1/FieldNames/QC.hs b/src/Tax/Canada/T1/FieldNames/QC.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/QC.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.QC (t1Fields) where
+
+import Data.Text.Lazy (toStrict)
+import Data.Text.Lazy.Builder (toLazyText)
+import Data.Text.Lazy.Builder.Int (decimal)
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (TaxIncomeBracket (..), subCalculationFields)
+import Tax.Canada.Shared qualified as TaxIncomeBracket (TaxIncomeBracket (..))
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.Types qualified as MedicalExpenses (MedicalExpenses(..))
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+
+t1Fields :: T1 FieldConst
+t1Fields = within "form1" Rank2.<$> T1 {
+   page1 = within "Page1" . within "Return-pg1" Rank2.<$> ON.page1Fields,
+   page2 = within "Page2" . within "Return-pg2" Rank2.<$> page2Fields,
+   page3 = within "Page3" . within "Return-pg3" Rank2.<$> page3Fields,
+   page4 = within "Page4" . within "Step3" Rank2.<$> page4Fields,
+   page5 = within "Page5" Rank2.<$> page5Fields,
+   page6 = within "Page6" . within "PartB" Rank2.<$> page6Fields,
+   page7 = within "Page7" Rank2.<$> page7Fields,
+   page8 = within "Page8" Rank2.<$> page8Fields}
+
+page2Fields = ON.page2Fields {
+   cai = NoField,
+   organ_donor = NoField}
+
+page3Fields = ON.page3Fields{
+   line_10100_EmploymentIncome = Field ["Line1", "Line_10100_Amount"] Amount}
+
+page4Fields = ON.page4Fields{
+   line_20810_PRPP = Field ["Line20810", "Amount"] Amount,
+   line_22300_DeductionPPIP = Field ["Line22300", "Line_22300_Amount"] Amount}
+
+page5Fields = Page5 {
+   step4_TaxableIncome = within "Step4" Rank2.<$> step4Fields,
+   partA_FederalTax = within "Part_A" Rank2.<$> partA1{column4 = column4, column5 = partA2.column5},
+   partB_FederalTaxCredits = within "Part_B" Rank2.<$> partBFields}
+   where partA1 = ON.partAFieldsWith fieldName1 "Column" 71
+         partA2 = ON.partAFieldsWith fieldName2 "Column" 39
+         column4 = partA2.column4{
+           TaxIncomeBracket.income = partA1.column4.income,
+           TaxIncomeBracket.threshold = partA1.column4.threshold}
+         fieldName1 line _column True = "Percent_Line" <> toText (decimal line)
+         fieldName1 line _column False = "Amount_Line" <> toText (decimal line)
+         fieldName2 line column isRate =
+            toText $ "Line" <> decimal line <> (if isRate then "Rate" else "Amount") <> decimal column
+         toText = toStrict . toLazyText
+
+step4Fields = ON.step4Fields {
+   line_23600_NetIncome_2 = Field ["Line58", "Amount"] Amount}
+
+partBFields = ON.partBFields {
+   line30499_ChildrenNum = Field ["Line30500", "Line30499", "Line_30499_Number"] Count,
+   line30500 = Field ["Line30500", "Line_30499_Amount"] Amount,
+   line_81 = Field ["Line84", "Amount"] Amount}
+
+page6Fields = ON.page6Fields {
+   line82 = Field ["Line85", "Amount"] Amount,
+   line31205 = Field ["Line31205", "Line_31205_Amount"] Amount,
+   line31210 = Field ["Line31210", "Line_31210_Amount"] Amount,
+   line31215 = Field ["Line31215", "Line_31215_Amount"] Amount,
+   line31600 = Field ["Line31600", "Line_31600_mount"] Amount,
+   line94_sum = subCalculationFields "Line100" ["Amount1"] ["Amount2"],
+   line96 = Field ["Line102", "Amount"] Amount,
+   line99 = Field ["Line105", "Amount"] Amount,
+   line104 = Field ["Line110", "Amount"] Amount,
+   medical_expenses = page6MedicalExpensesFields,
+   line33200_sum = subCalculationFields "Line33200" ["Line_33200_Amount1"] ["Line_33200_Line32Amount2"],
+   line112 = Field ["Line118", "Percent"] $ Constant 0.15 Percent}
+
+page6MedicalExpensesFields = ON.page6MedicalExpensesFields {
+   taxableIncome = Field ["Line112", "Amount1"] Amount,
+   taxableIncomeFraction = Field ["Line112", "Amount2"] Amount,
+   MedicalExpenses.threshold = Field ["Line113", "Amount"] Amount,
+   difference = Field ["Line114", "Amount"] Amount}
+
+page7Fields = Page7 {
+   partC_NetFederalTax = within "PartC" Rank2.<$> partCFields,
+   step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> page7step6Fields}
+
+partCFields = ON.partCFields {
+   line116 = Field ["Line122", "Amount"] Amount,
+   line119 = Field ["Line125", "Amount"] Amount,
+   line122_sum = subCalculationFields "Line128" ["Amount1"] ["Amount2"],
+   line124 = Field ["Line130", "Amount"] Amount,
+   line125 = Field ["Line131", "Amount"] Amount,
+   line127 = Field ["Line133", "Amount"] Amount,
+   line128 = Field ["Line134", "Amount"] Amount,
+   line129 = Field ["Line135", "Amount"] Amount,
+   line130 = Field ["Line136", "Amount"] Amount}
+
+page7step6Fields = ON.page7step6Fields {
+   line140 = Field ["Line146", "Amount"] Amount,
+   line_42100_CPPContributions = NoField}
+
+page8Fields = ON.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6-Continued" Rank2.<$> page8step6Fields,
+   line_1_ONOpportunitiesFund = NoField,
+   line_46500 = NoField,
+   line_46600 = NoField,
+   line48400_Refund = Field ["Refund_or_Balancing-owing", "Line48400", "Line_48400_Amount"] Amount,
+   line48500_BalanceOwing = Field ["Refund_or_Balancing-owing", "Line48500", "Line_48500_Amount"] Amount}
+
+page8step6Fields = ON.page8step6Fields {
+   line_43500_totalpayable = Field ["Line151", "Amount"] Amount,
+   line_43800_TaxTransferQC = Field ["Line43800", "Line_43800_Amount"] Amount,
+   line_43850_diff = subCalculationFields "Line43900" ["Line_43900_Amount1"] ["Line_43900_Amount2"],
+   line_42900_copy = Field ["Line44000", "Line_44000_Amount1"] Amount,
+   line_44000 = Field ["Line44000", "Line_44000_Amount2"] Amount,
+   line_44800_CPPOverpayment = NoField,
+   line_31210_copy = Field ["Line157", "Amount"] Amount,
+   line_45100_diff = subCalculationFields "Line45100" ["Line_45100_Amount1"] ["Line_45100_Amount2"],
+   line_45350_CTC = Field ["Line45350", "Line_45300_Amount"] Amount,
+   line_47555_TaxPaid = Field ["Line47555", "Line_47555_Amount"] Amount,
+   line_47900_ProvTerrCredits = NoField,
+   line164_Refund_or_BalanceOwing = Field ["Line172", "Refund_or_BalanceOwing_Amount"] Amount}
diff --git a/src/Tax/Canada/T1/FieldNames/YT.hs b/src/Tax/Canada/T1/FieldNames/YT.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/T1/FieldNames/YT.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Tax.Canada.T1.FieldNames.YT (t1Fields) where
+
+import Rank2 qualified
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (..), within)
+import Tax.Canada.Shared (subCalculationFields)
+import Tax.Canada.T1.Types
+import Tax.Canada.T1.Types qualified as Page8 (Page8(..))
+import Tax.Canada.T1.FieldNames.BC qualified as BC
+import Tax.Canada.T1.FieldNames.NT qualified as NT
+import Tax.Canada.T1.FieldNames.ON qualified as ON
+
+t1Fields :: T1 FieldConst
+t1Fields = NT.t1Fields{
+   page2 = within "form1" . within "Page2" . within "Step1-Continued" Rank2.<$> BC.page2Fields,
+   page7 = within "form1" . within "Page7" Rank2.<$> page7Fields,
+   page8 = within "form1" . within "Page8" Rank2.<$> page8Fields}
+
+page7Fields = Page7 {
+   partC_NetFederalTax = within "PartC" Rank2.<$> partCFields,
+   step6_RefundOrBalanceOwing = within "Step6" Rank2.<$> page7step6Fields}
+
+partCFields = ON.partCFields {
+   line40900 = Field ["Line4100", "Line40900", "Line_40900_Amount"] Amount,
+   line41000 = Field ["Line4100", "Line_41000_Amount"] Amount}
+
+page7step6Fields = ON.page7step6Fields {
+   line140 = Field ["Line142", "Amount"] Amount,
+   line_43200_FirstNationsTax = Field ["Line43200", "Line_43200_Amount"] Amount}
+
+page8Fields = BC.page8Fields {
+   Page8.step6_RefundOrBalanceOwing = within "Step6-Cont" Rank2.<$> page8step6Fields,
+   taxPreparer = within "Line_49000_IfFeeWasCharged" Rank2.<$> BC.taxPreparerFields}
+
+page8step6Fields = ON.page8step6Fields {
+   line_43500_totalpayable = Field ["Line149", "Amount"] Amount,
+   line_44100 = Field ["Line44100", "Line_44000_Amount"] Amount,
+   line_46800 = Field ["Line46900", "sfline46800end", "Line_46800_Amount"] Amount,
+   line_47555_TaxPaid = Field ["Line47555", "Line_47555_Amount"] Amount,
+   line164_Refund_or_BalanceOwing = Field ["Line169", "Amount"] Amount}
diff --git a/src/Tax/Canada/T1/Fix.hs b/src/Tax/Canada/T1/Fix.hs
--- a/src/Tax/Canada/T1/Fix.hs
+++ b/src/Tax/Canada/T1/Fix.hs
@@ -2,23 +2,26 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE NumericUnderscores #-}
 {-# LANGUAGE OverloadedRecordDot #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
 
-module Tax.Canada.T1.Fix (fixT1) where
+module Tax.Canada.T1.Fix (T1, fixT1) where
 
 import Control.Applicative ((<|>))
 import Data.Fixed (Centi)
 import Data.Maybe (fromMaybe)
 import Data.Text (Text)
 import Data.Time.Calendar (Year, dayPeriod)
+import GHC.Stack (HasCallStack)
 import Rank2 qualified
 
 import Tax.Canada.T1.Types
-import Tax.Util (difference, fixEq, leastOf, nonNegativeDifference, totalOf)
+import Tax.Canada.Shared (fixSubCalculation, fixTaxIncomeBracket, SubCalculation(result), TaxIncomeBracket (equalsTax))
+import Tax.Util (difference, fixEq, fractionOf, nonNegativeDifference, totalOf)
 
-fixT1 :: T1 Maybe -> T1 Maybe
+fixT1 :: HasCallStack => T1 Maybe -> T1 Maybe
 fixT1 = fixEq $ \t1@T1{..}-> T1{page1 = fixPage1 page1,
                                 page2 = fixPage2 page2,
                                 page3 = fixPage3 page3,
@@ -35,7 +38,7 @@
 fixPage2 = id
 
 fixPage3 :: Page3 Maybe -> Page3 Maybe
-fixPage3 = fixEq $ \page@Page3{..}-> page{
+fixPage3 = fixEq $ \page@Page3{selfEmployment=SelfEmploymentIncome{..}, ..}-> page{
    line_19 = totalOf [line_10100_EmploymentIncome ,
                       line_10400_OtherEmploymentIncome,
                       line_11300_OldAgeSecurityPension,
@@ -52,15 +55,17 @@
                       line_12700_TaxableCapitalGains,
                       line_12800_Amount,
                       line_12900_RRSPIncome,
+                      line_12905_FHSAIncome,
+                      line_12906_OtherFHSAIncome,
                       line_13000_OtherIncome,
-                      line_13010_Taxablescholarship],
-   line_25_sum = totalOf [line_13500_Amount,
+                      line_13010_TaxableScholarship],
+   line_25_sum = fixSubCalculation $
+                 totalOf [line_13500_Amount,
                           line_13700_Amount,
                           line_13900_Amount,
                           line_14100_Amount,
                           line_14300_Amount],
-   line_25_cont = line_25_sum,
-   line_26 = totalOf [line_19, line_25_cont],
+   line_26 = totalOf [line_19, line_25_sum.result],
    line_14700_EqualsAmount = totalOf [line_14400_WorkersCompBen,
                                       line_14500_SocialAssistPay,
                                       line_14600_NetFedSupplements],
@@ -70,8 +75,10 @@
 fixPage4 :: T1 Maybe -> Page4 Maybe -> Page4 Maybe
 fixPage4 t1 = fixEq $ \page@Page4{..}-> page{
    line_15000_TotalIncome_2 = t1.page3.line_15000_TotalIncome,
-   line_23300_sum = totalOf [line_20700_RPPDeduction,
+   line_23300_sum = fixSubCalculation $
+                    totalOf [line_20700_RPPDeduction,
                              line_20800_RRSPDeduction,
+                             line_20805_FHSADeduction,
                              line_21000_SplitPensionDeduction,
                              line_21200_Dues,
                              line_21300_UCCBRepayment,
@@ -83,16 +90,15 @@
                              line_22100_CarryingChargesInterest,
                              line_22200_CPP_QPP_Contributions,
                              line_22215_DeductionCPP_QPP,
+                             line_22300_DeductionPPIP,
                              line_22400_XplorationDevExpenses,
                              line_22900_OtherEmployExpenses,
                              line_23100_ClergyResDeduction,
-                             line_23200_OtherDeductions,
-                             line_23210],
-   line_23300_cont = line_23300_sum,
-   line_23400_NetBeforeAdjust = nonNegativeDifference line_15000_TotalIncome_2 line_23300_cont,
+                             line_23200_OtherDeductions],
+   line_23400_NetBeforeAdjust = nonNegativeDifference line_15000_TotalIncome_2 line_23300_sum.result,
    line_23600_NetIncome = nonNegativeDifference line_23400_NetBeforeAdjust line_23500_SocialBenefits}
 
-fixPage5 :: T1 Maybe -> Page5 Maybe -> Page5 Maybe
+fixPage5 :: HasCallStack => T1 Maybe -> Page5 Maybe -> Page5 Maybe
 fixPage5 t1 = fixEq $ \Page5{..}-> Page5{
    step4_TaxableIncome = fixStep4 t1 step4_TaxableIncome,
    partA_FederalTax = fixPage5PartA t1 partA_FederalTax,
@@ -101,11 +107,15 @@
 fixPage6 :: T1 Maybe -> Page6 Maybe -> Page6 Maybe
 fixPage6 t1 = fixEq $ \page@Page6{..}-> page{
    line82 = t1.page5.partB_FederalTaxCredits.line_81,
-   line31260 = leastOf [Just 1287,
+   line31260 = minimum [Just 1368,
                         totalOf [t1.page3.line_10100_EmploymentIncome, t1.page3.line_10400_OtherEmploymentIncome]],
-   line94_sum = totalOf [line30800,
+   line94_sum = fixSubCalculation $
+                totalOf [line30800,
                          line31000,
                          line31200,
+                         line31205,
+                         line31210,
+                         line31215,
                          line31217,
                          line31220,
                          line31240,
@@ -114,15 +124,13 @@
                          line31285,
                          line31300,
                          line31350],
-   line94_cont = line94_sum,
-   line96 = totalOf [line82, line94_cont, line31400],
+   line96 = totalOf [line82, line94_sum.result, line31400],
    line99 = totalOf [line96, line31600, line31800],
    line104 = totalOf [line99, line31900, line32300, line32400, line32600],
    medical_expenses = fixMedicalExpenses t1 medical_expenses,
-   line33200_sum = totalOf [medical_expenses.difference, medical_expenses.otherDependants],
-   line33200_cont = line33200_sum,
-   line33500 = totalOf [line104, line33200_cont],
-   line33800 = (* 0.15) <$> line33500,
+   line33200_sum = fixSubCalculation $ totalOf [medical_expenses.difference, medical_expenses.otherDependants],
+   line33500 = totalOf [line104, line33200_sum.result],
+   line33800 = line112 `fractionOf` line33500,
    line35000 = totalOf [line33800, line34900]}
 
 fixPage7 :: T1 Maybe -> Page7 Maybe -> Page7 Maybe
@@ -143,7 +151,8 @@
 fixStep4 :: T1 Maybe -> Step4 Maybe -> Step4 Maybe
 fixStep4 t1 = fixEq $ \step@Step4{..}-> step{
    line_23600_NetIncome_2 = t1.page4.line_23600_NetIncome,
-   line_25700_AddLines_sum = totalOf [line_24400_MilitaryPoliceDeduction,
+   line_25700_AddLines_sum = fixSubCalculation $
+                             totalOf [line_24400_MilitaryPoliceDeduction,
                                       line_24900_SecurityDeductions,
                                       line_25000_OtherPayDeductions,
                                       line_25100_PartnershipLosses,
@@ -152,35 +161,34 @@
                                       line_25400_CapitalGainsDeduction,
                                       line_25500_NorthernDeductions,
                                       line_25600_AdditionalDeductions_Amount],
-   line_25700_AddLines_cont = line_25700_AddLines_sum,
-   line_26000_TaxableIncome = nonNegativeDifference line_23600_NetIncome_2 line_25700_AddLines_cont}
+   line_26000_TaxableIncome = nonNegativeDifference line_23600_NetIncome_2 line_25700_AddLines_sum.result}
 
-fixPage5PartA :: T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe
+fixPage5PartA :: HasCallStack => T1 Maybe -> Page5PartA Maybe -> Page5PartA Maybe
 fixPage5PartA t1 = fixEq $ \part@Page5PartA{..}-> part{
-   column1 = taxIncomeBracket 0 50197 0.15 0,
-   column2 = taxIncomeBracket 50197 100392 0.205 7529.55,
-   column3 = taxIncomeBracket 100392 155625 0.26 17819.53,
-   column4 = taxIncomeBracket 155625 221708 0.29 32180.11,
-   column5 = taxIncomeBracket 221708 (10^12) 0.33 51344.18} -- a trillion ought to be enough for anybody
-   where taxIncomeBracket threshold ceiling rate baseTax
-            | income > threshold && income <= ceiling = TaxIncomeBracket{
-                 line67_income = Just income,
-                 line69_overThreshold = Just (income - threshold),
-                 line71_timesRate = Just ((income - threshold) * rate),
-                 line73_equalsTax = Just ((income - threshold) * rate + baseTax)}
-            | otherwise = Rank2.pure Nothing
-         income = fromMaybe 0 t1.page5.step4_TaxableIncome.line_26000_TaxableIncome
+   column1 = fixTaxIncomeBracket income (Just part.column2) part.column1,
+   column2 = fixTaxIncomeBracket income (Just part.column3) part.column2,
+   column3 = fixTaxIncomeBracket income (Just part.column4) part.column3,
+   column4 = fixTaxIncomeBracket income (Just part.column5) part.column4,
+   column5 = fixTaxIncomeBracket income Nothing             part.column5}
+   where income = t1.page5.step4_TaxableIncome.line_26000_TaxableIncome
 
 fixPage5PartB :: T1 Maybe -> Page5PartB Maybe -> Page5PartB Maybe
 fixPage5PartB t1 = fixEq $ \part@Page5PartB{..}-> part{
    line30000 = let income = fromMaybe 0 t1.page4.line_23600_NetIncome
-               in if income <= 155625 then Just 14398
-                  else if income >= 221708 then Just 12719
-                       else Just $ 14398 - (14398 - 12719) * (income - 155625) / (221708 - 155625),
-   line30100 = if any ((<= (1957 :: Year)) . dayPeriod) t1.page1.identification.dateBirth
-               then Just 12719
+                   threshold = 165_430
+                   ceiling = 235_675
+               in if income <= threshold then Just 15_000
+                  else if income >= ceiling then Just 13_520
+                       else Just $ 15_000 - (15_000 - 13_250) * (income - threshold) / (ceiling - threshold),
+   line30100 = if any ((<= (1958 :: Year)) . dayPeriod) t1.page1.identification.dateBirth
+               then let income = fromMaybe 0 t1.page4.line_23600_NetIncome
+                        threshold = 42_335
+                        ceiling = 98_309
+                    in if income <= threshold then Just 8396
+                       else if income >= ceiling then Just 0
+                            else Just (8396 - (income - threshold) * 0.15)
                else Nothing,
-   line30500 =  ((* 2350) . fromIntegral) <$> line30499_ChildrenNum,
+   line30500 =  ((* 2499) . fromIntegral) <$> line30499_ChildrenNum,
    line_81 = totalOf [line30000,
                       line30100,
                       line30300,
@@ -194,37 +202,36 @@
                                                           taxableIncomeFraction, threshold}-> expenses{
    taxableIncome = t1.page4.line_23600_NetIncome,
    taxableIncomeFraction = (* 0.03) <$> taxableIncome,
-   threshold = min 2479 <$> taxableIncomeFraction,
+   threshold = min 2635 <$> taxableIncomeFraction,
    difference = nonNegativeDifference familyExpenses threshold}
 
 fixPage7PartC :: T1 Maybe -> Page7PartC Maybe -> Page7PartC Maybe
 fixPage7PartC t1 = fixEq $ \part@Page7PartC{..}-> part{
    line116 = let partA = t1.page5.partA_FederalTax
-             in partA.column1.line73_equalsTax
-                <|> partA.column2.line73_equalsTax
-                <|> partA.column3.line73_equalsTax
-                <|> partA.column4.line73_equalsTax
-                <|> partA.column5.line73_equalsTax,
+             in partA.column1.equalsTax
+                <|> partA.column2.equalsTax
+                <|> partA.column3.equalsTax
+                <|> partA.column4.equalsTax
+                <|> partA.column5.equalsTax,
    line40400 = totalOf [line116, line40424],
    line119 = t1.page6.line35000,
    line40425,
    line40427,
-   line122_sum = totalOf [line119, line40425, line40427],
-   line122_cont = line122_sum,
-   line123 = nonNegativeDifference line40400 line122_cont,
-   line125 = totalOf [line123, line124],
+   line122_sum = fixSubCalculation $ totalOf [line119, line40425, line40427],
+   line42900 = nonNegativeDifference line40400 line122_sum.result,
+   line125 = totalOf [line42900, line124],
    line127 = difference line125 line40500,
    line129 = totalOf [line127, line128],
-   line131 = nonNegativeDifference line129 line130,
+   line40600 = nonNegativeDifference line129 line130,
    line41000 = case line40900
                of Just x
-                    | x <= 400 -> Just (x * 0.75)
-                    | x <= 750 -> Just ((x - 400) * 0.5 + 300)
-                    | otherwise-> Just ((x - 750) * 0.3333 + 475)
+                    | x <=  400 -> Just (x * 0.75)
+                    | x <=  750 -> Just ((x - 400) * 0.5 + 300)
+                    | x <= 1275 -> Just ((x - 750) * 0.3333 + 475)
+                    | otherwise -> Just 650
                   Nothing -> Nothing,
-   line41600_sum = totalOf [line41000, line41200, line41400],
-   line41600_cont = line41600_sum,
-   line41700 = nonNegativeDifference line131 line41600_cont,
+   line41600_sum = fixSubCalculation $ totalOf [line41000, line41200, line41400],
+   line41700 = nonNegativeDifference line40600 line41600_sum.result,
    line42000 = totalOf [line41700, line41500, line41800]}
 
 fixPage7Step6 :: T1 Maybe -> Page7Step6 Maybe -> Page7Step6 Maybe
@@ -237,13 +244,19 @@
 fixPage8Step6 t1 = fixEq $ \step@Page8Step6{..}-> step{
    line_43500_totalpayable = t1.page7.step6_RefundOrBalanceOwing.line_43500_TotalPayable,
    line_46900 = (* 0.25) <$> line_46800,
-   line_48200_sum = totalOf [line_43700_Total_income_tax_ded,
+   line_43850_diff = fixSubCalculation $ difference line_43700_Total_income_tax_ded line_43800_TaxTransferQC,
+   line_31210_copy = t1.page6.line31210,
+   line_45100_diff = fixSubCalculation $ difference line_45000_EIOverpayment line_31210_copy,
+   line_48200_sum = fixSubCalculation $
+                    totalOf [line_43850_diff.result,
                              line_44000,
+                             line_45100_diff.result,
                              line_44800_CPPOverpayment,
                              line_45000_EIOverpayment,
                              line_45200_MedicalExpense,
                              line_45300_CWB,
                              line_45350_CTC,
+                             line_45355_MHRTC,
                              line_45400_InvestmentTaxCredit,
                              line_45600_TrustTaxCredit,
                              line_45700_GST_HST_Rebate,
@@ -253,5 +266,4 @@
                              line_47557,
                              line_47600_TaxPaid,
                              line_47900_ProvTerrCredits],
-   line_48200_cont = line_48200_sum,
-   line164_Refund_or_BalanceOwing = difference line_43500_totalpayable line_48200_sum}
+   line164_Refund_or_BalanceOwing = difference line_43500_totalpayable line_48200_sum.result}
diff --git a/src/Tax/Canada/T1/Types.hs b/src/Tax/Canada/T1/Types.hs
--- a/src/Tax/Canada/T1/Types.hs
+++ b/src/Tax/Canada/T1/Types.hs
@@ -1,13 +1,19 @@
 {-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE ImportQualifiedPost #-}
 {-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MonoLocalBinds #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE NoFieldSelectors #-}
 {-# LANGUAGE OverloadedRecordDot #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE UndecidableInstances #-}
 
+-- | The T1 form type, shared by all provinces and territories
 module Tax.Canada.T1.Types where
 
 import Data.Fixed (Centi)
@@ -17,7 +23,11 @@
 import Data.CAProvinceCodes qualified as Province
 import Language.Haskell.TH qualified as TH
 import Rank2.TH qualified
+import Transformation.Shallow.TH qualified
 
+import Tax.Canada.Shared (SubCalculation)
+import Tax.Canada.Shared (TaxIncomeBracket)
+
 data T1 line = T1 {
    page1 :: Page1 line,
    page2 :: Page2 line,
@@ -107,10 +117,23 @@
    line_12799_Amount :: line Centi,
    line_12800_Amount :: line Centi,
    line_12900_RRSPIncome :: line Centi,
+   line_12905_FHSAIncome :: line Centi,
+   line_12906_OtherFHSAIncome :: line Centi,
    line_13000_OtherIncome :: line Centi,
    line_13000_OtherIncomeSource :: line Text,
-   line_13010_Taxablescholarship :: line Centi,
+   line_13010_TaxableScholarship :: line Centi,
    line_19 :: line Centi,
+   selfEmployment :: SelfEmploymentIncome line,
+   line_25_sum :: SubCalculation line,
+   line_26 :: line Centi,
+   line_14400_WorkersCompBen :: line Centi,
+   line_14500_SocialAssistPay :: line Centi,
+   line_14600_NetFedSupplements :: line Centi,
+   line_14700_EqualsAmount :: line Centi,
+   line_14700_PlusAmount :: line Centi,
+   line_15000_TotalIncome :: line Centi}
+
+data SelfEmploymentIncome line = SelfEmploymentIncome {
    line_13499_Amount :: line Centi,
    line_13500_Amount :: line Centi,
    line_13699_Amount :: line Centi,
@@ -120,22 +143,14 @@
    line_14099_Amount :: line Centi,
    line_14100_Amount :: line Centi,
    line_14299_Amount :: line Centi,
-   line_14300_Amount :: line Centi,
-   line_25_sum :: line Centi,
-   line_25_cont :: line Centi,
-   line_26 :: line Centi,
-   line_14400_WorkersCompBen :: line Centi,
-   line_14500_SocialAssistPay :: line Centi,
-   line_14600_NetFedSupplements :: line Centi,
-   line_14700_EqualsAmount :: line Centi,
-   line_14700_PlusAmount :: line Centi,
-   line_15000_TotalIncome :: line Centi}
+   line_14300_Amount :: line Centi}
 
 data Page4 line = Page4 {
    line_15000_TotalIncome_2 :: line Centi,
    line_20600_PensionAdjustment :: line Centi,
    line_20700_RPPDeduction :: line Centi,
    line_20800_RRSPDeduction :: line Centi,
+   line_20805_FHSADeduction :: line Centi,
    line_20810_PRPP :: line Centi,
    line_21000_SplitPensionDeduction :: line Centi,
    line_21200_Dues :: line Centi,
@@ -150,14 +165,13 @@
    line_22100_CarryingChargesInterest :: line Centi,
    line_22200_CPP_QPP_Contributions :: line Centi,
    line_22215_DeductionCPP_QPP :: line Centi,
+   line_22300_DeductionPPIP :: line Centi,
    line_22400_XplorationDevExpenses :: line Centi,
    line_22900_OtherEmployExpenses :: line Centi,
    line_23100_ClergyResDeduction :: line Centi,
    line_23200_OtherDeductions :: line Centi,
    line_23200_Specify :: line Text,
-   line_23210 :: line Centi,
-   line_23300_cont :: line Centi,
-   line_23300_sum :: line Centi,
+   line_23300_sum :: SubCalculation line,
    line_23400_NetBeforeAdjust :: line Centi,
    line_23500_SocialBenefits :: line Centi,
    line_23600_NetIncome :: line Centi}
@@ -179,8 +193,7 @@
    line_25500_NorthernDeductions :: line Centi,
    line_25600_AdditionalDeductions_Amount :: line Centi,
    line_25600_AdditionalDeductions_Specify :: line Text,
-   line_25700_AddLines_cont :: line Centi,
-   line_25700_AddLines_sum :: line Centi,
+   line_25700_AddLines_sum :: SubCalculation line,
    line_26000_TaxableIncome :: line Centi}
 
 data Page5PartA line = Page5PartA {
@@ -201,13 +214,6 @@
    line30500 :: line Centi,
    line_81 :: line Centi}
 
-data TaxIncomeBracket line = TaxIncomeBracket {
-   line67_income :: line Centi,
-   line69_overThreshold :: line Centi,
-   line71_timesRate :: line Centi,
-   line73_equalsTax :: line Centi
-   }
-
 data Page6 line = Page6 {
    line82 :: line Centi,
    -- CPP_QPP
@@ -215,6 +221,9 @@
    line31000 :: line Centi,
    -- EI
    line31200 :: line Centi,
+   line31205 :: line Centi,
+   line31210 :: line Centi,
+   line31215 :: line Centi,
    line31217 :: line Centi,
    line31220 :: line Centi,
    line31240 :: line Centi,
@@ -223,8 +232,7 @@
    line31285 :: line Centi,
    line31300 :: line Centi,
    line31350 :: line Centi,
-   line94_sum :: line Centi,
-   line94_cont :: line Centi,
+   line94_sum :: SubCalculation line,
    line31400 :: line Centi,
    line96 :: line Centi,
    line31600 :: line Centi,
@@ -236,9 +244,9 @@
    line32600 :: line Centi,
    line104 :: line Centi,
    medical_expenses :: MedicalExpenses line,
-   line33200_sum :: line Centi,
-   line33200_cont :: line Centi,
+   line33200_sum :: SubCalculation line,
    line33500 :: line Centi,
+   line112 :: line Rational,
    line33800 :: line Centi,
    line34900 :: line Centi,
    line35000 :: line Centi}
@@ -262,9 +270,8 @@
    line119 :: line Centi,
    line40425 :: line Centi,
    line40427 :: line Centi,
-   line122_sum :: line Centi,
-   line122_cont :: line Centi,
-   line123 :: line Centi,
+   line122_sum :: SubCalculation line,
+   line42900 :: line Centi,
    line124 :: line Centi,
    line125 :: line Centi,
    line40500 :: line Centi,
@@ -272,14 +279,13 @@
    line128 :: line Centi,
    line129 :: line Centi,
    line130 :: line Centi,
-   line131 :: line Centi,
+   line40600 :: line Centi,
    line40900 :: line Centi,
    line41000 :: line Centi,
    line41200 :: line Centi,
    line41300 :: line Centi,
    line41400 :: line Centi,
-   line41600_sum :: line Centi,
-   line41600_cont :: line Centi,
+   line41600_sum :: SubCalculation line,
    line41700 :: line Centi,
    line41500 :: line Centi,
    line41800 :: line Centi,
@@ -291,6 +297,7 @@
    line_42120_EIPremiums :: line Centi,
    line_42200_SocialBenefits :: line Centi,
    line_42800_ProvTerrTax :: line Centi,
+   line_43200_FirstNationsTax :: line Centi,
    line_43500_TotalPayable :: line Centi}
 
 data Page8 line = Page8 {
@@ -307,12 +314,19 @@
 data Page8Step6 line = Page8Step6 {
    line_43500_totalpayable :: line Centi,
    line_43700_Total_income_tax_ded :: line Centi,
+   line_43800_TaxTransferQC :: line Centi,
+   line_43850_diff :: SubCalculation line,
+   line_42900_copy :: line Centi,
    line_44000 :: line Centi,
+   line_44100 :: line Centi,
    line_44800_CPPOverpayment :: line Centi,
    line_45000_EIOverpayment :: line Centi,
+   line_31210_copy :: line Centi,
+   line_45100_diff :: SubCalculation line,
    line_45200_MedicalExpense :: line Centi,
    line_45300_CWB :: line Centi,
    line_45350_CTC :: line Centi,
+   line_45355_MHRTC :: line Centi,
    line_45400_InvestmentTaxCredit :: line Centi,
    line_45600_TrustTaxCredit :: line Centi,
    line_45700_GST_HST_Rebate :: line Centi,
@@ -323,8 +337,7 @@
    line_47557 :: line Centi,
    line_47600_TaxPaid :: line Centi,
    line_47900_ProvTerrCredits :: line Centi,
-   line_48200_sum :: line Centi,
-   line_48200_cont :: line Centi,
+   line_48200_sum :: SubCalculation line,
    line164_Refund_or_BalanceOwing :: line Centi}
 
 data TaxPreparer line = TaxPreparer {
@@ -334,23 +347,20 @@
    line49000_WasAFeeCharged :: line Bool}
 
 $(foldMap
-   (\t-> [d|
+   (\t-> concat <$> sequenceA [
+       [d|
            deriving instance (Show (line Bool), Show (line Centi), Show (line Word), Show (line Text),
-                              Show (line Province.Code), Show (line Day),
+                              Show (line Rational), Show (line Province.Code), Show (line Day),
                               Show (line LanguageOfCorrespondence), Show (line MaritalStatus))
                           => Show ($(TH.conT t) line)
            deriving instance (Eq (line Bool), Eq (line Centi), Eq (line Word), Eq (line Text),
-                              Eq (line Province.Code), Eq (line Day),
+                              Eq (line Rational), Eq (line Province.Code), Eq (line Day),
                               Eq (line LanguageOfCorrespondence), Eq (line MaritalStatus))
                           => Eq ($(TH.conT t) line)
-    |])
-   [''T1, ''ElectionsCanada, ''Identification, ''MedicalExpenses,
-    ''Page1, ''Page2, ''Page3, ''Page4, ''Page5, ''Page6, ''Page7, ''Page8,
-    ''Step4, ''Page5PartA, ''Page5PartB, ''Page7PartC, ''Page7Step6, ''Page8Step6,
-    ''Residence, ''Spouse, ''TaxIncomeBracket, ''TaxPreparer])
-
-$(foldMap Rank2.TH.deriveAll
+       |],
+       Rank2.TH.deriveAll t,
+       Transformation.Shallow.TH.deriveAll t])
    [''T1, ''ElectionsCanada, ''Identification, ''MedicalExpenses,
     ''Page1, ''Page2, ''Page3, ''Page4, ''Page5, ''Page6, ''Page7, ''Page8,
     ''Step4, ''Page5PartA, ''Page5PartB, ''Page7PartC, ''Page7Step6, ''Page8Step6,
-    ''Residence, ''Spouse, ''TaxIncomeBracket, ''TaxPreparer])
+    ''Residence, ''Spouse, ''SelfEmploymentIncome, ''TaxPreparer])
diff --git a/src/Tax/Canada/Territory/NT.hs b/src/Tax/Canada/Territory/NT.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Territory/NT.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Territory.NT (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.NT (t1Fields)
diff --git a/src/Tax/Canada/Territory/NU.hs b/src/Tax/Canada/Territory/NU.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Territory/NU.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Territory.NU (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.NU (t1Fields)
diff --git a/src/Tax/Canada/Territory/YT.hs b/src/Tax/Canada/Territory/YT.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/Canada/Territory/YT.hs
@@ -0,0 +1,3 @@
+module Tax.Canada.Territory.YT (t1Fields) where
+
+import Tax.Canada.T1.FieldNames.YT (t1Fields)
diff --git a/src/Tax/FDF.hs b/src/Tax/FDF.hs
--- a/src/Tax/FDF.hs
+++ b/src/Tax/FDF.hs
@@ -3,28 +3,42 @@
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
 
-module Tax.FDF where
+-- | Utility functions for dealing with 'FDF' forms
 
-import Data.Char (isDigit)
+module Tax.FDF (FDFs, FieldConst(..), Entry(..),
+                mapForm, mapForm2, mapForms, load, loadAll, store, storeAll, update, updateAll, formKeys, within) where
+
+import Control.Monad (join)
+import Data.Biapplicative (biliftA2, biliftA3)
+import Data.Bitraversable (bisequence, bitraverse)
 import Data.CAProvinceCodes qualified as Province
+import Data.Char (isDigit, isSpace)
 import Data.Fixed (Centi)
 import Data.Foldable (find)
 import Data.Functor.Const (Const (Const, getConst))
+import Data.List (elemIndex)
 import Data.Map.Lazy (Map)
 import Data.Map.Lazy qualified as Map
+import Data.Semigroup (Endo (Endo, appEndo))
 import Data.Semigroup.Cancellative (stripSuffix)
 import Data.Text (Text)
 import Data.Text qualified as Text
 import Data.Time (Day, defaultTimeLocale, formatTime, parseTimeM)
+import Data.Void (Void)
 import Rank2 qualified
-import Text.FDF (FDF, foldMapWithKey, mapWithKey, parse, serialize)
+import Text.FDF (FDF (FDF, body), Field, foldMapWithKey, mapWithKey, parse, serialize, traverseWithKey)
 import Text.Read (readEither)
 
+-- | A form field path serves to uniquely identify and locate the field inside a form
 data FieldConst a = Field {path :: [Text], entry :: Entry a}
+                  | NoField
 
+-- | The type of a single form field value
 data Entry a where
+  Constant :: (Eq a, Show a) => a -> Entry a -> Entry a
   Count :: Entry Word
   Date :: Entry Day
   Province :: Entry Province.Code
@@ -32,98 +46,210 @@
   Amount :: Entry Centi
   Percent :: Entry Rational
   Checkbox :: Entry Bool
-  RadioButton :: (Bounded a, Enum a, Eq a, Show a) => [a] -> Entry a
-  RadioButtons :: (Bounded a, Enum a, Eq a, Show a) => Text -> [a] -> Entry a
+  RadioButton :: (Eq a, Show a) => [a] -> Entry a
+  RadioButtons :: (Bounded a, Enum a, Eq a, Show a) => Int -> Int -> Text -> [a] -> Entry a
   Switch :: Text -> Text -> Text -> Entry Bool
   Switch' :: Text -> Entry Bool
 
 deriving instance Show a => Show (Entry a)
 
+-- | A collection of 'FDF' forms keyed by a 'Text' identifier
+type FDFs = Map Text FDF
+
+-- | Add a head component to a field path
 within :: Text -> FieldConst x -> FieldConst x
 within root field@Field{path} = field{path = root:path}
+within _ NoField = NoField
 
+-- | The list of all field paths inside a form
+formKeys :: Rank2.Foldable form => form FieldConst -> [[Text]]
+formKeys = flip appEndo [] . Rank2.foldMap addEntry
+  where addEntry :: FieldConst a -> Endo [[Text]]
+        addEntry NoField = mempty
+        addEntry Field{path, entry = Switch yes no leaf} = Endo ([path ++ [yes, leaf], path ++ [no, leaf]] ++)
+        addEntry Field{path, entry = Switch' leaf} = Endo ([path ++ [leaf], path ++ [leaf <> "[1]"]] ++)
+        addEntry Field{path} = Endo (path :)
+
+-- | Given a form's field paths and a function that modifies a form with optional field values, try to update an
+-- 'FDF' with the form. Fail if any of the field paths can't be found in the form.
+mapForm :: (Rank2.Apply form, Rank2.Traversable form)
+        => form FieldConst -> (form Maybe -> form Maybe) -> FDF -> Either String FDF
+mapForm fields f fdf = load fields fdf >>= store fields fdf . f
+
+-- | Given the field paths of multiple forms with path heads distinguishing among the forms, and a function that
+-- modifies a collection of forms with optional field values, try to update 'FDFs' of the forms. Fail if any of the
+-- field paths can't be found in the forms.
+mapForms :: (Rank2.Apply form, Rank2.Traversable form)
+         => form FieldConst -> (form Maybe -> form Maybe) -> FDFs -> Either String FDFs
+mapForms fields f fdfs = loadAll fields fdfs >>= storeAll fields fdfs . f
+
+-- | Given two forms' field paths and a function that modifies both forms with optional field values, try to update
+-- two 'FDF's with the forms. Fail if any of the field paths can't be found in the forms.
+mapForm2 :: (Rank2.Apply form1, Rank2.Apply form2, Rank2.Traversable form1, Rank2.Traversable form2)
+         => (form1 FieldConst, form2 FieldConst)
+         -> ((form1 Maybe, form2 Maybe) -> (form1 Maybe, form2 Maybe))
+         -> (FDF, FDF)
+         -> Either String (FDF, FDF)
+mapForm2 fields f fdfs = bisequence (biliftA2 load load fields fdfs) >>= bisequence . biliftA3 store store fields fdfs . f
+
+-- | Try to load all 'FDFs' into a form with optional values using the given field paths.
+loadAll :: forall form. (Rank2.Apply form, Rank2.Traversable form) => form FieldConst -> FDFs -> Either String (form Maybe)
+loadAll fields fdfs = fromPresentFieldMap $ Map.foldMapWithKey (\k-> foldMapWithKey (Map.singleton . (k <> "[0]" :))) fdfs
+  where fromPresentFieldMap :: Map [Text] Text -> Either String (form Maybe)
+        fillPresent :: Map [Text] Text -> FieldConst a -> Either String (Maybe a)
+        fromPresentFieldMap m = Rank2.traverse (fillPresent m) fields
+        fillPresent m f@Field {path = root : _}
+          | Map.member root fdfs = fill m f
+        fillPresent _ _ = Right Nothing
+
+-- | Try to load an 'FDF' into a form with optional values using the given field paths.
 load :: (Rank2.Apply form, Rank2.Traversable form) => form FieldConst -> FDF -> Either String (form Maybe)
 load fields = fromFieldMap fields . foldMapWithKey Map.singleton
 
-update :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> form Maybe -> FDF -> FDF
-update fields = mapWithKey . updateKey . Rank2.foldMap (uncurry Map.singleton . getConst) . Rank2.liftA2 pairKey fields
-  where pairKey :: FieldConst a -> Maybe a -> Const ([Text], Text) a
-        pairKey Field {path, entry} v = Const ((<> "[0]") <$> path, foldMap (fromEntry entry) v)
-        updateKey :: Map [Text] Text -> [Text] -> Text -> Text
-        updateKey m k v = Map.findWithDefault v k m
-        fromEntry :: Entry a -> a -> Text
-        fromEntry Textual v = v
-        fromEntry Date v = Text.pack $ formatTime defaultTimeLocale "%Y%m%d" v
-        fromEntry Checkbox True = "Yes"
-        fromEntry Checkbox False = "No"
-        fromEntry (RadioButton values) v = Text.pack $ show $ fromEnum v + 1
-        fromEntry Amount v = Text.pack (show v)
-        fromEntry Percent v = Text.pack (show (fromRational $ v * 100 :: Centi)) <> "%"
-        fromEntry Count v = Text.pack (show v)
-        fromEntry Province v = Text.pack (show v)
+-- | Try to store a form with optional values into the given map of 'FDFs' according to given field paths. The heads
+-- of the paths correspond to the map keys. Fail if any of the 'FDF's doesn't contain a field path, but ignore the
+-- path heads not present among the keys of 'FDFs'.
+storeAll :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> FDFs -> form Maybe -> Either String FDFs
+storeAll fields = flip (updateAll fields)
 
+-- | Try to store a form with optional values into the given 'FDF' according to given field paths. Fail if the 'FDF'
+-- doesn't contain a field path.
+store :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> FDF -> form Maybe -> Either String FDF
+store fields = flip (update fields)
+
+-- | Try to update the given map of 'FDFs' from the form with optional values according to given field paths. The
+-- heads of the paths correspond to the map keys. Fail if any of the 'FDF's doesn't contain a field path, but ignore
+-- the path heads not present among the keys of 'FDFs'.
+updateAll :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> form Maybe -> FDFs -> Either String FDFs
+updateAll formFields formValues = case toFieldMap formFields formValues of
+  Left err -> const (Left err)
+  Right m -> Right . Map.mapWithKey (\k-> mapWithKey (updateKeyFrom m . (k <> "[0]" :)))
+
+-- | Try to update the given 'FDF' from the form with optional values according to given form field paths. Fail if
+-- the 'FDF' doesn't contain a field path.
+update :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> form Maybe -> FDF -> Either String FDF
+update formFields formValues = case toFieldMap formFields formValues of
+  Left err -> const (Left err)
+  Right m -> Right . mapWithKey (updateKeyFrom m)
+
+updateKeyFrom :: Map [Text] Text -> [Text] -> Text -> Text
+updateKeyFrom m k v = Map.findWithDefault v k m
+
+toFieldMap :: (Rank2.Apply form, Rank2.Foldable form) => form FieldConst -> form Maybe -> Either String (Map [Text] Text)
+toFieldMap fields = sequenceA
+                    . Rank2.foldMap (foldMap (uncurry Map.singleton) . getConst)
+                    . textualFields fields
+
+textualFields :: (Rank2.Apply form, Rank2.Foldable form)
+              => form FieldConst -> form Maybe -> form (Const (Maybe ([Text], Either String Text)))
+textualFields = Rank2.liftA2 pairKey
+  where pairKey :: FieldConst a -> Maybe a -> Const (Maybe ([Text], Either String Text)) a
+        pairKey Field {path, entry = RadioButtons start step leaf values} (Just v)
+          | Just i <- elemIndex v values
+          = Const $ Just (map addIndex path ++ [leaf <> "[" <> Text.pack (show $ start + i*step) <> "]"],
+                          Right $ Text.pack $ show $ succ i)
+          | otherwise = Const $ Just (path, Left ("Missing enum value " <> show v))
+        pairKey Field {path, entry = Switch yes no leaf} (Just v) =
+          Const $ Just (addIndex <$> (path ++ [if v then yes else no, leaf]), Right $ if v then "1" else "2")
+        pairKey Field {path, entry = Switch' leaf} (Just True) = Const $ Just (addIndex <$> (path ++ [leaf]), Right "1")
+        pairKey Field {path, entry = Switch' leaf} (Just False) =
+          Const $ Just (map addIndex path ++ [leaf <> "[1]"], Right "1")
+        pairKey Field {path, entry = Constant c e} (Just v)
+          | c == v = Const Nothing
+          | otherwise = Const $ Just (path, Left ("Trying to replace constant field " ++ show (path, c) ++ " with " ++ show v))
+        pairKey Field {path, entry} v = Const $ Just (addIndex <$> path, maybe (Right "") (fromEntry entry) v)
+        pairKey NoField _ = Const Nothing
+        fromEntry :: Entry a -> a -> Either String Text
+        fromEntry (Constant c e) _ = fromEntry e c
+        fromEntry Textual v = Right v
+        fromEntry Date v = Right $ Text.pack $ formatTime defaultTimeLocale "%Y%m%d" v
+        fromEntry Checkbox True = Right "Yes"
+        fromEntry Checkbox False = Right "No"
+        fromEntry e@(RadioButton values) v = case elemIndex v values
+                                             of Just i -> Right $ Text.pack $ show $ i+1
+                                                Nothing -> Left (show e <> " doesn't allow value " <> show v)
+        fromEntry Amount v = Right $ Text.pack (show v)
+        fromEntry Percent v = Right $ dropInsignificantZeros (Text.pack $ show (fromRational $ v * 100 :: Centi)) <> "%"
+          where dropInsignificantZeros = Text.dropWhileEnd (== '.') . Text.dropWhileEnd (== '0')
+        fromEntry Count v = Right $ Text.pack (show v)
+        fromEntry Province v = Right $ Text.pack (show v)
+
 fromFieldMap :: Rank2.Traversable form => form FieldConst -> Map [Text] Text -> Either String (form Maybe)
-fromFieldMap fields fieldValues = Rank2.traverse fill fields
-  where fill :: FieldConst a -> Either String (Maybe a)
-        fill Field {path, entry}
-          | Just v <- Map.lookup path fieldValues = toEntry entry (Text.unpack v)
-          | Just v <- Map.lookup ((<> "[0]") <$> path) fieldValues = toEntry entry (Text.unpack v)
-          | RadioButtons leaf values <- entry,
-            Just (n, v) <- find (\(i, _)-> any (`notElem` ["", "Off"]) $
-                                  Map.lookup (((<> "[0]") <$> path) <> [leaf <> "[" <> Text.pack (show i) <> "]"]) fieldValues)
-                           (zip [0 ..] values)
-          = Right $ Just v
-          | Switch yes no leaf <- entry,
-            Just yesValue <- Map.lookup ((<> "[0]") <$> (path <> [yes, leaf])) fieldValues,
-            Just noValue <- Map.lookup ((<> "[0]") <$> (path <> [no, leaf])) fieldValues
-          = if yesValue `elem` ["", "Off"] && noValue `elem` ["", "Off"] then Right Nothing
-            else if yesValue == "1" && noValue `elem` ["", "Off"] then Right (Just True)
-            else if yesValue `elem` ["", "Off"] && noValue `elem` ["1", "2"] then Right (Just False)
-            else error ("Can't figure out the checkbox at " <> show (path, entry, yesValue, noValue))
-          | Switch' leaf <- entry,
-            Just yesValue <- Map.lookup (map (<> "[0]") path <> [leaf <> "[0]"]) fieldValues,
-            Just noValue <- Map.lookup (map (<> "[0]") path <> [leaf <> "[1]"]) fieldValues
-          = if yesValue `elem` ["", "Off"] && noValue `elem` ["", "Off"] then Right Nothing
-            else if yesValue == "1" && noValue `elem` ["", "Off"] then Right (Just True)
-            else if yesValue `elem` ["", "Off"] && noValue `elem` ["1", "2"] then Right (Just False)
-            else error ("Can't figure out the checkbox at " <> show (path, entry, yesValue, noValue))
-          | otherwise = error ("Unknown field path " ++ show path ++ " between "
-                               ++ show (Map.lookupLT ((<> "[0]") <$> path) fieldValues,
-                                        Map.lookupGT ((<> "[0]") <$> path) fieldValues))
-        toEntry :: Entry a -> String -> Either String (Maybe a)
-        toEntry _ "" = Right Nothing
-        toEntry Count v = Just <$> readEither v
-        toEntry Date v = Just <$> parseTimeM False defaultTimeLocale "%Y%m%d" v
-        toEntry Province v = Just <$> readEither v
-        toEntry Textual v = Right $ Just $ Text.pack v
-        toEntry Amount v = Just <$> readEither (dropCommas v)
-        toEntry Percent v
-          | Just v' <- stripSuffix "%" v,
-            (wholePart, pointyPart) <- span (/= '.') v',
-            Right whole <- fromInteger <$> readEither wholePart,
-            Right decimal <- case pointyPart
-                             of '.' : decimals -> (/ 10 ^ length decimals) . fromInteger <$> readEither decimals
-                                "" -> Right 0
-                                _ -> Left "bad decimals"
-          = Right $ Just ((whole + decimal) / 100)
-          | otherwise = Left ("Bad percentage value: " <> show v)
-        toEntry Checkbox "Yes" = Right $ Just True
-        toEntry Checkbox "No" = Right $ Just False
-        toEntry Checkbox "Off" = Right $ Just False
-        toEntry Checkbox "1" = Right $ Just True
-        toEntry Checkbox v = Left ("Bad checkbox value: " <> show v)
-        toEntry e@(RadioButton values) v
-          | Right n <- readEither v, n > 0, x:_ <- drop (n - 1) values = Right $ Just x
-          | otherwise = Left ("Bad radio button value: " <> show (e, v))
-        toEntry e@RadioButtons{} v = error (show (e, v))
-        toEntry e@(Switch a b leaf) v = error (show (e, v))
-        toEntry e@(Switch' leaf) v = error (show (e, v))
-        dropCommas num
+fromFieldMap fieldForm fieldMap = Rank2.traverse (fill fieldMap) fieldForm
+
+fill :: forall a. Map [Text] Text -> FieldConst a -> Either String (Maybe a)
+fill fieldValues NoField = Right Nothing
+fill fieldValues Field {path, entry}
+  | Just v <- Map.lookup path fieldValues = toEntry entry (Text.unpack v)
+  | Just v <- Map.lookup (addIndex <$> path) fieldValues = toEntry entry (Text.unpack v)
+  | RadioButtons start step leaf values <- entry,
+    alts <- [ (Map.lookup (map addIndex path <> [leaf <> "[" <> Text.pack (show $ start + i*step) <> "]"]) fieldValues,
+               v)
+            | (i, v) <- zip [0 ..] values ]
+  = if null alts then Left ("No radio buttons on path " <> show path)
+    else Right $ snd <$> find (any (`notElem` ["", "Off"]) . fst) (alts :: [(Maybe Text, a)])
+  | Switch yes no leaf <- entry,
+    Just yesValue <- Map.lookup (addIndex <$> (path <> [yes, leaf])) fieldValues,
+    Just noValue <- Map.lookup (addIndex <$> (path <> [no, leaf])) fieldValues
+  = if yesValue `elem` ["", "Off"] && noValue `elem` ["", "Off"] then Right Nothing
+    else if yesValue == "1" && noValue `elem` ["", "Off"] then Right (Just True)
+    else if yesValue `elem` ["", "Off"] && noValue `elem` ["1", "2"] then Right (Just False)
+    else Left ("Can't figure out the checkbox at " <> show (path, entry, yesValue, noValue))
+  | Switch' leaf <- entry,
+    Just yesValue <- Map.lookup (map addIndex path <> [leaf <> "[0]"]) fieldValues,
+    Just noValue <- Map.lookup (map addIndex path <> [leaf <> "[1]"]) fieldValues
+  = if yesValue `elem` ["", "Off"] && noValue `elem` ["", "Off"] then Right Nothing
+    else if yesValue == "1" && noValue `elem` ["", "Off"] then Right (Just True)
+    else if yesValue `elem` ["", "Off"] && noValue `elem` ["1", "2"] then Right (Just False)
+    else Left ("Can't figure out the checkbox at " <> show (path, entry, yesValue, noValue))
+  | otherwise = Left ("Unknown field path " ++ show path ++ " between "
+                       ++ show (Map.lookupLT (addIndex <$> path) fieldValues,
+                                Map.lookupGT (addIndex <$> path) fieldValues))
+
+toEntry :: Entry a -> String -> Either String (Maybe a)
+toEntry _ "" = Right Nothing
+toEntry (Constant expected entry) v = do
+  e <- toEntry entry v
+  if e == Just expected
+    then pure e
+    else Left ("Expected " <> show expected <> ", got " <> show (v, e))
+toEntry Count v = Just <$> readEither v
+toEntry Date v = Just <$> parseTimeM False defaultTimeLocale "%Y%m%d" v
+toEntry Province v = Just <$> readEither v
+toEntry Textual v = Right $ Just $ Text.pack v
+toEntry Amount v = Just <$> readEither (dropCommas v)
+  where dropCommas num
           | (wholePart, pointyPart@('.' : decimals)) <- span (/= '.') num,
             length decimals == 2,
             all isDigit decimals
           = filter (/= ',') wholePart <> pointyPart
           | otherwise = num
+toEntry Percent v
+  | Just v' <- stripSuffix "%" v,
+    (wholePart, pointyPart) <- span (/= '.') v',
+    Right whole <- fromInteger <$> readEither wholePart,
+    Right decimal <- case takeWhile (not . isSpace) pointyPart
+                     of '.' : decimals -> (/ 10 ^ length decimals) . fromInteger <$> readEither decimals
+                        "" -> Right 0
+                        _ -> Left ("Bad decimals: " <> show v')
+  = Right $ Just ((whole + decimal) / 100)
+  | otherwise = Left ("Bad percentage value: " <> show v)
+toEntry Checkbox "Yes" = Right $ Just True
+toEntry Checkbox "No" = Right $ Just False
+toEntry Checkbox "Off" = Right $ Just False
+toEntry Checkbox "1" = Right $ Just True
+toEntry Checkbox v = Left ("Bad checkbox value: " <> show v)
+toEntry e@(RadioButton values) v
+  | Right n <- readEither v, n > 0, x:_ <- drop (n - 1) values = Right $ Just x
+  | otherwise = Left ("Bad radio button value: " <> show (e, v))
+toEntry e@RadioButtons{} v = Left (show (e, v))
+toEntry e@(Switch a b leaf) v = Left (show (e, v))
+toEntry e@(Switch' leaf) v = Left (show (e, v))
+
+addIndex :: Text -> Text
+addIndex key
+  | "]" `Text.isSuffixOf` key = key
+  | otherwise = key <> "[0]"
 
 instance MonadFail (Either String) where
   fail = Left
diff --git a/src/Tax/PDFtk.hs b/src/Tax/PDFtk.hs
new file mode 100644
--- /dev/null
+++ b/src/Tax/PDFtk.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | IO functions for invoking PDFTk as an external process
+
+module Tax.PDFtk where
+
+import Data.ByteString.Lazy qualified as Lazy
+import System.Process.Typed (ExitCode (ExitFailure, ExitSuccess), byteStringInput, readProcess, setStdin, shell)
+
+-- | Convert a PDF file to an FDF bytestring via @pdftk generate_fdf@
+pdfFile2fdf :: FilePath -> IO (Either String Lazy.ByteString)
+pdfFile2fdf pdfPath = do
+   (exitCode, fdf, errors) <- readProcess (shell $ "pdftk " <> pdfPath <> " generate_fdf output -")
+   case exitCode of
+      ExitSuccess -> pure (Right fdf)
+      ExitFailure n -> pure (Left $ "Error converting PDF to FDF (exit code " <> show n <> ").\n" <> show errors)
+
+-- | Convert a PDF bytestring to FDF via @pdftk generate_fdf@
+pdf2fdf :: Lazy.ByteString -> IO (Either String Lazy.ByteString)
+pdf2fdf pdf = do
+   (exitCode, fdf, errors) <- readProcess (setStdin (byteStringInput pdf) $ shell "pdftk - generate_fdf output -")
+   case exitCode of
+      ExitSuccess -> pure (Right fdf)
+      ExitFailure n -> pure (Left $ "Error converting PDF to FDF (exit code " <> show n <> ").\n" <> show errors)
+
+-- | Given a PDF file, convert an FDF bytestring to filled PDF via @pdftk fill_form@
+fdf2pdf :: FilePath -> Lazy.ByteString -> IO (Either String Lazy.ByteString)
+fdf2pdf pdfPath fdf = do
+   (exitCode, pdf, errors)
+      <- readProcess (setStdin (byteStringInput fdf) $ shell $ "pdftk " <> pdfPath <> " fill_form - output -")
+   case exitCode of
+      ExitSuccess -> pure (Right pdf)
+      ExitFailure n -> pure (Left $ "Error converting FDF to PDF (exit code " <> show n <> ").\n" <> show errors)
diff --git a/src/Tax/Util.hs b/src/Tax/Util.hs
--- a/src/Tax/Util.hs
+++ b/src/Tax/Util.hs
@@ -13,7 +13,7 @@
    where a' = f a
 
 -- | Sum the list of arguments; return 'Nothing' iff all items are 'Nothing'.
-totalOf :: [Maybe Centi] -> Maybe Centi
+totalOf :: Num a => [Maybe a] -> Maybe a
 totalOf = fmap sum . nonEmpty . mapMaybe id
 
 -- | Subtraction under 'Maybe'
@@ -30,7 +30,3 @@
 fractionOf :: Maybe Rational -> Maybe Centi -> Maybe Centi
 fractionOf (Just x) (Just amt) = Just $ fromRational (x * toRational amt)
 fractionOf _ _ = Nothing
-
--- | The minimum of all amounts, 'Nothing' ignored.
-leastOf :: [Maybe Centi] -> Maybe Centi
-leastOf = fmap minimum . nonEmpty . mapMaybe id
diff --git a/test/Properties.hs b/test/Properties.hs
new file mode 100644
--- /dev/null
+++ b/test/Properties.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Main where
+
+import Tax.Canada.Province.AB qualified as AB
+import Tax.Canada.Province.BC qualified as BC
+import Tax.Canada.Province.MB qualified as MB
+import Tax.Canada.Province.NB qualified as NB
+import Tax.Canada.Province.NL qualified as NL
+import Tax.Canada.Province.ON qualified as ON
+import Tax.Canada.Province.PE qualified as PE
+import Tax.Canada.Province.QC qualified as QC
+import Tax.Canada.Territory.NT qualified as NT
+import Tax.Canada.Territory.NU qualified as NU
+import Tax.Canada.Territory.YT qualified as YT
+import Tax.Canada.T1 (T1, fixT1)
+import Tax.Canada.Federal.Schedule6 (schedule6Fields)
+import Tax.Canada.Federal.Schedule7 (schedule7Fields)
+import Tax.Canada.Federal.Schedule9 (schedule9Fields)
+import Tax.Canada.Federal.Schedule11 (schedule11Fields)
+import Tax.FDF as FDF
+import Paths_canadian_income_tax (getDataDir)
+
+import Test.Transformations qualified as Transformations
+
+import Data.ByteString qualified as ByteString
+import Data.Either (isLeft, isRight)
+import Data.Functor.Const (Const (Const, getConst))
+import Data.List qualified as List
+import Data.Maybe (fromMaybe)
+import Data.Semigroup.Cancellative (isSuffixOf)
+import Data.Semigroup (All (All, getAll))
+import Data.Text (Text, isInfixOf, stripSuffix)
+import Rank2 qualified
+import System.Directory (listDirectory)
+import System.Exit (die)
+import System.FilePath.Posix (combine, isExtensionOf)
+import Transformation.Shallow qualified as Shallow
+import Text.FDF (FDF (body), Field, parse)
+import Text.FDF qualified
+
+import Hedgehog (Gen, Property, (===), annotateShow, assert, forAll, property)
+import Hedgehog.Gen qualified as Gen
+import Test.Tasty
+import Test.Tasty.Hedgehog
+
+main = do
+  dataDir <- getDataDir
+  fdfMaps <- traverse (readFDFs . combine dataDir) [".", "T1/fdf", "428", "479"]
+  either die (defaultMain . properties) $ sequenceA fdfMaps
+  where
+    readFDFs :: FilePath -> IO (Either String [(FilePath, FDF)])
+    readFDFs dir = do
+      fdfFileNames <- filter (".fdf" `isSuffixOf`) <$> listDirectory dir
+      fdfBytes <- traverse (ByteString.readFile . combine dir) fdfFileNames
+      pure $ traverse (traverse parse) $ zip fdfFileNames fdfBytes
+
+properties :: [[(FilePath, FDF)]] -> TestTree
+properties [dataRootMap, fdfT1Map, fdf428Map, fdf479Map] =
+  testGroup "Properties" [
+    testGroup "Idempotence" [
+      testGroup "Alberta" [
+        testProperty "T1" (checkFormIdempotent AB.t1Fields fixT1),
+        testProperty "AB428" (checkFormIdempotent AB.ab428Fields AB.fixAB428),
+        testProperty "Federal+AB428" (checkFormIdempotent AB.returnFields AB.fixReturns)],
+      testGroup "British Columbia" [
+        testProperty "T1" (checkFormIdempotent BC.t1Fields fixT1),
+        testProperty "BC428" (checkFormIdempotent BC.bc428Fields BC.fixBC428),
+        testProperty "Federal+BC428+BC479" (checkFormIdempotent BC.returnFields BC.fixReturns)],
+      testGroup "Manitoba" [
+        testProperty "T1" (checkFormIdempotent MB.t1Fields fixT1),
+        testProperty "MB428" (checkFormIdempotent MB.mb428Fields MB.fixMB428),
+        testProperty "Federal+MB428" (checkFormIdempotent MB.returnFields MB.fixReturns)],
+      testGroup "Ontario" [
+        testProperty "T1" (checkFormIdempotent ON.t1Fields fixT1),
+        testProperty "ON428" (checkFormIdempotent ON.returnFields.on428 ON.fixON428),
+        testProperty "ON479" (checkFormIdempotent ON.returnFields.on479 ON.fixON479),
+        testProperty "Federal+ON428+ON479" (checkFormIdempotent ON.returnFields ON.fixReturns)]],
+    testGroup "Roundtrip" [
+      testGroup "T1" [
+        testProperty ("T1 for " <> name) (checkFormFields fields $ List.lookup (prefix <> "-r-fill-23e.fdf") fdfT1Map)
+        | (name, prefix, fields) <- provincesT1],
+      testProperty "Schedule 6" (checkFormFields schedule6Fields $ List.lookup "5000-s6-fill-23e.fdf" dataRootMap),
+      testProperty "Schedule 7" (checkFormFields schedule7Fields $ List.lookup "5000-s7-fill-23e.fdf" dataRootMap),
+      testProperty "Schedule 9" (checkFormFields schedule9Fields $ List.lookup "5000-s9-fill-23e.fdf" dataRootMap),
+      testProperty "Schedule 11" (checkFormFields schedule11Fields $ List.lookup "5000-s11-fill-23e.fdf" dataRootMap),
+      testGroup "428" [
+        testProperty ("Form 428 for " <> name) (checkFields $ List.lookup (prefix <> "-c-fill-23e.fdf") fdf428Map)
+        | (name, prefix, checkFields) <- provinces428],
+      testGroup "479" [
+        testProperty ("Form 479 for " <> name) (checkFields $ List.lookup (prefix <> "-tc-fill-23e.fdf") fdf479Map)
+        | (name, prefix, checkFields) <- provinces479]],
+    testGroup "Load mismatch" [
+      testProperty ("Load T1 for " <> p1name <> " from FDF for " <> p2name) $ property $ assert
+        $ any (isLeft  . FDF.load p1fields) $ List.lookup (p2fdfPrefix <> "-r-fill-23e.fdf") fdfT1Map
+      | (p1name, _, p1fields) <- provincesT1,
+        (p2name, p2fdfPrefix, _) <- provincesT1,
+        p1name /= p2name]]
+  where provincesT1 = [("Newfoundland and Labrador", "5001", NL.t1Fields),
+                       ("PEI", "5002", PE.t1Fields),
+                       ("New Brunswick", "5004", NB.t1Fields),
+                       ("Quebec", "5005", QC.t1Fields),
+                       ("Ontario", "5006", ON.t1Fields),
+                       ("British Columbia", "5010", BC.t1Fields),
+                       ("Northwest Territories", "5012", NT.t1Fields),
+                       ("Yukon", "5011", YT.t1Fields),
+                       ("Nunavut", "5014", NU.t1Fields),
+                       ("Alberta, Manitoba, Nova Scotia, and Saskatchewan", "5015", AB.t1Fields)]
+        provinces428 = [("Ontario",  "5006", checkFormFields ON.on428Fields),
+                        ("Manitoba", "5007", checkFormFields MB.mb428Fields),
+                        ("Alberta",  "5009", checkFormFields AB.ab428Fields),
+                        ("British Columbia", "5010", checkFormFields BC.bc428Fields)]
+        provinces479 = [("Ontario",  "5006", checkFormFields ON.on479Fields),
+                        ("British Columbia", "5010", checkFormFields BC.bc479Fields)]
+properties maps = error ("Unexpected data directory contents: " <> show maps)
+
+checkFormIdempotent :: (Eq (g Maybe), Show (g Maybe),
+                        Rank2.Applicative g, Shallow.Traversable Transformations.Gen g)
+                    => g FieldConst -> (g Maybe -> g Maybe) -> Property
+checkFormIdempotent fields f = checkIdempotent (generateForm fields) f
+
+checkFormFields :: (Eq (g Maybe), Show (g Maybe),
+                    Rank2.Applicative g, Shallow.Traversable Transformations.Gen g)
+                => g FieldConst -> Maybe FDF -> Property
+checkFormFields _ Nothing = error "Missing FDF template"
+checkFormFields fields (Just fdf) = property $ do
+  annotateShow $ FDF.load fields fdf
+  assert $ isRight $ FDF.load fields fdf
+  form <- forAll (generateForm fields)
+  let Right fdf' = FDF.update fields form fdf
+      formKeys = FDF.formKeys fields
+      fdfKeys = Text.FDF.foldMapWithKey (const . (:[]) . map dropIndex) fdf
+      dropIndex t = fromMaybe t (stripSuffix "[0]" t)
+      keyHeads = List.nub $ take 2 <$> formKeys
+      noCheckbox :: [[Text]] -> [[Text]]
+      noCheckbox = filter $ not . or . ([isSuffixOf "Checkbox", isInfixOf "CheckBox",
+                                         isInfixOf "Footnote", isInfixOf "address", isInfixOf "Nameof",
+                                         (== "QuestionA"), (== "Note1"), (== "Note2"), (== "CAI-2023")] <*>)
+  -- annotateShow fdf'
+  FDF.load fields fdf' === Right form
+  List.sort (noCheckbox formKeys) === List.sort (noCheckbox $ filter (\x-> any (`List.isPrefixOf` x) keyHeads) fdfKeys)
+
+generateForm :: (Rank2.Applicative g, Shallow.Traversable Transformations.Gen g) => g FieldConst -> Gen (g Maybe)
+generateForm = Shallow.traverse Transformations.Gen
+
+checkIdempotent :: (Eq a, Show a) => Gen a -> (a -> a) -> Property
+checkIdempotent gen f = property $ forAll gen >>= \x-> let x' = f x in f x' === x'
+
diff --git a/test/Regression.hs b/test/Regression.hs
new file mode 100644
--- /dev/null
+++ b/test/Regression.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Main where
+
+import Tax.Canada.Province.ON qualified as ON
+import Tax.Canada.Province.AB qualified as AB (t1Fields)
+import Tax.Canada.Province.BC qualified as BC (t1Fields)
+import Tax.Canada.T1 (T1, fixT1)
+import Tax.FDF as FDF
+
+import Control.Monad.IO.Class (liftIO)
+import Data.ByteString qualified as ByteString
+import Data.ByteString.Lazy (fromStrict)
+import Data.Foldable (toList)
+import Data.Functor.Const (Const (Const, getConst))
+import Data.List qualified as List
+import Data.Map qualified as Map
+import Data.Maybe (fromMaybe)
+import Data.Semigroup (All (All, getAll))
+import Data.Text (Text)
+import Data.Text qualified as Text
+import Rank2 qualified
+import System.Directory (doesDirectoryExist, listDirectory)
+import System.Exit (die)
+import System.FilePath.Posix (combine)
+import Text.FDF (FDF, parse, serialize)
+import Text.FDF qualified
+
+import Test.Tasty
+import Test.Tasty.Golden
+
+main = listDirectory inputDir >>= traverse test >>= defaultMain . testGroup "Regression"
+
+rootDir, inputDir, outputDir, referenceDir :: FilePath
+rootDir = combine "test" "regression"
+inputDir = combine rootDir "inputs"
+outputDir = combine rootDir "outputs"
+referenceDir = combine rootDir "reference"
+
+test :: FilePath -> IO TestTree
+test path = do
+  let inputPath = combine inputDir path
+  isDir <- liftIO (doesDirectoryExist inputPath)
+  if isDir
+    then testReturn path
+    else testT1 path
+
+testT1 :: FilePath -> IO TestTree
+testT1 path = do
+  fdfBytes <- ByteString.readFile $ combine inputDir path
+  case parse fdfBytes of
+    Left err -> die err
+    Right fdf ->
+      pure $
+        goldenVsString path
+          (combine referenceDir path)
+          (pure $ fromStrict $ serialize $ either error id $ FDF.mapForm ON.t1Fields fixT1 fdf)
+
+testReturn :: FilePath -> IO TestTree
+testReturn path = do
+  let inputPath = combine inputDir path
+  fdfFileNames <- listDirectory inputPath
+  fdfBytes <- traverse (ByteString.readFile . combine inputPath) fdfFileNames
+  case traverse parse fdfBytes of
+    Left err -> die err
+    Right fdfs -> case FDF.mapForms ON.returnFields ON.fixReturns (Map.fromList $ zip (formKey <$> fdfFileNames) fdfs) of
+      Left err -> die err
+      Right filled
+        | let fdfOutputs = fromStrict . serialize <$> filled
+              diff ref new = ["diff", "-uw", ref, new]
+              compare key fdfOutput
+                | let Just fileName = List.find ((key ==) . formKey) fdfFileNames
+                = pure $ goldenVsStringDiff fileName diff (combine referenceDir $ combine path fileName) (pure fdfOutput)
+        -> testGroup path . toList <$> Map.traverseWithKey compare fdfOutputs
+
+
+formKey :: FilePath -> Text
+formKey "5000-s6-fill-23e.fdf" = "Schedule6"
+formKey "5006-c-fill-23e.fdf" = "428"
+formKey "5006-r-fill-23e.fdf" = "T1"
+formKey name = error ("File name " <> name <> " is not recognized as a form.")
diff --git a/test/Test/Transformations.hs b/test/Test/Transformations.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Transformations.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE NumericUnderscores #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Test.Transformations where
+
+import Data.Functor.Compose
+import Data.Void (Void)
+import Data.Word (Word)
+import Data.Text (Text)
+import Data.Time (Day)
+import Data.Time.Calendar (fromGregorian)
+import Data.CAProvinceCodes qualified as Province
+
+import Hedgehog qualified
+import Hedgehog.Gen qualified as Gen
+import Hedgehog.Range qualified as Range
+
+import Transformation (Transformation (Domain, Codomain), At)
+import Transformation qualified
+import Transformation.Shallow qualified as Shallow
+import Transformation.Shallow.TH qualified as Shallow.TH
+
+import Tax.FDF (FieldConst (Field, NoField), Entry (Constant))
+import Tax.Canada.T1 (LanguageOfCorrespondence, MaritalStatus)
+import Data.Fixed (Centi, Fixed (MkFixed))
+
+data Gen = Gen
+
+instance Transformation Gen where
+  type Domain Gen = FieldConst
+  type Codomain Gen = Compose Hedgehog.Gen Maybe
+
+adjust :: Hedgehog.Gen a -> Compose Hedgehog.Gen Maybe a
+adjust g = Compose $ Gen.frequency [(4, pure Nothing), (1, Just <$> g)]
+
+instance Gen `At` Void where
+  _ $ _ = Compose (pure Nothing)
+
+instance Gen `At` Bool where
+  _ $ NoField = Compose (pure Nothing)
+  _ $ _ = adjust Gen.enumBounded
+
+instance Gen `At` Centi where
+  _ $ NoField = Compose (pure Nothing)
+  _ $ Field _ (Constant c _) = Compose (pure $ Just c)
+  _ $ _ = adjust $ MkFixed <$> Gen.integral (Range.linear 0 1_000_000_000)
+
+instance Gen `At` Rational where
+  _ $ Field _ (Constant c _) = Compose (pure $ Just c)
+  _ $ _ = adjust $ ((/ 10_000) . toRational) <$> Gen.integral (Range.linear 0 10_000)
+
+instance Gen `At` Word where
+  _ $ _ = adjust $ Gen.word (Range.linear 0 1_000)
+
+instance Gen `At` Text where
+  _ $ _ = adjust $ Gen.text (Range.linear 1 500) Gen.unicode
+
+instance Gen `At` Province.Code where
+  _ $ _ = adjust $ Gen.element Province.all
+
+instance Gen `At` Day where
+  _ $ _ = adjust $ Gen.enum (fromGregorian 1910 1 1) (fromGregorian 2050 12 31)
+
+instance Gen `At` LanguageOfCorrespondence where
+  _ $ _ = adjust Gen.enumBounded
+
+instance Gen `At` MaritalStatus where
+  _ $ _ = adjust Gen.enumBounded
diff --git a/web/Main.hs b/web/Main.hs
new file mode 100644
--- /dev/null
+++ b/web/Main.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Main where
+
+import Codec.Archive.Zip (addEntryToArchive, emptyArchive, fromArchive, toEntry)
+import Control.Category ((>>>))
+import Control.Monad (forM, join)
+import Control.Monad.IO.Class (liftIO)
+import Control.Exception (assert)
+import Data.ByteString (ByteString)
+import Data.ByteString qualified as ByteString
+import Data.ByteString.Lazy qualified as Lazy
+import Data.ByteString.Lazy qualified as ByteString.Lazy
+import Data.Functor.Compose (Compose(..))
+import Data.Map.Lazy qualified as Map
+import Data.Monoid.Textual (toString)
+import Data.Monoid.Instances.ByteString.UTF8 (ByteStringUTF8(..))
+import Data.String (fromString)
+import Data.Time.Clock (nominalDiffTimeToSeconds)
+import Data.Time.Clock.POSIX (getPOSIXTime)
+import Data.Text (Text)
+import Data.Text.Lazy qualified as Text.Lazy
+import Network.HTTP.Types.Status (ok200, internalServerError500,
+                                  notFound404, unsupportedMediaType415, unprocessableEntity422)
+import Network.Wai.Middleware.RequestLogger
+import Network.Wai.Middleware.Static
+import Network.Wai.Parse (FileInfo (..))
+import System.Directory (removeDirectoryRecursive)
+import System.FilePath.Posix ((</>))
+import System.Posix.Temp (mkdtemp)
+import Text.FDF (parse, serialize)
+import Text.Read (readMaybe)
+import Web.Scotty
+
+import Paths_canadian_income_tax (getDataDir)
+import Tax.Canada (completeForms)
+import Tax.FDF qualified as FDF
+import Tax.PDFtk (fdf2pdf, pdfFile2fdf)
+
+main :: IO ()
+main = scotty 3000 $ do
+   middleware logStdoutDev
+   get "/" $ do
+      setHeader "Content-Type" "text/html; charset=utf-8"
+      file "web/client/build/index.html"
+   get "/about.html" $ do
+      file "web/static/about.html"
+   post "/t1/PDF/:province" $ do
+      provinceCode <- captureParam "province"
+      province <- case readMaybe (Text.Lazy.unpack provinceCode)
+                  of Nothing -> status notFound404
+                                >> text ("No such province as " <> provinceCode)
+                                >> finish
+                     Just p -> pure p
+      pdfFiles <- files
+      dir <- liftIO $ mkdtemp "tax"
+      fdfBytes <- liftIO $ fmap sequenceA $ forM pdfFiles $ \(key, FileInfo name _ content)-> do
+        let path = dir </> fromUTF8 name
+        Lazy.writeFile path content
+        fdf <- pdfFile2fdf path
+        pure ((,) key <$> fdf)
+      case fdfBytes >>= traverse (traverse $ Lazy.toStrict >>> parse) of
+        Left err -> status unsupportedMediaType415 >> text (fromString err)
+        Right fdfs -> case completeForms province (Map.fromList fdfs) of
+          Left err -> status unprocessableEntity422 >> text (fromString err)
+          Right fdfs' -> do
+            let fdfBytes' = Lazy.fromStrict . serialize <$> fdfs'
+                replaceContent :: (Text, FileInfo Lazy.ByteString) -> IO (Either String (Text, FileInfo Lazy.ByteString))
+                replaceContent (key, FileInfo name ty _) = case Map.lookup key fdfBytes' of
+                  Just c -> ((,) key . FileInfo name ty <$>) <$> fdf2pdf (dir </> fromUTF8 name) c
+                  Nothing -> pure (Left $ "Unknown key " <> show key)
+            pdfFiles' <- liftIO $ traverse replaceContent pdfFiles
+            case sequenceA pdfFiles' of
+              Left err -> do
+                status internalServerError500 >> text (fromString err)
+              Right [(_, FileInfo _ _ pdf)] -> do
+                status ok200
+                setHeader "Content-Type" "application/pdf"
+                raw pdf
+              Right pdfFiles' -> do
+                now <- liftIO $ round . nominalDiffTimeToSeconds <$> getPOSIXTime
+                let pdfArchive = foldr addPDF emptyArchive pdfFiles'
+                    addPDF (_, FileInfo name _ c) = addEntryToArchive (toEntry (fromUTF8 name) now c)
+                status ok200
+                setHeader "Content-Type" "application/zip"
+                raw (fromArchive pdfArchive)
+      liftIO $ removeDirectoryRecursive dir
+   middleware $ staticPolicy (noDots >-> addBase "web/client/build")
+
+fromUTF8 :: ByteString -> String
+fromUTF8 = toString mempty . ByteStringUTF8
