[
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n*.cs        eol=crlf\n*.fs        eol=crlf\n*.rc        eol=crlf\n*.vcproj    eol=crlf\n*.sln       eol=crlf\n*.nuspec    eol=crlf\n*.config    eol=crlf\n*.md        eol=lf\n\n*.html      eol=lf\n*.css       eol=lf\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Visual Studo 2015 cache/options directory\n.vs/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings \n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\n*.[Cc]ache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\nbower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Private file\n/nuget-sign.bat\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n<!--*Changes which are in this source code, but not yet in a release*:-->\n## 1.3.0\n\n* Build for .NET 4.5.2, 4.6.1 and standard 1.6, thanks [igitur](https://github.com/spreadsheetlab/XLParser/pull/61).\n* Remove embedded Irony dependency in favor of [daxnet](https://github.com/daxnet)s [updated fork](https://github.com/daxnet/irony).\n\n## 1.2.4\nReference implementation of the Excel grammar published in the Journal of Systems and Software SCAM special issue paper \"A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets\" by E. Aivaloglou, D. Hoepelman and F. Hermans.\n\n* Fixed several errors in which names/named ranges were allowed\n  * Question marks are now allowed\n  * Can now start with all unicode letters (e.g. `=äbc`)\n  * Corrected characters which are allowed if the name starts with a cell name or TRUE/FALSE (e.g. `=A1.MYNAME`)\n* Allow for whitespace-only sheetnames (e.g. `='    '!A1`), altough they will always be returned as `\" \"` by `PrefixInfo` \n* Made some corrections in how multiple sheet references (`=Sheet1:Sheet3!A1`) are parsed\n* Removed escape sequences in strings (e.g. `\"Line1\\nLine2\"`) as these are not part of the Excel formula language\n* Added support for structured references to a complete table (e.g. `=MyTable[]`)\n\n## 1.2.3\n* Adds support for special characters in structured references.\n\n## 1.2.2\n\n* Adds equality to `PrefixInfo` class\n* Fixes parse error if external reference file path contains a space (`='C:\\My Dir\\[file.xlsx]Sheet'!A1`)\n* `ExcelFormulaParser.SkipToRelevant` no longer skips references without a prefix.\n<br> This is a breaking change, but the old behavior is arguably a bug. An argument is added to restore old behavior, defaults to new behavior.\n\n## 1.2.1\n\n* Adds `GetReferenceNodes` method to `ExcelFormulaParser`\n\n## 1.2\n\nFixes [#16](https://github.com/PerfectXL/XLParser/issues/16), [#17](https://github.com/PerfectXL/XLParser/issues/17), [#19](https://github.com/PerfectXL/XLParser/issues/3)\n\n* Made it easier to modify the grammar in your own class by extending the grammar class\n* Can now parse non-numeric filenames (`=[file]Sheet!A1`)\n* Parsing of the `Prefix` nonterminal is changed and is now a little bit more uniform. `ExcelFormulaParser.GetPrefixInfo` gives prefix information in an easy to use format.\n* Can now parse [Structured References](https://support.office.com/en-us/article/Using-structured-references-with-Excel-tables-f5ed2452-2337-4f71-bed3-c8ae6d2b276e). See [#16](https://github.com/PerfectXL/XLParser/issues/16) for caveats.\n* You can now select the XLParser version to use in the web demo\n\n## 1.1.4\n\n* Added some missing methods that test for specific types of operators\n* Added tests and fixes if necessary for methods that were missing tests\n\n## 1.1.3\n\nReference implementation of the Excel grammar published in the paper \"A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets\" by E. Aivaloglou, D. Hoepelman and F. Hermans.\n\n* Added all formulas from EUSES and Enron datasets and tests to check if they all parse\n* Made parser thread safe\n* Fixed [#9](https://github.com/PerfectXL/XLParser/issues/9): some tokens which would not accept all unicode characters (like UDF) now do so\n* `'Sheet1:Sheet5'` will now correctly parse as `MULTIPLESHEETS` instead of a single sheet\n\n\n## 1.1.2\n\nFixed [#1](https://github.com/PerfectXL/XLParser/issues/1), [#2](https://github.com/PerfectXL/XLParser/issues/2), [#4](https://github.com/PerfectXL/XLParser/issues/4).\n\n* Added a web demo in app/XLParser.Web which generates parse tree images\n* All UDF's now use the same nonterminal\n* Non-Prefixed UDFs can now be part of a reference expression\n* IF and CHOOSE functions can now be part of a reference expression\n* Reference functions INDEX,OFFSET and INDIRECT can no longer have a prefix\n* Operator precedence for reference operators (: , and intersection) is now correct\n* Fixed printing of reference operators\n\n## 1.0.0\n\nFirst public release.\nCorresponds to pre-print/reviewer version of the paper\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n"
  },
  {
    "path": "README.md",
    "content": "# XLParser\nA C# Excel formula parser with the following properties:\n\n* **High compatiblity**<br/>\n  XLParser has been tested on over a million real-world formulas and has a 99.9% succesful parse rate.\n* **Compact parse trees**<br/>\n  XLParser was designed for and is used in research of Excel spreadsheets and refactoring, all of which are easier if parse trees are smaller\n* **Compact grammar**<br />\n  [Our grammar](https://github.com/PerfectXL/XLParser/blob/master/src/XLParser/ExcelFormulaGrammar.cs) contains less than 100 tokens and production rules, and is thus easy to implement in another language or parser generator.\n\n### Quickstart\n\nYou can parse formulas and view parse trees in [the online demo](https://xlparser.perfectxl.nl/demo).\n\n**or**\n\nUse [the NuGet package](https://www.nuget.org/packages/XLParser/).\n\n**or**\n\n1. Download the [latest release](https://github.com/PerfectXL/XLParser/releases/latest)\n2. Extract somewhere convenient\n3. Build Irony GrammarExplorer, see the Debugging section below, and open it\n4. Click on the `...` button at the top and select `Add Grammar`\n5. Point to the `XLParser.dll` file in the folder you extracted and click ok\n6. You can now parse formulas and see the trees in the `Test` tab\n\n## Background\n\nXLParser is the reference implementation of the Excel grammar published in the paper [\"A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets\" by Efthimia Aivaloglou, David Hoepelman and Felienne Hermans](https://fenia266781730.files.wordpress.com/2019/01/07335408.pdf).\n\nXLParser can parse Excel formulas and is intended to facilitate the analysis of spreadsheet formulas, and for that purpose produces compact parse trees.\nXLParser  has a 99.99% success rate on the [Enron](http://www.felienne.com/archives/3634) and [EUSES](http://eusesconsortium.org/resources.php) datasets.\nNote however that XLParser is not very restrictive, and thus might parse formulas that Excel would reject as invalid, keep this in mind when parsing user input with XLParser.\n\nXLParser is based on the C# [Irony parser framework](https://github.com/IronyProject/Irony).\n\n## Using XLParser\n\n### Building\n\nOpen the `XLParser.sln` file in `src/` in Visual Studio and press build. The dependencies are already included in compiled form in this repository.\n\n### Using in your project\n\nThe easiest way to add the dependency to your project is with [NuGet](https://www.nuget.org/packages/XLParser/)\n\nThe `ExcelFormulaParser` class is your main entry point. You can parse a formula through `ExcelFormulaParser.Parse(\"yourformula\")`.\n\n`ExcelFormulaParser` has several useful methods that operate directly on the parse tree like `AllNodes` to traverse the whole tree or `GetFunction` to get the function name of a node that represents a function call. You can `Print` any node.\n\n`FormulaAnalyzer` provides functionality for analyzing the parse tree. For example, `FormulaAnalyzer.ParserReferences()` returns all references (to cells, cell ranges, named ranges, horizontal or vertical ranges) that the formula contains.        \n\n### Debugging\n\nIrony, the parser framework XLParser uses, includes a tool called the \"grammar explorer\". This is a great way to play around with the grammar and parse trees.\nTo use this tool, you first need to build it once by opening the IronyExplorer solution (`lib/IronyExplorer/IronyExplorer.sln`) and building it with release configuration. After that you can use the binary in `lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/bin/Release/IronyExplorer.GrammarExplorer.exe`.\n\nTo load the XLParser grammar, first make sure you have built XLParser. Then open the GrammarExplorer and add the grammar (`...` button) from `src/XLParser/bin/Debug/XLParser.dll`.\n\nIn Visual Studio you can see the printed version of any node during debugging by adding `yournode.Print(),ac` in the watch window.\n\n## Documentation\n\nBrowse the [API documentation](http://spreadsheetlab.github.io/XLParser/api/index.html)\n\nSee [the doc folder](doc) for further documentation.\n\n## License\n\nAll files of XLParser are released under the [Mozilla Public License 2.0](License.md).\n"
  },
  {
    "path": "app/XLParser apps.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.23107.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"XLParser Web\", \"XLParser.Web\\XLParser Web.csproj\", \"{A24BD58E-5958-4990-8836-958C52A6AA02}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A24BD58E-5958-4990-8836-958C52A6AA02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A24BD58E-5958-4990-8836-958C52A6AA02}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A24BD58E-5958-4990-8836-958C52A6AA02}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A24BD58E-5958-4990-8836-958C52A6AA02}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "app/XLParser.Web/.gitignore",
    "content": "deploy"
  },
  {
    "path": "app/XLParser.Web/Default.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"XLParser.Web.Default\" %>\n<!DOCTYPE html>\n<html>\n<head runat=\"server\">\n    <meta charset=\"utf-8\"/>\n    <title>XLParser web demo</title>\n    <link rel=\"stylesheet\" href=\"xlparser-web.css\" type=\"text/css\"/>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js\" charset=\"utf-8\"></script>\n    <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js\"></script>\n    <script src=\"d3vizsvg.js\" type=\"text/javascript\" defer>\n    </script>\n</head>\n<body>\n<div id=\"borderwrapper\">\n    <div id=\"leftoflogos\">\n        <h2><a href=\"https://github.com/PerfectXL/XLParser\">XLParser</a> web demo</h2>\n\n        <table>\n            <colgroup>\n                <col/>\n                <col style=\"width: 100px;\"/>\n                <col style=\"width: 100px;\"/>\n            </colgroup>\n            <thead>\n            <tr>\n                <th style=\"text-align: left;\">Formula:</th>\n                <th style=\"text-align: left;\">Version:</th><th></th>\n            </tr>\n            </thead>\n            <tbody>\n            <tr>\n                <td>\n                    <textarea rows=\"1\" id=\"formulainput\"></textarea>\n                </td>\n                <td>\n                    <select id=\"parserversionselected\">\n                        <option value=\"175\" selected>1.7.5</option>\n                        <option value=\"174\">1.7.4</option>\n                        <option value=\"173\">1.7.3</option>\n                        <option value=\"172\">1.7.2</option>\n                        <option value=\"171\">1.7.1</option>\n                        <option value=\"170\">1.7.0</option>\n                        <option value=\"163\">1.6.3</option>\n                        <option value=\"162\">1.6.2</option>\n                        <option value=\"161\">1.6.1</option>\n                        <option value=\"160\">1.6.0</option>\n                        <option value=\"152\">1.5.2</option>\n                        <option value=\"151\">1.5.1</option>\n                        <option value=\"150\">1.5.0</option>\n                        <option value=\"142\">1.4.2</option>\n                        <option value=\"141\">1.4.1</option>\n                        <option value=\"139\">1.3.9</option>\n                        <option value=\"120\">1.2.0</option>\n                        <option value=\"114\">1.1.4</option>\n                        <option value=\"100\">1.0.0</option>\n                    </select>\n                </td>\n                <td>\n                    <button id=\"parsebutton\" onclick=\"newTree(document.getElementById('formulainput').value, document.getElementById('parserversionselected').value)\">Parse</button>\n                </td>\n            </tr>\n            </tbody>\n        </table>\n\n        <div id=\"bugreport\">\n            <a href=\"javascript:;\" onclick=\" javascript: if (document.getElementById('bug_explanation').style.display !== 'block') { document.getElementById('bug_explanation').style.display = 'block' } else { document.getElementById('bug_explanation').style.display = 'none' };\" style=\"color: black; font-weight: bold;\">Found a bug?</a> <br/> <br/>\n            <div id=\"bug_explanation\" style=\"display: none;\">\n                Great! <a href=\"https://github.com/PerfectXL/XLParser/issues\">Please report it as a Github issue!</a> <br/> <br/>\n\n                If the bug is with a specific formula/excel file, please include that too.<br/>\n                Generally bugs in XLParser are one of the following, please include this type in the report:<br/>\n                <ul>\n                    <li>The parser can't parse a formula that Excel accepts</li>\n                    <li>The parser parses a formula that Excel doesn't accept.</li>\n                    <li>The parser interprets a formula wrong, that is it produces a parse tree that doesn't correspond with how Excel behaves.</li>\n                    <li>There is a \"normal\" bug in the code around the core parser.</li>\n                </ul>\n\n            </div>\n        </div>\n    </div>\n\n    <div id=\"logos\">\n        <a href=\"https://tudelft.nl\">\n            <img src=\"img/logo-tudelft.png\" alt=\"TU Delft logo\"/>\n        </a><br/>\n        <img src=\"img/logo-spreadsheet-lab.png\" alt=\"Spreadsheet lab logo\"/><br/>\n        <a href=\"https://www.infotron.nl/\">\n            <img src=\"img/logo-infotron.png\" alt=\"Infotron logo\"/>\n        </a>\n    </div>\n</div>\n<div id=\"borderwrapper2\">\n    <script type=\"text/javascript\">\n        var ua = window.navigator.userAgent;\n        if (ua.indexOf(\"MSIE \") > 0 || ua.indexOf('Trident/') > 0) {\n            document.write(\n                \"<em>Note: image downloading does not work properly in Internet Explorer 11 and lower.</em><br />\");\n        }\n    </script>\n    <!-- Based on https://mbostock.github.io/d3/talk/20111018/tree.html and https://gist.github.com/d3noob/8326869-->\n    <p>Parse Tree (<a id=\"imgdatasvg\">SVG</a>, <a id=\"imgdatapng\">PNG</a>):</p>\n    <div id=\"d3viz\"></div>\n</div>\n</body>\n</html>"
  },
  {
    "path": "app/XLParser.Web/Default.aspx.cs",
    "content": "﻿using System;\r\nusing System.Web.UI;\r\n\r\nnamespace XLParser.Web\r\n{\r\n    public partial class Default : Page\r\n    {\r\n        protected void Page_Load(object sender, EventArgs e) { }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated. \r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace XLParser.Web {\r\n    \r\n    \r\n    public partial class Default {\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/Parse.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics.CodeAnalysis;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Text.RegularExpressions;\r\nusing System.Web;\r\nusing Irony.Parsing;\r\nusing Newtonsoft.Json;\r\nusing XLParser.Web.XLParserVersions.v100;\r\n\r\nnamespace XLParser.Web\r\n{\r\n    public class Parse : IHttpHandler\r\n    {\r\n        private HttpContext _httpContext;\r\n\r\n        private void WriteResponse(string s)\r\n        {\r\n            _httpContext.Response.Write(s);\r\n        }\r\n\r\n        private static readonly bool DisableCache =\r\n#if(DEBUG)\r\n            true;\r\n#else\r\n            false;\r\n#endif\r\n\r\n        private const string LatestVersion = \"175\";\r\n\r\n        public void ProcessRequest(HttpContext context)\r\n        {\r\n            _httpContext = context;\r\n\r\n            if (!DisableCache && context.Request.Params[\"nocache\"] != \"true\")\r\n            {\r\n                context.Response.Cache.SetCacheability(HttpCacheability.Public);\r\n                context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(5));\r\n                context.Response.Cache.SetMaxAge(new TimeSpan(0, 0, 5));\r\n            }\r\n\r\n            context.Response.AddHeader(\"Access-Control-Allow-Origin\", \"*\");\r\n\r\n            // Dynamically load a library version\r\n            var xlParserVersion = context.Request.Params[\"version\"] ?? LatestVersion;\r\n            if (!Regex.IsMatch(xlParserVersion, @\"^[0-9]{3,4}[\\-a-z0-9]*$\"))\r\n            {\r\n                context.Response.StatusCode = (int) HttpStatusCode.BadRequest;\r\n                _httpContext.Response.ContentType = \"text/plain\";\r\n                WriteResponse(\"Invalid version\");\r\n                context.Response.End();\r\n                return;\r\n            }\r\n\r\n            try\r\n            {\r\n                LoadXlParserVersion(xlParserVersion);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                context.Response.StatusCode = (int) HttpStatusCode.NotFound;\r\n                _httpContext.Response.ContentType = \"text/plain\";\r\n                WriteResponse(\"Version doesn't exist\");\r\n                context.Response.End();\r\n                return;\r\n            }\r\n\r\n            // We want to actually give meaningful HTTP error codes and not have IIS interfere\r\n            context.Response.TrySkipIisCustomErrors = true;\r\n\r\n            // check file extension for format\r\n            var format = (Path.GetExtension(context.Request.FilePath) ?? \".json\").TrimStart('.');\r\n            var formula = context.Request.Unvalidated[\"formula\"];\r\n            switch (format)\r\n            {\r\n                case \"json\":\r\n                    ParseToJson(formula);\r\n                    break;\r\n                default:\r\n                    context.Response.StatusCode = 415;\r\n                    _httpContext.Response.ContentType = \"text/plain\";\r\n                    WriteResponse($\"Format '{format}' not supported.\");\r\n                    context.Response.End();\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void ParseToJson(string formula)\r\n        {\r\n            _httpContext.Response.ContentType = \"application/json\";\r\n            if (formula == null)\r\n            {\r\n                _httpContext.Response.StatusCode = 400;\r\n                WriteResponse(JsonConvert.SerializeObject(new {error = \"no formula supplied\"}));\r\n                _httpContext.Response.End();\r\n                return;\r\n            }\r\n\r\n            ParseTreeNode root;\r\n            try\r\n            {\r\n                //root = XLParser.ExcelFormulaParser.Parse(formula);\r\n                root = _parse(formula);\r\n            }\r\n            catch (ArgumentException)\r\n            {\r\n                // Parse error, return 422 - Unprocessable Entity\r\n                _httpContext.Response.StatusCode = 422;\r\n                ParseTree r = new Parser((Grammar) Activator.CreateInstance(_grammar)).Parse(formula);\r\n                WriteResponse(JsonConvert.SerializeObject(new\r\n                {\r\n                    error = \"Parse error\",\r\n                    formula,\r\n                    message = r.ParserMessages.Select(m => new\r\n                    {\r\n                        level = m.Level.ToString(),\r\n                        line = m.Location.Line + 1,\r\n                        column = m.Location.Column + 1,\r\n                        msg = m.Message\r\n                    }).FirstOrDefault()\r\n                }));\r\n                _httpContext.Response.End();\r\n                return;\r\n            }\r\n\r\n            WriteResponse(JsonConvert.SerializeObject(ToJson(root), Formatting.Indented, new JsonSerializerSettings\r\n            {\r\n                NullValueHandling = NullValueHandling.Ignore\r\n            }));\r\n            _httpContext.Response.End();\r\n        }\r\n\r\n        private JsonNode ToJson(ParseTreeNode node)\r\n        {\r\n            return new JsonNode\r\n            {\r\n                name = NodeText(node),\r\n                children = node.ChildNodes.Count == 0 ? null : node.ChildNodes.Select(ToJson)\r\n            };\r\n        }\r\n\r\n        [SuppressMessage(\"ReSharper\", \"InconsistentNaming\")]\r\n        private class JsonNode\r\n        {\r\n            public IEnumerable<JsonNode> children;\r\n            public string name;\r\n        }\r\n\r\n        private string NodeText(ParseTreeNode node)\r\n        {\r\n            if (node.Term is NonTerminal)\r\n            {\r\n                return node.Term.Name;\r\n            }\r\n\r\n            // These are simple terminals like + or =, just print them\r\n            // For other terminals, print the terminal name + contents\r\n            return node.Term.Name.Length <= 2 ? _print(node) : $\"{node.Term.Name}[\\\"{_print(node)}\\\"]\";\r\n        }\r\n\r\n        private Func<string, ParseTreeNode> _parse;\r\n        private Func<ParseTreeNode, string> _print;\r\n        private Type _grammar;\r\n\r\n        // Yes, this is f-ugly. Better solutions were tried (dynamically loading through reflection, extern alias and separate AppDomains) but failed.\r\n        // Mainly this is because .NET is very very picky about loading multiple versions of libraries with the same name\r\n        private void LoadXlParserVersion(string version)\r\n        {\r\n            switch (version)\r\n            {\r\n                case \"100\":\r\n                    _parse = ExcelFormulaParser.Parse;\r\n                    _print = ExcelFormulaParser.Print;\r\n                    _grammar = typeof(ExcelFormulaGrammar);\r\n                    break;\r\n                case \"114\":\r\n                    _parse = XLParserVersions.v114.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v114.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v114.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"120\":\r\n                    _parse = XLParserVersions.v120.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v120.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v120.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"139\":\r\n                    _parse = XLParserVersions.v139.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v139.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v139.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"141\":\r\n                    _parse = XLParserVersions.v141.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v141.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v141.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"142\":\r\n                    _parse = XLParserVersions.v142.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v142.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v142.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"150\":\r\n                    _parse = XLParserVersions.v150.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v150.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v150.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"151\":\r\n                    _parse = XLParserVersions.v151.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v151.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v151.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"152\":\r\n                    _parse = XLParserVersions.v152.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v152.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v152.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"160\":\r\n                    _parse = XLParserVersions.v160.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v160.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v160.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"161\":\r\n                    _parse = XLParserVersions.v161.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v161.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v161.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"162\":\r\n                    _parse = XLParserVersions.v162.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v162.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v162.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"163\":\r\n                    _parse = XLParserVersions.v163.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v163.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v163.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"170\":\r\n                    _parse = XLParserVersions.v170.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v170.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v170.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"171\":\r\n                    _parse = XLParserVersions.v171.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v171.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v171.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"172\":\r\n                    _parse = XLParserVersions.v172.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v172.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v172.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"173\":\r\n                    _parse = XLParserVersions.v173.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v173.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v173.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"174\":\r\n                    _parse = XLParserVersions.v174.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v174.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v174.ExcelFormulaGrammar);\r\n                    break;\r\n                case \"175\":\r\n                    _parse = XLParserVersions.v175.ExcelFormulaParser.Parse;\r\n                    _print = XLParserVersions.v175.ExcelFormulaParser.Print;\r\n                    _grammar = typeof(XLParserVersions.v175.ExcelFormulaGrammar);\r\n                    break;\r\n                default:\r\n                    throw new ArgumentException($\"Version {version} doesn't exist\");\r\n            }\r\n        }\r\n\r\n        public bool IsReusable => true;\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.InteropServices;\r\n\r\n[assembly: ComVisible(false)]\r\n[assembly: Guid(\"ffb6e35e-f708-485b-996e-f1f0a54fffb7\")]\r\n[assembly: AssemblyVersion(\"1.7.5.0\")]"
  },
  {
    "path": "app/XLParser.Web/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace XLParser.Web.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"XLParser.Web.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ADDRESS\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///AREAS\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOMDIST\r\n        ///CALL\r\n        ///CEILING\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHITEST\r\n        ///CLEAN\r\n        ///CODE\r\n        ///COLUMN\r\n        ///COLUMNS\r\n        ///COMBIN\r\n        ///COMPLEX\r\n        ///CONCATENATE\r\n        ///CONFIDENCE\r\n        ///CONVERT\r\n        ///CORREL\r\n        ///COS\r\n        ///COSH\r\n        ///COUNT\r\n        ///COUNTA\r\n        ///COUNTBLANK\r\n        ///COUNTIF\r\n        ///COUNTIFS\r\n        ///COUPDAYBS\r\n        ///COUPDAYS\r\n        ///COUPDAYSNC\r\n        ///COUPNCD\r\n        ///C [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v120 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList-v120\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIST\r\n        ///CHISQ.DIST [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v139 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList-v139\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIST\r\n        ///CHISQ.DIST [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v141 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v141\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIST\r\n        ///CHISQ.DIST [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v142 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v142\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v150 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v150\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v151 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v151\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v152 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v152\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v160 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v160\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v161 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v161\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v162 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v162\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v163 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v163\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v170 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v170\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v171 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v171\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v172 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v172\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v173 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v173\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v174 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v174\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ABS\r\n        ///ACCRINT\r\n        ///ACCRINTM\r\n        ///ACOS\r\n        ///ACOSH\r\n        ///ACOT\r\n        ///ACOTH\r\n        ///ADDRESS\r\n        ///AGGREGATE\r\n        ///AMORDEGRC\r\n        ///AMORLINC\r\n        ///AND\r\n        ///ARABIC\r\n        ///AREAS\r\n        ///ARRAYTOTEXT\r\n        ///ASC\r\n        ///ASIN\r\n        ///ASINH\r\n        ///ATAN\r\n        ///ATAN2\r\n        ///ATANH\r\n        ///AVEDEV\r\n        ///AVERAGE\r\n        ///AVERAGEA\r\n        ///AVERAGEIF\r\n        ///AVERAGEIFS\r\n        ///BAHTTEXT\r\n        ///BASE\r\n        ///BESSELI\r\n        ///BESSELJ\r\n        ///BESSELK\r\n        ///BESSELY\r\n        ///BETA.DIST\r\n        ///BETA.INV\r\n        ///BETADIST\r\n        ///BETAINV\r\n        ///BIN2DEC\r\n        ///BIN2HEX\r\n        ///BIN2OCT\r\n        ///BINOM.DIST\r\n        ///BINOM.DIST.RANGE\r\n        ///BINOM.INV\r\n        ///BINOMDIST\r\n        ///BITAND\r\n        ///BITLSHIFT\r\n        ///BITOR\r\n        ///BITRSHIFT\r\n        ///BITXOR\r\n        ///CALL\r\n        ///CEILING\r\n        ///CEILING.MATH\r\n        ///CEILING.PRECISE\r\n        ///CELL\r\n        ///CHAR\r\n        ///CHIDIST\r\n        ///CHIINV\r\n        ///CHISQ.DIS [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string ExcelBuiltinFunctionList_v175 {\r\n            get {\r\n                return ResourceManager.GetString(\"ExcelBuiltinFunctionList_v175\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"ExcelBuiltinFunctionList-v120\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v120.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList-v139\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\resources\\excelbuiltinfunctionlist-v139.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v141\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v141.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v142\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v142.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v150\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v150.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v151\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v151.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v152\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v152.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v160\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\resources\\excelbuiltinfunctionlist-v160.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v161\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\resources\\excelbuiltinfunctionlist-v161.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v162\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\resources\\excelbuiltinfunctionlist-v162.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;iso-8859-1</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v163\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\resources\\excelbuiltinfunctionlist-v163.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v170\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v170.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v171\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v171.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v172\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v172.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v173\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v173.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v174\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v174.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"ExcelBuiltinFunctionList_v175\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ExcelBuiltinFunctionList-v175.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n</root>"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v120.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nADDRESS\nAMORDEGRC\nAMORLINC\nAND\nAREAS\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOMDIST\nCALL\nCEILING\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMPLEX\nCONCATENATE\nCONFIDENCE\nCONVERT\nCORREL\nCOS\nCOSH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCRITBINOM\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEVALUE\nDAVERAGE\nDAY\nDAYS360\nDB\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATEEFFECT\nEOMONTH\nERF\nERFC\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPONDIST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFIND\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFORECAST\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMADIST\nGAMMAINV\nGAMMALN\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOMDIST\nISBLANK\nIFERROR\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSIN\nIMSQRT\nIMSUB\nIMSUM\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nIS\nISB\nISERROR\nISNA\nISNUMBER\nISPMT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMONTH\nMROUND\nMULTINOMIAL\nN\nNA\nNEGBINOMDIST\nNETWORKDAYS\nNOMINAL\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPEARSON\nPERCENTILE\nPERCENTRANK\nPERMUT\nPHONETIC\nPI\nPMT\nPOISSON\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUOTIENT\nRADIANS\nRAND\nRANDBETWEEN\nRANK\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRSQ\nRTD\nSEARCH\nSEARCHB\nSECOND\nSERIESSUM\nSIGN\nSIN\nSINH\nSKEW\nSLN\nSLOPE\nSMALL\nSQL.REQUEST\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSYD\nT\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUPPER\nVALUE\nVAR\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEEKDAY\nWEEKNUM\nWEIBULL\nWORKDAY\nXIRR\nXNPV\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZTEST"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v139.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nISBLANK\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nIS\nISB\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSQL.REQUEST\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUPPER\nVALUE\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v141.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nISBLANK\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nIS\nISB\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSQL.REQUEST\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUPPER\nVALUE\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v142.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nISBLANK\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nIS\nISB\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSQL.REQUEST\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUPPER\nVALUE\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v150.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v151.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v152.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v160.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v161.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v162.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v163.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v170.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v171.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v172.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v173.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v174.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Resources/ExcelBuiltinFunctionList-v175.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "app/XLParser.Web/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an attribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "app/XLParser.Web/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an attribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "app/XLParser.Web/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<!--\r\n  For more information on how to configure your ASP.NET application, please visit\r\n  http://go.microsoft.com/fwlink/?LinkId=169433\r\n  -->\r\n<configuration>\r\n  <!--\r\n    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.\r\n\r\n    The following attributes can be set on the <httpRuntime> tag.\r\n      <system.Web>\r\n        <httpRuntime targetFramework=\"4.7.2\" />\r\n      </system.Web>\r\n  -->\r\n  <system.web>\r\n    <compilation debug=\"true\" targetFramework=\"4.7.2\"/>\r\n    <httpRuntime targetFramework=\"4.7.2\" requestValidationMode=\"2.0\"/>\r\n  </system.web>\r\n  <system.webServer>\r\n    <handlers>\r\n      <add verb=\"*\" name=\"Parse\" path=\"Parse.*\" type=\"XLParser.Web.Parse\"/>\r\n    </handlers>\r\n  </system.webServer>\r\n</configuration>\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParser Web.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{A24BD58E-5958-4990-8836-958C52A6AA02}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>XLParser.Web</RootNamespace>\n    <AssemblyName>XLParser Web</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <UseGlobalApplicationHostFile />\n    <Use64BitIISExpress />\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Irony, Version=1.1.0.0, Culture=neutral, PublicKeyToken=ca48ace7223ead47, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Irony.1.2.0\\lib\\netstandard2.0\\Irony.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.12.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"d3vizsvg.js\" />\n    <Content Include=\"Default.aspx\" />\n    <Content Include=\"img\\logo-infotron.png\" />\n    <Content Include=\"img\\logo-spreadsheet-lab.png\" />\n    <Content Include=\"img\\logo-tudelft.png\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v120.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v139.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v141.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v142.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v150.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v151.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v152.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v160.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v161.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v162.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v163.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v170.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v171.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v172.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v173.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v174.txt\" />\n    <None Include=\"Resources\\ExcelBuiltinFunctionList-v175.txt\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"xlparser-web.css\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Parse.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"XLParserVersions\\v100\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v100\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v114\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v114\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v120\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v120\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v120\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v139\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v139\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v139\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v139\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v141\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v141\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v141\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v141\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v142\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v142\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v142\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v142\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v150\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v150\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v150\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v150\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v151\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v151\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v151\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v151\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v152\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v152\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v152\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v152\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v160\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v160\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v160\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v160\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v161\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v161\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v161\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v161\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v162\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v162\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v162\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v162\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v162\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v163\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v163\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v163\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v163\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v163\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v170\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v170\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v170\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v170\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v170\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v171\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v171\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v171\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v171\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v171\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v172\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v172\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v172\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v172\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v172\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v173\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v173\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v173\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v173\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v173\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v174\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v174\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v174\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v174\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v174\\WordsTerminal.cs\" />\n    <Compile Include=\"XLParserVersions\\v175\\ExcelFormulaGrammar.cs\" />\n    <Compile Include=\"XLParserVersions\\v175\\ExcelFormulaParser.cs\" />\n    <Compile Include=\"XLParserVersions\\v175\\ParserReference.cs\" />\n    <Compile Include=\"XLParserVersions\\v175\\PrefixInfo.cs\" />\n    <Compile Include=\"XLParserVersions\\v175\\WordsTerminal.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <WCFMetadata Include=\"Service References\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\PublishProfiles\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>39901</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:39901/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v100/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v100\r\n{\r\n    [Language(\"Excel Formulas\", \"1.0.0\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            #region 1-Terminals\r\n\r\n            #region Symbols and operators\r\n            var comma = ToTerm(\",\");\r\n            var colon = ToTerm(\":\");\r\n            var semicolon = ToTerm(\";\");\r\n            var OpenParen = ToTerm(\"(\");\r\n            var CloseParen = ToTerm(\")\");\r\n            var CloseSquareParen = ToTerm(\"]\");\r\n            var OpenSquareParen = ToTerm(\"[\");\r\n            var exclamationMark = ToTerm(\"!\");\r\n            var CloseCurlyParen = ToTerm(\"}\");\r\n            var OpenCurlyParen = ToTerm(\"{\");\r\n\r\n            var mulop = ToTerm(\"*\");\r\n            var plusop = ToTerm(\"+\");\r\n            var divop = ToTerm(\"/\");\r\n            var minop = ToTerm(\"-\");\r\n            var concatop = ToTerm(\"&\");\r\n            var expop = ToTerm(\"^\");\r\n            // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n            // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and it's default priority is low\r\n            var intersectop = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n            var percentop = ToTerm(\"%\");\r\n\r\n            var gtop = ToTerm(\">\");\r\n            var eqop = ToTerm(\"=\");\r\n            var ltop = ToTerm(\"<\");\r\n            var neqop = ToTerm(\"<>\");\r\n            var gteop = ToTerm(\">=\");\r\n            var lteop = ToTerm(\"<=\");\r\n            #endregion\r\n\r\n            #region Literals\r\n            var BoolToken = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\");\r\n            BoolToken.Priority = TerminalPriority.Bool;\r\n\r\n            var NumberToken = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None);\r\n            NumberToken.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt };\r\n\r\n            var TextToken = new StringLiteral(GrammarNames.TokenText, \"\\\"\", StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak);\r\n\r\n            var ErrorToken = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n            var RefErrorToken = ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            var UDFToken = new RegexBasedTerminal(GrammarNames.TokenUDF, \"(_xll\\\\.)?[a-zA-Z0-9_.]+\\\\(\");\r\n            UDFToken.Priority = TerminalPriority.UDF;\r\n\r\n            var ExcelRefFunctionToken = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\");\r\n            ExcelRefFunctionToken.Priority = TerminalPriority.ExcelRefFunction;\r\n\r\n            var ExcelFunction = new RegexBasedTerminal(GrammarNames.ExcelFunction, \"(\" + String.Join(\"|\", excelFunctionList)  +\")\\\\(\");\r\n            ExcelFunction.Priority = TerminalPriority.ExcelFunction;\r\n\r\n            // Using this instead of Empty allows a more accurate trees\r\n            var EmptyArgumentToken = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n            #endregion\r\n\r\n            #region References and names\r\n\r\n            var VRangeToken = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?[A-Z]{1,4}:[$]?[A-Z]{1,4}\");\r\n            var HRangeToken = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n            \r\n            const string CellTokenRegex = \"[$]?[A-Z]{1,4}[$]?[1-9][0-9]*\";\r\n            var CellToken = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex);\r\n            CellToken.Priority = TerminalPriority.CellToken;\r\n\r\n            const string NamedRangeRegex = @\"[A-Za-z\\\\_][\\w\\.]*\";\r\n            var NamedRangeToken = new RegexBasedTerminal(GrammarNames.TokenNamedRange, NamedRangeRegex);\r\n            NamedRangeToken.Priority = TerminalPriority.NamedRange;\r\n\r\n            // To prevent e.g. \"A1A1\" being parsed as 2 celltokens\r\n            var NamedRangeCombinationToken = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, \"(TRUE|FALSE|\" + CellTokenRegex + \")\" + NamedRangeRegex);\r\n            NamedRangeCombinationToken.Priority = TerminalPriority.NamedRangeCombination;\r\n\r\n            const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n            const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n\r\n            var SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, sheetRegEx);\r\n            SheetToken.Priority = TerminalPriority.SheetToken;\r\n\r\n            const string firstSheetName = \"[a-zA-Z0-9]+:\";\r\n            var MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, firstSheetName + sheetRegEx);\r\n            MultipleSheetsToken.Priority = TerminalPriority.MultipleSheetsToken;\r\n\r\n            var FileToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, \"[0-9]+\");\r\n            FileToken.Priority = TerminalPriority.FileToken;;\r\n\r\n            var QuotedFileSheetToken = new RegexBasedTerminal(GrammarNames.TokenFileSheetQuoted, @\"'\\[\\d+\\]([\" + singleQuotedContent + @\"]|'')+'!\");\r\n            QuotedFileSheetToken.Priority = TerminalPriority.QuotedFileToken;\r\n\r\n            var ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\");\r\n            ReservedNameToken.Priority = TerminalPriority.ReservedName;\r\n\r\n            var DDEToken = new RegexBasedTerminal(GrammarNames.TokenDDE, @\"'([\\[\\]\" + singleQuotedContent + @\"]|'')+'\");\r\n\r\n            #endregion\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(exclamationMark);\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            #endregion\r\n\r\n            #region 2-NonTerminals\r\n            // Most nonterminals are first defined here, so they can be used anywhere in the rules\r\n            // Otherwise you can only use nonterminals that have been defined previously\r\n\r\n            var Argument = new NonTerminal(GrammarNames.Argument);\r\n            var Arguments = new NonTerminal(GrammarNames.Arguments);\r\n            var ArrayColumns = new NonTerminal(GrammarNames.ArrayColumns);\r\n            var ArrayConstant = new NonTerminal(GrammarNames.ArrayConstant);\r\n            var ArrayFormula = new NonTerminal(GrammarNames.ArrayFormula);\r\n            var ArrayRows = new NonTerminal(GrammarNames.ArrayRows);\r\n            var Bool = new NonTerminal(GrammarNames.Bool);\r\n            var Cell = new NonTerminal(GrammarNames.Cell);\r\n            var Constant = new NonTerminal(GrammarNames.Constant);\r\n            var ConstantArray = new NonTerminal(GrammarNames.ConstantArray);\r\n            var DynamicDataExchange = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n            var EmptyArgument = new NonTerminal(GrammarNames.EmptyArgument);\r\n            var Error = new NonTerminal(GrammarNames.Error);\r\n            var File = new NonTerminal(GrammarNames.File);\r\n            var Formula = new NonTerminal(GrammarNames.Formula);\r\n            var FormulaWithEq = new NonTerminal(GrammarNames.FormulaWithEq);\r\n            var Function = new NonTerminal(GrammarNames.Function);\r\n            var FunctionCall = new NonTerminal(GrammarNames.FunctionCall);\r\n            var HRange = new NonTerminal(GrammarNames.HorizontalRange);\r\n            var InfixOp = new NonTerminal(GrammarNames.TransientInfixOp);\r\n            var MultipleSheets = new NonTerminal(GrammarNames.MultipleSheets);\r\n            var NamedRange = new NonTerminal(GrammarNames.NamedRange);\r\n            var Number = new NonTerminal(GrammarNames.Number);\r\n            var PostfixOp = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n            var Prefix = new NonTerminal(GrammarNames.Prefix);\r\n            var PrefixOp = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n            var QuotedFileSheet = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n            var Reference = new NonTerminal(GrammarNames.Reference);\r\n            var ReferenceFunction = new NonTerminal(GrammarNames.ReferenceFunction);\r\n            var ReferenceItem = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n            var RefError = new NonTerminal(GrammarNames.RefError);\r\n            var ReservedName = new NonTerminal(GrammarNames.ReservedName);\r\n            var Sheet = new NonTerminal(GrammarNames.Sheet);\r\n            var Start = new NonTerminal(GrammarNames.TransientStart);\r\n            var Text = new NonTerminal(GrammarNames.Text);\r\n            var Union = new NonTerminal(GrammarNames.Union);\r\n            var VRange = new NonTerminal(GrammarNames.VerticalRange);\r\n            #endregion\r\n\r\n\r\n            #region 3-Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  Function + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            Function.Rule = ExcelFunction | UDFToken;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | Prefix + UDFToken + Arguments + CloseParen\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | ReferenceFunction\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            ReferenceFunction.Rule =\r\n                ExcelRefFunctionToken + Arguments + CloseParen;\r\n\r\n            QuotedFileSheet.Rule = QuotedFileSheetToken;\r\n            Sheet.Rule = SheetToken;\r\n            MultipleSheets.Rule = MultipleSheetsToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = OpenSquareParen + FileToken + CloseSquareParen;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + DDEToken;\r\n\r\n            NamedRange.Rule = NamedRangeToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                Sheet\r\n                | File + Sheet\r\n                | File + exclamationMark\r\n                | QuotedFileSheet\r\n                | MultipleSheets\r\n                | File + MultipleSheets;\r\n\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Reference, Associativity.Left, intersectop, colon);\r\n            RegisterOperators(Precedence.Reference, Associativity.Left, comma);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            public const int Reference = 8;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick celltoken because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n            \r\n            public const int NamedRange = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int QuotedFileToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        #region Excel function list\r\n        private static readonly IList<string> excelFunctionList = new List<String>\r\n        {\r\n            \"ABS\",\r\n            \"ACCRINT\",\r\n            \"ACCRINTM\",\r\n            \"ACOS\",\r\n            \"ACOSH\",\r\n            \"ADDRESS\",\r\n            \"AMORDEGRC\",\r\n            \"AMORLINC\",\r\n            \"AND\",\r\n            \"AREAS\",\r\n            \"ASC\",\r\n            \"ASIN\",\r\n            \"ASINH\",\r\n            \"ATAN\",\r\n            \"ATAN2\",\r\n            \"ATANH\",\r\n            \"AVEDEV\",\r\n            \"AVERAGE\",\r\n            \"AVERAGEA\",\r\n            \"AVERAGEIF\",\r\n            \"AVERAGEIFS\",\r\n            \"BAHTTEXT\",\r\n            \"BESSELI\",\r\n            \"BESSELJ\",\r\n            \"BESSELK\",\r\n            \"BESSELY\",\r\n            \"BETADIST\",\r\n            \"BETAINV\",\r\n            \"BIN2DEC\",\r\n            \"BIN2HEX\",\r\n            \"BIN2OCT\",\r\n            \"BINOMDIST\",\r\n            \"CALL\",\r\n            \"CEILING\",\r\n            \"CELL\",\r\n            \"CHAR\",\r\n            \"CHIDIST\",\r\n            \"CHIINV\",\r\n            \"CHITEST\",\r\n            \"CHOOSE\",\r\n            \"CLEAN\",\r\n            \"CODE\",\r\n            \"COLUMN\",\r\n            \"COLUMNS\",\r\n            \"COMBIN\",\r\n            \"COMPLEX\",\r\n            \"CONCATENATE\",\r\n            \"CONFIDENCE\",\r\n            \"CONVERT\",\r\n            \"CORREL\",\r\n            \"COS\",\r\n            \"COSH\",\r\n            \"COUNT\",\r\n            \"COUNTA\",\r\n            \"COUNTBLANK\",\r\n            \"COUNTIF\",\r\n            \"COUNTIFS\",\r\n            \"COUPDAYBS\",\r\n            \"COUPDAYS\",\r\n            \"COUPDAYSNC\",\r\n            \"COUPNCD\",\r\n            \"COUPNUM\",\r\n            \"COUPPCD\",\r\n            \"COVAR\",\r\n            \"CRITBINOM\",\r\n            \"CUBEKPIMEMBER\",\r\n            \"CUBEMEMBER\",\r\n            \"CUBEMEMBERPROPERTY\",\r\n            \"CUBERANKEDMEMBER\",\r\n            \"CUBESET\",\r\n            \"CUBESETCOUNT\",\r\n            \"CUBEVALUE\",\r\n            \"CUMIPMT\",\r\n            \"CUMPRINC\",\r\n            \"DATE\",\r\n            \"DATEVALUE\",\r\n            \"DAVERAGE\",\r\n            \"DAY\",\r\n            \"DAYS360\",\r\n            \"DB\",\r\n            \"DCOUNT\",\r\n            \"DCOUNTA\",\r\n            \"DDB\",\r\n            \"DEC2BIN\",\r\n            \"DEC2HEX\",\r\n            \"DEC2OCT\",\r\n            \"DEGREES\",\r\n            \"DELTA\",\r\n            \"DEVSQ\",\r\n            \"DGET\",\r\n            \"DISC\",\r\n            \"DMAX\",\r\n            \"DMIN\",\r\n            \"DOLLAR\",\r\n            \"DOLLARDE\",\r\n            \"DOLLARFR\",\r\n            \"DPRODUCT\",\r\n            \"DSTDEV\",\r\n            \"DSTDEVP\",\r\n            \"DSUM\",\r\n            \"DURATION\",\r\n            \"DVAR\",\r\n            \"DVARP\",\r\n            \"EDATEEFFECT\",\r\n            \"EOMONTH\",\r\n            \"ERF\",\r\n            \"ERFC\",\r\n            \"ERROR.TYPE\",\r\n            \"EUROCONVERT\",\r\n            \"EVEN\",\r\n            \"EXACT\",\r\n            \"EXP\",\r\n            \"EXPONDIST\",\r\n            \"FACT\",\r\n            \"FACTDOUBLE\",\r\n            \"FALSE\",\r\n            \"FDIST\",\r\n            \"FIND\",\r\n            \"FINV\",\r\n            \"FISHER\",\r\n            \"FISHERINV\",\r\n            \"FIXED\",\r\n            \"FLOOR\",\r\n            \"FORECAST\",\r\n            \"FREQUENCY\",\r\n            \"FTEST\",\r\n            \"FV\",\r\n            \"FVSCHEDULE\",\r\n            \"GAMMADIST\",\r\n            \"GAMMAINV\",\r\n            \"GAMMALN\",\r\n            \"GCD\",\r\n            \"GEOMEAN\",\r\n            \"GESTEP\",\r\n            \"GETPIVOTDATA\",\r\n            \"GROWTH\",\r\n            \"HARMEAN\",\r\n            \"HEX2BIN\",\r\n            \"HEX2DEC\",\r\n            \"HEX2OCT\",\r\n            \"HLOOKUP\",\r\n            \"HOUR\",\r\n            \"HYPERLINK\",\r\n            \"HYPGEOMDIST\",\r\n            \"IF\",\r\n            \"ISBLANK\",\r\n            \"IFERROR\",\r\n            \"IMABS\",\r\n            \"IMAGINARY\",\r\n            \"IMARGUMENT\",\r\n            \"IMCONJUGATE\",\r\n            \"IMCOS\",\r\n            \"IMDIV\",\r\n            \"IMEXP\",\r\n            \"IMLN\",\r\n            \"IMLOG10\",\r\n            \"IMLOG2\",\r\n            \"IMPOWER\",\r\n            \"IMPRODUCT\",\r\n            \"IMREAL\",\r\n            \"IMSIN\",\r\n            \"IMSQRT\",\r\n            \"IMSUB\",\r\n            \"IMSUM\",\r\n            \"INFO\",\r\n            \"INT\",\r\n            \"INTERCEPT\",\r\n            \"INTRATE\",\r\n            \"IPMT\",\r\n            \"IRR\",\r\n            \"IS\",\r\n            \"ISB\",\r\n            \"ISERROR\",\r\n            \"ISNA\",\r\n            \"ISNUMBER\",\r\n            \"ISPMT\",\r\n            \"JIS\",\r\n            \"KURT\",\r\n            \"LARGE\",\r\n            \"LCM\",\r\n            \"LEFT\",\r\n            \"LEFTB\",\r\n            \"LEN\",\r\n            \"LENB\",\r\n            \"LINEST\",\r\n            \"LN\",\r\n            \"LOG\",\r\n            \"LOG10\",\r\n            \"LOGEST\",\r\n            \"LOGINV\",\r\n            \"LOGNORMDIST\",\r\n            \"LOOKUP\",\r\n            \"LOWER\",\r\n            \"MATCH\",\r\n            \"MAX\",\r\n            \"MAXA\",\r\n            \"MDETERM\",\r\n            \"MDURATION\",\r\n            \"MEDIAN\",\r\n            \"MID\",\r\n            \"MIDB\",\r\n            \"MIN\",\r\n            \"MINA\",\r\n            \"MINUTE\",\r\n            \"MINVERSE\",\r\n            \"MIRR\",\r\n            \"MMULT\",\r\n            \"MOD\",\r\n            \"MODE\",\r\n            \"MONTH\",\r\n            \"MROUND\",\r\n            \"MULTINOMIAL\",\r\n            \"N\",\r\n            \"NA\",\r\n            \"NEGBINOMDIST\",\r\n            \"NETWORKDAYS\",\r\n            \"NOMINAL\",\r\n            \"NORMDIST\",\r\n            \"NORMINV\",\r\n            \"NORMSDIST\",\r\n            \"NORMSINV\",\r\n            \"NOT\",\r\n            \"NOW\",\r\n            \"NPER\",\r\n            \"NPV\",\r\n            \"OCT2BIN\",\r\n            \"OCT2DEC\",\r\n            \"OCT2HEX\",\r\n            \"ODD\",\r\n            \"ODDFPRICE\",\r\n            \"ODDFYIELD\",\r\n            \"ODDLPRICE\",\r\n            \"ODDLYIELD\",\r\n            \"OR\",\r\n            \"PEARSON\",\r\n            \"PERCENTILE\",\r\n            \"PERCENTRANK\",\r\n            \"PERMUT\",\r\n            \"PHONETIC\",\r\n            \"PI\",\r\n            \"PMT\",\r\n            \"POISSON\",\r\n            \"POWER\",\r\n            \"PPMT\",\r\n            \"PRICE\",\r\n            \"PRICEDISC\",\r\n            \"PRICEMAT\",\r\n            \"PROB\",\r\n            \"PRODUCT\",\r\n            \"PROPER\",\r\n            \"PV\",\r\n            \"QUARTILE\",\r\n            \"QUOTIENT\",\r\n            \"RADIANS\",\r\n            \"RAND\",\r\n            \"RANDBETWEEN\",\r\n            \"RANK\",\r\n            \"RATE\",\r\n            \"RECEIVED\",\r\n            \"REGISTER.ID\",\r\n            \"REPLACE\",\r\n            \"REPLACEB\",\r\n            \"REPT\",\r\n            \"RIGHT\",\r\n            \"RIGHTB\",\r\n            \"ROMAN\",\r\n            \"ROUND\",\r\n            \"ROUNDDOWN\",\r\n            \"ROUNDUP\",\r\n            \"ROW\",\r\n            \"ROWS\",\r\n            \"RSQ\",\r\n            \"RTD\",\r\n            \"SEARCH\",\r\n            \"SEARCHB\",\r\n            \"SECOND\",\r\n            \"SERIESSUM\",\r\n            \"SIGN\",\r\n            \"SIN\",\r\n            \"SINH\",\r\n            \"SKEW\",\r\n            \"SLN\",\r\n            \"SLOPE\",\r\n            \"SMALL\",\r\n            \"SQL.REQUEST\",\r\n            \"SQRT\",\r\n            \"SQRTPI\",\r\n            \"STANDARDIZE\",\r\n            \"STDEV\",\r\n            \"STDEVA\",\r\n            \"STDEVP\",\r\n            \"STDEVPA\",\r\n            \"STEYX\",\r\n            \"SUBSTITUTE\",\r\n            \"SUBTOTAL\",\r\n            \"SUM\",\r\n            \"SUMIF\",\r\n            \"SUMIFS\",\r\n            \"SUMPRODUCT\",\r\n            \"SUMSQ\",\r\n            \"SUMX2MY2\",\r\n            \"SUMX2PY2\",\r\n            \"SUMXMY2\",\r\n            \"SYD\",\r\n            \"T\",\r\n            \"TAN\",\r\n            \"TANH\",\r\n            \"TBILLEQ\",\r\n            \"TBILLPRICE\",\r\n            \"TBILLYIELD\",\r\n            \"TDIST\",\r\n            \"TEXT\",\r\n            \"TIME\",\r\n            \"TIMEVALUE\",\r\n            \"TINV\",\r\n            \"TODAY\",\r\n            \"TRANSPOSE\",\r\n            \"TREND\",\r\n            \"TRIM\",\r\n            \"TRIMMEAN\",\r\n            \"TRUE\",\r\n            \"TRUNC\",\r\n            \"TTEST\",\r\n            \"TYPE\",\r\n            \"UPPER\",\r\n            \"VALUE\",\r\n            \"VAR\",\r\n            \"VARA\",\r\n            \"VARP\",\r\n            \"VARPA\",\r\n            \"VDB\",\r\n            \"VLOOKUP\",\r\n            \"WEEKDAY\",\r\n            \"WEEKNUM\",\r\n            \"WEIBULL\",\r\n            \"WORKDAY\",\r\n            \"XIRR\",\r\n            \"XNPV\",\r\n            \"YEAR\",\r\n            \"YEARFRAC\",\r\n            \"YIELD\",\r\n            \"YIELDDISC\",\r\n            \"YIELDMAT\",\r\n            \"ZTEST\"\r\n        };\r\n        #endregion\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string Function = \"Function\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultipleSheets = \"MultipleSheets\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunction = \"ReferenceFunction\";\r\n        public const string RefError = \"RefError\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string Text = \"Text\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenDDE = \"DDEToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenFileSheetQuoted = \"FileSheetQuotedToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenNamedRange = \"NamedRangeToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v100/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Data;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v100\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Singleton parser instance\r\n        /// </summary>\r\n        private readonly static Parser p = new Parser(new ExcelFormulaGrammar());\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = p.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether this tree contains any nodes of a type\r\n        /// </summary>\r\n        public static bool Contains(this ParseTreeNode root, string type)\r\n        {\r\n            return root.AllNodes(type).Any();\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return IsNamedFunction(input)\r\n                || IsBinaryOperation(input)\r\n                || IsUnaryOperation(input)\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) || input.Is(GrammarNames.Reference))\r\n                   && input.ChildNodes.Count() == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                   && input.ChildNodes.Count() == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                   && input.ChildNodes.Count() == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (IsIntersection(input))\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (IsBinaryOperation(input) || IsUnaryPostfixOperation(input))\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (IsUnaryPrefixOperation(input))\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.Is(GrammarNames.ReferenceFunction) || input.Is(GrammarNames.FunctionCall))\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.Is(GrammarNames.Reference))\r\n            {\r\n                if (input.ChildNodes.Count == 3 && input.ChildNodes[2].Is(GrammarNames.Arguments))\r\n                {\r\n                    return RemoveFinalSymbol(input.ChildNodes[1].Print()).ToUpper();\r\n                }\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", \"input\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, String functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() && (node.Is(GrammarNames.ExcelFunction) || node.Is(GrammarNames.ReferenceFunction));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            try\r\n            {\r\n                return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n            }\r\n            catch (Exception)\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a reference node is a union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes.Exists(pt => pt.Term.Name == GrammarNames.Function))\r\n                || input.Is(GrammarNames.ReferenceFunction)\r\n                // User defined function with prefix\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 3 && input.ChildNodes[2].Is(GrammarNames.Arguments));\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.ArrayFormula:\r\n                    return SkipToRelevant(input.ChildNodes[1]);\r\n                case GrammarNames.Formula:\r\n                case GrammarNames.Reference:\r\n                    // This also catches parentheses\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return SkipToRelevant(input.ChildNodes[0]);\r\n                    }\r\n                    goto default;\r\n                default:\r\n                    return input;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed childs\r\n            var childs = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<String> childsL;\r\n\r\n            // Switch on nonterminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? String.Format(\"({0})\", childs.First()) : childs.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                    if (IsNamedFunction(input))\r\n                    {\r\n                        return String.Join(\"\", childs) + \")\";\r\n                    }\r\n\r\n                    childsL = childs.ToList();\r\n\r\n                    if (IsBinaryOperation(input))\r\n                    {\r\n                        return String.Format(\"{0} {1} {2}\", childsL[0], childsL[1], childsL[2]);\r\n                    }\r\n\r\n                    // Unary function\r\n                    return String.Join(\"\", childsL);\r\n\r\n                case GrammarNames.Reference:\r\n                    if (IsParentheses(input) || IsUnion(input))\r\n                    {\r\n                        return String.Format(\"({0})\", childs.First());\r\n                    }\r\n\r\n                    childsL = childs.ToList();\r\n                    if (IsIntersection(input))\r\n                    {\r\n                        return String.Format(\"{0} {1}\", childsL[0], childsL[2]);\r\n                    }\r\n\r\n                    if (IsBinaryOperation(input))\r\n                    {\r\n                        return String.Format(\"{0}{1}{2}\", childsL[0], childsL[1], childsL[2]);\r\n                    }\r\n\r\n                    return String.Join(\"\", childsL);\r\n\r\n                case GrammarNames.ReferenceFunction:\r\n                    return String.Join(\"\", childs) + \")\";\r\n\r\n                case GrammarNames.File:\r\n                    return String.Format(\"[{0}]\", childs.First());\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = String.Join(\"\", childs);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + childs.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                    return String.Join(\"\", childs);\r\n\r\n                // Terms for which we print the childs comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return String.Join(\",\", childs);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return String.Join(\";\", childs);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return String.Format(\"{{{0}}}\", childs.First());\r\n\r\n\r\n                default:\r\n                    // If it is not defined above and the number of childs is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return childs.First();\r\n                    }\r\n                    throw new ArgumentException(String.Format(\"Could not print node of type '{0}'.\\nThis probably means the excel grammar was modified without the print function being modified\", input.Term.Name));\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v114/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v114\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.1.3\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            #region 1-Terminals\r\n\r\n            #region Symbols and operators\r\n            var comma = ToTerm(\",\");\r\n            var colon = ToTerm(\":\");\r\n            var semicolon = ToTerm(\";\");\r\n            var OpenParen = ToTerm(\"(\");\r\n            var CloseParen = ToTerm(\")\");\r\n            var CloseSquareParen = ToTerm(\"]\");\r\n            var OpenSquareParen = ToTerm(\"[\");\r\n            var exclamationMark = ToTerm(\"!\");\r\n            var CloseCurlyParen = ToTerm(\"}\");\r\n            var OpenCurlyParen = ToTerm(\"{\");\r\n\r\n            var mulop = ToTerm(\"*\");\r\n            var plusop = ToTerm(\"+\");\r\n            var divop = ToTerm(\"/\");\r\n            var minop = ToTerm(\"-\");\r\n            var concatop = ToTerm(\"&\");\r\n            var expop = ToTerm(\"^\");\r\n            // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n            // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and it's default priority is low\r\n            var intersectop = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n            var percentop = ToTerm(\"%\");\r\n\r\n            var gtop = ToTerm(\">\");\r\n            var eqop = ToTerm(\"=\");\r\n            var ltop = ToTerm(\"<\");\r\n            var neqop = ToTerm(\"<>\");\r\n            var gteop = ToTerm(\">=\");\r\n            var lteop = ToTerm(\"<=\");\r\n            #endregion\r\n\r\n            #region Literals\r\n            var BoolToken = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\");\r\n            BoolToken.Priority = TerminalPriority.Bool;\r\n\r\n            var NumberToken = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None);\r\n            NumberToken.DefaultIntTypes = new TypeCode[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt };\r\n\r\n            var TextToken = new StringLiteral(GrammarNames.TokenText, \"\\\"\", StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak);\r\n\r\n            var ErrorToken = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n            var RefErrorToken = ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            var UDFToken = new RegexBasedTerminal(GrammarNames.TokenUDF, @\"(_xll\\.)?[\\w\\\\.]+\\(\");\r\n            UDFToken.Priority = TerminalPriority.UDF;\r\n\r\n            var ExcelRefFunctionToken = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\");\r\n            ExcelRefFunctionToken.Priority = TerminalPriority.ExcelRefFunction;\r\n            \r\n            var ExcelConditionalRefFunctionToken = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\");\r\n            ExcelConditionalRefFunctionToken.Priority = TerminalPriority.ExcelRefFunction;\r\n\r\n            var ExcelFunction = new RegexBasedTerminal(GrammarNames.ExcelFunction, \"(\" + String.Join(\"|\", excelFunctionList)  +\")\\\\(\");\r\n            ExcelFunction.Priority = TerminalPriority.ExcelFunction;\r\n\r\n            // Using this instead of Empty allows a more accurate trees\r\n            var EmptyArgumentToken = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n            #endregion\r\n\r\n            #region References and names\r\n\r\n            var VRangeToken = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?[A-Z]{1,4}:[$]?[A-Z]{1,4}\");\r\n            var HRangeToken = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n            \r\n            const string CellTokenRegex = \"[$]?[A-Z]{1,4}[$]?[1-9][0-9]*\";\r\n            var CellToken = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex);\r\n            CellToken.Priority = TerminalPriority.CellToken;\r\n\r\n            const string NamedRangeRegex = @\"[A-Za-z\\\\_][\\w\\.]*\";\r\n            var NamedRangeToken = new RegexBasedTerminal(GrammarNames.TokenNamedRange, NamedRangeRegex);\r\n            NamedRangeToken.Priority = TerminalPriority.NamedRange;\r\n\r\n            // To prevent e.g. \"A1A1\" being parsed as 2 celltokens\r\n            var NamedRangeCombinationToken = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, \"(TRUE|FALSE|\" + CellTokenRegex + \")\" + NamedRangeRegex);\r\n            NamedRangeCombinationToken.Priority = TerminalPriority.NamedRangeCombination;\r\n\r\n            const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n            const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n            //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n            //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n            const string normalSheetName = \"[^\" + notSheetNameChars + mustBeQuotedInSheetName + \"]+\";\r\n            const string quotedSheetName = \"([^\" + notSheetNameChars +  \"]|'')+\";\r\n            const string sheetRegEx = \"((\" + normalSheetName + \")|('\" + quotedSheetName + \"'))!\";\r\n\r\n            var SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, sheetRegEx);\r\n            SheetToken.Priority = TerminalPriority.SheetToken;\r\n\r\n            var multiSheetRegex = String.Format(\"(({0}:{0})|('{1}:{1}'))!\", normalSheetName, quotedSheetName);\r\n            var MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex);\r\n            MultipleSheetsToken.Priority = TerminalPriority.MultipleSheetsToken;\r\n\r\n            var FileToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, \"[0-9]+\");\r\n            FileToken.Priority = TerminalPriority.FileToken;;\r\n\r\n            const string quotedFileSheetRegex = @\"'\\[\\d+\\]\" + quotedSheetName + \"'!\";\r\n            \r\n            var QuotedFileSheetToken = new RegexBasedTerminal(GrammarNames.TokenFileSheetQuoted, quotedFileSheetRegex);\r\n            QuotedFileSheetToken.Priority = TerminalPriority.QuotedFileToken;\r\n\r\n            var ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\");\r\n            ReservedNameToken.Priority = TerminalPriority.ReservedName;\r\n\r\n            var DDEToken = new RegexBasedTerminal(GrammarNames.TokenDDE, @\"'([^']|'')+'\");\r\n\r\n            #endregion\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(exclamationMark);\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            #endregion\r\n\r\n            #region 2-NonTerminals\r\n            // Most nonterminals are first defined here, so they can be used anywhere in the rules\r\n            // Otherwise you can only use nonterminals that have been defined previously\r\n\r\n            var Argument = new NonTerminal(GrammarNames.Argument);\r\n            var Arguments = new NonTerminal(GrammarNames.Arguments);\r\n            var ArrayColumns = new NonTerminal(GrammarNames.ArrayColumns);\r\n            var ArrayConstant = new NonTerminal(GrammarNames.ArrayConstant);\r\n            var ArrayFormula = new NonTerminal(GrammarNames.ArrayFormula);\r\n            var ArrayRows = new NonTerminal(GrammarNames.ArrayRows);\r\n            var Bool = new NonTerminal(GrammarNames.Bool);\r\n            var Cell = new NonTerminal(GrammarNames.Cell);\r\n            var Constant = new NonTerminal(GrammarNames.Constant);\r\n            var ConstantArray = new NonTerminal(GrammarNames.ConstantArray);\r\n            var DynamicDataExchange = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n            var EmptyArgument = new NonTerminal(GrammarNames.EmptyArgument);\r\n            var Error = new NonTerminal(GrammarNames.Error);\r\n            var File = new NonTerminal(GrammarNames.File);\r\n            var Formula = new NonTerminal(GrammarNames.Formula);\r\n            var FormulaWithEq = new NonTerminal(GrammarNames.FormulaWithEq);\r\n            var FunctionCall = new NonTerminal(GrammarNames.FunctionCall);\r\n            var FunctionName = new NonTerminal(GrammarNames.FunctionName);\r\n            var HRange = new NonTerminal(GrammarNames.HorizontalRange);\r\n            var InfixOp = new NonTerminal(GrammarNames.TransientInfixOp);\r\n            var MultipleSheets = new NonTerminal(GrammarNames.MultipleSheets);\r\n            var NamedRange = new NonTerminal(GrammarNames.NamedRange);\r\n            var Number = new NonTerminal(GrammarNames.Number);\r\n            var PostfixOp = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n            var Prefix = new NonTerminal(GrammarNames.Prefix);\r\n            var PrefixOp = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n            var QuotedFileSheet = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n            var Reference = new NonTerminal(GrammarNames.Reference);\r\n            //var ReferenceFunction = new NonTerminal(GrammarNames.ReferenceFunction);\r\n            var ReferenceItem = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n            var ReferenceFunctionCall = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n            var RefError = new NonTerminal(GrammarNames.RefError);\r\n            var RefFunctionName = new NonTerminal(GrammarNames.RefFunctionName);\r\n            var ReservedName = new NonTerminal(GrammarNames.ReservedName);\r\n            var Sheet = new NonTerminal(GrammarNames.Sheet);\r\n            var Start = new NonTerminal(GrammarNames.TransientStart);\r\n            var Text = new NonTerminal(GrammarNames.Text);\r\n            var UDFName = new NonTerminal(GrammarNames.UDFName);\r\n            var UDFunctionCall = new NonTerminal(GrammarNames.UDFunctionCall);\r\n            var Union = new NonTerminal(GrammarNames.Union);\r\n            var VRange = new NonTerminal(GrammarNames.VerticalRange);\r\n            #endregion\r\n\r\n\r\n            #region 3-Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                //| ConditionalRefFunctionName + Arguments + CloseParen\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n            \r\n            //ConditionalRefFunctionName.Rule = ExcelConditionalRefFunctionToken;\r\n\r\n            QuotedFileSheet.Rule = QuotedFileSheetToken;\r\n            Sheet.Rule = SheetToken;\r\n            MultipleSheets.Rule = MultipleSheetsToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = OpenSquareParen + FileToken + CloseSquareParen;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + DDEToken;\r\n\r\n            NamedRange.Rule = NamedRangeToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                Sheet\r\n                | File + Sheet\r\n                | File + exclamationMark\r\n                | QuotedFileSheet\r\n                | MultipleSheets\r\n                | File + MultipleSheets;\r\n\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick celltoken because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n            \r\n            public const int NamedRange = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int QuotedFileToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        #region Excel function list\r\n        private static readonly IList<string> excelFunctionList = new List<String>\r\n        {\r\n            \"ABS\",\r\n            \"ACCRINT\",\r\n            \"ACCRINTM\",\r\n            \"ACOS\",\r\n            \"ACOSH\",\r\n            \"ADDRESS\",\r\n            \"AMORDEGRC\",\r\n            \"AMORLINC\",\r\n            \"AND\",\r\n            \"AREAS\",\r\n            \"ASC\",\r\n            \"ASIN\",\r\n            \"ASINH\",\r\n            \"ATAN\",\r\n            \"ATAN2\",\r\n            \"ATANH\",\r\n            \"AVEDEV\",\r\n            \"AVERAGE\",\r\n            \"AVERAGEA\",\r\n            \"AVERAGEIF\",\r\n            \"AVERAGEIFS\",\r\n            \"BAHTTEXT\",\r\n            \"BESSELI\",\r\n            \"BESSELJ\",\r\n            \"BESSELK\",\r\n            \"BESSELY\",\r\n            \"BETADIST\",\r\n            \"BETAINV\",\r\n            \"BIN2DEC\",\r\n            \"BIN2HEX\",\r\n            \"BIN2OCT\",\r\n            \"BINOMDIST\",\r\n            \"CALL\",\r\n            \"CEILING\",\r\n            \"CELL\",\r\n            \"CHAR\",\r\n            \"CHIDIST\",\r\n            \"CHIINV\",\r\n            \"CHITEST\",\r\n            //\"CHOOSE\",\r\n            \"CLEAN\",\r\n            \"CODE\",\r\n            \"COLUMN\",\r\n            \"COLUMNS\",\r\n            \"COMBIN\",\r\n            \"COMPLEX\",\r\n            \"CONCATENATE\",\r\n            \"CONFIDENCE\",\r\n            \"CONVERT\",\r\n            \"CORREL\",\r\n            \"COS\",\r\n            \"COSH\",\r\n            \"COUNT\",\r\n            \"COUNTA\",\r\n            \"COUNTBLANK\",\r\n            \"COUNTIF\",\r\n            \"COUNTIFS\",\r\n            \"COUPDAYBS\",\r\n            \"COUPDAYS\",\r\n            \"COUPDAYSNC\",\r\n            \"COUPNCD\",\r\n            \"COUPNUM\",\r\n            \"COUPPCD\",\r\n            \"COVAR\",\r\n            \"CRITBINOM\",\r\n            \"CUBEKPIMEMBER\",\r\n            \"CUBEMEMBER\",\r\n            \"CUBEMEMBERPROPERTY\",\r\n            \"CUBERANKEDMEMBER\",\r\n            \"CUBESET\",\r\n            \"CUBESETCOUNT\",\r\n            \"CUBEVALUE\",\r\n            \"CUMIPMT\",\r\n            \"CUMPRINC\",\r\n            \"DATE\",\r\n            \"DATEVALUE\",\r\n            \"DAVERAGE\",\r\n            \"DAY\",\r\n            \"DAYS360\",\r\n            \"DB\",\r\n            \"DCOUNT\",\r\n            \"DCOUNTA\",\r\n            \"DDB\",\r\n            \"DEC2BIN\",\r\n            \"DEC2HEX\",\r\n            \"DEC2OCT\",\r\n            \"DEGREES\",\r\n            \"DELTA\",\r\n            \"DEVSQ\",\r\n            \"DGET\",\r\n            \"DISC\",\r\n            \"DMAX\",\r\n            \"DMIN\",\r\n            \"DOLLAR\",\r\n            \"DOLLARDE\",\r\n            \"DOLLARFR\",\r\n            \"DPRODUCT\",\r\n            \"DSTDEV\",\r\n            \"DSTDEVP\",\r\n            \"DSUM\",\r\n            \"DURATION\",\r\n            \"DVAR\",\r\n            \"DVARP\",\r\n            \"EDATEEFFECT\",\r\n            \"EOMONTH\",\r\n            \"ERF\",\r\n            \"ERFC\",\r\n            \"ERROR.TYPE\",\r\n            \"EUROCONVERT\",\r\n            \"EVEN\",\r\n            \"EXACT\",\r\n            \"EXP\",\r\n            \"EXPONDIST\",\r\n            \"FACT\",\r\n            \"FACTDOUBLE\",\r\n            \"FALSE\",\r\n            \"FDIST\",\r\n            \"FIND\",\r\n            \"FINV\",\r\n            \"FISHER\",\r\n            \"FISHERINV\",\r\n            \"FIXED\",\r\n            \"FLOOR\",\r\n            \"FORECAST\",\r\n            \"FREQUENCY\",\r\n            \"FTEST\",\r\n            \"FV\",\r\n            \"FVSCHEDULE\",\r\n            \"GAMMADIST\",\r\n            \"GAMMAINV\",\r\n            \"GAMMALN\",\r\n            \"GCD\",\r\n            \"GEOMEAN\",\r\n            \"GESTEP\",\r\n            \"GETPIVOTDATA\",\r\n            \"GROWTH\",\r\n            \"HARMEAN\",\r\n            \"HEX2BIN\",\r\n            \"HEX2DEC\",\r\n            \"HEX2OCT\",\r\n            \"HLOOKUP\",\r\n            \"HOUR\",\r\n            \"HYPERLINK\",\r\n            \"HYPGEOMDIST\",\r\n            //\"IF\",\r\n            \"ISBLANK\",\r\n            \"IFERROR\",\r\n            \"IMABS\",\r\n            \"IMAGINARY\",\r\n            \"IMARGUMENT\",\r\n            \"IMCONJUGATE\",\r\n            \"IMCOS\",\r\n            \"IMDIV\",\r\n            \"IMEXP\",\r\n            \"IMLN\",\r\n            \"IMLOG10\",\r\n            \"IMLOG2\",\r\n            \"IMPOWER\",\r\n            \"IMPRODUCT\",\r\n            \"IMREAL\",\r\n            \"IMSIN\",\r\n            \"IMSQRT\",\r\n            \"IMSUB\",\r\n            \"IMSUM\",\r\n            \"INFO\",\r\n            \"INT\",\r\n            \"INTERCEPT\",\r\n            \"INTRATE\",\r\n            \"IPMT\",\r\n            \"IRR\",\r\n            \"IS\",\r\n            \"ISB\",\r\n            \"ISERROR\",\r\n            \"ISNA\",\r\n            \"ISNUMBER\",\r\n            \"ISPMT\",\r\n            \"JIS\",\r\n            \"KURT\",\r\n            \"LARGE\",\r\n            \"LCM\",\r\n            \"LEFT\",\r\n            \"LEFTB\",\r\n            \"LEN\",\r\n            \"LENB\",\r\n            \"LINEST\",\r\n            \"LN\",\r\n            \"LOG\",\r\n            \"LOG10\",\r\n            \"LOGEST\",\r\n            \"LOGINV\",\r\n            \"LOGNORMDIST\",\r\n            \"LOOKUP\",\r\n            \"LOWER\",\r\n            \"MATCH\",\r\n            \"MAX\",\r\n            \"MAXA\",\r\n            \"MDETERM\",\r\n            \"MDURATION\",\r\n            \"MEDIAN\",\r\n            \"MID\",\r\n            \"MIDB\",\r\n            \"MIN\",\r\n            \"MINA\",\r\n            \"MINUTE\",\r\n            \"MINVERSE\",\r\n            \"MIRR\",\r\n            \"MMULT\",\r\n            \"MOD\",\r\n            \"MODE\",\r\n            \"MONTH\",\r\n            \"MROUND\",\r\n            \"MULTINOMIAL\",\r\n            \"N\",\r\n            \"NA\",\r\n            \"NEGBINOMDIST\",\r\n            \"NETWORKDAYS\",\r\n            \"NOMINAL\",\r\n            \"NORMDIST\",\r\n            \"NORMINV\",\r\n            \"NORMSDIST\",\r\n            \"NORMSINV\",\r\n            \"NOT\",\r\n            \"NOW\",\r\n            \"NPER\",\r\n            \"NPV\",\r\n            \"OCT2BIN\",\r\n            \"OCT2DEC\",\r\n            \"OCT2HEX\",\r\n            \"ODD\",\r\n            \"ODDFPRICE\",\r\n            \"ODDFYIELD\",\r\n            \"ODDLPRICE\",\r\n            \"ODDLYIELD\",\r\n            \"OR\",\r\n            \"PEARSON\",\r\n            \"PERCENTILE\",\r\n            \"PERCENTRANK\",\r\n            \"PERMUT\",\r\n            \"PHONETIC\",\r\n            \"PI\",\r\n            \"PMT\",\r\n            \"POISSON\",\r\n            \"POWER\",\r\n            \"PPMT\",\r\n            \"PRICE\",\r\n            \"PRICEDISC\",\r\n            \"PRICEMAT\",\r\n            \"PROB\",\r\n            \"PRODUCT\",\r\n            \"PROPER\",\r\n            \"PV\",\r\n            \"QUARTILE\",\r\n            \"QUOTIENT\",\r\n            \"RADIANS\",\r\n            \"RAND\",\r\n            \"RANDBETWEEN\",\r\n            \"RANK\",\r\n            \"RATE\",\r\n            \"RECEIVED\",\r\n            \"REGISTER.ID\",\r\n            \"REPLACE\",\r\n            \"REPLACEB\",\r\n            \"REPT\",\r\n            \"RIGHT\",\r\n            \"RIGHTB\",\r\n            \"ROMAN\",\r\n            \"ROUND\",\r\n            \"ROUNDDOWN\",\r\n            \"ROUNDUP\",\r\n            \"ROW\",\r\n            \"ROWS\",\r\n            \"RSQ\",\r\n            \"RTD\",\r\n            \"SEARCH\",\r\n            \"SEARCHB\",\r\n            \"SECOND\",\r\n            \"SERIESSUM\",\r\n            \"SIGN\",\r\n            \"SIN\",\r\n            \"SINH\",\r\n            \"SKEW\",\r\n            \"SLN\",\r\n            \"SLOPE\",\r\n            \"SMALL\",\r\n            \"SQL.REQUEST\",\r\n            \"SQRT\",\r\n            \"SQRTPI\",\r\n            \"STANDARDIZE\",\r\n            \"STDEV\",\r\n            \"STDEVA\",\r\n            \"STDEVP\",\r\n            \"STDEVPA\",\r\n            \"STEYX\",\r\n            \"SUBSTITUTE\",\r\n            \"SUBTOTAL\",\r\n            \"SUM\",\r\n            \"SUMIF\",\r\n            \"SUMIFS\",\r\n            \"SUMPRODUCT\",\r\n            \"SUMSQ\",\r\n            \"SUMX2MY2\",\r\n            \"SUMX2PY2\",\r\n            \"SUMXMY2\",\r\n            \"SYD\",\r\n            \"T\",\r\n            \"TAN\",\r\n            \"TANH\",\r\n            \"TBILLEQ\",\r\n            \"TBILLPRICE\",\r\n            \"TBILLYIELD\",\r\n            \"TDIST\",\r\n            \"TEXT\",\r\n            \"TIME\",\r\n            \"TIMEVALUE\",\r\n            \"TINV\",\r\n            \"TODAY\",\r\n            \"TRANSPOSE\",\r\n            \"TREND\",\r\n            \"TRIM\",\r\n            \"TRIMMEAN\",\r\n            \"TRUE\",\r\n            \"TRUNC\",\r\n            \"TTEST\",\r\n            \"TYPE\",\r\n            \"UPPER\",\r\n            \"VALUE\",\r\n            \"VAR\",\r\n            \"VARA\",\r\n            \"VARP\",\r\n            \"VARPA\",\r\n            \"VDB\",\r\n            \"VLOOKUP\",\r\n            \"WEEKDAY\",\r\n            \"WEEKNUM\",\r\n            \"WEIBULL\",\r\n            \"WORKDAY\",\r\n            \"XIRR\",\r\n            \"XNPV\",\r\n            \"YEAR\",\r\n            \"YEARFRAC\",\r\n            \"YIELD\",\r\n            \"YIELDDISC\",\r\n            \"YIELDMAT\",\r\n            \"ZTEST\"\r\n        };\r\n        #endregion\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultipleSheets = \"MultipleSheets\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        //public const string ReferenceFunction = \"ReferenceFunction\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenDDE = \"DDEToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenFileSheetQuoted = \"FileSheetQuotedToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenNamedRange = \"NamedRangeToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v114/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Data;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v114\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser p\r\n        {\r\n            get { return _p ?? (_p = new Parser(new ExcelFormulaGrammar())); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = p.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether this tree contains any nodes of a type\r\n        /// </summary>\r\n        public static bool Contains(this ParseTreeNode root, string type)\r\n        {\r\n            return root.AllNodes(type).Any();\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDF's, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count() == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count() == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return String.Format(\"{0}{1}\", input.ChildNodes[0].Print(), GetFunction(input.ChildNodes[1]));\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", \"input\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, String functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.ArrayFormula:\r\n                    return SkipToRelevant(input.ChildNodes[1]);\r\n                case GrammarNames.Formula:\r\n                case GrammarNames.Reference:\r\n                    // This also catches parentheses\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return SkipToRelevant(input.ChildNodes[0]);\r\n                    }\r\n                    goto default;\r\n                default:\r\n                    return input;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed childs\r\n            var childs = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<String> childsL;\r\n\r\n            // Switch on nonterminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? String.Format(\"({0})\", childs.First()) : childs.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childsL = childs.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return String.Join(\"\", childsL) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0} {1} {2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }else if (input.IsBinaryReferenceOperation())\r\n                        {\r\n                            format = \"{0}{1}{2}\";\r\n                        }\r\n                        \r\n                        return String.Format(format, childsL[0], childsL[1], childsL[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return String.Format(\"({0})\", String.Join(\",\", childsL));\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return String.Join(\"\", childsL);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    /*if (IsParentheses(input) || IsUnion(input))\r\n                    {\r\n                        return String.Format(\"({0})\", childs.First());\r\n                    }\r\n\r\n                    childsL = childs.ToList();\r\n                    if (IsIntersection(input))\r\n                    {\r\n                        return String.Format(\"{0} {1}\", childsL[0], childsL[2]);\r\n                    }\r\n\r\n                    if (IsBinaryOperation(input))\r\n                    {\r\n                        return String.Format(\"{0}{1}{2}\", childsL[0], childsL[1], childsL[2]);\r\n                    }*/\r\n                    if (IsParentheses(input))\r\n                    {\r\n                        return String.Format(\"({0})\", childs.First());\r\n                    }\r\n\r\n                    return String.Join(\"\", childs);\r\n\r\n                case GrammarNames.File:\r\n                    return String.Format(\"[{0}]\", childs.First());\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = String.Join(\"\", childs);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + childs.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.DynamicDataExchange:\r\n                    childsL = childs.ToList();\r\n                    return String.Format(\"{0}!{1}\", childsL[0], childsL[1]);\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.FormulaWithEq:\r\n                    return String.Join(\"\", childs);\r\n\r\n                // Terms for which we print the childs comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return String.Join(\",\", childs);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return String.Join(\";\", childs);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return String.Format(\"{{{0}}}\", childs.First());\r\n\r\n\r\n                default:\r\n                    // If it is not defined above and the number of childs is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return childs.First();\r\n                    }\r\n                    throw new ArgumentException(String.Format(\"Could not print node of type '{0}'.\\nThis probably means the excel grammar was modified without the print function being modified\", input.Term.Name));\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v120/ExcelFormulaGrammar.cs",
    "content": "﻿using System;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v120\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.2.0\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and it's default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, @\"(_xll\\.)?[\\w\\\\.]+\\(\")\r\n        { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate trees\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?[A-Z]{1,4}:[$]?[A-Z]{1,4}\");\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?[A-Z]{1,4}[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private const string NamedRangeRegex = @\"[A-Za-z\\\\_][\\w\\.]*\";\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NamedRangeRegex)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 celltokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, \"(TRUE|FALSE|\" + CellTokenRegex + \")\" + NamedRangeRegex)\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')+\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"(({normalSheetName}:{normalSheetName})|('{quotedSheetName}:{quotedSheetName}'))!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameRegex = @\"\\[[^<>:\"\"/\\|?*\\[\\]]+\\]\";\r\n        public Terminal EnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenEnclosedInBrackets, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string filePathRegex = @\"(?:[a-zA-Z]\\:|\\\\\\\\[\\w\\.]+\\\\[\\w.$]+)\\\\(?:[\\w]+\\\\)*\";\r\n        public Terminal FilePathWindowsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePathWindows, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most nonterminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use nonterminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        //public NonTerminal ReferenceFunction{ get; } = new NonTerminal(GrammarNames.ReferenceFunction);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructureReference { get; } = new NonTerminal(GrammarNames.StructureReference);\r\n        public NonTerminal StructureReferenceColumnOrKeyword { get; } = new NonTerminal(GrammarNames.StructureReferenceColumnOrKeyword);\r\n        public NonTerminal StructureReferenceExpression { get; } = new NonTerminal(GrammarNames.StructureReferenceExpression);\r\n        //public NonTerminal StructureReferenceKeyword { get; } = new NonTerminal(GrammarNames.StructureReferenceKeyword);\r\n        public NonTerminal StructureReferenceTable { get; } = new NonTerminal(GrammarNames.StructureReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            //exclamationMark.SetFlag(TermFlags.IsDelimiter);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                //| ConditionalRefFunctionName + Arguments + CloseParen\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructureReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = FileToken\r\n\t\t\t\t| EnclosedInBracketsToken\r\n\t\t\t\t| FilePathWindowsToken + EnclosedInBracketsToken\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n            Prefix.Rule =\r\n                SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | File + MultipleSheetsToken\r\n                ;\r\n\r\n            StructureReferenceColumnOrKeyword.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | EnclosedInBracketsToken;\r\n\r\n            //StructureReferenceKeyword.Rule = EnclosedInBracketsToken;\r\n\r\n            StructureReferenceTable.Rule = NameToken;\r\n\r\n            StructureReferenceExpression.Rule =\r\n                  StructureReferenceColumnOrKeyword\r\n                | StructureReferenceColumnOrKeyword + colon + StructureReferenceColumnOrKeyword\r\n                | StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword\r\n                | StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword + colon + StructureReferenceColumnOrKeyword\r\n                | StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword\r\n                | StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword + comma + StructureReferenceColumnOrKeyword + colon + StructureReferenceColumnOrKeyword\r\n                ;\r\n\r\n            StructureReference.Rule =\r\n                  StructureReferenceColumnOrKeyword\r\n                | OpenSquareParen + StructureReferenceExpression + CloseSquareParen\r\n                | StructureReferenceTable + StructureReferenceColumnOrKeyword\r\n                | StructureReferenceTable + OpenSquareParen + StructureReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick celltoken because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => Properties.Resources.ExcelBuiltinFunctionList_v120.Split(new [] {'\\n', '\\r'}, StringSplitOptions.RemoveEmptyEntries);\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructureReference = \"StructureReference\";\r\n        public const string StructureReferenceColumnOrKeyword = \"StructureReferenceColumnOrKeyword\";\r\n        public const string StructureReferenceExpression = \"StructureReferenceExpression\";\r\n        public const string StructureReferenceTable = \"StructureReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePathWindows = \"FilePathWindowsToken\";\r\n        public const string TokenEnclosedInBrackets = \"EnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v120/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v120\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser p => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = p.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDF's, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count() == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count() == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" nonterminal\r\n                    .ChildNodes    // \"Argument\" nonterminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument nonterminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix nonterminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix)\r\n        {\r\n            if(prefix.Type() != GrammarNames.Prefix) throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            int cur = 0;\r\n\r\n            // Check for quotes\r\n            bool quoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (quoted) cur++;\r\n            \r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                var file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    int n;\r\n                    int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out n);\r\n                    fileNumber = n;\r\n                    if (fileNumber == 0) fileNumber = null;\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var icur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[icur].Is(GrammarNames.TokenFilePathWindows))\r\n                    {\r\n                        filePath = file.ChildNodes[icur].Print();\r\n                        icur++;\r\n                    }\r\n                    fileName = Substr(file.ChildNodes[icur].Print(), 1, 1);\r\n                }\r\n\r\n                cur++;\r\n            }\r\n            \r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            // Put it all into the convencience class\r\n            return new PrefixInfo(\r\n                sheetName,\r\n                fileNumber,\r\n                fileName,\r\n                filePath,\r\n                multipleSheets,\r\n                quoted\r\n                );\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length-removeLast-removeFirst);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                    case GrammarNames.Reference:\r\n                        // This also catches parentheses\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed childs\r\n            var childs = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childsL;\r\n\r\n            string ret;\r\n            // Switch on nonterminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({childs.First()})\" : childs.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childsL = childs.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childsL) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0} {1} {2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }else if (input.IsBinaryReferenceOperation())\r\n                        {\r\n                            format = \"{0}{1}{2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childsL[0], childsL[1], childsL[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childsL)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childsL);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    if (IsParentheses(input))\r\n                    {\r\n                        return $\"({childs.First()})\";\r\n                    }\r\n\r\n                    return string.Join(\"\", childs);\r\n\r\n                case GrammarNames.Prefix:\r\n                    ret = string.Join(\"\", childs);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + childs.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructureReference:\r\n                    ret = \"\";\r\n                    var hastable = input.ChildNodes.Count == 2;\r\n                    var contentsNode = hastable ? 1 : 0;\r\n                    childsL = childs.ToList();\r\n                    if (hastable) ret += childsL[0];\r\n\r\n                    if (input.ChildNodes[contentsNode].Is(GrammarNames.StructureReferenceColumnOrKeyword))\r\n                    {\r\n                        ret += childsL[contentsNode];\r\n                    } else\r\n                    {\r\n                        ret += $\"[{childsL[contentsNode]}]\";\r\n                    }\r\n\r\n                    return ret;\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.StructureReferenceExpression:\r\n                    return string.Join(\"\", childs);\r\n\r\n                // Terms for which we print the childs comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", childs);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", childs);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{childs.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of childs is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return childs.First();\r\n                    }\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\\nThis probably means the excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v120/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v120\r\n{\r\n    public class PrefixInfo\r\n    {\r\n        \r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? fileNumber;\r\n        public int FileNumber => fileNumber.Value;\r\n        public bool HasFileNumber => fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            this.fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            string res = \"\";\r\n            if (IsQuoted) res += \"'\";\r\n            if (HasFilePath) res += FilePath;\r\n            if (HasFileNumber) res += $\"[{FileNumber}]\";\r\n            if (HasFileName) res += $\"[{FileName}]\";\r\n            if (HasSheet) res += Sheet;\r\n            if (HasMultipleSheets) res += MultipleSheets;\r\n            if (IsQuoted) res += \"'\";\r\n            res += \"!\";\r\n            return res;\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v139/ExcelFormulaGrammar.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Reflection;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v139\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.3.9\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, $@\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)?[\\w{SpecialUdfChars}\\\\.]+\\(\")\r\n        { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        \r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?]\";\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameForbiddenCharacter = @\"<>:\"\"/\\|?*\";\r\n        private const string fileNameRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal EnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenEnclosedInBrackets, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string filePathRegex = @\"(?:[a-zA-Z]\\:|\\\\\\\\[\\w\\.]+\\\\[\\w.$]+)\\\\(([^\" + fileNameForbiddenCharacter + @\"\\\\]| )+\\\\)*\";\r\n        public Terminal FilePathWindowsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePathWindows, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        //public NonTerminal ReferenceFunction{ get; } = new NonTerminal(GrammarNames.ReferenceFunction);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        //public NonTerminal StructuredReferenceKeyword { get; } = new NonTerminal(GrammarNames.StructuredReferenceKeyword);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            //exclamationMark.SetFlag(TermFlags.IsDelimiter);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = FileToken\r\n\t\t\t\t| EnclosedInBracketsToken\r\n\t\t\t\t| FilePathWindowsToken + EnclosedInBracketsToken\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n            Prefix.Rule =\r\n                SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | EnclosedInBracketsToken;\r\n\r\n            //StructuredReferenceKeyword.Rule = EnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v139;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePathWindows = \"FilePathWindowsToken\";\r\n        public const string TokenEnclosedInBrackets = \"EnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v139/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v139\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0} {1} {2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }else if (input.IsBinaryReferenceOperation())\r\n                        {\r\n                            format = \"{0}{1}{2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v139/ParserReference.cs",
    "content": "﻿using Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v139\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 100;\r\n        public const int MaxRangeWidth = 100;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n                    else\r\n                    {\r\n                        FileName = null;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    if (FileName != null)\r\n                    {\r\n                        MinLocation = \"A1\";\r\n                    }\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = \"A\" + horizontalLimits[0];\r\n                    MaxLocation = ConvertColumnToStr(MaxRangeWidth - 1) + horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0] + \"1\";\r\n                    MaxLocation = verticalLimits[1] + MaxRangeHeight;\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    MinLocation = \"A1\";\r\n                    break;\r\n                default:\r\n                    // UDFs\r\n                    MinLocation = \"A1\";\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v139/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v139\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePathWindows))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v141/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v141\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.4.1\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        \r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?]\";\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameForbiddenCharacter = @\"<>:\"\"/\\|?*\";\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal EnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenEnclosedInBrackets, fileNameInBracketsRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.]+\\..{1,4}\";\r\n        public Terminal FileNameWindowsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameWindows, fileNameRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string filePathRegex = @\"(?:[a-zA-Z]\\:|\\\\\\\\[\\w\\.]+\\\\[\\w.$]+)\\\\(([^\" + fileNameForbiddenCharacter + @\"\\\\]| )+\\\\)*\";\r\n        public Terminal FilePathWindowsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePathWindows, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        //public NonTerminal ReferenceFunction{ get; } = new NonTerminal(GrammarNames.ReferenceFunction);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        //public NonTerminal StructuredReferenceKeyword { get; } = new NonTerminal(GrammarNames.StructuredReferenceKeyword);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            //exclamationMark.SetFlag(TermFlags.IsDelimiter);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = FileToken\r\n                | EnclosedInBracketsToken\r\n                | FilePathWindowsToken + EnclosedInBracketsToken\r\n                | FilePathWindowsToken + FileNameWindowsToken\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n            Prefix.Rule =\r\n                SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | EnclosedInBracketsToken;\r\n\r\n            //StructuredReferenceKeyword.Rule = EnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v141;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePathWindows = \"FilePathWindowsToken\";\r\n        public const string TokenFileNameWindows = \"FileNameWindowsToken\";\r\n        public const string TokenEnclosedInBrackets = \"EnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v141/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v141\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0} {1} {2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }else if (input.IsBinaryReferenceOperation())\r\n                        {\r\n                            format = \"{0}{1}{2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v141/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v141\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 100;\r\n        public const int MaxRangeWidth = 100;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n                    else\r\n                    {\r\n                        FileName = null;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceTable)?.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = \"A\" + horizontalLimits[0];\r\n                    MaxLocation = ConvertColumnToStr(MaxRangeWidth - 1) + horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0] + \"1\";\r\n                    MaxLocation = verticalLimits[1] + MaxRangeHeight;\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v141/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v141\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePathWindows))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v142/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v142\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.4.2\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string fileNameForbiddenCharacter = @\"<>:\"\"/\\|?*\";\r\n        private const string filePathRegex = @\"(?:[a-zA-Z]:|https?:\\\\|\\\\?\\\\?[\\w\\.-]+\\\\[\\w.$]+)\\\\(([^\" + fileNameForbiddenCharacter + @\"\\\\]| )+\\\\)*\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        //public NonTerminal ReferenceFunction{ get; } = new NonTerminal(GrammarNames.ReferenceFunction);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        //public NonTerminal StructuredReferenceKeyword { get; } = new NonTerminal(GrammarNames.StructuredReferenceKeyword);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            //exclamationMark.SetFlag(TermFlags.IsDelimiter);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n            Prefix.Rule =\r\n                SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | FileNameEnclosedInBracketsToken;\r\n\r\n            //StructuredReferenceKeyword.Rule = EnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n\r\n            //RegisterOperators(Precedence.ParameterSeparator, comma);\r\n\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v142;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v142/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v142\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0} {1} {2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }else if (input.IsBinaryReferenceOperation())\r\n                        {\r\n                            format = \"{0}{1}{2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v142/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v142\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 100;\r\n        public const int MaxRangeWidth = 100;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceTable)?.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = \"A\" + horizontalLimits[0];\r\n                    MaxLocation = ConvertColumnToStr(MaxRangeWidth - 1) + horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0] + \"1\";\r\n                    MaxLocation = verticalLimits[1] + MaxRangeHeight;\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v142/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v142\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v150/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v150\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.5.0\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\.-]+\\\\[\\w.$]+)\\\\(([^<>:\"\"/\\|?*\\\\]| )+\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\\\+&%\\$#_]*)?\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        //public NonTerminal ReferenceFunction{ get; } = new NonTerminal(GrammarNames.ReferenceFunction);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        //public NonTerminal StructuredReferenceKeyword { get; } = new NonTerminal(GrammarNames.StructuredReferenceKeyword);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            //exclamationMark.SetFlag(TermFlags.IsDelimiter);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule = FormulaWithEq\r\n                         | Formula\r\n                         | ArrayFormula\r\n                         ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                Reference\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n            //MarkTransient(Formula);\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = Number\r\n                            | Text\r\n                            | Bool\r\n                            | Error\r\n                            ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n            //Arguments.Rule = Argument | Argument + comma + Arguments;\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n            //MarkTransient(Argument);\r\n\r\n            PrefixOp.Rule =\r\n                ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            //PostfixOp.Rule = ImplyPrecedenceHere(Precedence.UnaryPostFix) + percentop;\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule = ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash;\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule = FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n            Prefix.Rule =\r\n                SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | FileNameEnclosedInBracketsToken;\r\n\r\n            //StructuredReferenceKeyword.Rule = EnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, plusop, minop, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v150;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v150/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v150\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v150/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v150\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceTable)?.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = (horizontalLimits[0].StartsWith(\"$\") ? \"$\" : \"\") + \"A\" + horizontalLimits[0];\r\n                    MaxLocation = (horizontalLimits[1].StartsWith(\"$\") ? \"$\" : \"\") + ConvertColumnToStr(MaxRangeWidth - 1) + horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0] + (verticalLimits[0].StartsWith(\"$\") ? \"$\" : \"\") + \"1\";\r\n                    MaxLocation = verticalLimits[1] + (verticalLimits[1].StartsWith(\"$\") ? \"$\" : \"\") + MaxRangeHeight;\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v150/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v150\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v151/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v151\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.5.1\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n            { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\.-]+\\\\[\\w.$]+)\\\\(([^<>:\"\"/\\|?*\\\\]| )+\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\\\+&%\\$#_]*)?\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex);\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = \r\n                  Number \r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | FileNameEnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v151;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v151/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v151\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v151/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v151\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceTable)?.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v151/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v151\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v152/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v152\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.5.2\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-Z]{1,2}|[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D])\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n\r\n        //public Terminal SRTableNameToken = new RegexBasedTerminal(GrammarNames.TokenSRTableName, @\"[\\w\\\\.]+\\[\")\r\n        //{Priority = 0};\r\n\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, @\"[\\w\\\\.]+\")\r\n        { Priority = TerminalPriority.SRColumn };\r\n\r\n        //public Terminal SREnclosedColumnToken = new RegexBasedTerminal(GrammarNames.TokenSREnclosedColumn, @\"\\[( )*[\\w+\\\\.,:#'\"\"{}$^&*+=-></]+( )*\\]\")\r\n        //{Priority = 0};\r\n\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\]\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ ]+)\\\\(([^<>:\\\"\"/\\|?*\\\\]| )+\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceElement { get; } = new NonTerminal(GrammarNames.StructuredReferenceElement);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceTable { get; } = new NonTerminal(GrammarNames.StructuredReferenceTable);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenSquareParen, CloseSquareParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = \r\n                  Number \r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceElement.Rule =\r\n                  OpenSquareParen + SRColumnToken + CloseSquareParen\r\n                | OpenSquareParen + NameToken + CloseSquareParen\r\n                | FileNameEnclosedInBracketsToken;\r\n\r\n            StructuredReferenceTable.Rule = NameToken;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceElement\r\n                | at + StructuredReferenceElement\r\n                | StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | at + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement\r\n                | StructuredReferenceElement + comma + StructuredReferenceElement + comma + StructuredReferenceElement + colon + StructuredReferenceElement\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  StructuredReferenceElement\r\n                | OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceTable + StructuredReferenceElement\r\n                | StructuredReferenceTable + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceTable + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int SRColumn = -900;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v152;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceElement = \"StructuredReferenceElement\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceTable = \"StructuredReferenceTable\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRTableName = \"SRTableName\";\r\n        public const string TokenSRKeyword = \"SRKeyword\";\r\n        public const string TokenSRColumn = \"SRColumn\";\r\n        public const string TokenSREnclosedColumn = \"SREnclosedColumn\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v152/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v152\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                case GrammarNames.StructuredReference:\r\n                    var sb = new StringBuilder();\r\n                    var hashtable = input.ChildNodes.Count >= 1 && input.ChildNodes[0].Is(GrammarNames.StructuredReferenceTable);\r\n                    var contentsNode = hashtable ? 1 : 0;\r\n                    childrenList = children.ToList();\r\n                    if (hashtable)\r\n                    {\r\n                        sb.Append(childrenList[0]);\r\n                    }\r\n\r\n                    if (hashtable && input.ChildNodes.Count == 1)\r\n                    {\r\n                        // Full table reference\r\n                        sb.Append(\"[]\");\r\n                    }\r\n                    else if (input.ChildNodes[contentsNode].Is(GrammarNames.StructuredReferenceElement))\r\n                    {\r\n                        sb.Append(childrenList[contentsNode]);\r\n                    }\r\n                    else\r\n                    {\r\n                        sb.Append($\"[{childrenList[contentsNode]}]\");\r\n                    }\r\n\r\n                    return sb.ToString();\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v152/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v152\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceTable)?.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v152/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v152\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v160/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v160\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.6.0\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex)\r\n            { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = \r\n                  Number \r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n            \r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n            \r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v160;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v160/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v160\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() &&\r\n                       input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v160/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v160\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null,\r\n            string[] tableSpecifiers = null, string[] tableColumns = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n            TableColumns = tableColumns;\r\n            TableSpecifiers = tableSpecifiers;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v160/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v160\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v161/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v161\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.6.1\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] {TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt}\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) {Priority = TerminalPriority.UDF};\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new RegexBasedTerminal(GrammarNames.ExcelFunction,  \"(\" + string.Join(\"|\", excelFunctionList) + \")\\\\(\")\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\");\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\")\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n        \r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex + NameValidCharacterRegex + \"+\")\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex)\r\n            { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex)\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n        \r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n        \r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar() : base(false)\r\n        {\r\n            \r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n            \r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule = \r\n                  Number \r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n                \r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n        \r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n            \r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n            \r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v161;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v161/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v161\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        private static bool IsTableReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v161/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v161\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null,\r\n            string[] tableSpecifiers = null, string[] tableColumns = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n            TableColumns = tableColumns;\r\n            TableSpecifiers = tableSpecifiers;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v161/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v161\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v162/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v162\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.6.2\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?[1-9][0-9]*:[$]?[1-9][0-9]*\", RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?[1-9][0-9]*\";\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NameInvalidWordsRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NameInvalidWordsRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v162;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v162/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v162\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        private static bool IsTableReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v162/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v162\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public const int MaxRangeHeight = 1048576;\r\n        public const int MaxRangeWidth = 16384;\r\n\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; private set; }\r\n        public string MinLocation { get; set; } //Location as appearing in the formula, eg $A$1\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n\r\n        public ParserReference(ReferenceType referenceType, string locationString = null, string worksheet = null, string lastWorksheet = null,\r\n            string filePath = null, string fileName = null, string name = null, string minLocation = null, string maxLocation = null,\r\n            string[] tableSpecifiers = null, string[] tableColumns = null)\r\n        {\r\n            ReferenceType = referenceType;\r\n            LocationString = locationString;\r\n            Worksheet = worksheet;\r\n            LastWorksheet = lastWorksheet;\r\n            FilePath = filePath;\r\n            FileName = fileName;\r\n            Name = name;\r\n            MinLocation = minLocation;\r\n            MaxLocation = maxLocation != null ? maxLocation : minLocation;\r\n            TableColumns = tableColumns;\r\n            TableSpecifiers = tableSpecifiers;\r\n        }\r\n\r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Converts the column number to an Excel column string representation.\r\n        /// </summary>\r\n        /// <param name=\"columnNumber\">The zero-based column number.</param>\r\n        private  string ConvertColumnToStr(int columnNumber)\r\n        {\r\n            var sb = new System.Text.StringBuilder();\r\n            while (columnNumber >= 0)\r\n            {\r\n                sb.Insert(0, (char)(65 + columnNumber % 26));\r\n                columnNumber = columnNumber / 26 - 1;\r\n            }\r\n            return sb.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return ReferenceType == ReferenceType.Cell ? MinLocation.ToString() : string.Format(\"{0}:{1}\", MinLocation, MaxLocation);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v162/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v162\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v162/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v162\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v163/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v163\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.6.3\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?=[^\\[\\]]*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v163;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v163/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v163\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        private static bool IsTableReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v163/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v163\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v163/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v163\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v163/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v163\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v170/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v170\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.0\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v170;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v170/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v170\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).ToArray();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).ToArray();\r\n                        if (IsCellReference(rangeStart) && IsCellReference(rangeEnd))\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.MaxLocation = rangeEnd.First().MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else if (IsTableReference(rangeStart) && IsTableReference(rangeEnd) && rangeStart.First().Name == rangeEnd.First().Name && rangeStart.First().TableColumns.Length == 1 && rangeEnd.First().TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart.First();\r\n                            range.TableColumns = rangeStart.First().TableColumns.Concat(rangeEnd.First().TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.First().TableSpecifiers.SequenceEqual(rangeEnd.First().TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                        }\r\n                        else\r\n                        {\r\n                            list.AddRange(rangeStart);\r\n                            list.AddRange(rangeEnd);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    }\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        private static bool IsCellReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Cell;\r\n        }\r\n\r\n        private static bool IsTableReference(IList<ParserReference> references)\r\n        {\r\n            return references.Count == 1 && references.First().ReferenceType == ReferenceType.Table;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v170/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v170\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v170/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v170\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v170/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v170\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v171/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v171\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.1\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v171;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v171/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v171\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0].SkipToRelevant()).First();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2].SkipToRelevant()).First();\r\n                        if (rangeStart.ReferenceType == ReferenceType.Cell && rangeEnd.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart.ReferenceType == ReferenceType.Table && rangeEnd.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v171/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v171\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.ValueString.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v171/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v171\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v171/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v171\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v172/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v172\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.2\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.None)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*[/]([a-zA-Z0-9\\-\\.\\?\\,\\'+&%\\$#_ ()]*[/])*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v172;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v172/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v172\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.RefError:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0]).FirstOrDefault();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2]).FirstOrDefault();\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Cell && rangeEnd?.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Table && rangeEnd?.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v172/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v172\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath;\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.ValueString.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v172/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v172\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v172/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v172\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v173/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v173\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.3\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.AllowStartEndDot)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private const string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\..{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"http(s?)\\://([\\p{L}\\p{N}-_]+\\.[\\p{L}\\p{N}-_]*)+(:[0-9]+)?/([\\p{L}\\p{N}\\-\\.\\?\\,\\'+&%\\$#_ ()]*/)*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v173;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v173/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v173\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.RefError:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0]).FirstOrDefault();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2]).FirstOrDefault();\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Cell && rangeEnd?.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Table && rangeEnd?.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v173/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v173\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath.Replace(\"''\", \"'\");\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.ValueString.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v173/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v173\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v173/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v173\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v174/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v174\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.4\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.AllowStartEndDot)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private static readonly string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\" + $\"(?={normalSheetName}|{quotedSheetName}'|!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\.[a-zA-z]{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @~]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"https?\\:(//|\\\\\\\\)[\\p{L}\\p{N}\\-_.]+(:[0-9]+)?(/|\\\\)([\\p{L}\\p{N}\\-_.?,'+&%\\$# ()~]*(/|\\\\))*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                | exclamationMark + Reference\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, exclamationMark);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v174;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v174/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v174\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            var quotedSheetNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted));\r\n\r\n            foreach (ParseTreeNode quotedSheetNode in quotedSheetNodes)\r\n            {\r\n                PrefixInfo.FixQuotedSheetNodeForWhitespace(quotedSheetNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.RefError:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0]).FirstOrDefault();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2]).FirstOrDefault();\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Cell && rangeEnd?.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Table && rangeEnd?.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v174/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v174\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath.Replace(\"''\", \"'\");\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.ValueString;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.ValueString;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.ValueString;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.ValueString, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.ValueString.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.ValueString.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v174/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v174\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check if multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixQuotedSheetNodeForWhitespace(ParseTreeNode quotedSheetNode, string sourceText)\r\n        {\r\n            var newPosition = GetSheetNamePositionFromSourceText(quotedSheetNode, sourceText);\r\n            SourceLocation currentLocation = quotedSheetNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            quotedSheetNode.Span = new SourceSpan(newLocation, quotedSheetNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to quotedSheetNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(quotedSheetNode.Token, sourceText.Substring(newPosition, quotedSheetNode.Span.Length));\r\n        }\r\n\r\n        private static int GetSheetNamePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v174/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v174\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v175/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v175\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.5\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.AllowStartEndDot)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private static readonly string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\" + $\"(?={normalSheetName}!|{quotedSheetName}'!|{multiSheetRegex}|{multiSheetQuotedRegex}|!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\.[a-zA-z]{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @~]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"https?\\:(//|\\\\\\\\)[\\p{L}\\p{N}\\-_.]+(:[0-9]+)?(/|\\\\)([\\p{L}\\p{N}\\-_.?,'+&%\\$# ()~]*(/|\\\\))*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                | exclamationMark + Reference\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, exclamationMark);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var resource = Properties.Resources.ExcelBuiltinFunctionList_v175;\r\n            using (var sr = new StringReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v175/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v175\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            //Quoted sheets and SR Columns require the preceding whitespaces skipped by Irony as they are needed for unique sheet and column names\r\n            var precedingWhiteSpaceNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted) | node.Is(GrammarNames.TokenSRColumn));\r\n\r\n            foreach (ParseTreeNode precedingWhiteSpaceNode in precedingWhiteSpaceNodes)\r\n            {\r\n                PrefixInfo.FixPrecedingWhiteSpaces(precedingWhiteSpaceNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.RefError:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0]).FirstOrDefault();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2]).FirstOrDefault();\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Cell && rangeEnd?.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Table && rangeEnd?.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v175/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v175\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath.Replace(\"''\", \"'\");\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.Text;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.Text;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.Text;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.Text, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.Text, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.Text.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.Text.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.Text.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v175/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v175\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check for multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for multiple sheets (quoted)\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheetsQuoted))\r\n            {\r\n                // remove quote and !\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixPrecedingWhiteSpaces(ParseTreeNode parseTreeNode, string sourceText)\r\n        {\r\n            var newPosition = GetNodePositionFromSourceText(parseTreeNode, sourceText);\r\n            SourceLocation currentLocation = parseTreeNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            parseTreeNode.Span = new SourceSpan(newLocation, parseTreeNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to parseTreeNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(parseTreeNode.Token, sourceText.Substring(newPosition, parseTreeNode.Span.Length));\r\n        }\r\n\r\n        private static int GetNodePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/XLParserVersions/v175/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser.Web.XLParserVersions.v175\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/XLParser.Web/d3vizsvg.js",
    "content": "﻿var default_formula = \"SUM(B5,2)\";\nvar latestVersion = \"139\";\n\nvar margin = { top: 20, right: 20, bottom: 20, left: 20 };\nvar width = Math.max(document.getElementById(\"d3viz\").clientWidth - 10, 500) - margin.right - margin.left;\nvar height = 600 - margin.top - margin.bottom;\n\nvar i;\nvar tree;\nvar root;\n\nvar diagonal = d3.svg.diagonal()\n    .projection(function(d) { return [d.x, d.y]; });\n\nvar vis;\n\n// Replace the existing parse tree image with a new one\nfunction newTree(formula, version) {\n    var encodedFormula = encodeURIComponent(formula);\n    var url = \"Parse.json?version=\" + version + \"&formula=\" + encodedFormula;\n\n    d3.select(\"#d3viz\").html(\"\");\n\n    // Request the JSON parse tree\n    d3.json(url,\n        function(request, json) {\n            //console.log(json)\n            //console.log(request)\n            if (json !== undefined) {\n\n                // Calculate the required width and height for the image\n                var tw = treeWidth(json);\n                var th = treeHeight(json);\n                //console.log(\"W: \" + tw + \" H: \" + th);\n                //console.log(json);\n                var w = Math.max(tw * 75, width);\n                var h = Math.max(10 + th * 60, height);\n                var imgW = w + margin.right + margin.left;\n                var imgH = h + margin.top + margin.bottom;\n\n                // create a tree and its container\n                tree = d3.layout.tree().size([w, h]);\n                i = 0;\n\n                var svg = d3.select(\"#d3viz\")\n                    .append(\"svg\")\n                    .attr(\"id\", \"dynamicSVGParsetree\")\n                    .attr(\"version\", 1.1)\n                    .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n                    .attr(\"width\", imgW)\n                    .attr(\"height\", imgH);\n\n                svg.append(\"style\").attr(\"type\", \"text/css\").text(svgCss);\n\n                vis = svg.append(\"g\").attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n                // Create the tree nodes\n                root = json;\n                update(root);\n\n                // Create images that can be downloaded\n                generateImageData(imgW, imgH);\n\n            } else {\n\n                json = JSON.parse(request.response);\n                var msg = \"<code>\" + json.error;\n                if (json.message !== undefined) {\n                    msg += \" at line \" + json.message.line + \" column \" + json.message.column;\n                }\n                msg += \"</code><br /><br />\";\n                // Convert to entities to prevent XSS\n                msg += \"Input:<br /><textarea cols=\\\"50\\\" rows=\\\"1\\\" id=\\\"errorformulainput\\\" disabled>\" +\n                    json.formula.replace(/./gm, function(s) { return \"&#\" + s.charCodeAt(0) + \";\"; }) +\n                    \"</textarea><br />\";\n                if (json.message !== undefined) {\n                    msg += \"<textarea disabled id=\\\"errormessages\\\">\" +\n                        json.message.level +\n                        \" at position \" +\n                        json.message.line +\n                        \":\" +\n                        json.message.column +\n                        \"\\n\" +\n                        json.message.msg +\n                        \"</textarea>\";\n                }\n                d3.select(\"#d3viz\").html(msg);\n\n            }\n        });\n\n}\n\n// Set the parse tree image to the default formula and enter it in the formula input field\nnewTree(default_formula, latestVersion);\nd3.select(\"#formulainput\").text(default_formula);\n\n// Create nodes in the parse tree\nfunction update(source) {\n\n    // Compute the new tree layout.\n    var nodes = tree.nodes(root).reverse();\n    var links = tree.links(nodes);\n\n    // Normalize for fixed-depth.\n    nodes.forEach(function(d) {\n        d.y = 10 + d.depth * 60;\n    });\n\n    // Update the nodes…\n    var node = vis.selectAll(\"g.node\")\n        .data(nodes, function(d) { return d.id || (d.id = ++i); });\n\n    // Enter any new nodes at the parent's previous position.\n    var nodeEnter = node.enter().append(\"g\")\n        .attr(\"class\", \"node\")\n        .attr(\"transform\",\n            function(d) {\n                return \"translate(\" + d.x + \",\" + d.y + \")\";\n            });\n\n    nodeEnter.append(\"circle\").attr(\"r\", 8).style(\"fill\", \"#fff\");\n\n    nodeEnter.append(\"text\")\n        .attr(\"y\",\n            function(d) {\n                // Put nodes without children (terminals) below, nodes with (non-terminals) above\n                return d.children || d._children ? -20 : 20;\n            })\n        .attr(\"dy\", \".31em\")\n        .attr(\"text-anchor\", \"middle\")\n        .text(function(d) { return d.name.replace(\"\\n\", \"\\\\n\"); })\n        .style(\"fill-opacity\", 1);\n\n    // Declare the links...\n    var link = vis.selectAll(\"path.link\")\n        .data(links, function(d) { return d.target.id; });\n\n    // Enter the links\n    link.enter().insert(\"path\", \"g\")\n        .attr(\"class\", \"link\")\n        .attr(\"d\", diagonal);\n    // Transition nodes to their new position.\n}\n\n// Get the approximate width of the tree, for the purpose of the image\nfunction treeWidth(node) {\n    if (node.children == undefined) return 1;\n    var sum = 0;\n    // Add the width of all children\n    for (var i = 0; i < node.children.length; i++) {\n        sum += treeWidth(node.children[i]);\n    }\n    return sum;\n}\n\n// Get the maximum depth of the tree\nfunction treeHeight(node) {\n    if (node.children == undefined) return 1;\n    var max = 0;\n    for (var i = 0; i < node.children.length; i++) {\n        max = Math.max(max, treeHeight(node.children[i]));\n    }\n    return max + 1;\n}\n\n// Create a downloadable SVG and PNG image from the dynamic SVG parse tree image\n// From: http://techslides.com/save-svg-as-an-image\nfunction generateImageData(imgw, imgh) {\n    \n    var html = d3.select(\"#dynamicSVGParsetree\")\n        .node().parentNode.innerHTML;\n\n    //console.log(html);\n    // Encode the SVG data as base64 and put it in a data: link\n    var svgSrc = \"data:image/svg+xml;base64,\" + btoa(html);\n    var imgDataSvg = $(\"#imgdatasvg\");\n    imgDataSvg.attr(\"crossOrigin\", \"anonymous\");\n    imgDataSvg.attr(\"href\", svgSrc);\n    imgDataSvg.attr(\"download\", \"parsetree.svg\");\n\n    // Create a new image object from the SVG\n    var image = new Image;\n    image.src = svgSrc;\n    image.onload = function() {\n        // Once the image is loaded\n        var imgDataPng = $(\"#imgdatapng\");\n        try {\n            // Create a canvas element and fill it with the SVG image\n            var canvas = document.createElement(\"canvas\");\n            canvas.width = imgw;\n            canvas.height = imgh;\n            canvas.style.backgroundColor = \"white\";\n            var canvasctx = canvas.getContext(\"2d\");\n            canvasctx.drawImage(image, 0, 0);\n            // Get the base64 encoded data URL for a PNG image from the canvas\n            var pngsrc = canvas.toDataURL(\"image/png\");\n\n            // Put it in a link\n            imgDataPng.attr(\"href\", pngsrc);\n            imgDataPng.attr(\"download\", \"parsetree.png\");\n        } catch (e) {\n            imgDataPng.attr(\"href\", \"javascript: void(0)\");\n            imgDataPng.off(\"click\");\n            imgDataPng.on(\"click\",\n                function() {\n                    alert(\"An error occured while creating PNG.\\n\\n\" +\n                        \"If you are using a modern browser? This page might not have enough privileges to allow PNG creation. Increase trust level for this page.\\n\\n\" +\n                        \"Are you using an older browser? If so try a newer one.\\n\\n\" +\n                        \"Confirmed to work in Firefox 39 and Chrome 44.\");\n                    return false;\n                });\n        }\n    };\n\n};\n\nvar svgCss = \".node circle {\\n\" +\n    \"    fill: #fff;\\n\" +\n    \"    stroke: steelblue;\\n\" +\n    \"    stroke-width: 1.5px;\\n\" +\n    \"}\\n\" +\n    \".node text {\\n\" +\n    \"   font-family: 'Helvetica Neue', Helvetica, sans-serif;\" +\n    \"   font-size: 14px;\\n\" +\n    \"}\\n\" +\n    \"path.link {\\n\" +\n    \"    fill: none;\\n\" +\n    \"    stroke: #cfcfcf;\\n\" +\n    \"    stroke-width: 1.5px;\\n\" +\n    \"}\";"
  },
  {
    "path": "app/XLParser.Web/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<packages>\r\n  <package id=\"Irony\" version=\"1.2.0\" targetFramework=\"net472\" />\r\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\r\n  <package id=\"System.Reflection.Emit.ILGeneration\" version=\"4.7.0\" targetFramework=\"net472\" />\r\n  <package id=\"System.Reflection.Emit.Lightweight\" version=\"4.7.0\" targetFramework=\"net472\" />\r\n</packages>"
  },
  {
    "path": "app/XLParser.Web/xlparser-web.css",
    "content": "﻿#borderwrapper {\n    border: 12px solid #217346;\n    border-bottom-width: 6px;\n    border-top-width: 14px;\n    display: flex;\n    flex: 0 1 auto;\n    flex-direction: row;\n    flex-wrap: nowrap;\n}\n\n#borderwrapper2 {\n    border: 12px solid #217346;\n    border-bottom-width: 14px;\n    border-top-width: 6px;\n    clear: both;\n    flex: 1 1 auto;\n    padding: 10px 75px 35px;\n}\n\n#errorformulainput {\n    background-color: transparent;\n    color: #000;\n    margin-bottom: 10px;\n    margin-top: 10px;\n}\n\n#errormessages {\n    background-color: transparent;\n    border: 1px solid #999;\n    color: #000;\n    font: 12px \"Courier New\",monospace;\n    height: 15em;\n    padding: 5px;\n    width: 65em;\n}\n\n#formulainput, #errorformulainput {\n    border: 1px solid #999;\n    min-height: 19px;\n    min-width: 25em;\n    resize: both;\n}\n\n#formulainput, #errorformulainput, #errormessages {\n    padding-bottom: 2px;\n    padding-left: 5px;\n    padding-top: 2px;\n}\n\n#leftoflogos {\n    align-items: stretch;\n    border-right: 12px solid #217346;\n    flex-grow: 1;\n    padding: 35px 75px 25px;\n}\n\n#logos {\n    flex-grow: 0;\n    height: 100%;\n    overflow: hidden;\n    padding-left: 50px;\n    padding-right: 50px;\n    padding-top: 35px;\n}\n\n#logos img {\n    margin-bottom: 20px;\n    width: 150px;\n}\n\n#parsebutton {\n    background-color: #fff;\n    border: 1px solid #999;\n    border-radius: 4px;\n    cursor: pointer;\n    height: 24px;\n    vertical-align: middle;\n    width: 60px;\n}\n\n#parsebutton:hover {\n        background-color: #ccc;\n    }\n\n#parserversionselected {\n    background-color: #fff;\n    border: 1px solid #999;\n    height: 24px;\n    width: 75px;\n}\n\n.clear {\n    clear: both;\n}\n\nbody {\n    -webkit-flex-flow: column;\n    background-color: #f1f1f1;\n    display: flex;\n    flex-flow: column;\n    font: 14px \"Helvetica Neue\",Helvetica,sans-serif;\n}\n\nh2 a {\n    text-decoration: none;\n}\n\nhtml, body {\n    height: 100%;\n    margin: 0;\n}\n\ntable { \n    width: 100%;\n}\n\ntextarea {\n    width: 95%;\n}\n\ntd, th {\n    text-align: left;\n    padding: 3px 0;\n    vertical-align: top;\n}"
  },
  {
    "path": "app/lib/.gitignore",
    "content": ""
  },
  {
    "path": "doc/README.md",
    "content": "# XLParser Documentation\n\nFor a full overview of XLParser, read the original paper: [A Grammar for Spreadsheet Formulas Evaluated on Two Large Datasets](https://drive.google.com/file/d/0B79P2Uym3JjvMjlaWWtnTWRLQmc/view?usp=sharing).\n\n### API documentation\n\nYou can generate API documentation using [Doxygen](www.doxygen.org) and the Doxyfile in api/Doxyfile\n\n### Grammar Used\n\nRead [this paper](https://drive.google.com/file/d/0B79P2Uym3JjvMjlaWWtnTWRLQmc/view?usp=sharing) (v1.1.2) or this thesis (v1.2.1) for full details. The grammar can also be interfered from [the source code](../src/XLParser/ExcelFormulaGrammar.cs).\nAlso available are the EBNF grammar ([PDF](ebnf.pdf), [PNG](ebnf.png), updated v1.2.1)  and token list ([PDF](tokens.pdf), [PNG](tokens.png), updated v1.2.1).\n"
  },
  {
    "path": "doc/api/Doxyfile",
    "content": "# Doxyfile 1.8.17\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the configuration\n# file that follow. The default is UTF-8 which is also the encoding used for all\n# text before the first occurrence of this tag. Doxygen uses libiconv (or the\n# iconv built into libc) for the transcoding. See\n# https://www.gnu.org/software/libiconv/ for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = XLParser\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         = 1.7.5\n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          =\n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           =\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = ./doc/api\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all generated output in the proper direction.\n# Possible values are: None, LTR, RTL and Context.\n# The default value is: None.\n\nOUTPUT_TEXT_DIRECTION  = None\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class\" \\\n                         \"The $name widget\" \\\n                         \"The $name file\" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        =\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    =\n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = NO\n\n# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line\n# such as\n# /***************\n# as being the beginning of a Javadoc-style comment \"banner\". If set to NO, the\n# Javadoc-style will behave just like regular comments and it will not be\n# interpreted by doxygen.\n# The default value is: NO.\n\nJAVADOC_BANNER         = NO\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 4\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines (in the resulting output). You can put ^^ in the value part of an\n# alias to insert a newline as if a physical newline was in the original file.\n# When you need a literal { or } or , in the value part of an alias you have to\n# escape them by means of a backslash (\\), this can lead to conflicts with the\n# commands \\{ and \\} for these it is advised to use the version @{ and @} or use\n# a double escape (\\\\{ and \\\\})\n\nALIASES                =\n\n# This tag can be used to specify a number of word-keyword mappings (TCL only).\n# A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n# will allow you to use the command class in the itcl::class meaning.\n\nTCL_SUBST              =\n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = YES\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice\n# sources only. Doxygen will then generate output that is more tailored for that\n# language. For instance, namespaces will be presented as modules, types will be\n# separated into more groups, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_SLICE  = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,\n# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,\n# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:\n# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser\n# tries to guess whether the code is fixed or free formatted code, this is the\n# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat\n# .inc files as Fortran files (default is PHP), and .f files as C (default is\n# Fortran), use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      =\n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See https://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up\n# to that level are automatically included in the table of contents, even if\n# they do not have an id attribute.\n# Note: This feature currently applies only to Markdown headings.\n# Minimum value: 0, maximum value: 99, default value: 5.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nTOC_INCLUDE_HEADINGS   = 5\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual\n# methods of a class will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIV_VIRTUAL   = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = YES\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = NO\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# declarations. If set to NO, these declarations will be included in the\n# documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES, upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# (including Cygwin) ands Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = NO\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       =\n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    =\n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            =\n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         =\n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong or incomplete\n# parameter documentation, but not about the absence of documentation. If\n# EXTRACT_ALL is set to YES then this flag will automatically be disabled.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when\n# a warning is encountered.\n# The default value is: NO.\n\nWARN_AS_ERROR          = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = ./src/XLParser\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: https://www.gnu.org/software/libiconv/) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,\n# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,\n# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,\n# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),\n# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen\n# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd,\n# *.vhdl, *.ucf, *.qsf and *.ice.\n\nFILE_PATTERNS          = *.c \\\n                         *.cc \\\n                         *.cxx \\\n                         *.cpp \\\n                         *.c++ \\\n                         *.java \\\n                         *.ii \\\n                         *.ixx \\\n                         *.ipp \\\n                         *.i++ \\\n                         *.inl \\\n                         *.idl \\\n                         *.ddl \\\n                         *.odl \\\n                         *.h \\\n                         *.hh \\\n                         *.hxx \\\n                         *.hpp \\\n                         *.h++ \\\n                         *.cs \\\n                         *.d \\\n                         *.php \\\n                         *.php4 \\\n                         *.php5 \\\n                         *.phtml \\\n                         *.inc \\\n                         *.m \\\n                         *.markdown \\\n                         *.md \\\n                         *.mm \\\n                         *.dox \\\n                         *.py \\\n                         *.f90 \\\n                         *.f \\\n                         *.for \\\n                         *.tcl \\\n                         *.vhd \\\n                         *.vhdl \\\n                         *.ucf \\\n                         *.qsf \\\n                         *.as \\\n                         *.js\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = NO\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                =\n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       =\n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        =\n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           =\n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             =\n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nINPUT_FILTER           =\n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nFILTER_PATTERNS        =\n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS =\n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE =\n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = NO\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# entity all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see https://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\n# cost of reduced performance. This can be particularly helpful with template\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\n# information.\n# Note: The availability of this option depends on whether or not doxygen was\n# generated with the -Duse_libclang=ON option for CMake.\n# The default value is: NO.\n\nCLANG_ASSISTED_PARSING = NO\n\n# If clang assisted parsing is enabled you can provide the compiler with command\n# line options that you would normally use when invoking the compiler. Note that\n# the include paths will already be set by doxygen for the files and directories\n# specified with INPUT and INCLUDE_PATH.\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\n\nCLANG_OPTIONS          =\n\n# If clang assisted parsing is enabled you can provide the clang parser with the\n# path to the compilation database (see:\n# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files\n# were built. This is equivalent to specifying the \"-p\" option to a clang tool,\n# such as clang-check. These options will then be passed to the parser.\n# Note: The availability of this option depends on whether or not doxygen was\n# generated with the -Duse_libclang=ON option for CMake.\n\nCLANG_DATABASE_PATH    =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = YES\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            =\n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            =\n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        =\n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list). For an example see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  =\n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       =\n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# https://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to YES can help to show when doxygen was last run and thus if the\n# documentation is up to date.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = NO\n\n# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML\n# documentation will contain a main index with vertical navigation menus that\n# are dynamically created via JavaScript. If disabled, the navigation index will\n# consists of multiple levels of tabs that are statically embedded in every HTML\n# page. Disable this option to support browsers that do not have JavaScript,\n# like the Qt help browser.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_MENUS     = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: https://developer.apple.com/xcode/), introduced with OSX\n# 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy\n# genXcode/_index.html for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               =\n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           =\n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the master .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     =\n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               =\n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   =\n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  =\n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  =\n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           =\n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = YES\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANSPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# The FORMULA_MACROFILE can contain LaTeX \\newcommand and \\renewcommand commands\n# to create new LaTeX commands to be used in formulas as building blocks. See\n# the section \"Including formulas\" for details.\n\nFORMULA_MACROFILE      =\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# https://www.mathjax.org) which uses client side JavaScript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from https://www.mathjax.org before deployment.\n# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     =\n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       =\n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = YES\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using JavaScript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: https://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: https://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       =\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     =\n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when not enabling USE_PDFLATEX the default is latex when enabling\n# USE_PDFLATEX the default is pdflatex and when in the later case latex is\n# chosen this is overwritten by pdflatex. For specific output languages the\n# default can have been set differently, this depends on the implementation of\n# the output language.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# Note: This tag is used in the Makefile / make.bat.\n# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file\n# (.tex).\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to\n# generate index for LaTeX. In case there is no backslash (\\) as first character\n# it will be automatically added in the LaTeX code.\n# Note: This tag is used in the generated output file (.tex).\n# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.\n# The default value is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_MAKEINDEX_CMD    = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         =\n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber,\n# $projectbrief, $projectlogo. Doxygen will replace $title with the empty\n# string, for the replacement values of the other commands the user is referred\n# to HTML_HEADER.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           =\n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           =\n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET =\n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      =\n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = YES\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n# the PDF file directly from the LaTeX files. Set this option to YES, to get a\n# higher quality PDF documentation.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# https://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated\n# page will contain the date and time when the page was generated. Setting this\n# to NO can help when comparing the output of multiple runs.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_TIMESTAMP        = NO\n\n# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)\n# path from which the emoji images will be read. If a relative path is entered,\n# it will be relative to the LATEX_OUTPUT directory. If left blank the\n# LATEX_OUTPUT directory will be used.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EMOJI_DIRECTORY  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's\n# configuration file, i.e. a series of assignments. You only have to provide\n# replacements, missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    =\n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's configuration file. A template extensions file can be\n# generated using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    =\n\n# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code\n# with syntax highlighting in the RTF output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_SOURCE_CODE        = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             =\n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include\n# namespace members in file scope as well, matching the HTML output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_NS_MEMB_FILE_SCOPE = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the\n# program listings (including syntax highlighting and cross-referencing\n# information) to the DOCBOOK output. Note that enabling this will significantly\n# increase the size of the DOCBOOK output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_PROGRAMLISTING = NO\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures\n# the structure of the code including all documentation. Note that this feature\n# is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           =\n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  =\n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             =\n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      =\n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               =\n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       =\n\n# If the ALLEXTERNALS tag is set to YES, all external class will be listed in\n# the class index. If set to NO, only the inherited external classes will be\n# listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               =\n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font in the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = Helvetica\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           =\n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# http://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               =\n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           =\n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           =\n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           =\n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file. If left blank, it is assumed\n# PlantUML is not used or called during a preprocessing step. Doxygen will\n# generate a warning when it encounters a \\startuml command in this case and\n# will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      =\n\n# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a\n# configuration file for plantuml.\n\nPLANTUML_CFG_FILE      =\n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  =\n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "doc/api/README.MD",
    "content": "Use [Doxygen](http://www.doxygen.org) to generate HTML API documentation."
  },
  {
    "path": "lib/IronyExplorer/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n"
  },
  {
    "path": "lib/IronyExplorer/IronyExplorer.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.30523.141\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"IronyExplorer.GrammarExplorer\", \"src\\IronyExplorer.GrammarExplorer\\IronyExplorer.GrammarExplorer.csproj\", \"{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D4728483-C872-4FDA-B678-FE7C76088984}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "lib/IronyExplorer/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Sunny Chen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "lib/IronyExplorer/README.md",
    "content": "# irony-explorer\nA project contains both the sample grammars as well as the Windows Forms based grammar explorer for Irony.\n"
  },
  {
    "path": "lib/IronyExplorer/libs/FastColoredTextBox/FastColoredTextBox.XML",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>FastColoredTextBox</name>\n    </assembly>\n    <members>\n        <member name=\"F:FastColoredTextBoxNS.FindForm.components\">\n            <summary>\n            Required designer variable.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FindForm.Dispose(System.Boolean)\">\n            <summary>\n            Clean up any resources being used.\n            </summary>\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FindForm.InitializeComponent\">\n            <summary>\n            Required method for Designer support - do not modify\n            the contents of this method with the code editor.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.HighlightSyntax(FastColoredTextBoxNS.Language,FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights syntax for given language\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.HighlightSyntax(System.String,FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights syntax for given XML description file\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.CSharpSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights C# code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.VBSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights VB code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.HTMLSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights HTML code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.SQLSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights SQL code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.PHPSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights PHP code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SyntaxHighlighter.JScriptSyntaxHighlight(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Highlights JavaScript code\n            </summary>\n            <param name=\"range\"></param>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Language\">\n            <summary>\n            Language\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.AutocompleteItem\">\n            <summary>\n            Item of autocomplete menu\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.AutocompleteItem.GetTextForReplace\">\n            <summary>\n            Returns text for inserting into Textbox\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.AutocompleteItem.Compare(System.String)\">\n            <summary>\n            Compares fragment text with this item\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.AutocompleteItem.ToString\">\n            <summary>\n            Returns text for display into popup menu\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.AutocompleteItem.OnSelected(FastColoredTextBoxNS.AutocompleteMenu,FastColoredTextBoxNS.SelectedEventArgs)\">\n            <summary>\n            This method is called after item inserted into text\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteItem.ToolTipTitle\">\n            <summary>\n            Title for tooltip.\n            </summary>\n            <remarks>Return null for disable tooltip for this item</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteItem.ToolTipText\">\n            <summary>\n            Tooltip text.\n            </summary>\n            <remarks>For display tooltip text, ToolTipTitle must be not null</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteItem.MenuText\">\n            <summary>\n            Menu text. This text is displayed in the drop-down menu.\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.CompareResult.Hidden\">\n            <summary>\n            Item do not appears\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.CompareResult.Visible\">\n            <summary>\n            Item appears\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.CompareResult.VisibleAndSelected\">\n            <summary>\n            Item appears and will selected\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.SnippetAutocompleteItem\">\n            <summary>\n            Autocomplete item for code snippets\n            </summary>\n            <remarks>Snippet can contain special char ^ for caret position.</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.SnippetAutocompleteItem.Compare(System.String)\">\n            <summary>\n            Compares fragment text with this item\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.MethodAutocompleteItem\">\n            <summary>\n            This autocomplete item appears after dot\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Style\">\n            <summary>\n            Style of chars\n            </summary>\n            <remarks>This is base class for all text and design renderers</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Style.#ctor\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Style.Draw(System.Drawing.Graphics,System.Drawing.Point,FastColoredTextBoxNS.Range)\">\n            <summary>\n            Renders given range of text\n            </summary>\n            <param name=\"gr\">Graphics object</param>\n            <param name=\"position\">Position of the range in absolute control coordinates</param>\n            <param name=\"range\">Rendering range of text</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Style.OnVisualMarkerClick(FastColoredTextBoxNS.FastColoredTextBox,FastColoredTextBoxNS.VisualMarkerEventArgs)\">\n            <summary>\n            Occurs when user click on StyleVisualMarker joined to this style \n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Style.AddVisualMarker(FastColoredTextBoxNS.FastColoredTextBox,FastColoredTextBoxNS.StyleVisualMarker)\">\n            <summary>\n            Shows VisualMarker\n            Call this method in Draw method, when you need to show VisualMarker for your style\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Style.IsExportable\">\n            <summary>\n            This style is exported to outer formats (HTML for example)\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.Style.VisualMarkerClick\">\n            <summary>\n            Occurs when user click on StyleVisualMarker joined to this style \n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.TextStyle\">\n            <summary>\n            Style for chars rendering\n            This renderer can draws chars, with defined fore and back colors\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.FoldedBlockStyle\">\n            <summary>\n            Renderer for folded block\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.SelectionStyle\">\n            <summary>\n            Renderer for selection area\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.MarkerStyle\">\n            <summary>\n            Marker style\n            Draws background color for text\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.AutocompleteMenu\">\n            <summary>\n            Popup menu for autocomplete\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.AutocompleteMenu.Show(System.Boolean)\">\n            <summary>\n            Shows popup menu immediately\n            </summary>\n            <param name=\"forced\">If True - MinFragmentLength will be ignored</param>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteMenu.SearchPattern\">\n            <summary>\n            Regex pattern for serach fragment around caret\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteMenu.MinFragmentLength\">\n            <summary>\n            Minimum fragment length for popup\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.AutocompleteMenu.Selecting\">\n            <summary>\n            User selects item\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.AutocompleteMenu.Selected\">\n            <summary>\n            It fires after item inserting\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.AutocompleteMenu.Opening\">\n            <summary>\n            Occurs when popup menu is opening\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteMenu.AllowTabKey\">\n            <summary>\n            Allow TAB for select menu item\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutocompleteMenu.AppearInterval\">\n            <summary>\n            Interval of menu appear (ms)\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.FileTextSource\">\n            <summary>\n            This class contains the source text (chars and styles).\n            It stores a text lines, the manager of commands, undo/redo stack, styles.\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.TextSource\">\n            <summary>\n            This class contains the source text (chars and styles).\n            It stores a text lines, the manager of commands, undo/redo stack, styles.\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.TextSource.Styles\">\n            <summary>\n            Styles\n            Maximum style count is 16\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.LineInserted\">\n            <summary>\n            Occurs when line was inserted/added\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.LineRemoved\">\n            <summary>\n            Occurs when line was removed\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.TextChanged\">\n            <summary>\n            Occurs when text was changed\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.RecalcNeeded\">\n            <summary>\n            Occurs when recalc is needed\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.TextChanging\">\n            <summary>\n            Occurs before text changing\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.TextSource.CurrentTBChanged\">\n            <summary>\n            Occurs after CurrentTB was changed\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.TextSource.CurrentTB\">\n            <summary>\n            Current focused FastColoredTextBox\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.TextSource.DefaultStyle\">\n            <summary>\n            Default text style\n            This style is using when no one other TextStyle is not defined in Char.style\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.TextSource.Lines\">\n            <summary>\n            Text lines\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FileTextSource.LineNeeded\">\n            <summary>\n            Occurs when need to display line in the textbox\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FileTextSource.LinePushed\">\n            <summary>\n            Occurs when need to save line in the file\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineNeededEventArgs.DisplayedLineText\">\n            <summary>\n            This text will be displayed in textbox\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LinePushedEventArgs.DisplayedLineText\">\n            <summary>\n            This property contains only changed text.\n            If text of line is not changed, this property contains null.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LinePushedEventArgs.SavedText\">\n            <summary>\n            This text will be saved in the file\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.GoToForm.components\">\n            <summary>\n            Required designer variable.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.GoToForm.Dispose(System.Boolean)\">\n            <summary>\n            Clean up any resources being used.\n            </summary>\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.GoToForm.InitializeComponent\">\n            <summary>\n            Required method for Designer support - do not modify\n            the contents of this method with the code editor.\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.FCTBDescriptionProvider\">\n            \n             This classes is required for correct data binding to Text property of FastColoredTextbox\n             \n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Range\">\n            <summary>\n            Diapason of text chars\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.#ctor(FastColoredTextBoxNS.FastColoredTextBox)\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.#ctor(FastColoredTextBoxNS.FastColoredTextBox,System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.#ctor(FastColoredTextBoxNS.FastColoredTextBox,FastColoredTextBoxNS.Place,FastColoredTextBoxNS.Place)\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetIntersectionWith(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Returns intersection with other range,\n            empty range returned otherwise\n            </summary>\n            <param name=\"range\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetUnionWith(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Returns union with other range.\n            </summary>\n            <param name=\"range\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SelectAll\">\n            <summary>\n            Select all chars of control\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.Clone\">\n            <summary>\n            Clone range\n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GoRight\">\n            <summary>\n            Move range right\n            </summary>\n            <remarks>This method jump over folded blocks</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GoRightThroughFolded\">\n            <summary>\n            Move range left\n            </summary>\n            <remarks>This method can to go inside folded blocks</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GoLeft\">\n            <summary>\n            Move range left\n            </summary>\n            <remarks>This method jump over folded blocks</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GoLeftThroughFolded\">\n            <summary>\n            Move range left\n            </summary>\n            <remarks>This method can to go inside folded blocks</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.Style)\">\n            <summary>\n            Set style for range\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.Style,System.String)\">\n            <summary>\n            Set style for given regex pattern\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.Style,System.Text.RegularExpressions.Regex)\">\n            <summary>\n            Set style for given regex\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.Style,System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Set style for given regex pattern\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.StyleIndex,System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Set style for given regex pattern\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.StyleIndex,System.Text.RegularExpressions.Regex)\">\n            <summary>\n            Set style for given regex pattern\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetStyle(FastColoredTextBoxNS.StyleIndex)\">\n            <summary>\n            Appends style to chars of range\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetFoldingMarkers(System.String,System.String)\">\n            <summary>\n            Sets folding markers\n            </summary>\n            <param name=\"startFoldingPattern\">Pattern for start folding line</param>\n            <param name=\"finishFoldingPattern\">Pattern for finish folding line</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.SetFoldingMarkers(System.String,System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Sets folding markers\n            </summary>\n            <param name=\"startFoldingPattern\">Pattern for start folding line</param>\n            <param name=\"finishFoldingPattern\">Pattern for finish folding line</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetRanges(System.String)\">\n            <summary>\n            Finds ranges for given regex pattern\n            </summary>\n            <param name=\"regexPattern\">Regex pattern</param>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetRanges(System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Finds ranges for given regex pattern\n            </summary>\n            <param name=\"regexPattern\">Regex pattern</param>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetRangesByLines(System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Finds ranges for given regex pattern.\n            Search is separately in each line.\n            This method requires less memory than GetRanges().\n            </summary>\n            <param name=\"regexPattern\">Regex pattern</param>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetRanges(System.Text.RegularExpressions.Regex)\">\n            <summary>\n            Finds ranges for given regex\n            </summary>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.ClearStyle(FastColoredTextBoxNS.Style[])\">\n            <summary>\n            Clear styles of range\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.ClearStyle(FastColoredTextBoxNS.StyleIndex)\">\n            <summary>\n            Clear styles of range\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.ClearFoldingMarkers\">\n            <summary>\n            Clear folding markers of all lines of range\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.BeginUpdate\">\n            <summary>\n            Starts selection position updating\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.EndUpdate\">\n            <summary>\n            Ends selection position updating\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.Normalize\">\n            <summary>\n            Exchanges Start and End if End appears before Start\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.Inverse\">\n            <summary>\n            Exchanges Start and End\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.Expand\">\n            <summary>\n            Expands range from first char of Start line to last char of End line\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetFragment(System.String)\">\n            <summary>\n            Get fragment of text around Start place. Returns maximal mathed to pattern fragment.\n            </summary>\n            <param name=\"allowedSymbolsPattern\">Allowed chars pattern for fragment</param>\n            <returns>Range of found fragment</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Range.GetFragment(System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Get fragment of text around Start place. Returns maximal mathed to pattern fragment.\n            </summary>\n            <param name=\"allowedSymbolsPattern\">Allowed chars pattern for fragment</param>\n            <returns>Range of found fragment</returns>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.Start\">\n            <summary>\n            Start line and char position\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.End\">\n            <summary>\n            Finish line and char position\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.Text\">\n            <summary>\n            Text of range\n            </summary>\n            <remarks>This property has not 'set' accessor because undo/redo stack works only with \n            FastColoredTextBox.Selection range. So, if you want to set text, you need to use FastColoredTextBox.Selection\n            and FastColoredTextBox.InsertText() mehtod.\n            </remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.CharAfterStart\">\n            <summary>\n            Returns first char after Start place\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.CharBeforeStart\">\n            <summary>\n            Returns first char before Start place\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.FromX\">\n            <summary>\n            Return minimum of end.X and start.X\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Range.ToX\">\n            <summary>\n            Return maximum of end.X and start.X\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.ExportToHTML\">\n            <summary>\n            Exports colored text as HTML\n            </summary>\n            <remarks>At this time only TextStyle renderer is supported. Other styles is not exported.</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.ExportToHTML.UseNbsp\">\n            <summary>\n            Use nbsp; instead space\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.ExportToHTML.UseForwardNbsp\">\n            <summary>\n            Use nbsp; instead space in beginning of line\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.ExportToHTML.UseOriginalFont\">\n            <summary>\n            Use original font\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.ExportToHTML.UseStyleTag\">\n            <summary>\n            Use style tag instead style attribute\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.ExportToHTML.UseBr\">\n            <summary>\n            Use br tag instead \\n\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.FastColoredTextBox\">\n            <summary>\n            Fast colored textbox\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.#ctor\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnVisibleRangeChanged\">\n            <summary>\n            Occurs when VisibleRange is changed\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Invalidate\">\n            <summary>\n            Invalidates the entire surface of the control and causes the control to be redrawn.\n            This method is thread safe and does not require Invoke.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.NeedRecalc\">\n            <summary>\n            Call this method if the recalc of the position of lines is needed.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.NavigateForward\">\n            <summary>\n            Navigates forward (by Line.LastVisit property)\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.NavigateBackward\">\n            <summary>\n            Navigates backward (by Line.LastVisit property)\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Navigate(System.Int32)\">\n            <summary>\n            Navigates to defined line, without Line.LastVisit reseting\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.AddStyle(FastColoredTextBoxNS.Style)\">\n            <summary>\n            Adds new style\n            </summary>\n            <returns>Layer index of this style</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ShowFindDialog\">\n            <summary>\n            Shows find dialog\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ShowFindDialog(System.String)\">\n            <summary>\n            Shows find dialog\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ShowReplaceDialog\">\n            <summary>\n            Shows replace dialog\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ShowReplaceDialog(System.String)\">\n            <summary>\n            Shows replace dialog\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetLineLength(System.Int32)\">\n            <summary>\n            Gets length of given line\n            </summary>\n            <param name=\"iLine\">Line index</param>\n            <returns>Length of line</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetLine(System.Int32)\">\n            <summary>\n            Get range of line\n            </summary>\n            <param name=\"iLine\">Line index</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Copy\">\n            <summary>\n            Copy selected text into Clipboard\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Cut\">\n            <summary>\n            Cut selected text into Clipboard\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Paste\">\n            <summary>\n            Paste text from clipboard into selection position\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.SelectAll\">\n            <summary>\n            Select all chars of text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GoEnd\">\n            <summary>\n            Move caret to end of text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GoHome\">\n            <summary>\n            Move caret to first position\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Clear\">\n            <summary>\n            Clear text, styles, history, caches\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ClearStylesBuffer\">\n            <summary>\n            Clear buffer of styles\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ClearStyle(FastColoredTextBoxNS.StyleIndex)\">\n            <summary>\n            Clear style of all text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ClearUndo\">\n            <summary>\n            Clears undo and redo stacks\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.InsertText(System.String)\">\n            <summary>\n            Insert text into current selection position\n            </summary>\n            <param name=\"text\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.InsertText(System.String,FastColoredTextBoxNS.Style)\">\n            <summary>\n            Insert text into current selection position (with predefined style)\n            </summary>\n            <param name=\"text\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.AppendText(System.String)\">\n            <summary>\n            Append string to end of the Text\n            </summary>\n            <param name=\"text\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetStyleIndex(FastColoredTextBoxNS.Style)\">\n            <summary>\n            Returns index of the style in Styles\n            -1 otherwise\n            </summary>\n            <param name=\"style\"></param>\n            <returns>Index of the style in Styles</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetStyleIndexMask(FastColoredTextBoxNS.Style[])\">\n            <summary>\n            Returns StyleIndex mask of given styles\n            </summary>\n            <param name=\"styles\"></param>\n            <returns>StyleIndex mask of given styles</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ClearSelected\">\n            <summary>\n            Deletes selected chars\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ClearCurrentLine\">\n            <summary>\n            Deletes current line(s)\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DoVisibleRectangle(System.Drawing.Rectangle)\">\n            <summary>\n            Scroll control for display defined rectangle\n            </summary>\n            <param name=\"rect\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DoCaretVisible\">\n            <summary>\n            Scroll control for display caret\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ScrollLeft\">\n            <summary>\n            Scroll control left\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DoSelectionVisible\">\n            <summary>\n            Scroll control for display selection area\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.UpperCase\">\n            <summary>\n            Convert selected text to upper case\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.LowerCase\">\n            <summary>\n            Convert selected text to lower case\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CommentSelected\">\n            <summary>\n            Insert/remove comment prefix into selected lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CommentSelected(System.String)\">\n            <summary>\n            Insert/remove comment prefix into selected lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DoAutoIndent(System.Int32)\">\n            <summary>\n            Inserts autoindent's spaces in the line\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CalcAutoIndent(System.Int32)\">\n            <summary>\n            Returns needed start space count for the line\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Undo\">\n            <summary>\n            Undo last operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Redo\">\n            <summary>\n            Redo\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnPaint(System.Windows.Forms.PaintEventArgs)\">\n            <summary>\n            Draw control\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.PointToPlace(System.Drawing.Point)\">\n            <summary>\n            Gets nearest line and char position from coordinates\n            </summary>\n            <param name=\"point\">Point</param>\n            <returns>Line and char position</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.PointToPosition(System.Drawing.Point)\">\n            <summary>\n            Gets nearest absolute text position for given point\n            </summary>\n            <param name=\"point\">Point</param>\n            <returns>Position</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnTextChanging(System.String@)\">\n            <summary>\n            Fires TextChanging event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnTextChanged\">\n            <summary>\n            Fires TextChanged event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnTextChanged(System.Int32,System.Int32)\">\n            <summary>\n            Fires TextChanged event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnTextChanged(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Fires TextChanged event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnTextChanged(FastColoredTextBoxNS.TextChangedEventArgs)\">\n            <summary>\n            Fires TextChanged event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnSelectionChanged\">\n            <summary>\n            Fires SelectionCnaged event\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.PlaceToPosition(FastColoredTextBoxNS.Place)\">\n            <summary>\n            Gets absolute text position from line and char position\n            </summary>\n            <param name=\"point\">Line and char position</param>\n            <returns>Index of text char</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.PositionToPlace(System.Int32)\">\n            <summary>\n            Gets line and char position from absolute text position\n            </summary>\n            <param name=\"pos\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.PlaceToPoint(FastColoredTextBoxNS.Place)\">\n            <summary>\n            Gets point for given line and char position\n            </summary>\n            <param name=\"palce\">Line and char position</param>\n            <returns>Coordiantes</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetRange(System.Int32,System.Int32)\">\n            <summary>\n            Get range of text\n            </summary>\n            <param name=\"fromPos\">Absolute start position</param>\n            <param name=\"toPos\">Absolute finish position</param>\n            <returns>Range</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetRange(FastColoredTextBoxNS.Place,FastColoredTextBoxNS.Place)\">\n            <summary>\n            Get range of text\n            </summary>\n            <param name=\"fromPlace\">Line and char position</param>\n            <param name=\"toPlace\">Line and char position</param>\n            <returns>Range</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetRanges(System.String)\">\n            <summary>\n            Finds ranges for given regex pattern\n            </summary>\n            <param name=\"regexPattern\">Regex pattern</param>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetRanges(System.String,System.Text.RegularExpressions.RegexOptions)\">\n            <summary>\n            Finds ranges for given regex pattern\n            </summary>\n            <param name=\"regexPattern\">Regex pattern</param>\n            <returns>Enumeration of ranges</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetLineText(System.Int32)\">\n            <summary>\n            Get text of given line\n            </summary>\n            <param name=\"iLine\">Line index</param>\n            <returns>Text</returns>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ExpandFoldedBlock(System.Int32)\">\n            <summary>\n            Exapnds folded block\n            </summary>\n            <param name=\"iLine\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ExpandBlock(System.Int32,System.Int32)\">\n            <summary>\n            Expand collapsed block\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ExpandBlock(System.Int32)\">\n            <summary>\n            Expand collapsed block\n            </summary>\n            <param name=\"iLine\">Any line inside collapsed block</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CollapseAllFoldingBlocks\">\n            <summary>\n            Collapses all folding blocks\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ExpandAllFoldingBlocks\">\n            <summary>\n            Exapnds all folded blocks\n            </summary>\n            <param name=\"iLine\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CollapseFoldingBlock(System.Int32)\">\n            <summary>\n            Collapses folding block\n            </summary>\n            <param name=\"iLine\">Start folding line</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CollapseBlock(System.Int32,System.Int32)\">\n            <summary>\n            Collapse text block\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.IncreaseIndent\">\n            <summary>\n            Insert TAB into front of seletcted lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DecreaseIndent\">\n            <summary>\n            Remove TAB from front of seletcted lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.DoAutoIndent\">\n            <summary>\n            Insert autoindents into selected lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.InsertLinePrefix(System.String)\">\n            <summary>\n            Insert prefix into front of seletcted lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.RemoveLinePrefix(System.String)\">\n            <summary>\n            Remove prefix from front of seletcted lines\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.BeginAutoUndo\">\n            <summary>\n            Begins AutoUndo block.\n            All changes of text between BeginAutoUndo() and EndAutoUndo() will be canceled in one operation Undo.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.EndAutoUndo\">\n            <summary>\n            Ends AutoUndo block.\n            All changes of text between BeginAutoUndo() and EndAutoUndo() will be canceled in one operation Undo.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Print(FastColoredTextBoxNS.Range,FastColoredTextBoxNS.PrintDialogSettings)\">\n            <summary>\n            Prints range of text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Print(FastColoredTextBoxNS.PrintDialogSettings)\">\n            <summary>\n            Prints all text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.Print\">\n            <summary>\n            Prints all text, without any dialog windows\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OpenBindingFile(System.String,System.Text.Encoding)\">\n            <summary>\n            Open file binding mode\n            </summary>\n            <param name=\"fileName\"></param>\n            <param name=\"enc\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.CloseBindingFile\">\n            <summary>\n            Close file binding mode\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.SaveToFile(System.String,System.Text.Encoding)\">\n            <summary>\n            Save text to the file\n            </summary>\n            <param name=\"fileName\"></param>\n            <param name=\"enc\"></param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.SetVisibleState(System.Int32,FastColoredTextBoxNS.VisibleState)\">\n            <summary>\n            Set VisibleState of line\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.GetVisibleState(System.Int32)\">\n            <summary>\n            Returns VisibleState of the line\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.ShowGoToDialog\">\n            <summary>\n            Shows Goto dialog form\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.FastColoredTextBox.OnUndoRedoStateChanged\">\n            <summary>\n            Occurs when undo/redo stack is changed\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.AcceptsTab\">\n            <summary>\n            Indicates if tab characters are accepted as input\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.AcceptsReturn\">\n            <summary>\n            Indicates if return characters are accepted as input\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.CurrentLineColor\">\n            <summary>\n            Background color for current line\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ChangedLineColor\">\n            <summary>\n            Background color for highlighting of changed lines\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ForeColor\">\n            <summary>\n            Fore color (default style color)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.CharHeight\">\n            <summary>\n            Height of char in pixels\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LineInterval\">\n            <summary>\n            Interval between lines (in pixels)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.CharWidth\">\n            <summary>\n            Width of char in pixels\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.TabLength\">\n            <summary>\n            Spaces count for tab\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.IsChanged\">\n            <summary>\n            Text was changed\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.TextVersion\">\n            <summary>\n            Text version\n            </summary>\n            <remarks>This counter is incremented each time changes the text</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ReadOnly\">\n            <summary>\n            Read only\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ShowLineNumbers\">\n            <summary>\n            Shows line numbers.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LineNumberColor\">\n            <summary>\n            Color of line numbers.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LineNumberStartValue\">\n            <summary>\n            Start value of first line number.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.IndentBackColor\">\n            <summary>\n            Background color of indent area\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ServiceLinesColor\">\n            <summary>\n            Color of service lines (folding lines, borders of blocks etc.)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.FoldingIndicatorColor\">\n            <summary>\n            Color of folding area indicator\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.HighlightFoldingIndicator\">\n            <summary>\n            Enables folding indicator (left vertical line between folding bounds)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftIndent\">\n            <summary>\n            Left indent in pixels\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftPadding\">\n            <summary>\n            Left padding in pixels\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.PreferredLineWidth\">\n            <summary>\n            This property draws vertical line after defined char position.\n            Set to 0 for disable drawing of vertical line.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Styles\">\n            <summary>\n            Styles\n            Maximum style count is 16\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.DefaultStyle\">\n            <summary>\n            Default text style\n            This style is using when no one other TextStyle is not defined in Char.style\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SelectionStyle\">\n            <summary>\n            Style for rendering Selection area\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.FoldedBlockStyle\">\n            <summary>\n            Style for folded block rendering\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.BracketsStyle\">\n            <summary>\n            Style for brackets highlighting\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.BracketsStyle2\">\n            <summary>\n            Style for alternative brackets highlighting\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftBracket\">\n            <summary>\n            Opening bracket for brackets highlighting.\n            Set to '\\x0' for disable brackets highlighting.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.RightBracket\">\n            <summary>\n            Closing bracket for brackets highlighting.\n            Set to '\\x0' for disable brackets highlighting.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftBracket2\">\n            <summary>\n            Alternative opening bracket for brackets highlighting.\n            Set to '\\x0' for disable brackets highlighting.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.RightBracket2\">\n            <summary>\n            Alternative closing bracket for brackets highlighting.\n            Set to '\\x0' for disable brackets highlighting.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.CommentPrefix\">\n            <summary>\n            Comment line prefix.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.HighlightingRangeType\">\n            <summary>\n            This property specifies which part of the text will be highlighted as you type (by built-in highlighter).\n            </summary>\n            <remarks>When a user enters text, a component of rebuilding the highlight (because the text is changed).\n            This property specifies exactly which section of the text will be re-highlighted.\n            This can be useful to highlight multi-line comments, for example.</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.IsReplaceMode\">\n            <summary>\n            Is keyboard in replace mode (wide caret) ?\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.AllowSeveralTextStyleDrawing\">\n            <summary>\n            Allows text rendering several styles same time.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.AutoIndent\">\n            <summary>\n            Allows AutoIndent. Inserts spaces before new line.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.DelayedEventsInterval\">\n            <summary>\n            Minimal delay(ms) for delayed events (except TextChangedDelayed).\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.DelayedTextChangedInterval\">\n            <summary>\n            Minimal delay(ms) for TextChangedDelayed event.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Language\">\n            <summary>\n            Language for highlighting by built-in highlighter.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SyntaxHighlighter\">\n            <summary>\n            Syntax Highlighter\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.DescriptionFile\">\n            <summary>\n            XML file with description of syntax highlighting.\n            This property works only with Language == Language.Custom.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftBracketPosition\">\n            <summary>\n            Position of left highlighted bracket.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.RightBracketPosition\">\n            <summary>\n            Position of right highlighted bracket.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LeftBracketPosition2\">\n            <summary>\n            Position of left highlighted alternative bracket.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.RightBracketPosition2\">\n            <summary>\n            Position of right highlighted alternative bracket.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.StartFoldingLine\">\n            <summary>\n            Start line index of current highlighted folding area. Return -1 if start of area is not found.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.EndFoldingLine\">\n            <summary>\n            End line index of current highlighted folding area. Return -1 if end of area is not found.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.TextSource\">\n            <summary>\n            TextSource\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SourceTextBox\">\n            <summary>\n            The source of the text.\n            Allows to get text from other FastColoredTextBox.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.VisibleRange\">\n            <summary>\n            Returns current visible range of text\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Selection\">\n            <summary>\n            Current selection range\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.BackColor\">\n            <summary>\n            Background color.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Multiline\">\n            <summary>\n            Multiline\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.WordWrap\">\n            <summary>\n            WordWrap.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.WordWrapMode\">\n            <summary>\n            WordWrap mode.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.WordWrapLinesCount\">\n            <summary>\n            Count of lines with wordwrap effect\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.AutoScroll\">\n            <summary>\n            Do not change this property\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.LinesCount\">\n            <summary>\n            Count of lines\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Item(FastColoredTextBoxNS.Place)\">\n            <summary>\n            Gets or sets char and styleId for given place\n            This property does not fire OnTextChanged event\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Item(System.Int32)\">\n            <summary>\n            Gets Line\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Text\">\n            <summary>\n            Text of control\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Lines\">\n            <summary>\n            Text lines\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Html\">\n            <summary>\n            Gets colored text as HTML\n            </summary>\n            <remarks>For more flexibility you can use ExportToHTML class also</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SelectedText\">\n            <summary>\n            Text of current selection\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SelectionStart\">\n            <summary>\n            Start position of selection\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.SelectionLength\">\n            <summary>\n            Length of selected text\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Font\">\n            <summary>\n            Font\n            </summary>\n            <remarks>Use only monospaced font</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.ImeAllowed\">\n            <summary>\n            Indicates that IME is allowed (for CJK language entering)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.UndoEnabled\">\n            <summary>\n            Is undo enabled?\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.RedoEnabled\">\n            <summary>\n            Is redo enabled?\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.FastColoredTextBox.Range\">\n            <summary>\n            Range of all text\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.TextChanged\">\n            <summary>\n            TextChanged event.\n            It occurs after insert, delete, clear, undo and redo operations.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.BindingTextChanged\">\n            <summary>\n            Fake event for correct data binding\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.TextChanging\">\n            <summary>\n            TextChanging event.\n            It occurs before insert, delete, clear, undo and redo operations.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.SelectionChanged\">\n            <summary>\n            SelectionChanged event.\n            It occurs after changing of selection.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.VisibleRangeChanged\">\n            <summary>\n            VisibleRangeChanged event.\n            It occurs after changing of visible range.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.TextChangedDelayed\">\n            <summary>\n            TextChangedDelayed event. \n            It occurs after insert, delete, clear, undo and redo operations. \n            This event occurs with a delay relative to TextChanged, and fires only once.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.SelectionChangedDelayed\">\n            <summary>\n            SelectionChangedDelayed event.\n            It occurs after changing of selection.\n            This event occurs with a delay relative to SelectionChanged, and fires only once.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.VisibleRangeChangedDelayed\">\n            <summary>\n            VisibleRangeChangedDelayed event.\n            It occurs after changing of visible range.\n            This event occurs with a delay relative to VisibleRangeChanged, and fires only once.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.VisualMarkerClick\">\n            <summary>\n            It occurs when user click on VisualMarker.\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.KeyPressing\">\n            <summary>\n            It occurs when visible char is enetering (alphabetic, digit, punctuation, DEL, BACKSPACE)\n            </summary>\n            <remarks>Set Handle to True for cancel key</remarks>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.KeyPressed\">\n            <summary>\n            It occurs when visible char is enetered (alphabetic, digit, punctuation, DEL, BACKSPACE)\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.AutoIndentNeeded\">\n            <summary>\n            It occurs when calculates AutoIndent for new line\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.PaintLine\">\n            <summary>\n            It occurs when line background is painting\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.LineInserted\">\n            <summary>\n            Occurs when line was inserted/added\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.LineRemoved\">\n            <summary>\n            Occurs when line was removed\n            </summary>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.FoldingHighlightChanged\">\n            <summary>\n            Occurs when current highlighted folding area is changed.\n            Current folding area see in StartFoldingLine and EndFoldingLine.\n            </summary>\n            <remarks></remarks>\n        </member>\n        <member name=\"E:FastColoredTextBoxNS.FastColoredTextBox.UndoRedoStateChanged\">\n            <summary>\n            Occurs when undo/redo stack is changed\n            </summary>\n            <remarks></remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineInsertedEventArgs.Index\">\n            <summary>\n            Inserted line index\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineInsertedEventArgs.Count\">\n            <summary>\n            Count of inserted lines\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineRemovedEventArgs.Index\">\n            <summary>\n            Removed line index\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineRemovedEventArgs.Count\">\n            <summary>\n            Count of removed lines\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineRemovedEventArgs.RemovedLineUniqueIds\">\n            <summary>\n            UniqueIds of removed lines\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.TextChangedEventArgs\">\n            <summary>\n            TextChanged event argument\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.TextChangedEventArgs.#ctor(FastColoredTextBoxNS.Range)\">\n            <summary>\n            Constructor\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.TextChangedEventArgs.ChangedRange\">\n            <summary>\n            This range contains changed area of text\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.WordWrapMode.WordWrapControlWidth\">\n            <summary>\n            Word wrapping by control width\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.WordWrapMode.WordWrapPreferredWidth\">\n            <summary>\n            Word wrapping by preferred line width (PreferredLineWidth)\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.WordWrapMode.CharWrapControlWidth\">\n            <summary>\n            Char wrapping by control width\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.WordWrapMode.CharWrapPreferredWidth\">\n            <summary>\n            Char wrapping by preferred line width (PreferredLineWidth)\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutoIndentEventArgs.Shift\">\n            <summary>\n            Additional spaces count for this line, relative to previous line\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.AutoIndentEventArgs.ShiftNextLines\">\n            <summary>\n            Additional spaces count for next line, relative to previous line\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.HighlightingRangeType\">\n            <summary>\n            Type of highlighting\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.HighlightingRangeType.ChangedRange\">\n            <summary>\n            Highlight only changed range of text. Highest performance.\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.HighlightingRangeType.VisibleRange\">\n            <summary>\n            Highlight visible range of text. Middle performance.\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.HighlightingRangeType.AllTextRange\">\n            <summary>\n            Highlight all (visible and invisible) text. Lowest performance.\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.ReplaceForm.components\">\n            <summary>\n            Required designer variable.\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceForm.Dispose(System.Boolean)\">\n            <summary>\n            Clean up any resources being used.\n            </summary>\n            <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceForm.InitializeComponent\">\n            <summary>\n            Required method for Designer support - do not modify\n            the contents of this method with the code editor.\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Place\">\n            <summary>\n            Line index and char index\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Line\">\n            <summary>\n            Line of text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Line.ClearStyle(FastColoredTextBoxNS.StyleIndex)\">\n            <summary>\n            Clears style of chars, delete folding markers\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.Line.ClearFoldingMarkers\">\n            <summary>\n            Clears folding markers\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.IsChanged\">\n            <summary>\n            Text of line was changed\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.LastVisit\">\n            <summary>\n            Time of last visit of caret in this line\n            </summary>\n            <remarks>This property can be used for forward/backward navigating</remarks>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.BackgroundBrush\">\n            <summary>\n            Background brush.\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.UniqueId\">\n            <summary>\n            Unique ID\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.AutoIndentSpacesNeededCount\">\n            <summary>\n            Count of needed start spaces for AutoIndent\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.Text\">\n            <summary>\n            Text of the line\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.Line.StartSpacesCount\">\n            <summary>\n            Count of start spaces\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.LineInfo.VisibleState\">\n            <summary>\n            Visible state\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LineInfo.GetWordWrapStringIndex(System.Int32)\">\n            <summary>\n            Gets index of wordwrap string for given char position\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LineInfo.CalcCutOffs(System.Int32,System.Boolean,System.Boolean,FastColoredTextBoxNS.Line)\">\n            <summary>\n            Calculates wordwrap cutoffs\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineInfo.CutOffPositions\">\n            <summary>\n            Positions for wordwrap cutoffs\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LineInfo.WordWrapStringsCount\">\n            <summary>\n            Count of wordwrap string count for this line\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.LimitedStack`1\">\n            <summary>\n            Limited stack\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LimitedStack`1.#ctor(System.Int32)\">\n            <summary>\n            Constructor\n            </summary>\n            <param name=\"maxItemCount\">Maximum length of stack</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LimitedStack`1.Pop\">\n            <summary>\n            Pop item\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LimitedStack`1.Peek\">\n            <summary>\n            Peek item\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LimitedStack`1.Push(`0)\">\n            <summary>\n            Push item\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.LimitedStack`1.Clear\">\n            <summary>\n            Clear stack\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LimitedStack`1.MaxItemCount\">\n            <summary>\n            Max stack length\n            </summary>\n        </member>\n        <member name=\"P:FastColoredTextBoxNS.LimitedStack`1.Count\">\n            <summary>\n            Current length of stack\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.Char\">\n            <summary>\n            Char and style\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.Char.c\">\n            <summary>\n            Unicode character\n            </summary>\n        </member>\n        <member name=\"F:FastColoredTextBoxNS.Char.style\">\n            <summary>\n            Style bit mask\n            </summary>\n            <remarks>Bit 1 in position n means that this char will rendering by FastColoredTextBox.Styles[n]</remarks>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.StyleIndex\">\n            <summary>\n            Style index mask\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.InsertCharCommand\">\n            <summary>\n            Insert single char\n            </summary>\n            <remarks>This operation includes also insertion of new line and removing char by backspace</remarks>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertCharCommand.#ctor(FastColoredTextBoxNS.TextSource,System.Char)\">\n            <summary>\n            Constructor\n            </summary>\n            <param name=\"tb\">Underlaying textbox</param>\n            <param name=\"c\">Inserting char</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertCharCommand.Undo\">\n            <summary>\n            Undo operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertCharCommand.Execute\">\n            <summary>\n            Execute operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertCharCommand.MergeLines(System.Int32,FastColoredTextBoxNS.TextSource)\">\n            <summary>\n            Merge lines i and i+1\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.InsertTextCommand\">\n            <summary>\n            Insert text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertTextCommand.#ctor(FastColoredTextBoxNS.TextSource,System.String)\">\n            <summary>\n            Constructor\n            </summary>\n            <param name=\"tb\">Underlaying textbox</param>\n            <param name=\"insertedText\">Text for inserting</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertTextCommand.Undo\">\n            <summary>\n            Undo operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.InsertTextCommand.Execute\">\n            <summary>\n            Execute operation\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.ReplaceTextCommand\">\n            <summary>\n            Insert text into given ranges\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceTextCommand.#ctor(FastColoredTextBoxNS.TextSource,System.Collections.Generic.List{FastColoredTextBoxNS.Range},System.String)\">\n            <summary>\n            Constructor\n            </summary>\n            <param name=\"tb\">Underlaying textbox</param>\n            <param name=\"ranges\">List of ranges for replace</param>\n            <param name=\"insertedText\">Text for inserting</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceTextCommand.Undo\">\n            <summary>\n            Undo operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceTextCommand.Execute\">\n            <summary>\n            Execute operation\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.ClearSelectedCommand\">\n            <summary>\n            Clear selected text\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ClearSelectedCommand.#ctor(FastColoredTextBoxNS.TextSource)\">\n            <summary>\n            Construstor\n            </summary>\n            <param name=\"tb\">Underlaying textbox</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ClearSelectedCommand.Undo\">\n            <summary>\n            Undo operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ClearSelectedCommand.Execute\">\n            <summary>\n            Execute operation\n            </summary>\n        </member>\n        <member name=\"T:FastColoredTextBoxNS.ReplaceMultipleTextCommand\">\n            <summary>\n            Insert texts into given ranges\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceMultipleTextCommand.#ctor(FastColoredTextBoxNS.TextSource,System.Collections.Generic.List{FastColoredTextBoxNS.ReplaceMultipleTextCommand.ReplaceRange})\">\n            <summary>\n            Constructor\n            </summary>\n            <param name=\"ts\">Underlaying textsource</param>\n            <param name=\"ranges\">List of ranges for replace</param>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceMultipleTextCommand.Undo\">\n            <summary>\n            Undo operation\n            </summary>\n        </member>\n        <member name=\"M:FastColoredTextBoxNS.ReplaceMultipleTextCommand.Execute\">\n            <summary>\n            Execute operation\n            </summary>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "lib/IronyExplorer/libs/FastColoredTextBox/about.txt",
    "content": "Fast Colored TextBox for Syntax Highlighting\nBy Pavel Torgashov\nGNU Lesser General Public License v3\n\nhttp://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n    <configSections>\r\n        <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" >\r\n            <section name=\"IronyExplorer.GrammarExplorer.Properties.Settings\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\r\n        </sectionGroup>\r\n    </configSections>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\r\n    </startup>\r\n    <userSettings>\r\n        <IronyExplorer.GrammarExplorer.Properties.Settings>\r\n            <setting name=\"SourceSample\" serializeAs=\"String\">\r\n                <value />\r\n            </setting>\r\n            <setting name=\"LanguageIndex\" serializeAs=\"String\">\r\n                <value>0</value>\r\n            </setting>\r\n            <setting name=\"SearchPattern\" serializeAs=\"String\">\r\n                <value />\r\n            </setting>\r\n            <setting name=\"Grammars\" serializeAs=\"String\">\r\n                <value />\r\n            </setting>\r\n            <setting name=\"EnableTrace\" serializeAs=\"String\">\r\n                <value>False</value>\r\n            </setting>\r\n            <setting name=\"DisableHili\" serializeAs=\"String\">\r\n                <value>False</value>\r\n            </setting>\r\n            <setting name=\"AutoRefresh\" serializeAs=\"String\">\r\n                <value>True</value>\r\n            </setting>\r\n        </IronyExplorer.GrammarExplorer.Properties.Settings>\r\n    </userSettings>\r\n</configuration>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/GrammarItemList.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution. \r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the \r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Xml; \r\nusing System.Windows.Forms;\r\nusing System.Reflection;\r\nusing Irony.Parsing;\r\nusing System.IO;\r\nusing System.Threading; \r\n\r\nnamespace Irony.GrammarExplorer {\r\n\r\n  //Helper classes for supporting showing grammar list in top combo, saving list on exit and loading on start\r\n  public class GrammarItem {\r\n    public readonly string Caption;\r\n    public readonly string LongCaption;\r\n    public readonly string Location; //location of assembly containing the grammar\r\n    public readonly string TypeName; //full type name\r\n    internal bool _loading;\r\n    public GrammarItem(string caption, string location, string typeName) {\r\n      Caption = caption;\r\n      Location = location;\r\n      TypeName = typeName;\r\n    }\r\n    public GrammarItem(Type grammarClass, string assemblyLocation) {\r\n      _loading = true; \r\n      Location = assemblyLocation;\r\n      TypeName = grammarClass.FullName;\r\n      //Get language name from Language attribute\r\n      Caption = grammarClass.Name; //default caption\r\n      LongCaption = Caption;\r\n      var langAttr = LanguageAttribute.GetValue(grammarClass); \r\n      if (langAttr != null) {\r\n        Caption = langAttr.LanguageName;\r\n        if (!string.IsNullOrEmpty(langAttr.Version))\r\n          Caption += \", version \" + langAttr.Version;\r\n        LongCaption = Caption;\r\n        if (!string.IsNullOrEmpty(langAttr.Description))\r\n          LongCaption += \": \" + langAttr.Description;\r\n      }\r\n    }\r\n    public GrammarItem(XmlElement element) {\r\n      Caption = element.GetAttribute(\"Caption\");\r\n      Location = element.GetAttribute(\"Location\");\r\n      TypeName = element.GetAttribute(\"TypeName\");\r\n    }\r\n    public void Save(XmlElement toElement) {\r\n      toElement.SetAttribute(\"Caption\", Caption);\r\n      toElement.SetAttribute(\"Location\", Location);\r\n      toElement.SetAttribute(\"TypeName\", TypeName);\r\n    }\r\n    public override string  ToString() {\r\n        return _loading ? LongCaption : Caption; \r\n    }\r\n  \r\n  }//class\r\n\r\n  public class GrammarItemList : List<GrammarItem> {\r\n    public static GrammarItemList FromXml(string xml) {\r\n      GrammarItemList list = new GrammarItemList();\r\n      XmlDocument xdoc = new XmlDocument();\r\n      xdoc.LoadXml(xml);\r\n      XmlNodeList xlist = xdoc.SelectNodes(\"//Grammar\");\r\n      foreach (XmlElement xitem in xlist) {\r\n        GrammarItem item = new GrammarItem(xitem);\r\n        list.Add(item); \r\n      }\r\n      return list; \r\n    }\r\n    public static GrammarItemList FromCombo(ComboBox combo) {\r\n      GrammarItemList list = new GrammarItemList();\r\n      foreach (GrammarItem item in combo.Items)\r\n        list.Add(item);\r\n      return list;\r\n    }\r\n\r\n    public string ToXml() {\r\n      XmlDocument xdoc = new XmlDocument();\r\n      XmlElement xlist = xdoc.CreateElement(\"Grammars\");\r\n      xdoc.AppendChild(xlist);\r\n      foreach (GrammarItem item in this) {\r\n        XmlElement xitem = xdoc.CreateElement(\"Grammar\");\r\n        xlist.AppendChild(xitem);\r\n        item.Save(xitem); \r\n      } //foreach\r\n      return xdoc.OuterXml; \r\n    }//method\r\n\r\n    public void ShowIn(ComboBox combo) {\r\n      combo.Items.Clear();\r\n      foreach (GrammarItem item in this)\r\n        combo.Items.Add(item); \r\n    }\r\n\r\n  }//class\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/GrammarLoader.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n// This file and all functionality of dynamic assembly reloading was contributed by Alexey Yakovlev (yallie)\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Reflection;\r\nusing Irony.Parsing;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Windows.Forms;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  /// <summary>\r\n  /// Maintains grammar assemblies, reloads updated files automatically.\r\n  /// </summary>\r\n  class GrammarLoader {\r\n    private TimeSpan _autoRefreshDelay = TimeSpan.FromMilliseconds(1000);\r\n    private static HashSet<string> _probingPaths = new HashSet<string>();\r\n    private Dictionary<string, CachedAssembly> _cachedGrammarAssemblies = new Dictionary<string, CachedAssembly>();\r\n    private static Dictionary<string, Assembly> _loadedAssembliesByNames = new Dictionary<string, Assembly>();\r\n    private static HashSet<Assembly> _loadedAssemblies = new HashSet<Assembly>();\r\n    private static bool _enableBrowsingForAssemblyResolution = false;\r\n\r\n    static GrammarLoader() {\r\n      AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => _loadedAssembliesByNames[args.LoadedAssembly.FullName] = args.LoadedAssembly;\r\n      AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => FindAssembly(args.Name);\r\n    }\r\n\r\n    static Assembly FindAssembly(string assemblyName) {\r\n      if (_loadedAssembliesByNames.ContainsKey(assemblyName))\r\n        return _loadedAssembliesByNames[assemblyName];\r\n      // ignore resource assemblies\r\n      if (assemblyName.ToLower().Contains(\".resources, version=\"))\r\n        return _loadedAssembliesByNames[assemblyName] = null;\r\n      // use probing paths to look for dependency assemblies\r\n      var fileName = assemblyName.Split(',').First() + \".dll\";\r\n      foreach (var path in _probingPaths) {\r\n        var fullName = Path.Combine(path, fileName);\r\n        if (File.Exists(fullName)) {\r\n          try {\r\n            return LoadAssembly(fullName);\r\n          }\r\n          catch {\r\n            // the file seems to be bad, let's try to find another one\r\n          }\r\n        }\r\n      }\r\n      // the last chance: try asking user to locate the assembly\r\n      if (_enableBrowsingForAssemblyResolution) {\r\n        fileName = BrowseFor(assemblyName);\r\n        if (!string.IsNullOrWhiteSpace(fileName))\r\n          return LoadAssembly(fileName);\r\n      }\r\n      // assembly not found, don't search for it again\r\n      return _loadedAssembliesByNames[assemblyName] = null;\r\n    }\r\n\r\n    static string BrowseFor(string assemblyName) {\r\n      var fileDialog = new OpenFileDialog {\r\n        Title = \"Please locate assembly: \" + assemblyName,\r\n        Filter = \"Assemblies (*.dll)|*.dll|All files (*.*)|*.*\"\r\n      };\r\n      using (fileDialog) {\r\n        if (fileDialog.ShowDialog() == DialogResult.OK)\r\n          return fileDialog.FileName;\r\n      }\r\n      return null;\r\n    }\r\n\r\n    class CachedAssembly {\r\n      public long FileSize;\r\n      public DateTime LastWriteTime;\r\n      public FileSystemWatcher Watcher;\r\n      public Assembly Assembly;\r\n      public bool UpdateScheduled;\r\n    }\r\n\r\n    public event EventHandler AssemblyUpdated;\r\n\r\n    public GrammarItem SelectedGrammar { get; set; }\r\n\r\n    public Grammar CreateGrammar() {\r\n      if (SelectedGrammar == null)\r\n        return null;\r\n\r\n      // resolve dependencies while loading and creating grammars\r\n      _enableBrowsingForAssemblyResolution = true;\r\n      try {\r\n        var type = SelectedGrammarAssembly.GetType(SelectedGrammar.TypeName, true, true);\r\n        return Activator.CreateInstance(type) as Grammar;\r\n      }\r\n      finally {\r\n        _enableBrowsingForAssemblyResolution = false;\r\n      }\r\n    }\r\n\r\n    Assembly SelectedGrammarAssembly {\r\n      get {\r\n        if (SelectedGrammar == null)\r\n          return null;\r\n\r\n        // create assembly cache entry as needed\r\n        var location = SelectedGrammar.Location;\r\n        if (!_cachedGrammarAssemblies.ContainsKey(location)) {\r\n          var fileInfo = new FileInfo(location);\r\n          _cachedGrammarAssemblies[location] =\r\n            new CachedAssembly {\r\n              LastWriteTime = fileInfo.LastWriteTime,\r\n              FileSize = fileInfo.Length,\r\n              Assembly = null\r\n            };\r\n\r\n          // set up file system watcher\r\n          _cachedGrammarAssemblies[location].Watcher = CreateFileWatcher(location);\r\n        }\r\n\r\n        // get loaded assembly from cache if possible\r\n        var assembly = _cachedGrammarAssemblies[location].Assembly;\r\n        if (assembly == null) {\r\n          assembly = LoadAssembly(location);\r\n          _cachedGrammarAssemblies[location].Assembly = assembly;\r\n        }\r\n\r\n        return assembly;\r\n      }\r\n    }\r\n\r\n    private FileSystemWatcher CreateFileWatcher(string location) {\r\n      var folder = Path.GetDirectoryName(location);\r\n      var watcher = new FileSystemWatcher(folder);\r\n      watcher.Filter = Path.GetFileName(location);\r\n\r\n      watcher.Changed += (s, args) => {\r\n        if (args.ChangeType != WatcherChangeTypes.Changed)\r\n          return;\r\n\r\n        lock (this) {\r\n          // check if assembly file was changed indeed since the last event\r\n          var cacheEntry = _cachedGrammarAssemblies[location];\r\n          var fileInfo = new FileInfo(location);\r\n          if (cacheEntry.LastWriteTime == fileInfo.LastWriteTime && cacheEntry.FileSize == fileInfo.Length)\r\n            return;\r\n\r\n          // reset cached assembly and save last file update time\r\n          cacheEntry.LastWriteTime = fileInfo.LastWriteTime;\r\n          cacheEntry.FileSize = fileInfo.Length;\r\n          cacheEntry.Assembly = null;\r\n\r\n          // check if file update is already scheduled (work around multiple FileSystemWatcher event firing)\r\n          if (!cacheEntry.UpdateScheduled) {\r\n            cacheEntry.UpdateScheduled = true;\r\n            // delay auto-refresh to make sure the file is closed by the writer\r\n            ThreadPool.QueueUserWorkItem(_ => {\r\n              Thread.Sleep(_autoRefreshDelay);\r\n              cacheEntry.UpdateScheduled = false;\r\n              OnAssemblyUpdated(location);\r\n            });\r\n          }\r\n        }\r\n      };\r\n\r\n      watcher.EnableRaisingEvents = true;\r\n      return watcher;\r\n    }\r\n\r\n    private void OnAssemblyUpdated(string location) {\r\n      if (AssemblyUpdated == null || SelectedGrammar == null || SelectedGrammar.Location != location)\r\n        return;\r\n      AssemblyUpdated(this, EventArgs.Empty);\r\n    }\r\n\r\n    public static Assembly LoadAssembly(string fileName) {\r\n      // normalize the filename\r\n      fileName = new FileInfo(fileName).FullName;\r\n      // save assembly path for dependent assemblies probing\r\n      var path = Path.GetDirectoryName(fileName);\r\n      _probingPaths.Add(path);\r\n      // try to load assembly using the standard policy\r\n      var assembly = Assembly.LoadFrom(fileName);\r\n      // if the standard policy returned the old version, force reload\r\n      if (_loadedAssemblies.Contains(assembly)) {\r\n          assembly = Assembly.Load(File.ReadAllBytes(fileName));\r\n      }\r\n      // cache the loaded assembly by its location\r\n      _loadedAssemblies.Add(assembly);\r\n      return assembly;\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/AboutCodeHighlighter.txt",
    "content": "﻿This highlighter is not a real thing, just a sketch - good enough to highlight samples in Grammar Explorer"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/EditorAdapter.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Runtime.InteropServices;\r\nusing System.Diagnostics;\r\nusing Irony.Parsing;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n\r\n  public class EditorAdapter {\r\n    Parser _parser;\r\n    Scanner _scanner;\r\n    ParseTree _parseTree;\r\n    string _newText;\r\n    EditorViewAdapterList _views = new EditorViewAdapterList();\r\n    EditorViewAdapterList _viewsCopy; //copy used in refresh loop; set to null when views are added/removed\r\n    Thread _parserThread;\r\n    Thread _colorizerThread;\r\n    bool _stopped;\r\n\r\n    public EditorAdapter(LanguageData language) {\r\n      _parser = new Parser(language);\r\n      _scanner = _parser.Scanner;\r\n      _colorizerThread = new Thread(ColorizerLoop);\r\n      _colorizerThread.IsBackground = true;\r\n      _parserThread = new Thread(ParserLoop);\r\n      _parserThread.IsBackground = true;\r\n    }\r\n    public void Activate() {\r\n      if ((_colorizerThread.ThreadState & System.Threading.ThreadState.Running) == 0) {\r\n        _parserThread.Start();\r\n        _colorizerThread.Start();\r\n      }\r\n    }\r\n\r\n    public void Stop() {\r\n      try {\r\n        _stopped = true;\r\n        _parserThread.Join(500);\r\n        if(_parserThread.IsAlive)\r\n          _parserThread.Abort();\r\n        _colorizerThread.Join(500);\r\n        if(_colorizerThread.IsAlive)\r\n          _colorizerThread.Abort();\r\n      } catch (Exception ex) {\r\n        System.Diagnostics.Debug.WriteLine(\"Error when stopping EditorAdapter: \" + ex.Message);\r\n      }\r\n    }\r\n\r\n    public void SetNewText(string text) {\r\n      text = text ?? string.Empty; //force it to become not null; null is special value meaning \"no changes\"\r\n      _newText = text;\r\n    }\r\n\r\n    public ParseTree ParseTree {\r\n      get { return _parseTree; }\r\n    }\r\n\r\n    //Note: we don't actually parse in current version, only scan. Will implement full parsing in the future,\r\n    // to support all intellisense operations\r\n    private  void ParseSource(string newText) {\r\n      //Explicitly catch the case when new text is empty\r\n      if (newText != string.Empty) {\r\n        _parseTree = _parser.Parse(newText);// .ScanOnly(newText, \"Source\");\r\n      }\r\n      //notify views\r\n      var views = GetViews();\r\n      foreach (var view in views)\r\n        view.UpdateParsedSource(_parseTree);\r\n    }\r\n\r\n\r\n    #region Views manipulation: AddView, RemoveView, GetViews\r\n    public void AddView(EditorViewAdapter view) {\r\n      lock (this) {\r\n        _views.Add(view);\r\n        _viewsCopy = null;\r\n      }\r\n    }\r\n    public void RemoveView(EditorViewAdapter view) {\r\n      lock (this) {\r\n        _views.Remove(view);\r\n        _viewsCopy = null;\r\n      }\r\n    }\r\n    private EditorViewAdapterList GetViews() {\r\n      EditorViewAdapterList result = _viewsCopy;\r\n      if (result == null) {\r\n        lock (this) {\r\n          _viewsCopy = new EditorViewAdapterList();\r\n          _viewsCopy.AddRange(_views);\r\n          result = _viewsCopy;\r\n        }//lock\r\n      }\r\n      return result;\r\n    }\r\n    #endregion\r\n\r\n    private void ParserLoop() {\r\n      while (!_stopped) {\r\n        try {\r\n          string newtext = Interlocked.Exchange(ref _newText, null);\r\n          if(newtext != null) {\r\n            ParseSource(newtext);\r\n          }\r\n          Thread.Sleep(10);\r\n        } catch(Exception ex) {\r\n          fmShowException.ShowException(ex);\r\n          System.Windows.Forms.MessageBox.Show(\"Fatal error in code colorizer. Colorizing had been disabled.\");\r\n          _stopped = true;\r\n        }\r\n      }//while\r\n    }\r\n\r\n    private void ColorizerLoop() {\r\n      while (!_stopped) {\r\n        EditorViewAdapterList views = GetViews();\r\n        //Go through views and invoke refresh\r\n        foreach (EditorViewAdapter view in views) {\r\n          if (_stopped) break;\r\n          if (view.WantsColorize)\r\n            view.TryInvokeColorize();\r\n        }//foreach\r\n        Thread.Sleep(10);\r\n      }// while !_stopped\r\n    }//method\r\n\r\n  }//class\r\n}//namespace\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/EditorViewAdapter.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing Irony.Parsing;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  public delegate void ColorizeMethod();\r\n  public interface IUIThreadInvoker {\r\n    void InvokeOnUIThread(ColorizeMethod colorize);\r\n  }\r\n\r\n  public class ColorizeEventArgs : EventArgs {\r\n    public readonly TokenList Tokens;\r\n    public ColorizeEventArgs(TokenList tokens) {\r\n      Tokens = tokens;\r\n    }\r\n  }\r\n\r\n  //Container for two numbers representing visible range of the source text (min...max)\r\n  // we use it to allow replacing two numbers in atomic operation\r\n  public class ViewRange {\r\n    public readonly int Min, Max;\r\n    public ViewRange(int min, int max) {\r\n      Min = min;\r\n      Max = max;\r\n    }\r\n    public bool Equals(ViewRange other) {\r\n      return other.Min == Min && other.Max == Max;\r\n    }\r\n  }\r\n\r\n  public class ViewData {\r\n    // ColoredTokens + NotColoredTokens == Source.Tokens\r\n    public readonly TokenList ColoredTokens = new TokenList();\r\n    public readonly TokenList NotColoredTokens = new TokenList(); //tokens not colored yet\r\n    public ParseTree Tree;\r\n    public ViewData(ParseTree tree) {\r\n      this.Tree = tree;\r\n      if (tree == null) return;\r\n      NotColoredTokens.AddRange(tree.Tokens);\r\n    }\r\n  }\r\n\r\n  //Two scenarios:\r\n  // 1. Colorizing in current view range. We colorize only those tokens in current view range that were not colorized yet.\r\n  //    For this we keep two lists (colorized and not colorized) tokens, and move tokens from one list to another when\r\n  //    we actually colorize them.\r\n  // 2. Typing/Editing - new editor content is being pushed from EditorAdapter. We try to avoid recoloring all visible tokens, when\r\n  //     user just typed a single char. What we do is try to identify \"already-colored\" tokens in new token list by matching\r\n  //     old viewData.ColoredTokens to newly scanned token list - initially in new-viewData.NonColoredTokens. If we find a \"match\",\r\n  //     we move the token from NonColored to Colored in new viewData. This all happens on background thread.\r\n\r\n  public class EditorViewAdapterList : List<EditorViewAdapter> { }\r\n\r\n  public class EditorViewAdapter {\r\n    public EditorAdapter Adapter { get; private set; }\r\n    private IUIThreadInvoker _invoker;\r\n    //public readonly Control Control;\r\n    ViewData _data;\r\n    ViewRange _range;\r\n    bool _wantsColorize;\r\n    int _colorizing;\r\n    public event EventHandler<ColorizeEventArgs> ColorizeTokens;\r\n\r\n    public EditorViewAdapter(EditorAdapter adapter, IUIThreadInvoker invoker) {\r\n      Adapter = adapter;\r\n      _invoker = invoker;\r\n      Adapter.AddView(this);\r\n      _range = new ViewRange(-1, -1);\r\n    }\r\n\r\n    //SetViewRange and SetNewText are called by text box's event handlers to notify adapter that user did something edit box\r\n    public void SetViewRange(int min, int max) {\r\n      _range = new ViewRange(min, max);\r\n      _wantsColorize = true;\r\n    }\r\n    //The new text is passed directly to EditorAdapter instance (possibly shared by several view adapters).\r\n    // EditorAdapter parses the text on a separate background thread, and notifies back this and other\r\n    // view adapters and provides them with newly parsed source through UpdateParsedSource method (see below)\r\n    public void SetNewText(string newText) {\r\n      //TODO: fix this\r\n      //hack, temp solution for more general problem\r\n      //When we load/replace/clear entire text, clear out colored tokens to force recoloring from scratch\r\n      if (string.IsNullOrEmpty(newText))\r\n        _data = null;\r\n      Adapter.SetNewText(newText);\r\n    }\r\n\r\n    //Called by EditorAdapter to provide the latest parsed source\r\n    public void UpdateParsedSource(ParseTree newTree) {\r\n      lock (this) {\r\n        var oldData = _data;\r\n        _data = new ViewData(newTree);\r\n        //Now try to figure out tokens that match old Colored tokens\r\n        if (oldData != null && oldData.Tree != null) {\r\n          DetectAlreadyColoredTokens(oldData.ColoredTokens, _data.Tree.SourceText.Length - oldData.Tree.SourceText.Length);\r\n        }\r\n        _wantsColorize = true;\r\n      }//lock\r\n    }\r\n\r\n\r\n    #region Colorizing\r\n    public bool WantsColorize {\r\n      get { return _wantsColorize; }\r\n    }\r\n\r\n    public void TryInvokeColorize() {\r\n      if (!_wantsColorize) return;\r\n      int colorizing = Interlocked.Exchange(ref _colorizing, 1);\r\n      if (colorizing != 0) return;\r\n      _invoker.InvokeOnUIThread(Colorize);\r\n    }\r\n    private void Colorize() {\r\n      var range = _range;\r\n      var data = _data;\r\n      if (data != null) {\r\n        TokenList tokensToColor;\r\n        lock (this) {\r\n          tokensToColor = ExtractTokensInRange(data.NotColoredTokens, range.Min, range.Max);\r\n        }\r\n        if (ColorizeTokens != null && tokensToColor != null && tokensToColor.Count > 0) {\r\n          data.ColoredTokens.AddRange(tokensToColor);\r\n          ColorizeEventArgs args = new ColorizeEventArgs(tokensToColor);\r\n          ColorizeTokens(this, args);\r\n        }\r\n      }//if data != null ...\r\n      _wantsColorize = false;\r\n      _colorizing = 0;\r\n    }\r\n\r\n    private void DetectAlreadyColoredTokens(TokenList oldColoredTokens, int shift) {\r\n      foreach (Token oldColored in oldColoredTokens) {\r\n        int index;\r\n        Token newColored;\r\n        if (FindMatchingToken(_data.NotColoredTokens, oldColored, 0, out index, out newColored) ||\r\n            FindMatchingToken(_data.NotColoredTokens, oldColored, shift, out index, out newColored)) {\r\n          _data.NotColoredTokens.RemoveAt(index);\r\n          _data.ColoredTokens.Add(newColored);\r\n        }\r\n      }//foreach\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region token utilities\r\n    private bool FindMatchingToken(TokenList inTokens, Token token, int shift, out int index, out Token result) {\r\n      index = LocateToken(inTokens, token.Location.Position + shift);\r\n      if (index >= 0) {\r\n        result = inTokens[index];\r\n        if (TokensMatch(token, result, shift)) return true;\r\n      }\r\n      index = -1;\r\n      result = null;\r\n      return false;\r\n    }\r\n    public bool TokensMatch(Token x, Token y, int shift) {\r\n      if (x.Location.Position + shift != y.Location.Position) return false;\r\n      if (x.Terminal != y.Terminal) return false;\r\n      if (x.Text != y.Text) return false;\r\n      //Note: be careful comparing x.Value and y.Value - if value is \"ValueType\", it is boxed and erroneously reports non-equal\r\n      //if (x.ValueString != y.ValueString) return false;\r\n      return true;\r\n    }\r\n    public TokenList ExtractTokensInRange(TokenList tokens, int from, int until) {\r\n      TokenList result = new TokenList();\r\n      for (int i = tokens.Count - 1; i >= 0; i--) {\r\n        var tkn = tokens[i];\r\n        if (tkn.Location.Position > until || (tkn.Location.Position + tkn.Length < from)) continue;\r\n        result.Add(tkn);\r\n        tokens.RemoveAt(i);\r\n      }\r\n      return result;\r\n    }\r\n\r\n    public TokenList GetTokensInRange(int from, int until) {\r\n      ViewData data = _data;\r\n      if (data == null) return null;\r\n      return GetTokensInRange(data.Tree.Tokens, from, until);\r\n    }\r\n    public TokenList GetTokensInRange(TokenList tokens, int from, int until) {\r\n      TokenList result = new TokenList();\r\n      int fromIndex = LocateToken(tokens, from);\r\n      int untilIndex = LocateToken(tokens, until);\r\n      if (fromIndex < 0) fromIndex = 0;\r\n      if (untilIndex >= tokens.Count) untilIndex = tokens.Count - 1;\r\n      for (int i = fromIndex; i <= untilIndex; i++) {\r\n        result.Add(tokens[i]);\r\n      }\r\n      return result;\r\n    }\r\n\r\n    //TODO: find better place for these methods\r\n    public int LocateToken(TokenList tokens,  int position) {\r\n      if (tokens == null || tokens.Count == 0) return -1;\r\n      var lastToken = tokens[tokens.Count - 1];\r\n      var lastTokenEnd = lastToken.Location.Position + lastToken.Length;\r\n      if (position < tokens[0].Location.Position || position > lastTokenEnd) return -1;\r\n      return LocateTokenExt(tokens, position, 0, tokens.Count - 1);\r\n    }\r\n    private int LocateTokenExt(TokenList tokens, int position, int fromIndex, int untilIndex) {\r\n      if (fromIndex + 1 >= untilIndex) return fromIndex;\r\n      int midIndex = (fromIndex + untilIndex) / 2;\r\n      Token middleToken = tokens[midIndex];\r\n      if (middleToken.Location.Position <= position)\r\n        return LocateTokenExt(tokens, position, midIndex, untilIndex);\r\n      else\r\n        return LocateTokenExt(tokens, position, fromIndex, midIndex);\r\n    }\r\n    #endregion\r\n\r\n\r\n  }//EditorViewAdapter class\r\n\r\n}//namespace\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/FastColoredTextBoxHighlighter.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\n// Aknowledgments\r\n// This module borrows code and ideas from TinyPG framework by Herre Kuijpers,\r\n// specifically TextMarker.cs and TextHighlighter.cs classes.\r\n// http://www.codeproject.com/KB/recipes/TinyPG.aspx\r\n// Written by Alexey Yakovlev <yallie@yandex.ru>, based on RichTextBoxHighlighter\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing System.Drawing;\r\nusing System.Drawing.Drawing2D;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Runtime.InteropServices;\r\nusing Irony.Parsing;\r\nusing System.Diagnostics;\r\nusing FastColoredTextBoxNS;\r\n\r\nnamespace Irony.GrammarExplorer.Highlighter {\r\n\r\n  /// <summary>\r\n  /// Highlights text inside FastColoredTextBox control.\r\n  /// </summary>\r\n  public class FastColoredTextBoxHighlighter : NativeWindow, IDisposable, IUIThreadInvoker {\r\n    public FastColoredTextBox TextBox;\r\n    private readonly Dictionary<TokenColor, Style> TokenStyles = new Dictionary<TokenColor, Style>();\r\n    private readonly Style DefaultTokenStyle = new TextStyle(Brushes.Black, null, FontStyle.Regular);\r\n    private readonly Style ErrorTokenStyle = new WavyLineStyle(240, Color.Red);\r\n    public readonly EditorAdapter Adapter;\r\n    public readonly EditorViewAdapter ViewAdapter;\r\n    public readonly LanguageData Language;\r\n\r\n    private IntPtr _savedEventMask = IntPtr.Zero;\r\n    bool _colorizing;\r\n    bool _disposed;\r\n\r\n    #region Constructor, initialization and disposing\r\n    public FastColoredTextBoxHighlighter(FastColoredTextBox textBox, LanguageData language) {\r\n      TextBox = textBox;\r\n      Adapter = new EditorAdapter(language);\r\n      ViewAdapter = new EditorViewAdapter(Adapter, this);\r\n      Language = language;\r\n      InitStyles();\r\n      InitBraces();\r\n      Connect();\r\n      UpdateViewRange();\r\n      ViewAdapter.SetNewText(TextBox.Text);\r\n    }\r\n\r\n    private void Connect() {\r\n      TextBox.MouseMove += TextBox_MouseMove;\r\n      TextBox.TextChanged += TextBox_TextChanged;\r\n      TextBox.KeyDown += TextBox_KeyDown;\r\n      TextBox.VisibleRangeChanged += TextBox_ScrollResize;\r\n      TextBox.SizeChanged += TextBox_ScrollResize;\r\n      TextBox.Disposed += TextBox_Disposed;\r\n      ViewAdapter.ColorizeTokens += Adapter_ColorizeTokens;\r\n      this.AssignHandle(TextBox.Handle);\r\n    }\r\n\r\n    private void Disconnect() {\r\n      if (TextBox != null) {\r\n        TextBox.MouseMove -= TextBox_MouseMove;\r\n        TextBox.TextChanged -= TextBox_TextChanged;\r\n        TextBox.KeyDown -= TextBox_KeyDown;\r\n        TextBox.Disposed -= TextBox_Disposed;\r\n        TextBox.VisibleRangeChanged -= TextBox_ScrollResize;\r\n        TextBox.SizeChanged -= TextBox_ScrollResize;\r\n      }\r\n      TextBox = null;\r\n    }\r\n\r\n    public void Dispose() {\r\n      Adapter.Stop();\r\n      _disposed = true;\r\n      Disconnect();\r\n      this.ReleaseHandle();\r\n      GC.SuppressFinalize(this);\r\n    }\r\n\r\n    private void InitStyles() {\r\n      var commentStyle = new TextStyle(Brushes.Green, null, FontStyle.Italic);\r\n      var keywordStyle = new TextStyle(Brushes.Blue, null, FontStyle.Bold);\r\n      var literalStyle = new TextStyle(Brushes.DarkRed, null, FontStyle.Regular);\r\n\r\n      TokenStyles[TokenColor.Comment] = commentStyle;\r\n      TokenStyles[TokenColor.Identifier] = DefaultTokenStyle;\r\n      TokenStyles[TokenColor.Keyword] = keywordStyle;\r\n      TokenStyles[TokenColor.Number] = literalStyle;\r\n      TokenStyles[TokenColor.String] = literalStyle;\r\n      TokenStyles[TokenColor.Text] = DefaultTokenStyle;\r\n\r\n      TextBox.ClearStylesBuffer();\r\n      TextBox.AddStyle(DefaultTokenStyle);\r\n      TextBox.AddStyle(ErrorTokenStyle);\r\n      TextBox.AddStyle(commentStyle);\r\n      TextBox.AddStyle(keywordStyle);\r\n      TextBox.AddStyle(literalStyle);\r\n      TextBox.BracketsStyle = new MarkerStyle(new SolidBrush(Color.FromArgb(50, Color.Blue)));\r\n      TextBox.BracketsStyle2 = new MarkerStyle(new SolidBrush(Color.FromArgb(70, Color.Green)));\r\n    }\r\n\r\n    private void InitBraces() {\r\n      // select the first two pair of braces with the length of exactly one char (FCTB restrictions)\r\n      var braces = Language.Grammar.KeyTerms\r\n        .Select(pair => pair.Value)\r\n        .Where(term => term.Flags.IsSet(TermFlags.IsOpenBrace))\r\n        .Where(term => term.IsPairFor != null && term.IsPairFor is KeyTerm)\r\n        .Where(term => term.Text.Length == 1)\r\n        .Where(term => ((KeyTerm)term.IsPairFor).Text.Length == 1)\r\n        .Take(2);\r\n      if (braces.Any()) {\r\n        // first pair\r\n        var brace = braces.First();\r\n        TextBox.LeftBracket = brace.Text.First();\r\n        TextBox.RightBracket = ((KeyTerm)brace.IsPairFor).Text.First();\r\n        // second pair\r\n        if (braces.Count() > 1) {\r\n          brace = braces.Last();\r\n          TextBox.LeftBracket2 = brace.Text.First();\r\n          TextBox.RightBracket2 = ((KeyTerm)brace.IsPairFor).Text.First();\r\n        }\r\n      }\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region TextBox event handlers\r\n\r\n    void TextBox_MouseMove(object sender, MouseEventArgs e) {\r\n      //TODO: implement showing tip\r\n    }\r\n\r\n    void TextBox_KeyDown(object sender, KeyEventArgs e) {\r\n      //TODO: implement showing intellisense hints or drop-downs\r\n    }\r\n\r\n    void TextBox_TextChanged(object sender, TextChangedEventArgs e) {\r\n      //if we are here while colorizing, it means the \"change\" event is a result of our coloring action\r\n      if (_colorizing) return;\r\n      ViewAdapter.SetNewText(TextBox.Text);\r\n    }\r\n\r\n    void TextBox_ScrollResize(object sender, EventArgs e) {\r\n      UpdateViewRange();\r\n    }\r\n\r\n    void TextBox_Disposed(object sender, EventArgs e) {\r\n      Dispose();\r\n    }\r\n\r\n    private void UpdateViewRange() {\r\n      //int minpos = TextBox.GetCharIndexFromPosition(new Point(0, 0));\r\n      //int maxpos = TextBox.GetCharIndexFromPosition(new Point(TextBox.ClientSize.Width, TextBox.ClientSize.Height));\r\n      ViewAdapter.SetViewRange(0, TextBox.Text.Length);\r\n    }\r\n    #endregion\r\n\r\n    #region WinAPI\r\n    // some winapís required\r\n    [DllImport(\"user32\", CharSet =  CharSet.Auto)]\r\n    private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);\r\n\r\n    [DllImport(\"user32.dll\")]\r\n    private static extern bool PostMessageA(IntPtr hWnd, int nBar, int wParam, int lParam);\r\n\r\n    [DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\r\n    private static extern int GetScrollPos(int hWnd, int nBar);\r\n\r\n    [DllImport(\"user32.dll\")]\r\n    private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);\r\n\r\n    private const int WM_SETREDRAW = 0x000B;\r\n    private const int WM_USER = 0x400;\r\n    private const int EM_GETEVENTMASK = (WM_USER + 59);\r\n    private const int EM_SETEVENTMASK = (WM_USER + 69);\r\n    private const int SB_HORZ = 0x0;\r\n    private const int SB_VERT = 0x1;\r\n    private const int WM_HSCROLL = 0x114;\r\n    private const int WM_VSCROLL = 0x115;\r\n    private const int SB_THUMBPOSITION = 4;\r\n    const int WM_PAINT = 0x000F;\r\n\r\n    private int HScrollPos {\r\n      get {\r\n        //sometimes explodes with null reference exception\r\n        return GetScrollPos((int)TextBox.Handle, SB_HORZ);\r\n      }\r\n      set {\r\n        SetScrollPos((IntPtr)TextBox.Handle, SB_HORZ, value, true);\r\n        PostMessageA((IntPtr)TextBox.Handle, WM_HSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0);\r\n      }\r\n    }\r\n\r\n    private int VScrollPos {\r\n      get {\r\n        return GetScrollPos((int)TextBox.Handle, SB_VERT);\r\n      }\r\n      set {\r\n        SetScrollPos((IntPtr)TextBox.Handle, SB_VERT, value, true);\r\n        PostMessageA((IntPtr)TextBox.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0);\r\n      }\r\n    }\r\n    #endregion\r\n\r\n    #region Colorizing tokens\r\n    public void LockTextBox() {\r\n      // Stop redrawing:\r\n      TextBox.BeginUpdate();\r\n      SendMessage(TextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero);\r\n      // Stop sending of events:\r\n      _savedEventMask = SendMessage(TextBox.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero);\r\n      SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, IntPtr.Zero);\r\n    }\r\n\r\n    public void UnlockTextBox() {\r\n      // turn on events\r\n      SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, _savedEventMask);\r\n      // turn on redrawing\r\n      SendMessage(TextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero);\r\n      TextBox.EndUpdate();\r\n    }\r\n\r\n    void Adapter_ColorizeTokens(object sender, ColorizeEventArgs args) {\r\n      if (_disposed) return;\r\n      _colorizing = true;\r\n      TextBox.BeginUpdate();\r\n      try {\r\n        foreach (Token tkn in args.Tokens) {\r\n          var tokenRange = TextBox.GetRange(tkn.Location.Position, tkn.Location.Position + tkn.Length);\r\n          var tokenStyle = GetTokenStyle(tkn);\r\n          tokenRange.ClearStyle(StyleIndex.All);\r\n          tokenRange.SetStyle(tokenStyle);\r\n        }\r\n      } finally {\r\n        TextBox.EndUpdate();\r\n        _colorizing = false;\r\n      }\r\n    }\r\n\r\n    private Style GetTokenStyle(Token token) {\r\n      if (token.IsError()) return ErrorTokenStyle;\r\n      if (token.EditorInfo == null) return DefaultTokenStyle;\r\n      //Right now we scan source, not parse; initially all keywords are recognized as Identifiers; then they are \"backpatched\"\r\n      // by parser when it detects that it is in fact keyword from Grammar. So now this backpatching does not happen,\r\n      // so we have to detect keywords here\r\n      var styleIndex = token.EditorInfo.Color;\r\n      if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null && token.KeyTerm.Flags.IsSet(TermFlags.IsKeyword)) {\r\n        styleIndex = token.KeyTerm.EditorInfo.Color;\r\n      }//if\r\n      Style result;\r\n      if (TokenStyles.TryGetValue(styleIndex, out result)) return result;\r\n      return DefaultTokenStyle;\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region IUIThreadInvoker Members\r\n\r\n    public void InvokeOnUIThread(ColorizeMethod colorize) {\r\n      TextBox.BeginInvoke(new MethodInvoker(colorize));\r\n    }\r\n\r\n    #endregion\r\n\r\n  }//class\r\n\r\n}//namespace\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/RichTextBoxHighlighter.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution. \r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the \r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\n// Aknowledgments\r\n// This module borrows code and ideas from TinyPG framework by Herre Kuijpers,\r\n// specifically TextMarker.cs and TextHighlighter.cs classes.\r\n// http://www.codeproject.com/KB/recipes/TinyPG.aspx\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing System.Drawing;\r\nusing System.Drawing.Drawing2D;\r\nusing System.Threading;\r\nusing System.Runtime.InteropServices;\r\nusing Irony.Parsing;\r\nusing System.Diagnostics;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n\r\n  public class TokenColorTable : Dictionary<TokenColor, Color> { }\r\n\r\n  public class RichTextBoxHighlighter : NativeWindow, IDisposable, IUIThreadInvoker {\r\n    public RichTextBox TextBox;\r\n    public readonly TokenColorTable TokenColors = new TokenColorTable();\r\n    public readonly EditorAdapter Adapter; \r\n    public readonly EditorViewAdapter ViewAdapter;\r\n\r\n    private IntPtr _savedEventMask = IntPtr.Zero;\r\n    bool _colorizing;\r\n    bool _disposed;\r\n\r\n    #region constructor, initialization and disposing\r\n    public RichTextBoxHighlighter(RichTextBox textBox, LanguageData language) {\r\n      TextBox = textBox;\r\n      Adapter = new EditorAdapter(language); \r\n      ViewAdapter = new EditorViewAdapter(Adapter, this);\r\n      InitColorTable();\r\n      Connect();\r\n      UpdateViewRange();\r\n      ViewAdapter.SetNewText(TextBox.Text);\r\n    }\r\n    private void Connect() {\r\n      TextBox.MouseMove += TextBox_MouseMove;\r\n      TextBox.TextChanged += TextBox_TextChanged;\r\n      TextBox.KeyDown += TextBox_KeyDown;\r\n      TextBox.VScroll += TextBox_ScrollResize;\r\n      TextBox.HScroll += TextBox_ScrollResize;\r\n      TextBox.SizeChanged += TextBox_ScrollResize;\r\n      TextBox.Disposed += TextBox_Disposed;\r\n      ViewAdapter.ColorizeTokens += Adapter_ColorizeTokens;\r\n      this.AssignHandle(TextBox.Handle);\r\n    }\r\n\r\n    private void Disconnect() {\r\n      if (TextBox != null) {\r\n        TextBox.MouseMove -= TextBox_MouseMove;\r\n        TextBox.TextChanged -= TextBox_TextChanged;\r\n        TextBox.KeyDown -= TextBox_KeyDown;\r\n        TextBox.Disposed -= TextBox_Disposed;\r\n        TextBox.VScroll -= TextBox_ScrollResize;\r\n        TextBox.HScroll -= TextBox_ScrollResize;\r\n        TextBox.SizeChanged -= TextBox_ScrollResize;\r\n      }\r\n      TextBox = null;\r\n    }\r\n\r\n    public void Dispose() {\r\n      Adapter.Stop();\r\n      _disposed = true; \r\n      Disconnect();\r\n      this.ReleaseHandle();\r\n      GC.SuppressFinalize(this);\r\n\r\n    }\r\n    private void InitColorTable() {\r\n      TokenColors[TokenColor.Comment] = Color.Green;\r\n      TokenColors[TokenColor.Identifier] = Color.Black;\r\n      TokenColors[TokenColor.Keyword] = Color.Blue;\r\n      TokenColors[TokenColor.Number] = Color.DarkRed;\r\n      TokenColors[TokenColor.String] = Color.DarkSlateGray; \r\n      TokenColors[TokenColor.Text] = Color.Black;\r\n\r\n    }\r\n    #endregion\r\n\r\n    #region TextBox event handlers\r\n\r\n    void TextBox_MouseMove(object sender, MouseEventArgs e) {\r\n      //TODO: implement showing tip\r\n    }\r\n\r\n    void TextBox_KeyDown(object sender, KeyEventArgs e) {\r\n      //TODO: implement showing intellisense hints or drop-downs\r\n    }\r\n\r\n    void TextBox_TextChanged(object sender, EventArgs e) {\r\n      //if we are here while colorizing, it means the \"change\" event is a result of our coloring action\r\n      if (_colorizing) return; \r\n      ViewAdapter.SetNewText(TextBox.Text);\r\n    }\r\n    void TextBox_ScrollResize(object sender, EventArgs e) {\r\n      UpdateViewRange();\r\n    }\r\n\r\n\r\n    void TextBox_Disposed(object sender, EventArgs e) {\r\n      Dispose();\r\n    }\r\n    private void UpdateViewRange() {\r\n      int minpos = TextBox.GetCharIndexFromPosition(new Point(0, 0));\r\n      int maxpos = TextBox.GetCharIndexFromPosition(new Point(TextBox.ClientSize.Width, TextBox.ClientSize.Height));\r\n      ViewAdapter.SetViewRange(minpos, maxpos);\r\n    }\r\n    #endregion\r\n\r\n    #region WinAPI\r\n    // some winapís required\r\n    [DllImport(\"user32\", CharSet =  CharSet.Auto)]\r\n    private extern static IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);\r\n\r\n    [DllImport(\"user32.dll\")]\r\n    private static extern bool PostMessageA(IntPtr hWnd, int nBar, int wParam, int lParam);\r\n\r\n    [DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\r\n    private static extern int GetScrollPos(int hWnd, int nBar);\r\n\r\n    [DllImport(\"user32.dll\")]\r\n    private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);\r\n\r\n    private const int WM_SETREDRAW = 0x000B;\r\n    private const int WM_USER = 0x400;\r\n    private const int EM_GETEVENTMASK = (WM_USER + 59);\r\n    private const int EM_SETEVENTMASK = (WM_USER + 69);\r\n    private const int SB_HORZ = 0x0;\r\n    private const int SB_VERT = 0x1;\r\n    private const int WM_HSCROLL = 0x114;\r\n    private const int WM_VSCROLL = 0x115;\r\n    private const int SB_THUMBPOSITION = 4;\r\n    const int WM_PAINT = 0x000F;\r\n\r\n    private int HScrollPos {\r\n      get {\r\n        //sometimes explodes with null reference exception\r\n        return GetScrollPos((int)TextBox.Handle, SB_HORZ); \r\n      }\r\n      set {\r\n        SetScrollPos((IntPtr)TextBox.Handle, SB_HORZ, value, true);\r\n        PostMessageA((IntPtr)TextBox.Handle, WM_HSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0);\r\n      }\r\n    }\r\n\r\n    private int VScrollPos {\r\n      get {\r\n        return GetScrollPos((int)TextBox.Handle, SB_VERT); \r\n      }\r\n      set {\r\n        SetScrollPos((IntPtr)TextBox.Handle, SB_VERT, value, true);\r\n        PostMessageA((IntPtr)TextBox.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * value, 0);\r\n      }\r\n    }\r\n    #endregion\r\n\r\n    #region Colorizing tokens\r\n    public void LockTextBox() {\r\n      // Stop redrawing:  \r\n      SendMessage(TextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero );\r\n      // Stop sending of events:  \r\n      _savedEventMask = SendMessage(TextBox.Handle, EM_GETEVENTMASK, 0,  IntPtr.Zero);\r\n      //SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, IntPtr.Zero);\r\n    }\r\n\r\n    public void UnlockTextBox() {\r\n        // turn on events  \r\n        SendMessage(TextBox.Handle, EM_SETEVENTMASK, 0, _savedEventMask);\r\n        // turn on redrawing  \r\n        SendMessage(TextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero);\r\n    }\r\n\r\n    void Adapter_ColorizeTokens(object sender, ColorizeEventArgs args) {\r\n      if (_disposed) return; \r\n      //Debug.WriteLine(\"Coloring \" + args.Tokens.Count + \" tokens.\");\r\n      _colorizing = true;\r\n      \r\n      int hscroll = HScrollPos;\r\n      int vscroll = VScrollPos;\r\n      int selstart = TextBox.SelectionStart;\r\n      int selLength = TextBox.SelectionLength;\r\n      LockTextBox();\r\n      try {\r\n        foreach (Token tkn in args.Tokens) {\r\n          Color color = GetTokenColor(tkn);\r\n          TextBox.Select(tkn.Location.Position, tkn.Length);\r\n          TextBox.SelectionColor = color;\r\n        }\r\n      } finally {\r\n        TextBox.Select(selstart, selLength);\r\n        HScrollPos = hscroll;\r\n        VScrollPos = vscroll;\r\n        UnlockTextBox();\r\n        _colorizing = false;\r\n      }\r\n      TextBox.Invalidate();\r\n    }\r\n\r\n    private Color GetTokenColor(Token token) {\r\n      if (token.EditorInfo == null) return Color.Black; \r\n      //Right now we scan source, not parse; initially all keywords are recognized as Identifiers; then they are \"backpatched\"\r\n      // by parser when it detects that it is in fact keyword from Grammar. So now this backpatching does not happen, \r\n      // so we have to detect keywords here\r\n      var colorIndex = token.EditorInfo.Color;\r\n      if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null && token.KeyTerm.Flags.IsSet(TermFlags.IsKeyword)) {\r\n        colorIndex = token.KeyTerm.EditorInfo.Color;\r\n      }//if\r\n      Color result;\r\n      if (TokenColors.TryGetValue(colorIndex, out result)) return result;\r\n      return Color.Black;\r\n    }\r\n    #endregion\r\n\r\n\r\n    #region IUIThreadInvoker Members\r\n\r\n    public void InvokeOnUIThread(ColorizeMethod colorize) {\r\n      TextBox.BeginInvoke(new MethodInvoker(colorize)); \r\n    }\r\n\r\n    #endregion\r\n  }//class\r\n\r\n}//namespace \r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Highlighter/WavyLineStyle.cs",
    "content": "﻿// Written by Alexey Yakovlev <yallie@yandex.ru>\r\n//\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Drawing;\r\nusing FastColoredTextBoxNS;\r\n\r\nnamespace Irony.GrammarExplorer.Highlighter {\r\n  /// <summary>\r\n  /// This style draws a wavy line below a given text range.\r\n  /// </summary>\r\n  public class WavyLineStyle : Style {\r\n\r\n    public WavyLineStyle(int alpha, Color color) {\r\n      Pen = new Pen(Color.FromArgb(alpha, color));\r\n    }\r\n\r\n    private Pen Pen { get; set; }\r\n\r\n    public override void Draw(Graphics gr, Point pos, Range range) {\r\n      var size = GetSizeOfRange(range);\r\n      var start = new Point(pos.X, pos.Y + size.Height - 1);\r\n      var end = new Point(pos.X + size.Width, pos.Y + size.Height - 1);\r\n      DrawWavyLine(gr, start, end);\r\n    }\r\n\r\n    private void DrawWavyLine(Graphics graphics, Point start, Point end) {\r\n      if (end.X - start.X < 2) {\r\n        graphics.DrawLine(Pen, start, end);\r\n        return;\r\n      }\r\n\r\n      var offset = -1;\r\n      var points = new List<Point>();\r\n      for (int i = start.X; i <= end.X; i += 2) {\r\n        points.Add(new Point(i, start.Y + offset));\r\n        offset = -offset;\r\n      }\r\n\r\n      graphics.DrawLines(Pen, points.ToArray());\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/IronyExplorer.GrammarExplorer.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{BA6C3D6A-9240-45FD-A63B-506EE43A5CA6}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>IronyExplorer.GrammarExplorer</RootNamespace>\n    <AssemblyName>IronyExplorer.GrammarExplorer</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"FastColoredTextBox\">\n      <HintPath>..\\..\\libs\\FastColoredTextBox\\FastColoredTextBox.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Irony, Version=1.1.0.0, Culture=neutral, PublicKeyToken=ca48ace7223ead47, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Irony.1.2.0\\lib\\netstandard2.0\\Irony.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Irony.Interpreter, Version=1.1.0.0, Culture=neutral, PublicKeyToken=ca48ace7223ead47, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Irony.Interpreter.1.2.0\\lib\\netstandard2.0\\Irony.Interpreter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"fmGrammarExplorer.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"fmGrammarExplorer.Designer.cs\">\n      <DependentUpon>fmGrammarExplorer.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"fmSelectGrammars.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"fmSelectGrammars.Designer.cs\">\n      <DependentUpon>fmSelectGrammars.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"fmShowException.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"fmShowException.Designer.cs\">\n      <DependentUpon>fmShowException.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"GrammarItemList.cs\" />\n    <Compile Include=\"GrammarLoader.cs\" />\n    <Compile Include=\"Highlighter\\EditorAdapter.cs\" />\n    <Compile Include=\"Highlighter\\EditorViewAdapter.cs\" />\n    <Compile Include=\"Highlighter\\FastColoredTextBoxHighlighter.cs\" />\n    <Compile Include=\"Highlighter\\RichTextBoxHighlighter.cs\" />\n    <Compile Include=\"Highlighter\\WavyLineStyle.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"fmGrammarExplorer.resx\">\n      <DependentUpon>fmGrammarExplorer.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"fmSelectGrammars.resx\">\n      <DependentUpon>fmSelectGrammars.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"fmShowException.resx\">\n      <DependentUpon>fmShowException.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Highlighter\\AboutCodeHighlighter.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Program.cs",
    "content": "#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution. \r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the \r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Windows.Forms;\r\nusing System.Diagnostics;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  class Program : MarshalByRefObject {\r\n    /// <summary>\r\n    /// The main entry point for the application.\r\n    /// </summary>\r\n    [STAThread]\r\n    static void Main() {\r\n      var program = CreateInstanceInSeparateDomain();\r\n      program.RunApplication();\r\n    }\r\n\r\n    static Program CreateInstanceInSeparateDomain() {\r\n      var setup = new AppDomainSetup {\r\n        ShadowCopyFiles = true.ToString()\r\n      };\r\n\r\n      var domain = AppDomain.CreateDomain(\"HostedDomain\", null, setup);\r\n      return (Program)domain.CreateInstanceAndUnwrap(typeof(Program).Assembly.FullName, typeof(Program).FullName);\r\n    }\r\n\r\n    void RunApplication() {\r\n      Application.EnableVisualStyles();\r\n      Application.SetCompatibleTextRenderingDefault(false);\r\n      Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);\r\n      AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\r\n      Application.Run(new fmGrammarExplorer());\r\n    }\r\n\r\n    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {\r\n      fmShowException.ShowException(e.Exception);\r\n      Debug.Write(\"Exception!: ############################################## \\n\" + e.Exception.ToString());\r\n    }\r\n\r\n    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {\r\n      Exception ex = e.ExceptionObject as Exception;\r\n      string message = (ex == null ? e.ExceptionObject.ToString() : ex.Message);\r\n      if (ex == null) {\r\n        Debug.Write(\"Exception!: ############################################## \\n\" + e.ExceptionObject.ToString());\r\n        MessageBox.Show(message, \"Exception\");\r\n      } else {\r\n        fmShowException.ShowException(ex);\r\n      }\r\n    }\r\n\r\n  }\r\n}"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Properties/AssemblyInfo.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution. \r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the \r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"Irony.GrammarExplorer\")]\r\n[assembly: AssemblyDescription(\"Grammar Explorer for Irony\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"GrammarExplorer\")]\r\n[assembly: AssemblyCopyright(\"Copyright © 2010 Roman Ivantsov\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"09b192b9-9b3a-470b-a753-9f9c32bd81bc\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.18034\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace Irony.GrammarExplorer.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Irony.GrammarExplorer.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace IronyExplorer.GrammarExplorer.Properties {\r\n    \r\n    \r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"15.0.1.0\")]\r\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r\n        \r\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r\n        \r\n        public static Settings Default {\r\n            get {\r\n                return defaultInstance;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\r\n        public string SourceSample {\r\n            get {\r\n                return ((string)(this[\"SourceSample\"]));\r\n            }\r\n            set {\r\n                this[\"SourceSample\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\r\n        public int LanguageIndex {\r\n            get {\r\n                return ((int)(this[\"LanguageIndex\"]));\r\n            }\r\n            set {\r\n                this[\"LanguageIndex\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\r\n        public string SearchPattern {\r\n            get {\r\n                return ((string)(this[\"SearchPattern\"]));\r\n            }\r\n            set {\r\n                this[\"SearchPattern\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\r\n        public string Grammars {\r\n            get {\r\n                return ((string)(this[\"Grammars\"]));\r\n            }\r\n            set {\r\n                this[\"Grammars\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"False\")]\r\n        public bool EnableTrace {\r\n            get {\r\n                return ((bool)(this[\"EnableTrace\"]));\r\n            }\r\n            set {\r\n                this[\"EnableTrace\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"False\")]\r\n        public bool DisableHili {\r\n            get {\r\n                return ((bool)(this[\"DisableHili\"]));\r\n            }\r\n            set {\r\n                this[\"DisableHili\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"True\")]\r\n        public bool AutoRefresh {\r\n            get {\r\n                return ((bool)(this[\"AutoRefresh\"]));\r\n            }\r\n            set {\r\n                this[\"AutoRefresh\"] = value;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"IronyExplorer.GrammarExplorer.Properties\" GeneratedClassName=\"Settings\">\n  <Profiles />\n  <Settings>\n    <Setting Name=\"SourceSample\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"LanguageIndex\" Type=\"System.Int32\" Scope=\"User\">\n      <Value Profile=\"(Default)\">0</Value>\n    </Setting>\n    <Setting Name=\"SearchPattern\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"Grammars\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"EnableTrace\" Type=\"System.Boolean\" Scope=\"User\">\n      <Value Profile=\"(Default)\">False</Value>\n    </Setting>\n    <Setting Name=\"DisableHili\" Type=\"System.Boolean\" Scope=\"User\">\n      <Value Profile=\"(Default)\">False</Value>\n    </Setting>\n    <Setting Name=\"AutoRefresh\" Type=\"System.Boolean\" Scope=\"User\">\n      <Value Profile=\"(Default)\">True</Value>\n    </Setting>\n  </Settings>\n</SettingsFile>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmGrammarExplorer.Designer.cs",
    "content": "namespace Irony.GrammarExplorer {\r\n  partial class fmGrammarExplorer {\r\n    /// <summary>\r\n    /// Required designer variable.\r\n    /// </summary>\r\n    private System.ComponentModel.IContainer components = null;\r\n\r\n    /// <summary>\r\n    /// Clean up any resources being used.\r\n    /// </summary>\r\n    /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n    protected override void Dispose(bool disposing) {\r\n      if (disposing && (components != null))\r\n      {\r\n        components.Dispose();\r\n      }\r\n      base.Dispose(disposing);\r\n    }\r\n\r\n    #region Windows Form Designer generated code\r\n\r\n    /// <summary>\r\n    /// Required method for Designer support - do not modify\r\n    /// the contents of this method with the code editor.\r\n    /// </summary>\r\n    private void InitializeComponent() {\r\n      this.components = new System.ComponentModel.Container();\r\n      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fmGrammarExplorer));\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();\r\n      this.tabGrammar = new System.Windows.Forms.TabControl();\r\n      this.pageTerminals = new System.Windows.Forms.TabPage();\r\n      this.txtTerms = new System.Windows.Forms.TextBox();\r\n      this.pageNonTerms = new System.Windows.Forms.TabPage();\r\n      this.txtNonTerms = new System.Windows.Forms.TextBox();\r\n      this.pageParserStates = new System.Windows.Forms.TabPage();\r\n      this.txtParserStates = new System.Windows.Forms.TextBox();\r\n      this.pageTest = new System.Windows.Forms.TabPage();\r\n      this.txtSource = new FastColoredTextBoxNS.FastColoredTextBox();\r\n      this.panel1 = new System.Windows.Forms.Panel();\r\n      this.btnLocate = new System.Windows.Forms.Button();\r\n      this.chkDisableHili = new System.Windows.Forms.CheckBox();\r\n      this.btnRun = new System.Windows.Forms.Button();\r\n      this.btnFileOpen = new System.Windows.Forms.Button();\r\n      this.btnParse = new System.Windows.Forms.Button();\r\n      this.splitter3 = new System.Windows.Forms.Splitter();\r\n      this.tabOutput = new System.Windows.Forms.TabControl();\r\n      this.pageSyntaxTree = new System.Windows.Forms.TabPage();\r\n      this.tvParseTree = new System.Windows.Forms.TreeView();\r\n      this.pageAst = new System.Windows.Forms.TabPage();\r\n      this.tvAst = new System.Windows.Forms.TreeView();\r\n      this.chkParserTrace = new System.Windows.Forms.CheckBox();\r\n      this.pnlLang = new System.Windows.Forms.Panel();\r\n      this.btnRefresh = new System.Windows.Forms.Button();\r\n      this.chkAutoRefresh = new System.Windows.Forms.CheckBox();\r\n      this.btnManageGrammars = new System.Windows.Forms.Button();\r\n      this.lblSearchError = new System.Windows.Forms.Label();\r\n      this.btnSearch = new System.Windows.Forms.Button();\r\n      this.txtSearch = new System.Windows.Forms.TextBox();\r\n      this.label2 = new System.Windows.Forms.Label();\r\n      this.cboGrammars = new System.Windows.Forms.ComboBox();\r\n      this.menuGrammars = new System.Windows.Forms.ContextMenuStrip(this.components);\r\n      this.miAdd = new System.Windows.Forms.ToolStripMenuItem();\r\n      this.miRemove = new System.Windows.Forms.ToolStripMenuItem();\r\n      this.miRemoveAll = new System.Windows.Forms.ToolStripMenuItem();\r\n      this.dlgOpenFile = new System.Windows.Forms.OpenFileDialog();\r\n      this.dlgSelectAssembly = new System.Windows.Forms.OpenFileDialog();\r\n      this.splitBottom = new System.Windows.Forms.Splitter();\r\n      this.tabBottom = new System.Windows.Forms.TabControl();\r\n      this.pageLanguage = new System.Windows.Forms.TabPage();\r\n      this.grpLanguageInfo = new System.Windows.Forms.GroupBox();\r\n      this.label8 = new System.Windows.Forms.Label();\r\n      this.lblParserStateCount = new System.Windows.Forms.Label();\r\n      this.lblLanguageDescr = new System.Windows.Forms.Label();\r\n      this.txtGrammarComments = new System.Windows.Forms.TextBox();\r\n      this.label11 = new System.Windows.Forms.Label();\r\n      this.label9 = new System.Windows.Forms.Label();\r\n      this.lblLanguageVersion = new System.Windows.Forms.Label();\r\n      this.label10 = new System.Windows.Forms.Label();\r\n      this.lblLanguage = new System.Windows.Forms.Label();\r\n      this.label4 = new System.Windows.Forms.Label();\r\n      this.label6 = new System.Windows.Forms.Label();\r\n      this.lblParserConstrTime = new System.Windows.Forms.Label();\r\n      this.pageGrammarErrors = new System.Windows.Forms.TabPage();\r\n      this.gridGrammarErrors = new System.Windows.Forms.DataGridView();\r\n      this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.pageParserOutput = new System.Windows.Forms.TabPage();\r\n      this.groupBox1 = new System.Windows.Forms.GroupBox();\r\n      this.gridCompileErrors = new System.Windows.Forms.DataGridView();\r\n      this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.grpCompileInfo = new System.Windows.Forms.GroupBox();\r\n      this.label12 = new System.Windows.Forms.Label();\r\n      this.lblParseErrorCount = new System.Windows.Forms.Label();\r\n      this.label1 = new System.Windows.Forms.Label();\r\n      this.lblParseTime = new System.Windows.Forms.Label();\r\n      this.label7 = new System.Windows.Forms.Label();\r\n      this.lblSrcLineCount = new System.Windows.Forms.Label();\r\n      this.label3 = new System.Windows.Forms.Label();\r\n      this.lblSrcTokenCount = new System.Windows.Forms.Label();\r\n      this.pageParserTrace = new System.Windows.Forms.TabPage();\r\n      this.grpParserActions = new System.Windows.Forms.GroupBox();\r\n      this.gridParserTrace = new System.Windows.Forms.DataGridView();\r\n      this.State = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.Stack = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.Input = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.Action = new System.Windows.Forms.DataGridViewTextBoxColumn();\r\n      this.splitter1 = new System.Windows.Forms.Splitter();\r\n      this.grpTokens = new System.Windows.Forms.GroupBox();\r\n      this.lstTokens = new System.Windows.Forms.ListBox();\r\n      this.pnlParserTraceTop = new System.Windows.Forms.Panel();\r\n      this.chkExcludeComments = new System.Windows.Forms.CheckBox();\r\n      this.lblTraceComment = new System.Windows.Forms.Label();\r\n      this.pageOutput = new System.Windows.Forms.TabPage();\r\n      this.txtOutput = new System.Windows.Forms.TextBox();\r\n      this.pnlRuntimeInfo = new System.Windows.Forms.Panel();\r\n      this.label14 = new System.Windows.Forms.Label();\r\n      this.lblGCCount = new System.Windows.Forms.Label();\r\n      this.label13 = new System.Windows.Forms.Label();\r\n      this.lnkShowErrStack = new System.Windows.Forms.LinkLabel();\r\n      this.lnkShowErrLocation = new System.Windows.Forms.LinkLabel();\r\n      this.label5 = new System.Windows.Forms.Label();\r\n      this.lblRunTime = new System.Windows.Forms.Label();\r\n      this.toolTip = new System.Windows.Forms.ToolTip(this.components);\r\n      this.tabGrammar.SuspendLayout();\r\n      this.pageTerminals.SuspendLayout();\r\n      this.pageNonTerms.SuspendLayout();\r\n      this.pageParserStates.SuspendLayout();\r\n      this.pageTest.SuspendLayout();\r\n      this.panel1.SuspendLayout();\r\n      this.tabOutput.SuspendLayout();\r\n      this.pageSyntaxTree.SuspendLayout();\r\n      this.pageAst.SuspendLayout();\r\n      this.pnlLang.SuspendLayout();\r\n      this.menuGrammars.SuspendLayout();\r\n      this.tabBottom.SuspendLayout();\r\n      this.pageLanguage.SuspendLayout();\r\n      this.grpLanguageInfo.SuspendLayout();\r\n      this.pageGrammarErrors.SuspendLayout();\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridGrammarErrors)).BeginInit();\r\n      this.pageParserOutput.SuspendLayout();\r\n      this.groupBox1.SuspendLayout();\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridCompileErrors)).BeginInit();\r\n      this.grpCompileInfo.SuspendLayout();\r\n      this.pageParserTrace.SuspendLayout();\r\n      this.grpParserActions.SuspendLayout();\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridParserTrace)).BeginInit();\r\n      this.grpTokens.SuspendLayout();\r\n      this.pnlParserTraceTop.SuspendLayout();\r\n      this.pageOutput.SuspendLayout();\r\n      this.pnlRuntimeInfo.SuspendLayout();\r\n      this.SuspendLayout();\r\n      // \r\n      // tabGrammar\r\n      // \r\n      this.tabGrammar.Controls.Add(this.pageTerminals);\r\n      this.tabGrammar.Controls.Add(this.pageNonTerms);\r\n      this.tabGrammar.Controls.Add(this.pageParserStates);\r\n      this.tabGrammar.Controls.Add(this.pageTest);\r\n      this.tabGrammar.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.tabGrammar.Location = new System.Drawing.Point(0, 29);\r\n      this.tabGrammar.Name = \"tabGrammar\";\r\n      this.tabGrammar.SelectedIndex = 0;\r\n      this.tabGrammar.Size = new System.Drawing.Size(1022, 381);\r\n      this.tabGrammar.TabIndex = 0;\r\n      // \r\n      // pageTerminals\r\n      // \r\n      this.pageTerminals.Controls.Add(this.txtTerms);\r\n      this.pageTerminals.Location = new System.Drawing.Point(4, 22);\r\n      this.pageTerminals.Name = \"pageTerminals\";\r\n      this.pageTerminals.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageTerminals.Size = new System.Drawing.Size(1014, 355);\r\n      this.pageTerminals.TabIndex = 5;\r\n      this.pageTerminals.Text = \"Terminals\";\r\n      this.pageTerminals.UseVisualStyleBackColor = true;\r\n      // \r\n      // txtTerms\r\n      // \r\n      this.txtTerms.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtTerms.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.txtTerms.HideSelection = false;\r\n      this.txtTerms.Location = new System.Drawing.Point(3, 3);\r\n      this.txtTerms.Multiline = true;\r\n      this.txtTerms.Name = \"txtTerms\";\r\n      this.txtTerms.ReadOnly = true;\r\n      this.txtTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n      this.txtTerms.Size = new System.Drawing.Size(1008, 349);\r\n      this.txtTerms.TabIndex = 2;\r\n      // \r\n      // pageNonTerms\r\n      // \r\n      this.pageNonTerms.Controls.Add(this.txtNonTerms);\r\n      this.pageNonTerms.Location = new System.Drawing.Point(4, 22);\r\n      this.pageNonTerms.Name = \"pageNonTerms\";\r\n      this.pageNonTerms.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageNonTerms.Size = new System.Drawing.Size(1014, 355);\r\n      this.pageNonTerms.TabIndex = 0;\r\n      this.pageNonTerms.Text = \"Non-Terminals\";\r\n      this.pageNonTerms.UseVisualStyleBackColor = true;\r\n      // \r\n      // txtNonTerms\r\n      // \r\n      this.txtNonTerms.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtNonTerms.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.txtNonTerms.HideSelection = false;\r\n      this.txtNonTerms.Location = new System.Drawing.Point(3, 3);\r\n      this.txtNonTerms.Multiline = true;\r\n      this.txtNonTerms.Name = \"txtNonTerms\";\r\n      this.txtNonTerms.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n      this.txtNonTerms.Size = new System.Drawing.Size(1008, 349);\r\n      this.txtNonTerms.TabIndex = 1;\r\n      this.txtNonTerms.WordWrap = false;\r\n      // \r\n      // pageParserStates\r\n      // \r\n      this.pageParserStates.Controls.Add(this.txtParserStates);\r\n      this.pageParserStates.Location = new System.Drawing.Point(4, 22);\r\n      this.pageParserStates.Name = \"pageParserStates\";\r\n      this.pageParserStates.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageParserStates.Size = new System.Drawing.Size(1014, 355);\r\n      this.pageParserStates.TabIndex = 1;\r\n      this.pageParserStates.Text = \"Parser States\";\r\n      this.pageParserStates.UseVisualStyleBackColor = true;\r\n      // \r\n      // txtParserStates\r\n      // \r\n      this.txtParserStates.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtParserStates.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.txtParserStates.HideSelection = false;\r\n      this.txtParserStates.Location = new System.Drawing.Point(3, 3);\r\n      this.txtParserStates.Multiline = true;\r\n      this.txtParserStates.Name = \"txtParserStates\";\r\n      this.txtParserStates.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n      this.txtParserStates.Size = new System.Drawing.Size(1008, 349);\r\n      this.txtParserStates.TabIndex = 2;\r\n      this.txtParserStates.WordWrap = false;\r\n      // \r\n      // pageTest\r\n      // \r\n      this.pageTest.Controls.Add(this.txtSource);\r\n      this.pageTest.Controls.Add(this.panel1);\r\n      this.pageTest.Controls.Add(this.splitter3);\r\n      this.pageTest.Controls.Add(this.tabOutput);\r\n      this.pageTest.Location = new System.Drawing.Point(4, 22);\r\n      this.pageTest.Name = \"pageTest\";\r\n      this.pageTest.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageTest.Size = new System.Drawing.Size(1014, 355);\r\n      this.pageTest.TabIndex = 4;\r\n      this.pageTest.Text = \"Test\";\r\n      this.pageTest.UseVisualStyleBackColor = true;\r\n      // \r\n      // txtSource\r\n      // \r\n      this.txtSource.AutoScrollMinSize = new System.Drawing.Size(25, 15);\r\n      this.txtSource.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;\r\n      this.txtSource.Cursor = System.Windows.Forms.Cursors.IBeam;\r\n      this.txtSource.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtSource.Location = new System.Drawing.Point(3, 33);\r\n      this.txtSource.Name = \"txtSource\";\r\n      this.txtSource.Size = new System.Drawing.Size(652, 319);\r\n      this.txtSource.TabIndex = 23;\r\n      this.txtSource.TextChanged += new System.EventHandler<FastColoredTextBoxNS.TextChangedEventArgs>(this.txtSource_TextChanged);\r\n      // \r\n      // panel1\r\n      // \r\n      this.panel1.Controls.Add(this.btnLocate);\r\n      this.panel1.Controls.Add(this.chkDisableHili);\r\n      this.panel1.Controls.Add(this.btnRun);\r\n      this.panel1.Controls.Add(this.btnFileOpen);\r\n      this.panel1.Controls.Add(this.btnParse);\r\n      this.panel1.Dock = System.Windows.Forms.DockStyle.Top;\r\n      this.panel1.Location = new System.Drawing.Point(3, 3);\r\n      this.panel1.Name = \"panel1\";\r\n      this.panel1.Size = new System.Drawing.Size(652, 30);\r\n      this.panel1.TabIndex = 2;\r\n      // \r\n      // btnLocate\r\n      // \r\n      this.btnLocate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnLocate.Location = new System.Drawing.Point(578, 3);\r\n      this.btnLocate.Name = \"btnLocate\";\r\n      this.btnLocate.Size = new System.Drawing.Size(65, 23);\r\n      this.btnLocate.TabIndex = 10;\r\n      this.btnLocate.Text = \"Locate >>\";\r\n      this.toolTip.SetToolTip(this.btnLocate, \"Locate the source position in parse/Ast tree. \");\r\n      this.btnLocate.UseVisualStyleBackColor = true;\r\n      this.btnLocate.Click += new System.EventHandler(this.btnLocate_Click);\r\n      // \r\n      // chkDisableHili\r\n      // \r\n      this.chkDisableHili.AutoSize = true;\r\n      this.chkDisableHili.Location = new System.Drawing.Point(5, 7);\r\n      this.chkDisableHili.Name = \"chkDisableHili\";\r\n      this.chkDisableHili.Size = new System.Drawing.Size(150, 17);\r\n      this.chkDisableHili.TabIndex = 9;\r\n      this.chkDisableHili.Text = \"Disable syntax highlighting\";\r\n      this.chkDisableHili.UseVisualStyleBackColor = true;\r\n      this.chkDisableHili.CheckedChanged += new System.EventHandler(this.chkDisableHili_CheckedChanged);\r\n      // \r\n      // btnRun\r\n      // \r\n      this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnRun.Location = new System.Drawing.Point(506, 3);\r\n      this.btnRun.Name = \"btnRun\";\r\n      this.btnRun.Size = new System.Drawing.Size(65, 23);\r\n      this.btnRun.TabIndex = 7;\r\n      this.btnRun.Text = \"Run\";\r\n      this.toolTip.SetToolTip(this.btnRun, \"Run the source sample\");\r\n      this.btnRun.UseVisualStyleBackColor = true;\r\n      this.btnRun.Click += new System.EventHandler(this.btnRun_Click);\r\n      // \r\n      // btnFileOpen\r\n      // \r\n      this.btnFileOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnFileOpen.Location = new System.Drawing.Point(362, 3);\r\n      this.btnFileOpen.Name = \"btnFileOpen\";\r\n      this.btnFileOpen.Size = new System.Drawing.Size(65, 23);\r\n      this.btnFileOpen.TabIndex = 6;\r\n      this.btnFileOpen.Text = \"Load ...\";\r\n      this.toolTip.SetToolTip(this.btnFileOpen, \"Load a source sample...\");\r\n      this.btnFileOpen.UseVisualStyleBackColor = true;\r\n      this.btnFileOpen.Click += new System.EventHandler(this.btnFileOpen_Click);\r\n      // \r\n      // btnParse\r\n      // \r\n      this.btnParse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnParse.Location = new System.Drawing.Point(433, 3);\r\n      this.btnParse.Name = \"btnParse\";\r\n      this.btnParse.Size = new System.Drawing.Size(67, 23);\r\n      this.btnParse.TabIndex = 1;\r\n      this.btnParse.Text = \"Parse\";\r\n      this.toolTip.SetToolTip(this.btnParse, \"Parse source sample\");\r\n      this.btnParse.UseVisualStyleBackColor = true;\r\n      this.btnParse.Click += new System.EventHandler(this.btnParse_Click);\r\n      // \r\n      // splitter3\r\n      // \r\n      this.splitter3.Dock = System.Windows.Forms.DockStyle.Right;\r\n      this.splitter3.Location = new System.Drawing.Point(655, 3);\r\n      this.splitter3.Name = \"splitter3\";\r\n      this.splitter3.Size = new System.Drawing.Size(6, 349);\r\n      this.splitter3.TabIndex = 14;\r\n      this.splitter3.TabStop = false;\r\n      // \r\n      // tabOutput\r\n      // \r\n      this.tabOutput.Controls.Add(this.pageSyntaxTree);\r\n      this.tabOutput.Controls.Add(this.pageAst);\r\n      this.tabOutput.Dock = System.Windows.Forms.DockStyle.Right;\r\n      this.tabOutput.Location = new System.Drawing.Point(661, 3);\r\n      this.tabOutput.Name = \"tabOutput\";\r\n      this.tabOutput.SelectedIndex = 0;\r\n      this.tabOutput.Size = new System.Drawing.Size(350, 349);\r\n      this.tabOutput.TabIndex = 13;\r\n      // \r\n      // pageSyntaxTree\r\n      // \r\n      this.pageSyntaxTree.Controls.Add(this.tvParseTree);\r\n      this.pageSyntaxTree.ForeColor = System.Drawing.SystemColors.ControlText;\r\n      this.pageSyntaxTree.Location = new System.Drawing.Point(4, 22);\r\n      this.pageSyntaxTree.Name = \"pageSyntaxTree\";\r\n      this.pageSyntaxTree.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageSyntaxTree.Size = new System.Drawing.Size(342, 323);\r\n      this.pageSyntaxTree.TabIndex = 1;\r\n      this.pageSyntaxTree.Text = \"Parse Tree\";\r\n      this.pageSyntaxTree.UseVisualStyleBackColor = true;\r\n      // \r\n      // tvParseTree\r\n      // \r\n      this.tvParseTree.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.tvParseTree.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.tvParseTree.HideSelection = false;\r\n      this.tvParseTree.Indent = 16;\r\n      this.tvParseTree.Location = new System.Drawing.Point(3, 3);\r\n      this.tvParseTree.Name = \"tvParseTree\";\r\n      this.tvParseTree.Size = new System.Drawing.Size(336, 317);\r\n      this.tvParseTree.TabIndex = 0;\r\n      this.tvParseTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvParseTree_AfterSelect);\r\n      // \r\n      // pageAst\r\n      // \r\n      this.pageAst.Controls.Add(this.tvAst);\r\n      this.pageAst.Location = new System.Drawing.Point(4, 22);\r\n      this.pageAst.Name = \"pageAst\";\r\n      this.pageAst.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageAst.Size = new System.Drawing.Size(342, 323);\r\n      this.pageAst.TabIndex = 0;\r\n      this.pageAst.Text = \"AST\";\r\n      this.pageAst.UseVisualStyleBackColor = true;\r\n      // \r\n      // tvAst\r\n      // \r\n      this.tvAst.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.tvAst.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.tvAst.HideSelection = false;\r\n      this.tvAst.Indent = 16;\r\n      this.tvAst.Location = new System.Drawing.Point(3, 3);\r\n      this.tvAst.Name = \"tvAst\";\r\n      this.tvAst.Size = new System.Drawing.Size(336, 317);\r\n      this.tvAst.TabIndex = 1;\r\n      this.tvAst.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvAst_AfterSelect);\r\n      // \r\n      // chkParserTrace\r\n      // \r\n      this.chkParserTrace.AutoSize = true;\r\n      this.chkParserTrace.Location = new System.Drawing.Point(3, 3);\r\n      this.chkParserTrace.Name = \"chkParserTrace\";\r\n      this.chkParserTrace.Size = new System.Drawing.Size(90, 17);\r\n      this.chkParserTrace.TabIndex = 0;\r\n      this.chkParserTrace.Text = \"Enable Trace\";\r\n      this.chkParserTrace.UseVisualStyleBackColor = true;\r\n      // \r\n      // pnlLang\r\n      // \r\n      this.pnlLang.Controls.Add(this.btnRefresh);\r\n      this.pnlLang.Controls.Add(this.chkAutoRefresh);\r\n      this.pnlLang.Controls.Add(this.btnManageGrammars);\r\n      this.pnlLang.Controls.Add(this.lblSearchError);\r\n      this.pnlLang.Controls.Add(this.btnSearch);\r\n      this.pnlLang.Controls.Add(this.txtSearch);\r\n      this.pnlLang.Controls.Add(this.label2);\r\n      this.pnlLang.Controls.Add(this.cboGrammars);\r\n      this.pnlLang.Dock = System.Windows.Forms.DockStyle.Top;\r\n      this.pnlLang.Location = new System.Drawing.Point(0, 0);\r\n      this.pnlLang.Name = \"pnlLang\";\r\n      this.pnlLang.Size = new System.Drawing.Size(1022, 29);\r\n      this.pnlLang.TabIndex = 13;\r\n      // \r\n      // btnRefresh\r\n      // \r\n      this.btnRefresh.Enabled = false;\r\n      this.btnRefresh.Location = new System.Drawing.Point(339, 2);\r\n      this.btnRefresh.Name = \"btnRefresh\";\r\n      this.btnRefresh.Size = new System.Drawing.Size(56, 24);\r\n      this.btnRefresh.TabIndex = 14;\r\n      this.btnRefresh.Text = \"Refresh\";\r\n      this.toolTip.SetToolTip(this.btnRefresh, \"Reload grammar assembly and refresh the current grammar.\\r\\nUse Auto-refresh checkb\" +\r\n        \"ox to do this automatically\\r\\nevery time the target assembly file is updated (rec\" +\r\n        \"ompiled).\");\r\n      this.btnRefresh.UseVisualStyleBackColor = true;\r\n      this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);\r\n      // \r\n      // chkAutoRefresh\r\n      // \r\n      this.chkAutoRefresh.AutoSize = true;\r\n      this.chkAutoRefresh.Checked = true;\r\n      this.chkAutoRefresh.CheckState = System.Windows.Forms.CheckState.Checked;\r\n      this.chkAutoRefresh.Location = new System.Drawing.Point(401, 7);\r\n      this.chkAutoRefresh.Name = \"chkAutoRefresh\";\r\n      this.chkAutoRefresh.Size = new System.Drawing.Size(83, 17);\r\n      this.chkAutoRefresh.TabIndex = 13;\r\n      this.chkAutoRefresh.Text = \"Auto-refresh\";\r\n      this.toolTip.SetToolTip(this.chkAutoRefresh, resources.GetString(\"chkAutoRefresh.ToolTip\"));\r\n      this.chkAutoRefresh.UseVisualStyleBackColor = true;\r\n      // \r\n      // btnManageGrammars\r\n      // \r\n      this.btnManageGrammars.Location = new System.Drawing.Point(306, 2);\r\n      this.btnManageGrammars.Margin = new System.Windows.Forms.Padding(2);\r\n      this.btnManageGrammars.Name = \"btnManageGrammars\";\r\n      this.btnManageGrammars.Size = new System.Drawing.Size(28, 24);\r\n      this.btnManageGrammars.TabIndex = 12;\r\n      this.btnManageGrammars.Text = \"...\";\r\n      this.btnManageGrammars.UseVisualStyleBackColor = true;\r\n      this.btnManageGrammars.Click += new System.EventHandler(this.btnManageGrammars_Click);\r\n      // \r\n      // lblSearchError\r\n      // \r\n      this.lblSearchError.AutoSize = true;\r\n      this.lblSearchError.ForeColor = System.Drawing.Color.Red;\r\n      this.lblSearchError.Location = new System.Drawing.Point(731, 9);\r\n      this.lblSearchError.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);\r\n      this.lblSearchError.Name = \"lblSearchError\";\r\n      this.lblSearchError.Size = new System.Drawing.Size(54, 13);\r\n      this.lblSearchError.TabIndex = 11;\r\n      this.lblSearchError.Text = \"Not found\";\r\n      this.lblSearchError.Visible = false;\r\n      // \r\n      // btnSearch\r\n      // \r\n      this.btnSearch.Location = new System.Drawing.Point(672, 2);\r\n      this.btnSearch.Margin = new System.Windows.Forms.Padding(2);\r\n      this.btnSearch.Name = \"btnSearch\";\r\n      this.btnSearch.Size = new System.Drawing.Size(55, 24);\r\n      this.btnSearch.TabIndex = 10;\r\n      this.btnSearch.Text = \"Find\";\r\n      this.btnSearch.UseVisualStyleBackColor = true;\r\n      this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);\r\n      // \r\n      // txtSearch\r\n      // \r\n      this.txtSearch.AcceptsReturn = true;\r\n      this.txtSearch.DataBindings.Add(new System.Windows.Forms.Binding(\"Text\", global::IronyExplorer.GrammarExplorer.Properties.Settings.Default, \"SearchPattern\", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));\r\n      this.txtSearch.Location = new System.Drawing.Point(545, 4);\r\n      this.txtSearch.Margin = new System.Windows.Forms.Padding(2);\r\n      this.txtSearch.Name = \"txtSearch\";\r\n      this.txtSearch.Size = new System.Drawing.Size(123, 20);\r\n      this.txtSearch.TabIndex = 8;\r\n      this.txtSearch.Text = global::IronyExplorer.GrammarExplorer.Properties.Settings.Default.SearchPattern;\r\n      this.txtSearch.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtSearch_KeyPress);\r\n      // \r\n      // label2\r\n      // \r\n      this.label2.AutoSize = true;\r\n      this.label2.Location = new System.Drawing.Point(10, 6);\r\n      this.label2.Name = \"label2\";\r\n      this.label2.Size = new System.Drawing.Size(52, 13);\r\n      this.label2.TabIndex = 4;\r\n      this.label2.Text = \"Grammar:\";\r\n      // \r\n      // cboGrammars\r\n      // \r\n      this.cboGrammars.ContextMenuStrip = this.menuGrammars;\r\n      this.cboGrammars.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r\n      this.cboGrammars.FormattingEnabled = true;\r\n      this.cboGrammars.Location = new System.Drawing.Point(67, 3);\r\n      this.cboGrammars.Name = \"cboGrammars\";\r\n      this.cboGrammars.Size = new System.Drawing.Size(234, 21);\r\n      this.cboGrammars.TabIndex = 3;\r\n      this.cboGrammars.SelectedIndexChanged += new System.EventHandler(this.cboGrammars_SelectedIndexChanged);\r\n      // \r\n      // menuGrammars\r\n      // \r\n      this.menuGrammars.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r\n            this.miAdd,\r\n            this.miRemove,\r\n            this.miRemoveAll});\r\n      this.menuGrammars.Name = \"menuGrammars\";\r\n      this.menuGrammars.Size = new System.Drawing.Size(164, 70);\r\n      this.menuGrammars.Opening += new System.ComponentModel.CancelEventHandler(this.menuGrammars_Opening);\r\n      // \r\n      // miAdd\r\n      // \r\n      this.miAdd.Name = \"miAdd\";\r\n      this.miAdd.Size = new System.Drawing.Size(163, 22);\r\n      this.miAdd.Text = \"Add grammar...\";\r\n      this.miAdd.Click += new System.EventHandler(this.miAdd_Click);\r\n      // \r\n      // miRemove\r\n      // \r\n      this.miRemove.Name = \"miRemove\";\r\n      this.miRemove.Size = new System.Drawing.Size(163, 22);\r\n      this.miRemove.Text = \"Remove selected\";\r\n      this.miRemove.Click += new System.EventHandler(this.miRemove_Click);\r\n      // \r\n      // miRemoveAll\r\n      // \r\n      this.miRemoveAll.Name = \"miRemoveAll\";\r\n      this.miRemoveAll.Size = new System.Drawing.Size(163, 22);\r\n      this.miRemoveAll.Text = \"Remove all\";\r\n      this.miRemoveAll.Click += new System.EventHandler(this.miRemoveAll_Click);\r\n      // \r\n      // dlgSelectAssembly\r\n      // \r\n      this.dlgSelectAssembly.DefaultExt = \"dll\";\r\n      this.dlgSelectAssembly.Filter = \"DLL files|*.dll\";\r\n      this.dlgSelectAssembly.Title = \"Select Grammar Assembly \";\r\n      // \r\n      // splitBottom\r\n      // \r\n      this.splitBottom.BackColor = System.Drawing.SystemColors.Control;\r\n      this.splitBottom.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;\r\n      this.splitBottom.Dock = System.Windows.Forms.DockStyle.Bottom;\r\n      this.splitBottom.Location = new System.Drawing.Point(0, 410);\r\n      this.splitBottom.Name = \"splitBottom\";\r\n      this.splitBottom.Size = new System.Drawing.Size(1022, 6);\r\n      this.splitBottom.TabIndex = 22;\r\n      this.splitBottom.TabStop = false;\r\n      // \r\n      // tabBottom\r\n      // \r\n      this.tabBottom.Controls.Add(this.pageLanguage);\r\n      this.tabBottom.Controls.Add(this.pageGrammarErrors);\r\n      this.tabBottom.Controls.Add(this.pageParserOutput);\r\n      this.tabBottom.Controls.Add(this.pageParserTrace);\r\n      this.tabBottom.Controls.Add(this.pageOutput);\r\n      this.tabBottom.Dock = System.Windows.Forms.DockStyle.Bottom;\r\n      this.tabBottom.Location = new System.Drawing.Point(0, 416);\r\n      this.tabBottom.Name = \"tabBottom\";\r\n      this.tabBottom.SelectedIndex = 0;\r\n      this.tabBottom.Size = new System.Drawing.Size(1022, 187);\r\n      this.tabBottom.TabIndex = 0;\r\n      // \r\n      // pageLanguage\r\n      // \r\n      this.pageLanguage.Controls.Add(this.grpLanguageInfo);\r\n      this.pageLanguage.Location = new System.Drawing.Point(4, 22);\r\n      this.pageLanguage.Name = \"pageLanguage\";\r\n      this.pageLanguage.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageLanguage.Size = new System.Drawing.Size(1014, 161);\r\n      this.pageLanguage.TabIndex = 1;\r\n      this.pageLanguage.Text = \"Grammar Info\";\r\n      this.pageLanguage.UseVisualStyleBackColor = true;\r\n      // \r\n      // grpLanguageInfo\r\n      // \r\n      this.grpLanguageInfo.Controls.Add(this.label8);\r\n      this.grpLanguageInfo.Controls.Add(this.lblParserStateCount);\r\n      this.grpLanguageInfo.Controls.Add(this.lblLanguageDescr);\r\n      this.grpLanguageInfo.Controls.Add(this.txtGrammarComments);\r\n      this.grpLanguageInfo.Controls.Add(this.label11);\r\n      this.grpLanguageInfo.Controls.Add(this.label9);\r\n      this.grpLanguageInfo.Controls.Add(this.lblLanguageVersion);\r\n      this.grpLanguageInfo.Controls.Add(this.label10);\r\n      this.grpLanguageInfo.Controls.Add(this.lblLanguage);\r\n      this.grpLanguageInfo.Controls.Add(this.label4);\r\n      this.grpLanguageInfo.Controls.Add(this.label6);\r\n      this.grpLanguageInfo.Controls.Add(this.lblParserConstrTime);\r\n      this.grpLanguageInfo.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.grpLanguageInfo.Location = new System.Drawing.Point(3, 3);\r\n      this.grpLanguageInfo.Name = \"grpLanguageInfo\";\r\n      this.grpLanguageInfo.Size = new System.Drawing.Size(1008, 155);\r\n      this.grpLanguageInfo.TabIndex = 3;\r\n      this.grpLanguageInfo.TabStop = false;\r\n      // \r\n      // label8\r\n      // \r\n      this.label8.AutoSize = true;\r\n      this.label8.Location = new System.Drawing.Point(6, 113);\r\n      this.label8.Name = \"label8\";\r\n      this.label8.Size = new System.Drawing.Size(96, 13);\r\n      this.label8.TabIndex = 26;\r\n      this.label8.Text = \"Parser state count:\";\r\n      // \r\n      // lblParserStateCount\r\n      // \r\n      this.lblParserStateCount.AutoSize = true;\r\n      this.lblParserStateCount.Location = new System.Drawing.Point(167, 113);\r\n      this.lblParserStateCount.Name = \"lblParserStateCount\";\r\n      this.lblParserStateCount.Size = new System.Drawing.Size(13, 13);\r\n      this.lblParserStateCount.TabIndex = 25;\r\n      this.lblParserStateCount.Text = \"0\";\r\n      // \r\n      // lblLanguageDescr\r\n      // \r\n      this.lblLanguageDescr.Location = new System.Drawing.Point(107, 38);\r\n      this.lblLanguageDescr.Name = \"lblLanguageDescr\";\r\n      this.lblLanguageDescr.Size = new System.Drawing.Size(613, 22);\r\n      this.lblLanguageDescr.TabIndex = 24;\r\n      this.lblLanguageDescr.Text = \"(description)\";\r\n      // \r\n      // txtGrammarComments\r\n      // \r\n      this.txtGrammarComments.BackColor = System.Drawing.SystemColors.Window;\r\n      this.txtGrammarComments.BorderStyle = System.Windows.Forms.BorderStyle.None;\r\n      this.txtGrammarComments.Location = new System.Drawing.Point(111, 63);\r\n      this.txtGrammarComments.Multiline = true;\r\n      this.txtGrammarComments.Name = \"txtGrammarComments\";\r\n      this.txtGrammarComments.ReadOnly = true;\r\n      this.txtGrammarComments.Size = new System.Drawing.Size(609, 47);\r\n      this.txtGrammarComments.TabIndex = 23;\r\n      // \r\n      // label11\r\n      // \r\n      this.label11.AutoSize = true;\r\n      this.label11.Location = new System.Drawing.Point(6, 61);\r\n      this.label11.Name = \"label11\";\r\n      this.label11.Size = new System.Drawing.Size(99, 13);\r\n      this.label11.TabIndex = 22;\r\n      this.label11.Text = \"Grammar Comment:\";\r\n      // \r\n      // label9\r\n      // \r\n      this.label9.AutoSize = true;\r\n      this.label9.Location = new System.Drawing.Point(6, 38);\r\n      this.label9.Name = \"label9\";\r\n      this.label9.Size = new System.Drawing.Size(63, 13);\r\n      this.label9.TabIndex = 20;\r\n      this.label9.Text = \"Description:\";\r\n      // \r\n      // lblLanguageVersion\r\n      // \r\n      this.lblLanguageVersion.Location = new System.Drawing.Point(278, 16);\r\n      this.lblLanguageVersion.Name = \"lblLanguageVersion\";\r\n      this.lblLanguageVersion.Size = new System.Drawing.Size(80, 17);\r\n      this.lblLanguageVersion.TabIndex = 19;\r\n      this.lblLanguageVersion.Text = \"(Version)\";\r\n      // \r\n      // label10\r\n      // \r\n      this.label10.AutoSize = true;\r\n      this.label10.Location = new System.Drawing.Point(227, 16);\r\n      this.label10.Name = \"label10\";\r\n      this.label10.Size = new System.Drawing.Size(45, 13);\r\n      this.label10.TabIndex = 18;\r\n      this.label10.Text = \"Version:\";\r\n      // \r\n      // lblLanguage\r\n      // \r\n      this.lblLanguage.Location = new System.Drawing.Point(107, 16);\r\n      this.lblLanguage.Name = \"lblLanguage\";\r\n      this.lblLanguage.Size = new System.Drawing.Size(230, 17);\r\n      this.lblLanguage.TabIndex = 17;\r\n      this.lblLanguage.Text = \"(Language name)\";\r\n      // \r\n      // label4\r\n      // \r\n      this.label4.AutoSize = true;\r\n      this.label4.Location = new System.Drawing.Point(6, 16);\r\n      this.label4.Name = \"label4\";\r\n      this.label4.Size = new System.Drawing.Size(58, 13);\r\n      this.label4.TabIndex = 16;\r\n      this.label4.Text = \"Language:\";\r\n      // \r\n      // label6\r\n      // \r\n      this.label6.AutoSize = true;\r\n      this.label6.Location = new System.Drawing.Point(6, 132);\r\n      this.label6.Name = \"label6\";\r\n      this.label6.Size = new System.Drawing.Size(142, 13);\r\n      this.label6.TabIndex = 15;\r\n      this.label6.Text = \"Parser construction time, ms:\";\r\n      // \r\n      // lblParserConstrTime\r\n      // \r\n      this.lblParserConstrTime.AutoSize = true;\r\n      this.lblParserConstrTime.Location = new System.Drawing.Point(167, 132);\r\n      this.lblParserConstrTime.Name = \"lblParserConstrTime\";\r\n      this.lblParserConstrTime.Size = new System.Drawing.Size(13, 13);\r\n      this.lblParserConstrTime.TabIndex = 14;\r\n      this.lblParserConstrTime.Text = \"0\";\r\n      // \r\n      // pageGrammarErrors\r\n      // \r\n      this.pageGrammarErrors.Controls.Add(this.gridGrammarErrors);\r\n      this.pageGrammarErrors.Location = new System.Drawing.Point(4, 22);\r\n      this.pageGrammarErrors.Name = \"pageGrammarErrors\";\r\n      this.pageGrammarErrors.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageGrammarErrors.Size = new System.Drawing.Size(1014, 161);\r\n      this.pageGrammarErrors.TabIndex = 4;\r\n      this.pageGrammarErrors.Text = \"Grammar Errors\";\r\n      this.pageGrammarErrors.UseVisualStyleBackColor = true;\r\n      // \r\n      // gridGrammarErrors\r\n      // \r\n      this.gridGrammarErrors.AllowUserToAddRows = false;\r\n      this.gridGrammarErrors.AllowUserToDeleteRows = false;\r\n      this.gridGrammarErrors.ColumnHeadersHeight = 24;\r\n      this.gridGrammarErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;\r\n      this.gridGrammarErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r\n            this.dataGridViewTextBoxColumn2,\r\n            this.dataGridViewTextBoxColumn5,\r\n            this.dataGridViewTextBoxColumn6});\r\n      this.gridGrammarErrors.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.gridGrammarErrors.Location = new System.Drawing.Point(3, 3);\r\n      this.gridGrammarErrors.MultiSelect = false;\r\n      this.gridGrammarErrors.Name = \"gridGrammarErrors\";\r\n      this.gridGrammarErrors.ReadOnly = true;\r\n      this.gridGrammarErrors.RowHeadersVisible = false;\r\n      this.gridGrammarErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;\r\n      this.gridGrammarErrors.Size = new System.Drawing.Size(1008, 155);\r\n      this.gridGrammarErrors.TabIndex = 3;\r\n      this.gridGrammarErrors.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridGrammarErrors_CellDoubleClick);\r\n      // \r\n      // dataGridViewTextBoxColumn2\r\n      // \r\n      dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r\n      this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle1;\r\n      this.dataGridViewTextBoxColumn2.HeaderText = \"Error Level\";\r\n      this.dataGridViewTextBoxColumn2.Name = \"dataGridViewTextBoxColumn2\";\r\n      this.dataGridViewTextBoxColumn2.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn2.ToolTipText = \"Double-click grid cell to locate in source code\";\r\n      // \r\n      // dataGridViewTextBoxColumn5\r\n      // \r\n      dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle2;\r\n      this.dataGridViewTextBoxColumn5.HeaderText = \"Description\";\r\n      this.dataGridViewTextBoxColumn5.Name = \"dataGridViewTextBoxColumn5\";\r\n      this.dataGridViewTextBoxColumn5.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn5.Width = 800;\r\n      // \r\n      // dataGridViewTextBoxColumn6\r\n      // \r\n      this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;\r\n      this.dataGridViewTextBoxColumn6.DataPropertyName = \"State\";\r\n      dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r\n      this.dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle3;\r\n      this.dataGridViewTextBoxColumn6.HeaderText = \"Parser State\";\r\n      this.dataGridViewTextBoxColumn6.Name = \"dataGridViewTextBoxColumn6\";\r\n      this.dataGridViewTextBoxColumn6.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn6.Resizable = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.dataGridViewTextBoxColumn6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn6.ToolTipText = \"Double-click grid cell to navigate to state details\";\r\n      this.dataGridViewTextBoxColumn6.Width = 71;\r\n      // \r\n      // pageParserOutput\r\n      // \r\n      this.pageParserOutput.Controls.Add(this.groupBox1);\r\n      this.pageParserOutput.Controls.Add(this.grpCompileInfo);\r\n      this.pageParserOutput.Location = new System.Drawing.Point(4, 22);\r\n      this.pageParserOutput.Name = \"pageParserOutput\";\r\n      this.pageParserOutput.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageParserOutput.Size = new System.Drawing.Size(1014, 161);\r\n      this.pageParserOutput.TabIndex = 2;\r\n      this.pageParserOutput.Text = \"Parser Output\";\r\n      this.pageParserOutput.UseVisualStyleBackColor = true;\r\n      // \r\n      // groupBox1\r\n      // \r\n      this.groupBox1.Controls.Add(this.gridCompileErrors);\r\n      this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.groupBox1.Location = new System.Drawing.Point(158, 3);\r\n      this.groupBox1.Name = \"groupBox1\";\r\n      this.groupBox1.Size = new System.Drawing.Size(853, 155);\r\n      this.groupBox1.TabIndex = 3;\r\n      this.groupBox1.TabStop = false;\r\n      this.groupBox1.Text = \"Compile Errors\";\r\n      // \r\n      // gridCompileErrors\r\n      // \r\n      this.gridCompileErrors.AllowUserToAddRows = false;\r\n      this.gridCompileErrors.AllowUserToDeleteRows = false;\r\n      this.gridCompileErrors.ColumnHeadersHeight = 24;\r\n      this.gridCompileErrors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;\r\n      this.gridCompileErrors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r\n            this.dataGridViewTextBoxColumn3,\r\n            this.dataGridViewTextBoxColumn4,\r\n            this.dataGridViewTextBoxColumn1});\r\n      this.gridCompileErrors.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.gridCompileErrors.Location = new System.Drawing.Point(3, 16);\r\n      this.gridCompileErrors.MultiSelect = false;\r\n      this.gridCompileErrors.Name = \"gridCompileErrors\";\r\n      this.gridCompileErrors.ReadOnly = true;\r\n      this.gridCompileErrors.RowHeadersVisible = false;\r\n      this.gridCompileErrors.RowTemplate.Height = 24;\r\n      this.gridCompileErrors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;\r\n      this.gridCompileErrors.Size = new System.Drawing.Size(847, 136);\r\n      this.gridCompileErrors.TabIndex = 2;\r\n      this.gridCompileErrors.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridCompileErrors_CellDoubleClick);\r\n      // \r\n      // dataGridViewTextBoxColumn3\r\n      // \r\n      dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r\n      this.dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle4;\r\n      this.dataGridViewTextBoxColumn3.HeaderText = \"L, C\";\r\n      this.dataGridViewTextBoxColumn3.Name = \"dataGridViewTextBoxColumn3\";\r\n      this.dataGridViewTextBoxColumn3.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn3.ToolTipText = \"Double-click grid cell to locate in source code\";\r\n      this.dataGridViewTextBoxColumn3.Width = 50;\r\n      // \r\n      // dataGridViewTextBoxColumn4\r\n      // \r\n      dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle5;\r\n      this.dataGridViewTextBoxColumn4.HeaderText = \"Error Message\";\r\n      this.dataGridViewTextBoxColumn4.Name = \"dataGridViewTextBoxColumn4\";\r\n      this.dataGridViewTextBoxColumn4.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn4.Width = 1000;\r\n      // \r\n      // dataGridViewTextBoxColumn1\r\n      // \r\n      this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;\r\n      this.dataGridViewTextBoxColumn1.DataPropertyName = \"State\";\r\n      dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r\n      this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle6;\r\n      this.dataGridViewTextBoxColumn1.HeaderText = \"Parser State\";\r\n      this.dataGridViewTextBoxColumn1.Name = \"dataGridViewTextBoxColumn1\";\r\n      this.dataGridViewTextBoxColumn1.ReadOnly = true;\r\n      this.dataGridViewTextBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.dataGridViewTextBoxColumn1.ToolTipText = \"Double-click grid cell to navigate to state details\";\r\n      this.dataGridViewTextBoxColumn1.Width = 71;\r\n      // \r\n      // grpCompileInfo\r\n      // \r\n      this.grpCompileInfo.Controls.Add(this.label12);\r\n      this.grpCompileInfo.Controls.Add(this.lblParseErrorCount);\r\n      this.grpCompileInfo.Controls.Add(this.label1);\r\n      this.grpCompileInfo.Controls.Add(this.lblParseTime);\r\n      this.grpCompileInfo.Controls.Add(this.label7);\r\n      this.grpCompileInfo.Controls.Add(this.lblSrcLineCount);\r\n      this.grpCompileInfo.Controls.Add(this.label3);\r\n      this.grpCompileInfo.Controls.Add(this.lblSrcTokenCount);\r\n      this.grpCompileInfo.Dock = System.Windows.Forms.DockStyle.Left;\r\n      this.grpCompileInfo.Location = new System.Drawing.Point(3, 3);\r\n      this.grpCompileInfo.Name = \"grpCompileInfo\";\r\n      this.grpCompileInfo.Size = new System.Drawing.Size(155, 155);\r\n      this.grpCompileInfo.TabIndex = 5;\r\n      this.grpCompileInfo.TabStop = false;\r\n      this.grpCompileInfo.Text = \"Statistics\";\r\n      // \r\n      // label12\r\n      // \r\n      this.label12.AutoSize = true;\r\n      this.label12.Location = new System.Drawing.Point(12, 81);\r\n      this.label12.Name = \"label12\";\r\n      this.label12.Size = new System.Drawing.Size(37, 13);\r\n      this.label12.TabIndex = 19;\r\n      this.label12.Text = \"Errors:\";\r\n      // \r\n      // lblParseErrorCount\r\n      // \r\n      this.lblParseErrorCount.AutoSize = true;\r\n      this.lblParseErrorCount.Location = new System.Drawing.Point(108, 81);\r\n      this.lblParseErrorCount.Name = \"lblParseErrorCount\";\r\n      this.lblParseErrorCount.Size = new System.Drawing.Size(13, 13);\r\n      this.lblParseErrorCount.TabIndex = 18;\r\n      this.lblParseErrorCount.Text = \"0\";\r\n      // \r\n      // label1\r\n      // \r\n      this.label1.AutoSize = true;\r\n      this.label1.Location = new System.Drawing.Point(12, 59);\r\n      this.label1.Name = \"label1\";\r\n      this.label1.Size = new System.Drawing.Size(82, 13);\r\n      this.label1.TabIndex = 17;\r\n      this.label1.Text = \"Parse Time, ms:\";\r\n      // \r\n      // lblParseTime\r\n      // \r\n      this.lblParseTime.AutoSize = true;\r\n      this.lblParseTime.Location = new System.Drawing.Point(108, 59);\r\n      this.lblParseTime.Name = \"lblParseTime\";\r\n      this.lblParseTime.Size = new System.Drawing.Size(13, 13);\r\n      this.lblParseTime.TabIndex = 16;\r\n      this.lblParseTime.Text = \"0\";\r\n      // \r\n      // label7\r\n      // \r\n      this.label7.AutoSize = true;\r\n      this.label7.Location = new System.Drawing.Point(12, 16);\r\n      this.label7.Name = \"label7\";\r\n      this.label7.Size = new System.Drawing.Size(35, 13);\r\n      this.label7.TabIndex = 15;\r\n      this.label7.Text = \"Lines:\";\r\n      // \r\n      // lblSrcLineCount\r\n      // \r\n      this.lblSrcLineCount.AutoSize = true;\r\n      this.lblSrcLineCount.Location = new System.Drawing.Point(108, 16);\r\n      this.lblSrcLineCount.Name = \"lblSrcLineCount\";\r\n      this.lblSrcLineCount.Size = new System.Drawing.Size(13, 13);\r\n      this.lblSrcLineCount.TabIndex = 14;\r\n      this.lblSrcLineCount.Text = \"0\";\r\n      // \r\n      // label3\r\n      // \r\n      this.label3.AutoSize = true;\r\n      this.label3.Location = new System.Drawing.Point(12, 37);\r\n      this.label3.Name = \"label3\";\r\n      this.label3.Size = new System.Drawing.Size(46, 13);\r\n      this.label3.TabIndex = 13;\r\n      this.label3.Text = \"Tokens:\";\r\n      // \r\n      // lblSrcTokenCount\r\n      // \r\n      this.lblSrcTokenCount.AutoSize = true;\r\n      this.lblSrcTokenCount.Location = new System.Drawing.Point(108, 37);\r\n      this.lblSrcTokenCount.Name = \"lblSrcTokenCount\";\r\n      this.lblSrcTokenCount.Size = new System.Drawing.Size(13, 13);\r\n      this.lblSrcTokenCount.TabIndex = 12;\r\n      this.lblSrcTokenCount.Text = \"0\";\r\n      // \r\n      // pageParserTrace\r\n      // \r\n      this.pageParserTrace.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r\n      this.pageParserTrace.Controls.Add(this.grpParserActions);\r\n      this.pageParserTrace.Controls.Add(this.splitter1);\r\n      this.pageParserTrace.Controls.Add(this.grpTokens);\r\n      this.pageParserTrace.Controls.Add(this.pnlParserTraceTop);\r\n      this.pageParserTrace.Location = new System.Drawing.Point(4, 22);\r\n      this.pageParserTrace.Name = \"pageParserTrace\";\r\n      this.pageParserTrace.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageParserTrace.Size = new System.Drawing.Size(1014, 161);\r\n      this.pageParserTrace.TabIndex = 3;\r\n      this.pageParserTrace.Text = \"Parser Trace\";\r\n      this.pageParserTrace.UseVisualStyleBackColor = true;\r\n      // \r\n      // grpParserActions\r\n      // \r\n      this.grpParserActions.Controls.Add(this.gridParserTrace);\r\n      this.grpParserActions.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.grpParserActions.Location = new System.Drawing.Point(3, 28);\r\n      this.grpParserActions.Name = \"grpParserActions\";\r\n      this.grpParserActions.Size = new System.Drawing.Size(741, 128);\r\n      this.grpParserActions.TabIndex = 4;\r\n      this.grpParserActions.TabStop = false;\r\n      // \r\n      // gridParserTrace\r\n      // \r\n      this.gridParserTrace.AllowUserToAddRows = false;\r\n      this.gridParserTrace.AllowUserToDeleteRows = false;\r\n      this.gridParserTrace.AllowUserToResizeRows = false;\r\n      this.gridParserTrace.ColumnHeadersHeight = 24;\r\n      this.gridParserTrace.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;\r\n      this.gridParserTrace.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r\n            this.State,\r\n            this.Stack,\r\n            this.Input,\r\n            this.Action});\r\n      this.gridParserTrace.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.gridParserTrace.Location = new System.Drawing.Point(3, 16);\r\n      this.gridParserTrace.MultiSelect = false;\r\n      this.gridParserTrace.Name = \"gridParserTrace\";\r\n      this.gridParserTrace.ReadOnly = true;\r\n      this.gridParserTrace.RowHeadersVisible = false;\r\n      this.gridParserTrace.RowTemplate.Height = 24;\r\n      this.gridParserTrace.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;\r\n      this.gridParserTrace.Size = new System.Drawing.Size(735, 109);\r\n      this.gridParserTrace.TabIndex = 0;\r\n      this.gridParserTrace.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridParserTrace_CellDoubleClick);\r\n      // \r\n      // State\r\n      // \r\n      this.State.DataPropertyName = \"State\";\r\n      dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r\n      this.State.DefaultCellStyle = dataGridViewCellStyle7;\r\n      this.State.HeaderText = \"State\";\r\n      this.State.Name = \"State\";\r\n      this.State.ReadOnly = true;\r\n      this.State.Resizable = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.State.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.State.ToolTipText = \"Double-click grid cell to navigate to state details\";\r\n      this.State.Width = 60;\r\n      // \r\n      // Stack\r\n      // \r\n      this.Stack.DataPropertyName = \"StackTop\";\r\n      dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;\r\n      this.Stack.DefaultCellStyle = dataGridViewCellStyle8;\r\n      this.Stack.HeaderText = \"Stack Top\";\r\n      this.Stack.Name = \"Stack\";\r\n      this.Stack.ReadOnly = true;\r\n      this.Stack.Resizable = System.Windows.Forms.DataGridViewTriState.True;\r\n      this.Stack.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.Stack.ToolTipText = \"Double-click grid cell to locate node in source code\";\r\n      this.Stack.Width = 200;\r\n      // \r\n      // Input\r\n      // \r\n      this.Input.DataPropertyName = \"Input\";\r\n      this.Input.HeaderText = \"Input\";\r\n      this.Input.Name = \"Input\";\r\n      this.Input.ReadOnly = true;\r\n      this.Input.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.Input.ToolTipText = \"Double-click grid cell to locate in source code\";\r\n      this.Input.Width = 200;\r\n      // \r\n      // Action\r\n      // \r\n      this.Action.DataPropertyName = \"Action\";\r\n      this.Action.HeaderText = \"Action\";\r\n      this.Action.Name = \"Action\";\r\n      this.Action.ReadOnly = true;\r\n      this.Action.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;\r\n      this.Action.Width = 600;\r\n      // \r\n      // splitter1\r\n      // \r\n      this.splitter1.BackColor = System.Drawing.SystemColors.Control;\r\n      this.splitter1.Dock = System.Windows.Forms.DockStyle.Right;\r\n      this.splitter1.Location = new System.Drawing.Point(744, 28);\r\n      this.splitter1.Name = \"splitter1\";\r\n      this.splitter1.Size = new System.Drawing.Size(6, 128);\r\n      this.splitter1.TabIndex = 15;\r\n      this.splitter1.TabStop = false;\r\n      // \r\n      // grpTokens\r\n      // \r\n      this.grpTokens.Controls.Add(this.lstTokens);\r\n      this.grpTokens.Dock = System.Windows.Forms.DockStyle.Right;\r\n      this.grpTokens.Location = new System.Drawing.Point(750, 28);\r\n      this.grpTokens.Name = \"grpTokens\";\r\n      this.grpTokens.Size = new System.Drawing.Size(259, 128);\r\n      this.grpTokens.TabIndex = 3;\r\n      this.grpTokens.TabStop = false;\r\n      this.grpTokens.Text = \"Tokens\";\r\n      // \r\n      // lstTokens\r\n      // \r\n      this.lstTokens.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.lstTokens.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.lstTokens.FormattingEnabled = true;\r\n      this.lstTokens.ItemHeight = 14;\r\n      this.lstTokens.Location = new System.Drawing.Point(3, 16);\r\n      this.lstTokens.Name = \"lstTokens\";\r\n      this.lstTokens.Size = new System.Drawing.Size(253, 109);\r\n      this.lstTokens.TabIndex = 2;\r\n      this.lstTokens.Click += new System.EventHandler(this.lstTokens_Click);\r\n      // \r\n      // pnlParserTraceTop\r\n      // \r\n      this.pnlParserTraceTop.BackColor = System.Drawing.SystemColors.Control;\r\n      this.pnlParserTraceTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r\n      this.pnlParserTraceTop.Controls.Add(this.chkExcludeComments);\r\n      this.pnlParserTraceTop.Controls.Add(this.lblTraceComment);\r\n      this.pnlParserTraceTop.Controls.Add(this.chkParserTrace);\r\n      this.pnlParserTraceTop.Dock = System.Windows.Forms.DockStyle.Top;\r\n      this.pnlParserTraceTop.Location = new System.Drawing.Point(3, 3);\r\n      this.pnlParserTraceTop.Name = \"pnlParserTraceTop\";\r\n      this.pnlParserTraceTop.Size = new System.Drawing.Size(1006, 25);\r\n      this.pnlParserTraceTop.TabIndex = 1;\r\n      // \r\n      // chkExcludeComments\r\n      // \r\n      this.chkExcludeComments.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.chkExcludeComments.AutoSize = true;\r\n      this.chkExcludeComments.Checked = true;\r\n      this.chkExcludeComments.CheckState = System.Windows.Forms.CheckState.Checked;\r\n      this.chkExcludeComments.Location = new System.Drawing.Point(847, 3);\r\n      this.chkExcludeComments.Name = \"chkExcludeComments\";\r\n      this.chkExcludeComments.Size = new System.Drawing.Size(145, 17);\r\n      this.chkExcludeComments.TabIndex = 2;\r\n      this.chkExcludeComments.Text = \"Exclude comment tokens\";\r\n      this.chkExcludeComments.UseVisualStyleBackColor = true;\r\n      // \r\n      // lblTraceComment\r\n      // \r\n      this.lblTraceComment.AutoSize = true;\r\n      this.lblTraceComment.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.lblTraceComment.ForeColor = System.Drawing.SystemColors.ControlDarkDark;\r\n      this.lblTraceComment.Location = new System.Drawing.Point(128, 3);\r\n      this.lblTraceComment.Name = \"lblTraceComment\";\r\n      this.lblTraceComment.Size = new System.Drawing.Size(350, 13);\r\n      this.lblTraceComment.TabIndex = 1;\r\n      this.lblTraceComment.Text = \"(Double-click grid cell to navigate to parser state or source code position)\";\r\n      // \r\n      // pageOutput\r\n      // \r\n      this.pageOutput.Controls.Add(this.txtOutput);\r\n      this.pageOutput.Controls.Add(this.pnlRuntimeInfo);\r\n      this.pageOutput.Location = new System.Drawing.Point(4, 22);\r\n      this.pageOutput.Name = \"pageOutput\";\r\n      this.pageOutput.Padding = new System.Windows.Forms.Padding(3);\r\n      this.pageOutput.Size = new System.Drawing.Size(1014, 161);\r\n      this.pageOutput.TabIndex = 0;\r\n      this.pageOutput.Text = \"Runtime Output\";\r\n      this.pageOutput.UseVisualStyleBackColor = true;\r\n      // \r\n      // txtOutput\r\n      // \r\n      this.txtOutput.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtOutput.Font = new System.Drawing.Font(\"Courier New\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.txtOutput.Location = new System.Drawing.Point(3, 3);\r\n      this.txtOutput.Multiline = true;\r\n      this.txtOutput.Name = \"txtOutput\";\r\n      this.txtOutput.ReadOnly = true;\r\n      this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;\r\n      this.txtOutput.Size = new System.Drawing.Size(857, 155);\r\n      this.txtOutput.TabIndex = 1;\r\n      // \r\n      // pnlRuntimeInfo\r\n      // \r\n      this.pnlRuntimeInfo.Controls.Add(this.label14);\r\n      this.pnlRuntimeInfo.Controls.Add(this.lblGCCount);\r\n      this.pnlRuntimeInfo.Controls.Add(this.label13);\r\n      this.pnlRuntimeInfo.Controls.Add(this.lnkShowErrStack);\r\n      this.pnlRuntimeInfo.Controls.Add(this.lnkShowErrLocation);\r\n      this.pnlRuntimeInfo.Controls.Add(this.label5);\r\n      this.pnlRuntimeInfo.Controls.Add(this.lblRunTime);\r\n      this.pnlRuntimeInfo.Dock = System.Windows.Forms.DockStyle.Right;\r\n      this.pnlRuntimeInfo.Location = new System.Drawing.Point(860, 3);\r\n      this.pnlRuntimeInfo.Name = \"pnlRuntimeInfo\";\r\n      this.pnlRuntimeInfo.Size = new System.Drawing.Size(151, 155);\r\n      this.pnlRuntimeInfo.TabIndex = 2;\r\n      // \r\n      // label14\r\n      // \r\n      this.label14.AutoSize = true;\r\n      this.label14.Location = new System.Drawing.Point(6, 23);\r\n      this.label14.Name = \"label14\";\r\n      this.label14.Size = new System.Drawing.Size(105, 13);\r\n      this.label14.TabIndex = 24;\r\n      this.label14.Text = \"GC Collection Count:\";\r\n      // \r\n      // lblGCCount\r\n      // \r\n      this.lblGCCount.AutoSize = true;\r\n      this.lblGCCount.Location = new System.Drawing.Point(124, 23);\r\n      this.lblGCCount.Name = \"lblGCCount\";\r\n      this.lblGCCount.Size = new System.Drawing.Size(13, 13);\r\n      this.lblGCCount.TabIndex = 23;\r\n      this.lblGCCount.Text = \"0\";\r\n      // \r\n      // label13\r\n      // \r\n      this.label13.AutoSize = true;\r\n      this.label13.Location = new System.Drawing.Point(5, 41);\r\n      this.label13.Name = \"label13\";\r\n      this.label13.Size = new System.Drawing.Size(73, 13);\r\n      this.label13.TabIndex = 22;\r\n      this.label13.Text = \"Runtime error:\";\r\n      // \r\n      // lnkShowErrStack\r\n      // \r\n      this.lnkShowErrStack.AutoSize = true;\r\n      this.lnkShowErrStack.Enabled = false;\r\n      this.lnkShowErrStack.Location = new System.Drawing.Point(23, 86);\r\n      this.lnkShowErrStack.Name = \"lnkShowErrStack\";\r\n      this.lnkShowErrStack.Size = new System.Drawing.Size(79, 13);\r\n      this.lnkShowErrStack.TabIndex = 21;\r\n      this.lnkShowErrStack.TabStop = true;\r\n      this.lnkShowErrStack.Text = \"Show full stack\";\r\n      this.lnkShowErrStack.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkShowErrStack_LinkClicked);\r\n      // \r\n      // lnkShowErrLocation\r\n      // \r\n      this.lnkShowErrLocation.AutoSize = true;\r\n      this.lnkShowErrLocation.Enabled = false;\r\n      this.lnkShowErrLocation.Location = new System.Drawing.Point(23, 62);\r\n      this.lnkShowErrLocation.Name = \"lnkShowErrLocation\";\r\n      this.lnkShowErrLocation.Size = new System.Drawing.Size(98, 13);\r\n      this.lnkShowErrLocation.TabIndex = 20;\r\n      this.lnkShowErrLocation.TabStop = true;\r\n      this.lnkShowErrLocation.Text = \"Show error location\";\r\n      this.lnkShowErrLocation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkShowErrLocation_LinkClicked);\r\n      // \r\n      // label5\r\n      // \r\n      this.label5.AutoSize = true;\r\n      this.label5.Location = new System.Drawing.Point(5, 3);\r\n      this.label5.Name = \"label5\";\r\n      this.label5.Size = new System.Drawing.Size(98, 13);\r\n      this.label5.TabIndex = 19;\r\n      this.label5.Text = \"Execution time, ms:\";\r\n      // \r\n      // lblRunTime\r\n      // \r\n      this.lblRunTime.AutoSize = true;\r\n      this.lblRunTime.Location = new System.Drawing.Point(123, 3);\r\n      this.lblRunTime.Name = \"lblRunTime\";\r\n      this.lblRunTime.Size = new System.Drawing.Size(13, 13);\r\n      this.lblRunTime.TabIndex = 18;\r\n      this.lblRunTime.Text = \"0\";\r\n      // \r\n      // fmGrammarExplorer\r\n      // \r\n      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n      this.ClientSize = new System.Drawing.Size(1022, 603);\r\n      this.Controls.Add(this.tabGrammar);\r\n      this.Controls.Add(this.splitBottom);\r\n      this.Controls.Add(this.pnlLang);\r\n      this.Controls.Add(this.tabBottom);\r\n      this.Name = \"fmGrammarExplorer\";\r\n      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r\n      this.Text = \"Irony Grammar Explorer\";\r\n      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.fmExploreGrammar_FormClosing);\r\n      this.Load += new System.EventHandler(this.fmExploreGrammar_Load);\r\n      this.tabGrammar.ResumeLayout(false);\r\n      this.pageTerminals.ResumeLayout(false);\r\n      this.pageTerminals.PerformLayout();\r\n      this.pageNonTerms.ResumeLayout(false);\r\n      this.pageNonTerms.PerformLayout();\r\n      this.pageParserStates.ResumeLayout(false);\r\n      this.pageParserStates.PerformLayout();\r\n      this.pageTest.ResumeLayout(false);\r\n      this.panel1.ResumeLayout(false);\r\n      this.panel1.PerformLayout();\r\n      this.tabOutput.ResumeLayout(false);\r\n      this.pageSyntaxTree.ResumeLayout(false);\r\n      this.pageAst.ResumeLayout(false);\r\n      this.pnlLang.ResumeLayout(false);\r\n      this.pnlLang.PerformLayout();\r\n      this.menuGrammars.ResumeLayout(false);\r\n      this.tabBottom.ResumeLayout(false);\r\n      this.pageLanguage.ResumeLayout(false);\r\n      this.grpLanguageInfo.ResumeLayout(false);\r\n      this.grpLanguageInfo.PerformLayout();\r\n      this.pageGrammarErrors.ResumeLayout(false);\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridGrammarErrors)).EndInit();\r\n      this.pageParserOutput.ResumeLayout(false);\r\n      this.groupBox1.ResumeLayout(false);\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridCompileErrors)).EndInit();\r\n      this.grpCompileInfo.ResumeLayout(false);\r\n      this.grpCompileInfo.PerformLayout();\r\n      this.pageParserTrace.ResumeLayout(false);\r\n      this.grpParserActions.ResumeLayout(false);\r\n      ((System.ComponentModel.ISupportInitialize)(this.gridParserTrace)).EndInit();\r\n      this.grpTokens.ResumeLayout(false);\r\n      this.pnlParserTraceTop.ResumeLayout(false);\r\n      this.pnlParserTraceTop.PerformLayout();\r\n      this.pageOutput.ResumeLayout(false);\r\n      this.pageOutput.PerformLayout();\r\n      this.pnlRuntimeInfo.ResumeLayout(false);\r\n      this.pnlRuntimeInfo.PerformLayout();\r\n      this.ResumeLayout(false);\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    private System.Windows.Forms.TabControl tabGrammar;\r\n    private System.Windows.Forms.TabPage pageNonTerms;\r\n    private System.Windows.Forms.TabPage pageParserStates;\r\n    private System.Windows.Forms.TextBox txtNonTerms;\r\n    private System.Windows.Forms.TextBox txtParserStates;\r\n    private System.Windows.Forms.Panel pnlLang;\r\n    private System.Windows.Forms.ComboBox cboGrammars;\r\n    private System.Windows.Forms.Label label2;\r\n    private System.Windows.Forms.TabPage pageTest;\r\n    private System.Windows.Forms.Splitter splitter3;\r\n    private System.Windows.Forms.TabControl tabOutput;\r\n    private System.Windows.Forms.TabPage pageAst;\r\n    private System.Windows.Forms.TabPage pageSyntaxTree;\r\n    private System.Windows.Forms.TreeView tvParseTree;\r\n    private System.Windows.Forms.OpenFileDialog dlgOpenFile;\r\n    private System.Windows.Forms.TabPage pageTerminals;\r\n    private System.Windows.Forms.TextBox txtTerms;\r\n    private System.Windows.Forms.Button btnSearch;\r\n    private System.Windows.Forms.TextBox txtSearch;\r\n    private System.Windows.Forms.Label lblSearchError;\r\n    private System.Windows.Forms.Panel panel1;\r\n    private System.Windows.Forms.Button btnRun;\r\n    private System.Windows.Forms.CheckBox chkParserTrace;\r\n    private System.Windows.Forms.Button btnFileOpen;\r\n\tprivate System.Windows.Forms.Button btnParse;\r\n    private System.Windows.Forms.Button btnManageGrammars;\r\n    private System.Windows.Forms.ContextMenuStrip menuGrammars;\r\n    private System.Windows.Forms.ToolStripMenuItem miAdd;\r\n    private System.Windows.Forms.ToolStripMenuItem miRemove;\r\n    private System.Windows.Forms.OpenFileDialog dlgSelectAssembly;\r\n    private System.Windows.Forms.ToolStripMenuItem miRemoveAll;\r\n    private System.Windows.Forms.TabControl tabBottom;\r\n    private System.Windows.Forms.TabPage pageOutput;\r\n    private System.Windows.Forms.TextBox txtOutput;\r\n    private System.Windows.Forms.TabPage pageLanguage;\r\n    private System.Windows.Forms.Splitter splitBottom;\r\n    private System.Windows.Forms.GroupBox grpLanguageInfo;\r\n    private System.Windows.Forms.Label label6;\r\n    private System.Windows.Forms.Label lblParserConstrTime;\r\n    private System.Windows.Forms.TabPage pageParserOutput;\r\n    private System.Windows.Forms.TabPage pageParserTrace;\r\n    private System.Windows.Forms.TreeView tvAst;\r\n    private System.Windows.Forms.DataGridView gridParserTrace;\r\n    private System.Windows.Forms.GroupBox grpTokens;\r\n    private System.Windows.Forms.Panel pnlParserTraceTop;\r\n    private System.Windows.Forms.GroupBox grpParserActions;\r\n    private System.Windows.Forms.Splitter splitter1;\r\n    private System.Windows.Forms.ListBox lstTokens;\r\n    private System.Windows.Forms.Label lblTraceComment;\r\n    private System.Windows.Forms.DataGridView gridCompileErrors;\r\n    private System.Windows.Forms.CheckBox chkExcludeComments;\r\n    private System.Windows.Forms.TabPage pageGrammarErrors;\r\n    private System.Windows.Forms.DataGridView gridGrammarErrors;\r\n    private System.Windows.Forms.GroupBox groupBox1;\r\n    private System.Windows.Forms.Label label1;\r\n    private System.Windows.Forms.Label lblParseTime;\r\n    private System.Windows.Forms.Label label7;\r\n    private System.Windows.Forms.Label lblSrcLineCount;\r\n    private System.Windows.Forms.Label label3;\r\n    private System.Windows.Forms.Label lblSrcTokenCount;\r\n    private System.Windows.Forms.GroupBox grpCompileInfo;\r\n    private System.Windows.Forms.Label lblLanguage;\r\n    private System.Windows.Forms.Label label4;\r\n    private System.Windows.Forms.Panel pnlRuntimeInfo;\r\n    private System.Windows.Forms.Label label5;\r\n    private System.Windows.Forms.Label lblRunTime;\r\n    private System.Windows.Forms.TextBox txtGrammarComments;\r\n    private System.Windows.Forms.Label label11;\r\n    private System.Windows.Forms.Label label9;\r\n    private System.Windows.Forms.Label lblLanguageVersion;\r\n    private System.Windows.Forms.Label label10;\r\n    private System.Windows.Forms.Label label12;\r\n    private System.Windows.Forms.Label lblParseErrorCount;\r\n    private System.Windows.Forms.Label lblLanguageDescr;\r\n    private System.Windows.Forms.LinkLabel lnkShowErrLocation;\r\n    private System.Windows.Forms.CheckBox chkDisableHili;\r\n    private System.Windows.Forms.LinkLabel lnkShowErrStack;\r\n    private System.Windows.Forms.Label label13;\r\n    private System.Windows.Forms.Label label8;\r\n    private System.Windows.Forms.Label lblParserStateCount;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6;\r\n    private System.Windows.Forms.CheckBox chkAutoRefresh;\r\n    private System.Windows.Forms.Label label14;\r\n    private System.Windows.Forms.Label lblGCCount;\r\n    private System.Windows.Forms.ToolTip toolTip;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn State;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn Stack;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn Input;\r\n    private System.Windows.Forms.DataGridViewTextBoxColumn Action;\r\n    private System.Windows.Forms.Button btnLocate;\r\n    private System.Windows.Forms.Button btnRefresh;\r\n\tprivate FastColoredTextBoxNS.FastColoredTextBox txtSource;\r\n\r\n  }\r\n}\r\n\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmGrammarExplorer.cs",
    "content": "#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n//with contributions by Andrew Bradnan and Alexey Yakovlev\r\n#endregion\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Drawing;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Configuration;\r\nusing System.Text.RegularExpressions;\r\nusing System.Xml;\r\nusing Irony.Ast;\r\nusing Irony.Parsing;\r\nusing Irony.GrammarExplorer.Properties;\r\nusing Irony.GrammarExplorer.Highlighter;\r\nusing IronyExplorer.GrammarExplorer.Properties;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  using ScriptException = Irony.Interpreter.ScriptException; //that's the only place we use stuff from Irony.Interpreter\r\n\r\n  public partial class fmGrammarExplorer : Form {\r\n    public fmGrammarExplorer() {\r\n      InitializeComponent();\r\n      _grammarLoader.AssemblyUpdated += GrammarAssemblyUpdated;\r\n    }\r\n\r\n    //fields\r\n    Grammar _grammar;\r\n    LanguageData _language;\r\n    Parser _parser;\r\n    ParseTree _parseTree;\r\n    ScriptException _runtimeError;\r\n    GrammarLoader _grammarLoader = new GrammarLoader();\r\n    bool _loaded;\r\n    bool _treeClickDisabled; //to temporarily disable tree click when we locate the node programmatically\r\n\r\n    #region Form load/unload events\r\n    private void fmExploreGrammar_Load(object sender, EventArgs e) {\r\n      ClearLanguageInfo();\r\n      try {\r\n        txtSource.Text = Settings.Default.SourceSample;\r\n        txtSearch.Text = Settings.Default.SearchPattern;\r\n        GrammarItemList grammars = GrammarItemList.FromXml(Settings.Default.Grammars);\r\n        grammars.ShowIn(cboGrammars);\r\n        chkParserTrace.Checked = Settings.Default.EnableTrace;\r\n        chkDisableHili.Checked = Settings.Default.DisableHili;\r\n        chkAutoRefresh.Checked = Settings.Default.AutoRefresh;\r\n        cboGrammars.SelectedIndex = Settings.Default.LanguageIndex; //this will build parser and start colorizer\r\n      } catch { }\r\n      _loaded = true;\r\n    }\r\n\r\n    private void fmExploreGrammar_FormClosing(object sender, FormClosingEventArgs e) {\r\n      Settings.Default.SourceSample = txtSource.Text;\r\n      Settings.Default.LanguageIndex = cboGrammars.SelectedIndex;\r\n      Settings.Default.SearchPattern = txtSearch.Text;\r\n      Settings.Default.EnableTrace = chkParserTrace.Checked;\r\n      Settings.Default.DisableHili = chkDisableHili.Checked;\r\n      Settings.Default.AutoRefresh = chkAutoRefresh.Checked;\r\n      var grammars = GrammarItemList.FromCombo(cboGrammars);\r\n      Settings.Default.Grammars = grammars.ToXml();\r\n      Settings.Default.Save();\r\n    }//method\r\n    #endregion\r\n\r\n    #region Show... methods\r\n    //Show... methods ######################################################################################################################\r\n    private void ClearLanguageInfo() {\r\n      lblLanguage.Text = string.Empty;\r\n      lblLanguageVersion.Text = string.Empty;\r\n      lblLanguageDescr.Text = string.Empty;\r\n      txtGrammarComments.Text = string.Empty;\r\n    }\r\n\r\n    private void ClearParserOutput() {\r\n      lblSrcLineCount.Text = string.Empty;\r\n      lblSrcTokenCount.Text = \"\";\r\n      lblParseTime.Text = \"\";\r\n      lblParseErrorCount.Text = \"\";\r\n\r\n      lstTokens.Items.Clear();\r\n      gridCompileErrors.Rows.Clear();\r\n      gridParserTrace.Rows.Clear();\r\n      lstTokens.Items.Clear();\r\n      tvParseTree.Nodes.Clear();\r\n      tvAst.Nodes.Clear();\r\n      Application.DoEvents();\r\n    }\r\n\r\n    private void ShowLanguageInfo() {\r\n      if (_grammar == null) return;\r\n      var langAttr = LanguageAttribute.GetValue(_grammar.GetType());\r\n      if (langAttr == null) return;\r\n      lblLanguage.Text = langAttr.LanguageName;\r\n      lblLanguageVersion.Text = langAttr.Version;\r\n      lblLanguageDescr.Text = langAttr.Description;\r\n      txtGrammarComments.Text = _grammar.GrammarComments;\r\n    }\r\n\r\n    private void ShowCompilerErrors() {\r\n      gridCompileErrors.Rows.Clear();\r\n      if (_parseTree == null || _parseTree.ParserMessages.Count == 0) return;\r\n      foreach (var err in _parseTree.ParserMessages)\r\n        gridCompileErrors.Rows.Add(err.Location, err, err.ParserState);\r\n      var needPageSwitch = tabBottom.SelectedTab != pageParserOutput &&\r\n        !(tabBottom.SelectedTab == pageParserTrace && chkParserTrace.Checked);\r\n      if (needPageSwitch)\r\n        tabBottom.SelectedTab = pageParserOutput;\r\n    }\r\n\r\n    private void ShowParseTrace() {\r\n      gridParserTrace.Rows.Clear();\r\n      foreach (var entry in _parser.Context.ParserTrace) {\r\n        int index = gridParserTrace.Rows.Add(entry.State, entry.StackTop, entry.Input, entry.Message);\r\n        if (entry.IsError)\r\n          gridParserTrace.Rows[gridParserTrace.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.Red;\r\n      }\r\n      //Show tokens\r\n      foreach (Token tkn in _parseTree.Tokens) {\r\n        if (chkExcludeComments.Checked && tkn.Category == TokenCategory.Comment) continue;\r\n        lstTokens.Items.Add(tkn);\r\n      }\r\n    }//method\r\n\r\n    private void ShowCompileStats() {\r\n      if (_parseTree == null) return;\r\n      lblSrcLineCount.Text = string.Empty;\r\n      if (_parseTree.Tokens.Count > 0)\r\n        lblSrcLineCount.Text = (_parseTree.Tokens[_parseTree.Tokens.Count - 1].Location.Line + 1).ToString();\r\n      lblSrcTokenCount.Text = _parseTree.Tokens.Count.ToString();\r\n      lblParseTime.Text = _parseTree.ParseTimeMilliseconds.ToString();\r\n      lblParseErrorCount.Text = _parseTree.ParserMessages.Count.ToString();\r\n      Application.DoEvents();\r\n      //Note: this time is \"pure\" parse time; actual delay after cliking \"Compile\" includes time to fill ParseTree, AstTree controls\r\n    }\r\n\r\n    private void ShowParseTree() {\r\n      tvParseTree.Nodes.Clear();\r\n      if (_parseTree == null) return;\r\n      AddParseNodeRec(null, _parseTree.Root);\r\n    }\r\n    private void AddParseNodeRec(TreeNode parent, ParseTreeNode node) {\r\n      if (node == null) return;\r\n      string txt = node.ToString();\r\n      TreeNode tvNode = (parent == null? tvParseTree.Nodes.Add(txt) : parent.Nodes.Add(txt) );\r\n      tvNode.Tag = node;\r\n      foreach(var child in node.ChildNodes)\r\n        AddParseNodeRec(tvNode, child);\r\n    }\r\n\r\n    private void ShowAstTree() {\r\n      tvAst.Nodes.Clear();\r\n      if (_parseTree == null || _parseTree.Root == null || _parseTree.Root.AstNode == null) return;\r\n      AddAstNodeRec(null, _parseTree.Root.AstNode);\r\n    }\r\n\r\n    private void AddAstNodeRec(TreeNode parent, object astNode) {\r\n      if (astNode == null) return;\r\n      string txt = astNode.ToString();\r\n      TreeNode newNode = (parent == null ?\r\n        tvAst.Nodes.Add(txt) : parent.Nodes.Add(txt));\r\n      newNode.Tag = astNode;\r\n      var iBrowsable = astNode as IBrowsableAstNode;\r\n      if (iBrowsable == null) return;\r\n      var childList = iBrowsable.GetChildNodes();\r\n      foreach (var child in childList)\r\n        AddAstNodeRec(newNode, child);\r\n    }\r\n\r\n    private void ShowParserConstructionResults() {\r\n      lblParserStateCount.Text = _language.ParserData.States.Count.ToString();\r\n      lblParserConstrTime.Text = _language.ConstructionTime.ToString();\r\n      txtParserStates.Text = string.Empty;\r\n      gridGrammarErrors.Rows.Clear();\r\n      txtTerms.Text = string.Empty;\r\n      txtNonTerms.Text = string.Empty;\r\n      txtParserStates.Text = string.Empty;\r\n      tabBottom.SelectedTab = pageLanguage;\r\n      if (_parser == null) return;\r\n      txtTerms.Text = ParserDataPrinter.PrintTerminals(_language);\r\n      txtNonTerms.Text = ParserDataPrinter.PrintNonTerminals(_language);\r\n      txtParserStates.Text = ParserDataPrinter.PrintStateList(_language);\r\n      ShowGrammarErrors();\r\n    }//method\r\n\r\n    private void ShowGrammarErrors() {\r\n      gridGrammarErrors.Rows.Clear();\r\n      var errors = _parser.Language.Errors;\r\n      if (errors.Count == 0) return;\r\n      foreach (var err in errors)\r\n        gridGrammarErrors.Rows.Add(err.Level.ToString(), err.Message, err.State);\r\n      if (tabBottom.SelectedTab != pageGrammarErrors)\r\n        tabBottom.SelectedTab = pageGrammarErrors;\r\n    }\r\n\r\n    private void ShowSourcePosition(int position, int length) {\r\n      if (position < 0) return;\r\n      txtSource.SelectionStart = position;\r\n      txtSource.SelectionLength = length;\r\n      //txtSource.Select(location.Position, length);\r\n      txtSource.DoCaretVisible();\r\n      if (tabGrammar.SelectedTab != pageTest)\r\n        tabGrammar.SelectedTab = pageTest;\r\n      txtSource.Focus();\r\n      //lblLoc.Text = location.ToString();\r\n    }\r\n    private void ShowSourcePositionAndTraceToken(int position, int length) {\r\n      ShowSourcePosition(position, length);\r\n      //find token in trace\r\n      for (int i = 0; i < lstTokens.Items.Count; i++) {\r\n        var tkn = lstTokens.Items[i] as Token;\r\n        if (tkn.Location.Position == position) {\r\n          lstTokens.SelectedIndex = i;\r\n          return;\r\n        }//if\r\n      }//for i\r\n    }\r\n    private void LocateParserState(ParserState state) {\r\n      if (state == null) return;\r\n      if (tabGrammar.SelectedTab != pageParserStates)\r\n        tabGrammar.SelectedTab = pageParserStates;\r\n      //first scroll to the bottom, so that scrolling to needed position brings it to top\r\n      txtParserStates.SelectionStart = txtParserStates.Text.Length - 1;\r\n      txtParserStates.ScrollToCaret();\r\n      DoSearch(txtParserStates, \"State \" + state.Name, 0);\r\n    }\r\n\r\n    private void ShowRuntimeError(ScriptException error){\r\n      _runtimeError = error;\r\n      lnkShowErrLocation.Enabled = _runtimeError != null;\r\n      lnkShowErrStack.Enabled = lnkShowErrLocation.Enabled;\r\n      if (_runtimeError != null) {\r\n        //the exception was caught and processed by Interpreter\r\n        WriteOutput(\"Error: \" + error.Message + \" At \" + _runtimeError.Location.ToUiString() + \".\");\r\n        ShowSourcePosition(_runtimeError.Location.Position, 1);\r\n      } else {\r\n        //the exception was not caught by interpreter/AST node. Show full exception info\r\n        WriteOutput(\"Error: \" + error.Message);\r\n        fmShowException.ShowException(error);\r\n\r\n      }\r\n      tabBottom.SelectedTab = pageOutput;\r\n    }\r\n\r\n    private void SelectTreeNode(TreeView tree, TreeNode node) {\r\n      _treeClickDisabled = true;\r\n      tree.SelectedNode = node;\r\n      if (node != null)\r\n        node.EnsureVisible();\r\n      _treeClickDisabled = false;\r\n    }\r\n\r\n\r\n\r\n    private void ClearRuntimeInfo() {\r\n      lnkShowErrLocation.Enabled = false;\r\n      lnkShowErrStack.Enabled = false;\r\n      _runtimeError = null;\r\n      txtOutput.Text = string.Empty;\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Grammar combo menu commands\r\n    private void menuGrammars_Opening(object sender, CancelEventArgs e) {\r\n      miRemove.Enabled = cboGrammars.Items.Count > 0;\r\n    }\r\n\r\n    private void miAdd_Click(object sender, EventArgs e) {\r\n      if (dlgSelectAssembly.ShowDialog() != DialogResult.OK) return;\r\n      string location = dlgSelectAssembly.FileName;\r\n      if (string.IsNullOrEmpty(location)) return;\r\n      var oldGrammars = new GrammarItemList();\r\n      foreach(var item in cboGrammars.Items)\r\n        oldGrammars.Add((GrammarItem) item);\r\n      var grammars = fmSelectGrammars.SelectGrammars(location, oldGrammars);\r\n      if (grammars == null) return;\r\n      foreach (GrammarItem item in grammars)\r\n        cboGrammars.Items.Add(item);\r\n      btnRefresh.Enabled = false;\r\n      // auto-select the first grammar if no grammar currently selected\r\n      if (cboGrammars.SelectedIndex < 0 && grammars.Count > 0)\r\n        cboGrammars.SelectedIndex = 0;\r\n    }\r\n\r\n    private void miRemove_Click(object sender, EventArgs e) {\r\n      if (MessageBox.Show(\"Are you sure you want to remove grammmar \" + cboGrammars.SelectedItem + \"?\",\r\n        \"Confirm\", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) {\r\n        cboGrammars.Items.RemoveAt(cboGrammars.SelectedIndex);\r\n        _parser = null;\r\n        if (cboGrammars.Items.Count > 0)\r\n          cboGrammars.SelectedIndex = 0;\r\n        else\r\n          btnRefresh.Enabled = false;\r\n      }\r\n    }\r\n\r\n    private void miRemoveAll_Click(object sender, EventArgs e) {\r\n      if (MessageBox.Show(\"Are you sure you want to remove all grammmars in the list?\",\r\n        \"Confirm\", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) {\r\n        cboGrammars.Items.Clear();\r\n        btnRefresh.Enabled = false;\r\n        _parser = null;\r\n      }\r\n    }\r\n    #endregion\r\n\r\n    #region Parsing and running\r\n    private void CreateGrammar() {\r\n      _grammar = _grammarLoader.CreateGrammar();\r\n    }\r\n\r\n    private void CreateParser() {\r\n      StopHighlighter();\r\n      btnRun.Enabled = false;\r\n      txtOutput.Text = string.Empty;\r\n      _parseTree = null;\r\n\r\n      btnRun.Enabled = _grammar is ICanRunSample;\r\n      _language = new LanguageData(_grammar);\r\n      _parser = new Parser (_language);\r\n      ShowParserConstructionResults();\r\n      StartHighlighter();\r\n    }\r\n\r\n    private void ParseSample() {\r\n      ClearParserOutput();\r\n      if (_parser == null || !_parser.Language.CanParse()) return;\r\n      _parseTree = null;\r\n      GC.Collect(); //to avoid disruption of perf times with occasional collections\r\n      _parser.Context.TracingEnabled = chkParserTrace.Checked;\r\n      try {\r\n        _parser.Parse(txtSource.Text, \"<source>\");\r\n      } catch (Exception ex) {\r\n        gridCompileErrors.Rows.Add(null, ex.Message, null);\r\n        tabBottom.SelectedTab = pageParserOutput;\r\n        throw;\r\n      } finally {\r\n        _parseTree = _parser.Context.CurrentParseTree;\r\n        ShowCompilerErrors();\r\n        if (chkParserTrace.Checked) {\r\n          ShowParseTrace();\r\n        }\r\n        ShowCompileStats();\r\n        ShowParseTree();\r\n        ShowAstTree();\r\n      }\r\n    }\r\n\r\n    private void RunSample() {\r\n      ClearRuntimeInfo();\r\n      Stopwatch sw = new Stopwatch();\r\n      int oldGcCount;\r\n      txtOutput.Text = \"\";\r\n      try {\r\n        if (_parseTree == null)\r\n          ParseSample();\r\n        if (_parseTree.ParserMessages.Count > 0) return;\r\n\r\n        GC.Collect(); //to avoid disruption of perf times with occasional collections\r\n        oldGcCount = GC.CollectionCount(0);\r\n        System.Threading.Thread.Sleep(100);\r\n\r\n        sw.Start();\r\n        var iRunner = _grammar as ICanRunSample;\r\n        var args = new RunSampleArgs(_language, txtSource.Text, _parseTree);\r\n        string output = iRunner.RunSample(args);\r\n        sw.Stop();\r\n        lblRunTime.Text = sw.ElapsedMilliseconds.ToString();\r\n        var gcCount = GC.CollectionCount(0) - oldGcCount;\r\n        lblGCCount.Text = gcCount.ToString();\r\n        WriteOutput(output);\r\n        tabBottom.SelectedTab = pageOutput;\r\n      } catch (ScriptException ex) {\r\n        ShowRuntimeError(ex);\r\n      } finally {\r\n        sw.Stop();\r\n      }//finally\r\n    }//method\r\n\r\n    private void WriteOutput(string text) {\r\n      if (string.IsNullOrEmpty(text)) return;\r\n      txtOutput.Text += text + Environment.NewLine;\r\n      txtOutput.Select(txtOutput.Text.Length - 1, 0);\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region miscellaneous: LoadSourceFile, Search, Source highlighting\r\n    private void LoadSourceFile(string path) {\r\n      _parseTree = null;\r\n      StreamReader reader = null;\r\n      try {\r\n        reader = new StreamReader(path);\r\n        txtSource.Text = null;  //to clear any old formatting\r\n        txtSource.ClearUndo();\r\n        txtSource.ClearStylesBuffer();\r\n        txtSource.Text = reader.ReadToEnd();\r\n        txtSource.SetVisibleState(0, FastColoredTextBoxNS.VisibleState.Visible);\r\n        txtSource.Selection = txtSource.GetRange(0, 0);\r\n      } catch (Exception e) {\r\n        MessageBox.Show(e.Message);\r\n      } finally {\r\n        if (reader != null)\r\n          reader.Close();\r\n      }\r\n    }\r\n\r\n    //Source highlighting\r\n    FastColoredTextBoxHighlighter _highlighter;\r\n    private void StartHighlighter() {\r\n      if (_highlighter != null)\r\n        StopHighlighter();\r\n      if (chkDisableHili.Checked) return;\r\n      if (!_parser.Language.CanParse()) return;\r\n      _highlighter = new FastColoredTextBoxHighlighter(txtSource, _language);\r\n      _highlighter.Adapter.Activate();\r\n    }\r\n    private void StopHighlighter() {\r\n      if (_highlighter == null) return;\r\n      _highlighter.Dispose();\r\n      _highlighter = null;\r\n      ClearHighlighting();\r\n    }\r\n    private void ClearHighlighting() {\r\n      var selectedRange = txtSource.Selection;\r\n      var visibleRange = txtSource.VisibleRange;\r\n      var firstVisibleLine = Math.Min(visibleRange.Start.iLine, visibleRange.End.iLine);\r\n\r\n      var txt = txtSource.Text;\r\n      txtSource.Clear();\r\n      txtSource.Text = txt; //remove all old highlighting\r\n\r\n      txtSource.SetVisibleState(firstVisibleLine, FastColoredTextBoxNS.VisibleState.Visible);\r\n      txtSource.Selection = selectedRange;\r\n    }\r\n    private void EnableHighlighter(bool enable) {\r\n      if (_highlighter != null)\r\n        StopHighlighter();\r\n      if (enable)\r\n        StartHighlighter();\r\n    }\r\n\r\n    //The following methods are contributed by Andrew Bradnan; pasted here with minor changes\r\n    private void DoSearch() {\r\n      lblSearchError.Visible = false;\r\n      TextBoxBase textBox = GetSearchContentBox();\r\n      if (textBox == null) return;\r\n      int idxStart = textBox.SelectionStart + textBox.SelectionLength;\r\n      if (!DoSearch(textBox, txtSearch.Text, idxStart)) {\r\n        lblSearchError.Text = \"Not found.\";\r\n        lblSearchError.Visible = true;\r\n      }\r\n    }//method\r\n\r\n    private bool DoSearch(TextBoxBase textBox, string fragment, int start) {\r\n      textBox.SelectionLength = 0;\r\n      // Compile the regular expression.\r\n      Regex r = new Regex(fragment, RegexOptions.IgnoreCase);\r\n      // Match the regular expression pattern against a text string.\r\n      Match m = r.Match(textBox.Text.Substring(start));\r\n      if (m.Success) {\r\n        int i = 0;\r\n        Group g = m.Groups[i];\r\n        CaptureCollection cc = g.Captures;\r\n        Capture c = cc[0];\r\n        textBox.SelectionStart = c.Index + start;\r\n        textBox.SelectionLength = c.Length;\r\n        textBox.Focus();\r\n        textBox.ScrollToCaret();\r\n        return true;\r\n      }\r\n      return false;\r\n    }//method\r\n\r\n    public TextBoxBase GetSearchContentBox() {\r\n      switch (tabGrammar.SelectedIndex) {\r\n        case 0:\r\n          return txtTerms;\r\n        case 1:\r\n          return txtNonTerms;\r\n        case 2:\r\n          return txtParserStates;\r\n        //case 4:\r\n        //  return txtSource;\r\n        default:\r\n          return null;\r\n      }//switch\r\n    }\r\n\r\n    #endregion\r\n\r\n    #region Controls event handlers\r\n    //Controls event handlers ###################################################################################################\r\n    private void btnParse_Click(object sender, EventArgs e) {\r\n      ParseSample();\r\n    }\r\n\r\n    private void btnRun_Click(object sender, EventArgs e) {\r\n      RunSample();\r\n    }\r\n\r\n    private void tvParseTree_AfterSelect(object sender, TreeViewEventArgs e) {\r\n      if (_treeClickDisabled)\r\n        return;\r\n      var vtreeNode = tvParseTree.SelectedNode;\r\n      if (vtreeNode == null) return;\r\n      var parseNode = vtreeNode.Tag as ParseTreeNode;\r\n      if (parseNode == null) return;\r\n      ShowSourcePosition(parseNode.Span.Location.Position, 1);\r\n    }\r\n\r\n    private void tvAst_AfterSelect(object sender, TreeViewEventArgs e) {\r\n      if (_treeClickDisabled)\r\n        return;\r\n      var treeNode = tvAst.SelectedNode;\r\n      if (treeNode == null) return;\r\n      var iBrowsable = treeNode.Tag as IBrowsableAstNode;\r\n      if (iBrowsable == null) return;\r\n      ShowSourcePosition(iBrowsable.Position, 1);\r\n    }\r\n\r\n    bool _changingGrammar;\r\n    private void LoadSelectedGrammar() {\r\n      try {\r\n        ClearLanguageInfo();\r\n        ClearParserOutput();\r\n        ClearRuntimeInfo();\r\n\r\n        _changingGrammar = true;\r\n        CreateGrammar();\r\n        ShowLanguageInfo();\r\n        CreateParser();\r\n      } finally {\r\n        _changingGrammar = false; //in case of exception\r\n      }\r\n      btnRefresh.Enabled = true;\r\n    }\r\n\r\n    private void cboGrammars_SelectedIndexChanged(object sender, EventArgs e) {\r\n      _grammarLoader.SelectedGrammar = cboGrammars.SelectedItem as GrammarItem;\r\n      LoadSelectedGrammar();\r\n    }\r\n\r\n    private void GrammarAssemblyUpdated(object sender, EventArgs args) {\r\n      if (InvokeRequired) {\r\n        Invoke(new EventHandler(GrammarAssemblyUpdated), sender, args);\r\n        return;\r\n      }\r\n      if (chkAutoRefresh.Checked) {\r\n        LoadSelectedGrammar();\r\n        txtGrammarComments.Text += String.Format(\"{0}Grammar assembly reloaded: {1:HH:mm:ss}\", Environment.NewLine, DateTime.Now);\r\n      }\r\n    }\r\n\r\n    private void btnRefresh_Click(object sender, EventArgs e) {\r\n      LoadSelectedGrammar();\r\n    }\r\n\r\n    private void btnFileOpen_Click(object sender, EventArgs e) {\r\n      if (dlgOpenFile.ShowDialog() != DialogResult.OK) return;\r\n      ClearParserOutput();\r\n      LoadSourceFile(dlgOpenFile.FileName);\r\n    }\r\n\r\n    private void txtSource_TextChanged(object sender, FastColoredTextBoxNS.TextChangedEventArgs e) {\r\n      _parseTree = null; //force it to recompile on run\r\n    }\r\n\r\n    private void btnManageGrammars_Click(object sender, EventArgs e) {\r\n      menuGrammars.Show(btnManageGrammars, 0, btnManageGrammars.Height);\r\n    }\r\n\r\n    private void cboParseMethod_SelectedIndexChanged(object sender, EventArgs e) {\r\n      //changing grammar causes setting of parse method combo, so to prevent double-call to ConstructParser\r\n      // we don't do it here if _changingGrammar is set\r\n      if (!_changingGrammar)\r\n        CreateParser();\r\n    }\r\n\r\n    private void gridParserTrace_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {\r\n      if (_parser.Context == null || e.RowIndex < 0 || e.RowIndex >= _parser.Context.ParserTrace.Count) return;\r\n      var entry = _parser.Context.ParserTrace[e.RowIndex];\r\n      switch (e.ColumnIndex) {\r\n        case 0: //state\r\n        case 3: //action\r\n          LocateParserState(entry.State);\r\n          break;\r\n        case 1: //stack top\r\n          if (entry.StackTop != null)\r\n            ShowSourcePositionAndTraceToken(entry.StackTop.Span.Location.Position, entry.StackTop.Span.Length);\r\n          break;\r\n        case 2: //input\r\n          if (entry.Input != null)\r\n            ShowSourcePositionAndTraceToken(entry.Input.Span.Location.Position, entry.Input.Span.Length);\r\n          break;\r\n      }//switch\r\n    }\r\n\r\n    private void lstTokens_Click(object sender, EventArgs e) {\r\n      if (lstTokens.SelectedIndex < 0)\r\n        return;\r\n      Token token = (Token)lstTokens.SelectedItem;\r\n      ShowSourcePosition(token.Location.Position, token.Length);\r\n    }\r\n\r\n    private void gridCompileErrors_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {\r\n      if (e.RowIndex < 0 || e.RowIndex >= gridCompileErrors.Rows.Count) return;\r\n      var err = gridCompileErrors.Rows[e.RowIndex].Cells[1].Value as LogMessage;\r\n      switch (e.ColumnIndex) {\r\n        case 0: //state\r\n        case 1: //stack top\r\n          ShowSourcePosition(err.Location.Position, 1);\r\n          break;\r\n        case 2: //input\r\n          if (err.ParserState != null)\r\n            LocateParserState(err.ParserState);\r\n          break;\r\n      }//switch\r\n    }\r\n\r\n    private void gridGrammarErrors_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {\r\n      if (e.RowIndex < 0 || e.RowIndex >= gridGrammarErrors.Rows.Count) return;\r\n      var state = gridGrammarErrors.Rows[e.RowIndex].Cells[2].Value as ParserState;\r\n      if (state != null)\r\n        LocateParserState(state);\r\n    }\r\n\r\n    private void btnSearch_Click(object sender, EventArgs e) {\r\n      DoSearch();\r\n    }//method\r\n\r\n    private void txtSearch_KeyPress(object sender, KeyPressEventArgs e) {\r\n      if (e.KeyChar == '\\r')  // <Enter> key\r\n        DoSearch();\r\n    }\r\n\r\n    private void lnkShowErrLocation_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {\r\n      if (_runtimeError != null)\r\n        ShowSourcePosition(_runtimeError.Location.Position, 1);\r\n    }\r\n\r\n    private void lnkShowErrStack_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {\r\n      if (_runtimeError == null) return;\r\n      if (_runtimeError.InnerException != null)\r\n        fmShowException.ShowException(_runtimeError.InnerException);\r\n      else\r\n        fmShowException.ShowException(_runtimeError);\r\n    }\r\n\r\n    private void btnLocate_Click(object sender, EventArgs e) {\r\n      if (_parseTree == null)\r\n        ParseSample();\r\n      var p = txtSource.SelectionStart;\r\n      tvParseTree.SelectedNode = null; //just in case we won't find\r\n      tvAst.SelectedNode = null;\r\n      SelectTreeNode(tvParseTree, LocateTreeNode(tvParseTree.Nodes, p, node => (node.Tag as ParseTreeNode).Span.Location.Position));\r\n      SelectTreeNode(tvAst, LocateTreeNode(tvAst.Nodes, p, node => (node.Tag as IBrowsableAstNode).Position));\r\n      txtSource.Focus(); //set focus back to source\r\n    }\r\n\r\n    private TreeNode LocateTreeNode(TreeNodeCollection nodes, int position, Func<TreeNode, int> positionFunction) {\r\n      TreeNode current = null;\r\n      //Find the last node in the list that is \"before or at\" the position\r\n      foreach (TreeNode node in nodes) {\r\n        if (positionFunction(node) > position) break; //from loop\r\n        current = node;\r\n      }\r\n      //if current has children, search them\r\n      if (current != null && current.Nodes.Count > 0)\r\n        current = LocateTreeNode(current.Nodes, position, positionFunction) ?? current;\r\n      return current;\r\n    }\r\n\r\n    private void chkDisableHili_CheckedChanged(object sender, EventArgs e) {\r\n      if (!_loaded) return;\r\n      EnableHighlighter(!chkDisableHili.Checked);\r\n    }\r\n\r\n    #endregion\r\n\r\n  }//class\r\n}"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmGrammarExplorer.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolTip.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>454, 17</value>\n  </metadata>\n  <data name=\"chkAutoRefresh.ToolTip\" xml:space=\"preserve\">\n    <value>If you check this box, the Grammar Explorer will automatically reload the grammar definition \nfrom the containing assembly whenever the target assembly is updated (recompiled).\nNote that assemblies are never unloaded from memory, so after multiple recompiles \nyou may end up with some memory occupied with outdated assemblies. \nSimply restart the Grammar Explorer to clean-up the memory.</value>\n  </data>\n  <metadata name=\"menuGrammars.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>135, 17</value>\n  </metadata>\n  <metadata name=\"dlgOpenFile.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"dlgSelectAssembly.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>274, 17</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn2.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn5.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn6.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn3.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn4.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"dataGridViewTextBoxColumn1.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"State.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"Stack.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"Input.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"Action.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>45</value>\n  </metadata>\n</root>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmSelectGrammars.Designer.cs",
    "content": "﻿namespace Irony.GrammarExplorer {\r\n  partial class fmSelectGrammars {\r\n    /// <summary>\r\n    /// Required designer variable.\r\n    /// </summary>\r\n    private System.ComponentModel.IContainer components = null;\r\n\r\n    /// <summary>\r\n    /// Clean up any resources being used.\r\n    /// </summary>\r\n    /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n    protected override void Dispose(bool disposing) {\r\n      if (disposing && (components != null)) {\r\n        components.Dispose();\r\n      }\r\n      base.Dispose(disposing);\r\n    }\r\n\r\n    #region Windows Form Designer generated code\r\n\r\n    /// <summary>\r\n    /// Required method for Designer support - do not modify\r\n    /// the contents of this method with the code editor.\r\n    /// </summary>\r\n    private void InitializeComponent() {\r\n      this.pnlBottom = new System.Windows.Forms.Panel();\r\n      this.btnUncheckAll = new System.Windows.Forms.Button();\r\n      this.btnCheckAll = new System.Windows.Forms.Button();\r\n      this.btnCancel = new System.Windows.Forms.Button();\r\n      this.btnOK = new System.Windows.Forms.Button();\r\n      this.lstGrammars = new System.Windows.Forms.CheckedListBox();\r\n      this.pnlBottom.SuspendLayout();\r\n      this.SuspendLayout();\r\n      // \r\n      // pnlBottom\r\n      // \r\n      this.pnlBottom.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;\r\n      this.pnlBottom.Controls.Add(this.btnUncheckAll);\r\n      this.pnlBottom.Controls.Add(this.btnCheckAll);\r\n      this.pnlBottom.Controls.Add(this.btnCancel);\r\n      this.pnlBottom.Controls.Add(this.btnOK);\r\n      this.pnlBottom.Dock = System.Windows.Forms.DockStyle.Bottom;\r\n      this.pnlBottom.Location = new System.Drawing.Point(0, 245);\r\n      this.pnlBottom.Name = \"pnlBottom\";\r\n      this.pnlBottom.Size = new System.Drawing.Size(451, 35);\r\n      this.pnlBottom.TabIndex = 1;\r\n      // \r\n      // btnUncheckAll\r\n      // \r\n      this.btnUncheckAll.Location = new System.Drawing.Point(75, 3);\r\n      this.btnUncheckAll.Name = \"btnUncheckAll\";\r\n      this.btnUncheckAll.Size = new System.Drawing.Size(74, 24);\r\n      this.btnUncheckAll.TabIndex = 3;\r\n      this.btnUncheckAll.Text = \"Uncheck All\";\r\n      this.btnUncheckAll.UseVisualStyleBackColor = true;\r\n      this.btnUncheckAll.Click += new System.EventHandler(this.btnCheckUncheck_Click);\r\n      // \r\n      // btnCheckAll\r\n      // \r\n      this.btnCheckAll.Location = new System.Drawing.Point(3, 3);\r\n      this.btnCheckAll.Name = \"btnCheckAll\";\r\n      this.btnCheckAll.Size = new System.Drawing.Size(66, 24);\r\n      this.btnCheckAll.TabIndex = 2;\r\n      this.btnCheckAll.Text = \"Check All\";\r\n      this.btnCheckAll.UseVisualStyleBackColor = true;\r\n      this.btnCheckAll.Click += new System.EventHandler(this.btnCheckUncheck_Click);\r\n      // \r\n      // btnCancel\r\n      // \r\n      this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\r\n      this.btnCancel.Location = new System.Drawing.Point(379, 3);\r\n      this.btnCancel.Name = \"btnCancel\";\r\n      this.btnCancel.Size = new System.Drawing.Size(66, 24);\r\n      this.btnCancel.TabIndex = 1;\r\n      this.btnCancel.Text = \"Cancel\";\r\n      this.btnCancel.UseVisualStyleBackColor = true;\r\n      // \r\n      // btnOK\r\n      // \r\n      this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n      this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;\r\n      this.btnOK.Location = new System.Drawing.Point(307, 3);\r\n      this.btnOK.Name = \"btnOK\";\r\n      this.btnOK.Size = new System.Drawing.Size(66, 24);\r\n      this.btnOK.TabIndex = 0;\r\n      this.btnOK.Text = \"OK\";\r\n      this.btnOK.UseVisualStyleBackColor = true;\r\n      // \r\n      // lstGrammars\r\n      // \r\n      this.lstGrammars.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.lstGrammars.FormattingEnabled = true;\r\n      this.lstGrammars.Location = new System.Drawing.Point(0, 0);\r\n      this.lstGrammars.Name = \"lstGrammars\";\r\n      this.lstGrammars.Size = new System.Drawing.Size(451, 244);\r\n      this.lstGrammars.Sorted = true;\r\n      this.lstGrammars.TabIndex = 2;\r\n      // \r\n      // fmSelectGrammars\r\n      // \r\n      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n      this.ClientSize = new System.Drawing.Size(451, 280);\r\n      this.Controls.Add(this.lstGrammars);\r\n      this.Controls.Add(this.pnlBottom);\r\n      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\r\n      this.MaximizeBox = false;\r\n      this.MinimizeBox = false;\r\n      this.Name = \"fmSelectGrammars\";\r\n      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r\n      this.Text = \"Select Grammars\";\r\n      this.pnlBottom.ResumeLayout(false);\r\n      this.ResumeLayout(false);\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    private System.Windows.Forms.Panel pnlBottom;\r\n    private System.Windows.Forms.Button btnCancel;\r\n    private System.Windows.Forms.Button btnOK;\r\n    private System.Windows.Forms.CheckedListBox lstGrammars;\r\n    private System.Windows.Forms.Button btnUncheckAll;\r\n    private System.Windows.Forms.Button btnCheckAll;\r\n  }\r\n}"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmSelectGrammars.cs",
    "content": "﻿#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution.\r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the\r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\nusing System.Reflection;\r\nusing Irony.Parsing;\r\nusing System.IO;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  public partial class fmSelectGrammars : Form {\r\n    public fmSelectGrammars() {\r\n      InitializeComponent();\r\n    }\r\n\r\n    public static GrammarItemList SelectGrammars(string assemblyPath, GrammarItemList loadedGrammars) {\r\n      var fromGrammars = LoadGrammars(assemblyPath);\r\n      if (fromGrammars == null)\r\n        return null;\r\n      //fill the listbox and show the form\r\n      fmSelectGrammars form = new fmSelectGrammars();\r\n      var listbox = form.lstGrammars;\r\n      listbox.Sorted = false;\r\n      foreach(GrammarItem item in fromGrammars) {\r\n        listbox.Items.Add(item);\r\n        if (!ContainsGrammar(loadedGrammars, item))\r\n          listbox.SetItemChecked(listbox.Items.Count - 1, true);\r\n      }\r\n      listbox.Sorted = true;\r\n\r\n      if (form.ShowDialog() != DialogResult.OK) return null;\r\n      GrammarItemList result = new GrammarItemList();\r\n      for (int i = 0; i < listbox.Items.Count; i++) {\r\n        if (listbox.GetItemChecked(i)) {\r\n          var item = listbox.Items[i] as GrammarItem;\r\n          item._loading = false;\r\n          result.Add(item);\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n\r\n    private static GrammarItemList LoadGrammars(string assemblyPath) {\r\n      Assembly asm = null;\r\n      try {\r\n        asm = GrammarLoader.LoadAssembly(assemblyPath);\r\n      } catch (Exception ex) {\r\n        MessageBox.Show(\"Failed to load assembly: \" + ex.Message);\r\n        return null;\r\n      }\r\n      var types = asm.GetTypes();\r\n      var grammars = new GrammarItemList();\r\n      foreach (Type t in types) {\r\n        if (t.IsAbstract) continue;\r\n        if (!t.IsSubclassOf(typeof(Grammar))) continue;\r\n        grammars.Add(new GrammarItem(t, assemblyPath));\r\n      }\r\n      if (grammars.Count == 0) {\r\n        MessageBox.Show(\"No classes derived from Irony.Grammar were found in the assembly.\");\r\n        return null;\r\n      }\r\n      return grammars;\r\n    }\r\n\r\n    private static bool ContainsGrammar(GrammarItemList items, GrammarItem item) {\r\n      foreach (var listItem in items)\r\n        if (listItem.TypeName == item.TypeName && listItem.Location == item.Location)\r\n          return true;\r\n      return false;\r\n    }\r\n\r\n    private void btnCheckUncheck_Click(object sender, EventArgs e) {\r\n      bool check = sender == btnCheckAll;\r\n      for (int i = 0; i < lstGrammars.Items.Count; i++)\r\n        lstGrammars.SetItemChecked(i, check);\r\n    }\r\n\r\n  }//class\r\n}\r\n"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmSelectGrammars.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmShowException.Designer.cs",
    "content": "namespace Irony.GrammarExplorer {\r\n  partial class fmShowException {\r\n    /// <summary>\r\n    /// Required designer variable.\r\n    /// </summary>\r\n    private System.ComponentModel.IContainer components = null;\r\n\r\n    /// <summary>\r\n    /// Clean up any resources being used.\r\n    /// </summary>\r\n    /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\r\n    protected override void Dispose(bool disposing) {\r\n      if (disposing && (components != null)) {\r\n        components.Dispose();\r\n      }\r\n      base.Dispose(disposing);\r\n    }\r\n\r\n    #region Windows Form Designer generated code\r\n\r\n    /// <summary>\r\n    /// Required method for Designer support - do not modify\r\n    /// the contents of this method with the code editor.\r\n    /// </summary>\r\n    private void InitializeComponent() {\r\n      this.txtException = new System.Windows.Forms.TextBox();\r\n      this.SuspendLayout();\r\n      // \r\n      // txtException\r\n      // \r\n      this.txtException.AcceptsReturn = true;\r\n      this.txtException.AcceptsTab = true;\r\n      this.txtException.Dock = System.Windows.Forms.DockStyle.Fill;\r\n      this.txtException.Font = new System.Drawing.Font(\"Courier New\", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n      this.txtException.HideSelection = false;\r\n      this.txtException.Location = new System.Drawing.Point(0, 0);\r\n      this.txtException.Multiline = true;\r\n      this.txtException.Name = \"txtException\";\r\n      this.txtException.ReadOnly = true;\r\n      this.txtException.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;\r\n      this.txtException.Size = new System.Drawing.Size(764, 334);\r\n      this.txtException.TabIndex = 1;\r\n      // \r\n      // fmShowException\r\n      // \r\n      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n      this.ClientSize = new System.Drawing.Size(764, 334);\r\n      this.Controls.Add(this.txtException);\r\n      this.Name = \"fmShowException\";\r\n      this.Text = \"Exception\";\r\n      this.ResumeLayout(false);\r\n      this.PerformLayout();\r\n\r\n    }\r\n\r\n    #endregion\r\n\r\n    private System.Windows.Forms.TextBox txtException;\r\n  }\r\n}"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmShowException.cs",
    "content": "#region License\r\n/* **********************************************************************************\r\n * Copyright (c) Roman Ivantsov\r\n * This source code is subject to terms and conditions of the MIT License\r\n * for Irony. A copy of the license can be found in the License.txt file\r\n * at the root of this distribution. \r\n * By using this source code in any fashion, you are agreeing to be bound by the terms of the \r\n * MIT License.\r\n * You must not remove this notice from this software.\r\n * **********************************************************************************/\r\n#endregion\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Drawing;\r\nusing System.Text;\r\nusing System.Windows.Forms;\r\n\r\nnamespace Irony.GrammarExplorer {\r\n  public partial class fmShowException : Form {\r\n    public fmShowException() {\r\n      InitializeComponent();\r\n    }\r\n    public static void ShowException(Exception ex) {\r\n      fmShowException fm = new fmShowException();\r\n      fm.txtException.Text = ex.ToString();\r\n      fm.txtException.Select(0, 0);\r\n      fm.Show();\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/fmShowException.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "lib/IronyExplorer/src/IronyExplorer.GrammarExplorer/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<packages>\r\n  <package id=\"Irony\" version=\"1.2.0\" targetFramework=\"net472\" />\r\n  <package id=\"Irony.Interpreter\" version=\"1.2.0\" targetFramework=\"net472\" />\r\n  <package id=\"System.Reflection.Emit.ILGeneration\" version=\"4.3.0\" targetFramework=\"net472\" />\r\n  <package id=\"System.Reflection.Emit.Lightweight\" version=\"4.3.0\" targetFramework=\"net472\" />\r\n</packages>"
  },
  {
    "path": "src/XLParser/ExcelFormulaGrammar.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace XLParser\r\n{\r\n    /// <summary>\r\n    /// Contains the XLParser grammar\r\n    /// </summary>\r\n    [Language(\"Excel Formulas\", \"1.7.5\", \"Grammar for Excel Formulas\")]\r\n    public class ExcelFormulaGrammar : Grammar\r\n    {\r\n        #region 1-Terminals\r\n\r\n        #region Symbols and operators\r\n\r\n        public Terminal at => ToTerm(\"@\");\r\n        public Terminal comma => ToTerm(\",\");\r\n        public Terminal colon => ToTerm(\":\");\r\n        public Terminal hash => ToTerm(\"#\");\r\n        public Terminal semicolon => ToTerm(\";\");\r\n        public Terminal OpenParen => ToTerm(\"(\");\r\n        public Terminal CloseParen => ToTerm(\")\");\r\n        public Terminal CloseSquareParen => ToTerm(\"]\");\r\n        public Terminal OpenSquareParen => ToTerm(\"[\");\r\n        public Terminal exclamationMark => ToTerm(\"!\");\r\n        public Terminal CloseCurlyParen => ToTerm(\"}\");\r\n        public Terminal OpenCurlyParen => ToTerm(\"{\");\r\n        public Terminal QuoteS => ToTerm(\"'\");\r\n\r\n        public Terminal mulop => ToTerm(\"*\");\r\n        public Terminal plusop => ToTerm(\"+\");\r\n        public Terminal divop => ToTerm(\"/\");\r\n        public Terminal minop => ToTerm(\"-\");\r\n        public Terminal concatop => ToTerm(\"&\");\r\n        public Terminal expop => ToTerm(\"^\");\r\n\r\n        // Intersect op is a single space, which cannot be parsed normally so we need an ImpliedSymbolTerminal\r\n        // Attention: ImpliedSymbolTerminal seems to break if you assign it a priority, and its default priority is low\r\n        public Terminal intersectop { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenIntersect);\r\n\r\n        public Terminal percentop => ToTerm(\"%\");\r\n\r\n        public Terminal gtop => ToTerm(\">\");\r\n        public Terminal eqop => ToTerm(\"=\");\r\n        public Terminal ltop => ToTerm(\"<\");\r\n        public Terminal neqop => ToTerm(\"<>\");\r\n        public Terminal gteop => ToTerm(\">=\");\r\n        public Terminal lteop => ToTerm(\"<=\");\r\n\r\n        #endregion\r\n\r\n        #region Literals\r\n\r\n        public Terminal BoolToken { get; } = new RegexBasedTerminal(GrammarNames.TokenBool, \"TRUE|FALSE\", \"T\", \"F\")\r\n        {\r\n            Priority = TerminalPriority.Bool\r\n        };\r\n\r\n        public Terminal NumberToken { get; } = new NumberLiteral(GrammarNames.TokenNumber, NumberOptions.AllowStartEndDot)\r\n        {\r\n            DefaultIntTypes = new[] { TypeCode.Int32, TypeCode.Int64, NumberLiteral.TypeCodeBigInt }\r\n        };\r\n\r\n        public Terminal TextToken { get; } = new StringLiteral(GrammarNames.TokenText, \"\\\"\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes);\r\n\r\n        public Terminal SingleQuotedStringToken { get; } = new StringLiteral(GrammarNames.TokenSingleQuotedString, \"'\",\r\n            StringOptions.AllowsDoubledQuote | StringOptions.AllowsLineBreak | StringOptions.NoEscapes)\r\n        { Priority = TerminalPriority.SingleQuotedString };\r\n\r\n        public Terminal ErrorToken { get; } = new RegexBasedTerminal(GrammarNames.TokenError, \"#NULL!|#DIV/0!|#VALUE!|#NAME\\\\?|#NUM!|#N/A|#GETTING_DATA|#SPILL!\", \"#\");\r\n        public Terminal RefErrorToken => ToTerm(\"#REF!\", GrammarNames.TokenRefError);\r\n\r\n        #endregion\r\n\r\n        #region Functions\r\n        private const string SpecialUdfChars = \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷\"; // Non-word characters from ISO 8859-1 that are allowed in VBA identifiers\r\n        private const string AllUdfChars = SpecialUdfChars + @\"\\\\.\\w\";\r\n        private const string UdfPrefixRegex = @\"('[^<>\"\"/\\|?*]+\\.xla'!|_xll\\.)\";\r\n\r\n        // The following regex uses the rather exotic feature Character Class Subtraction\r\n        // https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#CharacterClassSubtraction\r\n        private static readonly string UdfTokenRegex = $@\"([{AllUdfChars}-[CcRr]]|{UdfPrefixRegex}[{AllUdfChars}]|{UdfPrefixRegex}?[{AllUdfChars}]{{2,1023}})\\(\";\r\n\r\n        public Terminal UDFToken { get; } = new RegexBasedTerminal(GrammarNames.TokenUDF, UdfTokenRegex) { Priority = TerminalPriority.UDF };\r\n\r\n        public Terminal ExcelRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelRefFunction, \"(INDEX|OFFSET|INDIRECT)\\\\(\", \"I\", \"O\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelConditionalRefFunctionToken { get; } = new RegexBasedTerminal(GrammarNames.TokenExcelConditionalRefFunction, \"(IF|CHOOSE)\\\\(\", \"I\", \"C\")\r\n        { Priority = TerminalPriority.ExcelRefFunction };\r\n\r\n        public Terminal ExcelFunction { get; } = new WordsTerminal(GrammarNames.ExcelFunction,  excelFunctionList.Select(f => f + '('))\r\n        { Priority = TerminalPriority.ExcelFunction };\r\n\r\n        // Using this instead of Empty allows a more accurate tree\r\n        public Terminal EmptyArgumentToken { get; } = new ImpliedSymbolTerminal(GrammarNames.TokenEmptyArgument);\r\n\r\n        #endregion\r\n\r\n        #region References and names\r\n\r\n        private const string ColumnPattern = @\"(?:[A-W][A-Z]{1,2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\";\r\n        private const string RowPattern = @\"(?:104857[0-6]|10485[0-6][0-9]|1048[0-4][0-9]{2}|104[0-7][0-9]{3}|10[0-3][0-9]{4}|[1-9][0-9]{1,5}|[1-9])\";\r\n\r\n        private static readonly string[] ColumnPrefix = Enumerable.Range('A', 'Z' - 'A' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n        private static readonly string[] RowPrefix = Enumerable.Range('1', '9' - '1' + 1).Select(c => char.ToString((char)c)).Concat(new[] { \"$\" }).ToArray();\r\n\r\n        public Terminal VRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenVRange, \"[$]?\" + ColumnPattern + \":[$]?\" + ColumnPattern, ColumnPrefix);\r\n        public Terminal HRangeToken { get; } = new RegexBasedTerminal(GrammarNames.TokenHRange, \"[$]?\" + RowPattern + \":[$]?\" + RowPattern, RowPrefix);\r\n\r\n        private const string CellTokenRegex = \"[$]?\" + ColumnPattern + \"[$]?\" + RowPattern;\r\n        public Terminal CellToken { get; } = new RegexBasedTerminal(GrammarNames.TokenCell, CellTokenRegex, ColumnPrefix)\r\n        { Priority = TerminalPriority.CellToken };\r\n\r\n        private static readonly HashSet<UnicodeCategory> UnicodeLetterCategories = new HashSet<UnicodeCategory>\r\n        {\r\n            UnicodeCategory.UppercaseLetter,\r\n            UnicodeCategory.LowercaseLetter,\r\n            UnicodeCategory.TitlecaseLetter,\r\n            UnicodeCategory.ModifierLetter,\r\n            UnicodeCategory.OtherLetter\r\n        };\r\n\r\n        // 48718 letters, but it allows parser to from tokens starting with digits, parentheses, operators...\r\n        private static readonly string[] UnicodeLetters = Enumerable.Range(0, ushort.MaxValue).Where(codePoints => UnicodeLetterCategories.Contains(CharUnicodeInfo.GetUnicodeCategory((char)codePoints))).Select(codePoint => char.ToString((char)codePoint)).ToArray();\r\n        private static readonly string[] NameStartCharPrefix = UnicodeLetters.Concat(new[] { @\"\\\", \"_\" }).ToArray();\r\n\r\n        // Start with a letter or underscore, continue with word character (letters, numbers and underscore), dot or question mark \r\n        private const string NameStartCharRegex = @\"[\\p{L}\\\\_]\";\r\n        private const string NameValidCharacterRegex = @\"[\\w\\\\_\\.\\?€]\";\r\n\r\n        public Terminal NameToken { get; } = new RegexBasedTerminal(GrammarNames.TokenName, NameStartCharRegex + NameValidCharacterRegex + \"*\", NameStartCharPrefix)\r\n        { Priority = TerminalPriority.Name };\r\n\r\n        // Words that are valid names, but are disallowed by Excel. E.g. \"A1\" is a valid name, but it is not because it is also a cell reference.\r\n        // If we ever parse R1C1 references, make sure to include them here\r\n        // TODO: Add all function names here\r\n\r\n        private const string NamedRangeCombinationRegex =\r\n              \"((TRUE|FALSE)\" + NameValidCharacterRegex + \"+)\"\r\n            // \\w is equivalent to [\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}], we want the decimal left out here because otherwise \"A11\" would be a combination token\r\n            + \"|(\" + CellTokenRegex + @\"[\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Pc}\\\\_\\.\\?]\" + NameValidCharacterRegex + \"*)\"\r\n            // allow large cell references (e.g. A1048577) as named range\r\n            + \"|(\" + ColumnPattern + @\"(104857[7-9]|10485[89][0-9]|1048[6-9][0-9]{2}|1049[0-9]{3}|10[5-9][0-9]{4}|1[1-9][0-9]{5}|[2-9][0-9]{6}|d{8,})\" + NameValidCharacterRegex + \"*)\"\r\n            ;\r\n\r\n        // To prevent e.g. \"A1A1\" being parsed as 2 cell tokens\r\n        public Terminal NamedRangeCombinationToken { get; } = new RegexBasedTerminal(GrammarNames.TokenNamedRangeCombination, NamedRangeCombinationRegex,\r\n                ColumnPrefix.Concat(new[] { \"T\", \"F\" }).ToArray())\r\n        { Priority = TerminalPriority.NamedRangeCombination };\r\n\r\n        public Terminal ReservedNameToken = new RegexBasedTerminal(GrammarNames.TokenReservedName, @\"_xlnm\\.[a-zA-Z_]+\", \"_\")\r\n        { Priority = TerminalPriority.ReservedName };\r\n\r\n        #region Structured References\r\n        private const string SRSpecifierRegex = @\"#(All|Data|Headers|Totals|This Row)\";\r\n        public Terminal SRSpecifierToken = new RegexBasedTerminal(GrammarNames.TokenSRSpecifier, SRSpecifierRegex, \"#\")\r\n        { Priority = TerminalPriority.StructuredReference };\r\n\r\n        private const string SRColumnRegex = @\"(?:[^\\[\\]'#@]|(?:'['\\[\\]#@]))+\";\r\n        public Terminal SRColumnToken = new RegexBasedTerminal(GrammarNames.TokenSRColumn, SRColumnRegex)\r\n        { Priority = TerminalPriority.StructuredReference };\r\n        #endregion\r\n\r\n        #region Prefixes\r\n        private const string mustBeQuotedInSheetName = @\"\\(\\);{}#\"\"=<>&+\\-*/\\^%, \";\r\n        private const string notSheetNameChars = @\"'*\\[\\]\\\\:/?\";\r\n        //const string singleQuotedContent = @\"\\w !@#$%^&*()\\-\\+={}|:;<>,\\./\\?\" + \"\\\\\\\"\";\r\n        //const string sheetRegEx = @\"(([\\w\\.]+)|('([\" + singleQuotedContent + @\"]|'')+'))!\";\r\n        private static readonly string normalSheetName = $\"[^{notSheetNameChars}{mustBeQuotedInSheetName}]+\";\r\n        private static readonly string quotedSheetName = $\"([^{notSheetNameChars}]|'')*\";\r\n        //private static readonly string sheetRegEx = $\"(({normalSheetName})|('{quotedSheetName}'))!\";\r\n\r\n        public Terminal SheetToken = new RegexBasedTerminal(GrammarNames.TokenSheet, $\"{normalSheetName}!\")\r\n        { Priority = TerminalPriority.SheetToken };\r\n\r\n        public Terminal SheetQuotedToken = new RegexBasedTerminal(GrammarNames.TokenSheetQuoted, $\"{quotedSheetName}'!\")\r\n        { Priority = TerminalPriority.SheetQuotedToken };\r\n\r\n        private static readonly string multiSheetRegex = $\"{normalSheetName}:{normalSheetName}!\";\r\n        private static readonly string multiSheetQuotedRegex = $\"{quotedSheetName}:{quotedSheetName}'!\";\r\n        public Terminal MultipleSheetsToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheets, multiSheetRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n        public Terminal MultipleSheetsQuotedToken = new RegexBasedTerminal(GrammarNames.TokenMultipleSheetsQuoted, multiSheetQuotedRegex)\r\n        { Priority = TerminalPriority.MultipleSheetsToken };\r\n\r\n        private const string fileNameNumericRegex = @\"\\[[0-9]+\\](?!,)(?=.*!)\";\r\n        public Terminal FileNameNumericToken = new RegexBasedTerminal(GrammarNames.TokenFileNameNumeric, fileNameNumericRegex, \"[\")\r\n        { Priority = TerminalPriority.FileNameNumericToken };\r\n\r\n        private static readonly string fileNameInBracketsRegex = @\"\\[[^\\[\\]]+\\]\" + $\"(?={normalSheetName}!|{quotedSheetName}'!|{multiSheetRegex}|{multiSheetQuotedRegex}|!)\";\r\n        public Terminal FileNameEnclosedInBracketsToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFileNameEnclosedInBrackets, fileNameInBracketsRegex, \"[\")\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: https://stackoverflow.com/a/14632579\r\n        private const string fileNameRegex = @\"[^\\.\\\\\\[\\]]+\\.[a-zA-z]{1,4}\";\r\n        public Terminal FileName { get; } = new RegexBasedTerminal(GrammarNames.TokenFileName, fileNameRegex)\r\n        { Priority = TerminalPriority.FileName };\r\n\r\n        // Source: http://stackoverflow.com/a/6416209/572635\r\n        private const string windowsFilePathRegex = @\"(?:[a-zA-Z]:|\\\\?\\\\?[\\w\\-.$ @~]+)\\\\(([^<>\\\"\" /\\|?*\\\\']|( |''))*\\\\)*\";\r\n        private const string urlPathRegex = @\"https?\\:(//|\\\\\\\\)[\\p{L}\\p{N}\\-_.]+(:[0-9]+)?(/|\\\\)([\\p{L}\\p{N}\\-_.?,'+&%\\$# ()~]*(/|\\\\))*\";\r\n        private const string filePathRegex = @\"(\" + windowsFilePathRegex + @\"|\" + urlPathRegex + @\")\";\r\n        public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)\r\n        { Priority = TerminalPriority.FileNamePath };\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #endregion\r\n\r\n        #region 2-NonTerminals\r\n        // Most non-terminals are first defined here, so they can be used anywhere in the rules\r\n        // Otherwise you can only use non-terminals that have been defined previously\r\n\r\n        public NonTerminal Argument{ get; } = new NonTerminal(GrammarNames.Argument);\r\n        public NonTerminal Arguments{ get; } = new NonTerminal(GrammarNames.Arguments);\r\n        public NonTerminal ArrayColumns{ get; } = new NonTerminal(GrammarNames.ArrayColumns);\r\n        public NonTerminal ArrayConstant{ get; } = new NonTerminal(GrammarNames.ArrayConstant);\r\n        public NonTerminal ArrayFormula{ get; } = new NonTerminal(GrammarNames.ArrayFormula);\r\n        public NonTerminal ArrayRows{ get; } = new NonTerminal(GrammarNames.ArrayRows);\r\n        public NonTerminal Bool{ get; } = new NonTerminal(GrammarNames.Bool);\r\n        public NonTerminal Cell{ get; } = new NonTerminal(GrammarNames.Cell);\r\n        public NonTerminal Constant{ get; } = new NonTerminal(GrammarNames.Constant);\r\n        public NonTerminal ConstantArray{ get; } = new NonTerminal(GrammarNames.ConstantArray);\r\n        public NonTerminal DynamicDataExchange{ get; } = new NonTerminal(GrammarNames.DynamicDataExchange);\r\n        public NonTerminal EmptyArgument{ get; } = new NonTerminal(GrammarNames.EmptyArgument);\r\n        public NonTerminal Error{ get; } = new NonTerminal(GrammarNames.Error);\r\n        public NonTerminal File { get; } = new NonTerminal(GrammarNames.File);\r\n        public NonTerminal Formula{ get; } = new NonTerminal(GrammarNames.Formula);\r\n        public NonTerminal FormulaWithEq{ get; } = new NonTerminal(GrammarNames.FormulaWithEq);\r\n        public NonTerminal FunctionCall{ get; } = new NonTerminal(GrammarNames.FunctionCall);\r\n        public NonTerminal FunctionName{ get; } = new NonTerminal(GrammarNames.FunctionName);\r\n        public NonTerminal HRange{ get; } = new NonTerminal(GrammarNames.HorizontalRange);\r\n        public NonTerminal InfixOp{ get; } = new NonTerminal(GrammarNames.TransientInfixOp);\r\n        public NonTerminal MultiRangeFormula{ get; } = new NonTerminal(GrammarNames.MultiRangeFormula);\r\n        public NonTerminal NamedRange{ get; } = new NonTerminal(GrammarNames.NamedRange);\r\n        public NonTerminal Number{ get; } = new NonTerminal(GrammarNames.Number);\r\n        public NonTerminal PostfixOp{ get; } = new NonTerminal(GrammarNames.TransientPostfixOp);\r\n        public NonTerminal Prefix{ get; } = new NonTerminal(GrammarNames.Prefix);\r\n        public NonTerminal PrefixOp{ get; } = new NonTerminal(GrammarNames.TransientPrefixOp);\r\n        public NonTerminal QuotedFileSheet{ get; } = new NonTerminal(GrammarNames.QuotedFileSheet);\r\n        public NonTerminal Reference{ get; } = new NonTerminal(GrammarNames.Reference);\r\n        public NonTerminal ReferenceItem{ get; } = new NonTerminal(GrammarNames.TransientReferenceItem);\r\n        public NonTerminal ReferenceFunctionCall{ get; } = new NonTerminal(GrammarNames.ReferenceFunctionCall);\r\n        public NonTerminal RefError{ get; } = new NonTerminal(GrammarNames.RefError);\r\n        public NonTerminal RefFunctionName{ get; } = new NonTerminal(GrammarNames.RefFunctionName);\r\n        public NonTerminal ReservedName{ get; } = new NonTerminal(GrammarNames.ReservedName);\r\n        public NonTerminal Sheet{ get; } = new NonTerminal(GrammarNames.Sheet);\r\n        public NonTerminal Start{ get; } = new NonTerminal(GrammarNames.TransientStart);\r\n        public NonTerminal StructuredReference { get; } = new NonTerminal(GrammarNames.StructuredReference);\r\n        public NonTerminal StructuredReferenceColumn { get; } = new NonTerminal(GrammarNames.StructuredReferenceColumn);\r\n        public NonTerminal StructuredReferenceExpression { get; } = new NonTerminal(GrammarNames.StructuredReferenceExpression);\r\n        public NonTerminal StructuredReferenceSpecifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceSpecifier);\r\n        public NonTerminal StructuredReferenceQualifier { get; } = new NonTerminal(GrammarNames.StructuredReferenceQualifier);\r\n        public NonTerminal Text{ get; } = new NonTerminal(GrammarNames.Text);\r\n        public NonTerminal UDFName{ get; } = new NonTerminal(GrammarNames.UDFName);\r\n        public NonTerminal UDFunctionCall{ get; } = new NonTerminal(GrammarNames.UDFunctionCall);\r\n        public NonTerminal Union{ get; } = new NonTerminal(GrammarNames.Union);\r\n        public NonTerminal VRange{ get; } = new NonTerminal(GrammarNames.VerticalRange);\r\n        #endregion\r\n\r\n        public ExcelFormulaGrammar()\r\n        {\r\n\r\n            #region Punctuation\r\n            MarkPunctuation(OpenParen, CloseParen);\r\n            MarkPunctuation(OpenCurlyParen, CloseCurlyParen);\r\n            #endregion\r\n\r\n            #region Rules\r\n\r\n            #region Base rules\r\n            Root = Start;\r\n\r\n            Start.Rule =\r\n                  FormulaWithEq\r\n                | Formula\r\n                | ArrayFormula\r\n                | MultiRangeFormula\r\n                ;\r\n            MarkTransient(Start);\r\n\r\n            ArrayFormula.Rule = OpenCurlyParen + eqop + Formula + CloseCurlyParen;\r\n\r\n            MultiRangeFormula.Rule = eqop + Union;\r\n\r\n            FormulaWithEq.Rule = eqop + Formula;\r\n\r\n            Formula.Rule =\r\n                  Reference + ReduceHere()\r\n                | Constant\r\n                | FunctionCall\r\n                | ConstantArray\r\n                | OpenParen + Formula + CloseParen\r\n                | ReservedName\r\n                ;\r\n\r\n            ReservedName.Rule = ReservedNameToken;\r\n\r\n            Constant.Rule =\r\n                  Number\r\n                | Text\r\n                | Bool\r\n                | Error\r\n                ;\r\n\r\n            Text.Rule = TextToken;\r\n            Number.Rule = NumberToken;\r\n            Bool.Rule = BoolToken;\r\n            Error.Rule = ErrorToken;\r\n            RefError.Rule = RefErrorToken;\r\n            #endregion\r\n\r\n            #region Functions\r\n\r\n            FunctionCall.Rule =\r\n                  FunctionName + Arguments + CloseParen\r\n                | PrefixOp + Formula\r\n                | Formula + PostfixOp\r\n                | Formula + InfixOp + Formula\r\n                ;\r\n\r\n            FunctionName.Rule = ExcelFunction;\r\n\r\n            Arguments.Rule = MakeStarRule(Arguments, comma, Argument);\r\n\r\n            EmptyArgument.Rule = EmptyArgumentToken;\r\n            Argument.Rule = Formula | EmptyArgument;\r\n\r\n            PrefixOp.Rule =\r\n                  ImplyPrecedenceHere(Precedence.UnaryPreFix) + plusop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + minop\r\n                | ImplyPrecedenceHere(Precedence.UnaryPreFix) + at;\r\n            MarkTransient(PrefixOp);\r\n\r\n            InfixOp.Rule =\r\n                  expop\r\n                | mulop\r\n                | divop\r\n                | plusop\r\n                | minop\r\n                | concatop\r\n                | gtop\r\n                | eqop\r\n                | ltop\r\n                | neqop\r\n                | gteop\r\n                | lteop;\r\n            MarkTransient(InfixOp);\r\n\r\n            // ImplyPrecedenceHere doesn't seem to work for this rule, but postfix has such a high priority shift will nearly always be the correct action\r\n            PostfixOp.Rule = PreferShiftHere() + percentop;\r\n            MarkTransient(PostfixOp);\r\n            #endregion\r\n\r\n            #region References\r\n\r\n            Reference.Rule =\r\n                  ReferenceItem\r\n                | ReferenceFunctionCall\r\n                | OpenParen + Reference + PreferShiftHere() + CloseParen\r\n                | Prefix + ReferenceItem\r\n                | DynamicDataExchange\r\n                ;\r\n\r\n            ReferenceFunctionCall.Rule =\r\n                  Reference + colon + Reference\r\n                | Reference + intersectop + Reference\r\n                | OpenParen + Union + CloseParen\r\n                | RefFunctionName + Arguments + CloseParen\r\n                | Reference + hash\r\n                | exclamationMark + Reference\r\n                ;\r\n\r\n            RefFunctionName.Rule = ExcelRefFunctionToken | ExcelConditionalRefFunctionToken;\r\n\r\n            Union.Rule = MakePlusRule(Union, comma, Reference);\r\n\r\n            ReferenceItem.Rule =\r\n                  Cell\r\n                | NamedRange\r\n                | VRange\r\n                | HRange\r\n                | RefError\r\n                | UDFunctionCall\r\n                | StructuredReference\r\n                ;\r\n            MarkTransient(ReferenceItem);\r\n\r\n            UDFunctionCall.Rule = UDFName + Arguments + CloseParen;\r\n            UDFName.Rule = UDFToken;\r\n\r\n            VRange.Rule = VRangeToken;\r\n            HRange.Rule = HRangeToken;\r\n\r\n            Cell.Rule = CellToken;\r\n\r\n            File.Rule =\r\n                  FileNameNumericToken\r\n                | FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileNameEnclosedInBracketsToken\r\n                | FilePathToken + FileName\r\n                ;\r\n\r\n            DynamicDataExchange.Rule = File + exclamationMark + SingleQuotedStringToken;\r\n\r\n            NamedRange.Rule = NameToken | NamedRangeCombinationToken;\r\n\r\n            Prefix.Rule =\r\n                  SheetToken\r\n                | QuoteS + SheetQuotedToken\r\n                | File + SheetToken\r\n                | QuoteS + File + SheetQuotedToken\r\n                | File + exclamationMark\r\n                | MultipleSheetsToken\r\n                | QuoteS + MultipleSheetsQuotedToken\r\n                | File + MultipleSheetsToken\r\n                | QuoteS + File + MultipleSheetsQuotedToken\r\n                | RefErrorToken\r\n                ;\r\n\r\n            StructuredReferenceQualifier.Rule = NameToken;\r\n\r\n            StructuredReferenceSpecifier.Rule =\r\n                  SRSpecifierToken\r\n                | at\r\n                | OpenSquareParen + SRSpecifierToken + CloseSquareParen;\r\n\r\n            StructuredReferenceColumn.Rule =\r\n                  SRColumnToken\r\n                | OpenSquareParen + SRColumnToken + CloseSquareParen;\r\n\r\n            StructuredReferenceExpression.Rule =\r\n                  StructuredReferenceColumn\r\n                | StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn\r\n                | at + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn\r\n                | StructuredReferenceSpecifier + comma + StructuredReferenceSpecifier + comma + StructuredReferenceColumn + colon + StructuredReferenceColumn\r\n                ;\r\n\r\n            StructuredReference.Rule =\r\n                  OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + CloseSquareParen\r\n                | StructuredReferenceQualifier + OpenSquareParen + StructuredReferenceExpression + CloseSquareParen\r\n                ;\r\n            #endregion\r\n\r\n            #region Arrays\r\n            ConstantArray.Rule = OpenCurlyParen + ArrayColumns + CloseCurlyParen;\r\n\r\n            ArrayColumns.Rule = MakePlusRule(ArrayColumns, semicolon, ArrayRows);\r\n            ArrayRows.Rule = MakePlusRule(ArrayRows, comma, ArrayConstant);\r\n\r\n            ArrayConstant.Rule = Constant | PrefixOp + Number | RefError;\r\n            #endregion\r\n\r\n            #endregion\r\n\r\n            #region 5-Operator Precedence            \r\n            // Some of these operators are neutral associative instead of left associative,\r\n            // but this ensures a consistent parse tree. As a lot of code is \"hardcoded\" onto the specific\r\n            // structure of the parse tree, we like consistency.\r\n            RegisterOperators(Precedence.Comparison, Associativity.Left, eqop, ltop, gtop, lteop, gteop, neqop);\r\n            RegisterOperators(Precedence.Concatenation, Associativity.Left, concatop);\r\n            RegisterOperators(Precedence.Addition, Associativity.Left, plusop, minop);\r\n            RegisterOperators(Precedence.Multiplication, Associativity.Left, mulop, divop);\r\n            RegisterOperators(Precedence.Exponentiation, Associativity.Left, expop);\r\n            RegisterOperators(Precedence.UnaryPostFix, Associativity.Left, percentop, hash);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, at);\r\n            RegisterOperators(Precedence.UnaryPreFix, Associativity.Left, exclamationMark);\r\n            RegisterOperators(Precedence.Union, Associativity.Left, comma);\r\n            RegisterOperators(Precedence.Intersection, Associativity.Left, intersectop);\r\n            RegisterOperators(Precedence.Range, Associativity.Left, colon);\r\n            #endregion\r\n        }\r\n\r\n\r\n\r\n        #region Precedence and Priority constants\r\n        // Source: https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a\r\n        // Could also be an enum, but this way you don't need int casts\r\n        private static class Precedence\r\n        {\r\n            // Don't use priority 0, Irony seems to view it as no priority set\r\n            public const int Comparison = 1;\r\n            public const int Concatenation = 2;\r\n            public const int Addition = 3;\r\n            public const int Multiplication = 4;\r\n            public const int Exponentiation = 5;\r\n            public const int UnaryPostFix = 6;\r\n            public const int UnaryPreFix = 7;\r\n            //public const int Reference = 8;\r\n            public const int Union = 9;\r\n            public const int Intersection = 10;\r\n            public const int Range = 11;\r\n        }\r\n\r\n        // Terminal priorities, indicates to lexer which token it should pick when multiple tokens can match\r\n        // E.g. \"A1\" is both a CellToken and NamedRange, pick cell token because it has a higher priority\r\n        // E.g. \"A1Blah\" Is Both a CellToken + NamedRange, NamedRange and NamedRangeCombination, pick NamedRangeCombination\r\n        private static class TerminalPriority\r\n        {\r\n            // Irony Low value\r\n            //public const int Low = -1000;\r\n\r\n            public const int Name = -800;\r\n            public const int ReservedName = -700;\r\n\r\n            public const int StructuredReference = -500;\r\n\r\n            public const int FileName = -500;\r\n            public const int FileNamePath = -800;\r\n\r\n            public const int SingleQuotedString = -100;\r\n\r\n            // Irony Normal value, default value\r\n            //public const int Normal = 0;\r\n            public const int Bool = 0;\r\n\r\n            public const int MultipleSheetsToken = 100;\r\n\r\n            // Irony High value\r\n            //public const int High = 1000;\r\n\r\n            public const int CellToken = 1000;\r\n\r\n            public const int NamedRangeCombination = 1100;\r\n\r\n            public const int UDF = 1150;\r\n\r\n            public const int ExcelFunction = 1200;\r\n            public const int ExcelRefFunction = 1200;\r\n            public const int FileNameNumericToken = 1200;\r\n            public const int SheetToken = 1200;\r\n            public const int SheetQuotedToken = 1200;\r\n        }\r\n        #endregion\r\n\r\n        private static string[] excelFunctionList => GetExcelFunctionList();\r\n        private static string[] GetExcelFunctionList()\r\n        {\r\n            var assembly = typeof(ExcelFormulaGrammar).GetTypeInfo().Assembly;\r\n            var resource = assembly.GetManifestResourceStream(\"XLParser.Resources.ExcelBuiltinFunctionList.txt\");\r\n            using (var sr = new StreamReader(resource))\r\n                return sr.ReadToEnd().Split(new[] { '\\n', '\\r' }, StringSplitOptions.RemoveEmptyEntries);\r\n        }\r\n\r\n    }\r\n\r\n    #region Names\r\n    /// <summary>\r\n    /// Collection of names used for terminals and non-terminals in the Excel Formula Grammar.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// Using these is strongly recommended, as these will change when breaking changes occur.\r\n    /// It also allows you to see which code works on what grammar constructs.\r\n    /// </remarks>\r\n    // Keep these constants instead of methods/properties, since that allows them to be used in switch statements.\r\n    public static class GrammarNames\r\n    {\r\n        #region Non-Terminals\r\n        public const string Argument = \"Argument\";\r\n        public const string Arguments = \"Arguments\";\r\n        public const string ArrayColumns = \"ArrayColumns\";\r\n        public const string ArrayConstant = \"ArrayConstant\";\r\n        public const string ArrayFormula = \"ArrayFormula\";\r\n        public const string ArrayRows = \"ArrayRows\";\r\n        public const string Bool = \"Bool\";\r\n        public const string Cell = \"Cell\";\r\n        public const string Constant = \"Constant\";\r\n        public const string ConstantArray = \"ConstantArray\";\r\n        public const string DynamicDataExchange = \"DynamicDataExchange\";\r\n        public const string EmptyArgument = \"EmptyArgument\";\r\n        public const string Error = \"Error\";\r\n        public const string ExcelFunction = \"ExcelFunction\";\r\n        public const string File = \"File\";\r\n        public const string Formula = \"Formula\";\r\n        public const string FormulaWithEq = \"FormulaWithEq\";\r\n        public const string FunctionCall = \"FunctionCall\";\r\n        public const string FunctionName = \"FunctionName\";\r\n        public const string HorizontalRange = \"HRange\";\r\n        public const string MultiRangeFormula = \"MultiRangeFormula\";\r\n        public const string NamedRange = \"NamedRange\";\r\n        public const string Number = \"Number\";\r\n        public const string Prefix = \"Prefix\";\r\n        public const string QuotedFileSheet = \"QuotedFileSheet\";\r\n        public const string Range = \"Range\";\r\n        public const string Reference = \"Reference\";\r\n        public const string ReferenceFunctionCall = \"ReferenceFunctionCall\";\r\n        public const string RefError = \"RefError\";\r\n        public const string RefFunctionName = \"RefFunctionName\";\r\n        public const string ReservedName = \"ReservedName\";\r\n        public const string Sheet = \"Sheet\";\r\n        public const string StructuredReference = \"StructuredReference\";\r\n        public const string StructuredReferenceColumn = \"StructuredReferenceColumn\";\r\n        public const string StructuredReferenceExpression = \"StructuredReferenceExpression\";\r\n        public const string StructuredReferenceSpecifier = \"StructuredReferenceSpecifier\";\r\n        public const string StructuredReferenceQualifier = \"StructuredReferenceQualifier\";\r\n        public const string Text = \"Text\";\r\n        public const string UDFName = \"UDFName\";\r\n        public const string UDFunctionCall = \"UDFunctionCall\";\r\n        public const string Union = \"Union\";\r\n        public const string VerticalRange = \"VRange\";\r\n        #endregion\r\n\r\n        #region Transient Non-Terminals\r\n        public const string TransientStart = \"Start\";\r\n        public const string TransientInfixOp = \"InfixOp\";\r\n        public const string TransientPostfixOp = \"PostfixOp\";\r\n        public const string TransientPrefixOp = \"PrefixOp\";\r\n        public const string TransientReferenceItem = \"ReferenceItem\";\r\n        #endregion\r\n\r\n        #region Terminals\r\n        public const string TokenBool = \"BoolToken\";\r\n        public const string TokenCell = \"CellToken\";\r\n        public const string TokenEmptyArgument = \"EmptyArgumentToken\";\r\n        public const string TokenError = \"ErrorToken\";\r\n        public const string TokenExcelRefFunction = \"ExcelRefFunctionToken\";\r\n        public const string TokenExcelConditionalRefFunction = \"ExcelConditionalRefFunctionToken\";\r\n        public const string TokenFilePath = \"FilePathToken\";\r\n        public const string TokenFileName = \"FileNameToken\";\r\n        public const string TokenFileNameEnclosedInBrackets = \"FileNameEnclosedInBracketsToken\";\r\n        public const string TokenFileNameNumeric = \"FileNameNumericToken\";\r\n        public const string TokenHRange = \"HRangeToken\";\r\n        public const string TokenIntersect = \"INTERSECT\";\r\n        public const string TokenMultipleSheets = \"MultipleSheetsToken\";\r\n        public const string TokenMultipleSheetsQuoted = \"MultipleSheetsQuotedToken\";\r\n        public const string TokenName = \"NameToken\";\r\n        public const string TokenNamedRangeCombination = \"NamedRangeCombinationToken\";\r\n        public const string TokenNumber = \"NumberToken\";\r\n        public const string TokenRefError = \"RefErrorToken\";\r\n        public const string TokenReservedName = \"ReservedNameToken\";\r\n        public const string TokenSingleQuotedString = \"SingleQuotedString\";\r\n        public const string TokenSheet = \"SheetNameToken\";\r\n        public const string TokenSheetQuoted = \"SheetNameQuotedToken\";\r\n        public const string TokenSRColumn = \"SRColumnToken\";\r\n        public const string TokenSRSpecifier = \"SRSpecifierToken\";\r\n        public const string TokenText = \"TextToken\";\r\n        public const string TokenUDF = \"UDFToken\";\r\n        public const string TokenUnionOperator = \",\";\r\n        public const string TokenVRange = \"VRangeToken\";\r\n        #endregion\r\n\r\n    }\r\n    #endregion\r\n}\r\n"
  },
  {
    "path": "src/XLParser/ExcelFormulaParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser\r\n{\r\n    /// <summary>\r\n    /// Excel formula parser <br/>\r\n    /// Contains parser and utilities that operate directly on the parse tree, or makes working with the parse tree easier.\r\n    /// </summary>\r\n    public static class ExcelFormulaParser\r\n    {\r\n        /// <summary>\r\n        /// Thread-local singleton parser instance\r\n        /// </summary>\r\n        [ThreadStatic] private static Parser _p;\r\n\r\n        /// <summary>\r\n        /// Thread-safe parser\r\n        /// </summary>\r\n        private static Parser P => _p ?? (_p = new Parser(new ExcelFormulaGrammar()));\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree's root node\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree root node</returns>\r\n        public static ParseTreeNode Parse(string input)\r\n        {\r\n            return ParseToTree(input).Root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a formula, return the the tree\r\n        /// </summary>\r\n        /// <param name=\"input\">The formula to be parsed.</param>\r\n        /// <exception cref=\"ArgumentException\">\r\n        /// If formula could not be parsed\r\n        /// </exception>\r\n        /// <returns>Parse tree</returns>\r\n        public static ParseTree ParseToTree(string input)\r\n        {\r\n            var tree = P.Parse(input);\r\n\r\n            if (tree.HasErrors())\r\n            {\r\n                throw new ArgumentException(\"Failed parsing input <<\" + input + \">>\");\r\n            }\r\n\r\n            var intersects = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenIntersect));\r\n\r\n            foreach (ParseTreeNode intersect in intersects)\r\n            {\r\n                var newLocation = new SourceLocation(intersect.Span.Location.Position - 1, intersect.Span.Location.Line, intersect.Span.Location.Column - 1);\r\n                intersect.Span = new SourceSpan(newLocation, 1);\r\n            }\r\n\r\n            //Quoted sheets and SR Columns require the preceding whitespaces skipped by Irony as they are needed for unique sheet and column names\r\n            var precedingWhiteSpaceNodes = tree.Root.AllNodes().Where(node => node.Is(GrammarNames.TokenSheetQuoted) | node.Is(GrammarNames.TokenSRColumn));\r\n\r\n            foreach (ParseTreeNode precedingWhiteSpaceNode in precedingWhiteSpaceNodes)\r\n            {\r\n                PrefixInfo.FixPrecedingWhiteSpaces(precedingWhiteSpaceNode, input);\r\n            }\r\n\r\n            return tree;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Non-terminal nodes in depth-first pre-order, with a conditional stop\r\n        /// </summary>\r\n        /// <param name=\"root\">The root node</param>\r\n        /// <param name=\"stopAt\">Don't process the children of a node matching this predicate</param>\r\n        // inspiration taken from https://irony.codeplex.com/discussions/213938\r\n        public static IEnumerable<ParseTreeNode> AllNodesConditional(this ParseTreeNode root, Predicate<ParseTreeNode> stopAt = null)\r\n        {\r\n            var stack = new Stack<ParseTreeNode>();\r\n            stack.Push(root);\r\n\r\n            while (stack.Count > 0)\r\n            {\r\n                var node = stack.Pop();\r\n                yield return node;\r\n\r\n                // Check if we don't want to process the children of this node\r\n                if (stopAt != null && stopAt(node)) continue;\r\n\r\n                var children = node.ChildNodes;\r\n                // Push children on in reverse order so that they will\r\n                // be evaluated left -> right when popped.\r\n                for (int i = children.Count - 1; i >= 0; i--)\r\n                {\r\n                    stack.Push(children[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root)\r\n        {\r\n            return AllNodesConditional(root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// All non-terminal nodes of a certain type in depth-first pre-order\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> AllNodes(this ParseTreeNode root, string type)\r\n        {\r\n            return AllNodes(root.AllNodes(), type);\r\n        }\r\n\r\n        internal static IEnumerable<ParseTreeNode> AllNodes(IEnumerable<ParseTreeNode> allNodes, string type)\r\n        {\r\n            return allNodes.Where(node => node.Is(type));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the parent node of a node\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// This is an expensive operation, as the whole tree will be searched through\r\n        /// </remarks>\r\n        public static ParseTreeNode Parent(this ParseTreeNode child, ParseTreeNode treeRoot)\r\n        {\r\n            var parent = treeRoot.AllNodes()\r\n                .FirstOrDefault(node => node.ChildNodes.Any(c => c == child));\r\n            if(parent == null) throw new ArgumentException(\"Child is not part of the tree\", nameof(child));\r\n            return parent;\r\n        }\r\n\r\n        /// <summary>\r\n        /// The node type/name\r\n        /// </summary>\r\n        public static string Type(this ParseTreeNode node)\r\n        {\r\n            return node.Term.Name;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if a node is of a particular type\r\n        /// </summary>\r\n        public static bool Is(this ParseTreeNode pt, string type)\r\n        {\r\n            return pt.Type() == type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function\r\n        /// </summary>\r\n        public static Boolean IsFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.FunctionCall)\r\n                || input.Is(GrammarNames.ReferenceFunctionCall)\r\n                || input.Is(GrammarNames.UDFunctionCall)\r\n                // This gives potential problems/duplication on external UDFs, but they are so rare that I think this is acceptable\r\n                || (input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsFunction())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents parentheses \"(_)\"\r\n        /// </summary>\r\n        public static bool IsParentheses(this ParseTreeNode input)\r\n        {\r\n            switch (input.Type())\r\n            {\r\n                case GrammarNames.Formula:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Formula);\r\n                case GrammarNames.Reference:\r\n                    return input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.Reference);\r\n                default:\r\n                    return false;\r\n            }\r\n        }\r\n\r\n        public static bool IsBinaryOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 3\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsBinaryNonReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.FunctionCall);\r\n        }\r\n\r\n        public static bool IsBinaryReferenceOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() && input.Is(GrammarNames.ReferenceFunctionCall);\r\n        }\r\n\r\n        public static bool IsUnaryOperation(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input) || IsUnaryPostfixOperation(input);\r\n        }\r\n\r\n        public static bool IsUnaryPrefixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[0].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n        }\r\n\r\n        public static bool IsUnaryPostfixOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsFunction()\r\n                   && input.ChildNodes.Count == 2\r\n                   && input.ChildNodes[1].Term.Flags.HasFlag(TermFlags.IsOperator);\r\n\r\n        }\r\n\r\n        private static string RemoveFinalSymbol(string input)\r\n        {\r\n            input = input.Substring(0, input.Length - 1);\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get the function or operator name of this function call\r\n        /// </summary>\r\n        public static string GetFunction(this ParseTreeNode input)\r\n        {\r\n            if (input.IsIntersection())\r\n            {\r\n                return GrammarNames.TokenIntersect;\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return GrammarNames.TokenUnionOperator;\r\n            }\r\n            if (input.IsBinaryOperation() || input.IsUnaryPostfixOperation())\r\n            {\r\n                return input.ChildNodes[1].Print();\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return input.ChildNodes[0].Print();\r\n            }\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return RemoveFinalSymbol(input.ChildNodes[0].Print()).ToUpper();\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return $\"{input.ChildNodes[0].Print()}{GetFunction(input.ChildNodes[1])}\";\r\n            }\r\n\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if this node is a specific function\r\n        /// </summary>\r\n        public static bool MatchFunction(this ParseTreeNode input, string functionName)\r\n        {\r\n            return IsFunction(input) && GetFunction(input) == functionName;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all the arguments of a function or operation\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetFunctionArguments(this ParseTreeNode input)\r\n        {\r\n            if (input.IsNamedFunction())\r\n            {\r\n                return input\r\n                    .ChildNodes[1] // \"Arguments\" non-terminal\r\n                    .ChildNodes    // \"Argument\" non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            if (input.IsBinaryOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0], input.ChildNodes[2]};\r\n            }\r\n            if (input.IsUnaryPrefixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[1]};\r\n            }\r\n            if (input.IsUnaryPostfixOperation())\r\n            {\r\n                return new[] {input.ChildNodes[0]};\r\n            }\r\n            if (input.IsUnion())\r\n            {\r\n                return input.ChildNodes[0].ChildNodes;\r\n            }\r\n            if (input.IsExternalUDFunction())\r\n            {\r\n                return input // Reference\r\n                    .ChildNodes[1] // UDFunctionCall\r\n                    .ChildNodes[1] // Arguments\r\n                    .ChildNodes // Argument non-terminals\r\n                    .Select(node => node.ChildNodes[0])\r\n                    ;\r\n            }\r\n            throw new ArgumentException(\"Not a function call\", nameof(input));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a built-in excel function\r\n        /// </summary>\r\n        public static bool IsBuiltinFunction(this ParseTreeNode node)\r\n        {\r\n            return node.IsFunction() &&\r\n                (node.ChildNodes[0].Is(GrammarNames.FunctionName) || node.ChildNodes[0].Is(GrammarNames.RefFunctionName));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an intersection\r\n        /// </summary>\r\n        public static bool IsIntersection(this ParseTreeNode input)\r\n        {\r\n            return IsBinaryOperation(input) &&\r\n                       input.ChildNodes[1].Token.Terminal.Name == GrammarNames.TokenIntersect;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents an union\r\n        /// </summary>\r\n        public static bool IsUnion(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.ReferenceFunctionCall)\r\n                && input.ChildNodes.Count == 1\r\n                && input.ChildNodes[0].Is(GrammarNames.Union);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks whether this node is a function call with name, and not just a unary or binary operation\r\n        /// </summary>\r\n        public static bool IsNamedFunction(this ParseTreeNode input)\r\n        {\r\n            return (input.Is(GrammarNames.FunctionCall) && input.ChildNodes[0].Is(GrammarNames.FunctionName))\r\n                || (input.Is(GrammarNames.ReferenceFunctionCall) && input.ChildNodes[0].Is(GrammarNames.RefFunctionName))\r\n                || input.Is(GrammarNames.UDFunctionCall);\r\n        }\r\n\r\n        public static bool IsOperation(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryOperation() || input.IsUnaryOperation();\r\n        }\r\n\r\n        public static bool IsExternalUDFunction(this ParseTreeNode input)\r\n        {\r\n            return input.Is(GrammarNames.Reference) && input.ChildNodes.Count == 2 && input.ChildNodes[1].IsNamedFunction();\r\n        }\r\n\r\n        /// <summary>\r\n        /// True if this node presents a number constant with a sign\r\n        /// </summary>\r\n        public static bool IsNumberWithSign(this ParseTreeNode input)\r\n        {\r\n            return IsUnaryPrefixOperation(input)\r\n                   && input.ChildNodes[1].ChildNodes[0].Is(GrammarNames.Constant)\r\n                   && input.ChildNodes[1].ChildNodes[0].ChildNodes[0].Is(GrammarNames.Number);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Extract all of the information from a Prefix non-terminal\r\n        /// </summary>\r\n        public static PrefixInfo GetPrefixInfo(this ParseTreeNode prefix) => PrefixInfo.From(prefix);\r\n\r\n        /// <summary>\r\n        /// Go to the first non-formula child node\r\n        /// </summary>\r\n        public static ParseTreeNode SkipFormula(this ParseTreeNode input)\r\n        {\r\n            while (input.Is(GrammarNames.Formula))\r\n            {\r\n                input = input.ChildNodes.First();\r\n            }\r\n            return input;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all child nodes that are references and aren't part of another reference expression\r\n        /// </summary>\r\n        public static IEnumerable<ParseTreeNode> GetReferenceNodes(this ParseTreeNode input)\r\n        {\r\n            return input.AllNodesConditional(node => node.Is(GrammarNames.Reference))\r\n                .Where(node => node.Is(GrammarNames.Reference))\r\n                .Select(node => node.SkipToRelevant())\r\n                ;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the ParserReferences from the input parse tree node and its children\r\n        /// </summary>\r\n        /// <remarks>\r\n        /// 5 cases:\r\n        /// 1. ReferenceItem node: convert to ParserReference\r\n        /// 2. Reference node (Prefix ReferenceItem): convert to ParserReference, recursive call on the nodes returned from GetReferenceNodes(node)\r\n        ///     (to include the references in the arguments of external UDFs)\r\n        /// 3. Range node (Cell:Cell): recursive call to retrieve the 2 limits, create ParserReference of type CellRange\r\n        /// 4. Range node with complex limits: recursive call to retrieve limits as 2 ParserReferences\r\n        /// 5. Other cases (RefFunctionCall, Union, Arguments):recursive call on the nodes returned from GetReferenceNodes(node)\r\n        /// </remarks>\r\n        public static IEnumerable<ParserReference> GetParserReferences(this ParseTreeNode node)\r\n        {\r\n            if (node.Type() == GrammarNames.Reference && node.ChildNodes.Count == 1)\r\n                node = node.ChildNodes[0];\r\n\r\n            var list = new List<ParserReference>();\r\n\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Cell:\r\n                case GrammarNames.NamedRange:\r\n                case GrammarNames.HorizontalRange:\r\n                case GrammarNames.VerticalRange:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.RefError:\r\n                    list.Add(new ParserReference(node));\r\n                    break;\r\n                case GrammarNames.Reference:\r\n                    list.Add(new ParserReference(node));\r\n                    list.AddRange(node.ChildNodes[1].GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n                default:\r\n                    if (node.IsRange())\r\n                    {\r\n                        var rangeStart = GetParserReferences(node.ChildNodes[0]).FirstOrDefault();\r\n                        var rangeEnd = GetParserReferences(node.ChildNodes[2]).FirstOrDefault();\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Cell && rangeEnd?.ReferenceType == ReferenceType.Cell)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.MaxLocation = rangeEnd.MinLocation;\r\n                            range.ReferenceType = ReferenceType.CellRange;\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                        if (rangeStart?.ReferenceType == ReferenceType.Table && rangeEnd?.ReferenceType == ReferenceType.Table && rangeStart.Name == rangeEnd.Name && rangeStart.TableColumns.Length == 1 && rangeEnd.TableColumns.Length == 1)\r\n                        {\r\n                            ParserReference range = rangeStart;\r\n                            range.TableColumns = rangeStart.TableColumns.Concat(rangeEnd.TableColumns).ToArray();\r\n                            range.TableSpecifiers = rangeStart.TableSpecifiers.SequenceEqual(rangeEnd.TableSpecifiers) ? range.TableSpecifiers : new string[0];\r\n                            range.ReferenceNode = node;\r\n                            range.LocationString = node.Print();\r\n                            list.Add(range);\r\n                            break;\r\n                        }\r\n                    }\r\n                    list.AddRange(node.GetReferenceNodes().SelectMany(x => x.GetParserReferences()));\r\n                    break;\r\n            }\r\n            return list;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Whether or not this node represents a range\r\n        /// </summary>\r\n        public static bool IsRange(this ParseTreeNode input)\r\n        {\r\n            return input.IsBinaryReferenceOperation() && input.ChildNodes[1].Is(\":\") && input.ChildNodes[0].ChildNodes.Last().Type() == input.ChildNodes[2].ChildNodes.Last().Type();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Go to the first \"relevant\" child node, i.e. skips wrapper nodes\r\n        /// </summary>\r\n        /// <param name=\"input\">The input parse tree node</param>\r\n        /// <param name=\"skipReferencesWithoutPrefix\">If true, skip all reference nodes without a prefix instead of only parentheses</param>\r\n        /// <remarks>\r\n        /// Skips:\r\n        /// * FormulaWithEq and ArrayFormula nodes\r\n        /// * Formula nodes\r\n        /// * Parentheses\r\n        /// * Reference nodes which are just wrappers\r\n        /// </remarks>\r\n        public static ParseTreeNode SkipToRelevant(this ParseTreeNode input, bool skipReferencesWithoutPrefix = false)\r\n        {\r\n            while (true)\r\n            {\r\n                switch (input.Type())\r\n                {\r\n                    case GrammarNames.FormulaWithEq:\r\n                    case GrammarNames.ArrayFormula:\r\n                        input = input.ChildNodes[1];\r\n                        break;\r\n                    case GrammarNames.Argument:\r\n                    case GrammarNames.Formula:\r\n                        if (input.ChildNodes.Count == 1)\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    case GrammarNames.Reference:\r\n                        // Skip references which are parentheses\r\n                        // Skip references without a prefix (=> they only have one child node) if the option is set\r\n                        if ((skipReferencesWithoutPrefix && input.ChildNodes.Count == 1) || input.IsParentheses())\r\n                        {\r\n                            input = input.ChildNodes[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            return input;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        return input;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Pretty-print a parse tree to a string\r\n        /// </summary>\r\n        public static string Print(this ParseTreeNode input)\r\n        {\r\n            // For terminals, just print the token text\r\n            if (input.Term is Terminal)\r\n            {\r\n                return input.Token.Text;\r\n            }\r\n\r\n            // (Lazy) enumerable for printed children\r\n            var children = input.ChildNodes.Select(Print);\r\n            // Concrete list when needed\r\n            List<string> childrenList;\r\n\r\n            // Switch on non-terminals\r\n            switch (input.Term.Name)\r\n            {\r\n                case GrammarNames.Formula:\r\n                    // Check if these are brackets, otherwise print first child\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : children.First();\r\n\r\n                case GrammarNames.FunctionCall:\r\n                case GrammarNames.ReferenceFunctionCall:\r\n                case GrammarNames.UDFunctionCall:\r\n                    childrenList = children.ToList();\r\n\r\n                    if (input.IsNamedFunction())\r\n                    {\r\n                        return string.Join(\"\", childrenList) + \")\";\r\n                    }\r\n\r\n                    if (input.IsBinaryOperation())\r\n                    {\r\n                        // format string for \"normal\" binary operation\r\n                        string format = \"{0}{1}{2}\";\r\n                        if (input.IsIntersection())\r\n                        {\r\n                            format = \"{0} {2}\";\r\n                        }\r\n\r\n                        return string.Format(format, childrenList[0], childrenList[1], childrenList[2]);\r\n                    }\r\n\r\n                    if (input.IsUnion())\r\n                    {\r\n                        return $\"({string.Join(\",\", childrenList)})\";\r\n                    }\r\n\r\n                    if (input.IsUnaryOperation())\r\n                    {\r\n                        return string.Join(\"\", childrenList);\r\n                    }\r\n\r\n                    throw new ArgumentException(\"Unknown function type.\");\r\n\r\n                case GrammarNames.Reference:\r\n                    return IsParentheses(input) ? $\"({children.First()})\" : string.Concat(children);\r\n\r\n                case GrammarNames.Prefix:\r\n                    var ret = string.Join(\"\", children);\r\n                    // The exclamation mark token is not included in the parse tree, so we have to add that if it's a single file\r\n                    if (input.ChildNodes.Count == 1 && input.ChildNodes[0].Is(GrammarNames.File))\r\n                    {\r\n                        ret += \"!\";\r\n                    }\r\n                    return ret;\r\n\r\n                case GrammarNames.ArrayFormula:\r\n                    return \"{=\" + children.ElementAt(1) + \"}\";\r\n\r\n                // Terms for which to print all child nodes concatenated\r\n                case GrammarNames.ArrayConstant:\r\n                case GrammarNames.DynamicDataExchange:\r\n                case GrammarNames.FormulaWithEq:\r\n                case GrammarNames.File:\r\n                case GrammarNames.MultiRangeFormula:\r\n                case GrammarNames.StructuredReference:\r\n                case GrammarNames.StructuredReferenceColumn:\r\n                case GrammarNames.StructuredReferenceExpression:\r\n                case GrammarNames.StructuredReferenceSpecifier:\r\n                    return string.Join(\"\", children);\r\n\r\n                // Terms for which we print the children comma-separated\r\n                case GrammarNames.Arguments:\r\n                case GrammarNames.ArrayRows:\r\n                case GrammarNames.Union:\r\n                    return string.Join(\",\", children);\r\n\r\n                case GrammarNames.ArrayColumns:\r\n                    return string.Join(\";\", children);\r\n\r\n                case GrammarNames.ConstantArray:\r\n                    return $\"{{{children.First()}}}\";\r\n\r\n                default:\r\n                    // If it is not defined above and the number of children is exactly one, we want to just print the first child\r\n                    if (input.ChildNodes.Count == 1)\r\n                    {\r\n                        return children.First();\r\n                    }\r\n\r\n                    throw new ArgumentException($\"Could not print node of type '{input.Term.Name}'.\" + Environment.NewLine +\r\n                                                \"This probably means the Excel grammar was modified without the print function being modified\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n\r\n"
  },
  {
    "path": "src/XLParser/FormulaAnalyzer.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\nusing System.Collections;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace XLParser\r\n{\r\n    /// <summary>\r\n    /// This class can do some simple analysis on the trees produced by the parser.\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// To prevent bloating this class, please make a new (sub)class and file when you want to add a coherent set of other analyses.\r\n    /// </remarks>\r\n    public class FormulaAnalyzer\r\n    {\r\n        public ParseTreeNode Root { get; private set; }\r\n\r\n        private List<ParseTreeNode> allNodes;\r\n\r\n        /// <summary>\r\n        /// Lazy cached version of all nodes\r\n        /// </summary>\r\n        public List<ParseTreeNode> AllNodes\r\n        {\r\n            get\r\n            {\r\n                return allNodes ?? (allNodes = Root.AllNodes().ToList());\r\n            }\r\n        } \r\n\r\n        /// <summary>\r\n        /// Provide formula analysis functions on a tree\r\n        /// </summary>\r\n        public FormulaAnalyzer(ParseTreeNode root)\r\n        {\r\n            Root = root;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Provide formula analysis functions\r\n        /// </summary>\r\n        public FormulaAnalyzer(string formula) : this(ExcelFormulaParser.Parse(formula))\r\n        {}\r\n\r\n        /// <summary>\r\n        /// Get all references that aren't part of another reference expression\r\n        /// </summary>\r\n        public IEnumerable<ParseTreeNode> References()\r\n        {\r\n            return Root.GetReferenceNodes();\r\n        }\r\n\r\n        public IEnumerable<string> Functions()\r\n        {\r\n            return AllNodes\r\n                .Where(node => node.IsFunction())\r\n                .Select(ExcelFormulaParser.GetFunction);\r\n        }\r\n\r\n        public IEnumerable<string> Constants()\r\n        {\r\n            return Root.AllNodesConditional(ExcelFormulaParser.IsNumberWithSign)\r\n                .Where(node => node.Is(GrammarNames.Constant) || node.IsNumberWithSign())\r\n                .Select(ExcelFormulaParser.Print);\r\n        } \r\n\r\n        ///<summary>\r\n        /// Return all constant numbers used in this formula\r\n        ///</summary>\r\n        public IEnumerable<double> Numbers()\r\n        {\r\n            // Excel numbers can be a double, short or signed int. double can fully represent all of these\r\n            return Root.AllNodesConditional(ExcelFormulaParser.IsNumberWithSign)\r\n                .Where(node => node.Is(GrammarNames.Number) || node.IsNumberWithSign())\r\n                .Select(node => double.Parse(node.Print(), NumberStyles.Float, CultureInfo.InvariantCulture));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Return the depth of the parse tree, the number of nested Formulas\r\n        /// </summary>\r\n        public int Depth()\r\n        {\r\n            return Depth(Root);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Depth of nested formulas\r\n        /// </summary>\r\n        private static int Depth(ParseTreeNode node)\r\n        {\r\n            // Get the maximum depth of the childnodes\r\n            int depth = node.ChildNodes.Count == 0 ? 0 : node.ChildNodes.Max(n => Depth(n));\r\n\r\n            // If this is a formula node, add one to the depth\r\n            if (node.Is(GrammarNames.Formula))\r\n            {\r\n                depth++;\r\n            }\r\n\r\n            return depth;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get function/operator depth\r\n        /// </summary>\r\n        /// <param name=\"operators\">If not null, count only specific functions/operators</param>\r\n        public int OperatorDepth(ISet<string> operators = null)\r\n        {\r\n            return OperatorDepth(Root, operators);\r\n        }\r\n\r\n        private int OperatorDepth(ParseTreeNode node, ISet<string> operators = null)\r\n        {\r\n            // Get the maximum depth of the childnodes\r\n            int depth = node.ChildNodes.Count == 0 ? 0 : node.ChildNodes.Max(n => OperatorDepth(n, operators));\r\n\r\n            // If this is one of the target functions, increase depth by 1\r\n            if(node.IsFunction()\r\n               && (operators == null || operators.Contains(node.GetFunction())))\r\n            {\r\n                depth++;\r\n            }\r\n\r\n            return depth;\r\n        }\r\n\r\n        private static readonly ISet<string> conditionalFunctions = new HashSet<string>()\r\n                {\r\n                    \"IF\",\r\n                    \"COUNTIF\",\r\n                    \"COUNTIFS\",\r\n                    \"SUMIF\",\r\n                    \"SUMIFS\",\r\n                    \"AVERAGEIF\",\r\n                    \"AVERAGEIFS\",\r\n                    \"IFERROR\"\r\n                };\r\n        /// <summary>\r\n        /// Get the conditional complexity of the formula\r\n        /// </summary>\r\n        public int ConditionalComplexity()\r\n        {\r\n            return OperatorDepth(Root, conditionalFunctions);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Get all references (to cells or ranges) included in the formula\r\n        /// </summary>\r\n        public IEnumerable<ParserReference> ParserReferences()\r\n        {\r\n            return References().SelectMany(x => x.GetParserReferences());\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser/ParserReference.cs",
    "content": "﻿using System.Linq;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser\r\n{\r\n    public enum ReferenceType\r\n    {\r\n        Cell,\r\n        CellRange,\r\n        UserDefinedName,\r\n        HorizontalRange,\r\n        VerticalRange,\r\n        RefError,\r\n        Table,\r\n        UserDefinedFunction\r\n    }\r\n\r\n    public class ParserReference\r\n    {\r\n        public ReferenceType ReferenceType { get; set; }\r\n        public ParseTreeNode ReferenceNode { get; set; }\r\n        public string LocationString { get; set; }\r\n        public string Worksheet { get; set; }\r\n        public string LastWorksheet { get; set; }\r\n        public string FilePath { get; set; }\r\n        public string FileName { get; set; }\r\n        public string Name { get; set; }\r\n        public string MinLocation { get; set; }\r\n        public string MaxLocation { get; set; }\r\n        public string[] TableSpecifiers { get; set; }\r\n        public string[] TableColumns { get; set; }\r\n        \r\n        public ParserReference(ParseTreeNode node)\r\n        {\r\n            InitializeReference(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Initializes the current object based on the input ParseTreeNode\r\n        /// </summary>\r\n        /// <remarks>\r\n        ///     For Reference nodes (Prefix ReferenceItem), it initialize the values derived from the Prefix node and\r\n        ///     is re-invoked for the ReferenceItem node.\r\n        /// </remarks>\r\n        public void InitializeReference(ParseTreeNode node)\r\n        {\r\n            switch (node.Type())\r\n            {\r\n                case GrammarNames.Reference:\r\n                    PrefixInfo prefix = node.ChildNodes[0].GetPrefixInfo();\r\n                    Worksheet = prefix.HasSheet ? prefix.Sheet.Replace(\"''\", \"'\") : \"(Undefined sheet)\";\r\n\r\n                    if (prefix.HasMultipleSheets)\r\n                    {\r\n                        string[] sheets = prefix.MultipleSheets.Split(':');\r\n                        Worksheet = sheets[0];\r\n                        LastWorksheet = sheets[1];\r\n                    }\r\n\r\n                    if (prefix.HasFilePath)\r\n                    {\r\n                        FilePath = prefix.FilePath.Replace(\"''\", \"'\");\r\n                    }\r\n\r\n                    if (prefix.HasFileNumber)\r\n                    {\r\n                        FileName = prefix.FileNumber.ToString();\r\n                    }\r\n                    else if (prefix.HasFileName)\r\n                    {\r\n                        FileName = prefix.FileName;\r\n                    }\r\n\r\n                    InitializeReference(node.ChildNodes[1]);\r\n                    break;\r\n                case GrammarNames.Cell:\r\n                    ReferenceType = ReferenceType.Cell;\r\n                    MinLocation = node.ChildNodes[0].Token.Text;\r\n                    MaxLocation = MinLocation;\r\n                    break;\r\n                case GrammarNames.NamedRange:\r\n                    ReferenceType = ReferenceType.UserDefinedName;\r\n                    Name = node.ChildNodes[0].Token.Text;\r\n                    break;\r\n                case GrammarNames.StructuredReference:\r\n                    ReferenceType = ReferenceType.Table;\r\n                    Name = node.ChildNodes.FirstOrDefault(x => x.Type() == GrammarNames.StructuredReferenceQualifier)?.ChildNodes[0].Token.Text;\r\n                    TableSpecifiers = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRSpecifier) || x.Is(\"@\")).Select(x => UnEscape(x.Token.Text, \"'\")).ToArray();\r\n                    TableColumns = node.AllNodes().Where(x => x.Is(GrammarNames.TokenSRColumn)).Select(x => UnEscape(x.Token.Text, \"'\")).ToArray();\r\n                    break;\r\n                case GrammarNames.HorizontalRange:\r\n                    string[] horizontalLimits = node.ChildNodes[0].Token.Text.Split(':');\r\n                    ReferenceType = ReferenceType.HorizontalRange;\r\n                    MinLocation = horizontalLimits[0];\r\n                    MaxLocation = horizontalLimits[1];\r\n                    break;\r\n                case GrammarNames.VerticalRange:\r\n                    string[] verticalLimits = node.ChildNodes[0].Token.Text.Split(':');\r\n                    ReferenceType = ReferenceType.VerticalRange;\r\n                    MinLocation = verticalLimits[0];\r\n                    MaxLocation = verticalLimits[1];\r\n                    break;\r\n                case GrammarNames.RefError:\r\n                    ReferenceType = ReferenceType.RefError;\r\n                    break;\r\n                case GrammarNames.UDFunctionCall:\r\n                    ReferenceType = ReferenceType.UserDefinedFunction;\r\n                    Name = node.ChildNodes[0].ChildNodes[0].Token.Text.TrimEnd('(');\r\n                    break;\r\n            }\r\n\r\n            ReferenceNode = node;\r\n            LocationString = node.Print();\r\n\r\n            if (ReferenceType == ReferenceType.UserDefinedFunction && Name != null)\r\n            {\r\n                LocationString = LocationString.Substring(0, LocationString.IndexOf('(', LocationString.LastIndexOf(Name, System.StringComparison.Ordinal)));\r\n            }\r\n        }\r\n\r\n        private string UnEscape(string value, string escapeCharacter)\r\n        {\r\n            return System.Text.RegularExpressions.Regex.Replace(value, $\"{escapeCharacter}(?!{escapeCharacter})\", \"\");\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return LocationString;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/XLParser/PrefixInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser\r\n{\r\n    // TODO: This class is a good example of why an AST is a good idea, for the prefixes the parse trees are too complicated to work with. See #23\r\n\r\n    /// <summary>\r\n    /// Simple data class that holds information about a Prefix.\r\n    /// </summary>\r\n    /// <seealso cref=\"ExcelFormulaParser.GetPrefixInfo\"/>\r\n    public class PrefixInfo : IEquatable<PrefixInfo>\r\n    {\r\n        public string FilePath { get; }\r\n        public bool HasFilePath => FilePath != null;\r\n\r\n        private readonly int? _fileNumber;\r\n        public int FileNumber => _fileNumber.GetValueOrDefault();\r\n        public bool HasFileNumber => _fileNumber.HasValue;\r\n\r\n        public string FileName { get; }\r\n        public bool HasFileName => FileName != null;\r\n\r\n        public bool HasFile => HasFileName || HasFileNumber;\r\n\r\n        public string Sheet { get; }\r\n        public bool HasSheet => Sheet != null;\r\n\r\n        public string MultipleSheets { get; }\r\n        public bool HasMultipleSheets => MultipleSheets != null;\r\n\r\n        public bool IsQuoted { get; }\r\n\r\n        public PrefixInfo(string sheet = null, int? fileNumber = null, string fileName = null, string filePath = null, string multipleSheets = null, bool isQuoted = false)\r\n        {\r\n            Sheet = sheet;\r\n            _fileNumber = fileNumber;\r\n            FileName = fileName;\r\n            FilePath = filePath;\r\n            MultipleSheets = multipleSheets;\r\n            IsQuoted = isQuoted;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a PrefixInfo class from a parse tree node\r\n        /// </summary>\r\n        internal static PrefixInfo From(ParseTreeNode prefix)\r\n        {\r\n            if (prefix.Type() != GrammarNames.Prefix)\r\n            {\r\n                throw new ArgumentException(\"Not a prefix\", nameof(prefix));\r\n            }\r\n\r\n            string filePath = null;\r\n            int? fileNumber = null;\r\n            string fileName = null;\r\n            string sheetName = null;\r\n            string multipleSheets = null;\r\n\r\n            // Token number we're processing\r\n            var cur = 0;\r\n\r\n            // Check for quotes\r\n            var isQuoted = prefix.ChildNodes[cur].Is(\"'\");\r\n            if (isQuoted)\r\n            {\r\n                cur++;\r\n            }\r\n\r\n            // Check and process file\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.File))\r\n            {\r\n                ParseTreeNode file = prefix.ChildNodes[cur];\r\n\r\n                if (file.ChildNodes[0].Is(GrammarNames.TokenFileNameNumeric))\r\n                {\r\n                    // Numeric filename\r\n                    fileNumber = int.TryParse(Substr(file.ChildNodes[0].Print(), 1, 1), out var n) ? n : default(int?);\r\n                }\r\n                else\r\n                {\r\n                    // String filename\r\n                    var iCur = 0;\r\n                    // Check if it includes a path\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFilePath))\r\n                    {\r\n                        filePath = file.ChildNodes[iCur].Print();\r\n                        iCur++;\r\n                    }\r\n\r\n                    if (file.ChildNodes[iCur].Is(GrammarNames.TokenFileNameEnclosedInBrackets))\r\n                    {\r\n                        fileName = Substr(file.ChildNodes[iCur].Print(), 1, 1);\r\n                    }\r\n                    else\r\n                    {\r\n                        fileName = file.ChildNodes[iCur].Print();\r\n                    }\r\n                }\r\n\r\n                cur++;\r\n            }\r\n\r\n            // Check for a non-quoted sheet\r\n            if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheet))\r\n            {\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for a quoted sheet\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenSheetQuoted))\r\n            {\r\n                // remove quote and !\r\n                sheetName = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n\r\n                if (sheetName == \"\")\r\n                {\r\n                    // The sheet name consists solely of whitespace (see https://github.com/spreadsheetlab/XLParser/issues/37)\r\n                    // We can not identify the sheet name in the case, and return all whitespace-only sheet names as if they were a single-space sheet name.\r\n                    sheetName = \" \";\r\n                }\r\n            }\r\n            // Check for multiple sheets\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheets))\r\n            {\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 1);\r\n            }\r\n            // Check for multiple sheets (quoted)\r\n            else if (prefix.ChildNodes[cur].Is(GrammarNames.TokenMultipleSheetsQuoted))\r\n            {\r\n                // remove quote and !\r\n                multipleSheets = Substr(prefix.ChildNodes[cur].Print(), 2);\r\n            }\r\n\r\n            return new PrefixInfo(sheetName, fileNumber, fileName, filePath, multipleSheets, isQuoted);\r\n        }\r\n\r\n        internal static void FixPrecedingWhiteSpaces(ParseTreeNode parseTreeNode, string sourceText)\r\n        {\r\n            var newPosition = GetNodePositionFromSourceText(parseTreeNode, sourceText);\r\n            SourceLocation currentLocation = parseTreeNode.Span.Location;\r\n            if (newPosition == currentLocation.Position)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var newLocation = new SourceLocation(newPosition, currentLocation.Line, currentLocation.Column + currentLocation.Position - newPosition);\r\n            parseTreeNode.Span = new SourceSpan(newLocation, parseTreeNode.Span.EndPosition - newPosition);\r\n\r\n            // Cannot directly assign to parseTreeNode.Token.Text; it is read-only. Falling back on reflection.\r\n            typeof(Token).GetField(\"Text\", BindingFlags.Instance | BindingFlags.Public)\r\n                ?.SetValue(parseTreeNode.Token, sourceText.Substring(newPosition, parseTreeNode.Span.Length));\r\n        }\r\n\r\n        private static int GetNodePositionFromSourceText(ParseTreeNode nodeSheetQuoted, string sourceText)\r\n        {\r\n            var startIndex = nodeSheetQuoted.Span.Location.Position;\r\n\r\n            while (startIndex > 0)\r\n            {\r\n                if (!char.IsWhiteSpace(sourceText[startIndex - 1]))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                startIndex--;\r\n            }\r\n\r\n            return startIndex;\r\n        }\r\n\r\n        private static string Substr(string s, int removeLast = 0, int removeFirst = 0)\r\n        {\r\n            return s.Substring(removeFirst, s.Length - removeLast - removeFirst);\r\n        }\r\n\r\n        public override bool Equals(object other) => Equals(other as PrefixInfo);\r\n        public bool Equals(PrefixInfo other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return _fileNumber == other._fileNumber && string.Equals(FilePath, other.FilePath, StringComparison.OrdinalIgnoreCase) && string.Equals(FileName, other.FileName, StringComparison.OrdinalIgnoreCase) && string.Equals(Sheet, other.Sheet, StringComparison.OrdinalIgnoreCase) && string.Equals(MultipleSheets, other.MultipleSheets, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = StringComparer.OrdinalIgnoreCase.GetHashCode(Sheet ?? \"\");\r\n                hashCode = (hashCode*397) ^ (FilePath != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FilePath) : 0);\r\n                hashCode = (hashCode*397) ^ (FileName != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(FileName) : 0);\r\n                hashCode = (hashCode*397) ^ (_fileNumber?.GetHashCode() ?? 0);\r\n                hashCode = (hashCode*397) ^ (MultipleSheets != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(MultipleSheets) : 0);\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(PrefixInfo left, PrefixInfo right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var res = new StringBuilder();\r\n            if (IsQuoted) res.Append(\"'\");\r\n            if (HasFilePath) res.Append(FilePath);\r\n            if (HasFileNumber) res.Append($\"[{FileNumber}]\");\r\n            if (HasFileName) res.Append($\"[{FileName}]\");\r\n            if (HasSheet) res.Append(Sheet);\r\n            if (HasMultipleSheets) res.Append(MultipleSheets);\r\n            if (IsQuoted) res.Append(\"'\");\r\n            res.Append(\"!\");\r\n            return res.ToString();\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser/Resources/ExcelBuiltinFunctionList.txt",
    "content": "ABS\nACCRINT\nACCRINTM\nACOS\nACOSH\nACOT\nACOTH\nADDRESS\nAGGREGATE\nAMORDEGRC\nAMORLINC\nAND\nARABIC\nAREAS\nARRAYTOTEXT\nASC\nASIN\nASINH\nATAN\nATAN2\nATANH\nAVEDEV\nAVERAGE\nAVERAGEA\nAVERAGEIF\nAVERAGEIFS\nBAHTTEXT\nBASE\nBESSELI\nBESSELJ\nBESSELK\nBESSELY\nBETA.DIST\nBETA.INV\nBETADIST\nBETAINV\nBIN2DEC\nBIN2HEX\nBIN2OCT\nBINOM.DIST\nBINOM.DIST.RANGE\nBINOM.INV\nBINOMDIST\nBITAND\nBITLSHIFT\nBITOR\nBITRSHIFT\nBITXOR\nCALL\nCEILING\nCEILING.MATH\nCEILING.PRECISE\nCELL\nCHAR\nCHIDIST\nCHIINV\nCHISQ.DIST\nCHISQ.DIST.RT\nCHISQ.INV\nCHISQ.INV.RT\nCHISQ.TEST\nCHITEST\nCLEAN\nCODE\nCOLUMN\nCOLUMNS\nCOMBIN\nCOMBINA\nCOMPLEX\nCONCAT\nCONCATENATE\nCONFIDENCE\nCONFIDENCE.NORM\nCONFIDENCE.T\nCONVERT\nCORREL\nCOS\nCOSH\nCOT\nCOTH\nCOUNT\nCOUNTA\nCOUNTBLANK\nCOUNTIF\nCOUNTIFS\nCOUPDAYBS\nCOUPDAYS\nCOUPDAYSNC\nCOUPNCD\nCOUPNUM\nCOUPPCD\nCOVAR\nCOVARIANCE.P\nCOVARIANCE.S\nCRITBINOM\nCSC\nCSCH\nCUBEKPIMEMBER\nCUBEMEMBER\nCUBEMEMBERPROPERTY\nCUBERANKEDMEMBER\nCUBESET\nCUBESETCOUNT\nCUBEVALUE\nCUMIPMT\nCUMPRINC\nDATE\nDATEDIF\nDATEVALUE\nDAVERAGE\nDAY\nDAYS\nDAYS360\nDB\nDBCS\nDCOUNT\nDCOUNTA\nDDB\nDEC2BIN\nDEC2HEX\nDEC2OCT\nDECIMAL\nDEGREES\nDELTA\nDEVSQ\nDGET\nDISC\nDMAX\nDMIN\nDOLLAR\nDOLLARDE\nDOLLARFR\nDPRODUCT\nDSTDEV\nDSTDEVP\nDSUM\nDURATION\nDVAR\nDVARP\nEDATE\nEFFECT\nENCODEURL\nEOMONTH\nERF\nERF.PRECISE\nERFC\nERFC.PRECISE\nERROR.TYPE\nEUROCONVERT\nEVEN\nEXACT\nEXP\nEXPON.DIST\nEXPONDIST\nF.DIST\nF.DIST.RT\nF.INV\nF.INV.RT\nF.TEST\nFACT\nFACTDOUBLE\nFALSE\nFDIST\nFILTER\nFILTERXML\nFIND\nFINDB\nFINV\nFISHER\nFISHERINV\nFIXED\nFLOOR\nFLOOR.MATH\nFLOOR.PRECISE\nFORECAST\nFORECAST.ETS\nFORECAST.ETS.CONFINT\nFORECAST.ETS.SEASONALITY\nFORECAST.ETS.STAT\nFORECAST.LINEAR\nFORMULATEXT\nFREQUENCY\nFTEST\nFV\nFVSCHEDULE\nGAMMA\nGAMMA.DIST\nGAMMA.INV\nGAMMADIST\nGAMMAINV\nGAMMALN\nGAMMALN.PRECISE\nGAUSS\nGCD\nGEOMEAN\nGESTEP\nGETPIVOTDATA\nGROWTH\nHARMEAN\nHEX2BIN\nHEX2DEC\nHEX2OCT\nHLOOKUP\nHOUR\nHYPERLINK\nHYPGEOM.DIST\nHYPGEOMDIST\nIFERROR\nIFNA\nIFS\nIMABS\nIMAGINARY\nIMARGUMENT\nIMCONJUGATE\nIMCOS\nIMCOSH\nIMCOT\nIMCSC\nIMCSCH\nIMDIV\nIMEXP\nIMLN\nIMLOG10\nIMLOG2\nIMPOWER\nIMPRODUCT\nIMREAL\nIMSEC\nIMSECH\nIMSIN\nIMSINH\nIMSQRT\nIMSUB\nIMSUM\nIMTAN\nINFO\nINT\nINTERCEPT\nINTRATE\nIPMT\nIRR\nISBLANK\nISERR\nISERROR\nISEVEN\nISFORMULA\nISLOGICAL\nISNA\nISNONTEXT\nISNUMBER\nISO.CEILING\nISODD\nISOWEEKNUM\nISPMT\nISREF\nISTEXT\nJIS\nKURT\nLARGE\nLCM\nLEFT\nLEFTB\nLEN\nLENB\nLET\nLINEST\nLN\nLOG\nLOG10\nLOGEST\nLOGINV\nLOGNORM.DIST\nLOGNORM.INV\nLOGNORMDIST\nLOOKUP\nLOWER\nMATCH\nMAX\nMAXA\nMAXIFS\nMDETERM\nMDURATION\nMEDIAN\nMID\nMIDB\nMIN\nMINA\nMINIFS\nMINUTE\nMINVERSE\nMIRR\nMMULT\nMOD\nMODE\nMODE.MULT\nMODE.SNGL\nMONTH\nMROUND\nMULTINOMIAL\nMUNIT\nN\nNA\nNEGBINOM.DIST\nNEGBINOMDIST\nNETWORKDAYS\nNETWORKDAYS.INTL\nNOMINAL\nNORM.DIST\nNORM.INV\nNORM.S.DIST\nNORM.S.INV\nNORMDIST\nNORMINV\nNORMSDIST\nNORMSINV\nNOT\nNOW\nNPER\nNPV\nNUMBERVALUE\nOCT2BIN\nOCT2DEC\nOCT2HEX\nODD\nODDFPRICE\nODDFYIELD\nODDLPRICE\nODDLYIELD\nOR\nPDURATION\nPEARSON\nPERCENTILE\nPERCENTILE.EXC\nPERCENTILE.INC\nPERCENTRANK\nPERCENTRANK.EXC\nPERCENTRANK.INC\nPERMUT\nPERMUTATIONA\nPHI\nPHONETIC\nPI\nPMT\nPOISSON\nPOISSON.DIST\nPOWER\nPPMT\nPRICE\nPRICEDISC\nPRICEMAT\nPROB\nPRODUCT\nPROPER\nPV\nQUARTILE\nQUARTILE.EXC\nQUARTILE.INC\nQUOTIENT\nRADIANS\nRAND\nRANDARRAY\nRANDBETWEEN\nRANK\nRANK.AVG\nRANK.EQ\nRATE\nRECEIVED\nREGISTER.ID\nREPLACE\nREPLACEB\nREPT\nRIGHT\nRIGHTB\nROMAN\nROUND\nROUNDDOWN\nROUNDUP\nROW\nROWS\nRRI\nRSQ\nRTD\nSEARCH\nSEARCHB\nSEC\nSECH\nSECOND\nSEQUENCE\nSERIESSUM\nSHEET\nSHEETS\nSIGN\nSIN\nSINH\nSKEW\nSKEW.P\nSLN\nSLOPE\nSMALL\nSORT\nSORTBY\nSQRT\nSQRTPI\nSTANDARDIZE\nSTDEV\nSTDEV.P\nSTDEV.S\nSTDEVA\nSTDEVP\nSTDEVPA\nSTEYX\nSUBSTITUTE\nSUBTOTAL\nSUM\nSUMIF\nSUMIFS\nSUMPRODUCT\nSUMSQ\nSUMX2MY2\nSUMX2PY2\nSUMXMY2\nSWITCH\nSYD\nT\nT.DIST\nT.DIST.2T\nT.DIST.RT\nT.INV\nT.INV.2T\nT.TEST\nTAN\nTANH\nTBILLEQ\nTBILLPRICE\nTBILLYIELD\nTDIST\nTEXT\nTEXTJOIN\nTIME\nTIMEVALUE\nTINV\nTODAY\nTRANSPOSE\nTREND\nTRIM\nTRIMMEAN\nTRUE\nTRUNC\nTTEST\nTYPE\nUNICHAR\nUNICODE\nUNIQUE\nUPPER\nVALUE\nVALUETOTEXT\nVAR\nVAR.P\nVAR.S\nVARA\nVARP\nVARPA\nVDB\nVLOOKUP\nWEBSERVICE\nWEEKDAY\nWEEKNUM\nWEIBULL\nWEIBULL.DIST\nWORKDAY\nWORKDAY.INTL\nXIRR\nXLOOKUP\nXMATCH\nXNPV\nXOR\nYEAR\nYEARFRAC\nYIELD\nYIELDDISC\nYIELDMAT\nZ.TEST\nZTEST\n"
  },
  {
    "path": "src/XLParser/WordsTerminal.cs",
    "content": "﻿using Irony.Parsing;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace XLParser\r\n{\r\n    /// <summary>\r\n    /// Terminal that can determine, if there the input contains a one of expected words.\r\n    /// </summary>\r\n    /// <remarks>Children of each node are represented as an array to allow direct indexation. Do not use\r\n    /// for words that have a large difference between low and high character of a token.</remarks>\r\n    public class WordsTerminal : Terminal\r\n    {\r\n        private readonly Node _rootNode;\r\n        private readonly List<string> _words;\r\n        private bool _caseSensitive;\r\n\r\n        public WordsTerminal(string name, IEnumerable<string> words) : base(name)\r\n        {\r\n            _rootNode = new Node(0);\r\n            _words = new List<string>(words);\r\n        }\r\n\r\n        public override void Init(GrammarData grammarData)\r\n        {\r\n            base.Init(grammarData);\r\n            _caseSensitive = Grammar.CaseSensitive;\r\n            foreach (var word in _words)\r\n            {\r\n                AddWordToTree(_caseSensitive ? word : word.ToUpperInvariant());\r\n            }\r\n\r\n            if (EditorInfo == null)\r\n            {\r\n                EditorInfo = new TokenEditorInfo(TokenType.Unknown, TokenColor.Text, TokenTriggers.None);\r\n            }\r\n        }\r\n\r\n        public override IList<string> GetFirsts() => _words;\r\n\r\n        public override Token TryMatch(ParsingContext context, ISourceStream source)\r\n        {\r\n            var node = _rootNode;\r\n            var input = source.Text;\r\n            for (var i = source.PreviewPosition; i < input.Length; ++i)\r\n            {\r\n                var c = _caseSensitive ? input[i] : char.ToUpperInvariant(input[i]);\r\n                var nextNode = node[c];\r\n                if (nextNode is null)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                node = nextNode;\r\n            }\r\n\r\n            if (!node.IsTerminal)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            source.PreviewPosition += node.Length;\r\n            return source.CreateToken(OutputTerminal);\r\n        }\r\n\r\n        private void AddWordToTree(string word)\r\n        {\r\n            var node = _rootNode;\r\n            foreach (var c in word)\r\n            {\r\n                node = node.GetOrAddChild(c);\r\n            }\r\n\r\n            node.IsTerminal = true;\r\n        }\r\n\r\n        private class Node\r\n        {\r\n            private char _lowChar = '\\0';\r\n            private char _highChar = '\\0';\r\n            private Node[] _children;\r\n\r\n            public Node(int length)\r\n            {\r\n                Length = length;\r\n            }\r\n\r\n            public bool IsTerminal { get; set; }\r\n\r\n            public int Length { get; }\r\n\r\n            public Node this[char c]\r\n            {\r\n                get\r\n                {\r\n                    if (_children is null)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    if (c < _lowChar || c > _highChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    return _children[c - _lowChar];\r\n                }\r\n            }\r\n\r\n            internal Node GetOrAddChild(char c)\r\n            {\r\n                if (_children is null)\r\n                {\r\n                    var node = new Node(Length + 1);\r\n                    _children = new[] { node };\r\n                    _lowChar = c;\r\n                    _highChar = c;\r\n                    return node;\r\n                }\r\n\r\n                var newLowChar = (char)Math.Min(_lowChar, c);\r\n                if (newLowChar != _lowChar)\r\n                {\r\n                    var newChildrenCount = _highChar - newLowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    var ofs = _lowChar - newLowChar;\r\n                    Array.Copy(_children, 0, _children, ofs, newChildrenCount - ofs);\r\n                    Array.Clear(_children, 0, ofs);\r\n                    _lowChar = newLowChar;\r\n                    return _children[0] = new Node(Length + 1);\r\n                }\r\n\r\n                var newHighChar = (char)Math.Max(_highChar, c);\r\n                if (newHighChar != _highChar)\r\n                {\r\n                    var newChildrenCount = newHighChar - _lowChar + 1;\r\n                    Array.Resize(ref _children, newChildrenCount);\r\n                    _highChar = newHighChar;\r\n                    return _children[newChildrenCount - 1] = new Node(Length + 1);\r\n                }\r\n\r\n                var charIdx = c - _lowChar;\r\n                var child = _children[charIdx];\r\n                if (child is null)\r\n                {\r\n                    return _children[charIdx] = new Node(Length + 1);\r\n                }\r\n\r\n                return child;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser/XLParser.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFrameworks>net462;netstandard2.0</TargetFrameworks>\n    <Authors>TU Delft Spreadsheet Lab, Infotron</Authors>\n    <Company>TU Delft Spreadsheet Lab, Infotron</Company>\n    <PackageId>XLParser</PackageId>\n    <Description>A parser for Excel formulas</Description>\n    <PackageTags>parser excel formula</PackageTags>\n    <AssemblyVersion>1.7.5.0</AssemblyVersion>\n    <FileVersion>1.7.5.0</FileVersion>\n    <Version>1.7.5.0</Version>\n    <PackageReleaseNotes>\n- Fix ignored start/end spaces in structured reference column name (#210)\n- Fix parse errors for structured references confused with filenames (#211)\n- Support quoted multiple sheet reference in parser references (#213)\n    </PackageReleaseNotes>\n    <PackageLicenseExpression>MPL-2.0</PackageLicenseExpression>\n    <PackageProjectUrl>https://spreadsheetlab.github.io/XLParser</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/spreadsheetlab/XLParser</RepositoryUrl>\n    <Copyright>Mozilla Public License, version 2.0</Copyright>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\signing.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)' == 'Release'\">\n    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>\n  </PropertyGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\ExcelBuiltinFunctionList.txt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Irony\" Version=\"1.5.3\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/XLParser/XLParser.nuspec",
    "content": "<?xml version=\"1.0\"?>\r\n<package >\r\n  <metadata>\r\n    <id>$id$</id>\r\n    <version>$version$</version>\r\n    <title>$title$</title>\r\n    <authors>$author$</authors>\r\n    <owners>$author$</owners>\r\n    <licenseUrl>http://mozilla.org/MPL/2.0/</licenseUrl>\r\n    <projectUrl>https://github.com/spreadsheetlab/XLParser</projectUrl>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <description>$description$</description>\r\n    <summary>\r\n    A pure C# parser for Excel formulas.\r\n    The produced parse trees are compact and suitable for further analysis or manipulation.\r\n    XLParser has a 99.9% compatibility rate tested with over a million real-world formulas.\r\n    </summary>\r\n    <tags>parser parsing excel formula</tags>\r\n    <dependencies>\r\n      <dependency id=\"Irony\" version=\"1.0.11\" />\r\n    </dependencies>\r\n  </metadata>\r\n</package>"
  },
  {
    "path": "src/XLParser.Tests/DatasetTests.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    [TestClass]\r\n    // Visual Studio standard data sources where tried for this class, but it was found to be very slow\r\n    public class DatasetTests\r\n    {\r\n        public TestContext TestContext { get; set; }\r\n\r\n        private const int MaxParseErrors = 10;\r\n\r\n        [TestMethod]\r\n        [TestCategory(\"Slow\")]\r\n        public void EnronFormulasParseTest()\r\n        {\r\n            ParseCsvDataSet(\"data/enron/formulas.txt\", \"data/enron/knownfails.txt\");\r\n        }\r\n\r\n        [TestMethod]\r\n        [TestCategory(\"Slow\")]\r\n        public void EusesFormulasParseTest()\r\n        {\r\n            ParseCsvDataSet(\"data/euses/formulas.txt\", \"data/euses/knownfails.txt\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ParseTestFormulasStructuredReferences()\r\n        {\r\n            ParseCsvDataSet(\"data/testformulas/structured_references.txt\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ParseTestFormulasUserContributed()\r\n        {\r\n            ParseCsvDataSet(\"data/testformulas/user_contributed.txt\");\r\n        }\r\n\r\n        private void ParseCsvDataSet(string filename, string knownFailsFile = null)\r\n        {\r\n            ISet<string> knownfails = new HashSet<string>(ReadFormulaCsv(knownFailsFile));\r\n            var parseErrors = 0;\r\n            var lockObj = new object();\r\n\r\n            Parallel.ForEach(ReadFormulaCsv(filename), (formula, control, lineNumber) =>\r\n            {\r\n                if (parseErrors > MaxParseErrors)\r\n                {\r\n                    control.Stop();\r\n                    return;\r\n                }\r\n\r\n                try\r\n                {\r\n                    ParserTests.Test(formula);\r\n                }\r\n                catch (ArgumentException)\r\n                {\r\n                    if (!knownfails.Contains(formula))\r\n                    {\r\n                        lock (lockObj)\r\n                        {\r\n                            TestContext.WriteLine($\"Failed parsing line {lineNumber} <<{formula}>>\");\r\n                            parseErrors++;\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n            if (parseErrors > 0)\r\n            {\r\n                Assert.Fail(\"Parse Errors on file \" + filename);\r\n            }\r\n        }\r\n\r\n        private static IEnumerable<string> ReadFormulaCsv(string f)\r\n        {\r\n            return f == null ? new string[0] : File.ReadLines(f).Where(line => !string.IsNullOrWhiteSpace(line)).Select(UnQuote);\r\n        }\r\n\r\n        private static string UnQuote(string line)\r\n        {\r\n            return line.Length > 0 && line[0] == '\"' ? line.Substring(1, line.Length - 2).Replace(\"\\\"\\\"\", \"\\\"\") : line;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/FormulaAnalysisTest.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    [TestClass]\r\n    public class FormulaAnalysisTest\r\n    {\r\n        #region Numbers()\r\n        [TestMethod]\r\n        public void FixedNumbers()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"SUM(A1,3.1+4)\");\r\n            var nums = fa.Numbers().ToList();\r\n\r\n            CollectionAssert.Contains(nums, 3.1);\r\n            CollectionAssert.Contains(nums, 4.0);\r\n            Assert.AreEqual(2, nums.Count());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NoFixedNumbers()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"A1+B2\");\r\n            var nums = fa.Numbers().ToList();\r\n            Assert.AreEqual(0, nums.Count());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FixedInt()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"3\");\r\n            var nums = fa.Numbers().ToList();\r\n            CollectionAssert.Contains(nums, 3.0);\r\n            Assert.AreEqual(1, nums.Count());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FixedReal()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"0.1\");\r\n            var nums = fa.Numbers().ToList();\r\n            CollectionAssert.Contains(nums, 0.1);\r\n            Assert.AreEqual(1, nums.Count());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Duplicate()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"3+3\");\r\n            var nums = fa.Numbers().ToList();\r\n            Assert.AreEqual(2, nums.Count());\r\n        }\r\n\r\n        // Test for issue #21: https://github.com/spreadsheetlab/XLParser/issues/21\r\n        [TestMethod]\r\n        public void NegativeNumber()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"=-8+A1\");\r\n            var nums = fa.Numbers().ToList();\r\n            CollectionAssert.AreEqual(new[] { -8.0 }, nums);\r\n        }\r\n        #endregion\r\n\r\n        #region Functions()\r\n        [TestMethod]\r\n        public void CountInfixOperations()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"3+4/5\");\r\n            var ops = fa.Functions().ToList();\r\n            Assert.AreEqual(2, ops.Count());\r\n            CollectionAssert.Contains(ops, \"+\");\r\n            CollectionAssert.Contains(ops, \"/\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CountFunctionOperations()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"SUM(3,5)\");\r\n            var ops = fa.Functions().ToList();\r\n            Assert.AreEqual(1, ops.Count());\r\n            CollectionAssert.Contains(ops, \"SUM\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CountPostfixOperations()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"A6%\");\r\n            var ops = fa.Functions().ToList();\r\n            Assert.AreEqual(1, ops.Count());\r\n            CollectionAssert.Contains(ops, \"%\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DontCountSheetReferenes()\r\n        {\r\n            string formula = \"Weight!B1\";\r\n            var fa = new FormulaAnalyzer(formula);\r\n            Assert.AreEqual(0, fa.Functions().Count());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CountComparisons()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"IF(A1>A2,3,4)\");\r\n            var ops = fa.Functions().Distinct().ToList();\r\n            Assert.AreEqual(2, ops.Count());\r\n            CollectionAssert.Contains(ops, \">\");\r\n            CollectionAssert.Contains(ops, \"IF\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ComparisonIsFunction()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"IF(A1<=A2,A1+1,A2)\");\r\n            CollectionAssert.Contains(fa.Functions().ToList(), \"<=\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void IntersectIsFunction()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"SUM(A1:A3 A2:A3)\");\r\n            var functions = fa.Functions().Distinct().ToList();\r\n            CollectionAssert.Contains(functions, \"INTERSECT\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void IntersectIsAtCorrectPosition()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"SUM(A1:A3 A2:A3)\");\r\n            ParseTreeNode intersect = fa.AllNodes.FirstOrDefault(node => node.Token?.Terminal?.Name == \"INTERSECT\");\r\n            Assert.IsNotNull(intersect);\r\n            Assert.AreEqual(9, intersect.Span.Location.Position);\r\n        }\r\n        #endregion\r\n\r\n        #region References()\r\n\r\n        [TestMethod]\r\n        public void OnlyDirectReferences()\r\n        {\r\n            // Make sure A1:A10 isn't returned as \"A1:A10\", \"A1\" and \"A10\"\r\n            var fa = new FormulaAnalyzer(\"SUM(A1:A10)\");\r\n            var references = fa.References().ToList();\r\n            CollectionAssert.AreEqual(references.Select(ExcelFormulaParser.Print).ToList(), new [] { \"A1:A10\" });\r\n            fa = new FormulaAnalyzer(\"(A1)+2\");\r\n            references = fa.References().ToList();\r\n            CollectionAssert.AreEqual(references.Select(ExcelFormulaParser.Print).ToList(), new [] {\"A1\" });\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SimpleReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"B1\").ParserReferences().ToList();\r\n            \r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"B1\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(B1:C5)\").ParserReferences().ToList();\r\n            \r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"B1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"C5\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void VRangeReferenceLong()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(XBC:ABC)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"XBC\", references.First().MinLocation);\r\n            Assert.AreEqual(\"ABC\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void VRangeReferenceLarge()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(XEZ:XFD)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"XEZ\", references.First().MinLocation);\r\n            Assert.AreEqual(\"XFD\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void VRangeReferenceShort()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(AB:ZZ)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"AB\", references.First().MinLocation);\r\n            Assert.AreEqual(\"ZZ\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(TestRange)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"TestRange\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeWithPrefixReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Sheet1!TestRange)\").ParserReferences().ToList();\r\n            \r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"TestRange\", references.First().Name);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeWithUnderscoreReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"_XX1/100\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"_XX1\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TableReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceHeaders()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1[#Headers])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"#Headers\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceThisRow()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1[[#This Row],[b]])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"#This Row\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"b\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceCurrentRow()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1[@Region])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"@\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Region\"}, references.First().TableColumns);\r\n        }\r\n\r\n        // See https://github.com/spreadsheetlab/XLParser/issues/173\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWholeRow()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=INDEX(Table1[@],2)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"@\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceColumns()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1[[Date]:[Color]])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Date\", \"Color\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceRowAndColumn()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Table1[[#Totals],[Qty]]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"#Totals\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Qty\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithEscapedCharacterPound()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUBTOTAL(109,Table1['#NumItems])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"#NumItems\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithEscapedCharacterBracket()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1['[Header']])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"[Header]\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithEscapedCharacterQuote()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"COUNTA(Table1[''Test''])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"'Test'\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceUnqualified()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUBTOTAL(109,[Sales])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(null, references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Sales\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceUnqualifiedWithSpaceInName()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUBTOTAL(109,[Sales Amount])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(null, references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Sales Amount\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceUnqualifiedWithNumbers()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUBTOTAL(109,[2016])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(null, references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"2016\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceSpecifierAndColumns()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=DeptSales[[#All],[Sales Amount]:[Commission Amount]]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"DeptSales\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"#All\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Sales Amount\", \"Commission Amount\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceSpecifiersAndColumn()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=DeptSales[[#Headers],[#Data],[% Commission]]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"DeptSales\", references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"#Headers\", \"#Data\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"% Commission\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceMultipleRows()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUM([@Jan]:[@Feb])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(null, references.First().Name);\r\n            CollectionAssert.AreEqual(new[] {\"@\"}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Jan\", \"Feb\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceMultipleColumns()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=XLOOKUP($G7,Sales[[Region]:[Region]],Sales[Mar])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(3, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Cell, references[0].ReferenceType);\r\n            Assert.AreEqual(\"$G7\", references[0].MinLocation);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Sales\", references[1].Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references[1].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Region\", \"Region\"}, references[1].TableColumns);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[2].ReferenceType);\r\n            Assert.AreEqual(\"Sales\", references[2].Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references[2].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Mar\"}, references[2].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceMultipleHeaders()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=COUNTA(Sales_5[[#Headers],[Jan]]:Sales_5[[#Headers],[Mar]])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Sales_5\", references[0].Name);\r\n            CollectionAssert.AreEqual(new[] {\"#Headers\"}, references[0].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Jan\", \"Mar\"}, references[0].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceIntersectColumns()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=SUM(Sales_2[Jan]:Sales_2[Feb])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sales_2\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Jan\", \"Feb\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceIntersectDifferentSpecifiers()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=COUNTA(Sales_2[[#Headers],[Jan]]:Sales_2[[#Data],[Feb]])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Table, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sales_2\", references.First().Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references.First().TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Jan\", \"Feb\"}, references.First().TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceIntersectDifferentTables()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=COUNTA(Sales_2[Jan]:Sales_4[Feb])\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Sales_2\", references[0].Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references[0].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Jan\"}, references[0].TableColumns);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Sales_4\", references[1].Name);\r\n            CollectionAssert.AreEqual(new string[] {}, references[1].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"Feb\"}, references[1].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithSheetReference()\r\n        {\r\n            // See https://github.com/spreadsheetlab/XLParser/issues/170\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=VLOOKUP([@ProductNumber],Sheet2!A:B,1,FALSE)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(null, references[0].Name);\r\n            CollectionAssert.AreEqual(new[] {\"@\"}, references[0].TableSpecifiers);\r\n            CollectionAssert.AreEqual(new[] {\"ProductNumber\"}, references[0].TableColumns);\r\n\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Sheet2\", references[1].Worksheet);\r\n            Assert.AreEqual(\"A\", references[1].MinLocation);\r\n            Assert.AreEqual(\"B\", references[1].MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithPrecedingSpace()\r\n        {\r\n            // See https://github.com/spreadsheetlab/XLParser/issues/209\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=Table1[ Column]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references[0].Name);\r\n            CollectionAssert.AreEqual(new[] { \" Column\" }, references[0].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithTrailingSpaces()\r\n        {\r\n            // See https://github.com/spreadsheetlab/XLParser/issues/209\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=Table1[Column   ]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references[0].Name);\r\n            CollectionAssert.AreEqual(new[] { \"Column   \" }, references[0].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void StructuredTableReferenceWithPrecedingAndTrailingSpaces()\r\n        {\r\n            // See https://github.com/spreadsheetlab/XLParser/issues/209\r\n            List<ParserReference> references = new FormulaAnalyzer(\"=Table1[  Column   ]\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Table, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Table1\", references[0].Name);\r\n            CollectionAssert.AreEqual(new[] { \"  Column   \" }, references[0].TableColumns);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithUnderscore()\r\n        {\r\n            ParseTree parseResult = ExcelFormulaParser.ParseToTree(\"aap_noot!B12\");\r\n            Assert.AreEqual(3, parseResult.Tokens.Count);\r\n            Assert.AreEqual(\"aap_noot!\", ((Token)parseResult.Tokens.First()).Text);\r\n\r\n            Assert.AreEqual(GrammarNames.Formula, parseResult.Root.Term.Name);\r\n            Assert.AreNotEqual(ParseTreeStatus.Error, parseResult.Status);\r\n\r\n            Assert.AreEqual(1, parseResult.Root.ChildNodes.Count);\r\n            ParseTreeNode reference = parseResult.Root.ChildNodes.First();\r\n            Assert.AreEqual(GrammarNames.Reference, reference.Term.Name);\r\n\r\n            Assert.AreEqual(2, reference.ChildNodes.Count);\r\n            ParseTreeNode prefix = reference.ChildNodes.First();\r\n            Assert.AreEqual(GrammarNames.Prefix, prefix.Term.Name);\r\n            ParseTreeNode cellOrRange = reference.ChildNodes.ElementAt(1);\r\n            Assert.AreEqual(GrammarNames.Cell, cellOrRange.Term.Name);\r\n\r\n            Assert.AreEqual(1, prefix.ChildNodes.Count);\r\n            ParseTreeNode sheet = prefix.ChildNodes.First();\r\n            Assert.AreEqual(GrammarNames.TokenSheet, sheet.Term.Name);\r\n            Assert.AreEqual(\"aap_noot!\", sheet.Token.Value);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithPeriod()\r\n        {\r\n            ParseTree parseResult = ExcelFormulaParser.ParseToTree(\"vrr2011_Omz.!M84\");\r\n            Assert.AreNotEqual(ParseTreeStatus.Error, parseResult.Status);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetAsString()\r\n        {\r\n            ParseTree parseResult = ExcelFormulaParser.ParseToTree(\"'[20]Algemene info + \\\"Overview\\\"'!T95\");\r\n            Assert.AreNotEqual(ParseTreeStatus.Error, parseResult.Status);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithQuote()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"'Owner''s Engineer'!$A$2\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(\"Owner's Engineer\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalSheetWithQuote()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"'[1]Stacey''s Reconciliation'!C3\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(\"1\", references.First().FileName);\r\n            Assert.AreEqual(\"Stacey's Reconciliation\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NonNumericExternalSheet()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"[externalFile.xlsx]Book1!C3\").ParserReferences().ToList();\r\n            \r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(\"externalFile.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Book1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbook()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"C:\\Users\\Test\\Desktop\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttp()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/test/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/test/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithSpaceInPath()\r\n        {\r\n            // See [#138](https://github.com/spreadsheetlab/XLParser/issues/138)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/test folder/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/test folder/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithSpaceInDocument()\r\n        {\r\n            // See [#138](https://github.com/spreadsheetlab/XLParser/issues/138)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/testfolder/[Book 1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/testfolder/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithTildeInPath()\r\n        {\r\n            // See [#202](https://github.com/spreadsheetlab/XLParser/issues/202)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/~testfolder/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/~testfolder/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithBackslashInPath()\r\n        {\r\n            // See [#201](https://github.com/spreadsheetlab/XLParser/issues/201)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http:\\\\example.com\\testfolder\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http:\\\\example.com\\testfolder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithPortNumberInPath()\r\n        {\r\n            // See [#194](https://github.com/spreadsheetlab/XLParser/issues/194)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://localhost:1234/test/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://localhost:1234/test/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithSpecialLetters()\r\n        {\r\n            // See [#192](https://github.com/spreadsheetlab/XLParser/issues/192)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/tëst/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/tëst/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithEscapedSingleQuote()\r\n        {\r\n            // See [#193](https://github.com/spreadsheetlab/XLParser/issues/193)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/test''/[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/test'/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPath()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\TEST-01\\Folder\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\TEST-01\\Folder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithTilde()\r\n        {\r\n            //See [#205] (https://github.com/spreadsheetlab/XLParser/issues/205)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\TEST-~01\\Folder\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\TEST-~01\\Folder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n        \r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithSpace()\r\n        {\r\n            // See [#142](https://github.com/spreadsheetlab/XLParser/issues/142)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\networkshare\\test folder$\\[Book 1.xlsx]Sheet1'!$C$33\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\networkshare\\test folder$\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithoutSpaceInFolder()\r\n        {\r\n            // See [#142](https://github.com/spreadsheetlab/XLParser/issues/142)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\networkshare\\testfolder$\\[Book 1.xlsx]Sheet1'!$C$33\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\networkshare\\testfolder$\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithQuotes()\r\n        {\r\n            // See [#135](https://github.com/spreadsheetlab/XLParser/issues/135)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\SRV01\\[TestFile.xls]TestSheet'!#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\SRV01\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"TestFile.xls\", references.First().FileName);\r\n            Assert.AreEqual(\"TestSheet\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithQuotesAndSpaces()\r\n        {\r\n            // See [#135](https://github.com/spreadsheetlab/XLParser/issues/135)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\SRV01\\[Test File.xls]Test Sheet'!#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\SRV01\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Test File.xls\", references.First().FileName);\r\n            Assert.AreEqual(\"Test Sheet\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithQuotesAndSpaceInFolder()\r\n        {\r\n            // See [#135](https://github.com/spreadsheetlab/XLParser/issues/135)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\SRV01\\Test Folder\\[TestFile.xls]Test Sheet'!#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\SRV01\\Test Folder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"TestFile.xls\", references.First().FileName);\r\n            Assert.AreEqual(\"Test Sheet\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPathWithQuotesAndSpaceInDocument()\r\n        {\r\n            // See [#135](https://github.com/spreadsheetlab/XLParser/issues/135)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\SRV01\\TestFolder\\[Test File.xls]Test Sheet'!#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"\\\\SRV01\\TestFolder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Test File.xls\", references.First().FileName);\r\n            Assert.AreEqual(\"Test Sheet\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttps()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='https://d.docs.live.net/3fade139bf25879f/Documents/[Tracer.xlsx]Sheet2'!$C$5\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"https://d.docs.live.net/3fade139bf25879f/Documents/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Tracer.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet2\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDocumentWithoutBracketsWithSpace()\r\n        {\r\n            // See [#137](https://github.com/spreadsheetlab/XLParser/issues/137)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='https://preview.perfectxl.com/Financial Sample.xlsx'!financials\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"https://preview.perfectxl.com/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Financial Sample.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"financials\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDocumentWithoutBrackets()\r\n        {\r\n            // See [#137](https://github.com/spreadsheetlab/XLParser/issues/135)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='https://preview.perfectxl.com/FinancialSample.xlsx'!financials\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"https://preview.perfectxl.com/\", references.First().FilePath);\r\n                Assert.AreEqual(\"FinancialSample.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"financials\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookRelativePath()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='Test\\Folder\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"Test\\Folder\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookRelativePathIsDefinedName()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=Test\\Folder\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"Test\\Folder\", references.First().Name);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithRoundBracketsInDocument()\r\n        {\r\n            // See [#140](https://github.com/spreadsheetlab/XLParser/issues/140)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/testfolder(brackets)/[Book 1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/testfolder(brackets)/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttpWithRoundBrackets()\r\n        {\r\n            // See [#140](https://github.com/spreadsheetlab/XLParser/issues/140)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='http://example.com/testfolder(brackets)/[Book (1).xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"http://example.com/testfolder(brackets)/\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book (1).xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n       \r\n        [TestMethod]\r\n        public void ExternalWorkbookPathWithRoundBracketsInDocument()\r\n        {\r\n            // See [#140](https://github.com/spreadsheetlab/XLParser/issues/140)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='c:\\My documents\\[Book 1 (copy).xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"c:\\My documents\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1 (copy).xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookPathWithRoundBrackets()\r\n        {\r\n            // See [#140](https://github.com/spreadsheetlab/XLParser/issues/140)\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='c:\\My documents (copy)\\[Book 1 (copy).xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(@\"c:\\My documents (copy)\\\", references.First().FilePath);\r\n            Assert.AreEqual(\"Book 1 (copy).xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookSingleCell()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookCellRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1:$A$10\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDefinedNameLocalScope()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!FirstItem\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"FirstItem\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDefinedNameGlobalScope()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references.First().FileName);\r\n            Assert.AreEqual(\"Items\", references.First().Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookSingleCell()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1, 'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$2)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n            \r\n            Assert.AreEqual(ReferenceType.Cell, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[0].Worksheet);\r\n            Assert.AreEqual(\"$A$1\", references[0].MinLocation);\r\n\r\n            Assert.AreEqual(ReferenceType.Cell, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[1].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[1].Worksheet);\r\n            Assert.AreEqual(\"$A$2\", references[1].MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookCellRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1:$A$10, 'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$11:$A$20)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n            \r\n            Assert.AreEqual(ReferenceType.CellRange, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[0].Worksheet);\r\n            Assert.AreEqual(\"$A$1\", references[0].MinLocation);\r\n            Assert.AreEqual(\"$A$10\", references[0].MaxLocation);\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[1].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[1].Worksheet);\r\n            Assert.AreEqual(\"$A$11\", references[1].MinLocation);\r\n            Assert.AreEqual(\"$A$20\", references[1].MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookDefinedNameLocalScope()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!FirstItem, 'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!SecondItem)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n            \r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[0].Worksheet);\r\n            Assert.AreEqual(\"FirstItem\", references[0].Name);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[1].FileName);\r\n            Assert.AreEqual(\"Sheet1\", references[1].Worksheet);\r\n            Assert.AreEqual(\"SecondItem\", references[1].Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookDefinedNameGlobalScope()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=SUM('C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items, 'C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items2)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n            \r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n            Assert.AreEqual(\"Items\", references[0].Name);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[1].FileName);\r\n            Assert.AreEqual(\"Items2\", references[1].Name);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookWithQuoteInSheet()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='[Book1''s.xlsm]Sheet1'!$A$1\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.Cell, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1''s.xlsm\", references[0].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbooksWithATSign()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='\\\\example.com@ssl\\sites\\[Data.xls]Hoi'!$A$1:$B$1\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Data.xls\", references[0].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookWithColonAndSlash()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\Users\\somebody\\http:\\\\\\my.sharepoint.com\\docs\\[Articles.xlsx]My Articles'!A1:D24\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Articles.xlsx\", references[0].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookWithXlsExtension()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"C:\\path\\test.xls!name\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[0].ReferenceType);\r\n            Assert.AreEqual(\"test.xls\", references[0].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookQuotesInPath()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=SUM('\\\\Users\\Test\\Desktop''s\\Book1.xlsx'!Items)\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbooksQuoteInPath()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\" =SUM('\\\\Users\\Test\\Desktop\\Book1.xlsx'!Items, '\\\\Users\\Test\\Desktop\\Books''s2.xlsx'!Items2)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[0].ReferenceType);\r\n            Assert.AreEqual(\"Book1.xlsx\", references[0].FileName);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedName, references[1].ReferenceType);\r\n            Assert.AreEqual(\"Books''s2.xlsx\", references[1].FileName);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DirectSheetReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Sheet1!F7\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"F7\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Sheet1!X1)\").ParserReferences().ToList();\r\n            \r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"X1\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RelativeSheetReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"!A1\").ParserReferences().ToList();\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(\"A1\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FileReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"[2]Sheet1!X1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"2\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"X1\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FileReferenceInRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"[2]Sheet1!X1:X10\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"2\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"X1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"X10\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void QuotedFileReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"'[2]Sheet1'!X1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"2\", references.First().FileName);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"X1\", references.First().MinLocation);\r\n        }\r\n\r\n\r\n        [TestMethod]\r\n        public void SheetReferenceRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Sheet1!X1:X6)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"X1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"X6\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsReferenceCell()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Sheet1:Sheet2!A1)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"Sheet2\", references.First().LastWorksheet);\r\n            Assert.AreEqual(\"A1\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsReferenceRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Sheet1:Sheet2!A1:A3)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"Sheet2\", references.First().LastWorksheet);\r\n            Assert.AreEqual(\"A1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"A3\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsInFileReferenceCell()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM([1]Sheet1:Sheet2!B15)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"Sheet2\", references.First().LastWorksheet);\r\n            Assert.AreEqual(\"B15\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsReferenceQuoted()\r\n        {\r\n            // See [#212](https://github.com/spreadsheetlab/XLParser/issues/212)\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM('Sheet2>:End'!A10)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet2>\", references.First().Worksheet);\r\n            Assert.AreEqual(\"End\", references.First().LastWorksheet);\r\n            Assert.AreEqual(\"A10\", references.First().MinLocation);\r\n\r\n            references = new FormulaAnalyzer(\"SUM('Sheet2:<End'!A10)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.Cell, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet2\", references.First().Worksheet);\r\n            Assert.AreEqual(\"<End\", references.First().LastWorksheet);\r\n            Assert.AreEqual(\"A10\", references.First().MinLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithPrefixedRightLimitReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(Deals!F9:Deals!F16)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Deals\", references.First().Worksheet);\r\n            Assert.AreEqual(\"Deals!F9:Deals!F16\", references.First().LocationString);\r\n\r\n            //quotes should be omitted\r\n            references = new FormulaAnalyzer(\"SUM(Deals!F9:'Deals'!F16)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Deals\", references.First().Worksheet);\r\n            Assert.AreEqual(\"Deals!F9:'Deals'!F16\", references.First().LocationString);\r\n\r\n            //external file references\r\n            references = new FormulaAnalyzer(\"SUM([1]Deals!F9:[1]Deals!F16)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"1\", references.First().FileName);\r\n            Assert.AreEqual(\"Deals\", references.First().Worksheet);\r\n            Assert.AreEqual(\"[1]Deals!F9:[1]Deals!F16\", references.First().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInSingleColumn()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Sheet1!A:A\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"A\", references.First().MinLocation);\r\n            Assert.AreEqual(\"A\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInMultipleColumns()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Sheet1!B:F\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"B\", references.First().MinLocation);\r\n            Assert.AreEqual(\"F\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInSingleRow()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Sheet1!1:1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.HorizontalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"1\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInMultipleRows()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"Sheet1!2:36\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.HorizontalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"Sheet1\", references.First().Worksheet);\r\n            Assert.AreEqual(\"2\", references.First().MinLocation);\r\n            Assert.AreEqual(\"36\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInLargeRange()\r\n        {\r\n            // expanding large range completely may lead to out of \r\n            // memory exception. Verify this is not the case.\r\n            List<ParserReference> references = new FormulaAnalyzer(\"'B-Com'!A1:Z1048576\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.CellRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"B-Com\", references.First().Worksheet);\r\n            Assert.AreEqual(\"A1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"Z1048576\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void AbsoluteColumnReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"$A:$A\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.VerticalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"$A\", references.First().MinLocation);\r\n            Assert.AreEqual(\"$A\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void AbsoluteRowReference()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"$1:$1\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.HorizontalRange, references.First().ReferenceType);\r\n            Assert.AreEqual(\"$1\", references.First().MinLocation);\r\n            Assert.AreEqual(\"$1\", references.First().MaxLocation);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RefError()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(1, references.Count);\r\n            Assert.AreEqual(ReferenceType.RefError, references.First().ReferenceType);\r\n            Assert.AreEqual(\"#REF!\", references.First().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RefErrorRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"#REF!:#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(2, references.Count);\r\n            Assert.AreEqual(\"#REF!\", references.First().LocationString);\r\n            Assert.AreEqual(\"#REF!\", references.Last().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RefErrorCellRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"A1:#REF!\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(2, references.Count);\r\n            Assert.AreEqual(\"A1\", references.First().LocationString);\r\n            Assert.AreEqual(\"#REF!\", references.Last().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void IndirectFunctionRange()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"INDIRECT(\"\"A3\"\"):INDIRECT(\"\"A20000\"\")\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(0, references.Count);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferenceFunctionAsArgument()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"ROUND(INDEX(A:A,1,1:1),1)\").ParserReferences().ToList();\r\n\r\n            //no reference for the index function\r\n            Assert.AreEqual(2, references.Count);\r\n            Assert.AreEqual(\"A:A\", references.First().LocationString);\r\n            Assert.AreEqual(\"1:1\", references.Last().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithReferenceInFunction()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(F13:OFFSET(E13,0,12))\").ParserReferences().ToList();\r\n\r\n            //no reference for the range with the offset function\r\n            Assert.AreEqual(2, references.Count);\r\n            Assert.AreEqual(\"F13\", references.First().LocationString);\r\n            Assert.AreEqual(\"E13\", references.Last().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithReferencesInFunction()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"SUM(A1:INDEX(A:A,1,1:1))\").ParserReferences().ToList();\r\n\r\n            //no reference for the range with the index function\r\n            Assert.AreEqual(3, references.Count);\r\n            Assert.AreEqual(\"A1\", references[0].LocationString);\r\n            Assert.AreEqual(\"A:A\", references[1].LocationString);\r\n            Assert.AreEqual(\"1:1\", references[2].LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ArrayAsArgument()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(\"LARGE((F38,C38:C48),1)\").ParserReferences().ToList();\r\n\r\n            Assert.AreEqual(2, references.Count);\r\n            Assert.AreEqual(\"F38\", references.First().MinLocation);\r\n            Assert.AreEqual(\"C38:C48\", references.Last().LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UnionWithinParentheses()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=(A1:A3,C1:C3)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(\"A1:A3\", references[0].LocationString);\r\n            Assert.AreEqual(\"C1:C3\", references[1].LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UnionWithoutParentheses()\r\n        {\r\n            // Valid when defining a name or conditional format range\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=A1:A3,C1:C3\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(\"A1:A3\", references[0].LocationString);\r\n            Assert.AreEqual(\"C1:C3\", references[1].LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultiAreaRangeFormula()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"=Sheet1!$A$1,Sheet1!$B$2\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(\"Sheet1!$A$1\", references[0].LocationString);\r\n            Assert.AreEqual(\"Sheet1!$B$2\", references[1].LocationString);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UserDefinedFunction()\r\n        {\r\n            List<ParserReference> references = new FormulaAnalyzer(@\"='C:\\AddIns\\Something.xlam'!fT_Value(A1)\").ParserReferences().ToList();\r\n            Assert.AreEqual(2, references.Count);\r\n\r\n            Assert.AreEqual(ReferenceType.UserDefinedFunction, references[0].ReferenceType);\r\n            Assert.AreEqual(@\"C:\\AddIns\\\", references[0].FilePath);\r\n            Assert.AreEqual(\"Something.xlam\", references[0].FileName);\r\n            Assert.AreEqual(\"fT_Value\", references[0].Name);\r\n            Assert.AreEqual(@\"'C:\\AddIns\\Something.xlam'!fT_Value\", references[0].LocationString);\r\n\r\n            Assert.AreEqual(ReferenceType.Cell, references[1].ReferenceType);\r\n            Assert.AreEqual(\"A1\", references[1].LocationString);\r\n        }\r\n        #endregion\r\n\r\n        #region Depth() and ConditionalComplexity()\r\n\r\n        [TestMethod]\r\n        public void TestDepth()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"SUM(1,2+SUM(3),3)\");\r\n            Assert.AreEqual(fa.Depth(), 4);\r\n            Assert.AreEqual(fa.OperatorDepth(), 3);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestConditionalComplexity()\r\n        {\r\n            var fa1 = new FormulaAnalyzer(\"1\");\r\n            Assert.AreEqual(fa1.ConditionalComplexity(), 0);\r\n            var fa2 = new FormulaAnalyzer(\"IF(TRUE,IF(FALSE,1,0),0)\");\r\n            Assert.AreEqual(fa2.ConditionalComplexity(), 2);\r\n        }\r\n        #endregion\r\n\r\n        #region Constants()\r\n\r\n        [TestMethod]\r\n        public void TestConstants()\r\n        {\r\n            var fa = new FormulaAnalyzer(\"1*3-8-(-9)+VLOOKUP($A:$B,5,10)&\\\"ABC\\\"+TRUE*-3\");\r\n            var constants = fa.Constants().ToList();\r\n            CollectionAssert.AreEqual(new[] { \"1\", \"3\", \"8\", \"-9\", \"5\", \"10\", \"\\\"ABC\\\"\", \"TRUE\", \"-3\"}, constants);\r\n        }\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/ParserTests.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System.Text.RegularExpressions;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    [TestClass]\r\n    public class ParserTests\r\n    {\r\n        [TestMethod]\r\n        // Ensure that the grammar has no conflicts\r\n        public void NoGrammarConflicts()\r\n        {\r\n            /* A conflict indicates an ambiguity in grammar or an error in the rules. In the\r\n             * case of an ambiguity, Irony will choose an action, which may not be the right\r\n             * one. Rewrite the grammar rules until there are no more conflicts, and the\r\n             * parsing is correct. As a last resort, you can manually specify a shift with a\r\n             * grammar hint such as PreferShiftHere() or ReduceHere(). However, this should\r\n             * only be done if such a hint is applicable in all cases; otherwise, the grammar\r\n             * must be written differently.\r\n             */\r\n\r\n            /* An example:\r\n             * (A1) can be parsed both as an union and a bracketed reference. This is an\r\n             * ambiguity, and thus must be solved by precedence or a grammar hint.\r\n             */\r\n\r\n            /* An example:\r\n             * Functioncall.Rule =\r\n             *   Prefix + Formula           // Prefix unop\r\n             * | Formula + infix + Formula  // Binop\r\n             * | Formula + Formula          // Intersection\r\n             *\r\n             * With this 1+1 can be parsed as both 1-1 and 1 (-1)\r\n             * This is obviously erroneous as there is only one correct interpretation, so the\r\n             * rules had to be rewritten.\r\n             */\r\n\r\n            var parser = new Parser(new ExcelFormulaGrammar());\r\n            Assert.IsTrue(parser.Language.Errors.Count == 0, \"Grammar has {0} error(s) or conflict(s)\", parser.Language.Errors.Count);\r\n        }\r\n\r\n        private static ParseTreeNode Parse(string input)\r\n        {\r\n            return ExcelFormulaParser.Parse(input);\r\n        }\r\n\r\n        internal static void Test(string input, Predicate<ParseTreeNode> condition = null)\r\n        {\r\n            ParseTreeNode p = Parse(input);\r\n            if (condition != null)\r\n            {\r\n                Assert.IsTrue(condition.Invoke(p.SkipToRelevant(true)), \"condition failed for input '{0}'\", input);\r\n            }\r\n            // Also do a print test for every parse\r\n            PrintTests.test(formula: input, parsed: p);\r\n        }\r\n\r\n        private static void Test(IEnumerable<string> inputs, Predicate<ParseTreeNode> condition = null)\r\n        {\r\n            foreach (var input in inputs)\r\n            {\r\n                Test(input, condition);\r\n            }\r\n        }\r\n\r\n        private static void Test(params string[] inputs)\r\n        {\r\n            foreach (var input in inputs)\r\n            {\r\n                Test(input);\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BinaryOperators()\r\n        {\r\n            Test(new [] {\"A1*5\", \"1+1\", \"1-1\", \"1/1\", \"1^1\", \"1&1\"},\r\n                n=> n.IsBinaryOperation() && n.IsOperation() && n.IsBinaryNonReferenceOperation());\r\n            Test(new[] { \"A1:A1\", \"A1 A1\" },\r\n                n => n.IsBinaryOperation() && n.IsOperation() && n.IsBinaryReferenceOperation());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UnaryOperators()\r\n        {\r\n            Test(new [] {\"+A5\", \"-1\", \"1%\"},\r\n            n=> n.IsUnaryOperation() && n.IsOperation());\r\n            Test(\"-1\", node => node.GetFunction() == \"-\");\r\n        }\r\n\r\n        [TestMethod]\r\n        [ExpectedException(typeof(ArgumentException))]\r\n        public void NotAFunction()\r\n        {\r\n            Test(\"1\", node=>node.GetFunction()==\"No function here\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExcelFunction()\r\n        {\r\n            Test(\"DAYS360(1)\", node => node.IsFunction() && node.GetFunction() == \"DAYS360\" && node.IsBuiltinFunction());\r\n            Test(\"SUM(1)\", node => node.IsFunction() && node.GetFunction() == \"SUM\" && node.IsBuiltinFunction());\r\n            Test(\"INDEX(1)\", node => node.IsFunction() && node.GetFunction() == \"INDEX\" && node.IsBuiltinFunction());\r\n            Test(\"IF(1)\", node => node.IsFunction() && node.GetFunction() == \"IF\" && node.MatchFunction(\"IF\") && node.IsBuiltinFunction());\r\n            Test(\"MYUSERDEFINEDFUNCTION()\", node => node.IsFunction() && node.GetFunction() == \"MYUSERDEFINEDFUNCTION\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UserDefinedFunction()\r\n        {\r\n            Test(\"AABS(1)\", node => node.IsFunction() && node.GetFunction() == \"AABS\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalUserDefinedFunction()\r\n        {\r\n            Test(\"[1]!myFunction()\", node => node.IsFunction() && node.GetFunction() == \"[1]!MYFUNCTION\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Bool()\r\n        {\r\n            Test(\"True\");\r\n            Test(\"false\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Number()\r\n        {\r\n            Test(\"123\");\r\n            Test(\"0.95\");\r\n            Test(\".95\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Range()\r\n        {\r\n            Test(\"SUM(A1:B5)\");\r\n        }\r\n\r\n       [TestMethod]\r\n        public void RangeWithIntersections()\r\n        {\r\n            Test(\"SUM((Total_Cost Jan):(Total_Cost Apr.))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithParentheses()\r\n        {\r\n            Test(\"SUM(_YR1:(YP))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRange()\r\n        {\r\n            Test(\"SUM(testrange)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeWithDigits()\r\n        {\r\n            Test(\"SUM(PC3eur)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeSingleChar()\r\n        {\r\n            Test(\"MMULT(A,invA)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeWithUnderscore()\r\n        {\r\n            Test(\"IF(SUM($E15:E15)<$C15*1000,MIN($C15*1000-SUM($C15:C15),$C15*1000*VLOOKUP(F$7,[0]!_4_15_YR_MACRS,3)),0)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeOthers()\r\n        {\r\n            Test(new []\r\n            {\r\n                // See https://github.com/spreadsheetlab/XLParser/issues/40\r\n                \"XDO_?Amount?\",\r\n                \"_ABC\",\r\n                @\"\\ABC\",\r\n                \"äBC\",\r\n                \"ABC.ABC\",\r\n                \"ABC?ABC\",\r\n                \"Abcäbc\",\r\n                @\"ABC\\ABC\",\r\n                // See https://github.com/spreadsheetlab/XLParser/issues/106\r\n                \"ct_per_€\",\r\n                \"ctM3_naar_€MWh€\"\r\n            }, node => node.SkipToRelevant(true).Type() == GrammarNames.NamedRange);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void VRange()\r\n        {\r\n            Test(\"SUM(A:B)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedCell()\r\n        {\r\n            Test(\"+openstellingBSO48.\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CellReference()\r\n        {\r\n            var cells = new[] {\"A1\", \"Z9\", \"AB10\", \"ABC999\", \"BSO48\"};\r\n            foreach (var cell in cells)\r\n            {\r\n                Test(cell, tree => tree.AllNodes(GrammarNames.Cell).Select(ExcelFormulaParser.Print).FirstOrDefault() == cell);\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MaxRowAddress()\r\n        {\r\n            Test(\"A1048576\", node => node.SkipToRelevant(true).Type() == GrammarNames.Cell);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void InvalidRowAddress()\r\n        {\r\n            Test(\"A1048577\", node => node.SkipToRelevant(true).Type() == GrammarNames.NamedRange);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MaxColumnAddress()\r\n        {\r\n            Test(\"XFD1\", node => node.SkipToRelevant(true).Type() == GrammarNames.Cell);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void InvalidColumnAddress()\r\n        {\r\n            Test(\"XFE1\", node => node.SkipToRelevant(true).Type() == GrammarNames.NamedRange);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestErrorCodeNull()\r\n        {\r\n            Test(\"#NULL!\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestErrorCodeNullFormula()\r\n        {\r\n            Test(\"SUM(A1 A2)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestErrorCodeRef()\r\n        {\r\n            Test(\"'hulp voor grafiek'!#REF!\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestErrorCodeRange()\r\n        {\r\n            Test(\"SUM(#REF!:#REF!)\");\r\n        }\r\n\r\n\r\n        [TestMethod]\r\n        public void TestErrorCodeName()\r\n        {\r\n            Test(\"#NAME?\");\r\n        }\r\n\r\n\r\n        [TestMethod]\r\n        public void EmptyArgumentAllowed()\r\n        {\r\n            Test(\"IF(AZ109=0,,AZ109*J109/12)\");\r\n            Test(\"EXP(,)\");\r\n            Test(\"EXP(,2,)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NoArgumentsAllowed()\r\n        {\r\n            Test(\"YEAR(TODAY())\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TopLevelParentheses()\r\n        {\r\n            Test(\"('TOR PP FE-TR'!U87/('TOR PP FE-TR'!S87-'TOR PP FE-TR'!S68))\");\r\n        }\r\n\r\n\r\n        [TestMethod]\r\n        public void TwoEmptyArgumentsAllowed()\r\n        {\r\n            Test(\"IF(AZ109=0,,,AZ109*J109/12)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Union()\r\n        {\r\n            Test(\"LARGE((F38,C38),1)\", node => node.ChildNodes[1].ChildNodes[0].SkipToRelevant(true).GetFunction() == \",\");\r\n            Test(\"LARGE((2:2,C38,$A$1:A6),1)\", node => node.ChildNodes[1].ChildNodes[0].SkipToRelevant(true).GetFunction() == \",\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BoolParses()\r\n        {\r\n            Test(\"IF(TRUE,A1,B6)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void LongSheetRefence()\r\n        {\r\n            Test(\"Sheet1!A6\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ShortSheetRefence()\r\n        {\r\n            Test(\"S1!A6\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetRefence()\r\n        {\r\n            Test(\"Sheet1:Sheet2!A6\");\r\n            Test(\"'Sheet1:Sheet2'!A6\");\r\n            Test(\"SUM('[74]Miami P&L:Venezuela P&L'!G10)\");\r\n            //test(@\"=SUM('D:\\TV_LATAM_NET_ACC\\Financial Statement Comments\\Ad Sales\\FY''15\\Period 3[3-Ad Sales Financial Statements FY15 June-v2.xlsx]Miami P&L:Venezuela P&L'!G10)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetVSRange()\r\n        {\r\n            Test(\"AAA:XXX!A:B\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DoublePrefixedRange()\r\n        {\r\n            Test(\"Sheet1!A1:'Sheet1'!A2\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void LongCellReference()\r\n        {\r\n            Test(\"Sheet2!A123456\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Dollar()\r\n        {\r\n            Test(\"$B$6+ B$7+ $V9\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DollarRange()\r\n        {\r\n            Test(\"SUM($B$6:F9) + SUM(B$7:$V9)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Comparison()\r\n        {\r\n            Test(\"IF(A1=3,A6,B9)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void AdditionalBrackets()\r\n        {\r\n            Test(\"(SUM(B6:B8))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void VLOOKUP()\r\n        {\r\n            Test(\"VLOOKUP(A1,A6:B25,6,TRUE)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Nested_Formula()\r\n        {\r\n            Test(\"ROUND(DAYS360(C7,(E132+30),TRUE)/360,2)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Space_in_Sheetname()\r\n        {\r\n            Test(\"D19+'Required Funds'!B16\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NonAlphaSheetname()\r\n        {\r\n            Test(\"'Welcome!+-&'!B16\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Text_with_spaces()\r\n        {\r\n            Test(\"IF(C36>0,\\\"Hello World\\\",\\\"Or not\\\")\");\r\n        }\r\n\r\n        [TestMethod]\r\n        [ExpectedException(typeof(ArgumentException), \"If string contains quote\")]\r\n        public void Text_with_Quotes()\r\n        {\r\n            // Incorrect \" within string, should be rejected.\r\n            Test(\"IF(C36>0,\\\"Hello\\\" World\\\",\\\"Or not\\\")\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Text_with_escaped_quotes()\r\n        {\r\n            Test(\"\\\"a\\\"\\\"ap\\\"\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TextWithEscapesAndDoubleQuotes()\r\n        {\r\n            Test(@\"IF(RIGHT(G8,1)=\"\"\\\"\",\"\"\"\",\"\"PLEASE END THE PATH STRING WITH A '\\' SYMBOL.\"\")\",\r\n                // Check if any of the strings is \"\\\"\r\n                tree => tree.AllNodes(GrammarNames.Text).Any(text => text.Print() == @\"\"\"\\\"\"\"));\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Text_with_linebreak()\r\n        {\r\n            Test(\"\\\"line1\" + Environment.NewLine + \"line two\\\"\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Text_with_dot()\r\n        {\r\n            Test(\"IF(C36>0,\\\". says Hello Nurse\\\")\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Text_with_comma()\r\n        {\r\n            Test(\"IF(C36>0,\\\"Hello Nurse, says .\\\")\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_Arie()\r\n        {\r\n            Test(\"IF(C5<>1,noshow, basis + 9 * (AC5 + bonuspunten) / ($AC$2 - ignored))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_120()\r\n        {\r\n            Test(\"VLOOKUP($B6,Invoeren!$B:$I,2,FALSE)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_130_Inequality()\r\n        {\r\n            Test(\"IF(D2>=voldoende, vresult, oresult)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_130_Compare_in_String()\r\n        {\r\n            Test(\"COUNTIF(AD5:AD181, \\\">= 5.75\\\")\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_439_VRange()\r\n        {\r\n            Test(\"+SUMIF('# cl gespec zorg'!A:A,A:A,'# cl gespec zorg'!B:B)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_130_Empty_String()\r\n        {\r\n            Test(\"\\\"\\\"\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_437_NamedRange()\r\n        {\r\n            Test(\"ROUND((SUM(PC3eur))/1000,)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_79_EmptyArgument()\r\n        {\r\n            Test(\"IF($K$20<K21,SUM(L21:N21,),0)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Testcase_524()\r\n        {\r\n            Test(\"RIGHT([1]!SheetName(),(LEN([1]!SheetName())-20))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BracesInFormula()\r\n        {\r\n            Test(\"OR(MONTH(GQ$2) = {3,9})\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BracesSemicolonInFormula()\r\n        {\r\n            Test(\"VLOOKUP($B192,'Sheet1'!$B:$CD,{35;36},FALSE)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void xlmnInFormula()\r\n        {\r\n            Test(\"SUMIF('150000'!A:A,_xlnm.Print_Titles,'150000'!C:C)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CellReferenceFunctionInFormula()\r\n        {\r\n            Test(\"XIRR($Y$7:INDEX($D$3:$AS$7,5,MATCH(Assumptions!$C$18,Returns!$D$3:$AS$3)),$Y$3:INDEX($D$3:$AS$3,1,MATCH(Assumptions!$C$18,Returns!$D$3:$AS$3)))\");\r\n            Test(\"IF(O3=1,1,LINEST(OFFSET(O$9,ABS($F$2-$F$1)+1,0):OFFSET(O$9,$F$1,0),OFFSET($N$9,ABS($F$2-$F$1)+1,0):OFFSET($N9,$F$1,0)))\");\r\n            Test(\"AVERAGE(INDIRECT(\\\"D\\\"&$A$2):INDIRECT(\\\"D\\\"&$A$7))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void xllInFormula()\r\n        {\r\n            Test(\"_xll.HEAT($B9,$C9)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BigNumberInFormula()\r\n        {\r\n            Test(\"30426000000/E7/1000\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UDFWithNumericCharacters()\r\n        {\r\n            Test(\"ASTRIP2_m(E9,E10)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UDFLikeNamedRangeCombination()\r\n        {\r\n            Test(\"Prob1OptimalRiskyWeight(C7,C6,E7,G5)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UDFWithDot()\r\n        {\r\n            Test(\"Functions.BScall(C3,C4,C5,C6,C7,C8)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void NamedRangeReference()\r\n        {\r\n            Test(\"SUM(TestRange)\");\r\n            Test(\"SUM(Sheet1!TestRange)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithUnderscore()\r\n        {\r\n            Test(\"aap_noot!B12\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithPeriod()\r\n        {\r\n            Test(\"vrr2011_Omz.!M84\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetAsString()\r\n        {\r\n            Test(\"'[20]Algemene info + \\\"Overview\\\"'!T95\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetWithQuote()\r\n        {\r\n            Test(\"'Owner''s Engineer'!$A$2\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalSheetWithQuote()\r\n        {\r\n            Test(\"'[1]Stacey''s Reconciliation'!C3\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DirectSheetReference()\r\n        {\r\n            Test(\"Sheet1!F7\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetReference()\r\n        {\r\n            Test(\"SUM(Sheet1!X1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FileReference()\r\n        {\r\n            Test(\"[2]Sheet1!X1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FileReferenceInRange()\r\n        {\r\n            Test(\"[2]Sheet1!X1:X10\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void QuotedFileReference()\r\n        {\r\n            Test(\"'[2]Sheet1'!X1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TableReferenceWithSheetReference()\r\n        {\r\n            //See [#198] (https://github.com/spreadsheetlab/XLParser/issues/198)\r\n            Test(\"=SUM([Column1],' Sheet1'!A1)\");\r\n            Test(\"[Column1] + Sheet1!A1\");\r\n            Test(\"=SUM([Column1],' Sheet1:Sheet2'!A1)\");\r\n            Test(\"=[Column1] + Sheet1:Sheet2!A1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetReferenceRange()\r\n        {\r\n            Test(\"SUM(Sheet1!X1:X6)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsReferenceCell()\r\n        {\r\n            Test(\"SUM(Sheet1:Sheet2!A1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsReferenceRange()\r\n        {\r\n            Test(\"SUM(Sheet1:Sheet2!A1:A3)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleSheetsInFileReferenceCell()\r\n        {\r\n            Test(\"SUM([1]Sheet1:Sheet2!B15)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithPrefixedRightLimitReference ()\r\n        {\r\n            Test(\"SUM(Deals!F9:Deals!F16)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInSingleColumn()\r\n        {\r\n            Test(\"Sheet1!A:A\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferencesInLargeRange()\r\n        {\r\n            Test(\"'B-Com'!A1:Z1048576\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ReferenceFunctionAsArgument()\r\n        {\r\n            Test(\"ROUND(INDEX(A:A,1,1:1),1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RangeWithReferenceFunction()\r\n        {\r\n            Test(\"SUM(A1:INDEX(A:A,1,1:1))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UnionArgument()\r\n        {\r\n            Test(\"LARGE((F38,C38:C48),1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DDE()\r\n        {\r\n            Test(\"[1]!'INDU Index,[PX_close_5d]'\");\r\n            // Test(\"=REUTER|IDN!'NGH2,PRIM ACT 1,1'\"); TODO\r\n        }\r\n\r\n        [TestMethod]\r\n        [ExpectedException(typeof(ArgumentException), \"If formula can't be parsed\")]\r\n        public void ParsingFails()\r\n        {\r\n            Test(\"]\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void EqualsIsFunction()\r\n        {\r\n            Test(\"A1=A2\", node => node.IsFunction() && node.GetFunction() == \"=\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void PercentIsFunction()\r\n        {\r\n            Test(\"1%\", node => node.IsFunction() && node.GetFunction() == \"%\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void FunctionsAsRefExpressions()\r\n        {\r\n            Test(\"IF(TRUE,A1,A2):B5\", \"INDEX():B5\", \"MyUDFunction:B5\", \"Sheet!MyUDFunction:B5\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void Bug()\r\n        {\r\n            Test(\"SUM(B5,2)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestIsParentheses()\r\n        {\r\n            // Can't use test() for this one, since test() invokes skipFormula()\r\n            Assert.IsTrue(ExcelFormulaParser.Parse(\"(1)\").IsParentheses());\r\n            Assert.IsTrue(ExcelFormulaParser.Parse(\"(A1)\").ChildNodes[0].IsParentheses());\r\n            // Make sure unions aren't recognized as parentheses\r\n            var union = ExcelFormulaParser.Parse(\"(A1,A2)\");\r\n            Assert.IsFalse(union.IsParentheses());\r\n            Assert.IsFalse(union.ChildNodes[0].IsParentheses());\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestQuotedFileSheetWithPath()\r\n        {\r\n            Test(@\"='C:\\mypath\\[myfile.xlsm]Sheet'!A1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbook()\r\n        {\r\n            Test(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookNetworkPath()\r\n        {\r\n            // See [#107](https://github.com/spreadsheetlab/XLParser/issues/107)\r\n            Test(@\"='\\\\TEST-01\\Folder\\[Book1.xlsx]Sheet1'!$A$1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttp()\r\n        {\r\n            // See [#108](https://github.com/spreadsheetlab/XLParser/issues/108)\r\n            Test(@\"='http://example.com/test/[Book1.xlsx]Sheet1'!$A$1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookUrlPathHttps()\r\n        {\r\n            // See [#114](https://github.com/spreadsheetlab/XLParser/issues/114)\r\n            Test(@\"='https://d.docs.live.net/3fade139bf25879f/Documents/[Tracer.xlsx]Sheet2'!$C$5+Sheet10!J44\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookRelativePath()\r\n        {\r\n            // See [#109](https://github.com/spreadsheetlab/XLParser/issues/109)\r\n            Test(@\"='Test\\Folder\\[Book1.xlsx]Sheet1'!$A$1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookSingleCell()\r\n        {\r\n            Test(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookCellRange()\r\n        {\r\n            Test(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1:$A$10\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDefinedNameLocalScope()\r\n        {\r\n            Test(@\"='C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!FirstItem\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookDefinedNameGlobalScope()\r\n        {\r\n            // See [#101](https://github.com/spreadsheetlab/XLParser/issues/101)\r\n            Test(@\"='C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookSingleCell()\r\n        {\r\n            Test(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1,'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$2)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookCellRange()\r\n        {\r\n            Test(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$1:$A$10,'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!$A$11:$A$20)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookDefinedNameLocalScope()\r\n        {\r\n            Test(@\"=SUM('C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!FirstItem,'C:\\Users\\Test\\Desktop\\[Book1.xlsx]Sheet1'!SecondItem)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void MultipleExternalWorkbookDefinedNameGlobalScope()\r\n        {\r\n            Test(@\"=SUM('C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items,'C:\\Users\\Test\\Desktop\\Book1.xlsx'!Items2)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookWithoutPath()\r\n        {\r\n            Test(\"=[Book1.xlsx]Sheet!A1\");\r\n            Test(\"=[Book1.xlsx]!Salary\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ExternalWorkbookWithoutPathAndExtension()\r\n        {\r\n            Test(\"=[Book1]Sheet!A1\");\r\n            Test(\"=[Book1]!Salary\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestFilePathWithSpace()\r\n        {\r\n            Test(@\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL+FINANCIAL PIVOT '!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL+FINANCIAL PIVOT '!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL+FINANCIAL PIVOT '!D6\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL+FINANCIAL PIVOT '!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL+FINANCIAL PIVOT '!D7\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]FINANCIAL PIVOT'!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]FINANCIAL PIVOT'!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]FINANCIAL PIVOT'!D7\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL PIVOT'!D6\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL PIVOT'!D8\",\r\n                @\"='C:\\EOL\\Management Report\\DATAMART\\REGIONAL ANALYSIS\\REPORTS\\052301\\[DEAL BREAKDOWN ANALYSIS 05-23-01.xls]PHYSICAL PIVOT'!D7\"\r\n                );\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestSpaceAsSheetName()\r\n        {\r\n            // See [Issue 37](https://github.com/spreadsheetlab/XLParser/issues/37)\r\n            var inputs = new[] {\"VLOOKUP(' '!G3,' '!B4:F99,5)\", \"VLOOKUP('\\t'!G3,'\\t'!B4:F99,5)\", \"VLOOKUP('   '!G3,'   '!B4:F99,5)\"};\r\n            Test(inputs, tree => tree.AllNodes(GrammarNames.Prefix).All(node => Regex.IsMatch(node.GetPrefixInfo().Sheet, @\"^\\s+$\")));\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetNamesWithSpacesCanBeExtractedCorrectly()\r\n        {\r\n            var strangeSheetNames = new[] {\"\\t\", \" \",\"   \", \" A\", \" ''A\", \" A \", \" ''A1'' \"};\r\n            foreach (var sheetName in strangeSheetNames)\r\n            {\r\n                // Simple reference to another sheet\r\n                var sourceText = $\"'{sheetName}'!A1\";\r\n                ParseTreeNode node = ExcelFormulaParser.Parse(sourceText);\r\n\r\n                var actual = node.AllNodes(GrammarNames.Prefix).First().GetPrefixInfo().Sheet;\r\n\r\n                Assert.AreEqual(sheetName, actual);\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SheetNameIsReferenceError()\r\n        {\r\n            var formulas = new[] {\"#REF!A1\", \"B1+#REF!A1\"};\r\n            Test(formulas);\r\n\r\n            // See [#76](https://github.com/spreadsheetlab/XLParser/issues/76)\r\n            foreach (var formula in formulas)\r\n            {\r\n                Assert.AreEqual(0, ExcelFormulaParser.ParseToTree(formula).Tokens.Count(TokenIsIntersect));\r\n            }\r\n\r\n            const string formulaWithOneIntersect = \"#REF!A:A #REF!1:1\";\r\n            Test(formulaWithOneIntersect);\r\n            Assert.AreEqual(1, ExcelFormulaParser.ParseToTree(formulaWithOneIntersect).Tokens.Count(TokenIsIntersect));\r\n\r\n            bool TokenIsIntersect(Token token)\r\n            {\r\n                return string.Equals(token.Terminal.Name, \"INTERSECT\", StringComparison.OrdinalIgnoreCase);\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestNamedRangeCombination()\r\n        {\r\n            // See [Issue 46](https://github.com/spreadsheetlab/XLParser/issues/46)\r\n            // This concerns names beginning with non-name words.\r\n            var names = new[] {\"A1ABC\", \"A1A1\", \"A2.PART_NUM\", \"A2?PART_NUM\", \"TRUEFOO\", \"FALSEFOO\", \"TRUEMODEL\", \"W1.\"};\r\n            foreach (var name in names)\r\n            {\r\n                Test(name, tree => tree.AllNodes(GrammarNames.NamedRange).Select(ExcelFormulaParser.Print).Contains(name));\r\n            }\r\n        }\r\n\r\n        [TestMethod]\r\n        public void BackslashInEnclosedInBracketsToken()\r\n        {\r\n            // See [#84](https://github.com/spreadsheetlab/XLParser/issues/84)\r\n            Test(@\"'C:\\MyAddins\\MyAddin.xla'!MyFunc(\"\"sampleTextArg\"\", 1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ParseUdfNamesWithSpecialCharacters()\r\n        {\r\n            // See [#55](https://github.com/spreadsheetlab/XLParser/issues/55)\r\n            Test(\"·()\", \"¡¢£¤¥¦§¨©«¬­®¯°±²³´¶·¸¹»¼½¾¿×÷()\");\r\n\r\n            Assert.ThrowsException<ArgumentException>(() => ExcelFormulaParser.ParseToTree(\"A↑()\"));\r\n        }\r\n\r\n        [TestMethod]\r\n        public void DoNotParseUdfNamesConsistingOnlyOfROrC()\r\n        {\r\n            // See [#56](https://github.com/spreadsheetlab/XLParser/issues/56)\r\n            // UDF function names consisting of a single character \"R\" or \"C\" must be prefixed by the module name\r\n            foreach (var disallowed in \"RrCc\")\r\n            {\r\n                Assert.ThrowsException<ArgumentException>(() => ExcelFormulaParser.ParseToTree($\"{disallowed}()\"));\r\n            }\r\n\r\n            Test(\"Module1.R()\", \"N()\", \"T()\", \"Ñ()\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void ImplicitIntersection()\r\n        {\r\n            Test(\"=@B10:B20\");\r\n            Test(\"=@namedRange\");\r\n            Test(\"=SQRT(A1:A4)+ SQRT(@A1:A4)\");\r\n            Test(\"=SQRT(A1:A4)+ @SQRT(A1:A4)\");\r\n            Test(\"=SQRT(A1:A4)+ SQRT(@namedRange)\");\r\n            Test(\"=IF(J131=1,@Index($F125:$F129,J132)/$F130,0)\");            \r\n        }\r\n\r\n        [TestMethod]\r\n        public void SpillError()\r\n        {\r\n            Test(\"#SPILL!\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void SpillRangeReference()\r\n        {\r\n            Test(\"=B10#\");\r\n            Test(\"=(B10)#\");\r\n            Test(\"=OFFSET(\\\"A1\\\",10,1)#\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void UnionOperator()\r\n        {\r\n            // See [#98](https://github.com/spreadsheetlab/XLParser/issues/98)\r\n            // See [#124](https://github.com/spreadsheetlab/XLParser/issues/124)\r\n            Test(\"=(A1:A3,C1:C3)\");\r\n            Test(\"=A1:A3,C1:C3\");\r\n            Test(\"=A1:A5,C1:C5,E1:E5\");\r\n            Test(\"=Sheet1!$A$1,Sheet1!$B$2\");\r\n        }\r\n\r\n\r\n        [TestMethod]\r\n        public void SmbPaths()\r\n        {\r\n            // See [#136](https://github.com/spreadsheetlab/XLParser/issues/136)\r\n            Test(\"='\\\\\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$1\", tree =>\r\n                tree.AllNodes().Count(x => x.Is(GrammarNames.Reference)) == 1);\r\n            Test(\"='C:\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$1+'C:\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$2\",\r\n                tree =>\r\n                    tree.AllNodes().Count(x => x.Is(GrammarNames.Reference)) == 2);\r\n            Test(\"='\\\\\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$1+'\\\\\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$2\",\r\n                tree =>\r\n                    tree.AllNodes().Count(x => x.Is(GrammarNames.Reference)) == 2);\r\n            Test(\"='\\\\\\\\TEST-01\\\\Folder\\\\[Book1.xlsx]Sheet1'!$A$1+'\\\\\\\\TEST-01\\\\[Folder]\\\\[Book1.xlsx]Sheet1'!$A$2\",\r\n                tree =>\r\n                    tree.AllNodes().Count(x => x.Is(GrammarNames.Reference)) == 2);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/PrefixInfoTests.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    [TestClass]\r\n    public class PrefixInfoTests\r\n    {\r\n        private PrefixInfo test(string prefix)\r\n        {\r\n            var pi = ExcelFormulaParser.Parse($\"{prefix}A1\").AllNodes(GrammarNames.Prefix).First().GetPrefixInfo();\r\n            Assert.AreEqual(prefix, pi.ToString());\r\n            return pi;\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestSheet()\r\n        {\r\n            var t = test(\"Sheet!\");\r\n            Assert.IsTrue(t.HasSheet);\r\n            Assert.IsFalse(t.HasFile || t.HasFileName || t.HasFileNumber || t.HasFilePath || t.HasMultipleSheets || t.IsQuoted);\r\n            Assert.AreEqual(\"Sheet\", t.Sheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestSheetQuoted()\r\n        {\r\n            var t = test(\"'Sheet'!\");\r\n            Assert.IsTrue(t.HasSheet && t.IsQuoted);\r\n            Assert.IsFalse(t.HasFile || t.HasFileName || t.HasFileNumber || t.HasFilePath || t.HasMultipleSheets);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestFileNumericSheet()\r\n        {\r\n            var t = test(\"[1]Sheet!\");\r\n            Assert.IsTrue(t.HasSheet && t.HasFileNumber && t.HasFile);\r\n            Assert.IsFalse(t.HasFileName || t.HasFilePath || t.HasMultipleSheets || t.IsQuoted);\r\n            Assert.AreEqual(1, t.FileNumber);\r\n            Assert.AreEqual(\"Sheet\", t.Sheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestFileStringSheet()\r\n        {\r\n            var t = test(\"[file.xls]Sheet!\");\r\n            Assert.IsTrue(t.HasSheet && t.HasFileName && t.HasFile);\r\n            Assert.IsFalse(t.HasFileNumber || t.HasFilePath || t.HasMultipleSheets || t.IsQuoted);\r\n            Assert.AreEqual(\"file.xls\", t.FileName);\r\n            Assert.AreEqual(\"Sheet\", t.Sheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestQuotedFileStringSheet()\r\n        {\r\n            var t = test(\"'[file.xls]Sheet'!\");\r\n            Assert.IsTrue(t.HasSheet && t.HasFileName && t.IsQuoted && t.HasFile);\r\n            Assert.IsFalse(t.HasFileNumber || t.HasFilePath || t.HasMultipleSheets);\r\n            Assert.AreEqual(\"file.xls\", t.FileName);\r\n            Assert.AreEqual(\"Sheet\", t.Sheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestQuotedPathFileStringSheet()\r\n        {\r\n            var t = test(@\"'C:\\path\\[file.xls]Sheet'!\");\r\n            Assert.IsTrue(t.HasSheet && t.HasFileName && t.IsQuoted && t.HasFilePath && t.HasFile);\r\n            Assert.IsFalse(t.HasFileNumber || t.HasMultipleSheets);\r\n            Assert.AreEqual(@\"C:\\path\\\", t.FilePath);\r\n            Assert.AreEqual(\"file.xls\", t.FileName);\r\n            Assert.AreEqual(\"Sheet\", t.Sheet);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestMultiplesheets()\r\n        {\r\n            var t = test(\"Sheet1:Sheet3!\");\r\n            Assert.IsTrue(t.HasMultipleSheets);\r\n            Assert.IsFalse(t.HasFile || t.HasFileName || t.HasFileNumber || t.HasFilePath || t.HasSheet || t.IsQuoted);\r\n            Assert.AreEqual(\"Sheet1:Sheet3\", t.MultipleSheets);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestFileMultiplesheets()\r\n        {\r\n            var t = test(\"[1]Sheet1:Sheet3!\");\r\n            Assert.IsTrue(t.HasMultipleSheets && t.HasFile && t.HasFileNumber);\r\n            Assert.IsFalse(t.HasFileName || t.HasFilePath || t.HasSheet || t.IsQuoted);\r\n            Assert.AreEqual(\"Sheet1:Sheet3\", t.MultipleSheets);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/PrintTests.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\nusing System.Text.RegularExpressions;\r\nusing XLParser;\r\nusing Irony.Parsing;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    // Parameterized tests would be better for this class, but MSTest doesn't support them\r\n    [TestClass]\r\n    public class PrintTests\r\n    {\r\n        [TestMethod]\r\n        public void TestNumber()\r\n        {\r\n            test(\"1\", \"1.5\", \"100\");\r\n            // exponential notation gets parsed to normal numbers so cannot be printed back\r\n            // test(\"1e3\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestUDF()\r\n        {\r\n            test(\"FOO()\", \"FOO(BAR())\", \"FOO(1+1,BAR(1,5,100,\\\"abc\\\"))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestExcelFunction()\r\n        {\r\n            test(\"VLOOKUP(1)\", \"SUM(A1:A5)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestExcelFunctionCellRef()\r\n        {\r\n            test(\"INDEX(1)\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestReference()\r\n        {\r\n            test(\"A1\", \"ZZZ555\",\r\n            \"A1:A5\", \"1:5\", \"A:Z\",\r\n            \"Sheet!A1\", \"[1]Sheet!A1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestRanges()\r\n        {\r\n            test(\"A1:A5\", \"1:5\", \"A:Z\", \"A1:SheetName!A5\", \"Sheet1!A1:Sheet5!A1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestNamedRanges()\r\n        {\r\n            test(\"TEST\", \"Sheet1!TEST\", \"VLOOKUP\", \"[1]!TEST\", \"[1]Sheet!TEST\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestErrors()\r\n        {\r\n            test(\"#DIV/0!\", \"#NAME?\", \"#NUM!\", \"#NULL!\", \"#REF!\", \"#VALUE!\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestInfixPostfix()\r\n        {\r\n            test(\"1 + 1\", \"1 * 2 + 3\", \"100%\", \"A1:A5 1:5\", \"1 < 5\", \"1=1\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestIntersection()\r\n        {\r\n            test(\"A5:A10 B5:E5\", false);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestArrayFormula()\r\n        {\r\n            test(\"{1,1}\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestBrackets()\r\n        {\r\n            test(\"(1)\" , \"((A1:A5))\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestEmptyArgument()\r\n        {\r\n            test(\"SUM()\", \"SUM(1,)\", \"SUM((1))\", \"SUM((A1))\", \"SUM((A1,A1),)\", \"SUM(A1,,A1)\");\r\n        }\r\n\r\n        // From http://homepages.mcs.vuw.ac.nz/~elvis/db/Excel.shtml\r\n        [TestMethod]\r\n        public void TestElvisExamples()\r\n        {\r\n            test(\"1\",\r\n                \"1+1\",\r\n                \"A1\",\r\n                \"$B$2\",\r\n                \"SUM(B5:B15)\",\r\n                \"SUM(B5:B15,D5:D15)\",\r\n                \"SUM(B5:B15 A7:D7)\",\r\n                \"SUM(sheet1!$A$1:$B$2)\",\r\n                \"[1]sheet1!$A$1\",\r\n                \"SUM((A:A 1:1))\",\r\n                \"SUM((A:A,1:1))\",\r\n                \"SUM((A:A A1:B1))\",\r\n                \"SUM((D9:D11,(E9:E11,F9:F11)))\",\r\n                \"=IF(P5=1.0,\\\"NA\\\",IF(P5=2.0,\\\"A\\\",IF(P5=3.0,\\\"B\\\",IF(P5=4.0,\\\"C\\\",IF(P5=5.0,\\\"D\\\",IF(P5=6.0,\\\"E\\\",IF(P5=7.0,\\\"F\\\",IF(P5=8.0,\\\"G\\\"))))))))\",\r\n                \"{=SUM(B2:D2*B3:D3)}\"\r\n            );\r\n        }\r\n\r\n        [TestMethod]\r\n        // Examples I had lying around\r\n        public void TestVarious()\r\n        {\r\n            test(\"0\",\"1\", \"-5\",\r\n              \"0.01\", \"1.03\",\r\n              \"a\", \"abc\",\r\n              \"1 + 1\", \"5 / 8.9 + 9\",\r\n              \"3%\", \"-3\", \"+3\",\r\n              \"SUM(1,5,6,7,8)\",\r\n              \"A1\", \"AZ55\",\r\n              \"$B$9\", \"$B50\",\r\n              \"B15:C99\", \"B$15:$C99\",\r\n              \"E:E\",\r\n              \"5:5\",\r\n              \"Sheet1!A5\",\r\n              \"#REF!\",\r\n              \"(3 + 3) * 5\",\r\n              \"1 * 3 * 5\",\r\n              \"(5 * 5)\",\r\n              \"2 ^ (3 * 4)\",\r\n              \"(+D10-F10)/F10\"\r\n            );\r\n        }\r\n\r\n        [TestMethod]\r\n        public void TestCalcCSVFails()\r\n        {\r\n            test(\"'Data Entry'!G31/('Data Entry'!G29/100)\"\r\n                ,\"(('Data Entry'!G31-IFA!H57)/('Data Entry'!G30/100))-0.86\"\r\n                ,\"ROUND(IF('Data Entry'!G45=\\\"Y\\\",0,IF(OR(D6>4999.999,'Data Entry'!G32<12),0,(1+((5000-D6)*0.000025))*D9)),0)\"\r\n                ,\"ROUND((+'Data Entry'!D39*4)*ROUND('Calc Data'!D12,0),0)\"\r\n                , \"IF('[1]Data Entry'!$F$61=0,'[1]Additional Aid'!$G$26,'[2]Savings Due to $295,000'!$G$37)\"\r\n                , \"IF(E12>G12,E12-G12,0)\"\r\n                , \"LN(E23*E28/E27)-0.5*E31^2\"\r\n                , \"POWER((2*B13*EXP((B13+B5)*0.5*B10))/((B13+B5)*B14+2*B13),2*B5*B6/(B11^2))\"\r\n                ,\"SUM(IF((DelPoint= \\\"hidalgo\\\")*(DType = \\\"pre\\\")*(OFFSET(DelPoint,0,B3+2)>0),OFFSET(DelPoint,0,B3+2),0))\"\r\n                ,\"SUM(IF((DelPoint= \\\"PV\\\")*IF((DType = \\\"firm\\\")+(DType = \\\"econ\\\")>0,1,0)*(OFFSET(DelPoint,0,B3+2)>0),OFFSET(DelPoint,0,B3+2),0))\"\r\n                );\r\n        }\r\n\r\n        private static void test(params string[] formulas)\r\n        {\r\n            test((IEnumerable<string>)formulas);\r\n        }\r\n\r\n        private static void test(IEnumerable<string> formulas)\r\n        {\r\n            foreach (var formula in formulas)\r\n            {\r\n                test(formula);\r\n            }\r\n        }\r\n\r\n        internal static void test(string formula, bool ignorewhitespace = true, ParseTreeNode parsed = null)\r\n        {\r\n            if (parsed == null)\r\n            {\r\n                parsed = ExcelFormulaParser.Parse(formula);\r\n            }\r\n            try\r\n            {\r\n                var printed = parsed.Print();\r\n                if (ignorewhitespace)\r\n                {\r\n                    formula = Regex.Replace(formula, @\"\\s+\", \"\");\r\n                    printed = Regex.Replace(printed, @\"\\s+\", \"\");\r\n                }\r\n                Assert.AreEqual(formula, printed, \"Printed parsed formula differs from original.\\nOriginal: '{0}'\\nPrinted: '{1}'\", formula, printed);\r\n            }\r\n            catch (ArgumentException e)\r\n            {\r\n                Assert.Fail(\"Parse Tree contains a node for which the Print function is not defined.\\n{0}\", e.Message);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/WordsTerminalTests.cs",
    "content": "﻿using System;\r\nusing Irony.Parsing;\r\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\r\n\r\nnamespace XLParser.Tests\r\n{\r\n    [TestClass]\r\n    public class WordsTerminalTests\r\n    {\r\n        [TestMethod]\r\n        public void RecognizesAnyWordFromList()\r\n        {\r\n            var words = new[] { \"PROC\", \"FUNC\" };\r\n            TestTerminalMatching(\"FUNC(1)\", true, words);\r\n            TestTerminalMatching(\"PROC(1)\", true, words);\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RecognizesLongestWord()\r\n        {\r\n            TestTerminalMatching(\"ACOSH(4)\", false, new[] { \"ACOS\", \"ACOSH\" }, t => t == \"ACOSH\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void RecognizeShorterWordIfLongestNotThere()\r\n        {\r\n            TestTerminalMatching(\"ACOS(4)\", false, new[] { \"ACOS\", \"ACOSH\" }, t => t == \"ACOS\");\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CaseSensitiveModeWontMatchWordsDifferingInCase()\r\n        {\r\n            TestTerminalNotMatching(\"FUNC\", true, new[] { \"func\" });\r\n            TestTerminalNotMatching(\"func\", true, new[] { \"FUNC\" });\r\n        }\r\n\r\n        [TestMethod]\r\n        public void CaseInsensitiveModeWillMatchWordsDifferingInCase()\r\n        {\r\n            TestTerminalMatching(\"FUNC\", false, new[] { \"func\" });\r\n            TestTerminalMatching(\"func\", false, new[] { \"FUNC\" });\r\n        }\r\n\r\n        private static void TestTerminalMatching(string input, bool caseSensitive, string[] words, Func<string, bool> checkTerm = null)\r\n        {\r\n            var grammar = new TestGrammar(caseSensitive, new WordsTerminal(\"words\", words));\r\n            var parser = new Parser(grammar);\r\n            var parseTree = parser.Parse(input);\r\n            Assert.AreEqual(ParseTreeStatus.Parsed, parseTree.Status);\r\n            if (checkTerm != null)\r\n                Assert.IsTrue(checkTerm(parseTree.Tokens[0].Text));\r\n        }\r\n\r\n        private static void TestTerminalNotMatching(string input, bool caseSensitive, string[] words)\r\n        {\r\n            var grammar = new TestGrammar(caseSensitive, new WordsTerminal(\"words\", words));\r\n            var parser = new Parser(grammar);\r\n            var parseTree = parser.Parse(input);\r\n            Assert.AreEqual(ParseTreeStatus.Error, parseTree.Status);\r\n        }\r\n\r\n        private class TestGrammar : Grammar\r\n        {\r\n            public TestGrammar(bool caseSensitive, Terminal testedTerminal) : base(caseSensitive)\r\n            {\r\n                Root = new NonTerminal(\"start\")\r\n                {\r\n                    Rule = testedTerminal + new RegexBasedTerminal(\"remainder\", \".*\")\r\n                        | testedTerminal + Eof\r\n                };\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/XLParser.Tests/XLParser.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net462;net8.0</TargetFrameworks>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\signing.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Irony\" Version=\"1.5.3\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.12.0\" />\n    <PackageReference Include=\"MSTest.TestAdapter\" Version=\"3.6.3\" />\n    <PackageReference Include=\"MSTest.TestFramework\" Version=\"3.6.3\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\XLParser\\XLParser.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Service Include=\"{82a7f48d-3b50-4b1e-b82e-3ada8210c358}\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"data\\enron\\formulas.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"data\\enron\\knownfails.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"data\\euses\\formulas.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"data\\euses\\knownfails.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"data\\testformulas\\structured_references.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"data\\testformulas\\user_contributed.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/XLParser.Tests/data/enron/knownfails.txt",
    "content": "SUM(#REF)\n+Ë‰\nIF($A4=\"N/A\",\" \",IF(=1,AG4,AF4))\n#REF+C134\n+#REF+C134\nIF(A71=\"N/A\",\" \",IF(ISERROR(#REF),K59*Include1,#REF))\nIF(A71=\"N/A\",\" \",IF(ISERROR(#REF),L59*Include1,IF(#REF=0,L59*Include1,#REF)))\nF162+F152+F150+F148+#REF+F154+#REF\nIF(A11<,B10,\"\")\nIF(=\"BOLLINGER\",$J755+$AH755,0)\nLN(O1424/#REF)\nZ285+(#REF-#REF)\nIF(=7,AVERAGE(C3:C9),0)\nIF(=7,AVERAGE(C4:C11),0)\nIF(=7,AVERAGE(C13:C19),IF(=14,AVERAGE(C6:C19),0))\nIF(=7,AVERAGE(C29:C35),IF(=14,AVERAGE(C22:C35),IF(=30,AVERAGE(C6:C35),0)))\nIF(=7,AVERAGE(C37:C43),IF(=14,AVERAGE(C30:C43),IF(=30,AVERAGE(C14:C43),IF(=40,AVERAGE(C4:C43),0))))\nIF(A39=\"N/A\",\" \",IF(=TRUE,(IF(MONTH(A39)>=4,IF(MONTH(A39)<=10,VLOOKUP(A39,Gas Curves!B17:O377,13),VLOOKUP(A39,Gas Curves!B17:O377,14)),VLOOKUP(A39,Gas Curves!B17:O377,14))),0))\nIF(A39=\"N/A\",\" \",IF(=TRUE,(IF(MONTH(A39)>=4,IF(MONTH(A39)<=10,VLOOKUP(A39,Gas Curves!B17:O377,13),VLOOKUP(A39,Gas Curves!B17:O377,14)),VLOOKUP(A39,Gas Curves!B17:O377,14))),0))\nIF(=7,AVERAGE(C38:C44),IF(=14,AVERAGE(C31:C44),IF(=30,AVERAGE(C15:C44),IF(=40,AVERAGE(C4:C44),0))))\nIF(=\"BOLLINGER\",$J755-$AH755,0)\n+#REF-#REF\n+#REF\nVLOOKUP(F2,PJM Monthly Summary 2000 08 V.1!$R$6:$S$1411,2,FALSE)\nVLOOKUP(F18,PJM Monthly Summary 2000 08 V.1!$R$20:$S$1359,2,FALSE)\n-NOX, Regi\n-_SO2, Regi"
  },
  {
    "path": "src/XLParser.Tests/data/euses/formulas.txt",
    "content": "\"MIN(Metrics!E$2:E$4499)\"\n\"MIN(Regions!C$2:C$4499)\"\n\"QUARTILE(Metrics!E$2:E$4499,1)\"\n\"QUARTILE(Regions!C$2:C$4499,1)\"\n\"MEDIAN(Metrics!E$2:E$4499)\"\n\"MEDIAN(Regions!C$2:C$4499)\"\n\"AVERAGE(Metrics!E$2:E$4499)\"\n\"AVERAGE(Regions!C$2:C$4499)\"\n\"MODE(Metrics!E$2:E$4499)\"\n\"MODE(Regions!C$2:C$4499)\"\n\"QUARTILE(Metrics!E$2:E$4499,3)\"\n\"QUARTILE(Regions!C$2:C$4499,3)\"\n\"MAX(Metrics!E$2:E$4499)\"\n\"MAX(Regions!C$2:C$4499)\"\n\"SUM(Metrics!E$2:E$4499)\"\n\"SUM(Regions!C$2:C$4499)\"\n\"COUNTIF(Metrics!E$2:E$4499,\"\">0\"\")\"\n\"COUNTIF(Regions!C$2:C$4499,\"\">0\"\")\"\n\"E9/E10\"\n\"COUNTIF(Metrics!C:C,\"\"Yes\"\")\"\n\"COUNTIF(Metrics!D:D,\"\"Yes\"\")\"\n\"COUNTIF(Metrics!C:C,\"\"No\"\")\"\n\"COUNTIF(Metrics!D:D,\"\"No\"\")\"\n\"SUM(D17:F17)\"\n\"COUNTIF(Duplicates!$A:$A,$B17)\"\n\"COUNTIF(Bad!$A:$A,$B17)\"\n\"COUNTIF(Metrics!$A:$A,$B17)\"\n\"SUM(C17:C27)\"\n\"PRODUCT(C4:C14)\"\n\"20*10\"\n\"AVERAGE(B4:B10)\"\n\"AVERAGE(B7:D7)\"\n\"SUM(B7:E7)\"\n\"SUM(B7:B13)\"\n\"SUM(D7:D12)\"\n\"MAX(B7:B12)\"\n\"(F7+G7)*B19\"\n\"SUM(B6:E6)\"\n\"MAX(B6-40,0)\"\n\"AVERAGE(B7:D7)\"\n\"SUM(B7:D7)\"\n\"MAX(B9-40,0)+MAX(C9-40,0)+MAX(D9-40,0)\"\n\"SUM(B6:B11)\"\n\"(F6+G6)*B17\"\n\"(C17-D17)\"\n\"(C18*0.15)\"\n\"AVERAGE(B3:D3)\"\n\"SUM(B3:E3)\"\n\"MAX(B3-40,0)+MAX(C3-40,0)+MAX(D3-40,0)+MAX(E4-40,0)\"\n\"MAX(B8-40,0)+MAX(C8-40,0)+MAX(D8-40,0)+MAX(E10-40,0)\"\n\"SUM(B3:B8)\"\n\"MAX(B3:B8)\"\n\"(F3+G3)*B15\"\n\"SUM(B12:B15)\"\n\"SUM(B12:B15)\"\n\"SUM(B7*D7)\"\n\"SUM(C7*C16)\"\n\"SUM(E7+F7)\"\n\"SUM(C8*0.05)\"\n\"MAX(B7:B13)\"\n\"SUM(B7:B13)\"\n\"B4*D4\"\n\"C4*0.05\"\n\"E4+F4\"\n\"SUM(B4:B11)\"\n\"AVERAGE(B4:B10)\"\n\"SUM(E4:F4)\"\n\"MAX(B4:B10)\"\n\"AVERAGE(B4:B10)\"\n\"((G3/C3)-1)*100\"\n\"C3+I3\"\n\"C3+(I3*0.5)\"\n\"O3+AM3\"\n\"BW3-CC3\"\n\"(BW3/(CO3*1000))*100\"\n\"(CI3/(CO3*1000))*100\"\n\"(EX3/50)/EQ3\"\n\"((FL3/FI3)-1)*100\"\n\"FC3/EW3*100\"\n\"SUM(C3:C49)\"\n\"FC50/EW52*100\"\n\"SUM(DG3:DG49)-DG16\"\n\"SUM(DK3:DK49)\"\n\"SUM(DM3:DM49)-DM5-DM11-DM16\"\n\"SUMIF(FC3:FC49,\"\">=0\"\",EW3:EW49)\"\n\"((G54/E54)-1)*100\"\n\"((G3/C3)-1)*100\"\n\"(P3/J3)*100\"\n\"SUM(C3:C49)\"\n\"((G52/E52)-1)*100\"\n\"SUM(C3:N3)\"\n\"SUM(C3:C49)\"\n\"SUM(C3:C49)\"\n\"集計01!CI3\"\n\"(G3/C3-1)*100\"\n\"((M3/I3)-1)*100\"\n\"(C3/(I3*1000))*100\"\n\"((G6/C6-1)*100)\"\n\"集計01!CI3\"\n\"H3/C3\"\n\"I3*1000/D3\"\n\"(Q3/M3-1)*100\"\n\"SUM(D3:D49)\"\n\"H3/C3\"\n\"I3*1000/D3\"\n\"(Q3/M3-1)*100\"\n\"SUM(D3:D49)\"\n\"集計01!BE3\"\n\"C3*1000/H3\"\n\"D3/I3\"\n\"(Q3/M3-1)*100\"\n\"SUM(D3:D49)\"\n\"集計01!EQ3\"\n\"C3*1000/H3\"\n\"D3/I3\"\n\"(Q3/M3-1)*100\"\n\"SUM(D3:D49)\"\n\"集計01!BJ3\"\n\"集計01!CN3\"\n\"集計01!DF3\"\n\"集計01!EV3\"\n\"集計02!H3\"\n\"集計02!AA3\"\n\"SUM(H3:M3)\"\n\"RANK(N3,$N$3:$N$49,0)\"\n\"RANK(P3,$P$3:$P$49,0)\"\n\"SUM(B3:G3)\"\n\"RANK(H3,$H$3:$H$49,0)\"\n\"RANK(J3,$J$3:$J$49,0)\"\n\"((G3/C3)-1)*100\"\n\"C3+I3\"\n\"C3+(I3*0.5)\"\n\"O3+AM3\"\n\"BW3-CC3\"\n\"(BW3/(CO3*1000))*100\"\n\"(CI3/(CO3*1000))*100\"\n\"(EX3/50)/EQ3\"\n\"((FL3/FI3)-1)*100\"\n\"FC3/EW3*100\"\n\"SUM(C3:C49)\"\n\"FC50/EW52*100\"\n\"SUMIF(FC3:FC49,\"\">=0\"\",EW3:EW49)\"\n\"((G3/C3)-1)*100\"\n\"(P3/J3)*100\"\n\"SUM(C3:C49)\"\n\"SUM(C3:C49)\"\n\"集計01!T3\"\n\"集計01!AR3\"\n\"集計01!BD3\"\n\"集計01!Z3\"\n\"集計01!AX3\"\n\"集計01!BJ3\"\n\"集計01!CB3\"\n\"集計01!CN3\"\n\"集計01!CZ3\"\n\"集計01!DF3\"\n\"集計01!DL3\"\n\"集計01!DX3\"\n\"集計01!ED3\"\n\"集計01!EJ3\"\n\"集計01!EP3\"\n\"集計01!EV3\"\n\"集計01!FB3\"\n\"集計01!FH3\"\n\"集計01!FM3\"\n\"集計01!FS3\"\n\"集計02!H3\"\n\"集計02!AA3\"\n\"集計02!AG3\"\n\"集計01!CI3\"\n\"(G3/C3-1)*100\"\n\"((M3/I3)-1)*100\"\n\"(C3/(I3*1000))*100\"\n\"((G6/C6-1)*100)\"\n\"集計01!CI3\"\n\"G3/C3\"\n\"I3*1000/E3\"\n\"K3/F3\"\n\"(P3/L3-1)*100\"\n\"SUM(E3:E49)\"\n\"集計01!BE3\"\n\"C3*1000/G3\"\n\"E3/I3\"\n\"F3*1000/K3\"\n\"(P3/L3-1)*100\"\n\"SUM(E3:E49)\"\n\"集計01!EQ3\"\n\"C3*1000/G3\"\n\"E3/I3\"\n\"F3*1000/K3\"\n\"(P3/L3-1)*100\"\n\"SUM(E3:E49)\"\n\"集計01!BJ3\"\n\"集計01!CN3\"\n\"集計01!DF3\"\n\"集計01!EV3\"\n\"集計02!H3\"\n\"集計02!AA3\"\n\"SUM(H3:M3)\"\n\"RANK(N3,$N$3:$N$49,0)\"\n\"RANK(P3,$P$3:$P$49,0)\"\n\"SUM(B2:G2)\"\n\"RANK(H2,$H$2:$H$48,0)\"\n\"RANK(J2,$J$2:$J$48,0)\"\n\"SUM(E9:E18)\"\n\"SUM(D18,D20,D22,D24)\"\n\"SUM(D18,D20,D22,D24)\"\n\"PRODUCT(D26,0.166)\"\n\"PRODUCT(D26,0.166)\"\n\"SUM(D26,D28)\"\n\"SUM(D26,D28)\"\n\"SUM(D30,D32,D34)\"\n\"SUM(D30,D32,D34)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(E20,E22,E24,E26)\"\n\"SUM(E20,E22,E24,E26)\"\n\"PRODUCT(E28,0.166)\"\n\"PRODUCT(E28,0.166)\"\n\"SUM(E28,E30)\"\n\"SUM(E28,E30)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(E20,E22,E24,E26)\"\n\"SUM(E20,E22,E24,E26)\"\n\"PRODUCT(E28,0.166)\"\n\"PRODUCT(E28,0.166)\"\n\"SUM(E28,E30)\"\n\"SUM(E28,E30)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(E20,E22,E24,E26)\"\n\"SUM(E20,E22,E24,E26)\"\n\"PRODUCT(E28,0.166)\"\n\"PRODUCT(E28,0.166)\"\n\"SUM(E28,E30)\"\n\"SUM(E28,E30)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(E32,E34,E36)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D20,D22,D24,D26)\"\n\"SUM(D20,D22,D24,D26)\"\n\"PRODUCT(D28,0.166)\"\n\"PRODUCT(D28,0.166)\"\n\"SUM(D28,D30)\"\n\"SUM(D28,D30)\"\n\"SUM(D32,D34,D36)\"\n\"SUM(D32,D34,D36)\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"592101500!D9+572103200!D9+522100200!D9+522100300!D9+592102100!D9+571260000!D9+592102400!D9+521109000!D9\"\n\"592101500!D11+572103200!D11+522100200!D11+522100300!D11+592102100!D11+571260000!D11+571260100!D11+592102400!D11+592102500!D11+521109000!D11\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 4 Actual'!B3\"\n\"'Form 2 '!$B$12\"\n\"'Form 4 Actual'!D9*1.1\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 4 Actual'!C17\"\n\"'Form 3 Estimated'!C17\"\n\"'Form 4 Actual'!D17\"\n\"'Form 3 Estimated'!D17\"\n\"'Form 4 Actual'!E17\"\n\"'Form 3 Estimated'!E17\"\n\"'Form 4 Actual'!F17\"\n\"'Form 3 Estimated'!F17\"\n\"SUM(B9:B12)\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C10:C17)\"\n\"SUM(C23:F23)\"\n\"SUM(C23:C24)\"\n\"IF(C10>C28*$A$32,$A$34,IF(C10<C28*$A$33,$A$35,$A$36))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'2002-03 Estimated'!B4\"\n\"'Form 2 '!$B$12\"\n\"SUM(C10:C17)\"\n\"SUM(C23:F23)\"\n\"SUM(C23:C24)\"\n\"IF(C10>C28*$A$32,$A$34,IF(C10<C28*$A$33,$A$35,$A$36))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"'Form 2 '!$B$7\"\n\"'Form 2 '!$B$6\"\n\"'Form 2 '!$B$12\"\n\"SUM(C9:C16)\"\n\"SUM(C22:F22)\"\n\"SUM(C22:C23)\"\n\"IF(C9>C27*$A$31,$A$33,IF(C9<C27*$A$32,$A$34,$A$35))\"\n\"A4+0.01\"\n\"A6+0.01\"\n\"A27+0.01\"\n\"A4+0.01\"\n\"A5+0.01\"\n\"A4+0.01\"\n\"A4+0.01\"\n\"A4+0.01\"\n\"A4+0.01\"\n\"7.01\"\n\"A4+0.01\"\n\"A4+0.01\"\n\"A4+0.01\"\n\"A3+0.01\"\n\"SUM(DJ3:HO3)\"\n\"B3*IF(D3=\"\"H\"\",3,IF(D3=\"\"M\"\",2,IF(D3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(G3=\"\"H\"\",3,IF(G3=\"\"M\"\",2,IF(G3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(J3=\"\"H\"\",3,IF(J3=\"\"M\"\",2,IF(J3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(L3=\"\"H\"\",3,IF(L3=\"\"M\"\",2,IF(L3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(M3=\"\"H\"\",3,IF(M3=\"\"M\"\",2,IF(M3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(N3=\"\"H\"\",3,IF(N3=\"\"M\"\",2,IF(N3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(O3=\"\"H\"\",3,IF(O3=\"\"M\"\",2,IF(O3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(P3=\"\"H\"\",3,IF(P3=\"\"M\"\",2,IF(P3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(Q3=\"\"H\"\",3,IF(Q3=\"\"M\"\",2,IF(Q3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(R3=\"\"H\"\",3,IF(R3=\"\"M\"\",2,IF(R3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(S3=\"\"H\"\",3,IF(S3=\"\"M\"\",2,IF(S3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(T3=\"\"H\"\",3,IF(T3=\"\"M\"\",2,IF(T3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(U3=\"\"H\"\",3,IF(U3=\"\"M\"\",2,IF(U3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(V3=\"\"H\"\",3,IF(V3=\"\"M\"\",2,IF(V3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(W3=\"\"H\"\",3,IF(W3=\"\"M\"\",2,IF(W3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(X3=\"\"H\"\",3,IF(X3=\"\"M\"\",2,IF(X3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(Y3=\"\"H\"\",3,IF(Y3=\"\"M\"\",2,IF(Y3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AA3=\"\"H\"\",3,IF(AA3=\"\"M\"\",2,IF(AA3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AB3=\"\"H\"\",3,IF(AB3=\"\"M\"\",2,IF(AB3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AD3=\"\"H\"\",3,IF(AD3=\"\"M\"\",2,IF(AD3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AE3=\"\"H\"\",3,IF(AE3=\"\"M\"\",2,IF(AE3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AF3=\"\"H\"\",3,IF(AF3=\"\"M\"\",2,IF(AF3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AG3=\"\"H\"\",3,IF(AG3=\"\"M\"\",2,IF(AG3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AH3=\"\"H\"\",3,IF(AH3=\"\"M\"\",2,IF(AH3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AI3=\"\"H\"\",3,IF(AI3=\"\"M\"\",2,IF(AI3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AJ3=\"\"H\"\",3,IF(AJ3=\"\"M\"\",2,IF(AJ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AK3=\"\"H\"\",3,IF(AK3=\"\"M\"\",2,IF(AK3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AL3=\"\"H\"\",3,IF(AL3=\"\"M\"\",2,IF(AL3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AM3=\"\"H\"\",3,IF(AM3=\"\"M\"\",2,IF(AM3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AN3=\"\"H\"\",3,IF(AN3=\"\"M\"\",2,IF(AN3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AO3=\"\"H\"\",3,IF(AO3=\"\"M\"\",2,IF(AO3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AP3=\"\"H\"\",3,IF(AP3=\"\"M\"\",2,IF(AP3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AQ3=\"\"H\"\",3,IF(AQ3=\"\"M\"\",2,IF(AQ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AR3=\"\"H\"\",3,IF(AR3=\"\"M\"\",2,IF(AR3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AS3=\"\"H\"\",3,IF(AS3=\"\"M\"\",2,IF(AS3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AT3=\"\"H\"\",3,IF(AT3=\"\"M\"\",2,IF(AT3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AU3=\"\"H\"\",3,IF(AU3=\"\"M\"\",2,IF(AU3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AV3=\"\"H\"\",3,IF(AV3=\"\"M\"\",2,IF(AV3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AW3=\"\"H\"\",3,IF(AW3=\"\"M\"\",2,IF(AW3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AY3=\"\"H\"\",3,IF(AY3=\"\"M\"\",2,IF(AY3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(AZ3=\"\"H\"\",3,IF(AZ3=\"\"M\"\",2,IF(AZ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BA3=\"\"H\"\",3,IF(BA3=\"\"M\"\",2,IF(BA3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BB3=\"\"H\"\",3,IF(BB3=\"\"M\"\",2,IF(BB3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BC3=\"\"H\"\",3,IF(BC3=\"\"M\"\",2,IF(BC3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BE3=\"\"H\"\",3,IF(BE3=\"\"M\"\",2,IF(BE3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BF3=\"\"H\"\",3,IF(BF3=\"\"M\"\",2,IF(BF3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BG3=\"\"H\"\",3,IF(BG3=\"\"M\"\",2,IF(BG3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BH3=\"\"H\"\",3,IF(BH3=\"\"M\"\",2,IF(BH3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BI3=\"\"H\"\",3,IF(BI3=\"\"M\"\",2,IF(BI3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BJ3=\"\"H\"\",3,IF(BJ3=\"\"M\"\",2,IF(BJ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BK3=\"\"H\"\",3,IF(BK3=\"\"M\"\",2,IF(BK3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BL3=\"\"H\"\",3,IF(BL3=\"\"M\"\",2,IF(BL3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BM3=\"\"H\"\",3,IF(BM3=\"\"M\"\",2,IF(BM3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BN3=\"\"H\"\",3,IF(BN3=\"\"M\"\",2,IF(BN3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BP3=\"\"H\"\",3,IF(BP3=\"\"M\"\",2,IF(BP3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BR3=\"\"H\"\",3,IF(BR3=\"\"M\"\",2,IF(BR3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BV3=\"\"H\"\",3,IF(BV3=\"\"M\"\",2,IF(BV3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(BW3=\"\"H\"\",3,IF(BW3=\"\"M\"\",2,IF(BW3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CA3=\"\"H\"\",3,IF(CA3=\"\"M\"\",2,IF(CA3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CB3=\"\"H\"\",3,IF(CB3=\"\"M\"\",2,IF(CB3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CJ3=\"\"H\"\",3,IF(CJ3=\"\"M\"\",2,IF(CJ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CK3=\"\"H\"\",3,IF(CK3=\"\"M\"\",2,IF(CK3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CL3=\"\"H\"\",3,IF(CL3=\"\"M\"\",2,IF(CL3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CO3=\"\"H\"\",3,IF(CO3=\"\"M\"\",2,IF(CO3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CP3=\"\"H\"\",3,IF(CP3=\"\"M\"\",2,IF(CP3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CQ3=\"\"H\"\",3,IF(CQ3=\"\"M\"\",2,IF(CQ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CS3=\"\"H\"\",3,IF(CS3=\"\"M\"\",2,IF(CS3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CT3=\"\"H\"\",3,IF(CT3=\"\"M\"\",2,IF(CT3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CU3=\"\"H\"\",3,IF(CU3=\"\"M\"\",2,IF(CU3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CV3=\"\"H\"\",3,IF(CV3=\"\"M\"\",2,IF(CV3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CW3=\"\"H\"\",3,IF(CW3=\"\"M\"\",2,IF(CW3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CX3=\"\"H\"\",3,IF(CX3=\"\"M\"\",2,IF(CX3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CY3=\"\"H\"\",3,IF(CY3=\"\"M\"\",2,IF(CY3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(CZ3=\"\"H\"\",3,IF(CZ3=\"\"M\"\",2,IF(CZ3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DA3=\"\"H\"\",3,IF(DA3=\"\"M\"\",2,IF(DA3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DB3=\"\"H\"\",3,IF(DB3=\"\"M\"\",2,IF(DB3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DD3=\"\"H\"\",3,IF(DD3=\"\"M\"\",2,IF(DD3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DF3=\"\"H\"\",3,IF(DF3=\"\"M\"\",2,IF(DF3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DG3=\"\"H\"\",3,IF(DG3=\"\"M\"\",2,IF(DG3=\"\"L\"\",1,\"\" \"\")))\"\n\"B3*IF(DH3=\"\"H\"\",3,IF(DH3=\"\"M\"\",2,IF(DH3=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(C4=\"\"H\"\",3,IF(C4=\"\"M\"\",2,IF(C4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(H4=\"\"H\"\",3,IF(H4=\"\"M\"\",2,IF(H4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(AC4=\"\"H\"\",3,IF(AC4=\"\"M\"\",2,IF(AC4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BO4=\"\"H\"\",3,IF(BO4=\"\"M\"\",2,IF(BO4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BQ4=\"\"H\"\",3,IF(BQ4=\"\"M\"\",2,IF(BQ4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BS4=\"\"H\"\",3,IF(BS4=\"\"M\"\",2,IF(BS4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BT4=\"\"H\"\",3,IF(BT4=\"\"M\"\",2,IF(BT4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BU4=\"\"H\"\",3,IF(BU4=\"\"M\"\",2,IF(BU4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BX4=\"\"H\"\",3,IF(BX4=\"\"M\"\",2,IF(BX4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BY4=\"\"H\"\",3,IF(BY4=\"\"M\"\",2,IF(BY4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(BZ4=\"\"H\"\",3,IF(BZ4=\"\"M\"\",2,IF(BZ4=\"\"L\"\",1,\"\" \"\")))\"\n\"B4*IF(CC4=\"\"H\"\",3,IF(CC4=\"\"M\"\",2,IF(CC4=\"\"L\"\",1,\"\" \"\")))\"\n\"B5*IF(F5=\"\"H\"\",3,IF(F5=\"\"M\"\",2,IF(F5=\"\"L\"\",1,\"\" \"\")))\"\n\"B5*IF(K5=\"\"H\"\",3,IF(K5=\"\"M\"\",2,IF(K5=\"\"L\"\",1,\"\" \"\")))\"\n\"B5*IF(AX5=\"\"H\"\",3,IF(AX5=\"\"M\"\",2,IF(AX5=\"\"L\"\",1,\"\" \"\")))\"\n\"B5*IF(BD5=\"\"H\"\",3,IF(BD5=\"\"M\"\",2,IF(BD5=\"\"L\"\",1,\"\" \"\")))\"\n\"B5*IF(CN5=\"\"H\"\",3,IF(CN5=\"\"M\"\",2,IF(CN5=\"\"L\"\",1,\"\" \"\")))\"\n\"B6*IF(CH6=\"\"H\"\",3,IF(CH6=\"\"M\"\",2,IF(CH6=\"\"L\"\",1,\"\" \"\")))\"\n\"B6*IF(CI6=\"\"H\"\",3,IF(CI6=\"\"M\"\",2,IF(CI6=\"\"L\"\",1,\"\" \"\")))\"\n\"B6*IF(CR6=\"\"H\"\",3,IF(CR6=\"\"M\"\",2,IF(CR6=\"\"L\"\",1,\"\" \"\")))\"\n\"B7*IF(DC7=\"\"H\"\",3,IF(DC7=\"\"M\"\",2,IF(DC7=\"\"L\"\",1,\"\" \"\")))\"\n\"B7*IF(DE7=\"\"H\"\",3,IF(DE7=\"\"M\"\",2,IF(DE7=\"\"L\"\",1,\"\" \"\")))\"\n\"B11*IF(CE11=\"\"H\"\",3,IF(CE11=\"\"M\"\",2,IF(CE11=\"\"L\"\",1,\"\" \"\")))\"\n\"B11*IF(CF11=\"\"H\"\",3,IF(CF11=\"\"M\"\",2,IF(CF11=\"\"L\"\",1,\"\" \"\")))\"\n\"B11*IF(CG11=\"\"H\"\",3,IF(CG11=\"\"M\"\",2,IF(CG11=\"\"L\"\",1,\"\" \"\")))\"\n\"B11*IF(CM11=\"\"H\"\",3,IF(CM11=\"\"M\"\",2,IF(CM11=\"\"L\"\",1,\"\" \"\")))\"\n\"B12*IF(E12=\"\"H\"\",3,IF(E12=\"\"M\"\",2,IF(E12=\"\"L\"\",1,\"\" \"\")))\"\n\"B14*IF(I14=\"\"H\"\",3,IF(I14=\"\"M\"\",2,IF(I14=\"\"L\"\",1,\"\" \"\")))\"\n\"B14*IF(Z14=\"\"H\"\",3,IF(Z14=\"\"M\"\",2,IF(Z14=\"\"L\"\",1,\"\" \"\")))\"\n\"B15*IF(CD15=\"\"H\"\",3,IF(CD15=\"\"M\"\",2,IF(CD15=\"\"L\"\",1,\"\" \"\")))\"\n\"DJ17\"\n\"SUM(DJ3:DJ16)\"\n\"Matrix!C2\"\n\"Matrix!DJ17\"\n\"+(100-C3)\"\n\"+B3*(D3/100)\"\n\"Matrix!D2\"\n\"Matrix!DK17\"\n\"Matrix!E2\"\n\"Matrix!DL17\"\n\"Matrix!F2\"\n\"Matrix!DM17\"\n\"Matrix!G2\"\n\"Matrix!DN17\"\n\"Matrix!H2\"\n\"Matrix!DO17\"\n\"Matrix!I2\"\n\"Matrix!DP17\"\n\"Matrix!J2\"\n\"Matrix!DQ17\"\n\"Matrix!K2\"\n\"Matrix!DR17\"\n\"Matrix!L2\"\n\"Matrix!DS17\"\n\"Matrix!M2\"\n\"Matrix!DT17\"\n\"Matrix!N2\"\n\"Matrix!DU17\"\n\"Matrix!O2\"\n\"Matrix!DV17\"\n\"Matrix!P2\"\n\"Matrix!DW17\"\n\"Matrix!Q2\"\n\"Matrix!DX17\"\n\"Matrix!R2\"\n\"Matrix!DY17\"\n\"Matrix!S2\"\n\"Matrix!DZ17\"\n\"Matrix!T2\"\n\"Matrix!EA17\"\n\"Matrix!U2\"\n\"Matrix!EB17\"\n\"Matrix!V2\"\n\"Matrix!EC17\"\n\"Matrix!W2\"\n\"Matrix!ED17\"\n\"Matrix!X2\"\n\"Matrix!EE17\"\n\"Matrix!Y2\"\n\"Matrix!EF17\"\n\"Matrix!Z2\"\n\"Matrix!EG17\"\n\"Matrix!AA2\"\n\"Matrix!EH17\"\n\"Matrix!AB2\"\n\"Matrix!EI17\"\n\"Matrix!AC2\"\n\"Matrix!EJ17\"\n\"Matrix!AD2\"\n\"Matrix!EK17\"\n\"Matrix!AE2\"\n\"Matrix!EL17\"\n\"Matrix!AF2\"\n\"Matrix!EM17\"\n\"Matrix!AG2\"\n\"Matrix!EN17\"\n\"Matrix!AH2\"\n\"Matrix!EO17\"\n\"Matrix!AI2\"\n\"Matrix!EP17\"\n\"Matrix!AJ2\"\n\"Matrix!EQ17\"\n\"Matrix!AK2\"\n\"Matrix!ER17\"\n\"Matrix!AL2\"\n\"Matrix!ES17\"\n\"Matrix!AM2\"\n\"Matrix!ET17\"\n\"Matrix!AN2\"\n\"Matrix!EU17\"\n\"Matrix!AO2\"\n\"Matrix!EV17\"\n\"Matrix!AP2\"\n\"Matrix!EW17\"\n\"Matrix!AQ2\"\n\"Matrix!EX17\"\n\"Matrix!AR2\"\n\"Matrix!EY17\"\n\"Matrix!AS2\"\n\"Matrix!EZ17\"\n\"Matrix!AT2\"\n\"Matrix!FA17\"\n\"Matrix!AU2\"\n\"Matrix!FB17\"\n\"Matrix!AV2\"\n\"Matrix!FC17\"\n\"Matrix!AW2\"\n\"Matrix!FD17\"\n\"Matrix!AX2\"\n\"Matrix!FE17\"\n\"Matrix!AY2\"\n\"Matrix!FF17\"\n\"Matrix!AZ2\"\n\"Matrix!FG17\"\n\"Matrix!BA2\"\n\"Matrix!FH17\"\n\"Matrix!BB2\"\n\"Matrix!FI17\"\n\"Matrix!BC2\"\n\"Matrix!FJ17\"\n\"Matrix!BD2\"\n\"Matrix!FK17\"\n\"Matrix!BE2\"\n\"Matrix!FL17\"\n\"Matrix!BF2\"\n\"Matrix!FM17\"\n\"Matrix!BG2\"\n\"Matrix!FN17\"\n\"Matrix!BH2\"\n\"Matrix!FO17\"\n\"Matrix!BI2\"\n\"Matrix!FP17\"\n\"Matrix!BJ2\"\n\"Matrix!FQ17\"\n\"Matrix!BK2\"\n\"Matrix!FR17\"\n\"Matrix!BL2\"\n\"Matrix!FS17\"\n\"Matrix!BM2\"\n\"Matrix!FT17\"\n\"Matrix!BN2\"\n\"Matrix!FU17\"\n\"Matrix!BO2\"\n\"Matrix!FV17\"\n\"Matrix!BP2\"\n\"Matrix!FW17\"\n\"Matrix!BQ2\"\n\"Matrix!FX17\"\n\"Matrix!BR2\"\n\"Matrix!FY17\"\n\"Matrix!BS2\"\n\"Matrix!FZ17\"\n\"Matrix!BT2\"\n\"Matrix!GA17\"\n\"Matrix!BU2\"\n\"Matrix!GB17\"\n\"Matrix!BV2\"\n\"Matrix!GC17\"\n\"Matrix!BW2\"\n\"Matrix!GD17\"\n\"Matrix!BX2\"\n\"Matrix!GE17\"\n\"Matrix!BY2\"\n\"Matrix!GF17\"\n\"Matrix!BZ2\"\n\"Matrix!GG17\"\n\"Matrix!CA2\"\n\"Matrix!GH17\"\n\"Matrix!CB2\"\n\"Matrix!GI17\"\n\"Matrix!CC2\"\n\"Matrix!GJ17\"\n\"Matrix!CD2\"\n\"Matrix!GK17\"\n\"Matrix!CE2\"\n\"Matrix!GL17\"\n\"Matrix!CF2\"\n\"Matrix!GM17\"\n\"Matrix!CG2\"\n\"Matrix!GN17\"\n\"Matrix!CH2\"\n\"Matrix!GO17\"\n\"Matrix!CI2\"\n\"Matrix!GP17\"\n\"Matrix!CJ2\"\n\"Matrix!GQ17\"\n\"Matrix!CK2\"\n\"Matrix!GR17\"\n\"Matrix!CL2\"\n\"Matrix!GS17\"\n\"Matrix!CM2\"\n\"Matrix!GT17\"\n\"Matrix!CN2\"\n\"Matrix!GU17\"\n\"Matrix!CO2\"\n\"Matrix!GV17\"\n\"Matrix!CP2\"\n\"Matrix!GW17\"\n\"Matrix!CQ2\"\n\"Matrix!GX17\"\n\"Matrix!CR2\"\n\"Matrix!GY17\"\n\"Matrix!CS2\"\n\"Matrix!GZ17\"\n\"Matrix!CT2\"\n\"Matrix!HA17\"\n\"Matrix!CU2\"\n\"Matrix!HB17\"\n\"Matrix!CV2\"\n\"Matrix!HC17\"\n\"Matrix!CW2\"\n\"Matrix!HD17\"\n\"Matrix!CX2\"\n\"Matrix!HE17\"\n\"Matrix!CY2\"\n\"Matrix!HF17\"\n\"Matrix!CZ2\"\n\"Matrix!HG17\"\n\"Matrix!DA2\"\n\"Matrix!HH17\"\n\"Matrix!DB2\"\n\"Matrix!HI17\"\n\"Matrix!DC2\"\n\"Matrix!HJ17\"\n\"Matrix!DD2\"\n\"Matrix!HK17\"\n\"Matrix!DE2\"\n\"Matrix!HL17\"\n\"Matrix!DF2\"\n\"Matrix!HM17\"\n\"Matrix!DG2\"\n\"Matrix!HN17\"\n\"Matrix!DH2\"\n\"Matrix!HO17\"\n\"MEDIAN(B3:B112)\"\n\"AVERAGE(B3:B112)\"\n\"Matrix!C2\"\n\"Matrix!DJ17\"\n\"+(100-C3)\"\n\"+B3*(D3/100)\"\n\"Matrix!D2\"\n\"Matrix!DK17\"\n\"Matrix!E2\"\n\"Matrix!DL17\"\n\"Matrix!F2\"\n\"Matrix!DM17\"\n\"Matrix!G2\"\n\"Matrix!DN17\"\n\"Matrix!H2\"\n\"Matrix!DO17\"\n\"Matrix!I2\"\n\"Matrix!DP17\"\n\"Matrix!J2\"\n\"Matrix!DQ17\"\n\"Matrix!K2\"\n\"Matrix!DR17\"\n\"Matrix!L2\"\n\"Matrix!DS17\"\n\"Matrix!M2\"\n\"Matrix!DT17\"\n\"Matrix!N2\"\n\"Matrix!DU17\"\n\"Matrix!O2\"\n\"Matrix!DV17\"\n\"Matrix!P2\"\n\"Matrix!DW17\"\n\"Matrix!Q2\"\n\"Matrix!DX17\"\n\"Matrix!R2\"\n\"Matrix!DY17\"\n\"Matrix!S2\"\n\"Matrix!DZ17\"\n\"Matrix!T2\"\n\"Matrix!EA17\"\n\"Matrix!U2\"\n\"Matrix!EB17\"\n\"Matrix!V2\"\n\"Matrix!EC17\"\n\"Matrix!W2\"\n\"Matrix!ED17\"\n\"Matrix!X2\"\n\"Matrix!EE17\"\n\"Matrix!Y2\"\n\"Matrix!EF17\"\n\"Matrix!Z2\"\n\"Matrix!EG17\"\n\"Matrix!AA2\"\n\"Matrix!EH17\"\n\"Matrix!AB2\"\n\"Matrix!EI17\"\n\"Matrix!AC2\"\n\"Matrix!EJ17\"\n\"Matrix!AD2\"\n\"Matrix!EK17\"\n\"Matrix!AE2\"\n\"Matrix!EL17\"\n\"Matrix!AF2\"\n\"Matrix!EM17\"\n\"Matrix!AG2\"\n\"Matrix!EN17\"\n\"Matrix!AH2\"\n\"Matrix!EO17\"\n\"Matrix!AI2\"\n\"Matrix!EP17\"\n\"Matrix!AJ2\"\n\"Matrix!EQ17\"\n\"Matrix!AK2\"\n\"Matrix!ER17\"\n\"Matrix!AL2\"\n\"Matrix!ES17\"\n\"Matrix!AM2\"\n\"Matrix!ET17\"\n\"Matrix!AN2\"\n\"Matrix!EU17\"\n\"Matrix!AO2\"\n\"Matrix!EV17\"\n\"Matrix!AP2\"\n\"Matrix!EW17\"\n\"Matrix!AQ2\"\n\"Matrix!EX17\"\n\"Matrix!AR2\"\n\"Matrix!EY17\"\n\"Matrix!AS2\"\n\"Matrix!EZ17\"\n\"Matrix!AT2\"\n\"Matrix!FA17\"\n\"Matrix!AU2\"\n\"Matrix!FB17\"\n\"Matrix!AV2\"\n\"Matrix!FC17\"\n\"Matrix!AW2\"\n\"Matrix!FD17\"\n\"Matrix!AX2\"\n\"Matrix!FE17\"\n\"Matrix!AY2\"\n\"Matrix!FF17\"\n\"Matrix!AZ2\"\n\"Matrix!FG17\"\n\"Matrix!BA2\"\n\"Matrix!FH17\"\n\"Matrix!BB2\"\n\"Matrix!FI17\"\n\"Matrix!BC2\"\n\"Matrix!FJ17\"\n\"Matrix!BD2\"\n\"Matrix!FK17\"\n\"Matrix!BE2\"\n\"Matrix!FL17\"\n\"Matrix!BF2\"\n\"Matrix!FM17\"\n\"Matrix!BG2\"\n\"Matrix!FN17\"\n\"Matrix!BH2\"\n\"Matrix!FO17\"\n\"Matrix!BI2\"\n\"Matrix!FP17\"\n\"Matrix!BJ2\"\n\"Matrix!FQ17\"\n\"Matrix!BK2\"\n\"Matrix!FR17\"\n\"Matrix!BL2\"\n\"Matrix!FS17\"\n\"Matrix!BM2\"\n\"Matrix!FT17\"\n\"Matrix!BN2\"\n\"Matrix!FU17\"\n\"Matrix!BO2\"\n\"Matrix!FV17\"\n\"Matrix!BP2\"\n\"Matrix!FW17\"\n\"Matrix!BQ2\"\n\"Matrix!FX17\"\n\"Matrix!BR2\"\n\"Matrix!FY17\"\n\"Matrix!BS2\"\n\"Matrix!FZ17\"\n\"Matrix!BT2\"\n\"Matrix!GA17\"\n\"Matrix!BU2\"\n\"Matrix!GB17\"\n\"Matrix!BV2\"\n\"Matrix!GC17\"\n\"Matrix!BW2\"\n\"Matrix!GD17\"\n\"Matrix!BX2\"\n\"Matrix!GE17\"\n\"Matrix!BY2\"\n\"Matrix!GF17\"\n\"Matrix!BZ2\"\n\"Matrix!GG17\"\n\"Matrix!CA2\"\n\"Matrix!GH17\"\n\"Matrix!CB2\"\n\"Matrix!GI17\"\n\"Matrix!CC2\"\n\"Matrix!GJ17\"\n\"Matrix!CD2\"\n\"Matrix!GK17\"\n\"Matrix!CE2\"\n\"Matrix!GL17\"\n\"Matrix!CF2\"\n\"Matrix!GM17\"\n\"Matrix!CG2\"\n\"Matrix!GN17\"\n\"Matrix!CH2\"\n\"Matrix!GO17\"\n\"Matrix!CI2\"\n\"Matrix!GP17\"\n\"Matrix!CJ2\"\n\"Matrix!GQ17\"\n\"Matrix!CK2\"\n\"Matrix!GR17\"\n\"Matrix!CL2\"\n\"Matrix!GS17\"\n\"Matrix!CM2\"\n\"Matrix!GT17\"\n\"Matrix!CN2\"\n\"Matrix!GU17\"\n\"Matrix!CO2\"\n\"Matrix!GV17\"\n\"Matrix!CP2\"\n\"Matrix!GW17\"\n\"Matrix!CQ2\"\n\"Matrix!GX17\"\n\"Matrix!CR2\"\n\"Matrix!GY17\"\n\"Matrix!CS2\"\n\"Matrix!GZ17\"\n\"Matrix!CT2\"\n\"Matrix!HA17\"\n\"Matrix!CU2\"\n\"Matrix!HB17\"\n\"Matrix!CV2\"\n\"Matrix!HC17\"\n\"Matrix!CW2\"\n\"Matrix!HD17\"\n\"Matrix!CX2\"\n\"Matrix!HE17\"\n\"Matrix!CY2\"\n\"Matrix!HF17\"\n\"Matrix!CZ2\"\n\"Matrix!HG17\"\n\"Matrix!DA2\"\n\"Matrix!HH17\"\n\"Matrix!DB2\"\n\"Matrix!HI17\"\n\"Matrix!DC2\"\n\"Matrix!HJ17\"\n\"Matrix!DD2\"\n\"Matrix!HK17\"\n\"Matrix!DE2\"\n\"Matrix!HL17\"\n\"Matrix!DF2\"\n\"Matrix!HM17\"\n\"Matrix!DG2\"\n\"Matrix!HN17\"\n\"Matrix!DH2\"\n\"Matrix!HO17\"\n\"IF(((SUM(Q2+S2)-N2)<0),0,(SUM(Q2+S2)-N2))\"\n\"IF(AND(T2>4,N2<>6),A2,A2&\"\" -- (REPLACEMENT or RESUMPTION PERIOD ACCEPTABLE)\"\")\"\n\"IF(T2<=4,$Y$2,IF(C2=1,$Y$3,IF(C2=2,$Y$4,IF(C2=3,$Y$5,IF(C2=4,$Y$6,IF(OR(C2=5,C2=6),$Y$7,IF(OR(C2=7,C2=8,C2=9),$Y$8,IF(C2=10,$Y$9,$Y$10))))))))\"\n\"NamedAssetGroup!A2\"\n\"NamedAssetGroup!A3\"\n\"NamedAssetGroup!A4\"\n\"NamedAssetGroup!A5\"\n\"NamedAssetGroup!A6\"\n\"NamedAssetGroup!A7\"\n\"NamedAssetGroup!A8\"\n\"NamedAssetGroup!A9\"\n\"NamedAssetGroup!A10\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C2)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C3)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C4)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C5)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C6)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C7)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C8)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C9)\"\n\"INDEX(NamedAssetGroup!$B$96:'NamedAssetGroup'!$B$106,NamedAssetGroup!$C10)\"\n\"NamedAssetGroup!$D2\"\n\"NamedAssetGroup!$D3\"\n\"NamedAssetGroup!$D4\"\n\"NamedAssetGroup!$D5\"\n\"NamedAssetGroup!$D6\"\n\"NamedAssetGroup!$D7\"\n\"NamedAssetGroup!$D8\"\n\"NamedAssetGroup!$D9\"\n\"NamedAssetGroup!$D10\"\n\"NamedAssetGroup!$E2\"\n\"NamedAssetGroup!$E3\"\n\"NamedAssetGroup!$E4\"\n\"NamedAssetGroup!$E5\"\n\"NamedAssetGroup!$E6\"\n\"NamedAssetGroup!$E7\"\n\"NamedAssetGroup!$E8\"\n\"NamedAssetGroup!$E9\"\n\"NamedAssetGroup!$E10\"\n\"NamedAssetGroup!$F2\"\n\"NamedAssetGroup!$F3\"\n\"NamedAssetGroup!$F4\"\n\"NamedAssetGroup!$F5\"\n\"NamedAssetGroup!$F6\"\n\"NamedAssetGroup!$F7\"\n\"NamedAssetGroup!$F8\"\n\"NamedAssetGroup!$F9\"\n\"NamedAssetGroup!$F10\"\n\"NamedAssetGroup!$G2\"\n\"NamedAssetGroup!$G3\"\n\"NamedAssetGroup!$G4\"\n\"NamedAssetGroup!$G5\"\n\"NamedAssetGroup!$G6\"\n\"NamedAssetGroup!$G7\"\n\"NamedAssetGroup!$G8\"\n\"NamedAssetGroup!$G9\"\n\"NamedAssetGroup!$G10\"\n\"NamedAssetGroup!$H2\"\n\"NamedAssetGroup!$H3\"\n\"NamedAssetGroup!$H4\"\n\"NamedAssetGroup!$H5\"\n\"NamedAssetGroup!$H6\"\n\"NamedAssetGroup!$H7\"\n\"NamedAssetGroup!$H8\"\n\"NamedAssetGroup!$H9\"\n\"NamedAssetGroup!$H10\"\n\"NamedAssetGroup!$I2\"\n\"NamedAssetGroup!$I3\"\n\"NamedAssetGroup!$I4\"\n\"NamedAssetGroup!$I5\"\n\"NamedAssetGroup!$I6\"\n\"NamedAssetGroup!$I7\"\n\"NamedAssetGroup!$I8\"\n\"NamedAssetGroup!$I9\"\n\"NamedAssetGroup!$I10\"\n\"NamedAssetGroup!$J2\"\n\"NamedAssetGroup!$J3\"\n\"NamedAssetGroup!$J4\"\n\"NamedAssetGroup!$J5\"\n\"NamedAssetGroup!$J6\"\n\"NamedAssetGroup!$J7\"\n\"NamedAssetGroup!$J8\"\n\"NamedAssetGroup!$J9\"\n\"NamedAssetGroup!$J10\"\n\"NamedAssetGroup!$K2\"\n\"NamedAssetGroup!$K3\"\n\"NamedAssetGroup!$K4\"\n\"NamedAssetGroup!$K5\"\n\"NamedAssetGroup!$K6\"\n\"NamedAssetGroup!$K7\"\n\"NamedAssetGroup!$K8\"\n\"NamedAssetGroup!$K9\"\n\"NamedAssetGroup!$K10\"\n\"NamedAssetGroup!$L2\"\n\"NamedAssetGroup!$L3\"\n\"NamedAssetGroup!$L4\"\n\"NamedAssetGroup!$L5\"\n\"NamedAssetGroup!$L6\"\n\"NamedAssetGroup!$L7\"\n\"NamedAssetGroup!$L8\"\n\"NamedAssetGroup!$L9\"\n\"NamedAssetGroup!$L10\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N2)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N3)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N4)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N5)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N6)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N7)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N8)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N9)\"\n\"INDEX(NamedAssetGroup!$M96:'NamedAssetGroup'!$M101,NamedAssetGroup!$N10)\"\n\"NamedAssetGroup!$O2\"\n\"NamedAssetGroup!$O3\"\n\"NamedAssetGroup!$O4\"\n\"NamedAssetGroup!$O5\"\n\"NamedAssetGroup!$O6\"\n\"NamedAssetGroup!$O7\"\n\"NamedAssetGroup!$O8\"\n\"NamedAssetGroup!$O9\"\n\"NamedAssetGroup!$O10\"\n\"NamedAssetGroup!$V2\"\n\"NamedAssetGroup!$V3\"\n\"NamedAssetGroup!$V4\"\n\"NamedAssetGroup!$V5\"\n\"NamedAssetGroup!$V6\"\n\"NamedAssetGroup!$V7\"\n\"NamedAssetGroup!$V8\"\n\"NamedAssetGroup!$V9\"\n\"NamedAssetGroup!$V10\"\n\"NamedAssetGroup!$W2\"\n\"NamedAssetGroup!$W3\"\n\"NamedAssetGroup!$W4\"\n\"NamedAssetGroup!$W5\"\n\"NamedAssetGroup!$W6\"\n\"NamedAssetGroup!$W7\"\n\"NamedAssetGroup!$W8\"\n\"NamedAssetGroup!$W9\"\n\"NamedAssetGroup!$W10\"\n\"NamedAssetGroup!$X2\"\n\"NamedAssetGroup!$X3\"\n\"NamedAssetGroup!$X4\"\n\"NamedAssetGroup!$X5\"\n\"NamedAssetGroup!$X6\"\n\"NamedAssetGroup!$X7\"\n\"NamedAssetGroup!$X8\"\n\"NamedAssetGroup!$X9\"\n\"NamedAssetGroup!$X10\"\n\"RecoverySummary!B1\"\n\"RecoverySummary!B14\"\n\"RecoverySummary!B10\"\n\"RecoverySummary!B16\"\n\"RecoverySummary!B13\"\n\"RecoverySummary!B11\"\n\"RecoverySummary!B9\"\n\"'DCMA P-1'!I27\"\n\"'DCMA P-1'!G27\"\n\"'DCMA P-1'!E27\"\n\"'Vehicles P-40'!D13\"\n\"'Vehicles P-40'!D14\"\n\"'Vehicles P-40'!E13\"\n\"'Vehicles P-40'!E14\"\n\"+'Vehicles P-40'!F13\"\n\"'Vehicles P-40'!F14\"\n\"'DCMA-FAA-P-40'!D13\"\n\"'DCMA-FAA-P-40'!D14\"\n\"'DCMA-FAA-P-40'!E13\"\n\"'DCMA-FAA-P-40'!E14\"\n\"'DCMA-C&CI P-40'!D13\"\n\"'DCMA-C&CI P-40'!D14\"\n\"'DCMA-C&CI P-40'!E13\"\n\"'DCMA-C&CI P-40'!E14\"\n\"'DCMA-C&CI P-40'!F13\"\n\"+'DCMA-C&CI P-40'!F14\"\n\"'DCMA-RTAs P-40 '!D13\"\n\"'DCMA-RTAs P-40 '!D14\"\n\"+'DCMA-C&CI P-40'!D15\"\n\"+'DCMA-C&CI P-40'!E15\"\n\"'DCMA IA P-40 '!D13\"\n\"'DCMA IA P-40 '!D14\"\n\"'DCMA IA P-40 '!E13\"\n\"'DCMA IA P-40 '!C14\"\n\"'DCMA IA P-40 '!F14\"\n\"'SPS P-40'!D13\"\n\"+'SPS P-40'!D14\"\n\"'SPS P-40'!E13\"\n\"+'SPS P-40'!E14\"\n\"'SPS P-40'!F13\"\n\"'SPS P-40'!F14\"\n\"SUM(D15:D25)\"\n\"'[2]Exhibit Data'!B50/1000\"\n\"SUM(O27:O31)\"\n\"E15-O27\"\n\"G15-P27\"\n\"I15-Q27\"\n\"#REF!-R27\"\n\"E21-O28\"\n\"G21-P28\"\n\"I21-Q28\"\n\"(E27-E25)-O32\"\n\"(G27-G25)-P32\"\n\"(I27-I25)-Q32\"\n\"(#REF!-#REF!)-R32\"\n\"'DCMA P-1'!D15\"\n\"0.125+0.029\"\n\"SUM(D14:D25)\"\n\"0.179-0.042\"\n\"H13/F13\"\n\"0.179-0.042\"\n\"C13\"\n\"C27\"\n\"E13\"\n\"C32\"\n\"E13\"\n\"'Vehicles P-5'!C13\"\n\"+'Vehicles P-5'!G13\"\n\"+'Vehicles P-5'!J13\"\n\"G14/H12\"\n\"179-42\"\n\"'DCMA-FAA P-5'!C20\"\n\"'DCMA-FAA P-5'!F27\"\n\"+'DCMA-FAA P-5'!E22\"\n\"'[2]Exhibit Data'!C$52/1000\"\n\"I13*J13\"\n\"E15/C15\"\n\"ROUND(1.246+0.215,3)\"\n\"'[2]03-07 Summary App Grp'!$P$9/1000\"\n\"'[2]03-07 Summary App Grp'!$O$10/1000\"\n\"SUM(C13:C17)\"\n\"SUM(I13:I17)\"\n\"C22\"\n\"C27\"\n\"'DCMA-FAA P-5'!C15\"\n\"'DCMA-FAA P-5'!C17\"\n\"'DCMA-FAA P-5'!F17\"\n\"'DCMA-FAA P-5'!J13\"\n\"'DCMA-FAA P-5'!J15\"\n\"'DCMA-C&CI P-5'!C22\"\n\"'DCMA-C&CI P-5'!F22\"\n\"'DCMA-C&CI P-5'!I22\"\n\"+'DCMA-C&CI P-5'!E22\"\n\"'[2]Exhibit Data'!C$54/1000\"\n\"9.835-0.032\"\n\"C13*D13\"\n\"'[2]03-07 Summary App Grp'!$O$25/1000\"\n\"4.782-0.032\"\n\"'[2]unit price_quantity'!$B$24\"\n\"H15/F15\"\n\"'[2]03-07 Summary App Grp'!$O$27/1000\"\n\"[1]!Hub_Consolidation/1000/1000\"\n\"'[2]unit price_quantity'!$C$29\"\n\"'[2]03-07 Summary App Grp'!$P$28/1000\"\n\"'[2]unit price_quantity'!$C$34\"\n\"'[2]03-07 Summary App Grp'!$P$29/1000\"\n\"SUM(C13:C19)\"\n\"SUM(E13:E17)\"\n\"C22\"\n\"C27\"\n\"'DCMA-C&CI P-5'!C13\"\n\"'DCMA-C&CI P-5'!F13\"\n\"+'DCMA-C&CI P-5'!F15\"\n\"'DCMA-C&CI P-5'!I13\"\n\"'DCMA-C&CI P-5'!I17\"\n\"+'DCMA-C&CI P-5'!J17\"\n\"'DCMA-C&CI P-5'!I19\"\n\"'DCMA-RTAs P-5 '!C17\"\n\"'DCMA-RTAs P-5 '!F17\"\n\"'DCMA-RTAs P-5 '!I17\"\n\"'[2]Exhibit Data'!B$51/1000\"\n\"'[2]Exhibit Data'!$B$51/1000\"\n\"C13*D13\"\n\"SUM(C13:C14)\"\n\"C17\"\n\"C22\"\n\"'DCMA-RTAs P-5 '!C13\"\n\"'[2]Exhibit Data'!B$53/1000\"\n\"'[2]Exhibit Data'!$B$53/1000\"\n\"C13*D13\"\n\"E15\"\n\"SUM(C13:C17)\"\n\"SUM(E13:E19)\"\n\"+C20\"\n\"E20\"\n\"+C27\"\n\"E27\"\n\"'DCMA IA P-5 '!A13\"\n\"'DCMA IA P-5 '!C13\"\n\"+'SPS P-5'!H22\"\n\"24.433-4.4-0.146\"\n\"'[3]Exhibit Data'!D$42/1000\"\n\"H14\"\n\"'[3]Exhibit Data'!$B$43/1000+0.395+0.12\"\n\"14.417-4.4-0.146-0.276\"\n\"'[3]Exhibit Data'!$D$43/1000+0.795\"\n\"4.108-0.001\"\n\"4.395+0.021\"\n\"'[3]Exhibit Data'!$D$45/1000-0.761\"\n\"'[3]Exhibit Data'!$B$44/1000-0.394\"\n\"'[3]Exhibit Data'!$C$44/1000+0.255\"\n\"'[3]Exhibit Data'!$D$44/1000-0.034177\"\n\"SUM(H14:H18)-0.001\"\n\"SUM(K14:K18)\"\n\"F22\"\n\"+H22\"\n\"F27\"\n\"+H27\"\n\"F36\"\n\"+H36\"\n\"'SPS P-5'!H14\"\n\"'SPS P-5'!H16\"\n\"'SPS P-5'!H18\"\n\"'SPS P-5'!$K$14\"\n\"'SPS P-5'!$K$16\"\n\"'SPS P-5'!$K$18\"\n\"'SPS P-5'!$N$14\"\n\"'SPS P-5'!$N$16\"\n\"'SPS P-5'!$N$18\"\n\"SUM(P76:P80)\"\n\"SUM(P76:P80)\"\n\"SUM(P76:P80)\"\n\"Application!J13\"\n\"Application!J12\"\n\"Application!A18\"\n\"Application!D18\"\n\"Application!G18\"\n\"Application!K18\"\n\"Application!A22\"\n\"Application!G22\"\n\"Application!K22\"\n\"Application!A25\"\n\"Application!G25\"\n\"Application!K25\"\n\"Application!O25\"\n\"Application!A29\"\n\"Application!K29\"\n\"Application!A32\"\n\"Application!G32\"\n\"Application!K32\"\n\"Application!A35\"\n\"Application!K35\"\n\"Application!A38\"\n\"Application!G38\"\n\"Application!K38\"\n\"Application!A41\"\n\"Application!A45\"\n\"Application!G45\"\n\"Application!K45\"\n\"Application!A49\"\n\"Application!G49\"\n\"Application!K49\"\n\"Application!R53\"\n\"Application!R54\"\n\"Application!R55\"\n\"Application!R56\"\n\"Application!R57\"\n\"Application!R58\"\n\"Application!R59\"\n\"Application!R60\"\n\"Application!P81\"\n\"Application!C76\"\n\"Application!F76\"\n\"Application!I76\"\n\"Application!M76\"\n\"Application!P76\"\n\"Application!C77\"\n\"Application!F77\"\n\"Application!I77\"\n\"Application!M77\"\n\"Application!P77\"\n\"Application!C78\"\n\"Application!F78\"\n\"Application!I78\"\n\"Application!M78\"\n\"Application!P78\"\n\"Application!C79\"\n\"Application!F79\"\n\"Application!I79\"\n\"Application!M79\"\n\"Application!P79\"\n\"Application!C80\"\n\"Application!F80\"\n\"Application!I80\"\n\"Application!M80\"\n\"Application!P80\"\n\"Application!P81\"\n\"Application!A86\"\n\"Application!N86\"\n\"Application!A89\"\n\"Application!N89\"\n\"Application!A93\"\n\"Application!F93\"\n\"Application!N93\"\n\"Application!A96\"\n\"Application!#REF!\"\n\"SUM(P70:P74)\"\n\"SUM(P70:P74)\"\n\"SUM(P70:P74)\"\n\"Application!J13\"\n\"Application!J12\"\n\"Application!A18\"\n\"Application!D18\"\n\"Application!G18\"\n\"Application!K18\"\n\"Application!A22\"\n\"Application!G22\"\n\"Application!K22\"\n\"Application!A25\"\n\"Application!G25\"\n\"Application!K25\"\n\"Application!O25\"\n\"Application!A29\"\n\"Application!K29\"\n\"Application!A32\"\n\"Application!G32\"\n\"Application!K32\"\n\"Application!A35\"\n\"Application!K35\"\n\"Application!A38\"\n\"Application!G38\"\n\"Application!K38\"\n\"Application!A41\"\n\"Application!A45\"\n\"Application!G45\"\n\"Application!K45\"\n\"Application!A49\"\n\"Application!G49\"\n\"Application!K49\"\n\"Application!R53\"\n\"Application!R54\"\n\"Application!R55\"\n\"Application!C70\"\n\"Application!F70\"\n\"Application!I70\"\n\"Application!M70\"\n\"Application!P70\"\n\"Application!C71\"\n\"Application!F71\"\n\"Application!I71\"\n\"Application!M71\"\n\"Application!P71\"\n\"Application!C72\"\n\"Application!F72\"\n\"Application!I72\"\n\"Application!M72\"\n\"Application!P72\"\n\"Application!C73\"\n\"Application!F73\"\n\"Application!I73\"\n\"Application!M73\"\n\"Application!P73\"\n\"Application!C74\"\n\"Application!F74\"\n\"Application!I74\"\n\"Application!M74\"\n\"Application!P74\"\n\"Application!P75\"\n\"Application!A81\"\n\"Application!N81\"\n\"Application!A84\"\n\"Application!N84\"\n\"Application!A88\"\n\"Application!F88\"\n\"Application!N88\"\n\"Application!A91\"\n\"Application!A94\"\n\"(2*IF(C46=1,$A$22,IF(C46=2,$B$22,IF(C46=3,$C$22,IF(C46=4,$D$22,IF(C46=5,$A$33,IF(C46=6,$B$33,IF(C46=7,$C$33,IF(C46=8,$D$33))))))))*C37*C35^3*C40/C39/C41/(C41+C45)^2/C36)+(IF(C46=1,$A$23,IF(C46=2,$B$23,IF(C46=3,$C$23,IF(C46=4,$D$23,IF(C46=5,$A$34,IF(C46=6,$B$34,IF(C46=7,$C$34,IF(C46=8,$D$34))))))))*C37*C35/(C41+C45)/C42/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"(IF(C46=1,$A$21,IF(C46=2,$B$21,IF(C46=3,$C$21,IF(C46=4,$D$21,IF(C46=5,$A$32,IF(C46=6,$B$32,IF(C46=7,$C$32,IF(C46=8,$D$32))))))))*C35*C37/C41/(C41+C45)/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"(IF(C46=1,$A$20,IF(C46=2,$B$20,IF(C46=3,$C$20,IF(C46=4,$D$20,IF(C46=5,$A$31,IF(C46=6,$B$31,IF(C46=7,$C$31,IF(C46=8,$D$31))))))))*C37/(C41+C45)/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"2*C39/C40*(C41/C44)^2*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"0.82*C39*(C43*C41/C39/C45)^0.5*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"'SI- Units'!D1\"\n\"(2*IF(C46=1,$A$22,IF(C46=2,$B$22,IF(C46=3,$C$22,IF(C46=4,$D$22,IF(C46=5,$A$33,IF(C46=6,$B$33,IF(C46=7,$C$33,IF(C46=8,$D$33))))))))*C37*C35^3*C40/C39/C41/(C41+C45)^2/C36)+(IF(C46=1,$A$23,IF(C46=2,$B$23,IF(C46=3,$C$23,IF(C46=4,$D$23,IF(C46=5,$A$34,IF(C46=6,$B$34,IF(C46=7,$C$34,IF(C46=8,$D$34))))))))*C37*C35/(C41+C45)/C42/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"(IF(C46=1,$A$21,IF(C46=2,$B$21,IF(C46=3,$C$21,IF(C46=4,$D$21,IF(C46=5,$A$32,IF(C46=6,$B$32,IF(C46=7,$C$32,IF(C46=8,$D$32))))))))*C35*C37/C41/(C41+C45)/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"(IF(C46=1,$A$20,IF(C46=2,$B$20,IF(C46=3,$C$20,IF(C46=4,$D$20,IF(C46=5,$A$31,IF(C46=6,$B$31,IF(C46=7,$C$31,IF(C46=8,$D$31))))))))*C37/(C41+C45)/C36)*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"2*C39/C40*(C41/C44)^2*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"0.82*C39*(C43*C41/C39/C45)^0.5*IF(AND(C46>=1,C46<=8),1,1/0)\"\n\"'COCOMO Data'!F3*(POWER('Project Oriented Data'!D11,'COCOMO Data'!G3)*PRODUCT('COCOMO Data'!E4:E18))\"\n\"'Project Oriented Data'!D13/'Project Oriented Data'!D9\"\n\"('Project Oriented Data'!D9*'Project Oriented Data'!D3)/('Project Oriented Data'!D11+'Project Oriented Data'!D12+'Project Oriented Data'!D14)\"\n\"('Project Oriented Data'!D9*'Project Oriented Data'!D3)/'Project Oriented Data'!D11\"\n\"CEILING('Project Oriented Data'!D10/'Project Oriented Data'!D13,1)\"\n\"('Project Oriented Data'!D16+'Project Oriented Data'!D17)/('Project Oriented Data'!D11+'Project Oriented Data'!D12+'Project Oriented Data'!D14)\"\n\"('Project Oriented Data'!D16+'Project Oriented Data'!D17)/'Project Oriented Data'!D9\"\n\"CEILING('Project Oriented Data'!D3*'Project Oriented Data'!D9/('Project Oriented Data'!D16+'Project Oriented Data'!D17),1)\"\n\"'Project Oriented Data'!D18/('Project Oriented Data'!D11+'Project Oriented Data'!D12+'Project Oriented Data'!D14)\"\n\"(('Project Oriented Data'!D20*'Project Oriented Data'!D3)/'Project Oriented Data'!D4)/'Project Oriented Data'!D18\"\n\"'Project Oriented Data'!D20/('Project Oriented Data'!D20+'Project Oriented Data'!D19)\"\n\"'Project Oriented Data'!D19/('Project Oriented Data'!D19+'Project Oriented Data'!D20)\"\n\"('Project Oriented Data'!D20+'Project Oriented Data'!D19)/'Project Oriented Data'!D8\"\n\"FLOOR(('Function Oriented Data'!D3*'Function Oriented Data'!D8)+('Function Oriented Data'!D4*'Function Oriented Data'!D9)+('Function Oriented Data'!D5*'Function Oriented Data'!D10)+('Function Oriented Data'!D6*'Function Oriented Data'!D11)+('Function Oriented Data'!D7*'Function Oriented Data'!D12)*(0.65+(0.01*SUM('Function Oriented Data'!D13:D26))),1)\"\n\"SUM('Function Oriented Data'!D13:D26)\"\n\"1.08\"\n\"FLOOR(D17*D19,1)\"\n\"D20/'Project Oriented Data'!D9\"\n\"('Project Oriented Data'!D3*'Project Oriented Data'!D9)/D20\"\n\"D20/'Project Oriented Data'!D10\"\n\"('Project Oriented Data'!D16+'Project Oriented Data'!D17)/'Metrics Calculation'!D20\"\n\"D20/'Project Oriented Data'!D15\"\n\"'Metrics Calculation'!D20/('Project Oriented Data'!D11+'Project Oriented Data'!D12+'Project Oriented Data'!D14)\"\n\"'Project Oriented Data'!D18/'Metrics Calculation'!D20\"\n\"(('Project Oriented Data'!D20/('Project Oriented Data'!D4/264))/'Metrics Calculation'!D20)\"\n\"(('Project Oriented Data'!D19/('Project Oriented Data'!D4/264))/'Metrics Calculation'!D20)\"\n\"SUM(F2:F3)\"\n\"SUM(IF(Complete!A$2:A$563<>\"\"TCS\"\",IF(Complete!C$2:C$563=E2,IF(Complete!E$2:E$563=\"\"Red\"\",1,0))))\"\n\"SUM(IF(Complete!A$2:A$563<>\"\"TCS\"\",IF(Complete!C$2:C$563=E2,IF(Complete!E$2:E$563=\"\"Yellow\"\",1,0))))\"\n\"SUM(F4:F12)\"\n\"SUM(F15:F19)\"\n\"SUM(F20:F29)\"\n\"SUM(IF(Complete!C$2:C$563=E20,IF(Complete!E$2:E$563=\"\"Red\"\",1,0)))\"\n\"SUM(IF(Complete!C$2:C$563=E20,IF(Complete!E$2:E$563=\"\"Yellow\"\",1,0)))\"\n\"SUM(IF(Complete!$B$2:$B$563=$B30,IF(Complete!$E$2:$E$563=\"\"Red\"\",1,0)))\"\n\"SUM(IF(Complete!$B$2:$B$563=$B30,IF(Complete!$E$2:$E$563=\"\"Yellow\"\",1,0)))\"\n\"SUM(IF(Complete!$A$2:$A$563=\"\"TCS\"\",IF(Complete!C$2:C$563=E32,IF(Complete!E$2:E$563=\"\"Red\"\",1,0))))\"\n\"SUM(IF(Complete!$A$2:$A$563=\"\"TCS\"\",IF(Complete!C$2:C$563=E32,IF(Complete!E$2:E$563=\"\"Yellow\"\",1,0))))\"\n\"+C29+1\"\n\"IF(INDIRECT(B2 &\"\"!\"\" & CHAR(64+D2) &C2)>0,FALSE,TRUE)\"\n\"ISERROR(MATCH(\"\"l\"\",INDIRECT(B3 & \"\"!\"\" & C3 & \"\":\"\" & D3)))\"\n\"ISERROR(MATCH(\"\"n\"\",INDIRECT(B4 & \"\"!\"\" & C4 & \"\":\"\" & D4)))\"\n\"IF('s1'!B50=\"\"l\"\",FALSE,TRUE)\"\n\"AND(INDIRECT(B12 &\"\"!\"\" & CHAR(64+D12) &C12)=0,G12)\"\n\"NOT(G$6)\"\n\"NOT(ISNUMBER(INDIRECT(B25 &\"\"!\"\" & CHAR(64+D25) &C25)))\"\n\"SUM(E9:E11)\"\n\"SUM(F9:H9)\"\n\"SUM(D9:D19)\"\n\"SUM(D39:J39)\"\n\"SUM(D60:I60)\"\n\"SUM(D79:H79)\"\n\"SUM(D79:D89)\"\n\"IF(C10=0,0,C9/C10-1)\"\n\"IF(C10=0,0,C9/C10-1)\"\n\"IF(C17=0,0,F17/C17-1)\"\n\"IF(C17=0,0,F17/C17-1)\"\n\"IF(VALUE(C24)=0,0,F24/C24-1)\"\n\"IF(VALUE(C24)=0,0,F24/C24-1)\"\n\"IF(C10=0,0,C32/C10-1)\"\n\"IF(C32=0,0,F32/C32-1)\"\n\"IF(ISBLANK(D57),\"\"\"\",\"\"5\"\")\"\n\"+C327\"\n\"(G15-E15)*100\"\n\"0.378+0.134\"\n\"0.132+0.241\"\n\"(G17/F17)*100\"\n\"(D16/C16)*100\"\n\"0.114+0.049+0.028+0.027+0.042+0.04\"\n\"0.02+0.007+0.008+0.025+0.033\"\n\"0.033+0.028+0.036+0.023\"\n\"0.028+0.016+0.038+0.025\"\n\"0.022+0.031+0.054+0.042\"\n\"0.018+0.035+0.047+0.036\"\n\"0.054+0.032+0.043+0.03+0.044\"\n\"0.077+0.044+0.057+0.036+0.051\"\n\"0.049+0.053\"\n\"0.073+0.072\"\n\"0.089+0.037\"\n\"0.16+0.066\"\n\"(D13/C13)*100\"\n\"(E13/D13)*100\"\n\"IF(OR(E3=\"\"Y\"\",E3=\"\"y\"\"),F3*G3,\"\"-\"\")\"\n\"IF(OR(E3=\"\"N\"\",E3=\"\"n\"\"),F3*G3,\"\"-\"\")\"\n\"A3+1\"\n\"SUM(H3:H7)\"\n\"A7+1\"\n\"SUM(I10:I15)\"\n\"SUM(H18:H20)\"\n\"SUM(H23:H39)\"\n\"SUM(H42:H52)\"\n\"SUM(H55:H56)\"\n\"SUM(H67:H70)\"\n\"A77+1\"\n\"SUM(I81)\"\n\"SUM(H84:H125)\"\n\"SUM(H126,H82,H75,H71,H65,H57,H53,H40,H21,H16,H8)\"\n\"H128*0.0775\"\n\"I128*0.078\"\n\"'System Pricing'!A125+1\"\n\"SUM(G4:G5)\"\n\"A3+1\"\n\"E4*F4\"\n\"A5+1\"\n\"msoBarTop\"\n\"msoControlPopup\"\n\"msoControlButton\"\n\"msoBarPopup\"\n\"msoControlComboBox\"\n\"xlDown\"\n\"xlCommentIndicatorOnly\"\n\"xlCalculationAutomatic\"\n\"xlA1\"\n\"xlDisplayShapes\"\n\"SUMPRODUCT($C$10:$C$35,D10:D35)\"\n\"COUNTA(B5:B37)\"\n\"COUNTA(A6:A38)\"\n\"COUNTA(B5:B38)\"\n\"COUNTA(ER5:ER38)\"\n\"COUNTA(#REF!)\"\n\"B13*C13\"\n\"SUM(D18:D18)\"\n\"0.3048*500\"\n\"0.3048*10\"\n\"10*0.3048\"\n\"0.3042*32\"\n\"16*0.3048\"\n\"250*0.3048\"\n\"200*0.3048\"\n\"COUNT(A2:AZ157)\"\n\"SUM(C2:C3)\"\n\"$C$4\"\n\"$C$8\"\n\"$C$13\"\n\"$C$19\"\n\"SUM(C5:C7)\"\n\"$C$22\"\n\"$C$29\"\n\"$C$36\"\n\"$C$42\"\n\"SUM(G3:G11)\"\n\"SUM(C14:C18)\"\n\"SUM(G16:G23)\"\n\"SUM(C23:C28)\"\n\"SUM(C53:C56)\"\n\"$C$167\"\n\"A60*B60\"\n\"C60*4\"\n\"$C$57\"\n\"SUM(C106,C96,C90,C83,C76,C73,C67)\"\n\"C110*2\"\n\"$C$52\"\n\"$C$61\"\n\"SUM(C115:C124)\"\n\"$C$107\"\n\"C60*2\"\n\"SUM(C130,C125)\"\n\"C132/6\"\n\"AVERAGE(C137:C166)\"\n\"SUM(C2:C6)\"\n\"SUM(C9:C9)\"\n\"SUM(C12:C14)\"\n\"12500084\"\n\"75000*4\"\n\"250000*4\"\n\"C27*0.03+C27\"\n\"$C$89\"\n\"A38*B38\"\n\"C38*4\"\n\"$C$7\"\n\"$C$10\"\n\"$C$20\"\n\"$C$15\"\n\"C38*2\"\n\"$C$27\"\n\"$C$35\"\n\"2*(A38*B38)\"\n\"SUM(C50:C51)\"\n\"SUM(C52,C53,C48)\"\n\"C55/6\"\n\"AVERAGE(C59:C88)\"\n\"Example!#REF!\"\n\"Example!A1\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"LOG(A13)\"\n\"STDEV(B13:B24)\"\n\"AVERAGE(A12:B12)\"\n\"LOG(C12)\"\n\"STDEV(D12:D19)\"\n\"LOG(C8)\"\n\"STDEV(D8:D17)\"\n\"LOG(C4)\"\n\"STDEV(D4:D17)\"\n\"LOG(D12)\"\n\"F12/C12\"\n\"I12/C12\"\n\"STDEV(E12:E16)\"\n\"AVERAGE(D12:D16)\"\n\"STDEV(D12:D16)\"\n\"COUNT(D12:D16)\"\n\"D21/(D22^0.5)\"\n\"K17\"\n\"N23*(O23^2)\"\n\"(P25/8)^0.5\"\n\"P23+P24\"\n\"1000*G20\"\n\"AVERAGE(F35:F39)\"\n\"STDEV(F35:F39)\"\n\"COUNT(F35:F39)\"\n\"LOG($D3)\"\n\"NORMSINV($I3)\"\n\"LOG(D3)\"\n\"(F3-3/8)/15.25\"\n\"NORMSINV(I3)\"\n\"(Q3-3/8)/12.25\"\n\"NORMSINV(I3)\"\n\"LOG(X3)\"\n\"NORMSINV(I10)\"\n\"STDEV(T3:T14)\"\n\"STDEV(E3:E17)\"\n\"LOG(G7)\"\n\"STDEV(H7:H16)\"\n\"STDEV(N8:N16)\"\n\"AVERAGE(B3,C3)\"\n\"(F3-3/8)/7.25\"\n\"NORMSINV(G3)\"\n\"LOG(E3)\"\n\"NORMSINV(G3)\"\n\"LOG(E3)\"\n\"F3+1\"\n\"STDEV(J3:J9)\"\n\"LOG(C5)\"\n\"STDEV(D5:D10)\"\n\"LOG(E14)\"\n\"(G14-3/8)/8.25\"\n\"NORMSINV(H14)\"\n\"LOG($E$15)\"\n\"(E23-3/8)/5.25\"\n\"NORMSINV(F23)\"\n\"LOG(C23)\"\n\"NORMSINV(F23)\"\n\"LOG(J23)\"\n\"NORMSINV(F23)\"\n\"NORMSINV(F23)\"\n\"NORMSINV(F23)\"\n\"STDEV(D23:D27)\"\n\"LOG(B6)\"\n\"STDEV(C6:C17)\"\n\"LOG(D5)\"\n\"STDEV(E5:E10)\"\n\"LOG(D6)\"\n\"STDEV(E6:E19)\"\n\"STDEV(E24:E31)\"\n\"STDEV(E35:E40)\"\n\"LOG(A7)\"\n\"STDEV(B7:B14)\"\n\"LOG(A11)\"\n\"STDEV(B11:B30)\"\n\"1/A12\"\n\"LOG(B12)\"\n\"STDEV(C12:C56)\"\n\"STDEV(F2:F311)\"\n\"A3+1\"\n\"A200+1\"\n\"A276+1\"\n\"+SUM(F5:F14)\"\n\"+SUM(F19:F56)\"\n\"+SUM(F61:F77)\"\n\"SUM(F82:F108)\"\n\"SUM(F113:F120)\"\n\"SUM(F125:F131)\"\n\"+F133+F122+F110+F79+F58+F16\"\n\"+SUM(F5:F10)\"\n\"+SUM(F16:F53)\"\n\"+SUM(F57:F67)\"\n\"+F12+F55+F69+F78\"\n\"7+3\"\n\"7+3\"\n\"7+3\"\n\"7+3\"\n\"J1\"\n\"J3\"\n\"J32\"\n\"#REF!\"\n\"J76\"\n\"J70\"\n\"J144\"\n\"A2\"\n\"A9\"\n\"IF(H2>G2,\"\"Out of compliance\"\",\"\"Good!\"\")\"\n\"A2\"\n\"SUM(E4:H4)\"\n\"SUM(D4:D24)\"\n\"SUM(D28:D35)\"\n\"SUM(D42:D49)\"\n\"SUM(D54:D72)\"\n\"SUM(D74,D50,D37,D25)\"\n\"IF(OR(H10=\"\"error\"\",H27=\"\"error\"\",H43=\"\"error\"\",H66=\"\"error\"\",H78=\"\"error\"\",H55=\"\"error\"\",H90=\"\"error\"\",H101=\"\"error\"\",H111=\"\"error\"\"),\"\"error\"\",(2*H10+H27+H43+H66+H78+H55+H90+H101+H111)/10)\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(OR(H11=\"\"error\"\",H16=\"\"error\"\",H20=\"\"error\"\"),\"\"error\"\",(H11+H16)*H20/10)\"\n\"IF(OR(G12=\"\"error\"\",G13=\"\"error\"\",G14=\"\"error\"\",G15=\"\"error\"\"),\"\"error\"\",IF(G12=0,0,IF(G12=1,SUM(G13:G15)*5/6)))\"\n\"IF(F12=\"\"y\"\",1,IF(F12=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(F14=\"\"y\"\",2,IF(F14=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(F15=\"\"y\"\",3,IF(F15=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(OR(G17=\"\"error\"\",G18=\"\"error\"\",G19=\"\"error\"\"),\"\"error\"\",SUM(G17:G19))\"\n\"IF(OR(G21=\"\"error\"\",G22=\"\"error\"\",G23=\"\"error\"\",G24=\"\"error\"\",G25=\"\"error\"\"),\"\"error\"\",SUM(G21:G25)/5)\"\n\"IF(F21=\"\"\"\",\"\"error\"\",(IF(F21<10,1,IF(F21<20,2,IF(F21<30,3,IF(F21<50,4,IF(F21<=100,5,\"\"error\"\")))))))\"\n\"IF(F29=\"\"n\"\",0,IF(OR(H28=\"\"error\"\",H34=\"\"error\"\"),\"\"error\"\",(H28*H34)/5))\"\n\"IF(OR(G31=\"\"error\"\",G32=\"\"error\"\",G33=\"\"error\"\"),\"\"error\"\",(G31*G32*G33)/4)\"\n\"IF(F29=\"\"n\"\",0,IF(AND(F29=\"\"y\"\",F30=\"\"y\"\",F31=\"\"n\"\"),2,IF(AND(F29=\"\"y\"\",F30=\"\"n\"\",F31=\"\"y\"\"),3,IF(AND(F29=\"\"y\"\",F30=\"\"y\"\",F31=\"\"y\"\"),5,\"\"error\"\"))))\"\n\"IF(F32=\"\"y\"\",2,IF(F32=\"\"n\"\",1,\"\"error\"\"))\"\n\"IF(F29=\"\"n\"\",0,IF(OR(G35=\"\"error\"\",G36=\"\"error\"\",G37=\"\"error\"\",G38=\"\"error\"\",G39=\"\"error\"\",G40=\"\"error\"\",G41=\"\"error\"\"),\"\"error\"\",5*SUM(G35:G41)/31))\"\n\"IF(F37=\"\"\"\",\"\"error\"\",(IF(F37<0,\"\"error\"\",(IF(F37<10,5,IF(F37<20,4,IF(F37<30,3,IF(F37<50,2,IF(F37<=100,1,\"\"error\"\")))))))))\"\n\"IF(F39=\"\"y\"\",3,IF(OR(F39=\"\"n\"\",F39=\"\"\"\"),0,\"\"error\"\"))\"\n\"IF(F41=\"\"\"\",\"\"error\"\",IF(AND(F41>0,F41<25),MIN(F41,5),\"\"error\"\"))\"\n\"IF(F45=\"\"n\"\",0,IF(OR(H44=\"\"error\"\",H49=\"\"error\"\"),\"\"error\"\",(H44*H49)/5))\"\n\"IF(OR(F45=\"\"n\"\",F45=\"\"\"\"),0,IF(AND(F46=\"\"y\"\",F47=\"\"n\"\",F48=\"\"n\"\"),1,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"y\"\",F48=\"\"n\"\"),2,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"n\"\",F48=\"\"y\"\"),3,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"y\"\",F48=\"\"y\"\"),5,\"\"error\"\")))))\"\n\"IF(OR(F45=\"\"n\"\",F45=\"\"\"\"),0,IF(OR(G50=\"\"error\"\",G51=\"\"error\"\",G52=\"\"error\"\",G53=\"\"error\"\",G49),\"\"error\"\",SUM(G50:G53)/4))\"\n\"IF(OR(F57=\"\"n\"\",F57=\"\"\"\"),0,IF(OR(G62=\"\"error\"\",G63=\"\"error\"\",G64=\"\"error\"\"),\"\"error\"\",(G62+G63+G64)/3))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(H67=\"\"error\"\",H73=\"\"error\"\"),\"\"error\"\",IF(F29=\"\"n\"\",0,(H67*H73)/5)))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(G68=\"\"error\"\",G69=\"\"error\"\",G70=\"\"error\"\",G71=\"\"error\"\",G72=\"\"error\"\"),\"\"error\"\",(G68*G69*G70*G71*G72/1.0125)))\"\n\"IF(F69=\"\"y\"\",1.5,IF(F69=\"\"n\"\",1,\"\"error\"\"))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(G74=\"\"error\"\",G75=\"\"error\"\",G76=\"\"error\"\"),\"\"error\"\",(G74+G75+G76)/3))\"\n\"IF(F74=\"\"\"\",\"\"error\"\",IF(F74<20,1,IF(F74<40,2,IF(F74<60,3,IF(F74<80,4,IF(F74<=100,5,\"\"error\"\"))))))\"\n\"IF(OR(F45=\"\"n\"\",F80=\"\"n\"\"),0,IF(OR(H79=\"\"error\"\",H85=\"\"error\"\"),\"\"error\"\",(H79*H85)/5))\"\n\"IF(OR(F45=\"\"n\"\",F80=\"\"n\"\"),0,IF(G86=\"\"error\"\",\"\"error\"\",(G86+G87+G88)/3))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(OR(H91=\"\"error\"\",H96=\"\"error\"\"),\"\"error\"\",(H91*H96)/5))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(OR(G92=\"\"error\"\",G93=\"\"error\"\",G94=\"\"error\"\",G95=\"\"error\"\"),\"\"error\"\",(G92*G93*G94*G95*5/6)))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(G97=\"\"error\"\",\"\"error\"\",(G97+G98+G99)/3))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(OR(H102=\"\"error\"\",H106=\"\"error\"\"),\"\"error\"\",(H102*H106)/5))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(AND(F104=\"\"y\"\",F105=\"\"n\"\"),3,IF(AND(OR(F104=\"\"n\"\",F104=\"\"y\"\"),F105=\"\"y\"\"),5,\"\"error\"\")))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(OR(G107=\"\"error\"\",G108=\"\"error\"\",G109=\"\"error\"\"),\"\"error\"\",SUM(G107:G109)/3))\"\n\"IF(OR(F113=\"\"n\"\",F113=\"\"\"\"),0,IF(H112=\"\"error\"\",\"\"error\"\",(H112*H116)/5))\"\n\"IF(OR(F113=\"\"n\"\",F113=\"\"\"\"),0,IF(OR(G117=\"\"error\"\",G118=\"\"error\"\",G119=\"\"error\"\",G120=\"\"error\"\",G121=\"\"error\"\"),\"\"error\"\",SUM(G117:G121)/5))\"\n\"IF(EXACT(\"\"s\"\", E11), C11*F11*$D$5, C11*F11*$D$4)\"\n\"(C15+C14+C13+C12+C11)*D4\"\n\"G13+G15+G16\"\n\"G13\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,2, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,3, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,4, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,5, FALSE)\"\n\"F8*D8\"\n\"SUM(G8:G12)\"\n\"G121\"\n\"SUM(G118:G120)\"\n\"G131\"\n\"SUM(G127:G130)\"\n\"G163\"\n\"SUM(G157:G162)\"\n\"G191\"\n\"SUM(G182:G190)\"\n\"VLOOKUP($A5, Configurations!$A$4:'Configurations'!$G$192, 4, FALSE)\"\n\"VLOOKUP($A5, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"C29\"\n\"F29\"\n\"IF($B$5<$B$6,$A$5,IF($B$5>$B$6,$A$6, \"\"Systems Equivalent Cost\"\"))\"\n\"IF($B$5>$B$6,$A$5,IF($B$5<$B$6,$A$6, \"\"Systems Equivalent Cost\"\"))\"\n\"MAX(B6,B5) - MIN(B6,B5)\"\n\"MAX($B$6,$B$5)/MIN($B$6,$B$5)\"\n\"CONCATENATE(B9, \"\" configuration is \"\", FIXED( B11, 2), \"\" times more expensive than \"\", B8, \"\" configuration\"\")\"\n\"VLOOKUP($B19, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"VLOOKUP($E19, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"MAX(F19,C19)/MIN(F19,C19)\"\n\"SUM(C19:C28)\"\n\"E12*8\"\n\"A2+1\"\n\" A2 + 1\"\n\"A49+1\"\n\"B9/$O9\"\n\"B9-D9\"\n\"H9/$N9\"\n\"G7/1959668327\"\n\"J7/1701051571\"\n\"1-SUM(C9:C11)\"\n\"1-B30\"\n\"B6*D6\"\n\"A11+1\"\n\"C15/B15\"\n\"AVERAGE(B6:B16)\"\n\"B6*D6\"\n\"A11+1\"\n\"C16/B16\"\n\"AVERAGE(B6:B16)\"\n\"B6*D6\"\n\"A11+1\"\n\"C16/B16\"\n\"AVERAGE(B6:B16)\"\n\"N49*O49*Q49*R49\"\n\"D9-E9\"\n\"D9-E9\"\n\"D9-E9\"\n\"D9-E9\"\n\"D4+F4\"\n\"A4+7\"\n\"A17+7\"\n\"SUM(D4:D19)\"\n\"G4*I4\"\n\"I9\"\n\"SUM(J4:J45)\"\n\"SUM(J49:J57)\"\n\"A4+10\"\n\"A55+1\"\n\"A55+10\"\n\"G4*I4\"\n\"budget!A43\"\n\"K49*0.05\"\n\"SUM(J4:J48)\"\n\"SUM(J4:J49)\"\n\"187680+15000+750\"\n\"SUM(J54:J58)\"\n\"SUM(G67)\"\n\"SUM(G67:G76)\"\n\"H77*0.05\"\n\"SUM(G71:G79)\"\n\"SUM(I68:I81)\"\n\"I83/I68\"\n\"SUM(D89:F89)\"\n\"G89*3/13/5\"\n\"H89*$I$85\"\n\"ROUNDUP(I89,-1)\"\n\"SUM(F8)\"\n\"G18*0.05\"\n\"SUM(F8:F17)\"\n\"SUM(F12:F18)\"\n\"SUM(H9:H20)\"\n\"H22/H9\"\n\"SUM(C33:E33)\"\n\"F33*3/13/5\"\n\"G33*$H$24\"\n\"ROUNDUP(H33,-1)\"\n\"I42\"\n\"SUM(F5)\"\n\"G49\"\n\"G15*0.05\"\n\"SUM(F5:F14)\"\n\"SUM(F9:F15)\"\n\"SUM(H6:H17)\"\n\"H19/H6\"\n\"SUM(C26:E26)\"\n\"F26*12/52/5\"\n\"G26*$H$21\"\n\"ROUNDUP(H26,-1)\"\n\"SUM(G26:G29)\"\n\"G30*E64\"\n\"200/260\"\n\"E39*12\"\n\"A4\"\n\"SUM(F39:F41)\"\n\"C36\"\n\"G42*H42\"\n\"SUM(F43:F44)\"\n\"G42-I42\"\n\"G42-I42\"\n\"SUM(G45:G47)\"\n\"SUM(D48:D55)\"\n\"D57/D52\"\n\"H26\"\n\"I26\"\n\"H64*E64\"\n\"IF(OR($IA$4=\"\"\"\",B5=\"\"\"\"),\"\"\"\",$IA$4*B5)\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(OR($B$10=\"\"\"\",B13=\"\"\"\"),\"\"\"\",IF($B$10*B12=B13,\"\"○\"\",\"\"×\"\"))\"\n\"IF(OR($IA$4=\"\"\"\",B5=\"\"\"\"),\"\"\"\",$IA$4/B5)\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(C8=\"\"\"\",\"\"\"\",IF(C8=$IA$4,\"\"大当たり！\"\",\"\"はずれ！もう一度考えよう！\"\"))\"\n\"IF(OR($B$10=\"\"\"\",B13=\"\"\"\"),\"\"\"\",IF(ROUND($B$10/B12,1)=B13,\"\"○\"\",\"\"×\"\"))\"\n\"H5*I5\"\n\"N20*O20\"\n\"SUM(E7,F8,G8,H8)\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"C30*37\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"'Liquid-Fission Products'!B4+'Liquid-Dissolved Gases'!B4\"\n\"B4/37\"\n\"B4+B5\"\n\"B6+B7\"\n\"B8+B9\"\n\"B10+B11\"\n\"B12\"\n\"B13+B14\"\n\"B15+B16\"\n\"B17+B18\"\n\"B19+B20\"\n\"B21\"\n\"B23+B24\"\n\"C24+C23\"\n\"B25+B26\"\n\"B27\"\n\"B31+B32\"\n\"B33\"\n\"B35+B36\"\n\"B37+B38\"\n\"B39+B40\"\n\"B41+B42+B43\"\n\"B44\"\n\"B45+B46+B47\"\n\"B48+B49\"\n\"B50+B51\"\n\"B52\"\n\"B54+B55\"\n\"B56+B57+B58\"\n\"B59\"\n\"B60+B61\"\n\"B62+B63\"\n\"B64+B65\"\n\"B66\"\n\"B67+B68\"\n\"B69\"\n\"B71+B72\"\n\"B73+B74\"\n\"B75\"\n\"B79+B80\"\n\"E28-E26\"\n\"E26/0.87\"\n\"N26/0.89\"\n\"(D26/0.87)-D26\"\n\"4*SUM(C10:C13)/4\"\n\"SUM(D10:D13)\"\n\"4*SUM(C14:C17)/4\"\n\"SUM(D14:D17)\"\n\"SUM(D18:D21)\"\n\"4*SUM(C22:C25)/4\"\n\"SUM(D22:D25)\"\n\"4*SUM(C26:C29)/4\"\n\"SUM(D26:D29)\"\n\"AVERAGE(E26:E29)\"\n\"4*SUM(C30:C33)/4\"\n\"SUM(D30:D33)\"\n\"AVERAGE(E30:E33)\"\n\"4*SUM(C34:C37)/4\"\n\"SUM(D34:D37)\"\n\"AVERAGE(E34:E37)\"\n\"I60*('[1]Forecast Assumptions'!G21)^0.25\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"C4*37\"\n\"H4\"\n\"H5/3\"\n\"G5/K5\"\n\"H5/K5\"\n\"H5/3\"\n\"H5/3\"\n\"H6/2\"\n\"H6/2\"\n\"H7\"\n\"H9/2\"\n\"H10\"\n\"C18+C19\"\n\"H15\"\n\"C27+C28\"\n\"H16/2\"\n\"H16/2\"\n\"H17/2\"\n\"H18\"\n\"H21\"\n\"H22/2\"\n\"H22/2\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"H23\"\n\"H25/2\"\n\"H26\"\n\"H27/2\"\n\"H28\"\n\"H30\"\n\"'Liquid-Fission Products'!B4+'Liquid-Dissolved Gases'!B4\"\n\"B4\"\n\"B5/37\"\n\"B5+B6+B7\"\n\"G5/K5\"\n\"H5/K5\"\n\"B8+B9\"\n\"B10\"\n\"B12+B13\"\n\"B14\"\n\"B18+B19\"\n\"B20\"\n\"B21+B22\"\n\"B23+B24\"\n\"B25\"\n\"B27+B28\"\n\"B29\"\n\"B30+B31\"\n\"B32\"\n\"B34+B35\"\n\"B36\"\n\"B37+B38\"\n\"B39\"\n\"B44\"\n\"L4+L5+L6+L7+L8+L9+L10+L11+L12+L13+L14+L15+L16+L17+L18+L19+L20+L21+L22+L23+L24+L25+L26+L27+L28+L29+L30\"\n\"VLOOKUP(A2,CourseTitles!$A$1:$B$36,2)\"\n\"VLOOKUP(E2,SequenceTables!$A$1:$C$54,2)\"\n\"VLOOKUP(E2,SequenceTables!$A$1:$C$54,3)\"\n\"CourseList!A47\"\n\"CourseList!A22\"\n\"CourseList!A56\"\n\"CourseList!A23\"\n\"CourseList!A55\"\n\"CourseList!A24\"\n\"CourseList!A46\"\n\"CourseList!A26\"\n\"CourseList!A29\"\n\"CourseList!A53\"\n\"CourseList!A44\"\n\"CourseList!A18\"\n\"CourseList!A43\"\n\"CourseList!A50\"\n\"CourseList!A19\"\n\"CourseList!A31\"\n\"CourseList!A33\"\n\"CourseList!A3\"\n\"CourseList!A20\"\n\"CourseList!A32\"\n\"CourseList!A34\"\n\"CourseList!A41\"\n\"CourseList!A4\"\n\"CourseList!A36\"\n\"CourseList!A57\"\n\"CourseList!A48\"\n\"CourseList!A52\"\n\"SUM(B9:B29)\"\n\"SUM(B93:B117)\"\n\"SUM(B143:B144)\"\n\"SUM(B150:C150)\"\n\"VLOOKUP(A2,CourseTitles!$A$1:$B$36,2)\"\n\"VLOOKUP(E2,SequenceTables!$A$1:$C$54,2)\"\n\"VLOOKUP(E2,SequenceTables!$A$1:$C$54,3)\"\n\"CourseList!A37\"\n\"CourseList!A18\"\n\"CourseList!A48\"\n\"CourseList!A53\"\n\"CourseList!A20\"\n\"CourseList!A54\"\n\"CourseList!A22\"\n\"CourseList!A45\"\n\"CourseList!A23\"\n\"CourseList!A36\"\n\"CourseList!A47\"\n\"CourseList!A55\"\n\"CourseList!A44\"\n\"CourseList!A51\"\n\"CourseList!A25\"\n\"CourseList!A3\"\n\"CourseList!A28\"\n\"CourseList!A49\"\n\"CourseList!A4\"\n\"CourseList!A41\"\n\"CourseList!A30\"\n\"E16+G16+I16\"\n\"+I15*0.164\"\n\"E16+G16+I16\"\n\"F19*E16\"\n\"K19/K16*1\"\n\"F27*E16\"\n\"K27/K16*1\"\n\"F34*E16\"\n\"K34/K16*1\"\n\"F43*E16\"\n\"K43/K16*1\"\n\"E19+E27+E34+E43\"\n\"K44+K35+K28+K20\"\n\"NOW()\"\n\"TODAY()\"\n\"+'DIR Wksht#1'!E1\"\n\"E16+G16+I16\"\n\"+E16+G16+I16\"\n\"F19*E16\"\n\"L19/L16*1\"\n\"F20*E19\"\n\"+L20/L16\"\n\"F21*E19\"\n\"+L21/L16\"\n\"+L22/L16\"\n\"F23*E19\"\n\"+L23/L16\"\n\"SUM(E20:E23)\"\n\"F27*E16\"\n\"L27/L16*1\"\n\"+L28/L16\"\n\"+L29/L16\"\n\"+L30/L16\"\n\"SUM(E28:E30)\"\n\"F34*E16\"\n\"L34/L16*1\"\n\"+L36/L16\"\n\"+L37/L16\"\n\"+L38/L16\"\n\"F43*E16\"\n\"L43/L16*1\"\n\"+L44/L16\"\n\"+L45/L16\"\n\"SUM(E44:E45)\"\n\"+E19+E34+E43+E27\"\n\"+L19+L27+L34+L43\"\n\"L49/L16*1\"\n\"E49+G49+I49\"\n\"NOW()\"\n\"TODAY()\"\n\"+'DIR Wksht#1'!E1\"\n\"+'DIR Wksht#2'!E6\"\n\"+'DIR Wksht#2'!L19\"\n\"+'DIR Wksht#2'!L27\"\n\"+'DIR Wksht#2'!L34\"\n\"+'DIR Wksht#2'!L43\"\n\"+B5+D5+F5+H5\"\n\"+'DIR Wksht#2'!L20+'DIR Wksht#2'!L21\"\n\"+'DIR Wksht#2'!L28+'DIR Wksht#2'!L29\"\n\"+'DIR Wksht#2'!L37+'DIR Wksht#2'!L36\"\n\"+'DIR Wksht#2'!L44\"\n\"+'DIR Wksht#2'!L20\"\n\"+'DIR Wksht#2'!L28\"\n\"+'DIR Wksht#2'!L36\"\n\"+J14/J15\"\n\"SUM(J5:J13)\"\n\"+'DIR Wksht#2'!G6\"\n\"+'DIR Wksht#1'!E1\"\n\"+'DIR Wksht#2'!E6\"\n\"+I14\"\n\"+'DIR Wksht#1'!G16\"\n\"+'DIR Wksht#1'!F16\"\n\"E14+G14\"\n\"+'DIR Wksht#1'!G19\"\n\"+E19\"\n\"G14*H25\"\n\"+G25\"\n\"+'DIR Wksht#1'!G27\"\n\"G14*H47\"\n\"+'DIR Wksht#1'!G34\"\n\"G14*H67\"\n\"+'DIR Wksht#1'!G43\"\n\"G14*H90\"\n\"++E19+E42+E60+E84\"\n\"F19+F42+F60+F84\"\n\"+G25+G47+G67+G90\"\n\"SUM(I19:I99)\"\n\"E101+G101\"\n\"NOW()\"\n\"TODAY()\"\n\"COUNT(Inventory!K2:K2234)\"\n\"SUM(Inventory!K2:K2234)/1000\"\n\"COUNT(Inventory!K2762:K3378)\"\n\"SUM(Inventory!K2762:K3378)/1000\"\n\"COUNT(Inventory!K2235:K2761)\"\n\"SUM(Inventory!K2235:K2761)/1000\"\n\"COUNT(Inventory!K3513:K3871)\"\n\"SUM(Inventory!K3513:K3871)/1000\"\n\"COUNT(Inventory!K3379:K3512)\"\n\"SUM(Inventory!K3379:K3512)/1000\"\n\"COUNT(Inventory!K3949:K4038)\"\n\"SUM(Inventory!K3949:K4038)/1000\"\n\"COUNT(Inventory!K4208:K4273)\"\n\"SUM(Inventory!K4208:K4273)/1000\"\n\"COUNT(Inventory!K3872:K3948)\"\n\"SUM(Inventory!K3872:K3948)/1000\"\n\"COUNT(Inventory!K4341:K4380)\"\n\"SUM(Inventory!K4341:K4380)/1000\"\n\"COUNT(Inventory!K4139:K4177)\"\n\"SUM(Inventory!K4139:K4177)/1000\"\n\"COUNT(Inventory!K4039:K4083)\"\n\"SUM(Inventory!K4039:K4083)/1000\"\n\"COUNT(Inventory!K4287:K4325)\"\n\"SUM(Inventory!K4287:K4325)/1000\"\n\"COUNT(Inventory!K4084:K4117)\"\n\"SUM(Inventory!K4084:K4117)/1000\"\n\"COUNT(Inventory!K4178:K4198)\"\n\"SUM(Inventory!K4178:K4198)/1000\"\n\"COUNT(Inventory!K4202:K4207)\"\n\"SUM(Inventory!K4202:K4207)/1000\"\n\"COUNT(Inventory!K4393:K4405)\"\n\"SUM(Inventory!K4393:K4405)/1000\"\n\"COUNT(Inventory!K4118:K4128)\"\n\"SUM(Inventory!K4118:K4128)/1000\"\n\"COUNT(Inventory!K4274:K4286)\"\n\"SUM(Inventory!K4274:K4286)/1000\"\n\"COUNT(Inventory!K4129:K4136)\"\n\"SUM(Inventory!K4129:K4136)/1000\"\n\"COUNT(Inventory!K4381:K4389)\"\n\"SUM(Inventory!K4381:K4389)/1000\"\n\"COUNT(Inventory!K4326:K4333)\"\n\"SUM(Inventory!K4326:K4333)/1000\"\n\"COUNT(Inventory!K4337:K4339)\"\n\"SUM(Inventory!K4337:K4339)/1000\"\n\"COUNT(Inventory!K4199:K4201)\"\n\"SUM(Inventory!K4199:K4201)/1000\"\n\"COUNT(Inventory!K4334:K4336)\"\n\"SUM(Inventory!K4334:K4336)/1000\"\n\"COUNT(Inventory!K4390:K4392)\"\n\"SUM(Inventory!K4390:K4392)/1000\"\n\"COUNT(Inventory!K4340)\"\n\"SUM(Inventory!K4340)/1000\"\n\"COUNT(Inventory!K4137:K4138)\"\n\"SUM(Inventory!K4137:K4138)/1000\"\n\"COUNT(Inventory!K4448:K4803)\"\n\"SUM(Inventory!K4448:K4803)/1000\"\n\"COUNT(Inventory!K4818:K4847)\"\n\"SUM(Inventory!K4818:K4847)/1000\"\n\"COUNT(Inventory!K4406:K4447)\"\n\"SUM(Inventory!K4406:K4447)/1000\"\n\"COUNT(Inventory!K4848:K4907)\"\n\"SUM(Inventory!K4848:K4907)/1000\"\n\"COUNT(Inventory!K4811:K4817)\"\n\"SUM(Inventory!K4811:K4817)/1000\"\n\"COUNT(Inventory!K4804:K4810)\"\n\"SUM(Inventory!K4804:K4810)/1000\"\n\"SUM(C4:C38)\"\n\"L2+M2*(2/3)+N2*(2/3)\"\n\"(22.35+16.87+16.3+16.79)/4\"\n\"(36.16+33+29.44+27.66)/4\"\n\"SUM(C16*C19)\"\n\"+C16*C22\"\n\"+C25+C28\"\n\"+C36+C38\"\n\"SUM(C31+C40)/C14\"\n\"SUM(C19*C22)\"\n\"+C19*C25\"\n\"+C19*C28\"\n\"+C31+C34+C37\"\n\"+C45+C47\"\n\"SUM(C40+C49)/C17\"\n\"SUM(C16*C19)\"\n\"+C16*C22\"\n\"+C25+C28\"\n\"+C36+C38\"\n\"SUM(C31+C40)/C14\"\n\"F12+E12+D12+C12\"\n\"2+I22\"\n\"72+I33\"\n\"SUM(C36:F36)\"\n\"4+I38\"\n\"F70+E70+D70+C70\"\n\"11+I55\"\n\"F80+E80+D80+C80\"\n\"19+I64\"\n\"16+I70\"\n\"F84+E84+D84+C84\"\n\"6+I80\"\n\"F99+E99+D99+C99\"\n\"F101+E101+D101+C101\"\n\"13+I88\"\n\"F102+E102+D102+C102\"\n\"F116+E116+D116+C116\"\n\"18+I108\"\n\"F119+E119+D119+C119\"\n\"SUM(1+A3)\"\n\"SUM(1+B3)\"\n\"150-4.5\"\n\"120-2.4\"\n\"65-1.3\"\n\"45-0.9\"\n\"3000+8*350+2500\"\n\"SUM(F5:F123)\"\n\"0.6*82906340\"\n\"E6/G6\"\n\"SUM(E6:E13)\"\n\"E6*(C17/100)\"\n\"E25*0.5\"\n\"E25*(1-0.5)\"\n\"E28/E4\"\n\"(E4*(0.343)-E28)\"\n\"E32*479\"\n\"E33*67\"\n\"E32*636\"\n\"E32*20\"\n\"0.6*E1\"\n\"SUM(E5:E12)\"\n\"E5*(C16/100)\"\n\"E24*0.5\"\n\"E24*(1-0.5)\"\n\"E27/E3\"\n\"(E3*(0.426)-E27)\"\n\"E31*479\"\n\"E31*20\"\n\"0.6*E1\"\n\"SUM(E5:E12)\"\n\"E5*(C16/100)\"\n\"E24*0.5\"\n\"E24*(1-0.5)\"\n\"E27/E3\"\n\"(E3*(0.295)-E27)\"\n\"E31*479\"\n\"E31*20\"\n\"0.6*D4\"\n\"D9/F9\"\n\"G9*1000/1.12/60\"\n\"G10*1000/1.12/56\"\n\"SUM(D9:D16)\"\n\"D9*(B20/100)\"\n\"D28*0.5\"\n\"D28*(1-0.5)\"\n\"D31/D6\"\n\"D31/(40000000*0.6)\"\n\"33166205*550\"\n\"(D6*(0.343)-D31)\"\n\"D44*479\"\n\"D45*67\"\n\"D44*550\"\n\"D44*20\"\n\"IF(D9=\"\"\"\",\"\"\"\",IF(VLOOKUP(D9,'One Country Data'!M5:N187,2,FALSE)=1,VLOOKUP(VLOOKUP(D9,'One Country Data'!M5:O187,3,FALSE),'One Country Data'!L5:M187,2,FALSE),\"\"\"\"))\"\n\"IF(D9=\"\"\"\",\"\"\"\",IF(VLOOKUP(D9,'One Country Data'!M5:N187,2,FALSE)=1,VLOOKUP(VLOOKUP(D9,'One Country Data'!M5:O187,3,FALSE),'One Country Data'!L5:M187,2,FALSE),\"\"\"\"))\"\n\"IF(D9=\"\"\"\",\"\"\"\",IF(VLOOKUP(D9,'One Country Data'!M5:N187,2,FALSE)=1,VLOOKUP(VLOOKUP(D9,'One Country Data'!M5:O187,3,FALSE),'One Country Data'!L5:M187,2,FALSE),\"\"\"\"))\"\n\"IF(D9=\"\"\"\",\"\"\"\",IF(VLOOKUP(D9,'One Country Data'!M5:N187,2,FALSE)=1,VLOOKUP(VLOOKUP(D9,'One Country Data'!M5:O187,3,FALSE),'One Country Data'!L5:M187,2,FALSE),\"\"\"\"))\"\n\"IF(E15=\"\"\"\",\"\"\"\",VLOOKUP(E15,'One Country Data'!L5:M187,2,FALSE))\"\n\"IF(E15=\"\"\"\",\"\"\"\",VLOOKUP(E15,'One Country Data'!L5:M187,2,FALSE))\"\n\"IF(E15=\"\"\"\",\"\"\"\",VLOOKUP(E15,'One Country Data'!L5:M187,2,FALSE))\"\n\"IF(E15=\"\"\"\",\"\"\"\",VLOOKUP(E15,'One Country Data'!L5:M187,2,FALSE))\"\n\"IF('One Country Charts'!F17=\"\"\"\",VLOOKUP('One Country Charts'!F11,'One Country Data'!M5:O187,3,FALSE),VLOOKUP('One Country Charts'!F17,'One Country Data'!M5:O187,3,FALSE))\"\n\"VLOOKUP(B4,$L$5:$M$187,2,FALSE)\"\n\"$B$5\"\n\"C5\"\n\"IF(F6=\"\"..\"\",\"\"\"\",F6)\"\n\"VLOOKUP($B$4,$O$5:$AG$187,'One Country Data'!$A6,FALSE)\"\n\"IF(F6=\"\"..\"\",\"\"..\"\",VLOOKUP($B$4,$O$5:$AG$187,'One Country Data'!$A6+6,FALSE)-F6)\"\n\"IF(F6=\"\"..\"\",\"\"..\"\",F6-VLOOKUP($B$4,$O$5:$AG$187,'One Country Data'!$A6+12,FALSE))\"\n\"MAX(C6-E6,0)\"\n\"MIN(C6+D6,100)\"\n\"SUMIF($AJ$5:$AJ$182,1,P$5:P$182)/SUMIF($AJ$5:$AJ$182,1)\"\n\"SUMIF($AK$5:$AK$182,1,P$5:P$182)/SUMIF($AK$5:$AK$182,1)\"\n\"SUMIF($AL$5:$AL$182,1,P$5:P$182)/SUMIF($AL$5:$AL$182,1)\"\n\"SUMIF($AM$5:$AM$182,1,P$5:P$182)/SUMIF($AM$5:$AM$182,1)\"\n\"SUMIF($AN$5:$AN$182,1,P$5:P$182)/SUMIF($AN$5:$AN$182,1)\"\n\"R5\"\n\"1.64*S8\"\n\"IF(VLOOKUP(Q8,$C$9:$D$186,2,FALSE)=1,T8,NA())\"\n\"IF(ISNA(U8)=TRUE,\"\"\"\",Q8)\"\n\"IF('Comparative Charts'!D20=\"\"\"\",\"\"\"\",1)\"\n\"100*(1465508/1381608)\"\n\"100*(1555912/1381608)\"\n\"100*(1808747/1381608)\"\n\"100*(2285032/1381608)\"\n\"100*(2244689/1381608)\"\n\"100*(2320435/1381608)\"\n\"100*(2604090/1381608)\"\n\"100*(2744529/1381608)\"\n\"100*(2889289/1381608)\"\n\"100*(3049520/1381608)\"\n\"100*(3117063/1381608)\"\n\"100*((3117063-77928)/1381608)\"\n\"100*(3381812/1381608)\"\n\"100*((3381812-118894)/1381608)\"\n\"100*(3617609/1381608)\"\n\"100*((3617609-228412)/1381608)\"\n\"100*(3705644/1381608)\"\n\"100*((3705644-216646)/1381608)\"\n\"100*(3946405/1381608)\"\n\"100*((3946405-277743)/1381608)\"\n\"100*(4274890/1381608)\"\n\"100*((4274890-330917)/1381608)\"\n\"100*(4963332/1381608)\"\n\"100*((4963332-698919)/1381608)\"\n\"100*(5690454/1381608)\"\n\"100*((5690454-1037821)/1381608)\"\n\"16086/4\"\n\"16086*0.02+16086\"\n\"C20+(C20*0.02)\"\n\"E20+(E20*0.023)\"\n\"(H20+(H20*0.02))*0.75\"\n\"2080/4\"\n\"2080*0.02+2080\"\n\"2424/4\"\n\"2424*0.02+2424\"\n\"2239/4\"\n\"2239*0.02+2239\"\n\"45521/4\"\n\"45521*0.02+45521\"\n\"128268/4\"\n\"128268*0.02+128268\"\n\"95813/4\"\n\"95813*0.02+95813\"\n\"4160/4\"\n\"4160*0.02+4160\"\n\"46374/4\"\n\"46374*0.02+46374\"\n\"1000/4\"\n\"1000*0.02+1000\"\n\"13082/4\"\n\"13082*0.02+13082\"\n\"8708/4\"\n\"8708*0.02+8708\"\n\"16213/4\"\n\"16213*0.02+16213\"\n\"8320/4\"\n\"8320*0.02+8320\"\n\"47535/4\"\n\"47535*0.02+47535\"\n\"18720/4\"\n\"18720*0.02+18720\"\n\"14560/4\"\n\"14560*0.02+14560\"\n\"4160+2080/4\"\n\"6240*0.02+6240\"\n\"3876/4\"\n\"3876*0.02+3876\"\n\"14453/4\"\n\"14453*0.02+14453\"\n\"9026/4\"\n\"9026*0.02+9026\"\n\"66526/4\"\n\"66526*0.02+66526\"\n\"17636/4\"\n\"17636*0.02+17636\"\n\"97954/4\"\n\"97954*0.02+97954\"\n\"117873/4\"\n\"117873*0.02+117873\"\n\"9377/4\"\n\"9377*0.02+9377\"\n\"2604/4\"\n\"2604*0.02+2604\"\n\"12480/4\"\n\"12480*0.02+12480\"\n\"40417/4\"\n\"40417*0.02+40417\"\n\"31583/4\"\n\"31583*0.02+31583\"\n\"4518/4\"\n\"4518*0.02+4518\"\n\"7560/4\"\n\"7560*0.02+7560\"\n\"60830/4\"\n\"60830*0.02+60830\"\n\"87176/4\"\n\"87176*0.02+87176\"\n\"49570/4\"\n\"49570*0.02+49570\"\n\"SUM(D20:D73)\"\n\"SUM(B74:I74)\"\n\"B5+(B5*0.02)\"\n\"K5+(K5*0.023)\"\n\"SUM(E5:E58)\"\n\"B7+(B7*0.02)\"\n\"K7+(K7*0.023)\"\n\"SUM(E7:E60)\"\n\"B6+(B6*0.02)\"\n\"K6+(K6*0.023)\"\n\"SUM(B6:B59)\"\n\"SUM(B60:T60)\"\n\"SUM(D10:D10)\"\n\"SUM(C10:C11)\"\n\"C13-D13\"\n\"SUBTOTAL(9,C13:C27)\"\n\"SUM(G10:G27)\"\n\"E28+G28\"\n\"+C28+C12\"\n\"+C12/C29\"\n\"+C3+1\"\n\"+C5+C9\"\n\"+C8+C10\"\n\"+C8+C9+C43+C48+C54+C55\"\n\"SUM(C12:C23)\"\n\"+C11\"\n\"+C27\"\n\"+C33\"\n\"SUM(C12:C26)\"\n\"+A12+1\"\n\"+[1]A.5.3.!C13/HV_gen\"\n\"SUM(C28:C32)\"\n\"+A26+1\"\n\"SUM(C34:C55)\"\n\"+C3+1\"\n\"IF([1]Removals_adapted!C4=0,\"\"\"\",IF([1]A.5.1.!C4=0,\"\"\"\",+[1]A.5.1._adapted!C4/[1]Removals_adapted!C4*100))\"\n\"+A12+1\"\n\"+A26+1\"\n\"+C3+1\"\n\"+C5+C9\"\n\"+C8+C10\"\n\"+C8+C9+C43+C48+C54+C55\"\n\"SUM(C12:C23)\"\n\"+C11\"\n\"+C27\"\n\"+C33\"\n\"SUM(C12:C26)\"\n\"+A12+1\"\n\"SUM(C28:C32)\"\n\"+A26+1\"\n\"SUM(C34:C55)\"\n\"+C3+1\"\n\"IF([1]Total_Energy_adapted!C4=0,\"\"\"\",IF([1]A.5.3.!C4=\"\"\"\",\"\"\"\",+[1]A.5.3._adapted!C4/[1]Total_Energy_adapted!C4*100))\"\n\"+A12+1\"\n\"+A26+1\"\n\"+C8+C12\"\n\"+C11+C13\"\n\"+C11+C12+C46+C51+C57+C58\"\n\"SUM(C15:C26)\"\n\"+C14\"\n\"+C30\"\n\"+C36\"\n\"SUM(C15:C29)\"\n\"+[1]A.5.6.!C15/HV_gen\"\n\"+A15+1\"\n\"SUM(C31:C35)\"\n\"+A29+1\"\n\"SUM(C37:C58)\"\n\"+C8+C12\"\n\"+C11+C13\"\n\"+C11+C12+C46+C51+C57+C58\"\n\"SUM(C15:C26)\"\n\"+C14\"\n\"+C30\"\n\"+C36\"\n\"SUM(C15:C29)\"\n\"+A15+1\"\n\"SUM(C31:C35)\"\n\"+A29+1\"\n\"SUM(C37:C58)\"\n\"+C6+C10\"\n\"+C9+C11\"\n\"+C9+C10+C44+C49+C55+C56\"\n\"SUM(C13:C24)\"\n\"+C12\"\n\"+C28\"\n\"+C34\"\n\"SUM(C13:C27)\"\n\"+A13+1\"\n\"+F14+I14+L14+O14\"\n\"+[1]A.5.8.!F14/HV_gen\"\n\"SUM(C29:C33)\"\n\"+A27+1\"\n\"SUM(C35:C56)\"\n\"+C6+C10\"\n\"+C9+C11\"\n\"+C9+C10+C44+C49+C55+C56\"\n\"SUM(C13:C24)\"\n\"+C12\"\n\"+C28\"\n\"+C34\"\n\"SUM(C13:C27)\"\n\"+F13+I13+L13+O13\"\n\"+A13+1\"\n\"SUM(C29:C33)\"\n\"+A27+1\"\n\"SUM(C35:C56)\"\n\"SUM(G5:G72)\"\n\"SUM(K6:K72)\"\n\"SUM(J8:J28)\"\n\"VLOOKUP(WEEKDAY(B2),days!$A$1:$B$7,2,FALSE)\"\n\"B2+2\"\n\"B2+7\"\n\"B18+5\"\n\"VLOOKUP(WEEKDAY(B7),days!$A$1:$B$7,2,FALSE)\"\n\"B7+2\"\n\"B7+7\"\n\"B23+5\"\n\"IF((C7>0),C7/3.78541,\"\" \"\")\"\n\"IF(E7>0,E7-E6,\"\" \"\")\"\n\"IF(AND(D7<>\"\" \"\",G7<>\"\" \"\"),(G7*1.609)/D7,IF(AND(D7<>\"\" \"\",H7<>\"\" \"\"),H7/D7,\"\" \"\"))\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"SUM(N7:N1000)\"\n\"SUM(N7:N1000)\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"Mileage!B2\"\n\"SUM(E6:E1000)\"\n\"SUM(E6:E1000)\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"'Supplies & Parts'!B2:F2\"\n\"IF(OR(B7,E7,H7,K7,N7,Q7,T7,W7,Z7,AC7),\"\"M\"\",\"\"OK\"\")\"\n\"TODAY()\"\n\"IF(MAX(Mileage!E6:E100)>0,MAX(Mileage!E6:E100),IF(MAX(Mileage!F6:F100)>0,MAX(Mileage!F6:F100),0))\"\n\"IF(MAX(Mileage!E6:E100)>0,MAX(Mileage!E6:E100),IF(MAX(Mileage!F6:F100)>0,MAX(Mileage!F6:F100),0))\"\n\"IF(OR(MAX(Mileage!E6:E100)>0,MAX(Mileage!F6:F100)>0),\"\" \"\",\"\"Enter odometer reading on Mileage tab.\"\")\"\n\"IF(OR(MAX(Mileage!E6:E100)>0,MAX(Mileage!F6:F100)>0),\"\" \"\",\"\"Enter odometer reading on Mileage tab.\"\")\"\n\"TODAY()-MAX(B10:B99)>(30*B5)\"\n\"TODAY()-MAX(K10:K99)>(365*K5)\"\n\"Odometer-MAX(Q10:Q99)>(Q5)\"\n\"Odometer-MAX(T12:T24)>(T5)\"\n\"($Q$3 - MAX(W12:W99))>(W5)\"\n\"\"\"Business News & News Service: \"\"&\"\"9/2/97 TO PRESENT\"\"\"\n\"SUM(J3:J127)\"\n\"SUM(AG9:AN9)\"\n\"+AU9-AU10\"\n\"B12*C12\"\n\"SUM(D12:D27)\"\n\"F7-E7\"\n\"J4+G7\"\n\"J7+G8\"\n\"J8-E8+F8\"\n\"J9-E10+F10\"\n\"B28-B8+(0.2*B28)\"\n\"'Budget 2001'!B25\"\n\"SUM(B5:B8)\"\n\"'Budget 2001'!B14*2\"\n\"5000\"\n\"3000*12\"\n\"0.2*B14\"\n\"833.33*12\"\n\"(0.2*B17)+(0.1*B17)\"\n\"22000\"\n\"1*B12\"\n\"B35\"\n\"150*50\"\n\"3000\"\n\"600\"\n\"SUM(B13:B27)\"\n\"(45*12+(3*10*12))*1.2\"\n\"B28-B8+(0.2*B28)\"\n\"'Budget 2002'!B9-'Budget 2002'!B28\"\n\"SUM(B5:B8)\"\n\"'Budget 2001'!B14*2*2\"\n\"5000*1.25\"\n\"6000*12\"\n\"0.2*B14\"\n\"3000*2\"\n\"833.33*12*2\"\n\"(0.2*B17)+(0.1*B17)\"\n\"22000*2\"\n\"1200*2\"\n\"1*B12\"\n\"B35\"\n\"'Budget 2002'!B24*2\"\n\"1500*1.5\"\n\"600*1.2\"\n\"SUM(B13:B27)\"\n\"7500*1.5\"\n\"((45*12+(3*10*12))*1.2)*2\"\n\"B30-B8+(0.1*B30)\"\n\"'Budget 2003'!B9-'Budget 2003'!B28\"\n\"SUM(B5:B8)\"\n\"'Budget 2001'!B14*2*2*2\"\n\"5000*1.25*1.25\"\n\"9000*12\"\n\"0.2*B14\"\n\"3000*2*2\"\n\"833.33*12*2*2\"\n\"(0.2*B17)+(0.1*B17)\"\n\"22000*2*1.5\"\n\"1200*2*2\"\n\"120000*0.5\"\n\"1*B12\"\n\"B37\"\n\"'Budget 2002'!B24*2*2\"\n\"1500*1.5*1.5\"\n\"600*1.2*1.2\"\n\"SUM(B13:B29)\"\n\"7500*1.5*1.5\"\n\"((45*12+(3*10*12))*1.2)*2*1.25\"\n\"580*1.25\"\n\"3000*1.2\"\n\"B30-B8+(0.1*B30)\"\n\"'Budget 2004'!B9-'Budget 2004'!B30\"\n\"SUM(B5:B8)\"\n\"'Budget 2001'!B14*2*2*2*2\"\n\"5000*1.25*1.25*1.25\"\n\"10000*12\"\n\"0.2*B14\"\n\"3000*2*2*1.2\"\n\"833.33*12*2*2*1.1\"\n\"(0.2*B17)+(0.1*B17)\"\n\"22000*2*1.5*1.1\"\n\"1200*2*2\"\n\"120000*0.5*1.25\"\n\"1*B12\"\n\"B37\"\n\"'Budget 2002'!B24*2*2\"\n\"1500*1.5*1.5*1.2\"\n\"'Budget 2002'!B26*2*2*1.2\"\n\"600*1.2*1.2*1.2\"\n\"SUM(B13:B29)\"\n\"7500*1.5*1.5*1.2\"\n\"((45*12+(3*10*12))*1.2)*2*1.25*1.1\"\n\"580*1.25*1.2\"\n\"3000*1.2\"\n\"AVERAGE(K4:K381)\"\n\"C737+1\"\n\"D9*H9\"\n\"SUM(D9:D16)\"\n\"F18/D18\"\n\"4*45\"\n\"81992+8199+11479+13119+65593\"\n\"SUM(I9:L9)\"\n\"122988+6559+29517+29517\"\n\"50000+40000+50000\"\n\"10000+30000+20000\"\n\"40996+37680+8199+12422\"\n\"8199\"\n\"20000+20000\"\n\"30000+20000\"\n\"SUM(B5:L5)\"\n\"SUM(B6:K6)\"\n\"SUM(D5:F5)\"\n\"SUM(B10:C10)\"\n\"SUM(B11:G11)\"\n\"SUM(G12:H12)\"\n\"SUM(F9:F12)\"\n\"IF(AND(Status!G10=\"\"distributed locations\"\",Status!G11=\"\"stand-alone hub\"\"),\"\"Imaging at distributed locations with a stand-alone hub configuration is not feasible.  Modify your selection.\"\",\"\"  \"\")\"\n\"IF(AND(Status!G10=\"\"distributed locations\"\",Status!G11=\"\"stand-alone hub\"\"),\"\"Imaging at distributed locations with a stand-alone hub configuration is not feasible.  Modify your selection.\"\",\"\"  \"\")\"\n\"ROUND((60/(D11+D12+D14))*8,0)\"\n\"ROUND((60/(D11+D13+D14))*8,0)\"\n\"ROUND((60/(D11+D12+D13+D14))*8,0)\"\n\"Status!G9\"\n\"IF(C25=\"\"Shell casings only\"\",IF(Status!D26=\"\"default used\"\",'Performance Assumptions'!D17,'Performance Assumptions'!E17),IF('Performance Assumptions'!C25=\"\"Bullets only\"\",IF(Status!D26=\"\"default used\"\",'Performance Assumptions'!D18,'Performance Assumptions'!E18),IF(Status!D26=\"\"default used\"\",'Performance Assumptions'!D19,'Performance Assumptions'!E19)))\"\n\"ROUND((60/SUM(D35:D37))*((8-(D38/60))),0)\"\n\"ROUND((60/SUM(D35:D37))*8,0)\"\n\"Status!G14\"\n\"IF(C48=\"\"mobile operation\"\",IF(Status!D27=\"\"default used\"\",'Performance Assumptions'!D41,'Performance Assumptions'!E41),IF(Status!D27=\"\"default used\"\",'Performance Assumptions'!D42,'Performance Assumptions'!E42))\"\n\"IF(AND(D57<1,OR(Status!F10=2,Status!F14=2))=TRUE,\"\"Error:  Distance must be more than one mile\"\",\"\" \"\")\"\n\"Calculations!B225\"\n\"IF(Status!D28=\"\"model estimate used\"\",'Performance Assumptions'!D59,'Performance Assumptions'!D61)\"\n\"IF(Status!F10=2,'Performance Assumptions'!D66,1)\"\n\"IF(Status!F14=2,'Performance Assumptions'!D66,1)\"\n\"IF(G8=1,C8,D8)\"\n\"C10\"\n\"3000*12\"\n\"36000\"\n\"45000\"\n\"88000\"\n\"Calculations!B226\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!A161,IF(Status!G11=\"\"remote\"\",Calculations!A182,Calculations!A203))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!A161,IF(Status!G11=\"\"remote\"\",Calculations!A182,Calculations!A203))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!A161,IF(Status!G11=\"\"remote\"\",Calculations!A182,Calculations!A203))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B163,IF(Status!G11=\"\"remote\"\",Calculations!B184,Calculations!B205))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B163:P163),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B184:P184),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B205:P205)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B164,IF(Status!G11=\"\"remote\"\",Calculations!B185,Calculations!B206))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B164:P164),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B185:P185),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B206:P206)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B169+Calculations!B170,IF(Status!G11=\"\"remote\"\",Calculations!B190+Calculations!B191,Calculations!B211+Calculations!B212))\"\n\"(IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B169:P169),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B190:P190),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B211:P211))))+(IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B170:P170),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B191:P191),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B212:P212))))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B171,IF(Status!G11=\"\"remote\"\",Calculations!B192,Calculations!B213))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B171:P171),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B192:P192),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B213:P213)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B175,IF(Status!G11=\"\"remote\"\",Calculations!B196,Calculations!B217))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B180:P180),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B201:P201),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B222:P222)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B165,IF(Status!G11=\"\"remote\"\",Calculations!B186,Calculations!B207))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B165:P165),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B186:P186),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B207:P207)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B166,IF(Status!G11=\"\"remote\"\",Calculations!B187,Calculations!B208))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B166:P166),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B187:P187),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B208:P208)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B167,IF(Status!G11=\"\"remote\"\",Calculations!B188,Calculations!B209))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B167:P167),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B188:P188),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B209:P209)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B168,IF(Status!G11=\"\"remote\"\",Calculations!B189,Calculations!B210))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B168:P168),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B189:P189),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B210:P210)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B176,IF(Status!G11=\"\"remote\"\",Calculations!B197,Calculations!B218))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B176:P176),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B197:P197),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B218:P218)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B177,IF(Status!G11=\"\"remote\"\",Calculations!B198,Calculations!B219))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B177:P177),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B198:P198),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B219:P219)))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B178,IF(Status!G11=\"\"remote\"\",Calculations!B199,Calculations!B220))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B178:P178),IF(Status!G11=\"\"remote\"\",SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B199:P199),SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B220:P220)))\"\n\"Calculations!B123\"\n\"IF(E42>1,IF(E42>Calculations!B33,\"\"Number of shifts exceeds number of FTE lab technicians needed to satisfy workload.  Go to Background State Information sheet and enter a smaller number of shifts.\"\",\"\"  \"\"),\"\"  \"\")\"\n\"IF(E42>1,IF(E42>Calculations!B33,\"\"Number of shifts exceeds number of FTE lab technicians needed to satisfy workload.  Go to Background State Information sheet and enter a smaller number of shifts.\"\",\"\"  \"\"),\"\"  \"\")\"\n\"IF(E42>1,IF(E42>Calculations!B33,\"\"Number of shifts exceeds number of FTE lab technicians needed to satisfy workload.  Go to Background State Information sheet and enter a smaller number of shifts.\"\",\"\"  \"\"),\"\"  \"\")\"\n\"IF(Calculations!B87>Calculations!B33,\"\"Number of FTE lab technicians needed to staff all locations exceeds number of FTEs to satisfy workload.  Go to Background State Information to select a central imaging operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"IF(Calculations!B87>Calculations!B33,\"\"Number of FTE lab technicians needed to staff all locations exceeds number of FTEs to satisfy workload.  Go to Background State Information to select a central imaging operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"IF(Calculations!B87>Calculations!B33,\"\"Number of FTE lab technicians needed to staff all locations exceeds number of FTEs to satisfy workload.  Go to Background State Information to select a central imaging operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"IF(Calculations!B89>Calculations!B34,\"\"Number of test fire personnel needed to staff all locations exceeds number to satisfy workload.  Go to Background State Information to select central or mobile test fire operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"IF(Calculations!B89>Calculations!B34,\"\"Number of test fire personnel needed to staff all locations exceeds number to satisfy workload.  Go to Background State Information to select central or mobile test fire operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"IF(Calculations!B89>Calculations!B34,\"\"Number of test fire personnel needed to staff all locations exceeds number to satisfy workload.  Go to Background State Information to select central or mobile test fire operation or go to Performance Assumptions to reduce the number of locations.\"\",\"\"  \"\")\"\n\"Calculations!B226\"\n\"Status!G9\"\n\"Status!G9\"\n\"Status!F12\"\n\"Status!G14\"\n\"Status!G14\"\n\"Status!G16\"\n\"Status!G16\"\n\"'Performance Assumptions'!D69\"\n\"'Performance Assumptions'!D69\"\n\"'Misc Parameters'!F8\"\n\"'Misc Parameters'!F8\"\n\"'Misc Parameters'!F14\"\n\"'Misc Parameters'!F14\"\n\"Calculations!B226\"\n\"Calculations!B226\"\n\"Calculations!B226\"\n\"Calculations!A87\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B33,Calculations!B87)\"\n\"Calculations!B99\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B99:P99)\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B35,Calculations!B88)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B100:P100)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B101:P101)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B102:P102)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B103:P103)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B104:P104)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B105:P105)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B106:P106)\"\n\"SUMIF(Calculations!B7:P7,\"\"include\"\",Calculations!B107:P107)\"\n\"SUM(F9:F17)\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B138,IF(Status!G11=\"\"remote\"\",Calculations!C138,Calculations!D138))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B138,IF(Status!G11=\"\"remote\"\",Calculations!C138,Calculations!D138))\"\n\"E23*'Cost Assumptions'!C10\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B139,IF(Status!G11=\"\"remote\"\",Calculations!C139,Calculations!D139))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B139,IF(Status!G11=\"\"remote\"\",Calculations!C139,Calculations!D139))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B140,IF(Status!G11=\"\"remote\"\",Calculations!C140,Calculations!D140))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B140,IF(Status!G11=\"\"remote\"\",Calculations!C140,Calculations!D140))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B141,IF(Status!G11=\"\"remote\"\",Calculations!C141,Calculations!D141))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B141,IF(Status!G11=\"\"remote\"\",Calculations!C141,Calculations!D141))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B142,IF(Status!G11=\"\"remote\"\",Calculations!C142,Calculations!D142))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B142,IF(Status!G11=\"\"remote\"\",Calculations!C142,Calculations!D142))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B144,IF(Status!G11=\"\"remote\"\",Calculations!C144,Calculations!D144))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B144,IF(Status!G11=\"\"remote\"\",Calculations!C144,Calculations!D144))\"\n\"E29*'Cost Assumptions'!C15\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B145,IF(Status!G11=\"\"remote\"\",Calculations!C145,Calculations!D145))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B145,IF(Status!G11=\"\"remote\"\",Calculations!C145,Calculations!D145))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B146,IF(Status!G11=\"\"remote\"\",Calculations!C146,Calculations!D146))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B146,IF(Status!G11=\"\"remote\"\",Calculations!C146,Calculations!D146))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B147,IF(Status!G11=\"\"remote\"\",Calculations!C147,Calculations!D147))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B147,IF(Status!G11=\"\"remote\"\",Calculations!C147,Calculations!D147))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B148,IF(Status!G11=\"\"remote\"\",Calculations!C148,Calculations!D148))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B148,IF(Status!G11=\"\"remote\"\",Calculations!C148,Calculations!D148))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B149,IF(Status!G11=\"\"remote\"\",Calculations!C149,Calculations!D149))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B149,IF(Status!G11=\"\"remote\"\",Calculations!C149,Calculations!D149))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B151,IF(Status!G11=\"\"remote\"\",Calculations!C151,Calculations!D151))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B151,IF(Status!G11=\"\"remote\"\",Calculations!C151,Calculations!D151))\"\n\"E36*'Cost Assumptions'!C21\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B152,IF(Status!G11=\"\"remote\"\",Calculations!C152,Calculations!D152))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B152,IF(Status!G11=\"\"remote\"\",Calculations!C152,Calculations!D152))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B156,IF(Status!G11=\"\"remote\"\",Calculations!C156,Calculations!D156))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B156,IF(Status!G11=\"\"remote\"\",Calculations!C156,Calculations!D156))\"\n\"E39*'Cost Assumptions'!C23\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B158,IF(Status!G11=\"\"remote\"\",Calculations!C158,Calculations!D158))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B158,IF(Status!G11=\"\"remote\"\",Calculations!C158,Calculations!D158))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B159,IF(Status!G11=\"\"remote\"\",Calculations!C159,Calculations!D159))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B159,IF(Status!G11=\"\"remote\"\",Calculations!C159,Calculations!D159))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B172,IF(Status!G11=\"\"remote\"\",Calculations!B193,Calculations!B214))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B173,IF(Status!G11=\"\"remote\"\",Calculations!B194,Calculations!B215))\"\n\"IF(Status!G11=\"\"stand-alone hub\"\",Calculations!B174,IF(Status!G11=\"\"remote\"\",Calculations!B195,Calculations!B216))\"\n\"IF(B6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(C6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(D6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(E6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(F6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(G6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(H6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(I6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(J6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(K6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(L6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(M6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(N6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(O6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"IF(P6<='Misc Parameters'!F8,\"\"include\"\")\"\n\"'Background State Information'!F13\"\n\"(1+B9)*B8\"\n\"B9\"\n\"'Misc Parameters'!F9\"\n\"MIN((B10+B11),1)\"\n\"('Misc Parameters'!F10-'Misc Parameters'!F9)/'Misc Parameters'!F8\"\n\"IF(C6<'Misc Parameters'!F8+1,Calculations!B11,0)\"\n\"IF(D6<'Misc Parameters'!F8+1,Calculations!C11,0)\"\n\"IF(E6<'Misc Parameters'!F8+1,Calculations!D11,0)\"\n\"IF(F6<'Misc Parameters'!F8+1,Calculations!E11,0)\"\n\"IF(G6<'Misc Parameters'!F8+1,Calculations!F11,0)\"\n\"IF(H6<'Misc Parameters'!F8+1,Calculations!G11,0)\"\n\"IF(I6<'Misc Parameters'!F8+1,Calculations!H11,0)\"\n\"IF(J6<'Misc Parameters'!F8+1,Calculations!I11,0)\"\n\"IF(K6<'Misc Parameters'!F8+1,Calculations!J11,0)\"\n\"IF(L6<'Misc Parameters'!F8+1,Calculations!K11,0)\"\n\"IF(M6<'Misc Parameters'!F8+1,Calculations!L11,0)\"\n\"IF(N6<'Misc Parameters'!F8+1,Calculations!M11,0)\"\n\"IF(O6<'Misc Parameters'!F8+1,Calculations!N11,0)\"\n\"IF(P6<'Misc Parameters'!F8+1,Calculations!O11,0)\"\n\"'Cost Assumptions'!D55\"\n\"'Misc Parameters'!F11\"\n\"'Performance Assumptions'!D25\"\n\"'Performance Assumptions'!D48\"\n\"'Misc Parameters'!F14\"\n\"B21*(1+B14+B16)\"\n\"2*E21\"\n\"B8*B10\"\n\"B8*(1-B10)\"\n\"B26/(52*5)\"\n\"C26/(52*5*C12)\"\n\"C27/(52*5*C12)\"\n\"B28+B29\"\n\"ROUND((B30/B19)/B12,1)\"\n\"ROUND(C30/C19,1)\"\n\"ROUND((B29/B20)/B12,1)\"\n\"ROUND(C29/C20,1)\"\n\"0.2*Status!F12\"\n\"'Cost Assumptions'!D10\"\n\"(F41*G41)/(12^2)\"\n\"'Cost Assumptions'!D15\"\n\"'Cost Assumptions'!D21\"\n\"IF(Status!G9=\"\"shell casings only\"\",(B8*1*B66),IF(Status!G9=\"\"bullets only\"\",(B8*1*B67),(B8*1*B66)+(B8*1*B67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(C8*1*C66),IF(Status!G9=\"\"bullets only\"\",(C8*1*C67),(C8*1*C66)+(C8*1*C67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(D8*1*D66),IF(Status!G9=\"\"bullets only\"\",(D8*1*D67),(D8*1*D66)+(D8*1*D67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(E8*1*E66),IF(Status!G9=\"\"bullets only\"\",(E8*1*E67),(E8*1*E66)+(E8*1*E67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(F8*1*F66),IF(Status!G9=\"\"bullets only\"\",(F8*1*F67),(F8*1*F66)+(F8*1*F67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(G8*1*G66),IF(Status!G9=\"\"bullets only\"\",(G8*1*G67),(G8*1*G66)+(G8*1*G67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(H8*1*H66),IF(Status!G9=\"\"bullets only\"\",(H8*1*H67),(H8*1*H66)+(H8*1*H67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(I8*1*I66),IF(Status!G9=\"\"bullets only\"\",(I8*1*I67),(I8*1*I66)+(I8*1*I67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(J8*1*J66),IF(Status!G9=\"\"bullets only\"\",(J8*1*J67),(J8*1*J66)+(J8*1*J67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(K8*1*K66),IF(Status!G9=\"\"bullets only\"\",(K8*1*K67),(K8*1*K66)+(K8*1*K67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(L8*1*L66),IF(Status!G9=\"\"bullets only\"\",(L8*1*L67),(L8*1*L66)+(L8*1*L67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(M8*1*M66),IF(Status!G9=\"\"bullets only\"\",(M8*1*M67),(M8*1*M66)+(M8*1*M67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(N8*1*N66),IF(Status!G9=\"\"bullets only\"\",(N8*1*N67),(N8*1*N66)+(N8*1*N67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(O8*1*O66),IF(Status!G9=\"\"bullets only\"\",(O8*1*O67),(O8*1*O66)+(O8*1*O67)))\"\n\"IF(Status!G9=\"\"shell casings only\"\",(P8*1*P66),IF(Status!G9=\"\"bullets only\"\",(P8*1*P67),(P8*1*P66)+(P8*1*P67)))\"\n\"B69\"\n\"B70+C69\"\n\"CEILING(B75*(1+C14),100)\"\n\"CEILING(B76*(1+C14),100)\"\n\"CEILING(B77*(1+C14),100)\"\n\"CEILING(B78*(1+C14),100)\"\n\"CEILING(B79*(1+C14),100)\"\n\"CEILING(B80*(1+C14),100)\"\n\"CEILING(B81*(1+C14),100)\"\n\"CEILING(B82*(1+C14),100)\"\n\"CEILING(B83*(1+C14),100)\"\n\"'Cost Assumptions'!B38\"\n\"IF(Status!G10=\"\"one central location\"\",B33,MAX(B33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",C33,MAX(C33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",D33,MAX(D33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",E33,MAX(E33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",F33,MAX(F33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",G33,MAX(G33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",H33,MAX(H33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",I33,MAX(I33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",J33,MAX(J33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",K33,MAX(K33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",L33,MAX(L33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",M33,MAX(M33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",N33,MAX(N33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",O33,MAX(O33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"one central location\"\",P33,MAX(P33,'Performance Assumptions'!D69))\"\n\"IF(Status!G10=\"\"distributed locations\"\",0.2*Status!F12*'Performance Assumptions'!D69,0.2*Status!F12)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(B34,'Performance Assumptions'!D70),B34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(C34,'Performance Assumptions'!D70),C34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(D34,'Performance Assumptions'!D70),D34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(E34,'Performance Assumptions'!D70),E34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(F34,'Performance Assumptions'!D70),F34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(G34,'Performance Assumptions'!D70),G34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(H34,'Performance Assumptions'!D70),H34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(I34,'Performance Assumptions'!D70),I34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(J34,'Performance Assumptions'!D70),J34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(K34,'Performance Assumptions'!D70),K34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(L34,'Performance Assumptions'!D70),L34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(M34,'Performance Assumptions'!D70),M34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(N34,'Performance Assumptions'!D70),N34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(O34,'Performance Assumptions'!D70),O34)\"\n\"IF(Status!G14=\"\"distributed locations\"\",MAX(P34,'Performance Assumptions'!D70),P34)\"\n\"'Cost Assumptions'!D41\"\n\"IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)\"\n\"'Cost Assumptions'!B38\"\n\"CEILING(B75*B87,100)\"\n\"SUM(B99:B107)\"\n\"B15\"\n\"B87\"\n\"(B87*C111)+(MAX(0,C87-B87))\"\n\"B89\"\n\"(B89*C111)+(MAX(0,C89-B89))\"\n\"CEILING((B75/52)*2,100)\"\n\"CEILING((B77/52),100)\"\n\"CEILING((B112*B114)+(B113*B115),100)\"\n\"CEILING(B21*B27,100)\"\n\"A21\"\n\"B101\"\n\"(B122/B27)\"\n\"B120\"\n\"'Background State Information'!F26\"\n\"SUM(B124:B125)\"\n\"'Misc Parameters'!F15\"\n\"ROUNDUP(P33/Status!F12,0)\"\n\"IF(Status!G10=\"\"distributed locations\"\",MAX(ROUNDUP(P87/Status!F12,0),'Performance Assumptions'!D69),ROUNDUP(P87/Status!F12,0))\"\n\"IF(Status!G10=\"\"distributed locations\"\",MAX(ROUNDUP(P87/Status!F12,0),'Performance Assumptions'!D69),ROUNDUP(P87/Status!F12,0))\"\n\"IF(SUMIF(B7:P7,\"\"include\"\",B8:P8)<=150000,MAX(1,ROUNDUP(B137/B71,0)),0)\"\n\"IF(SUMIF(B7:P7,\"\"include\"\",B8:P8)<=150000,MAX(1,ROUNDUP(B137/B71,0)),0)\"\n\"ROUNDUP(B138*H41,0)\"\n\"ROUNDUP(C138*H41,0)\"\n\"ROUNDUP(D138*H41,0)\"\n\"IF(SUMIF(B7:P7,\"\"include\"\",B8:P8)>150000,MAX(1,ROUNDUP(B137/B71,0)),0)\"\n\"IF(SUMIF(B7:P7,\"\"include\"\",B8:P8)>150000,MAX(1,ROUNDUP(B137/B71,0)),0)\"\n\"C137\"\n\"IF('Performance Assumptions'!D69<=1,0,IF(Status!G10=\"\"distributed locations\"\",MIN((D137-1),'Performance Assumptions'!D69),0))\"\n\"D137-D140\"\n\"B138+B139\"\n\"B138+B139\"\n\"MAX('Performance Assumptions'!D69,C138)\"\n\"MAX('Performance Assumptions'!D69,D138)\"\n\"B138+B139\"\n\"IF(B152>=1,1,0)\"\n\"'Performance Assumptions'!D69\"\n\"IF(Status!G10=\"\"distributed locations\"\",'Performance Assumptions'!D69-1,0)\"\n\"ROUNDUP(B137/2,0)\"\n\"ROUNDUP(((SUMIF(B7:P7,\"\"include\"\",B8:P8))/B52),0)\"\n\"ROUNDUP(((SUMIF(B7:P7,\"\"include\"\",B8:P8))/B52),0)\"\n\"ROUNDUP(((SUMIF(B7:P7,\"\"include\"\",B8:P8))/B52),0)\"\n\"MAX(MAX(B90:P90),1)\"\n\"MAX(MAX(B90:P90),1)\"\n\"MAX(MAX(B90:P90),1)\"\n\"ROUNDUP(B151*H58,0)\"\n\"ROUNDUP(C151*H58,0)\"\n\"ROUNDUP(D151*H58,0)\"\n\"MAX(1,B138+B139)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,B89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,C89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,D89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,E89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,F89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,G89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,H89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,I89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,J89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,K89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,L89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,M89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,N89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,O89/2)),0)\"\n\"ROUND(IF(Status!G14=\"\"mobile operation\"\",0,IF(Status!G14=\"\"distributed locations\"\",'Performance Assumptions'!D70,P89/2)),0)\"\n\"H54*B156\"\n\"H54*C156\"\n\"H54*D156\"\n\"H54*E156\"\n\"H54*F156\"\n\"H54*G156\"\n\"H54*H156\"\n\"H54*I156\"\n\"H54*J156\"\n\"H54*K156\"\n\"H54*L156\"\n\"H54*M156\"\n\"H54*N156\"\n\"H54*O156\"\n\"H54*P156\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*B89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*C89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*D89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*E89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*F89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*G89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*H89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*I89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*J89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*K89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*L89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*M89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*N89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*O89\"\n\"IF(Status!G14=\"\"mobile operation\"\",1,0)*P89\"\n\"ROUNDUP((B158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((C158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((D158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((E158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((F158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((G158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((H158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((I158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((J158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((K158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((L158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((M158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((N158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((O158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"ROUNDUP((P158+IF(Status!G16=\"\"yes\"\",'Cost Assumptions'!D44,0)+IF(Status!G17=\"\"yes\"\",'Cost Assumptions'!D45,0)),0)\"\n\"CEILING(((B78*B90)+(B75*B33)+(B76*B88)+(B79*B91)+(B80*B92)+(B77*B89)+(B81*B93)+(B82*B94)+(B83*B95)),100)\"\n\"CEILING((B33*B114)+(B113*B115),100)\"\n\"CEILING((((B33*B111)+(MAX(0,C33-B33)))*C114)+(C113*C115),100)\"\n\"CEILING(SUMPRODUCT(B138:B142*C41:C45),100)\"\n\"CEILING(SUMPRODUCT(B144:B149*C47:C52),100)\"\n\"CEILING((B151*C58)+(B152*C59),100)\"\n\"CEILING((B156*C54)+(B158*C55)+(B159*C56),100)\"\n\"CEILING((B165*C63),100)\"\n\"SUM(B166:B168)*C64\"\n\"CEILING((B159*C56)+(0.35*15000*C159),100)\"\n\"CEILING((MAX(C159-B159,0)*C56)+((0.35*(1+C16))*15000*C159),100)\"\n\"CEILING((MAX(D159-C159,0)*C56)+((0.35*(1+D16))*15000*D159),100)\"\n\"CEILING((MAX(E159-D159,0)*C56)+((0.35*(1+E16))*15000*E159),100)\"\n\"CEILING((MAX(F159-E159,0)*C56)+((0.35*(1+F16))*15000*F159),100)\"\n\"CEILING((MAX(G159-F159,0)*C56)+((0.35*(1+G16))*15000*G159),100)\"\n\"CEILING((MAX(H159-G159,0)*C56)+((0.35*(1+H16))*15000*H159),100)\"\n\"CEILING((MAX(I159-H159,0)*C56)+((0.35*(1+I16))*15000*I159),100)\"\n\"CEILING((MAX(J159-I159,0)*C56)+((0.35*(1+J16))*15000*J159),100)\"\n\"CEILING((MAX(K159-J159,0)*C56)+((0.35*(1+K16))*15000*K159),100)\"\n\"CEILING((MAX(L159-K159,0)*C56)+((0.35*(1+L16))*15000*L159),100)\"\n\"CEILING((MAX(M159-L159,0)*C56)+((0.35*(1+M16))*15000*M159),100)\"\n\"CEILING((MAX(N159-M159,0)*C56)+((0.35*(1+N16))*15000*N159),100)\"\n\"CEILING((MAX(O159-N159,0)*C56)+((0.35*(1+O16))*15000*O159),100)\"\n\"CEILING((MAX(P159-O159,0)*C56)+((0.35*(1+P16))*15000*P159),100)\"\n\"SUM(E138:E149)\"\n\"SUM(E151:E152)+B157\"\n\"SUM(B87:B95)*C62\"\n\"SUM(C87:C95)*C62\"\n\"SUM(D87:D95)*C62\"\n\"SUM(E87:E95)*C62\"\n\"SUM(F87:F95)*C62\"\n\"SUM(G87:G95)*C62\"\n\"SUM(H87:H95)*C62\"\n\"SUM(I87:I95)*C62\"\n\"SUM(J87:J95)*C62\"\n\"SUM(K87:K95)*C62\"\n\"SUM(L87:L95)*C62\"\n\"SUM(M87:M95)*C62\"\n\"SUM(N87:N95)*C62\"\n\"SUM(O87:O95)*C62\"\n\"SUM(P87:P95)*C62\"\n\"CEILING(SUM(B172:B174)*C61,100)\"\n\"CEILING(SUM(C172:C174)*C61,100)\"\n\"SUM(D172:D174)*C61\"\n\"SUM(E172:E174)*C61\"\n\"SUM(F172:F174)*C61\"\n\"SUM(G172:G174)*C61\"\n\"SUM(H172:H174)*IB61\"\n\"SUM(I172:I174)*C61\"\n\"SUM(J172:J174)*C61\"\n\"SUM(K172:K174)*C61\"\n\"SUM(L172:L174)*C61\"\n\"SUM(M172:M174)*C61\"\n\"SUM(N172:N174)*C61\"\n\"SUM(O172:O174)*C61\"\n\"SUM(P172:P174)*C61\"\n\"CEILING(SUM(B163:B171)+B175,100)\"\n\"B131\"\n\"B126\"\n\"(B176+B177)-B178\"\n\"B108\"\n\"B116\"\n\"CEILING(SUMPRODUCT(C138:C142*C41:C45),100)\"\n\"CEILING(SUMPRODUCT(C144:C149,C47:C52),100)\"\n\"(C151*C58)+(C152*C59)\"\n\"CEILING((B156*C54)+(B158*C55)+(B159*C56),100)\"\n\"CEILING((B186*C63),100)\"\n\"SUM(B187:B189)*C64\"\n\"CEILING((B159*C56)+(0.35*15000*C159),100)\"\n\"CEILING((MAX(C159-B159,0)*C56)+((0.35*(1+C16))*15000*C159),100)\"\n\"CEILING((MAX(D159-C159,0)*C56)+((0.35*(1+D16))*15000*D159),100)\"\n\"CEILING((MAX(E159-D159,0)*C56)+((0.35*(1+E16))*15000*E159),100)\"\n\"CEILING((MAX(F159-E159,0)*C56)+((0.35*(1+F16))*15000*F159),100)\"\n\"CEILING((MAX(G159-F159,0)*C56)+((0.35*(1+G16))*15000*G159),100)\"\n\"CEILING((MAX(H159-G159,0)*C56)+((0.35*(1+H16))*15000*H159),100)\"\n\"CEILING((MAX(I159-H159,0)*C56)+((0.35*(1+I16))*15000*I159),100)\"\n\"CEILING((MAX(J159-I159,0)*C56)+((0.35*(1+J16))*15000*J159),100)\"\n\"CEILING((MAX(K159-J159,0)*C56)+((0.35*(1+K16))*15000*K159),100)\"\n\"CEILING((MAX(L159-K159,0)*C56)+((0.35*(1+L16))*15000*L159),100)\"\n\"CEILING((MAX(M159-L159,0)*C56)+((0.35*(1+M16))*15000*M159),100)\"\n\"CEILING((MAX(N159-M159,0)*C56)+((0.35*(1+N16))*15000*N159),100)\"\n\"CEILING((MAX(O159-N159,0)*C56)+((0.35*(1+O16))*15000*O159),100)\"\n\"CEILING((MAX(P159-O159,0)*C56)+((0.35*(1+P16))*15000*P159),100)\"\n\"SUM(F138:F149)\"\n\"SUM(F151:F152)+B157\"\n\"SUM(B87:B95)*C62\"\n\"SUM(C87:C95)*C62\"\n\"SUM(D87:D95)*C62\"\n\"SUM(E87:E95)*C62\"\n\"SUM(F87:F95)*C62\"\n\"SUM(G87:G95)*C62\"\n\"SUM(H87:H95)*C62\"\n\"SUM(I87:I95)*C62\"\n\"SUM(J87:J95)*C62\"\n\"SUM(K87:K95)*C62\"\n\"SUM(L87:L95)*C62\"\n\"SUM(M87:M95)*C62\"\n\"SUM(N87:N95)*C62\"\n\"SUM(O87:O95)*C62\"\n\"SUM(P87:P95)*C62\"\n\"CEILING(SUM(B193:B195)*C61,100)\"\n\"CEILING(SUM(C193:C195)*C61,100)\"\n\"CEILING(SUM(D193:D195)*C61,100)\"\n\"CEILING(SUM(E193:E195)*C61,100)\"\n\"CEILING(SUM(F193:F195)*C61,100)\"\n\"CEILING(SUM(G193:G195)*C61,100)\"\n\"CEILING(SUM(H193:H195)*C61,100)\"\n\"CEILING(SUM(I193:I195)*C61,100)\"\n\"CEILING(SUM(J193:J195)*C61,100)\"\n\"CEILING(SUM(K193:K195)*C61,100)\"\n\"CEILING(SUM(L193:L195)*C61,100)\"\n\"CEILING(SUM(M193:M195)*C61,100)\"\n\"CEILING(SUM(N193:N195)*C61,100)\"\n\"CEILING(SUM(O193:O195)*C61,100)\"\n\"CEILING(SUM(P193:P195)*C61,100)\"\n\"B131\"\n\"B126\"\n\"B108\"\n\"B116\"\n\"CEILING(SUMPRODUCT(D138:D142*C41:C45),100)\"\n\"CEILING(SUMPRODUCT(D144:D149,C47:C52),100)\"\n\"CEILING((D151*C58)+(D152*C59),100)\"\n\"CEILING((B156*C54)+(B158*C55)+(B159*C56),100)\"\n\"CEILING((B207*C63),100)\"\n\"SUM(B208:B210)*C64\"\n\"CEILING((B159*C56)+(0.35*15000*C159),100)\"\n\"CEILING((MAX(C159-B159,0)*C56)+((0.35*(1+C16))*15000*C159),100)\"\n\"CEILING((MAX(D159-C159,0)*C56)+((0.35*(1+D16))*15000*D159),100)\"\n\"CEILING((MAX(E159-D159,0)*C56)+((0.35*(1+E16))*15000*E159),100)\"\n\"CEILING((MAX(F159-E159,0)*C56)+((0.35*(1+F16))*15000*F159),100)\"\n\"CEILING((MAX(G159-F159,0)*C56)+((0.35*(1+G16))*15000*G159),100)\"\n\"CEILING((MAX(H159-G159,0)*C56)+((0.35*(1+H16))*15000*H159),100)\"\n\"CEILING((MAX(I159-H159,0)*C56)+((0.35*(1+I16))*15000*I159),100)\"\n\"CEILING((MAX(J159-I159,0)*C56)+((0.35*(1+J16))*15000*J159),100)\"\n\"CEILING((MAX(K159-J159,0)*C56)+((0.35*(1+K16))*15000*K159),100)\"\n\"CEILING((MAX(L159-K159,0)*C56)+((0.35*(1+L16))*15000*L159),100)\"\n\"CEILING((MAX(M159-L159,0)*C56)+((0.35*(1+M16))*15000*M159),100)\"\n\"CEILING((MAX(N159-M159,0)*C56)+((0.35*(1+N16))*15000*N159),100)\"\n\"CEILING((MAX(O159-N159,0)*C56)+((0.35*(1+O16))*15000*O159),100)\"\n\"CEILING((MAX(P159-O159,0)*C56)+((0.35*(1+P16))*15000*P159),100)\"\n\"SUM(G138:G149)\"\n\"SUM(G151:G152)+B157\"\n\"SUM(B87:B95)*C62\"\n\"SUM(C87:C95)*C62\"\n\"SUM(D87:D95)*C62\"\n\"SUM(E87:E95)*C62\"\n\"SUM(F87:F95)*C62\"\n\"SUM(G87:G95)*C62\"\n\"SUM(H87:H95)*C62\"\n\"SUM(I87:I95)*C62\"\n\"SUM(J87:J95)*C62\"\n\"SUM(K87:K95)*C62\"\n\"SUM(L87:L95)*C62\"\n\"SUM(M87:M95)*C62\"\n\"SUM(N87:N95)*C62\"\n\"SUM(O87:O95)*C62\"\n\"SUM(P87:P95)*C62\"\n\"CEILING(SUM(B214:B216)*C61,100)\"\n\"CEILING(SUM(C214:C216)*C61,100)\"\n\"CEILING(SUM(D214:D216)*C61,100)\"\n\"CEILING(SUM(E214:E216)*C61,100)\"\n\"CEILING(SUM(F214:F216)*C61,100)\"\n\"CEILING(SUM(G214:G216)*C61,100)\"\n\"CEILING(SUM(H214:H216)*C61,100)\"\n\"CEILING(SUM(I214:I216)*C61,100)\"\n\"CEILING(SUM(J214:J216)*C61,100)\"\n\"CEILING(SUM(K214:K216)*C61,100)\"\n\"CEILING(SUM(L214:L216)*C61,100)\"\n\"CEILING(SUM(M214:M216)*C61,100)\"\n\"CEILING(SUM(N214:N216)*C61,100)\"\n\"CEILING(SUM(O214:O216)*C61,100)\"\n\"CEILING(SUM(P214:P216)*C61,100)\"\n\"SUM(B205:B213)+B217\"\n\"B131\"\n\"B126\"\n\"ROUND(VLOOKUP('Background State Information'!F7,'State Square Miles'!C5:E55,3),1)\"\n\"VLOOKUP((VLOOKUP('Background State Information'!F7,'State Square Miles'!C5:D55,2)),'State Square Miles'!A5:B55,2)\"\n\"IF(G5<1,1,MAX(((F5/G5)*(75/47214)*6),1))\"\n\"'Performance Assumptions'!$D$57\"\n\"H5/F5\"\n\"1/J5\"\n\"(F18/G18)*(75/47214)*6\"\n\"SUM(F5:F55)\"\n\"AVERAGE(I5:I55)\"\n\"IF(F9=1,\"\"shell casings only\"\",IF(F9=2,\"\"bullets only\"\",\"\"shell casings and bullets\"\"))\"\n\"IF(F10=1,\"\"one central location\"\",\"\"distributed locations\"\")\"\n\"IF(F11=1,\"\"stand-alone hub\"\",IF(F11=2,\"\"remote\"\",\"\"hub network\"\"))\"\n\"G12\"\n\"IF(F14=1,\"\"one central location\"\",IF(F14=2,\"\"distributed locations\"\",\"\"mobile operation\"\"))\"\n\"IF(F16=1,\"\"yes\"\",\"\"no\"\")\"\n\"IF(C26=1,\"\"default used\"\",\"\"user estimates used\"\")\"\n\"IF(C26=1,\"\"default used\"\",\"\"user estimates used\"\")\"\n\"IF(C28=1,\"\"model estimate used\"\",\"\"user estimate used\"\")\"\n\"IF(C28=1,\"\"model estimate used\"\",\"\"user estimate used\"\")\"\n\"SUM(B14:B17)\"\n\"F11/F12\"\n\"(F15+F16)/F15\"\n\"F17*F13\"\n\"F18/F20\"\n\"F21*F22\"\n\"F23/F8\"\n\"F8-F23\"\n\"F27*(F30+F31)\"\n\"F27-F32\"\n\"E37*H37\"\n\"(1-E37)*H37\"\n\"F33\"\n\"F23\"\n\"F32\"\n\"SUM(F37:F39)\"\n\"F37*G45/E45\"\n\"SUM(E50:F50)\"\n\"G50/G$53\"\n\"E53/$G53\"\n\"(E59*E50)/1000000\"\n\"G66/G$69\"\n\"E74*G69\"\n\"E86*E77\"\n\"E80*E86\"\n\"E86*(E75-1)\"\n\"E86*E78-F86\"\n\"E81*E86-G86\"\n\"E86*E76-E86-E87\"\n\"E86*E79-F87-F86\"\n\"E82*E86-G87-G86\"\n\"F8\"\n\"G53\"\n\"G69\"\n\"J9/J19\"\n\"J10/J19\"\n\"J11/J19\"\n\"J12/J19\"\n\"J13/J19\"\n\"J14/J19\"\n\"J15/J19\"\n\"J16/J19\"\n\"J17/J19\"\n\"J18/J19\"\n\"SUM(freq)\"\n\"SUM(K9:K18)\"\n\"J121/J$132\"\n\"SUM(J121:J131)\"\n\"J190/J$201\"\n\"D4\"\n\"IF(C6=\"\"yes\"\",(1*F6),IF(C6=\"\"no\"\",(0*F6),\"\"\"\"))\"\n\"IF(SUM(F6:F10)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G6:G10)\"\n\"IF(SUM(F16:F22)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G16:G22)\"\n\"IF(SUM(F28:F36)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G28:G36)\"\n\"IF(C42=\"\"yes\"\",(1*F42),IF(C42=\"\"no\"\",(0*F42),IF(C42=\"\"small extent\"\",(0.33*F42),IF(C42=\"\"large extent\"\",(0.67*F42),\"\"\"\"))))\"\n\"IF(SUM(F42:F66)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G42:G66)\"\n\"F10    +F12+F13+F14 -I10\"\n\"F38+F40+F41+F42+F43-I38\"\n\"F54-I54\"\n\"F78+F80-I78+F81\"\n\"SUM(F108:F117)\"\n\"F133+F134+F135-I133\"\n\"F148+F149-I148\"\n\"F158+F160-I158\"\n\"SUM(F166:F189)\"\n\"SUM(F269:F271)\"\n\"SUM(F276:F287)\"\n\"SUM(F290:F294)\"\n\"SUM(F303:F308)\"\n\"F312-H312\"\n\"F357-I354\"\n\"SUM(F354:F356)\"\n\"F366+F367+F368+F369\"\n\"F384-I380\"\n\"SUM(F380:F383)\"\n\"D4*C5\"\n\"D4*C6\"\n\"D4*C7\"\n\"D5*1.5\"\n\"2*(D6+D7)\"\n\"D4\"\n\"D13/E13\"\n\"D4*0.7\"\n\"D9+D8\"\n\"(D9+D8)\"\n\"D4\"\n\"D5+D6\"\n\"0.3*D9\"\n\"D9+D8\"\n\"D4\"\n\"SUM(F13:F22)\"\n\"D4\"\n\"D9\"\n\"D9*0.2\"\n\"D9-D20\"\n\"D20\"\n\"D5\"\n\"D13\"\n\"SUM(F26:F47)\"\n\"F23+F48\"\n\"+A4+1\"\n\"A162+1\"\n\"+A188+1\"\n\"+A244+1\"\n\"SUM(D3:H3)\"\n\"Sheet1!B1\"\n\"Sheet1!B1\"\n\"Sheet1!B1\"\n\"L3/N3\"\n\"960190000/2\"\n\"O3/1936.27\"\n\"P3/N3\"\n\"(R3-S3)/R3\"\n\"((AG3+(AD3-AE3))-AH3)/(AG3+(AD3-AE3))\"\n\"170+354\"\n\"K28/0.2\"\n\"420+290\"\n\"60+255\"\n\"518.5+275.4*3+353.5\"\n\"1660/500\"\n\"10^6\"\n\"10^4\"\n\"5*10^5\"\n\"10^3\"\n\"2*10^4\"\n\"4.5*10^2\"\n\"6*10^2\"\n\"N120*0.2\"\n\"10000*30\"\n\"SUM(E4:E19)\"\n\"SUM(E24:E36)\"\n\"SUM(E41:E44)\"\n\"SUM(B12:B162)\"\n\"parametri!I8\"\n\"calcoli!B60\"\n\"calcoli!B61\"\n\"IF(calcoli!F15>calcoli!E15,\"\"\"\",\"\"Attenzione: orario fine servizio inferiore ora inizio!\"\")\"\n\"parametri!I8\"\n\"parametri!I8\"\n\"C7+F7+I7+L7\"\n\"D7++G7+J7+M7\"\n\"SUM(C7:C18)\"\n\"SUM(C26:L26)\"\n\"SUM(M26:N26)\"\n\"SetPar!E5\"\n\"INDEX(parametri!$B8:$B55,E10)\"\n\"INDEX(parametri!B8:B55,F10)\"\n\"5-COUNT(J15:N15)\"\n\"'immissione dati'!D6\"\n\"INDEX(parametri!$E$8:$E$19,C11)\"\n\"INDEX(parametri!$F$8:$F$11,D11)\"\n\"E11\"\n\"(HOUR(F15-E15)*60+MINUTE(F15-E15))/60\"\n\"G15*H11\"\n\"IF(J11=1,0,INDEX(parametri!$A$1:$A$4,J11))\"\n\"'immissione dati'!E22\"\n\"'immissione dati'!E23\"\n\"'immissione dati'!$E24\"\n\"'immissione dati'!$E25\"\n\"'immissione dati'!$E26\"\n\"'immissione dati'!$E27\"\n\"'immissione dati'!$E28\"\n\"'immissione dati'!$E29\"\n\"'immissione dati'!$E30\"\n\"'immissione dati'!$E31\"\n\"'immissione dati'!$E32\"\n\"'immissione dati'!$E33\"\n\"'immissione dati'!H24\"\n\"IF(OR(I15=1,I15=2),1,IF(OR(I15=4,I15=6),2,IF(OR(I15=10,I15=12),4,3)))\"\n\"IF(D16=calcoli!$C$20,TRUE,FALSE)\"\n\"IF(OR(calcoli!$D$21,calcoli!$C$21=J16,calcoli!$C$21=K16,calcoli!$C$21=L16,calcoli!$C$21=M16,calcoli!$C$21=N16),TRUE,FALSE)\"\n\"IF(OR(calcoli!$D$22,calcoli!$C$22=C16),TRUE,FALSE)\"\n\"IF(OR(calcoli!$D$23,calcoli!$B$23=AC16),TRUE,FALSE)\"\n\"IF(OR(calcoli!$E$21,calcoli!$C$21=AA16),TRUE,FALSE)\"\n\"IF(AND(AD16,AE16,AF16,AG16,AH16),TRUE,FALSE)\"\n\"IF($AI16,A16,\"\"\"\")\"\n\"CONCATENATE(A16,\"\" - \"\",B16,\"\" - \"\",C16,\"\"- \"\",D16,\"\" Gev: \"\",J16,\"\", \"\",K16,\"\", \"\",L16,\"\", \"\",M16,\"\", \"\",N16)\"\n\"INDEX(parametri!$F$8:$F$11,B20)\"\n\"INDEX(parametri!$A$1:$A$4,B21)\"\n\"INDEX(parametri!E8:E19,B22)\"\n\"INDEX(parametri!G8:G11,B23)\"\n\"COUNT(db!AN3:AN4)\"\n\"SUM(db!AP3:AP4)\"\n\"SUM(db!AX3:BG4)\"\n\"SUM(db!AX3:AX4)\"\n\"COUNT(db!AN3:AN4)\"\n\"SUM(db!AP3:AP4)\"\n\"SUM(db!AY3:AY4)\"\n\"SUM(db!AZ3:AZ4)\"\n\"SUM(db!BK3:BK4)\"\n\"SUM(db!BA3:BA4)\"\n\"SUM(db!BB3:BB4)\"\n\"SUM(db!BC3:BC4)\"\n\"SUM(db!BD3:BD4)\"\n\"SUM(db!BE3:BE4)\"\n\"SUM(db!BF3:BF4)\"\n\"SUM(db!BG3:BG4)\"\n\"SUM(db!BH3:BH4)\"\n\"SUM(db!BI3:BI4)\"\n\"SUM(db!AP3:AP4)\"\n\"SUM(db!AQ3:AQ4)\"\n\"B52\"\n\"INDEX(db!$BM$3:$BM$4,C56)\"\n\"COUNTA(db!A3:A4)\"\n\"COUNTA(parametri!A1:A4)-1\"\n\"\"\"-1 Cell phone only\"\"\"\n\"SUM(F2:Q2)\"\n\"IF(H45,\"\"All ok.\"\",\"\"FAILED!!\"\")\"\n\"SUM(H32:H45)\"\n\"DAVERAGE($A$15:$D$22,\"\"Age\"\",$A$11:$B$12)\"\n\"DAVERAGE($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DAVERAGE($A$15:$D$22,\"\"Age\"\",$A$11:$C$13)\"\n\"IF(((ABS(B32-C32)<$C$4) +(ABS(D32-E32)<$C$4) + (ABS(F32-G32)<$C$4)=3),1,0)\"\n\"IF(H32,\"\"Ok.\"\",\"\"FAILED!!\"\")\"\n\"DCOUNT(A$15:D$22,\"\"Salary\"\",A$11:C$12)\"\n\"DCOUNT($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DCOUNT($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DCOUNTA(A$15:D$22,\"\"Salary\"\",A$11:A$13)\"\n\"DCOUNTA($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DCOUNTA($A$15:$D$22,\"\"name\"\",$C$11:$C$12)\"\n\"DGET($A$15:$D$22,\"\"Salary\"\",$D$11:$D$12)\"\n\"DGET($A$15:$D$22,\"\"Age\"\",$E$11:$E$12)\"\n\"DGET($A$15:$D$22,\"\"Name\"\",$E$11:$E$12)\"\n\"IF(((ABS(B35-C35)<$C$4) +(ABS(D35-E35)<$C$4) + IF(F35=G35,1,0)=3),1,0)\"\n\"DMAX(A$15:D$22,\"\"Salary\"\",A$11:A$13)\"\n\"DMAX($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DMAX($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DMIN(A$15:D$22,\"\"Salary\"\",A$11:A$13)\"\n\"DMIN($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DMIN($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DPRODUCT(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DPRODUCT($A$15:$D$22,\"\"Age\"\",$A$11:$A$12)\"\n\"DPRODUCT($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DSTDEV(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DSTDEV($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DSTDEV($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DSTDEVP(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DSTDEVP($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DSTDEVP($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DSUM(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DSUM($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DSUM($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DVAR(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DVAR($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DVAR($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"DVARP(A$15:D$22,\"\"Age\"\",A$11:A$13)\"\n\"DVARP($A$15:$D$22,\"\"Salary\"\",$A$11:$A$13)\"\n\"DVARP($A$15:$D$22,\"\"Age\"\",$C$11:$C$12)\"\n\"GETPIVOTDATA(F15:J16,\"\"John\"\")\"\n\"GETPIVOTDATA(F15:J16,\"\"Jos\"\")\"\n\"GETPIVOTDATA(F15:J16,\"\"Jos2\"\")\"\n\"SUM(H32:H44)=13\"\n\"SUM(E11:E20)\"\n\"Rate!C3\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"IF(K16=2,Rate!E11*0.33,IF(K16=3,Rate!E11*0.66,IF(K16=4,Rate!E11*1,0)))\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"IF(K29=2,Rate!E16*0.25,IF(K29=3,Rate!E16*0.5,IF(K29=4,Rate!E16*0.75,IF(K29=5,Rate!E16*1,0))))\"\n\"IF(K32=2,Rate!E17*0.25,IF(K32=3,Rate!E17*0.5,IF(K32=4,Rate!E17*0.75,IF(K32=5,Rate!E17*1,0))))\"\n\"Rate!C3\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"IF(K16=2,Rate!E11*0.33,IF(K16=3,Rate!E11*0.66,IF(K16=4,Rate!E11*1,0)))\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"IF(K29=2,Rate!E16*0.25,IF(K29=3,Rate!E16*0.5,IF(K29=4,Rate!E16*0.75,IF(K29=5,Rate!E16*1,0))))\"\n\"IF(K32=2,Rate!E17*0.25,IF(K32=3,Rate!E17*0.5,IF(K32=4,Rate!E17*0.75,IF(K32=5,Rate!E17*1,0))))\"\n\"Rate!C3\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"Rate!G11\"\n\"IF(K16=2,Rate!E11*0.33,IF(K16=3,Rate!E11*0.66,IF(K16=4,Rate!E11*1,0)))\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"Rate!G16\"\n\"IF(K29=2,Rate!E16*0.25,IF(K29=3,Rate!E16*0.5,IF(K29=4,Rate!E16*0.75,IF(K29=5,Rate!E16*1,0))))\"\n\"IF(K32=2,Rate!E17*0.25,IF(K32=3,Rate!E17*0.5,IF(K32=4,Rate!E17*0.75,IF(K32=5,Rate!E17*1,0))))\"\n\"Rate!C3\"\n\"'Ap1'!L16\"\n\"'Ap1'!L17\"\n\"'Ap1'!L18\"\n\"'Ap1'!L19\"\n\"'Ap1'!L20\"\n\"'Ap1'!L29\"\n\"'Ap1'!L30\"\n\"'Ap1'!L31\"\n\"'Ap1'!L32\"\n\"'Ap1'!L33\"\n\"SUM(B8:K8)\"\n\"'Ap2'!L16\"\n\"'Ap2'!L17\"\n\"'Ap2'!L18\"\n\"'Ap2'!L19\"\n\"'Ap2'!L20\"\n\"'Ap2'!L29\"\n\"'Ap2'!L30\"\n\"'Ap2'!L31\"\n\"'Ap2'!L32\"\n\"'Ap2'!L33\"\n\"'Ap3'!L16\"\n\"'Ap3'!L17\"\n\"'Ap3'!L18\"\n\"'Ap3'!L19\"\n\"'Ap3'!L20\"\n\"'Ap3'!L29\"\n\"'Ap3'!L30\"\n\"'Ap3'!L31\"\n\"'Ap3'!L32\"\n\"'Ap3'!L33\"\n\"'By Sector'!I14\"\n\"'By Sector'!I5\"\n\"'By Sector'!I6\"\n\"'By Sector'!I7\"\n\"'By Sector'!I9\"\n\"'By Sector'!I10\"\n\"'By Sector'!I11\"\n\"'By Sector'!I13\"\n\"'By Level of Processing'!J41\"\n\"'By Level of Processing'!J42\"\n\"'By Level of Processing'!J43\"\n\"'Sector by Country'!I21\"\n\"'Sector by Country'!I10\"\n\"'Sector by Country'!I28\"\n\"'Sector by Country'!I24\"\n\"(H5-G5)/G5\"\n\"(I5-H5)/H5\"\n\"SUM(H40,H36,H32,H28,H24,H20,H16,H12,H8)\"\n\"SUM(C36,C66,C96,C127,C157,C187,C217,C247)\"\n\"(H5-G5)/G5\"\n\"SUM(C5:C20)\"\n\"(H6-G6)/G6\"\n\"(H5-G5)/G5\"\n\"SUM(G5:G17)\"\n\"'By Sector'!G5\"\n\"'Sector by Country'!B21\"\n\"'Sector by Country'!G21\"\n\"'Sector by Country'!G7\"\n\"'Sector by Country'!G9\"\n\"'Sector by Country'!G24\"\n\"'Sector by Country'!G14\"\n\"'Sector by Country'!G27\"\n\"IF($B10=\"\"a\"\",0,IF($B10=\"\"c\"\",1,IF($B10=\"\"g\"\",2,IF($B10=\"\"t\"\",3,-1))))\"\n\"(C10*4+C11)*4+C12\"\n\"+A10+1\"\n\"IF(MOD(TRUNC($A30/16),4)=0,\"\"a\"\",IF(MOD(TRUNC($A30/16),4)=1,\"\"c\"\",IF(MOD(TRUNC($A30/16),4)=2,\"\"g\"\",IF(MOD(TRUNC($A30/16),4)=3,\"\"t\"\",\"\"?\"\"))))\"\n\"IF(MOD(TRUNC($A30/4),4)=0,\"\"a\"\",IF(MOD(TRUNC($A30/4),4)=1,\"\"c\"\",IF(MOD(TRUNC($A30/4),4)=2,\"\"g\"\",IF(MOD(TRUNC($A30/4),4)=3,\"\"t\"\",\"\"?\"\"))))\"\n\"IF(MOD($A30,4)=0,\"\"a\"\",IF(MOD($A30,4)=1,\"\"c\"\",IF(MOD($A30,4)=2,\"\"g\"\",IF(MOD($A30,4)=3,\"\"t\"\",\"\"?\"\"))))\"\n\"IF($D$10=$A30,$A$10,\"\" \"\")\"\n\"IF($D$11=$A30,$A$11,\"\" \"\")\"\n\"IF($D$12=$A30,$A$12,\"\" \"\")\"\n\"IF($D$13=$A30,$A$13,\"\" \"\")\"\n\"IF($D$14=$A30,$A$14,\"\" \"\")\"\n\"IF($D$15=$A30,$A$15,\"\" \"\")\"\n\"IF($D$16=$A30,$A$16,\"\" \"\")\"\n\"IF($D$17=$A30,$A$17,\"\" \"\")\"\n\"IF($D$18=$A30,$A$18,\"\" \"\")\"\n\"IF($D$19=$A30,$A$19,\"\" \"\")\"\n\"IF($D$20=$A30,$A$20,\"\" \"\")\"\n\"IF($D$21=$A30,$A$21,\"\" \"\")\"\n\"IF($D$22=$A30,$A$22,\"\" \"\")\"\n\"IF($D$23=$A30,$A$23,\"\" \"\")\"\n\"IF($D$24=$A30,$A$24,\"\" \"\")\"\n\"IF($D$25=$A30,$A$25,\"\" \"\")\"\n\"IF(MIN(E30:T30)>0,MIN(E30:T30),\"\"not found \"\")\"\n\"A30+1\"\n\"INDIRECT(ADDRESS(ROW(A$30)+D102,COLUMN($U30)))\"\n\"E8*22%\"\n\"E8*0.2\"\n\"G8*0.15\"\n\"G8*7%\"\n\"H8+I8\"\n\"G9*15%\"\n\"E10*0.5\"\n\"E39*0.3\"\n\"129/167*100\"\n\"SUM(B13:C13)\"\n\"SUM(F13:H13)\"\n\"D13-I11:I13\"\n\"D18-I15:I18\"\n\"D48-I44:I48\"\n\"SUM(B13:B84)\"\n\"B86-B89\"\n\"F4+G4\"\n\"SUM(L4:M4)\"\n\"M4/N4\"\n\"SUM(F4:F5)\"\n\"SUM(F29:F31)\"\n\"SUM(F35:F50)\"\n\"SUM(F54:F61)\"\n\"SUM(F84:F97)\"\n\"SUM(F98,F81,F62,F51,F32,F26,F21,F16,F11,F6)\"\n\"SUM(F108:F113)\"\n\"SUM(F122:F145)\"\n\"SUM(F146,F119,F114,F105)\"\n\"SUM(F149,F101)\"\n\"G3/E3\"\n\"SUM(E3:E11)\"\n\"SUM(E20:E21)\"\n\"SUM(E24:E26)\"\n\"SUM(E33:E38)\"\n\"SUM(E50:E53)\"\n\"SUM(E66:E73)\"\n\"SUM(E78:E82)\"\n\"SUM(E87:E102)\"\n\"SUM(E110:E124)\"\n\"SUM(E127:E133)\"\n\"SUM(E146:E165)\"\n\"SUM(E194:E212)\"\n\"SUM(E229:E250)\"\n\"E339-E334\"\n\"G3/E3\"\n\"SUM(E3:E7)\"\n\"SUM(E10:E12)\"\n\"SUM(E19:E20)\"\n\"SUM(E33:E36)\"\n\"SUM(E60:E66)\"\n\"SUM(E80:E87)\"\n\"SUM(E74,E67,E58,E53,E51,E49,E45,E41,E39,E37,E31,E27,E25,E23,E21,E17,E15,E13,E8)\"\n\"SUM(E92,E88,E78,E76)\"\n\"E5/D5\"\n\"B5/$B$18\"\n\"C5/$C$18\"\n\"D5/$D$18\"\n\"E5/$E$18\"\n\"SUM(B5:B9)\"\n\"SUM(B11:B16)\"\n\"SUM(B17,B10)\"\n\"B24/$B$37\"\n\"C24/$C$37\"\n\"D24/$D$37\"\n\"G3/E3\"\n\"SUM(E3:E4)\"\n\"SUM(E23:E30)\"\n\"SUM(E43:E53)\"\n\"SUM(E56:E60)\"\n\"SUM(E63:E82)\"\n\"SUM(E85:E87)\"\n\"SUM(E3,E7,E9,E11,E13,E17,E19,E21,E23:E26,E35,E39,E43:E47,E56:E57,E63:E73,E85,E91:E92)\"\n\"SUM(E4,E14,E27:E30,E33,E36,E40,E48:E53,E58:E60,E74:E82,E86:E87,E90)\"\n\"SUM(E5,E7,E9,E11,E15,E17,E19,E21,E31,E33,E37,E41,E54,E61)\"\n\"SUM(E83,E88,E93)\"\n\"G3/E3\"\n\"SUM(E3:E4)\"\n\"SUM(E15:E17)\"\n\"SUM(E45:E57)\"\n\"SUM(E64:E71)\"\n\"SUM(E141:E152)\"\n\"SUM(E161:E176)\"\n\"SUM(E179:E183)\"\n\"SUM(E188:E191)\"\n\"SUM(E215,E212)\"\n\"D4/C4\"\n\"B4/$B$17\"\n\"C4/$C$17\"\n\"D4/$D$17\"\n\"SUM(B4:B8)\"\n\"SUM(B10:B15)\"\n\"SUM(B16,B9)\"\n\"B23/$B$36\"\n\"C23/$C$36\"\n\"D23/$D$36\"\n\"75*3\"\n\"G5/E5\"\n\"SUM(E7:E8)\"\n\"SUM(E23:E25)\"\n\"SUM(E66:E69)\"\n\"E90+E85+E83+E78+E76+E74+E72+E70+E64+E59+E57+E55+E53+E51+E48+E46+E50+E44+E40+E38+E36+E34+E32+E30+E28+E21+E17+E26+E13+E9+E5\"\n\"G108/E108\"\n\"SUM(E124:E132)\"\n\"SUM(E141:E147)\"\n\"E178+E176+E174+E172+E168+E166+E164+E162+E160+E156+E152+E148+E139+E137+E135+E133+E122+E117+E113+E111+E109+E103+E98+E94\"\n\"SUM(C7:C37)\"\n\"SUM(C56:C79)\"\n\"C80+C38\"\n\"B7+E7+H7\"\n\"K7+M7+O7+Q7+W7\"\n\"S7+T7+U7+V7+Y7\"\n\"AB7\"\n\"AK7/AW7\"\n\"AN7/AW7\"\n\"AQ7/AW7\"\n\"AT7/AW7\"\n\"AW7/AW7\"\n\"D9/C9\"\n\"B9/B23\"\n\"B10/B23\"\n\"B11/B23\"\n\"B12/B23\"\n\"B13/B23\"\n\"SUM(B9:B13)\"\n\"B14/B23\"\n\"B16/B23\"\n\"B17/B23\"\n\"B18/B23\"\n\"B19/B23\"\n\"B20/B23\"\n\"B21/B23\"\n\"SUM(B16:B21)\"\n\"B22/B23\"\n\"B22+B14\"\n\"SUM(C6:C31)\"\n\"SUM(C5:C26)\"\n\"SUM(C5:C17)\"\n\"SUM(C5:C7)\"\n\"SUM(C5:C12)\"\n\"SUM(C5:C6)\"\n\"SUM(C5:C24)\"\n\"SUM(C6:C30)\"\n\"SUM(C15:C18)\"\n\"SUM(C5:C8)\"\n\"C6*F6\"\n\"D7-E7\"\n\"(C13*F13)\"\n\"SUM(D6:D19)\"\n\"SUM(C5:C18)\"\n\"SUM(H5-J5)\"\n\"(1600000*17)/100\"\n\"SUM(H6:H168)\"\n\"COUNT(D25:D74)\"\n\"AVERAGE(D25:D74)\"\n\"MODE(D25:D74)\"\n\"MEDIAN(D25:D74)\"\n\"MAX(D25:D74)\"\n\"MIN(D25:D74)\"\n\"MAX(D25:D74)-MIN(D25:D74)\"\n\"SUM(C6:C12)\"\n\"IF(C14=1,\"\"\"\",\"\"Not 100%\"\")\"\n\"IF('Rsrc-P'!C6>0,SUM(C6:C10),NA())\"\n\"IF(ISERROR(C12),\"\"\"\",IF(C12=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C7>0,SUM(C6:C9),NA())\"\n\"IF(ISERROR(C11),\"\"\"\",IF(C11=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C8>0,SUM(C6:C9),NA())\"\n\"IF(ISERROR(C11),\"\"\"\",IF(C11=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C9>0,SUM(C6:C11),NA())\"\n\"IF(ISERROR(C13),\"\"\"\",IF(C13=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C10>0,SUM(C6:C17),NA())\"\n\"IF(ISERROR(C19),\"\"\"\",IF(C19=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C11>0,SUM(C6:C11),NA())\"\n\"IF(ISERROR(C13),\"\"\"\",IF(C13=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"IF('Rsrc-P'!C12>0,SUM(C6:C11),NA())\"\n\"IF(ISERROR(C13),\"\"\"\",IF(C13=1,\"\"\"\",\"\"Not 100%\"\"))\"\n\"'Rsrc-P'!C6\"\n\"Detail!H8\"\n\"Detail!H15\"\n\"Detail!H21\"\n\"Detail!H27\"\n\"Detail!H35\"\n\"Detail!H49\"\n\"Detail!H57\"\n\"C6+C7+C8+C9+C10+C11+C12\"\n\"C8+C15+C21+C27+C35+C49+C57\"\n\"'Rsrc-P'!C6\"\n\"SUM(H9:H13)\"\n\"C$8*'Select-P'!C6\"\n\"C9*'Select-D'!C6\"\n\"'Rsrc-P'!C7\"\n\"SUM(H16:H19)\"\n\"C$15*'Acquire-P'!C6\"\n\"C16*'Acquire-D'!C6\"\n\"'Rsrc-P'!C8\"\n\"C$21*'Catalog-P'!C6\"\n\"C22*'Catalog-D'!C6\"\n\"'Rsrc-P'!C9\"\n\"SUM(H28:H33)\"\n\"C$27*'Maint-P'!C6\"\n\"C28*'Maint-D'!C6\"\n\"'Rsrc-P'!C10\"\n\"SUM(H36:H47)\"\n\"C$35*'Circ-P'!C6\"\n\"C36*'Circ-D'!C6\"\n\"'Rsrc-P'!C11\"\n\"C$49*'Whse-P'!C6\"\n\"C50*'Whse-D'!C6\"\n\"'Rsrc-P'!C12\"\n\"C$57*'Dispose-P'!C6\"\n\"C58*'Dispose-D'!C6\"\n\"COUNTA(C6:C60)\"\n\"H62/C62\"\n\"SUM(H62:K62)/SUM(C62:F62)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:D10)\"\n\"SUM(C10:C53)\"\n\"SUM(C2:N2)\"\n\"SUM(C2:N2)\"\n\"SUM(C2:N2)\"\n\"SUM(C2:N2)\"\n\"SUM(C2:N2)\"\n\"SUM(C3:N3)\"\n\"86+13\"\n\"57+20\"\n\"63+14\"\n\"53+8\"\n\"B41\"\n\"B4+C4-D4\"\n\"E38*454\"\n\"I38*454/10^3\"\n\"K38*454/1000\"\n\"(F4*10^12*3.6*10^6)/(B4*10^15)\"\n\"(G21*10^12*3.6*10^6)/(C21*10^15)\"\n\"(J21+K4)/2\"\n\"B5*454\"\n\"F5*454/10^3\"\n\"H5*454/1000\"\n\"SUM(D3:E3)\"\n\"SUM(D3:D12)\"\n\"SUM(B4:D4)\"\n\"E4*F4\"\n\"SUM(B4:B15)\"\n\"SUM(E3:E16)\"\n\"SUM(I4:I16)\"\n\"B22*(1-C22)\"\n\"SUM(B22:B36)\"\n\"SUM(B40:B46)\"\n\"SUM(B50:B57)\"\n\"SUM(B58,B47,B37)\"\n\"SUM(C5:C7)\"\n\"B4*C4\"\n\"B4*(1-C4)\"\n\"SUM(B4:B22)\"\n\"SUM(B28:B39)\"\n\"SUM(D58,D41)\"\n\"'Not to Exceed'!B4*'Not to Exceed'!F4+'Not to Exceed'!B5*'Not to Exceed'!F5+'Not to Exceed'!B6*'Not to Exceed'!F6+'Not to Exceed'!B7*'Not to Exceed'!F7+'Not to Exceed'!B8*'Not to Exceed'!F8+'Not to Exceed'!B9*'Not to Exceed'!F9+'Not to Exceed'!B10*'Not to Exceed'!F10+'Not to Exceed'!B11*'Not to Exceed'!F11+'Not to Exceed'!B12*'Not to Exceed'!F12\"\n\"'Not to Exceed'!C4*'Not to Exceed'!F4+'Not to Exceed'!C5*'Not to Exceed'!F5+'Not to Exceed'!C6*'Not to Exceed'!F6+'Not to Exceed'!C7*'Not to Exceed'!F7+'Not to Exceed'!C8*'Not to Exceed'!F8+'Not to Exceed'!C9*'Not to Exceed'!F9+'Not to Exceed'!C10*'Not to Exceed'!F10+'Not to Exceed'!C11*'Not to Exceed'!F11+'Not to Exceed'!C12*'Not to Exceed'!F12\"\n\"'Not to Exceed'!D4*'Not to Exceed'!F4+'Not to Exceed'!D5*'Not to Exceed'!F5+'Not to Exceed'!D6*'Not to Exceed'!F6+'Not to Exceed'!D7*'Not to Exceed'!F7+'Not to Exceed'!D8*'Not to Exceed'!F8+'Not to Exceed'!D9*'Not to Exceed'!F9+'Not to Exceed'!D10*'Not to Exceed'!F10+'Not to Exceed'!D11*'Not to Exceed'!F11+'Not to Exceed'!D12*'Not to Exceed'!F12\"\n\"'Customization & Implementation'!D41\"\n\"SUM(B2:B6)\"\n\"Software!F13\"\n\"#REF!\"\n\"'Customization & Implementation'!D46\"\n\"'Customization & Implementation'!D45\"\n\"SUM(B3:B15)\"\n\"(I4-C4)/C4\"\n\"(I4-F4)/F4\"\n\"I4/$I$80\"\n\"(F54*2)+F56\"\n\"SUM(B4:B78)\"\n\"B54\"\n\"F54+F56\"\n\"SUM(B82:B83)\"\n\"F82-F83\"\n\"(I4-B4)/B4\"\n\"(I4-F4)/F4\"\n\"I4/$I$68\"\n\"SUM(B4:B66)\"\n\"(C4-B4)/B4\"\n\"C4/C$68\"\n\"SUM(B4:B66)\"\n\"(E7-D7)/D7\"\n\"SUM(B7:B31)\"\n\"(E7-D7)/D7\"\n\"SUM(B7:B34)\"\n\"SUM(B7:B38)\"\n\"C8*B8\"\n\"SUM(B8:B12)\"\n\"'Total Spending (estimated)'!B8\"\n\"'Total Spending (estimated)'!B9\"\n\"'Total Spending (estimated)'!B10\"\n\"'Total Spending (estimated)'!B11\"\n\"'Total Spending (estimated)'!B12\"\n\"SUM(B7:F7)\"\n\"B$7*'Primary Spend by Subject (EPC)'!B7\"\n\"SUM(B8:B21)\"\n\"'Total Spending (estimated)'!D8\"\n\"'Total Spending (estimated)'!D9\"\n\"'Total Spending (estimated)'!D10\"\n\"'Total Spending (estimated)'!D11\"\n\"'Total Spending (estimated)'!D12\"\n\"'Total Spending (estimated)'!D13\"\n\"'Total Spending (estimated)'!B17\"\n\"'Total Spending (estimated)'!B18\"\n\"'Total Spending (estimated)'!B19\"\n\"'Total Spending (estimated)'!B20\"\n\"'Total Spending (estimated)'!B21\"\n\"SUM(B7:F7)\"\n\"B$7*'Secondary spend by Subject- EPC'!B7\"\n\"SUM(B8:B22)\"\n\"'Total Spending (estimated)'!D17\"\n\"'Total Spending (estimated)'!D18\"\n\"'Total Spending (estimated)'!D19\"\n\"'Total Spending (estimated)'!D20\"\n\"'Total Spending (estimated)'!D21\"\n\"'Total Spending (estimated)'!D22\"\n\"C11*E11/100\"\n\"J11+K11\"\n\"H11*C11*E11/100\"\n\"H11*C11-J11\"\n\"K11/K33\"\n\"K12/K33\"\n\"K13/K33\"\n\"K14/K33\"\n\"K15/5549\"\n\"K16/K33\"\n\"K17/K33\"\n\"SUM(C11:C32)\"\n\"D33/C33\"\n\"I33/C33\"\n\"SUM(K11:K32)-K25-K31\"\n\"C33-C32-C28\"\n\"D33-D28-D32\"\n\"D33/C34\"\n\"H34/C34\"\n\" K34/K33\"\n\"J34/(J34+K34)\"\n\"K34/(K34+J34)\"\n\"1-((E3-F3)/E3)\"\n\"(C6-C5)/C5\"\n\"E8-2258280\"\n\"(0.46*C7)\"\n\"(0.22*E7)\"\n\"(0.43*C8)\"\n\"(0.2*E8)\"\n\"(0.17*E9)\"\n\"(M12-M11)/M11\"\n\"(Q21-Q12)/Q12\"\n\"(M21-M12)/M12\"\n\"265+34\"\n\"218+78\"\n\"121+94\"\n\"169+18\"\n\"112+37\"\n\"41+39\"\n\"129+25\"\n\"95+50\"\n\"80+59\"\n\"106+17\"\n\"40+21\"\n\"14+13\"\n\"145+47\"\n\"83+58\"\n\"28+6\"\n\"68+11\"\n\"61+16\"\n\"51+44\"\n\"17+24\"\n\"151+30\"\n\"80+49\"\n\"71+63\"\n\"21+32\"\n\"59+26\"\n\"71+65\"\n\"64+21\"\n\"65+38\"\n\"48+42\"\n\"26+36\"\n\"27+11\"\n\"85+92\"\n\"171+200\"\n\"129+133\"\n\"55+75\"\n\"15+17\"\n\"35+45\"\n\"37+46\"\n\"35+74\"\n\"122+182\"\n\"0\"\n\"41+13\"\n\"26+39\"\n\"28+54\"\n\"SUM(D2:D82)\"\n\"SUM(B4:K4)/9\"\n\"SUM(B4:B10)/7\"\n\"SUM(B13:B15)/3\"\n\"SUM(B18:B34)/17\"\n\"SUM(B37:B41)/5\"\n\"SUM(B44:K44)/10\"\n\"SUM(B46)/33\"\n\"'Power (W)'!F7\"\n\"'(MFLOPS)'!F11\"\n\"'Mass(kg)'!F16\"\n\"'Cost($)'!F19\"\n\"'Power (W)'!F12\"\n\"'(MFLOPS)'!F24\"\n\"'Mass(kg)'!F31\"\n\"'Cost($)'!F38\"\n\"'Power (W)'!F23\"\n\"'(MFLOPS)'!F30\"\n\"'Mass(kg)'!F45\"\n\"'Cost($)'!F55\"\n\"'Power (W)'!F28\"\n\"'(MFLOPS)'!F35\"\n\"'Mass(kg)'!F53\"\n\"'Cost($)'!F73\"\n\"'Power (W)'!F34\"\n\"'(MFLOPS)'!F41\"\n\"'Mass(kg)'!F59\"\n\"'Cost($)'!F83\"\n\"'Power (W)'!F44\"\n\"'(MFLOPS)'!F54\"\n\"'Mass(kg)'!F75\"\n\"'Cost($)'!F112\"\n\"'Cost($)'!F122\"\n\"SUM(C5:C11)\"\n\"C14*(1-C16)\"\n\"C17-C12\"\n\"C6*E6\"\n\"SUM(F6:F6)\"\n\"30/9\"\n\"SUM(F16:F22)\"\n\"SUM(F41:F43)\"\n\"C6*E6\"\n\"SUM(F6:F10)\"\n\"SUM(F18:F23)\"\n\"C29\"\n\"SUM(F29:F29)\"\n\"0.5*0.0321\"\n\"C46*E46\"\n\"C46*E46\"\n\"C46*E46\"\n\"C46*E46\"\n\"C46*E46\"\n\"C46*E46\"\n\"C46*E46\"\n\"SUM(F46:F53)\"\n\"C6*E6\"\n\"SUM(F6:F15)\"\n\"SUM(F22:F30)\"\n\"2.04/3\"\n\"SUM(F39:F44)\"\n\"SUM(F50:F52)\"\n\"SUM(F58:F58)\"\n\"4.12*0.4536\"\n\"F64\"\n\"E73*C73\"\n\"SUM(F64:F74)\"\n\"C5*E5\"\n\"SUM(F5:F18)\"\n\"SUM(F25:F37)\"\n\"6490/3\"\n\"SUM(F44:F54)\"\n\"1750/3\"\n\"SUM(F61:F72)\"\n\"SUM(F79:F82)\"\n\"E92*C92\"\n\"SUM(F89:F111)\"\n\"SUM(B5:H5)\"\n\"'[1]Cost($)'!F16\"\n\"'[1]Cost($)'!F29\"\n\"'[1]Cost($)'!F47\"\n\"'[1]Cost($)'!F64\"\n\"'[1]Cost($)'!F73\"\n\"'[1]Cost($)'!F101\"\n\"'[1]Cost($)'!F110\"\n\"'Cost($)'!F19\"\n\"'Cost($)'!F38\"\n\"'Cost($)'!F55\"\n\"'Cost($)'!F73\"\n\"'Cost($)'!F83\"\n\"'Cost($)'!F112\"\n\"'Cost($)'!F122\"\n\"'Cost($)'!G19\"\n\"'Cost($)'!G38\"\n\"'Cost($)'!G55\"\n\"'Cost($)'!G73\"\n\"'Cost($)'!G83\"\n\"'Cost($)'!G112\"\n\"'Cost($)'!G122\"\n\"J6\"\n\"170000*0.9\"\n\"J9\"\n\"Z35+Z32+Z29+Z26+Z23+Z20+Z17+Z14+Z11+Z8+Z5\"\n\"Z35+Z32+Z29+Z26+Z23+Z20+Z17+Z14+Z11+Z8+Z5\"\n\"Z35+Z32+Z29+Z26+Z23+Z20+Z17+Z14+Z11+Z8+Z5\"\n\"Z35+Z32+Z29+Z26+Z23+Z20+Z17+Z14+Z11+Z8+Z5\"\n\"COUNTIF(E6:AL6,\"\"x\"\")\"\n\"SUM(C6/$A$2)\"\n\"COUNTIF(E6:AL6,\"\"x\"\")\"\n\"SUM(C6/$A$2)\"\n\"SUM(C64/32)\"\n\"SUM(C73/$A$3)\"\n\"SUM(C93/29)\"\n\"27.796+6.243+24.316\"\n\"30.082+9.335+25.077\"\n\"39.246+13.038+19.13\"\n\"23.763+11.565+29.964\"\n\"35.144+12.275+24.902\"\n\"19.08+8.643+25.129\"\n\"19.141+7.363+29.449\"\n\"19.66+6.522+30.127\"\n\"15.958+5.131+30.638\"\n\"SUBTOTAL(9,C9:C504)\"\n\"IF(ISNA(INDEX(nfSalaries,MATCH($A9,nfEmployees,0),1)),0,$C9*INDEX(nfSalaries,MATCH($A9,nfEmployees,0),1))\"\n\"SUMPRODUCT((Database!$A$9:$A$504=$A6)*(Database!$B$9:$B$504=B$5)*(Database!$C$9:$C$504))\"\n\"SUM(B6:F6)\"\n\"SUM(B6:B8)\"\n\"SUMPRODUCT((Database!$A$9:$A$504=$A6)*(Database!$B$9:$B$504=B$5)*(Database!$D$9:$D$504))\"\n\"SUM(B6:F6)\"\n\"SUM(B6:B8)\"\n\"SUMPRODUCT((Database!$A$9:$A$504=B$5)*(Database!$B$9:$B$504=$A6)*(Database!$C$9:$C$504))\"\n\"SUM(B6:D6)\"\n\"SUM(B6:B10)\"\n\"SUMPRODUCT((Database!$A$9:$A$504=B$5)*(Database!$B$9:$B$504=$A6)*(Database!$D$9:$D$504))\"\n\"SUM(B6:D6)\"\n\"SUM(B6:B10)\"\n\"'FS Plan Detail'!A1\"\n\"'FS Plan Detail'!A20\"\n\"'FS Plan Detail'!A32\"\n\"'FS Plan Detail'!A38\"\n\"'FS Plan Detail'!A74\"\n\"'FS Plan Detail'!A102\"\n\"'FS Plan Detail'!A108\"\n\"'FS Plan Detail'!A129\"\n\"'FS Plan Detail'!A159\"\n\"'FS Plan Detail'!A1\"\n\"'FS Plan Detail'!A20\"\n\"'FS Plan Detail'!A32\"\n\"'FS Plan Detail'!A38\"\n\"'FS Plan Detail'!A74\"\n\"'FS Plan Detail'!A102\"\n\"'FS Plan Detail'!A108\"\n\"'FS Plan Detail'!A129\"\n\"'FS Plan Detail'!A159\"\n\"SUM(B4)\"\n\"SUM(B8:B23)\"\n\"SUM(B27:B28)\"\n\"SUM(B32:B36)\"\n\"SUM(B40:B42)\"\n\"SUM(B46:B63)\"\n\"SUM(B67:B70)\"\n\"SUM(B74:B79)\"\n\"SUM(B83:B89)\"\n\"SUM(B101:B111)\"\n\"SUM(B116,B112,B98,B94,B90,B80,B71,B64,B43,B37,B29,B24,B5)\"\n\"SUM(D11:E11)\"\n\"SUM(C11:C21)\"\n\"SUM(C25:C34)\"\n\"SUM(F2:Q2)\"\n\"SUM(N37:Q37)\"\n\"SUM(L67:Q67)\"\n\"SUM(Q69)\"\n\"SUM(M113:Q113)\"\n\"SUM(G121:Q121)\"\n\"SUM(J149:Q149)\"\n\"SUM(F2:F174)\"\n\"SUM(F2:Q2)\"\n\"SUM(F2:F81)\"\n\"SUM(G3-F3+1)\"\n\"SUM(C3*K21)*1.15\"\n\"SUM(E3/40)\"\n\"SUM(11-I3)\"\n\"SUM(C4*K21)*1.15\"\n\"SUM(C5*K21)*1.15\"\n\"SUM(C6*K21)*1.15\"\n\"SUM(C7*K21)*1.15\"\n\"SUM(G7-F7+1)\"\n\"SUM(C8*K21)*1.15\"\n\"SUM(C9*K28)*1.15\"\n\"SUM(C11*K21)*1.15\"\n\"SUM(C12*K21)*1.15\"\n\"SUM(C17*K17)*1.15\"\n\"SUM(E21/80)\"\n\"SUM(C22*K21)*1.15\"\n\"SUM(C23*K21)*1.15\"\n\"SUM(C26*K17)*1.15\"\n\"SUM(E26/160)\"\n\"SUM(C27*K28)*1.15\"\n\"SUM(C31*K28)*1.15\"\n\"SUM(C32*K28)*1.15\"\n\"SUM(C4*K4)*1.15\"\n\"SUM(C5*K4)*1.15\"\n\"SUM(C6*K4)*1.15\"\n\"SUM(C4:C12)\"\n\"SUM(C7*K4)*1.15\"\n\"SUM(C5,C6,C10,C12)\"\n\"SUM(C8*K4)*1.15\"\n\"SUM(C9*K4)*1.15\"\n\"SUM(C15:C48)+F7\"\n\"SUM(C10*K4)*1.15\"\n\"SUM(C11*K4)*1.15\"\n\"SUM(C12*K4)*1.15\"\n\"SUM(G15-F15+1)\"\n\"SUM(C15*K4)*1.15\"\n\"SUM(E15/40)\"\n\"SUM(3-I15)\"\n\"SUM(C16*K4)*1.15\"\n\"SUM(C17*K4)*1.15\"\n\"SUM(C18*K4)*1.15\"\n\"SUM(C19*K4)*1.15\"\n\"SUM(C20*K4)*1.15\"\n\"SUM(C21*K4)*1.15\"\n\"SUM(C22*K4)*1.15\"\n\"SUM(12-I22)\"\n\"SUM(C23*K4)*1.15\"\n\"SUM(C24*K4)*1.15\"\n\"SUM(C25*K4)*1.15\"\n\"SUM(C26*K4)*1.15\"\n\"SUM(C27*K4)*1.15\"\n\"SUM(11-I27)\"\n\"SUM(C28*K4)*1.15\"\n\"SUM(C29*K4)*1.15\"\n\"SUM(C30*K4)*1.15\"\n\"SUM(11-H30)\"\n\"SUM(C31*K4)*1.15\"\n\"SUM(C32*K4)*1.15\"\n\"SUM(C33*K4)*1.15\"\n\"SUM(C34*K4)*1.15\"\n\"SUM(C35*K4)*1.15\"\n\"SUM(C36*K4)*1.15\"\n\"SUM(C37*K4)*1.15\"\n\"SUM(C38*K4)*1.15\"\n\"SUM(C39*K4)*1.15\"\n\"SUM(C40*K4)*1.15\"\n\"SUM(C41*K4)*1.15\"\n\"SUM(C42*K4)*1.15\"\n\"SUM(C43*K4)*1.15\"\n\"SUM(C44*K4)*1.15\"\n\"SUM(C45*K4)*1.15\"\n\"SUM(C46*K4)*1.15\"\n\"SUM(C47*K4)*1.15\"\n\"SUM(C48*K4)*1.15\"\n\"SUM(C52*K4)*1.15\"\n\"SUM(C55*K6)*1.15\"\n\"SUM(C58*K5)*1.15\"\n\"SUM(C60*K5)*1.15\"\n\"SUM(C61*K4)*1.15\"\n\"SUM(C62*K4)*1.15\"\n\"SUM(C65*K5)*1.15\"\n\"SUM(G68-F68+1)*8*H68\"\n\"SUM(G3-F3+1)\"\n\"SUM(C3*K26)*1.15\"\n\"SUM(E3/40)\"\n\"SUM(11-I3)\"\n\"SUM(C4*K26)*1.15\"\n\"SUM(C5*K26)*1.15\"\n\"SUM(C6*K26)*1.15\"\n\"SUM(C7*K26)*1.15\"\n\"SUM(C8*K22)*1.15\"\n\"SUM(C9*K26)*1.15\"\n\"SUM(C11*K26)*1.15\"\n\"SUM(C13*K26)*1.15\"\n\"SUM(C14*K26)*1.15\"\n\"SUM(C15*K26)*1.15\"\n\"SUM(C16*K26)*1.15\"\n\"SUM(C17*K26)*1.15\"\n\"SUM(C18*K26)*1.15\"\n\"SUM(C22*K22)*1.15\"\n\"SUM(E26/80)\"\n\"SUM(C27*K26)*1.15\"\n\"SUM(C28*K26)*1.15\"\n\"SUM(C33*K35)*1.15\"\n\"SUM(E33/160)\"\n\"SUM(C34*K35)*1.15\"\n\"SUM(C38*K35)*1.15\"\n\"SUM(C39*K35)*1.15\"\n\"SUM(C40*K22)*1.15\"\n\"SUM(C41*K26)*1.15\"\n\"SUM(C45/2)\"\n\"SUM(C4*K4)*1.15\"\n\"SUM(C5*K4)*1.15\"\n\"SUM(C6*K4)*1.15\"\n\"SUM(C4:C12)\"\n\"SUM(C7*K4)*1.15\"\n\"SUM(C5,C6,C10,C12)\"\n\"SUM(C8*K4)*1.15\"\n\"SUM(C9*K4)*1.15\"\n\"SUM(C16:C52)+F7\"\n\"SUM(C10*K4)*1.15\"\n\"SUM(C11*K4)*1.15\"\n\"SUM(C12*K4)*1.15\"\n\"SUM(G16-F16+1)\"\n\"SUM(C16*K4)*1.15\"\n\"SUM(E16/40)\"\n\"SUM(3-I16)\"\n\"SUM(C17*K4)*1.15\"\n\"SUM(C18*K4)*1.15\"\n\"SUM(C19*K4)*1.15\"\n\"SUM(C20*K4)*1.15\"\n\"SUM(C21*K4)*1.15\"\n\"SUM(C22*K4)*1.15\"\n\"SUM(C23*K4)*1.15\"\n\"SUM(12-I23)\"\n\"SUM(C24*K4)*1.15\"\n\"SUM(C25*K4)*1.15\"\n\"SUM(C26*K4)*1.15\"\n\"SUM(C27*K4)*1.15\"\n\"SUM(C28*K4)*1.15\"\n\"SUM(11-I28)\"\n\"SUM(C29*K4)*1.15\"\n\"SUM(C30*K4)*1.15\"\n\"SUM(C31*K4)*1.15\"\n\"SUM(11-H31)\"\n\"SUM(C32*K4)*1.15\"\n\"SUM(C33*K4)*1.15\"\n\"SUM(C34*K4)*1.15\"\n\"SUM(C35*K4)*1.15\"\n\"SUM(C36*K4)*1.15\"\n\"SUM(C37*K4)*1.15\"\n\"SUM(C38*K4)*1.15\"\n\"SUM(C39*K4)*1.15\"\n\"SUM(C40*K4)*1.15\"\n\"SUM(C41*K4)*1.15\"\n\"SUM(C42*K4)*1.15\"\n\"SUM(C43*K4)*1.15\"\n\"SUM(C44*K4)*1.15\"\n\"SUM(C45*K4)*1.15\"\n\"SUM(C46*K4)*1.15\"\n\"SUM(C47*K4)*1.15\"\n\"SUM(C48*K4)*1.15\"\n\"SUM(C49*K4)*1.15\"\n\"SUM(C50*K4)*1.15\"\n\"SUM(G50-F50+1)\"\n\"SUM(C51*K4)*1.15\"\n\"SUM(C52*K4)*1.15\"\n\"SUM(C55*K4)*1.15\"\n\"SUM(C56*K4)*1.15\"\n\"SUM(C57*K4)*1.15\"\n\"SUM(E57/80)\"\n\"SUM(C60*K6)*1.15\"\n\"SUM(C63*K5)*1.15\"\n\"SUM(C65*K5)*1.15\"\n\"SUM(C66*K4)*1.15\"\n\"SUM(C67*K4)*1.15\"\n\"SUM(C70*K5)*1.15\"\n\"SUM(C71*K61)*1.15\"\n\"SUM(E71/160)\"\n\"SUM(C72*K74)*1.15\"\n\"SUM(G76-F76+1)*8*H76\"\n\"CONCATENATE(F166,\"\" \"\",F167)\"\n\"DAVERAGE(_xlnm.Database, \"\"Age\"\", Q2:Q3)\"\n\"DAVERAGE(_xlnm.Database, \"\"Age\"\", R2:R3)\"\n\"DCOUNT(_xlnm.Database, \"\"Age\"\", S2:S3)\"\n\"J9 / I9\"\n\"VLOOKUP(K9, $N$3:$O$7, 2)\"\n\"+E3+4000\"\n\"+E3+8000\"\n\"+E3+2000\"\n\"ROUND(E3*0.827,0)\"\n\"E11+4000\"\n\"E11+8000\"\n\"E11+2000\"\n\"D19*5500\"\n\"E19\"\n\"D20*4500\"\n\"D22*5000\"\n\"D99*4300\"\n\"D100*2800\"\n\"ROUND(E155*0.83,0)\"\n\"\"\"version 11/08/03     \"\"\"\n\"56400000000*1.01097683452934/(1+F6*0.42*R6*298)\"\n\"T6\"\n\"(5*L6)/(3*H6)\"\n\"R6+J6\"\n\"H9\"\n\"P8\"\n\"57760000000+241000000*100\"\n\"58300000000\"\n\"L11*H12/H11\"\n\"175000000000/(1+F13*0.42*R13*298)\"\n\"167000000000/(1+F14*0.42*R14*298)\"\n\"101000000000/(1+F19*0.42*R19*298)\"\n\"L29*H23/H29\"\n\"L29*H24/H29\"\n\"L29*H25/H29\"\n\"L29*H26/H29\"\n\"L29*H27/H29\"\n\"L29*H28/H29\"\n\"L33*(H36/H33)\"\n\"L33*(H37/H33)\"\n\"L39*(H40/H39)\"\n\"162000000000\"\n\"L33*(H43/H33)\"\n\"L39*(H44/H39)\"\n\"L33*(H47/H33)\"\n\"L16*(H48/H16)\"\n\"97500000000\"\n\"L16*(H49/H16)\"\n\"170800000000/(1+F50*0.42*R50*298)\"\n\"210300000000/(1+F53*0.42*R53*298)\"\n\"46900000000/(1+F56*0.42*R56*298)\"\n\"SUM(B5:B56)\"\n\"0.88*15\"\n\"0.12*15\"\n\"85*0.91\"\n\"0.09*85\"\n\"SUM(E5:E56)\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+W2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AH2/W2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"MAX(N2,O2)\"\n\"MAX(U2,V2)\"\n\"MAX(AH2,W2)\"\n\"MAX(T2,D2)\"\n\"MAX(V2,D2)\"\n\"MAX(G2,D2)\"\n\"MAX(G2:M2)\"\n\"+L2\"\n\"+E2-E47\"\n\"+E15-E58\"\n\"+Selection!D1\"\n\"IF(ISERR(Selection!D2),\"\"\"\",IF(ISNA(Selection!D2),\"\"\"\",Selection!F2))\"\n\"IF(ISERR(Selection!D2),\"\"\"\",IF(ISNA(Selection!D2),\"\"\"\",Selection!D2))\"\n\"IF(C2=\"\"\"\",\"\"\"\",IF(Menus!$K$10=\"\"2001 Grossed\"\",VLOOKUP(MAX(Selection!M2:N2),$N$2:$O$4,2),\"\"\"\"))\"\n\"1+A2\"\n\"IF(Menus!$J$9,OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$3)&\"\" / \"\"&OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$4),OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$3))\"\n\"OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$4)\"\n\"IF(Menus!$K$5=0,\"\"(blank)\"\",Menus!$K$5)\"\n\"IF(Menus!$K$6=0,\"\"(blank)\"\",Menus!$K$6)\"\n\"IF(Menus!$K$7=0,\"\"(blank)\"\",Menus!$K$7)\"\n\"IF(Menus!$K$8=0,\"\"(blank)\"\",Menus!$K$8)\"\n\"SUM(K2:K501)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,Menus!$K$10)),0,Menus!$J$4)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,Menus!$K$10)),0,Menus!$J$3)\"\n\"IF(Menus!$J$9,C2/B2,C2)\"\n\"IF($K2=1,VALUE(B2),#N/A)\"\n\"INDIRECT(ADDRESS($A2,1,3,1,Menus!$K$10))\"\n\"IF(INDIRECT(ADDRESS($A2,2,3,1,Menus!$K$10))=G$1,$D2,#N/A)\"\n\"IF(INDIRECT(ADDRESS($A2,1,3,1,Menus!$K$10))=T(J$1),$D2,#N/A)\"\n\"IF(OR(ISNUMBER($G2),ISNUMBER($H2),ISNUMBER($I2),ISNUMBER($J2)),1,0)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,\"\"Gross\"\")),0,Menus!$J$4)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,\"\"Gross\"\")),0,Menus!$J$3)\"\n\"TRANSPOSE(INDIRECT(ADDRESS(1,4,3,1,Menus!$K$10)):INDIRECT(ADDRESS(1,256,3,1,Menus!$K$10)))\"\n\"INDIRECT(ADDRESS($B2,1,3,1,Menus!$K$10))\"\n\"INDIRECT(ADDRESS($B2,2,3,1,Menus!$K$10))\"\n\"INDEX(F4:F54,J5)\"\n\"INDEX(F4:F54,J6)\"\n\"INDEX(F4:F54,J7)\"\n\"INDEX(C2:C501,J8)\"\n\"INDEX(N2:N51,J10)\"\n\"IF(K10=\"\"2000 Grossed\"\",\"\"Gross\"\",\"\"\"\")\"\n\"(24.2+21.9+30.5)/1820.1\"\n\"(22+20.8+27)/1862.1\"\n\"(68+172+63.4)/1328.4\"\n\"(58.9+189.7+72.2)/1392.8\"\n\"(92.2+193.9+93.9)/3148.5\"\n\"(80.9+210.4+99.2)/3254.9\"\n\"B5/B6\"\n\"B9*D9\"\n\"C9*D9\"\n\"B7*B10\"\n\"B15/B12\"\n\"B14*D14\"\n\"C14*D14\"\n\"B7*B12*B13\"\n\"B16*B12*D16\"\n\"C16*D16*C12\"\n\"G16/B12\"\n\"G18\"\n\"SUM(G9:G16)/3600\"\n\"B18/(B5/1000)\"\n\"B9+B15+B11+(B16*B12)\"\n\"(B18/B20)\"\n\"B21*3600\"\n\"I18\"\n\"B27*B28\"\n\"B29/(24*365*75)\"\n\"B28/B21\"\n\"C31\"\n\"$B18\"\n\"B$29\"\n\"C29\"\n\"B35/B34\"\n\"($B$5*B36)/1000\"\n\"B37/(3600*24)\"\n\"$C18\"\n\"(B43*$B$5)/1000\"\n\"I18\"\n\"J18\"\n\"B51/B52\"\n\"B51/B53\"\n\"(B54*$B$5)/1000\"\n\"C6/$C$34\"\n\"(C45*2)/(#REF!/$C$34)\"\n\"SUM(C47:C48)\"\n\"D45-D47-D48-D49-D50\"\n\"(28991/$C$34)/(#REF!/$C$34)\"\n\"D17/C34\"\n\"D19\"\n\"541/22020\"\n\"(996/C34)/C45\"\n\"(996/C34)/(#REF!/C34)\"\n\"SUM(N101:O101)\"\n\"E125-F125\"\n\"+K125+L125\"\n\"N125+O125\"\n\"E125/D125*1000\"\n\"F125/D125*1000\"\n\"H125/E125*1000\"\n\"I125/D125*1000\"\n\"J125/($E125+$J125)*1000\"\n\"M125/($E125+$N125)*1000\"\n\"P125/D125*1000\"\n\"Q125/D125*1000\"\n\"SUM(I7:I105)\"\n\"SUM(M106,Q106)*1000\"\n\"SUM(O106,S106)*1000\"\n\"ROUNDDOWN(C4/21,0)\"\n\"C6*C7\"\n\"C8*C10\"\n\"E8*21\"\n\"E8*E10\"\n\"E11*E12\"\n\"ROUNDDOWN(C4/21,0)\"\n\"C5*21\"\n\"C5*C8\"\n\"C9*C11\"\n\"(C12-C6)/C6\"\n\"ROUNDDOWN(C4/21,0)\"\n\"C5*21\"\n\"C5*C8\"\n\"C9*C11\"\n\"(C12-C6)/C6\"\n\"C16/C17\"\n\"C14/C18\"\n\"-C6\"\n\"NOW()\"\n\"C12\"\n\"(C26-C25)/365\"\n\"RATE(yrssinceipo,periodicpmt,Initialpurchase,todaysvalue,type,guess)\"\n\"A5\"\n\"(D2+B2)/2\"\n\"B2/2080\"\n\"VLOOKUP(C2,'Project List'!$A$2:C$28,3)\"\n\"A34+1\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B45:B52)\"\n\"'Jan03'!$B$32\"\n\"'Mar03'!$B$32\"\n\"AVERAGE(B2:B13)\"\n\"'Jan03'!$B$41\"\n\"'Jan03'!$B$53\"\n\"'Jan03'!$B$56\"\n\"'Jan03'!$B$57\"\n\"'Jan03'!$B$58\"\n\"'Jan03'!$B$60\"\n\"'Jan03'!$B$61\"\n\"AVERAGE(B14,B29,B44,B59,B74,B89,B104,B134)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B35:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B52)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"AVERAGE(B3:B31)\"\n\"AVERAGE(B34:B40)\"\n\"AVERAGE(B44:B53)\"\n\"Aug!$B$32\"\n\"Sept!$B$32\"\n\"Oct!$B$32\"\n\"Nov!$B$32\"\n\"Dec!$B$32\"\n\"Jan!$B$32\"\n\"Feb!$B$32\"\n\"Mar!$B$32\"\n\"Apr!$B$32\"\n\"May!$B$32\"\n\"Jun!$B$32\"\n\"July!$B$32\"\n\"SUM(B2:B13)/C14\"\n\"COUNTIF(B2:B13,\"\">0\"\")\"\n\"Aug!$B$41\"\n\"Sept!$B$41\"\n\"Oct!$B$41\"\n\"Nov!$B$41\"\n\"Dec!$B$41\"\n\"Jan!$B$41\"\n\"Feb!$B$41\"\n\"Mar!$B$41\"\n\"Apr!$B$41\"\n\"May!$B$41\"\n\"Jun!$B$41\"\n\"July!$B$41\"\n\"Aug!$B$53\"\n\"Sept!$B$54\"\n\"Oct!$B$54\"\n\"Nov!$B$54\"\n\"Dec!$B$54\"\n\"Jan!$B$54\"\n\"Feb!$B$54\"\n\"Mar!$B$54\"\n\"Apr!$B$54\"\n\"May!$B$54\"\n\"Jun!$B$54\"\n\"July!$B$54\"\n\"Aug!$B$56\"\n\"Sept!$B$57\"\n\"Oct!$B$57\"\n\"Nov!$B$57\"\n\"Dec!$B$57\"\n\"Jan!$B$57\"\n\"Feb!$B$57\"\n\"Mar!$B$57\"\n\"Apr!$B$57\"\n\"May!$B$57\"\n\"Jun!$B$57\"\n\"July!$B$57\"\n\"Aug!$B$57\"\n\"Sept!$B$58\"\n\"Oct!$B$58\"\n\"Nov!$B$58\"\n\"Dec!$B$58\"\n\"Jan!$B$58\"\n\"Feb!$B$58\"\n\"Mar!$B$58\"\n\"Apr!$B$58\"\n\"May!$B$58\"\n\"Jun!$B$58\"\n\"July!$B$58\"\n\"Aug!$B$58\"\n\"Sept!$B$59\"\n\"Oct!$B$59\"\n\"Nov!$B$59\"\n\"Dec!$B$59\"\n\"Jan!$B$59\"\n\"Feb!$B$59\"\n\"Mar!$B$59\"\n\"Apr!$B$59\"\n\"May!$B$59\"\n\"Jun!$B$59\"\n\"July!$B$59\"\n\"Aug!$B$59\"\n\"Sept!$B$60\"\n\"Oct!$B$60\"\n\"Nov!$B$60\"\n\"Dec!$B$60\"\n\"Jan!$B$60\"\n\"Feb!$B$60\"\n\"Mar!$B$60\"\n\"Apr!$B$60\"\n\"May!$B$60\"\n\"Jun!$B$60\"\n\"July!$B$60\"\n\"Aug!$B$60\"\n\"Sept!$B$61\"\n\"Oct!$B$61\"\n\"Nov!$B$61\"\n\"Dec!$B$61\"\n\"Jan!$B$61\"\n\"Feb!$B$61\"\n\"Mar!$B$61\"\n\"Apr!$B$61\"\n\"May!$B$61\"\n\"Jun!$B$61\"\n\"July!$B$61\"\n\"Aug!$B$61\"\n\"Sept!$B$62\"\n\"Oct!$B$62\"\n\"Nov!$B$62\"\n\"Dec!$B$62\"\n\"Jan!$B$62\"\n\"Feb!$B$62\"\n\"Mar!$B$62\"\n\"Apr!$B$62\"\n\"May!$B$62\"\n\"Jun!$B$62\"\n\"July!$B$62\"\n\"B219\"\n\"B51\"\n\"A5+1\"\n\"+A5+1\"\n\"SUM(B3:M3)\"\n\"SUM(B4:B26)\"\n\"SUM(E3:E26)\"\n\"SUM(B3:M3)\"\n\"SUM(B3:B27)\"\n\"SUM(B3:M3)\"\n\"SUM(B3:B27)\"\n\"SUM(C3:N3)\"\n\"SUM(B3:B24)\"\n\"SUM(C3:N3)\"\n\"SUM(B3:B26)\"\n\"SUM(B3:B32)\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+'Income Statement'!F6\"\n\"+'Transaction Summary'!C6*-1\"\n\"+'Income Statement'!J40+('Income Statement'!J33)\"\n\"+I5*I6\"\n\"-'Balance Sheet'!J39\"\n\"+I7+I8\"\n\"+'Transaction Summary'!C21\"\n\"+E4\"\n\"+I9*I10\"\n\"IRR(E12:I12)\"\n\"+'Transaction Summary'!G26*'Income Statement'!J49\"\n\"+'Transaction Summary'!C21\"\n\"+E4\"\n\"+F12\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+Assumptions!D6\"\n\"+C19*G9\"\n\"+Assumptions!C45\"\n\"+C5+C6\"\n\"+'Balance Sheet'!E39+'Balance Sheet'!E34\"\n\"+C5/C7\"\n\"+C6/C7\"\n\"+C17/G6\"\n\"+'Balance Sheet'!E34+'Balance Sheet'!E39\"\n\"+(C17+C19)*G9\"\n\"+(C5-'Balance Sheet'!E39)/G9\"\n\"+G6-C17\"\n\"+C18*C21\"\n\"+C18-C19\"\n\"+'Income Statement'!F40+('Income Statement'!F33*(1-Assumptions!C43))\"\n\"+(G19*G6)/G20\"\n\"+'Income Statement'!F51\"\n\"+G19/G22\"\n\"+G6*G9\"\n\"+'Balance Sheet'!E57\"\n\"+C24-(C25*(1+C26))\"\n\"C27\"\n\"+C21*C30\"\n\"+\"\"Leveraged Recapitalization of \"\" &Assumptions!D6\"\n\"+'Transaction Summary'!C21\"\n\"+'Transaction Summary'!C6\"\n\"+E13+C22-H22\"\n\"1-E12\"\n\"+'Transaction Summary'!C5\"\n\"+'Balance Sheet'!E39+'Balance Sheet'!E34\"\n\"+\"\"LBO of \"\"&Assumptions!D6\"\n\"+'Transaction Summary'!C21\"\n\"1-'Transaction Summary'!C21\"\n\"+E9*(J17-C19)\"\n\"+G9*(J17-C19)\"\n\"+'Transaction Summary'!G9*'Transaction Summary'!G6\"\n\"+'Balance Sheet'!F39\"\n\"D6\"\n\"+$D$8+1&\"\"E\"\"\"\n\"+$D$8+2&\"\"E\"\"\"\n\"+$D$8+3&\"\"E\"\"\"\n\"+$D$8+4&\"\"E\"\"\"\n\"+$D$8+5&\"\"E\"\"\"\n\"+C13\"\n\"Assumptions!D6\"\n\"+C6-1\"\n\"+Assumptions!D8\"\n\"+Assumptions!C13\"\n\"E8*(1+Assumptions!C15)\"\n\"SUM(B8:B12)\"\n\"F$8*Assumptions!C23\"\n\"(F$11+F$12)*Assumptions!C30\"\n\"SUM(B25:B27)\"\n\"F$13*Assumptions!C34\"\n\"+'Fixed Asset Schedule'!E14\"\n\"B22+B28+B36\"\n\"B13-B38\"\n\"+Assumptions!C40*Assumptions!C61\"\n\"-Assumptions!C41*('Balance Sheet'!E39+'Balance Sheet'!E34)\"\n\"-Assumptions!D41*('Balance Sheet'!G39+'Balance Sheet'!G34)\"\n\"SUM(B40:B42)\"\n\"+F44*Assumptions!C43\"\n\"B44-B45\"\n\"SUM(B47:B48)\"\n\"+F49/Assumptions!C45\"\n\"Assumptions!D6\"\n\"\"\"(Dollars in \"\"& IF(Assumptions!D6=1, \"\"Millions\"\", \"\"Thousands\"\") &\"\" Except Per Share Data)\"\"\"\n\"+'Income Statement'!C6\"\n\"+Assumptions!C13\"\n\"+Assumptions!D13\"\n\"Assumptions!C52*'Income Statement'!F$13\"\n\"Assumptions!D52*'Income Statement'!G$13\"\n\"+E44+SUM(E49:E55)-E25-SUM(E10:E15)-E8\"\n\"Assumptions!C53*'Income Statement'!F$13\"\n\"Assumptions!D53*'Income Statement'!G$13\"\n\"SUM(B8:B15)\"\n\"Assumptions!C61\"\n\"Assumptions!D61\"\n\"+'Fixed Asset Schedule'!E21\"\n\"+'Fixed Asset Schedule'!F21\"\n\"'Income Statement'!F$13*Assumptions!C63\"\n\"'Income Statement'!G$13*Assumptions!D63\"\n\"IF('Transaction Summary'!G13=0,0,'Transaction Summary'!C31)\"\n\"+E23+F23\"\n\"+G23\"\n\"'Income Statement'!F$13*Assumptions!C65\"\n\"'Income Statement'!G$13*Assumptions!D65\"\n\"SUM(B19:B24)\"\n\"B16+B25\"\n\"+B6\"\n\"'Income Statement'!F$13*Assumptions!C69\"\n\"'Income Statement'!G$13*Assumptions!D69\"\n\"+SUM('Fixed Asset Schedule'!$E$42:'Fixed Asset Schedule'!E42)*Assumptions!C43-SUM('Fixed Asset Schedule'!$E$14:'Fixed Asset Schedule'!E14)*Assumptions!C43\"\n\"+SUM('Fixed Asset Schedule'!$E$42:'Fixed Asset Schedule'!F42)*Assumptions!D43-SUM('Fixed Asset Schedule'!$E$14:'Fixed Asset Schedule'!F14)*Assumptions!D43\"\n\"SUM(B31:B34)\"\n\"'Income Statement'!F$13*Assumptions!C75\"\n\"'Income Statement'!G$13*Assumptions!D75\"\n\"MAX(E8+SUM(E10:E15)+E25-E38-E35-E40-E41-SUM(E49:E55),0)\"\n\"IF('Transaction Summary'!G13=0,'Transaction Summary'!C5-'Transaction Summary'!C13,'Transaction Summary'!C5-'Transaction Summary'!C13)\"\n\"B35+B42\"\n\"D53+'Income Statement'!F49-('Income Statement'!F49*Assumptions!C81)\"\n\"E53+'Income Statement'!G49-('Income Statement'!G49*Assumptions!D81)\"\n\"G53+'Income Statement'!H49-('Income Statement'!H49*Assumptions!E81)\"\n\"B27-B44-SUM(B49:B53)\"\n\"IF('Transaction Summary'!G13=0,('Transaction Summary'!C5-'Transaction Summary'!C13)*-1,('Transaction Summary'!C5-'Transaction Summary'!C13-'Transaction Summary'!C31)*-1)\"\n\"SUM(B47:B55)\"\n\"SUM(E49:E55)\"\n\"B44+B57\"\n\"+Assumptions!D6\"\n\"+Assumptions!D8\"\n\"+D7+1\"\n\"+'Balance Sheet'!D20\"\n\"IF($J$24=0,IF(E7-$D$7>$B$26,0,($B$8-(D26*B8))/$B$26),B8*$E$26)\"\n\"IF($J$24=0,IF(F7-$D$7>$B$26,0,($B$8-($B8*$D$26))/$B$26),($B$8-SUM($E8:E8))*$E$26)\"\n\"IF($J$24=0,IF(E7-$D$7>$B$27,0,($B$9-($B$9*$D$27))/$B$27),$B$9*$E$26)\"\n\"IF($J$24=0,IF(F$7-$D$7>$B$27,0,($B$9-($B$9*$D$27))/$B$27),($B$9-SUM($C9:E9))*$E$27)\"\n\"IF($J$24=0,IF(F7-$E$7>$B$28,0,($B$10-($B$10*$D$28))/$B$28),($B$10-SUM($E10:E10))*$E$28)\"\n\"IF($J$24=0,IF(G7-$F$7>$B$29,0,($B$11-($B$11*$D$29))/$B$29),($B$11-SUM($E11:F11))*$E$29)\"\n\"IF($J$24=0,IF(H7-$G$7>$B$30,0,($B$12-($B$12*$D$30))/$B$30),($B$12-SUM($E12:G12))*$E$30)\"\n\"IF($J$24=0,IF(I7-$I$7>$B$31,0,($B$13-($B$13*$D$31))/$B$31),($B$13-SUM($E13:H13))*$E$31)\"\n\"SUM(E8:E13)\"\n\"+Assumptions!C13\"\n\"B8\"\n\"E21\"\n\"B10\"\n\"B11\"\n\"B12\"\n\"B13\"\n\"E14\"\n\"E18+E19-E20\"\n\"+B8\"\n\"$B$8*$E$26\"\n\"($B$35-SUM($E35:E35))*$E$26\"\n\"+B9*E27\"\n\"($B36-SUM($E36:E36))*$E27\"\n\"SUM(E35:E40)\"\n\"+Assumptions!D6\"\n\"+SCF!C19\"\n\"-(1-Assumptions!C$43)*'Income Statement'!F42\"\n\"+SCF!C27\"\n\"'Balance Sheet'!D8-'Balance Sheet'!E8\"\n\"'Balance Sheet'!E8-'Balance Sheet'!G8\"\n\"'Balance Sheet'!G8-'Balance Sheet'!H8\"\n\"SUM(C9:C12)\"\n\"H15*('Income Statement'!J40+('Income Statement'!J33))\"\n\"NPV($B$17,$D$13:$G$13)\"\n\"G15/(1+B17)^4\"\n\"SUM(B22:B23)\"\n\"-'Balance Sheet'!$E$39-'Balance Sheet'!$E$34\"\n\"+'Balance Sheet'!$E$19\"\n\"SUM(B24:B26)\"\n\"+Assumptions!C45\"\n\"B27/B28\"\n\"+B27/B28\"\n\"+Assumptions!D6\"\n\"\"\"(Dollars in \"\"& IF(Assumptions!D6=1, \"\"Millions\"\", \"\"Thousands\"\") &\"\" Except Per Share Data)\"\"\"\n\"+B6+1\"\n\"+'Income Statement'!F49\"\n\"+'Income Statement'!F33\"\n\"+('Balance Sheet'!D10-'Balance Sheet'!E10)+('Balance Sheet'!D11-'Balance Sheet'!E11)\"\n\"+('Balance Sheet'!E10-'Balance Sheet'!G10)+('Balance Sheet'!E11-'Balance Sheet'!G11)\"\n\"+('Balance Sheet'!G10-'Balance Sheet'!H10)+('Balance Sheet'!G11-'Balance Sheet'!H11)\"\n\"+'Balance Sheet'!D12-'Balance Sheet'!E12\"\n\"+'Balance Sheet'!E12-'Balance Sheet'!G12\"\n\"+'Balance Sheet'!G12-'Balance Sheet'!H12\"\n\"+('Balance Sheet'!D15-'Balance Sheet'!E15)+('Balance Sheet'!E33-'Balance Sheet'!D33)+('Balance Sheet'!E40-'Balance Sheet'!D40)\"\n\"+('Balance Sheet'!E15-'Balance Sheet'!G15)+('Balance Sheet'!G33-'Balance Sheet'!E33)+('Balance Sheet'!G40-'Balance Sheet'!E40)\"\n\"+('Balance Sheet'!G15-'Balance Sheet'!H15)+('Balance Sheet'!H33-'Balance Sheet'!G33)+('Balance Sheet'!H40-'Balance Sheet'!G40)\"\n\"+'Balance Sheet'!E31-'Balance Sheet'!D31\"\n\"+'Balance Sheet'!G31-'Balance Sheet'!E31\"\n\"+'Balance Sheet'!H31-'Balance Sheet'!G31\"\n\"+'Balance Sheet'!E38-'Balance Sheet'!D38\"\n\"+'Balance Sheet'!G38-'Balance Sheet'!E38\"\n\"+'Balance Sheet'!H38-'Balance Sheet'!G38\"\n\"+'Balance Sheet'!E41-'Balance Sheet'!D41\"\n\"+'Balance Sheet'!G41-'Balance Sheet'!E41\"\n\"+'Balance Sheet'!H41-'Balance Sheet'!G41\"\n\"SUM(C8:C18)\"\n\"-(+'Balance Sheet'!E23-'Balance Sheet'!D23)\"\n\"-(('Balance Sheet'!E20-'Balance Sheet'!D20)+'Income Statement'!F33)\"\n\"-(('Balance Sheet'!G20-'Balance Sheet'!E20)+'Income Statement'!G33)\"\n\"-(('Balance Sheet'!H20-'Balance Sheet'!G20)+'Income Statement'!H33)\"\n\"+'Balance Sheet'!D24-'Balance Sheet'!E24\"\n\"+'Balance Sheet'!E24-'Balance Sheet'!G24\"\n\"+'Balance Sheet'!G24-'Balance Sheet'!H24\"\n\"+'Balance Sheet'!D19-'Balance Sheet'!E19\"\n\"+'Balance Sheet'!E19-'Balance Sheet'!G19\"\n\"+'Balance Sheet'!G19-'Balance Sheet'!H19\"\n\"+('Balance Sheet'!D21-'Balance Sheet'!E21)+('Balance Sheet'!D22-'Balance Sheet'!E22)\"\n\"+('Balance Sheet'!E21-'Balance Sheet'!G21)+('Balance Sheet'!E22-'Balance Sheet'!G22)\"\n\"+('Balance Sheet'!G21-'Balance Sheet'!H21)+('Balance Sheet'!G22-'Balance Sheet'!H22)\"\n\"SUM(C22:C26)\"\n\"+Assumptions!C81*'Income Statement'!F49\"\n\"'Balance Sheet'!E55-'Balance Sheet'!D55\"\n\"'Balance Sheet'!G55-'Balance Sheet'!E55\"\n\"'Balance Sheet'!H55-'Balance Sheet'!G55\"\n\"('Balance Sheet'!E39-'Balance Sheet'!D39)+('Balance Sheet'!E34-'Balance Sheet'!D34)\"\n\"('Balance Sheet'!G39-'Balance Sheet'!E39)+('Balance Sheet'!G34-'Balance Sheet'!E34)\"\n\"('Balance Sheet'!H39-'Balance Sheet'!G39)+('Balance Sheet'!H34-'Balance Sheet'!G34)\"\n\"SUM(C31:C33)\"\n\"+C19+C27+C34\"\n\"'Balance Sheet'!D8+'Balance Sheet'!D9\"\n\"'Balance Sheet'!G8+'Balance Sheet'!G9\"\n\"+C36+C37\"\n\"'Balance Sheet'!E8+'Balance Sheet'!E9\"\n\"'Balance Sheet'!G8+'Balance Sheet'!G9\"\n\"+C39-C38\"\n\"Assumptions!D6\"\n\"+Assumptions!D8\"\n\"+Assumptions!C13\"\n\"'Income Statement'!E49/(('Balance Sheet'!D57+'Balance Sheet'!C57)/2)\"\n\"'Income Statement'!G49/(('Balance Sheet'!G57+'Balance Sheet'!E57)/2)\"\n\"'Income Statement'!H49/(('Balance Sheet'!H57+'Balance Sheet'!G57)/2)\"\n\"'Income Statement'!E49/(('Balance Sheet'!D27+'Balance Sheet'!C27)/2)\"\n\"'Income Statement'!G49/(('Balance Sheet'!G27+'Balance Sheet'!E27)/2)\"\n\"'Income Statement'!H49/(('Balance Sheet'!H27+'Balance Sheet'!G27)/2)\"\n\"(('Balance Sheet'!D27+'Balance Sheet'!C27)/2)/(('Balance Sheet'!D57+'Balance Sheet'!C57)/2)\"\n\"(('Balance Sheet'!G27+'Balance Sheet'!E27)/2)/(('Balance Sheet'!G57+'Balance Sheet'!E57)/2)\"\n\"(('Balance Sheet'!H27+'Balance Sheet'!G27)/2)/(('Balance Sheet'!H57+'Balance Sheet'!G57)/2)\"\n\"'Income Statement'!E49/'Income Statement'!E13\"\n\"'Income Statement'!E13/(('Balance Sheet'!D27+'Balance Sheet'!C27)/2)\"\n\"'Income Statement'!G13/(('Balance Sheet'!G27+'Balance Sheet'!E27)/2)\"\n\"'Income Statement'!H13/(('Balance Sheet'!H27+'Balance Sheet'!G27)/2)\"\n\"Assumptions!D6\"\n\"+'Income Statement'!B6\"\n\"+'Income Statement'!B8/'Income Statement'!B$13\"\n\"SUM(B8:B12)\"\n\"+'Income Statement'!B17/'Income Statement'!B$8\"\n\"+'Income Statement'!B25/'Income Statement'!B$11\"\n\"SUM(B25:B27)\"\n\"+'Income Statement'!B36/'Income Statement'!B13\"\n\"+'Income Statement'!B38/'Income Statement'!B13\"\n\"B13-B38\"\n\"+'Income Statement'!B41/'Income Statement'!B13\"\n\"+'Income Statement'!B42/'Income Statement'!B13\"\n\"+'Income Statement'!B44/'Income Statement'!B13\"\n\"+'Income Statement'!B45/'Income Statement'!B13\"\n\"+'Income Statement'!B47/'Income Statement'!B13\"\n\"+'Income Statement'!B48/'Income Statement'!B13\"\n\"+'Income Statement'!B49/'Income Statement'!B13\"\n\"+'Balance Sheet'!B6\"\n\"+'Balance Sheet'!G6\"\n\"+'Balance Sheet'!B8/'Balance Sheet'!B$27\"\n\"+'Balance Sheet'!G8/'Balance Sheet'!G$27\"\n\"+'Balance Sheet'!B10/'Balance Sheet'!B$27\"\n\"+'Balance Sheet'!G10/'Balance Sheet'!G$27\"\n\"+SUM(B8:B14)\"\n\"+'Balance Sheet'!B24/'Balance Sheet'!B$27\"\n\"+'Balance Sheet'!G24/'Balance Sheet'!G$27\"\n\"+SUM(B18:B22)\"\n\"+B15+B23\"\n\"+B6\"\n\"+SUM(B29:B32)\"\n\"+B33+B40\"\n\"+B25-B42\"\n\"+B42+B44\"\n\"C21+21\"\n\"C23+7\"\n\"Scheme!$B$6\"\n\"Scheme!$B$7\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!$D$7\"\n\"Scheme!E4\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$8\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!D8\"\n\"Scheme!E4\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$9\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!D9\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\" &'Wk2'!C5\"\n\"\"\"Recap of \"\" &'Wk2'!C5\"\n\"\"\"Recap of \"\" &'Wk2'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$10\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"Scheme!D10\"\n\"ASC(\"\"\"\")\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk3'!C5\"\n\"\"\"Recap of \"\"& 'Wk3'!C5\"\n\"\"\"Recap of \"\"& 'Wk3'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$11\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!D11\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk4'!C5\"\n\"\"\"Recap of \"\"& 'Wk4'!C5\"\n\"\"\"Recap of \"\"& 'Wk4'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$12\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!D12\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk5'!C5\"\n\"\"\"Recap of \"\"& 'Wk5'!C5\"\n\"\"\"Recap of \"\"& 'Wk5'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$14\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!D14\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk6'!C5\"\n\"\"\"Recap of \"\"& 'Wk6'!C5\"\n\"\"\"Recap of \"\"& 'Wk6'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$15\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!D15\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk7'!C5\"\n\"\"\"Recap of \"\"& 'Wk7'!C5\"\n\"\"\"Recap of \"\"& 'Wk7'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$16\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!D16\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk8'!C5\"\n\"\"\"Recap of \"\"& 'Wk8'!C5\"\n\"\"\"Recap of \"\"& 'Wk8'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$17\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!D17\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk9'!C5\"\n\"\"\"Recap of \"\"& 'Wk9'!C5\"\n\"\"\"Recap of \"\"& 'Wk9'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$18\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!D18\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk10'!C5\"\n\"\"\"Recap of \"\"& 'Wk10'!C5\"\n\"\"\"Recap of \"\"& 'Wk10'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$19\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!D19\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk11'!C5\"\n\"\"\"Recap of \"\"& 'Wk11'!C5\"\n\"\"\"Recap of \"\"& 'Wk11'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$20\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!D20\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk12'!C5\"\n\"\"\"Recap of \"\"& 'Wk12'!C5\"\n\"\"\"Recap of \"\"& 'Wk12'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$21\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!D21\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk13'!C5\"\n\"\"\"Recap of \"\"& 'Wk13'!C5\"\n\"\"\"Recap of \"\"& 'Wk13'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$23\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!D23\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk14'!C5\"\n\"\"\"Recap of \"\"& 'Wk14'!C5\"\n\"\"\"Recap of \"\"& 'Wk14'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$24\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!D24\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk15'!C5\"\n\"\"\"Recap of \"\"& 'Wk15'!C5\"\n\"\"\"Recap of \"\"& 'Wk15'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$25\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!D25\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk16'!C5\"\n\"\"\"Recap of \"\"& 'Wk16'!C5\"\n\"\"\"Recap of \"\"& 'Wk16'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$26\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!D26\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk17'!C5\"\n\"\"\"Recap of \"\"& 'Wk17'!C5\"\n\"\"\"Recap of \"\"& 'Wk17'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$27\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!D27\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk18'!C5\"\n\"\"\"Recap of \"\"& 'Wk18'!C5\"\n\"\"\"Recap of \"\"& 'Wk18'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$28\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!D28\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk19'!C5\"\n\"\"\"Recap of \"\"& 'Wk19'!C5\"\n\"\"\"Recap of \"\"& 'Wk19'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$30\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!D30\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk20'!C5\"\n\"\"\"Recap of \"\"& 'Wk20'!C5\"\n\"\"\"Recap of \"\"& 'Wk20'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$31\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!D31\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk21'!C5\"\n\"\"\"Recap of \"\"& 'Wk21'!C5\"\n\"\"\"Recap of \"\"& 'Wk21'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$32\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!D32\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk22'!C5\"\n\"\"\"Recap of \"\"& 'Wk22'!C5\"\n\"\"\"Recap of \"\"& 'Wk22'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$33\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!D33\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk23'!C5\"\n\"\"\"Recap of \"\"& 'Wk23'!C5\"\n\"\"\"Recap of \"\"& 'Wk23'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$34\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!D34\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk24'!C5\"\n\"\"\"Recap of \"\"& 'Wk24'!C5\"\n\"\"\"Recap of \"\"& 'Wk24'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$35\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!D35\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk25'!C5\"\n\"\"\"Recap of \"\"& 'Wk25'!C5\"\n\"\"\"Recap of \"\"& 'Wk25'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$37\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!D37\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk26'!C5\"\n\"\"\"Recap of \"\"& 'Wk26'!C5\"\n\"\"\"Recap of \"\"& 'Wk26'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$38\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!D38\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk27'!C5\"\n\"\"\"Recap of \"\"& 'Wk27'!C5\"\n\"\"\"Recap of \"\"& 'Wk27'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$39\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!D39\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk28'!C5\"\n\"\"\"Recap of \"\"& 'Wk28'!C5\"\n\"\"\"Recap of \"\"& 'Wk28'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$40\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!D40\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk29'!C5\"\n\"\"\"Recap of \"\"& 'Wk29'!C5\"\n\"\"\"Recap of \"\"& 'Wk29'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$41\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!D41\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk30'!C5\"\n\"\"\"Recap of \"\"& 'Wk30'!C5\"\n\"\"\"Recap of \"\"& 'Wk30'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$43\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!D43\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk31'!C5\"\n\"\"\"Recap of \"\"& 'Wk31'!C5\"\n\"\"\"Recap of \"\"& 'Wk31'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$44\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!D44\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk32'!C5\"\n\"\"\"Recap of \"\"& 'Wk32'!C5\"\n\"\"\"Recap of \"\"& 'Wk32'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$45\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!D45\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk33'!C5\"\n\"\"\"Recap of \"\"& 'Wk33'!C5\"\n\"\"\"Recap of \"\"& 'Wk33'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!$B$46\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!D46\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk34'!C5\"\n\"\"\"Recap of \"\"& 'Wk34'!C5\"\n\"\"\"Recap of \"\"& 'Wk34'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"Scheme!$B$6\"\n\"Scheme!B47\"\n\"Scheme!C2\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"Scheme!D3\"\n\"IF(Scheme!D4<>\"\"\"\",Scheme!D4,\"\"\"\")\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!D47\"\n\"Scheme!E4\"\n\"\"\"Recap of \"\"& 'Wk35'!C5\"\n\"\"\"Recap of \"\"& 'Wk35'!C5\"\n\"\"\"Recap of \"\"& 'Wk35'!C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\" \"\"Review of \"\" & C5\"\n\"\"\"Total \"\"& TEXT(SUM(B17:B26),0)\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"IF(SUM(B17:B26)=F15,\"\"\"\",IF(SUM(B17:B26)>F15,\"\"Time Over!\"\",\"\"Time Under!\"\"))\"\n\"SUM(E8:E16)\"\n\"SUM(E28:E37)\"\n\"(B4*C4)*0.85\"\n\"D4\"\n\"B4*1000\"\n\"D5*4\"\n\"D6*12\"\n\"(B7*C7)*4.3*0.85\"\n\"SUM(E4:E7)\"\n\"G4+G5+G6+G7\"\n\"SUM(E8:E9)\"\n\"F8-F9\"\n\"B13*750\"\n\"(B16*C16)*30*0.85\"\n\"SUM(E13:E20)\"\n\"(D24*4)-(B24*1250*0.85)\"\n\"(D25*12)-(B25*1250*0.85)\"\n\"(B26*C26)*4.33*0.85\"\n\"(C31*B31*G31)*0.85\"\n\"G31*500\"\n\"'Per Query Pricing Sheet'!G5\"\n\"'Per Query Pricing Sheet'!G11\"\n\"'Per Query Pricing Sheet'!F16\"\n\"SUM(E38:E40)\"\n\"(C45*B45)*4.3*0.85\"\n\"E8+E21+E28+E35+E41+E46\"\n\"+F10+F21+F28+F35+F41+F46\"\n\"E49*B52\"\n\"E49-E52\"\n\"F49\"\n\"(B4*C4)*0.95\"\n\"D4\"\n\"B4*1000\"\n\"D5*4\"\n\"D6*12\"\n\"(B7*C7)*4.3*0.95\"\n\"SUM(E4:E7)\"\n\"G4+G5+G6+G7\"\n\"SUM(E8:E9)\"\n\"F8-F9\"\n\"B13*750\"\n\"(B16*C16)*30*0.95\"\n\"SUM(E13:E20)\"\n\"(D24*4)-(B24*1250*0.95)\"\n\"(D25*12)-(B25*1250*0.95)\"\n\"(B26*C26)*4.33*0.95\"\n\"(C31*B31*G31)*0.95\"\n\"G31*500\"\n\"'Per Query Pricing Sheet'!G5\"\n\"'Per Query Pricing Sheet'!G11\"\n\"'Per Query Pricing Sheet'!F16\"\n\"SUM(E38:E40)\"\n\"B44*C44*0.95\"\n\"C45*B45*4.3*0.95\"\n\"E8+E21+E28+E35+E41+E46\"\n\"+F10+F21+F28+F35+F41+F46\"\n\"E49*B52\"\n\"E49-E52\"\n\"F49\"\n\"B4*C4\"\n\"D4\"\n\"B4*1000\"\n\"D5*4\"\n\"D6*12\"\n\"(B7*C7)*4.3\"\n\"SUM(E4:E7)\"\n\"SUM(G4:G7)\"\n\"SUM(E8:E9)\"\n\"F8-F9\"\n\"D13*4-D13\"\n\"B13*750\"\n\"D14*12-D14\"\n\"B15*C15*4.3\"\n\"D15*12-(B15*C15)\"\n\"B16*C16*30\"\n\"SUM(E13:E20)\"\n\"(D24*4)-(B24*1250)\"\n\"(D25*12)-(B25*1250)\"\n\"C31*B31*G31\"\n\"G31*500\"\n\"'Per Query Pricing Sheet'!G5\"\n\"'Per Query Pricing Sheet'!G11\"\n\"'Per Query Pricing Sheet'!F16\"\n\"SUM(E38:E40)\"\n\"C45*B45*4.3\"\n\"E8+E21+E28+E35+E41+E46\"\n\"+F10+F21+F28+F35+F41\"\n\"E49*B52\"\n\"E49-E52\"\n\"F49\"\n\"B2*C2\"\n\"F2*12\"\n\"SUM(G2:G4)\"\n\"SUM(B8*C8*0.9)+(E8*(D8-2)*B8*0.9)\"\n\"B16*D16\"\n\"A1+0.1\"\n\"A1+0.1\"\n\"A11+0.01\"\n\"J5+K5+L5\"\n\"SUM(J23:L23)\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A3!A1\"\", \"\"Academic Council of the UN System Reports and Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A4!A1\"\",\"\"ACCESS Resource Brief\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A5!A1\"\", \"\"Adelphi Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A7!A1\"\", \"\"Aerospace Canada International/Aerospace and Defence Technology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A7a!A1\"\", \"\"Aerospace News and Comment\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A8!A1\"\", \"\"African Security Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A9!A1\"\", \"\"Air Force\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A10a!A1\"\", \"\"Alias Notes\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A10!A1\"\", \"\"Alternatives: Global, Local, Political\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A4a!A1\"\", \"\"American Center of Oriental Research (ACOR) Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A11b!A1\"\", \"\"American Political Science Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A11!A1\"\", \"\"Americas\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A11a!A1\"\", \"\"AMREF Canada\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A12!A1\"\", \"\"Armed Forces & Society\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A13!A1\"\", \"\"Armed Forces Journal International\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A15!A1\"\", \"\"Arms Control Chronicle\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A16!A1\"\", \"\"Arms Control Communique\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A17!A1\"\", \"\"Arms Control Today\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A17a!A1\"\", \"\"Arms Sales Monitor\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A17b!A1\"\", \"\"Asia Pacific Foundation of Canada - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A18c!A1\"\", \"\"Asia Pacific Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A21!A1\"\", \"\"Asian and Pacific Migration Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A17c!A1\"\", \"\"Asian Pacific Research and Resource Centre Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A18a!A1\"\", \"\"Asian Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A18!A1\"\", \"\"Asia-Pacific Defence Reporters\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A18b!A1\"\", \"\"Athena Magazine\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A19!A1\"\", \"\"Aurora Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A20!A1\"\", \"\"Aviation Week & Space Technology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B12a!A1\"\", \"\"Bangladesh Foreign Policy Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B12!A1\"\", \"\"Bangladesh Institute for International and Strategic Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B4!A1\"\", \"\"BASIC Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5!A1\"\", \"\"Behind the Headlines\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5a111!A1\"\", \"\"BESA Bulletin\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5a1!A1\"\", \"\"BISA News - Newletter of the British International Studies Association\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B10!A1\"\", \"\"Bonn International Centre for Conversion\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5a11!A1\"\", \"\"Bruno Kreisky Foundation for International Dialogue\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5a!A1\"\", \"\"Bulletin of Arms Control\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B8!A1\"\", \"\"Bulletin of Peace Proposals\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B5b!A1\"\", \"\"Bulletin of Regional Cooperation in the Middle East\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals b!.xls] B7!A1\"\", \"\"Bulletin of the Atomic Scientists\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C5!A1\"\", \"\"Canada and the Pacific Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C5a'!A1\"\", \"\"Canada Watch\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C6!A1\"\", \"\"Canadian Aviation\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C7!A1\"\", \"\"Canadian Centre for Arms Control and Disarmament - Issue Briefs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C7a'!A1\"\", \"\"Canadian Centre for Foreign Policy Development\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C8!A1\"\", \"\"Canadian Centre for Global Security - Communique\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y10a!A1\"\", \"\"Canadian Consortium on Asia Pacific Security - CANCAPS Bulletin\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C9!A1\"\", \"\"Canadian Defence Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C10!A1\"\", \"\"Canadian Defence Update\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C11!A1\"\", \"\"Canadian Foreign Policy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C18a'!A1\"\", \"\"Canadian Institute for International Peace and Security - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C15!A1\"\", \"\"Canadian Institute for International Peace and Security - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C16!A1\"\", \"\"Canadian Institute for International Peace and Security - Points of View\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C17!A1\"\", \"\"Canadian Institute for International Peace and Security - Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C18!A1\"\", \"\"Canadian Institute for International Peace and Security - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C13!A1\"\", \"\"Canadian Institute for International Peace and Security Background Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C14!A1\"\", \"\"Canadian Institute for International Peace and Security Factsheet\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C20!A1\"\", \"\"Canadian Institute of Strategic Studies - Issues in Strategy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C23!A1\"\", \"\"Canadian Institute of Strategic Studies - McNaughton Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C21!A1\"\", \"\"Canadian Institute of Strategic Studies - Polaris Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C22!A1\"\", \"\"Canadian Institute of Strategic Studies - Proceedings\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C24!A1\"\", \"\"Canadian Institute of Strategic Studies - Strategic Datalink/Strategic Issues\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C25!A1\"\", \"\"Canadian International Relations Chronicle\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C25o'!A1\"\", \"\"Canadian Journal of Political Science\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C25a'!A1\"\", \"\"Canadian Military Journal/Revue Militaire Canadienne\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C19!A1\"\", \"\"Canadian Strategic Review/Strategic Forecast\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C25b'!A1\"\", \"\"CAPS Papers Chinese Council of Advanced Policy Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C49!A1\"\", \"\"Carnegie Commission on Preventing Deadly Conflict\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C38!A1\"\", \"\"CDA Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C26!A1\"\", \"\"Center for Foreign Policy Development - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C27!A1\"\", \"\"Center for International Affairs - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C28!A1\"\", \"\"Center for International and Strategic Affairs-Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C27a'!A1\"\", \"\"Center for International Relations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C29!A1\"\", \"\"Center for International Security and Arms Control-Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C29b'!A1\"\", \"\"Center for International Studies, University of Southern California Working Papers on Re-Thinking Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C30!A1\"\", \"\"Center For National Security Studies - Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C33!A1\"\", \"\"Center For Naval Analyses - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C31!A1\"\", \"\"Center for Naval Analyses - Professional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C32!A1\"\", \"\"Center for Naval Analyses - Research Memorandum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C51!A1\"\", \"\"Center for the Study of Globalization and Regionalisation\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C33a'!A1\"\", \"\"Centerpiece - Newsletter of the Center for International Affairs at Harvard\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C45!A1\"\", \"\"Centre for Defence and International Security Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C25c'!A1\"\", \"\"Centre for Defence and Security Studies Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C34!A1\"\", \"\"Centre for Foreign Policy Studies - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C34a'!A1\"\", \"\"Centre for National Security Studies - Reflections\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C34b'!A1\"\", \"\"Centre for Peace Studies, University of Auckland, N.Z.\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C35!A1\"\", \"\"Centre for Russian and East European Studies - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C47!A1\"\", \"\"Centre for Strategic Studies New Zealand Working Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C36!A1\"\", \"\"Centre for Studies in Defence Resources Management Reports/Solicited Research Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C36a1'!A1\"\", \"\"CEPII Newsletter - Centre d'etudes prospectives et d'informations internationales\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C48!A1\"\", \"\"Chaillot Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C46!A1\"\", \"\"Civil Society\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C38a'!A1\"\", \"\"Commonwealth Currents\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C37!A1\"\", \"\"Comparative Strategy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals o!.xls] O7!A1\"\", \"\"Conference of Defence Associations Institute - On Track\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C37a'!A1\"\", \"\"Conflict Prevention Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C39!A1\"\", \"\"Conflict Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C40!A1\"\", \"\"Conflict Resolution/The Journal of Conflict Resolution\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C50!A1\"\", \"\"Congressional Research Service\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals a.xls] A14!A1\"\", \"\"Contemporary Security Policy (formerly Arms Control)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I4b!A1\"\", \"\"Contemporary Southeast Asia Journal of International and Strategic Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] 'C40a'!A1\"\", \"\"Cooperation and Conflict\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C41!A1\"\", \"\"Council for Arms Control - Bulletins\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C42!A1\"\", \"\"Council for Arms Control - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C43!A1\"\", \"\"Current Digest of the Soviet/Post-Soviet Press\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals c.xls] C44!A1\"\", \"\"Current History\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D5!A1\"\", \"\"Daedalus\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D5a!A1\"\", \"\"Defence Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D6!A1\"\", \"\"Defense Analysis\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D7!A1\"\", \"\"Defense and Diplomacy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D7a!A1\"\", \"\"Defense and Disarmament Alternatives\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D8!A1\"\", \"\"Defense Monitor\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D8a!A1\"\", \"\"DFID - Department for International Development\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D10!A1\"\", \"\"Dialogue Monitor\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E4!A1\"\", \"\"East Asia Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E4b!A1\"\", \"\"East Asian Strategic Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E4c!A1\"\", \"\"East European Constitutional Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E4a!A1\"\", \"\"Eastern Asia Policy Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E4d!A1\"\", \"\"East-West Center - Observer/Special Reports/Asia Pacific Issues\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E5!A1\"\", \"\"Economic Impact\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E6!A1\"\", \"\"Economist\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E6a!A1\"\", \"\"Economist - FOREIGN REPORT\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E6b!A1\"\", \"\"Ethics & International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E6c!A1\"\", \"\"Etudes International\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E7a!A1\"\", \"\"EU Info\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E14!A1\"\", \"\"Eurasian File (Turkish International Cooperation Agency)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E15!A1\"\", \"\"Eurasian Studies (Turkish International Cooperation Agency)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E7!A1\"\", \"\"Europe\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E8!A1\"\", \"\"European Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E8a!A1\"\", \"\"European Center for Security Studies - The Marshall Center Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E9!A1\"\", \"\"European Journal of International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E12!A1\"\", \"\"European Journal of International Relations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E10!A1\"\", \"\"European Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals e!.xls] E16!A1\"\", \"\"Exportwise\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F4!A1\"\", \"\"Far Eastern Economic Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F4a!A1\"\", \"\"Faraday Discussion Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F5!A1\"\", \"\"Federation of American Scientists - Public Interest Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F6!A1\"\", \"\"Finnish Defence Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F7!A1\"\", \"\"Fletcher Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F7a1!A1\"\", \"\"FOCAL - Miscellaneous Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F7a!A1\"\", \"\"Focus on Vienna\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F8!A1\"\", \"\"Foreign Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F9!A1\"\", \"\"Foreign Policy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F9a!A1\"\", \"\"Forum International\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals f!.xls] F10!A1\"\", \"\"FPI Policy Briefs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals g!.xls] G8a!A1\"\", \"\"Global Dialogue - Weapons and War\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals g!.xls] G8!A1\"\", \"\"Global Governance\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals g!.xls] G8b!A1\"\", \"\"Global Society\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals g!.xls] G9!A1\"\", \"\"Grassroots Development Journal of the Inter-American Foundation\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals g!.xls] G10!A1\"\", \"\"Gulf Centre for Strategic Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals h!.xls] H5!A1\"\", \"\"Henry L. Stimson Center - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals h!.xls] H6!A1\"\", \"\"Henry L. Stimson Center - Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals h!.xls] H7!A1\"\", \"\"Hiroshima Research News\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I2!A1\"\", \"\"IDDS Briefing Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I12a!A1\"\", \"\"IDRC Briefing \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I2a!A1\"\", \"\"IDSS Working Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I3!A1\"\", \"\"IGCC (Institute on Global Conflict and Cooperation) - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I3b!A1\"\", \"\"IIGP News\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I3a!A1\"\", \"\"Institute for International Policy Studies (IIPS) - News and Policy Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I5!A1\"\", \"\"Indian Ocean Centre for Peace Studies-Briefing/Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I6!A1\"\", \"\"Indochina Chronology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I6a!A1\"\", \"\"Indonesian Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I6c!A1\"\", \"\"Institute for Defence and Disarmament Studies \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I27!A1\"\", \"\"Institute for Defence Policy Publications - Papers and Monographs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I7!A1\"\", \"\"Institute for East-West Security Studies - Meeting Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I8!A1\"\", \"\"Institute for East-West Security Studies - Occasional Papers/Public Policy Papers/Monograph Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I9!A1\"\", \"\"Institute for East-West Security Studies - Public Policy Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I10!A1\"\", \"\"Institute for National Strategic Studies - McNair Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I11b!A1\"\", \"\"Institute for National Strategic Studies - Strategic Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I11!A1\"\", \"\"Institute for National Strategic Studies-Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I11c!A1\"\", \"\"Institute for Security Studies - Mongraphs and Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I4!A1\"\", \"\"Institute for the Study of Diplomacy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I11a!A1\"\", \"\"Institute on Global Conflict and Cooperation\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I12b!A1\"\", \"\"Intelligence Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I14a!A1\"\", \"\"Intercom \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I12!A1\"\", \"\"International Boundaries Research Unit - Boundary and Security Bulletin\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I13!A1\"\", \"\"International Boundaries Research Unit - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I14!A1\"\", \"\"International Boundaries Research Unit - Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I15!A1\"\", \"\"International Canada\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I16!A1\"\", \"\"International Defense Review \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I17!A1\"\", \"\"International Economic Insights \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I17aa!A1\"\", \"\"International Feminist Journal of Politics \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I6b!A1\"\", \"\"International Institute for Democracy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I17a!A1\"\", \"\"International Institute for Strategic Studies - Strategic Comments\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I18!A1\"\", \"\"International Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I18a!A1\"\", \"\"International Negotiation\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I19!A1\"\", \"\"International Organization\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I20!A1\"\", \"\"International Peace Academy - Reports/Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I20ai!A1\"\", \"\"International Peace Research Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I20a!A1\"\", \"\"International Peacekeeping\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I21!A1\"\", \"\"International Perspectives\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I21a!A1\"\", \"\"International Relations Bulletin\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I22!A1\"\", \"\"International Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I22a!A1\"\", \"\"International Security Digest\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I23!A1\"\", \"\"International Spectator\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I24!A1\"\", \"\"International Strategic Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I24a!A1\"\", \"\"International Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I4a!A1\"\", \"\"International Studies Association Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I24b!A1\"\", \"\"International Studies in Europe\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I26b!A1\"\", \"\"International Studies Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I25!A1\"\", \"\"International Studies Notes\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I25a!A1\"\", \"\"International Studies Perspectives\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I26!A1\"\", \"\"International Studies Quarterly \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I26a!A1\"\", \"\"International Studies Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I24c!A1\"\", \"\"International Studies Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals i!.xls] I28!A1\"\", \"\"ISUMA - Canadian Journal of Policy Research\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J5!A1\"\", \"\"Jaffee Center for Strategic Studies - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J5a!A1\"\", \"\"Jane's Defence Contracts\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J6!A1\"\", \"\"Jane's Defence Weekly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J6a!A1\"\", \"\"Janes Defense Weekly Defense Industry Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J7!A1\"\", \"\"Jane's Intelligence Review Pointer/Special Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J9!A1\"\", \"\"Jane's Intelligence Review/Soviet Intelligence Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J8!A1\"\", \"\"Jane's NATO Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J3!A1\"\", \"\"Japan Echo\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J10!A1\"\", \"\"John M. Olin Institute For Strategic Studies, Harvard University - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J10a!A1\"\", \"\"John W. Holmes Memorial Lecture\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J11!A1\"\", \"\"Joint Centre for Asia Pacific Studies - Asia/Policy/Research Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J13!A1\"\", \"\"Journal of American-East Asian Relations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J15a!A1\"\", \"\"Journal of Contemporary China\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J14!A1\"\", \"\"Journal of International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J15!A1\"\", \"\"Journal of North East Asian Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J16!A1\"\", \"\"Journal of Peace Research \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J17!A1\"\", \"\"Journal of Political and Military Sociology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J18!A1\"\", \"\"Journal of Soviet Military Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals j!.xls] J19!A1\"\", \"\"Journal of Strategic Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K2!A1\"\", \"\"Kasarinlan\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K1!A1\"\", \"\"Kashmir Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K5!A1\"\", \"\"Keck Center - Essays on Strategy and Diplomacy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K6!A1\"\", \"\"Kennan Institute - Meeting Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K6a!A1\"\", \"\"Kennan Institute for Advanced Russian studies - Conference/Special Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K9!A1\"\", \"\"Konrad Adenauer Stiftung - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals k!.xls] K7!A1\"\", \"\"Korean Journal of Defense Analysis\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals l!.xls] L1!A1\"\", \"\"La Trobe University - Politics Working Papers/Conference Proceedings\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals l!.xls] L1a!A1\"\", \"\"Lessons from the Edge\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals l!.xls] L2!A1\"\", \"\"Libertas\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals l!.xls] L3!A1\"\", \"\"London Defence Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M1!A1\"\", \"\"Mackenzie Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M2!A1\"\", \"\"Maritime Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M3!A1\"\", \"\"Martello Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M5!A1\"\", \"\"Mediterranean Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M6!A1\"\", \"\"Mershon Center - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M8!A1\"\", \"\"Middle East Focus\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M8a!A1\"\", \"\"Middle East Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M10!A1\"\", \"\"Military Technology and Economics/Military Technology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals m!.xls] M11!A1\"\", \"\"Millennium - Journal of International Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N5!A1\"\", \"\"National Defense \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N6aa!A1\"\", \"\"National Institute for Defense Studies, Japan - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N6!A1\"\", \"\"National Interest\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N6a!A1\"\", \"\"National Network for Research on the Pacific Rim\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N6b!A1\"\", \"\"National Network News\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N6c!A1\"\", \"\"National Security Studies Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N7!A1\"\", \"\"NATO's Sixteen Nations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N8!A1\"\", \"\"Navy League of Canada - Maritime Affairs Bulletin \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N8a!A1\"\", \"\"NIDS Security Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N9!A1\"\", \"\"Niobe Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N11!A1\"\", \"\"Non-Offensive Defence - Working Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N10!A1\"\", \"\"Non-Offensive Defence/NOD & Conversion\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N13!A1\"\", \"\"Nonproliferation Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N14!A1\"\", \"\"Norman Paterson School of International Affairs-Occasional Papers and Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N14a!A1\"\", \"\"North-South Institute Newsletter/Conference Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals n!.xls] N15!A1\"\", \"\"Norwegian Institute of International Affairs - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals o!.xls] O4!A1\"\", \"\"On the Alert\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals o!.xls] O5!A1\"\", \"\"Ontario Centre For International Business - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals o!.xls] O6!A1\"\", \"\"Orbis\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P0a!A1\"\", \"\"Pacific Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P0!A1\"\", \"\"Pacific Focus: Inha Journal of International and Security Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P1a!A1\"\", \"\"Pacific Forum - Occasional Papers and Policy Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P1!A1\"\", \"\"Pacific Research\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P2!A1\"\", \"\"Pacific Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P2a!A1\"\", \"\"Pacific Strategic Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P3!A1\"\", \"\"Pacifica Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P4b!A1\"\", \"\"PacNet\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P4c!A1\"\", \"\"Palestine-Israel Journal of Politics, Economics and Culture\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P5!A1\"\", \"\"Parameters\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P6!A1\"\", \"\"Peace and Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P7!A1\"\", \"\"Peace Magazine\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P8!A1\"\", \"\"Peace Research\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P8a!A1\"\", \"\"Peace Research Centre - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P8b!A1\"\", \"\"Peace Research Institute Frankfurt\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P9!A1\"\", \"\"Peace Research Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P9a!A1\"\", \"\"Peace Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P6a!A1\"\", \"\"Peace, Conflict Resolution, and Human Rights\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P9b!A1\"\", \"\"Peacekeeping & International Relations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P9b2!A1\"\", \"\"PeaceWatch\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P9c!A1\"\", \"\"Perceptions: Journal of International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P10!A1\"\", \"\"Ploughshares - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P11!A1\"\", \"\"Ploughshares Monitor\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P12!A1\"\", \"\"Policy Options\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P13!A1\"\", \"\"Policy Papers in International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P13a!A1\"\", \"\"Polish Institute of International Affairs - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P14!A1\"\", \"\"Political Science and Politics\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P15!A1\"\", \"\"Political Science Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P15a!A1\"\", \"\"Problematique\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P16!A1\"\", \"\"Problems of Communism\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P17!A1\"\", \"\"Proceedings\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P18a!A1\"\", \"\"Programme for Promoting Nuclear Non-Proliferation -  Newsbrief/Issue Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals p!.xls] P18b!A1\"\", \"\"Programme for Promoting Nuclear Non-Proliferation - Occasional Paper/Study\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q5!A1\"\", \"\"Quebec Centre for International Relations - CIRCA: International and Regional Conflicts and Canada\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q6!A1\"\", \"\"Quebec Centre for International Relations - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q7!A1\"\", \"\"Queen's University, Centre for International Relations - Canada-Europe Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q7a!A1\"\", \"\"Queen's University, Centre for International Relations - National Security Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q7b!A1\"\", \"\"Queen's University, Centre for International Relations - Northern Studies Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals q!.xls] Q8!A1\"\", \"\"Queen's Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R3!A1\"\", \"\"Rand Abstracts: Semiannual Guide to Rand Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R4!A1\"\", \"\"RAND Memorandum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R5!A1\"\", \"\"RAND Notes\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R6!A1\"\", \"\"RAND Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R7!A1\"\", \"\"RAND Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R8!A1\"\", \"\"RAND Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r.xls] 'R8a'!A1\"\", \"\"Refuge: Canada's Periodical on Refugees\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] 'R8a1'!A1\"\", \"\"Regional Centre for Strategic Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] 'R8b'!A1\"\", \"\"Regional Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R9!A1\"\", \"\"Review of International Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] 'R10a'!A1\"\", \"\"RUSI - Chinese Military Update\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R10!A1\"\", \"\"Roma Rights - Newsletter of the European Roma Rights Center\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R11!A1\"\", \"\"RUSI Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R12!A1\"\", \"\"RUSI Newsbrief/Fact Sheet - The RUSI Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals r!.xls] R13!A1\"\", \"\"RUSI Whitehall Paper Series - The RUSI Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S3!A1\"\", \"\"SAIS Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S4!A1\"\", \"\"Science & Global Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S4a!A1\"\", \"\"Security Dialogue (formerly Bulletin of Peace Proposals)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5!A1\"\", \"\"Security Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5a1!A1\"\", \"\"Shastri News\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5a!A1\"\", \"\"Singapore Institute of International Affairs - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5a11!A1\"\", \"\"Small Arms Proliferation and Africa\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5c!A1\"\", \"\"South Letter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S5b!A1\"\", \"\"Southampton Papers in International Policy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S6!A1\"\", \"\"Soviet Studies Research Centre - Occasional Briefs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S7!A1\"\", \"\"Soviet Studies Research Centre - Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S7a!A1\"\", \"\"Soviet Studies Research Centre - Translations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S9!A1\"\", \"\"Stanley Foundation - Conference Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S8!A1\"\", \"\"Stanley Foundation - Occasional/Policy Papers/Policy Bulletins\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S16!A1\"\", \"\"State of the Nation Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S10!A1\"\", \"\"Strategic and Defence Studies Centre - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S10a!A1\"\", \"\"Strategic and Defense Studies Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S11a!A1\"\", \"\"Strategic Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S11!A1\"\", \"\"Strategic Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S15!A1\"\", \"\"Studies on the Economic Future of North America\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S13!A1\"\", \"\"Survival\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals s!.xls] S14!A1\"\", \"\"Swedish Institute of International Affairs - Conference/Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals d.xls] D9!A1\"\", \"\"The Dickey Center - John Sloan Dickey Center for International Understanding\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals t!.xls] T4!A1\"\", \"\"Third World Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals t!.xls] T3!A1\"\", \"\"Thomas J. Watson Jr. Institute for International Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals t!.xls] T5!A1\"\", \"\"Transitions\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals t!.xls] T6!A1\"\", \"\"Trust and Verify\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U1!A1\"\", \"\"United States Institute of Peace - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U1a!A1\"\", \"\"United States Institute of Peace Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U7!A1\"\", \"\"Universitat Rostock\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U6!A1\"\", \"\"Universite du Quebec a Montreal. Centre d'etudes des politiques etrangeres et de securite\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U4!A1\"\", \"\"University of  Laval: Le Maintien de la Paix and ECHOS de l'institut\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U2a!A1\"\", \"\"University of Bradford - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U2!A1\"\", \"\"University of British Columbia Institute of International Relations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U3!A1\"\", \"\"University of California, Institute of East Asian Studies - Research Papers and Policy Studies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U5a!A1\"\", \"\"University of Manitoba, Centre for Defence and Security Studies - Bison Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U5!A1\"\", \"\"University of Manitoba, Programme in Strategic Studies - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U12!A1\"\", \"\"University of the Western Cape Centre for Southern African Studies - Southern African Perspectives A Working Paper Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U10!A1\"\", \"\"University of the Western Cape, Centre for Southern  African Studies - Backgrounder Papers \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U11!A1\"\", \"\"University of The Western Cape, Centre for Southern African Studies - Chronology\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals u!.xls] U9!A1\"\", \"\"University of the Western Cape, Centre for Southern African Studies - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals v!.xls] V1!A1\"\", \"\"Vanguard \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals v!.xls] V3!A1\"\", \"\"Vantage Point: Developments in North Korea\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals v!.xls] V5!A1\"\", \"\"Vienna Fax\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W5!A1\"\", \"\"Washington Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W6!A1\"\", \"\"Washington Quarterly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W6a!A1\"\", \"\"Wednesday Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W7!A1\"\", \"\"Wellesley Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W7a!A1\"\", \"\"West European Politics\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W8!A1\"\", \"\"World Link\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W10!A1\"\", \"\"World Policy Journal\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W10a!A1\"\", \"\"World Policy Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W11!A1\"\", \"\"World Politics\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W12!A1\"\", \"\"World Press Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals w!.xls] W13!A1\"\", \"\"World Today\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y9!A1\"\", \"\"York Centre for International and Strategic Studies - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y6!A1\"\", \"\"York Centre for International and Strategic Studies - Monographs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y8!A1\"\", \"\"York Centre for International and Strategic Studies - North Pacific Cooperative Security Dialogue Research Programme Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y5!A1\"\", \"\"York Centre for International and Strategic Studies - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y7!A1\"\", \"\"York Centre for International and Strategic Studies - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y10!A1\"\", \"\"York Centre for International and Strategic Studies Canadian Consortium on Asia Pacific Security (CANCAPS) Papiers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y12!A1\"\", \"\"York Centre for International and Strategic Studies Multilateral Institutions and Global Security Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y4!A1\"\", \"\"York University - Centre for Feminist Research\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y16!A1\"\", \"\"York University, Department of Political Science, Occasional Papers Series\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/periodicals y!.xls] Y13!A1\"\", \"\"York University: Joint Centre on Modern East Asia - Working Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - E.xls] E1!A1\"\", \"\"Allied Forces Central Europe Ace Output\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A26!A1\"\", \"\"Association of South East Asian Nations (ASEAN) Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A17!A1\"\", \"\"Canadian Network on United Nations Reform - New World\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A3!A1\"\", \"\"Disarmament - A Periodic Review by the United Nations\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A8!A1\"\", \"\"United Nations - Department of Disarmament Affairs - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A4!A1\"\", \"\"Disarmament Fact Sheet\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A5!A1\"\", \"\"Information Paper\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - C.xls] C2!A1\"\", \"\"International Atomic Energy Agency - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - C.xls] C3!A1\"\", \"\"International Atomic Energy Agency - Newsbriefs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - C.xls] C1!A1\"\", \"\"International Atomic Energy Agency Bulletin - Quarterly Journal of the International Atomic Energy Agency\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - F.xls] F1!A1\"\", \"\"International Energy Agency Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B6!A1\"\", \"\"International Monetary Fund - Miscellaneous Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B4!A1\"\", \"\"International Monetary Fund - Occasional Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B9!A1\"\", \"\"International Monetary Fund - Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B2!A1\"\", \"\"International Monetary Fund - Annual Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - E.xls] E2!A1\"\", \"\"NATO Facts and Figures\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - E.xls] E4!A1\"\", \"\"NATO Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - E.xls] E5!A1\"\", \"\"NATO Press Service\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - E.xls] E3!A1\"\", \"\"NATO Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - D.xls] D2!A1\"\", \"\"Organisation for Economic Cooperation and Development (OECD) - Economic Outlook\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - D.xls] D3!A1\"\", \"\"Organisation for Economic Cooperation and Development (OECD) - Economic Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - D.xls] D5!A1\"\", \"\"Organisation for Economic Cooperation and Development (OECD) - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - D.xls] D4!A1\"\", \"\"Organisation for Economic Cooperation and Development (OECD) - Nuclear Energy Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - K.xls] K1!A1\"\", \"\"Organization for the Prohibition of Chemical Weapons - Information Series and OPCW Synthesis\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A13!A1\"\", \"\"UNIDIR Newsletter\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A12!A1\"\", \"\"UNIDIR Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A12a!A1\"\", \"\"UNIDIR Research Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A21!A1\"\", \"\"United Nations -  Resolutions\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A20!A1\"\", \"\"United Nations - Miscellaneous Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A16!A1\"\", \"\"United Nations Association of Canada - Bulletin and Briefing Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A18!A1\"\", \"\"United Nations Association of the United States of America Publications\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A1!A1\"\", \"\"United Nations Chronicle\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A10!A1\"\", \"\"United Nations Conferences on Disarmament \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A14!A1\"\", \"\"United Nations Disarmament Topical Papers\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A2!A1\"\", \"\"United Nations Disarmament Yearbook\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A25!A1\"\", \"\"United Nations Environment Programme\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - I.xls] I3!A1\"\", \"\"Western European Union - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B7!A1\"\", \"\"World Bank Publications - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B1!A1\"\", \"\"World Economic and Financial Surveys\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - B.xls] B8!A1\"\", \"\"World Economic Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international publications - A.xls] A1a!A1\"\", \"\"United Nations - Disarmament Forum\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B1!A1\"\", \"\"American Foreign Policy Basic Documents \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - G.xls] G1!A1\"\", \"\"Australian Foreign Affairs Record - Monthly Record\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - D.xls] D1!A1\"\", \"\"British Information Service - News Release\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - D.xls] D3!A1\"\", \"\"British Information Service - Reference Services \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - M.xls] M1!A1\"\", \"\"Consulate General of Israel - Arab Media Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - C.xls] C5!A1\"\", \"\"Foreign Trade - Monthly\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - M.xls] M2!A1\"\", \"\"MidEast Mirror\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B11!A1\"\", \"\"United States - Arms Control and Disarmament Agency\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B6!A1\"\", \"\"United States - Commission Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B12a!A1\"\", \"\"United States - Congressional Research Service - Reports\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B19!A1\"\", \"\"United States - Country Reports on Human Rights Practices (for use of the Committee on Foreign Affairs and Foreign Relations)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B12b!A1\"\", \"\"United States - CRS Major Issues System - Issue Briefs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B5!A1\"\", \"\"United States - Department of Defense\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B8!A1\"\", \"\"United States - Department of State\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B3!A1\"\", \"\"United States - Department of State Bulletin\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B4!A1\"\", \"\"United States - DOD Annual Report\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B7!A1\"\", \"\"United States - Miscellaneous\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B9!A1\"\", \"\"United States - Office of Technology Assessment\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/international government documents - B.xls] B16!A1\"\", \"\"United States Department of State - Current Policy\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - A.xls] A6!A1\"\",\"\"Annual Editions\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - A.xls] A3!A1\"\",\"\"ASIA YEARBOOK (Far Eastern Economic Review)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - A.xls] A2!A1\"\",\"\"Asian Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - B.xls] B5!A1\"\",\"\"Bibliographies\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - C.xls] 'C3b'!A1\"\",\"\"Bibliographies - The Canadian Institute for Inernational Peace and Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - C.xls] C5!A1\"\",\"\"Canadian News Facts \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - E.xls] E5!A1\"\",\"\"Encyclopedia of Arms Control and Disarmament  \"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - G.xls] G5!A1\"\",\"\"Guides and Directories\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J1!A1\"\",\"\"JANE'S -  Infantry Weapons\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J4!A1\"\",\"\"JANE'S - All the World's Aircrafts\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J3!A1\"\",\"\"JANE'S - Armour and Artillery\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J7!A1\"\",\"\"JANE'S - Aviation Annual\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J12!A1\"\",\"\"JANE'S - Aviation Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J2!A1\"\",\"\"JANE'S - Fighting Ships\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J10!A1\"\",\"\"JANE'S - Military Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J13!A1\"\",\"\"JANE'S - NATO Handbook\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J8!A1\"\",\"\"JANE'S - Naval Annual\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J11!A1\"\",\"\"JANE'S - Naval Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - J.xls] J5!A1\"\",\"\"JANE'S - Weapon Systems\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - M.xls] M1!A1\"\",\"\"Middle East Contemporary Survey\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - P.xls] P4!A1\"\",\"\"Pacific Economic Outlook\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - P.xls] P5!A1\"\",\"\"Peacekeeper's Handbook)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - P.xls] P6!A1\"\",\"\"Political Handbook of the World (Banks)\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - S.xls] S2!A1\"\",\"\"Stateman's Yearbook\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - S.xls] S5!A1\"\",\"\"Survey of International Affairs\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - E.xls] E3!A1\"\",\"\"The Economist: World Review\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - C.xls] 'C3g'!A1\"\",\"\"The Guide to Canadian Policies on Arms Control, Disarmament, Defence and Conflict Resolution - The Canadian Institute for Inernational Peace and Security\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - T.xls] T5!A1\"\",\"\"Treaties and Negotiations Texts\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - V.xls] V1!A1\"\",\"\"Verification Report - Yearbook on Arms Control, Peacekeeping and the Environment\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - A.xls] A4!A1\"\",\"\"World Atlas\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - W.xls] W1!A1\"\",\"\"World Military And Social Expenditures\"\")\"\n\"HYPERLINK(\"\"[http://www.yorku.ca/yciss/library/Bible/reference - W.xls] W5!A1\"\",\"\"World Military Expenditures and Arms Transfers - U.S. ACDA\"\")\"\n\"(F32+J32)\"\n\"(D77+J77)\"\n\"COUNTIF(C6:C118,\"\"=M\"\")\"\n\"AVERAGE(E6:E120)\"\n\"COUNTIF(C6:C118,\"\"=F\"\")\"\n\"SUBTOTAL(1,E6:E118)\"\n\"COUNTIF(E4:E118,\"\">39\"\")\"\n\"E134-E137\"\n\"COUNTIF(E4:E118,\"\">49\"\")\"\n\"E137-E141\"\n\"COUNTIF(E4:E118,\"\">59\"\")\"\n\"COUNTIF(E4:E118,\"\">69\"\")\"\n\"E144\"\n\"COUNTIF(E4:E118,\"\">69\"\")\"\n\"SUM(D9:D26)\"\n\"SUM(E2+D3)\"\n\"SUM(E3+C4+D4)\"\n\"SUM(C3:C21)\"\n\"SUM(C23/E23)\"\n\"SUM(D23/E23)\"\n\"SUM(C24:D24)\"\n\"G2-7\"\n\"L2+7\"\n\"BE2+6\"\n\"BK2+8\"\n\"DO16/DO17*100\"\n\"DC16/DC15*100\"\n\"C2\"\n\"C3/(C$16/100)\"\n\"CR3/CR$16*100\"\n\"(BC3/C3*100)-100\"\n\" (210*100/210)\"\n\" (241*100/(241))\"\n\" 100\"\n\"26*100/(70-17)\"\n\" 100\"\n\"INT((2*100)/(70-9))\"\n\" 15/60 %\"\n\"(210-151)*100/110\"\n\"I59-20*J59\"\n\"I59+20*J59\"\n\"K59\"\n\"G77+20*H77\"\n\"G77-20*H77\"\n\"G78-20*H78\"\n\"G78+20*H78\"\n\"E4/E5*100\"\n\"E4/E5*100\"\n\"'FY04'!F12\"\n\"Salaries!C25\"\n\"Salaries!C37\"\n\"Salaries!C48\"\n\"Salaries!C59\"\n\"SUM(B4+D4+F4+H4+J4)\"\n\"SUM(B4)\"\n\"'FY04'!B15\"\n\"'FY05'!F15\"\n\"SUM(B14:B17)\"\n\"'FY04'!F23\"\n\"'FY05'!B23\"\n\"0.2*$B$35\"\n\"'FY06'!B25\"\n\"(F24*1.1)\"\n\"(H24*1.1)+(H36*0.2)\"\n\"SUM(B21:B26)\"\n\"SUM(B30:B31)\"\n\"B35*0.5\"\n\"SUM(B35:B35)\"\n\"SUM(B11+B18+B27+B32+B36)\"\n\"'FY04'!D38\"\n\"'FY05'!E37\"\n\"'FY06'!D37\"\n\"'FY07'!D37\"\n\"'FY08'!D37\"\n\"SUM(B40:K40)\"\n\"B4*1.32\"\n\"C4*0.59\"\n\"C5*0.5\"\n\"SUM(E4:E7)\"\n\"SUM(F5:F7)\"\n\"SUM(E8+F8)\"\n\"SUM(B4:B11)\"\n\"SUM(E8+E12)\"\n\"SUM(E13:F13)\"\n\"B4*1.015\"\n\"B16*1.03\"\n\"B33*1.03\"\n\"(B44*1.32)\"\n\"B43+B47\"\n\"Expenses!A1\"\n\"Salaries!E4\"\n\"SUM(B5:E5)\"\n\"Salaries!F5\"\n\"Salaries!F9\"\n\"SUM(B5:B11)\"\n\"SUM(C17:E17)\"\n\"SUM(B15:B18)\"\n\"SUM(C22:C27)\"\n\"SUM(B31:B32)\"\n\"Expenses!B35\"\n\"SUM(B36)\"\n\"SUM(B12+B19+B28+B33+B37)\"\n\"Expenses!A1\"\n\"Salaries!C16\"\n\"SUM(B5:E5)\"\n\"Salaries!$C$21*0.75\"\n\"Salaries!$C$21*0.25\"\n\"SUM(C5:C11)\"\n\"SUM(B15:B18)\"\n\"SUM(C18)\"\n\"Expenses!D23\"\n\"SUM(C26:E26)\"\n\"SUM(C22:C26)\"\n\"SUM(C30:C31)\"\n\"SUM(B12+B19+B27+B32+B36)\"\n\"Expenses!A1\"\n\"Salaries!C28\"\n\"SUM(B5:E5)\"\n\"Salaries!C33*0.5\"\n\"Salaries!C33*0.5\"\n\"SUM(B5:B11)\"\n\"SUM(D9:D11)\"\n\"SUM(B15:B18)\"\n\"40000*1.1\"\n\"SUM(B22:B26)\"\n\"SUM(F30:F31)\"\n\"SUM(B12+B19+B27+B32+B36)\"\n\"Expenses!A1\"\n\"Salaries!C40\"\n\"SUM(B6:E6)\"\n\"Salaries!C44*0.25\"\n\"Salaries!C44*0.75\"\n\"SUM(B6:B11)\"\n\"SUM(B15:B18)\"\n\"Expenses!H24\"\n\"SUM(B22:B26)\"\n\"SUM(B30:B31)\"\n\"Expenses!H35\"\n\"SUM(B35)\"\n\"SUM(B12+B19+B27+B32+B36)\"\n\"Expenses!A1\"\n\"Salaries!C51\"\n\"SUM(B6:E6)\"\n\"Salaries!C55\"\n\"SUM(B6:B11)\"\n\"SUM(B15:B18)\"\n\"Expenses!J24\"\n\"SUM(B22:B26)\"\n\"SUM(B30:B31)\"\n\"SUM(B12+B19+B27+B32+B36)\"\n\"+B3/B4\"\n\"+B6*G2\"\n\"+B7*I5/(B3*1000)/+G2\"\n\"+E7*G2\"\n\"+B6*B8\"\n\"+E9*G$2\"\n\"8760*0.2\"\n\"+B16*5\"\n\"+B16*B17\"\n\"+E17*G2\"\n\"+E18*G2\"\n\"+E18+E17\"\n\"+B22/3.6\"\n\"1/D22\"\n\"+F22/B26\"\n\"+(B25*3.6)\"\n\"+D25*G2\"\n\"49.7/44.8\"\n\"+D25/B26\"\n\"+F25/B26\"\n\"+B32*G2\"\n\"+B38*B41/1000\"\n\"+G38/B43\"\n\"+B40/3.6\"\n\"+B39/B41\"\n\"27.52/26.3\"\n\"F4+G4\"\n\"HYPERLINK(CONCATENATE($H$4,F6),G6)\"\n\"HYPERLINK(CONCATENATE($H$4,F7),G7)\"\n\"ROUND(E8/1.06,2)\"\n\"+D14*1.06\"\n\"+C135*0.943396226415094\"\n\"IF(D8>0,B8+D8-1,\"\"\"\")\"\n\"IF(D9>0,B8+D8,\"\"\"\")\"\n\"IF(0.15*D13<100,100,CEILING(D13*0.15,5))\"\n\"F13*3\"\n\"G13*2\"\n\"IF(D13*1.25*1.4*1.4>20000,CEILING(D13*1.1,5),CEILING(D13*1.25,5))\"\n\"CEILING(J13*1.4,5)\"\n\"IF(K13*1.4>20000,20000,CEILING(K13*1.4,5))\"\n\"SUM(S2:S59)\"\n\"IF(H10=2,275,IF(H10=3,300,250))*K10\"\n\"336*0.07*5\"\n\"168 * 0.07 *5\"\n\" 671 * 0.07 * 5\"\n\" 252 * 0.07 * 5\"\n\"839*0.07*5\"\n\"4196*0.07*5\"\n\"+A43\"\n\"ONet!C3\"\n\"ONet!G3\"\n\"ONet!B3\"\n\"ONet!C12\"\n\"ONet!G12\"\n\"ONet!B12\"\n\"ONet!C19\"\n\"ONet!G19\"\n\"ONet!B19\"\n\"ONet!C27\"\n\"ONet!G27\"\n\"ONet!B27\"\n\"ONet!C36\"\n\"ONet!G36\"\n\"ONet!B36\"\n\"ONet!C42\"\n\"ONet!G42\"\n\"ONet!B42\"\n\"ONet!C53\"\n\"ONet!G53\"\n\"ONet!B53\"\n\"ONet!C62\"\n\"ONet!G62\"\n\"ONet!B62\"\n\"ONet!C68\"\n\"ONet!G68\"\n\"ONet!B68\"\n\"ONet!C76\"\n\"ONet!G76\"\n\"ONet!B76\"\n\"ONet!C85\"\n\"ONet!G85\"\n\"ONet!B85\"\n\"ONet!C91\"\n\"ONet!G91\"\n\"ONet!B91\"\n\"ONet!C97\"\n\"ONet!G97\"\n\"ONet!B97\"\n\"ONet!C104\"\n\"ONet!G104\"\n\"ONet!B104\"\n\"ONet!C114\"\n\"ONet!G114\"\n\"ONet!B114\"\n\"ONet!C120\"\n\"ONet!G120\"\n\"ONet!B120\"\n\"ONet!C129\"\n\"ONet!G129\"\n\"ONet!B129\"\n\"ONet!C138\"\n\"ONet!G138\"\n\"ONet!B138\"\n\"ONet!C147\"\n\"ONet!G147\"\n\"ONet!B147\"\n\"ONet!C156\"\n\"ONet!G156\"\n\"ONet!B156\"\n\"ONet!C165\"\n\"ONet!G165\"\n\"ONet!B165\"\n\"ONet!C174\"\n\"ONet!G174\"\n\"ONet!B174\"\n\"ONet!C181\"\n\"ONet!G181\"\n\"ONet!B181\"\n\"'Application Admin.'!C2\"\n\"'Application Admin.'!G2\"\n\"'Application Admin.'!B2\"\n\"'Application Admin.'!C19\"\n\"'Application Admin.'!G19\"\n\"'Application Admin.'!B19\"\n\"'Application Admin.'!C36\"\n\"'Application Admin.'!G36\"\n\"'Application Admin.'!B36\"\n\"'Application Admin.'!C54\"\n\"'Application Admin.'!G54\"\n\"'Application Admin.'!B54\"\n\"'Application Admin.'!C67\"\n\"'Application Admin.'!G67\"\n\"'Application Admin.'!B67\"\n\"'Application Admin.'!C90\"\n\"'Application Admin.'!G90\"\n\"'Application Admin.'!B90\"\n\"'Application Admin.'!C116\"\n\"'Application Admin.'!G116\"\n\"'Application Admin.'!B116\"\n\"'Application Admin.'!C130\"\n\"'Application Admin.'!G130\"\n\"'Application Admin.'!B130\"\n\"'Application Admin.'!C145\"\n\"'Application Admin.'!G145\"\n\"'Application Admin.'!B145\"\n\"'Application Admin.'!C223\"\n\"'Application Admin.'!G223\"\n\"'Application Admin.'!B223\"\n\"'Application Admin.'!C237\"\n\"'Application Admin.'!G237\"\n\"'Application Admin.'!B237\"\n\"'Application Admin.'!C253\"\n\"'Application Admin.'!G253\"\n\"'Application Admin.'!B253\"\n\"'Application Admin.'!C274\"\n\"'Application Admin.'!G274\"\n\"'Application Admin.'!B274\"\n\"'Application Admin.'!C287\"\n\"'Application Admin.'!G287\"\n\"'Application Admin.'!B287\"\n\"'Application Admin.'!C303\"\n\"'Application Admin.'!G303\"\n\"'Application Admin.'!B303\"\n\"'Application Admin.'!C324\"\n\"'Application Admin.'!G324\"\n\"'Application Admin.'!B324\"\n\"'Application Admin.'!C337\"\n\"'Application Admin.'!G337\"\n\"'Application Admin.'!B337\"\n\"'Application Admin.'!C351\"\n\"'Application Admin.'!G351\"\n\"'Application Admin.'!B351\"\n\"'Application Admin.'!C377\"\n\"'Application Admin.'!G377\"\n\"'Application Admin.'!B377\"\n\"'Application Admin.'!C400\"\n\"'Application Admin.'!G400\"\n\"'Application Admin.'!B400\"\n\"'Application Admin.'!C416\"\n\"'Application Admin.'!G416\"\n\"'Application Admin.'!B416\"\n\"'Application Admin.'!C431\"\n\"'Application Admin.'!G431\"\n\"'Application Admin.'!B431\"\n\"'Application Admin.'!C448\"\n\"'Application Admin.'!G448\"\n\"'Application Admin.'!B448\"\n\"'Application Admin.'!C463\"\n\"'Application Admin.'!G463\"\n\"'Application Admin.'!B463\"\n\"'Application Admin.'!C477\"\n\"'Application Admin.'!G477\"\n\"'Application Admin.'!B477\"\n\"'Application Admin.'!C490\"\n\"'Application Admin.'!G490\"\n\"'Application Admin.'!B490\"\n\"'Application Admin.'!C503\"\n\"'Application Admin.'!G503\"\n\"'Application Admin.'!B503\"\n\"'Application Admin.'!C516\"\n\"'Application Admin.'!G516\"\n\"'Application Admin.'!B516\"\n\"'Application Admin.'!C537\"\n\"'Application Admin.'!G537\"\n\"'Application Admin.'!B537\"\n\"'Application Admin.'!C558\"\n\"'Application Admin.'!G558\"\n\"'Application Admin.'!B558\"\n\"'Application Admin.'!C572\"\n\"'Application Admin.'!G572\"\n\"'Application Admin.'!B572\"\n\"'Application Admin.'!C586\"\n\"'Application Admin.'!G586\"\n\"'Application Admin.'!B586\"\n\"'Application Admin.'!C600\"\n\"'Application Admin.'!G600\"\n\"'Application Admin.'!B600\"\n\"'Application Admin.'!C615\"\n\"'Application Admin.'!G615\"\n\"'Application Admin.'!B615\"\n\"'Application Admin.'!C634\"\n\"'Application Admin.'!G634\"\n\"'Application Admin.'!B634\"\n\"'Application Admin.'!C647\"\n\"'Application Admin.'!G647\"\n\"'Application Admin.'!B647\"\n\"'Application Admin.'!C664\"\n\"'Application Admin.'!G664\"\n\"'Application Admin.'!B664\"\n\"'Application Admin.'!C683\"\n\"'Application Admin.'!G683\"\n\"'Application Admin.'!B683\"\n\"'Application Admin.'!C696\"\n\"'Application Admin.'!G696\"\n\"'Application Admin.'!B696\"\n\"'Application Admin.'!C710\"\n\"'Application Admin.'!G710\"\n\"'Application Admin.'!B710\"\n\"'Application Admin.'!C723\"\n\"'Application Admin.'!G723\"\n\"'Application Admin.'!B723\"\n\"'Application Admin.'!C732\"\n\"'Application Admin.'!G732\"\n\"'Application Admin.'!B732\"\n\"'Application Admin.'!C746\"\n\"'Application Admin.'!G746\"\n\"'Application Admin.'!B746\"\n\"'Application Admin.'!C760\"\n\"'Application Admin.'!G760\"\n\"'Application Admin.'!B760\"\n\"'Application Admin.'!C773\"\n\"'Application Admin.'!G773\"\n\"'Application Admin.'!B773\"\n\"'Application Admin.'!C786\"\n\"'Application Admin.'!G786\"\n\"'Application Admin.'!B786\"\n\"'Application Admin.'!C800\"\n\"'Application Admin.'!G800\"\n\"'Application Admin.'!B800\"\n\"'Application Admin.'!C815\"\n\"'Application Admin.'!G815\"\n\"'Application Admin.'!B815\"\n\"'Application Admin.'!C829\"\n\"'Application Admin.'!G829\"\n\"'Application Admin.'!B829\"\n\"'Application Admin.'!C843\"\n\"'Application Admin.'!G843\"\n\"'Application Admin.'!B843\"\n\"'Application Admin.'!C857\"\n\"'Application Admin.'!G857\"\n\"'Application Admin.'!B857\"\n\"'Application Admin.'!C875\"\n\"'Application Admin.'!G875\"\n\"'Application Admin.'!B875\"\n\"'Application Admin.'!C890\"\n\"'Application Admin.'!G890\"\n\"'Application Admin.'!B890\"\n\"'Application Admin.'!C904\"\n\"'Application Admin.'!G904\"\n\"'Application Admin.'!B904\"\n\"'Application Admin.'!C918\"\n\"'Application Admin.'!G918\"\n\"'Application Admin.'!B918\"\n\"'Application Admin.'!C934\"\n\"'Application Admin.'!G934\"\n\"'Application Admin.'!B934\"\n\"'Application Admin.'!C947\"\n\"'Application Admin.'!G947\"\n\"'Application Admin.'!B947\"\n\"'Application Admin.'!C960\"\n\"'Application Admin.'!G960\"\n\"'Application Admin.'!B960\"\n\"'Application Admin.'!C976\"\n\"'Application Admin.'!G976\"\n\"'Application Admin.'!B976\"\n\"'Application Admin.'!C990\"\n\"'Application Admin.'!G990\"\n\"'Application Admin.'!B990\"\n\"'Application Admin.'!C1003\"\n\"'Application Admin.'!G1003\"\n\"'Application Admin.'!B1003\"\n\"Registration!C2\"\n\"Registration!G2\"\n\"Registration!B2\"\n\"Registration!C22\"\n\"Registration!G22\"\n\"Registration!B22\"\n\"Registration!C35\"\n\"Registration!G35\"\n\"Registration!B35\"\n\"Registration!C63\"\n\"Registration!G63\"\n\"Registration!B63\"\n\"Registration!C103\"\n\"Registration!G103\"\n\"Registration!B103\"\n\"Registration!C128\"\n\"Registration!G128\"\n\"Registration!B128\"\n\"Registration!C147\"\n\"Registration!G147\"\n\"Registration!B147\"\n\"Registration!C184\"\n\"Registration!G184\"\n\"Registration!B184\"\n\"Registration!C202\"\n\"Registration!G202\"\n\"Registration!B202\"\n\"Registration!C241\"\n\"Registration!G241\"\n\"Registration!B241\"\n\"Registration!C259\"\n\"Registration!G259\"\n\"Registration!B259\"\n\"Registration!C311\"\n\"Registration!G311\"\n\"Registration!B311\"\n\"Registration!C343\"\n\"Registration!G343\"\n\"Registration!B343\"\n\"Registration!C373\"\n\"Registration!G373\"\n\"Registration!B373\"\n\"Registration!C392\"\n\"Registration!G392\"\n\"Registration!B392\"\n\"Registration!C442\"\n\"Registration!G442\"\n\"Registration!B442\"\n\"Registration!C460\"\n\"Registration!G460\"\n\"Registration!B460\"\n\"Registration!C474\"\n\"Registration!G474\"\n\"Registration!B474\"\n\"Registration!C488\"\n\"Registration!G488\"\n\"Registration!B488\"\n\"Registration!C502\"\n\"Registration!G502\"\n\"Registration!B502\"\n\"Registration!C524\"\n\"Registration!G524\"\n\"Registration!B524\"\n\"Registration!C539\"\n\"Registration!G539\"\n\"Registration!B539\"\n\"Registration!C555\"\n\"Registration!G555\"\n\"Registration!B555\"\n\"Registration!C570\"\n\"Registration!G570\"\n\"Registration!B570\"\n\"Registration!C585\"\n\"Registration!G585\"\n\"Registration!B585\"\n\"Registration!C600\"\n\"Registration!G600\"\n\"Registration!B600\"\n\"Registration!C615\"\n\"Registration!G615\"\n\"Registration!B615\"\n\"Registration!C646\"\n\"Registration!G646\"\n\"Registration!B646\"\n\"Registration!C654\"\n\"Registration!G654\"\n\"Registration!B654\"\n\"Registration!C669\"\n\"Registration!G669\"\n\"Registration!B669\"\n\"Registration!C688\"\n\"Registration!G688\"\n\"Registration!B688\"\n\"Registration!C723\"\n\"Registration!G723\"\n\"Registration!B723\"\n\"Registration!C745\"\n\"Registration!G745\"\n\"Registration!B745\"\n\"Registration!C793\"\n\"Registration!G793\"\n\"Registration!B793\"\n\"Registration!C808\"\n\"Registration!G808\"\n\"Registration!B808\"\n\"Registration!C826\"\n\"Registration!G826\"\n\"Registration!B826\"\n\"Registration!C842\"\n\"Registration!G842\"\n\"Registration!B842\"\n\"'Case Management'!C2\"\n\"'Case Management'!G2\"\n\"'Case Management'!B2\"\n\"'Case Management'!C27\"\n\"'Case Management'!G27\"\n\"'Case Management'!B27\"\n\"'Case Management'!C46\"\n\"'Case Management'!G46\"\n\"'Case Management'!B46\"\n\"'Case Management'!C67\"\n\"'Case Management'!G67\"\n\"'Case Management'!B67\"\n\"'Case Management'!C86\"\n\"'Case Management'!G86\"\n\"'Case Management'!B86\"\n\"'Case Management'!C112\"\n\"'Case Management'!G112\"\n\"'Case Management'!B112\"\n\"'Case Management'!C131\"\n\"'Case Management'!G131\"\n\"'Case Management'!B131\"\n\"'Case Management'!C169\"\n\"'Case Management'!G169\"\n\"'Case Management'!B169\"\n\"'Case Management'!C184\"\n\"'Case Management'!G184\"\n\"'Case Management'!B184\"\n\"'Case Management'!C202\"\n\"'Case Management'!G202\"\n\"'Case Management'!B202\"\n\"'Case Management'!C221\"\n\"'Case Management'!G221\"\n\"'Case Management'!B221\"\n\"'Case Management'!C244\"\n\"'Case Management'!G244\"\n\"'Case Management'!B244\"\n\"'Case Management'!C263\"\n\"'Case Management'!G263\"\n\"'Case Management'!B263\"\n\"'Case Management'!C286\"\n\"'Case Management'!G286\"\n\"'Case Management'!B286\"\n\"'Case Management'!C312\"\n\"'Case Management'!G312\"\n\"'Case Management'!B312\"\n\"'Case Management'!C338\"\n\"'Case Management'!G338\"\n\"'Case Management'!B338\"\n\"'Case Management'!C358\"\n\"'Case Management'!G358\"\n\"'Case Management'!B358\"\n\"'Case Management'!C382\"\n\"'Case Management'!G382\"\n\"'Case Management'!B382\"\n\"'Case Management'!C413\"\n\"'Case Management'!G413\"\n\"'Case Management'!B413\"\n\"'Case Management'!C435\"\n\"'Case Management'!G435\"\n\"'Case Management'!B435\"\n\"'Case Management'!C454\"\n\"'Case Management'!G454\"\n\"'Case Management'!B454\"\n\"'Case Management'!C501\"\n\"'Case Management'!G501\"\n\"'Case Management'!B501\"\n\"'Case Management'!C532\"\n\"'Case Management'!G532\"\n\"'Case Management'!B532\"\n\"'Case Management'!C552\"\n\"'Case Management'!G552\"\n\"'Case Management'!B552\"\n\"'Case Management'!C576\"\n\"'Case Management'!G576\"\n\"'Case Management'!B576\"\n\"'Case Management'!C602\"\n\"'Case Management'!G602\"\n\"'Case Management'!B602\"\n\"'Case Management'!C634\"\n\"'Case Management'!G634\"\n\"'Case Management'!B634\"\n\"'Case Management'!C672\"\n\"'Case Management'!G672\"\n\"'Case Management'!B672\"\n\"'Case Management'!C691\"\n\"'Case Management'!G691\"\n\"'Case Management'!B691\"\n\"'Case Management'!C724\"\n\"'Case Management'!G724\"\n\"'Case Management'!B724\"\n\"'Case Management'!C745\"\n\"'Case Management'!G745\"\n\"'Case Management'!B745\"\n\"'Case Management'!C764\"\n\"'Case Management'!G764\"\n\"'Case Management'!B764\"\n\"'Case Management'!C779\"\n\"'Case Management'!G779\"\n\"'Case Management'!B779\"\n\"'Case Management'!C795\"\n\"'Case Management'!G795\"\n\"'Case Management'!B795\"\n\"'Case Management'!C874\"\n\"'Case Management'!G874\"\n\"'Case Management'!B874\"\n\"'Case Management'!C898\"\n\"'Case Management'!G898\"\n\"'Case Management'!B898\"\n\"'Case Management'!C929\"\n\"'Case Management'!G929\"\n\"'Case Management'!B929\"\n\"'Case Management'!C969\"\n\"'Case Management'!G969\"\n\"'Case Management'!B969\"\n\"'Case Management'!C986\"\n\"'Case Management'!G986\"\n\"'Case Management'!B986\"\n\"'Case Management'!C1006\"\n\"'Case Management'!G1006\"\n\"'Case Management'!B1006\"\n\"'Case Management'!C1033\"\n\"'Case Management'!G1033\"\n\"'Case Management'!B1033\"\n\"'Case Management'!C1077\"\n\"'Case Management'!G1077\"\n\"'Case Management'!B1077\"\n\"'Case Management'!C1103\"\n\"'Case Management'!G1103\"\n\"'Case Management'!B1103\"\n\"'Case Management'!C1118\"\n\"'Case Management'!G1118\"\n\"'Case Management'!B1118\"\n\"'Case Management'!C1140\"\n\"'Case Management'!G1140\"\n\"'Case Management'!B1140\"\n\"'Case Management'!C1162\"\n\"'Case Management'!G1162\"\n\"'Case Management'!B1162\"\n\"'Case Management'!C1182\"\n\"'Case Management'!G1182\"\n\"'Case Management'!B1182\"\n\"'Case Management'!C1195\"\n\"'Case Management'!G1195\"\n\"'Case Management'!B1195\"\n\"'Case Management'!C1209\"\n\"'Case Management'!G1209\"\n\"'Case Management'!B1209\"\n\"'Case Management'!C1233\"\n\"'Case Management'!G1233\"\n\"'Case Management'!B1233\"\n\"'Case Management'!C1260\"\n\"'Case Management'!G1260\"\n\"'Case Management'!B1260\"\n\"'Case Management'!C1279\"\n\"'Case Management'!G1279\"\n\"'Case Management'!B1279\"\n\"'Case Management'!C1294\"\n\"'Case Management'!G1294\"\n\"'Case Management'!B1294\"\n\"'Case Management'!C1316\"\n\"'Case Management'!G1316\"\n\"'Case Management'!B1316\"\n\"'Case Management'!C1330\"\n\"'Case Management'!G1330\"\n\"'Case Management'!B1330\"\n\"'Case Management'!C1345\"\n\"'Case Management'!G1345\"\n\"'Case Management'!B1345\"\n\"'Case Management'!C1360\"\n\"'Case Management'!G1360\"\n\"'Case Management'!B1360\"\n\"'Case Management'!C1376\"\n\"'Case Management'!G1376\"\n\"'Case Management'!B1376\"\n\"'Case Management'!C1397\"\n\"'Case Management'!G1397\"\n\"'Case Management'!B1397\"\n\"'Case Management'!C1408\"\n\"'Case Management'!G1408\"\n\"'Case Management'!B1408\"\n\"'Case Management'!C1414\"\n\"'Case Management'!G1414\"\n\"'Case Management'!B1414\"\n\"'Case Management'!C1431\"\n\"'Case Management'!G1431\"\n\"'Case Management'!B1431\"\n\"'Case Management'!C1446\"\n\"'Case Management'!G1446\"\n\"'Case Management'!B1446\"\n\"'Job Services'!C2\"\n\"'Job Services'!G2\"\n\"'Job Services'!B2\"\n\"'Job Services'!C29\"\n\"'Job Services'!G29\"\n\"'Job Services'!B29\"\n\"'Job Services'!C60\"\n\"'Job Services'!G60\"\n\"'Job Services'!B60\"\n\"'Job Services'!C87\"\n\"'Job Services'!G87\"\n\"'Job Services'!B87\"\n\"'Job Services'!C107\"\n\"'Job Services'!G107\"\n\"'Job Services'!B107\"\n\"'Job Services'!C125\"\n\"'Job Services'!G125\"\n\"'Job Services'!B125\"\n\"'Job Services'!C165\"\n\"'Job Services'!G165\"\n\"'Job Services'!B165\"\n\"'Job Services'!C198\"\n\"'Job Services'!G198\"\n\"'Job Services'!B198\"\n\"'Job Services'!C217\"\n\"'Job Services'!G217\"\n\"'Job Services'!B217\"\n\"'Job Services'!C239\"\n\"'Job Services'!G239\"\n\"'Job Services'!B239\"\n\"'Job Services'!C260\"\n\"'Job Services'!G260\"\n\"'Job Services'!B260\"\n\"'Job Services'!C289\"\n\"'Job Services'!G289\"\n\"'Job Services'!B289\"\n\"'Job Services'!C307\"\n\"'Job Services'!G307\"\n\"'Job Services'!B307\"\n\"'Job Services'!C324\"\n\"'Job Services'!G324\"\n\"'Job Services'!B324\"\n\"'Job Services'!C361\"\n\"'Job Services'!G361\"\n\"'Job Services'!B361\"\n\"'Job Services'!C421\"\n\"'Job Services'!G421\"\n\"'Job Services'!B421\"\n\"'Job Services'!C438\"\n\"'Job Services'!G438\"\n\"'Job Services'!B438\"\n\"'Job Services'!C452\"\n\"'Job Services'!G452\"\n\"'Job Services'!B452\"\n\"'Job Services'!C476\"\n\"'Job Services'!G476\"\n\"'Job Services'!B476\"\n\"'Job Services'!C498\"\n\"'Job Services'!G498\"\n\"'Job Services'!B498\"\n\"'Job Services'!C514\"\n\"'Job Services'!G514\"\n\"'Job Services'!B514\"\n\"'Job Services'!C537\"\n\"'Job Services'!G537\"\n\"'Job Services'!B537\"\n\"'Job Services'!C553\"\n\"'Job Services'!G553\"\n\"'Job Services'!B553\"\n\"'Job Services'!C573\"\n\"'Job Services'!G573\"\n\"'Job Services'!B573\"\n\"'Job Services'!C583\"\n\"'Job Services'!G583\"\n\"'Job Services'!B583\"\n\"'Job Services'!C601\"\n\"'Job Services'!G601\"\n\"'Job Services'!B601\"\n\"'Job Services'!C622\"\n\"'Job Services'!G622\"\n\"'Job Services'!B622\"\n\"'Job Services'!C638\"\n\"'Job Services'!G638\"\n\"'Job Services'!B638\"\n\"'Job Services'!C652\"\n\"'Job Services'!G652\"\n\"'Job Services'!B652\"\n\"'Job Services'!C663\"\n\"'Job Services'!G663\"\n\"'Job Services'!B663\"\n\"'Job Services'!C669\"\n\"'Job Services'!G669\"\n\"'Job Services'!B669\"\n\"'Job Services'!C697\"\n\"'Job Services'!G697\"\n\"'Job Services'!B697\"\n\"'Job Services'!C713\"\n\"'Job Services'!G713\"\n\"'Job Services'!B713\"\n\"'Job Services'!C760\"\n\"'Job Services'!G760\"\n\"'Job Services'!B760\"\n\"'Job Services'!C803\"\n\"'Job Services'!G803\"\n\"'Job Services'!B803\"\n\"'Job Services'!C832\"\n\"'Job Services'!G832\"\n\"'Job Services'!B832\"\n\"'Job Services'!C847\"\n\"'Job Services'!G847\"\n\"'Job Services'!B847\"\n\"'Job Services'!C863\"\n\"'Job Services'!G863\"\n\"'Job Services'!B863\"\n\"'Job Services'!C890\"\n\"'Job Services'!G890\"\n\"'Job Services'!B890\"\n\"'Job Services'!C900\"\n\"'Job Services'!G900\"\n\"'Job Services'!B900\"\n\"'Job Services'!C931\"\n\"'Job Services'!G931\"\n\"'Job Services'!B931\"\n\"'Job Services'!C986\"\n\"'Job Services'!G986\"\n\"'Job Services'!B986\"\n\"'Job Services'!C1031\"\n\"'Job Services'!G1031\"\n\"'Job Services'!B1031\"\n\"'Job Services'!C1123\"\n\"'Job Services'!G1123\"\n\"'Job Services'!B1123\"\n\"'Job Services'!C1141\"\n\"'Job Services'!G1141\"\n\"'Job Services'!B1141\"\n\"'Job Services'!C1147\"\n\"'Job Services'!G1147\"\n\"'Job Services'!B1147\"\n\"'OSMIS-Interface'!C2\"\n\"'OSMIS-Interface'!G2\"\n\"'OSMIS-Interface'!B2\"\n\"'OSMIS-Interface'!C29\"\n\"'OSMIS-Interface'!G29\"\n\"'OSMIS-Interface'!B29\"\n\"'OSMIS-Interface'!C59\"\n\"'OSMIS-Interface'!G59\"\n\"'OSMIS-Interface'!B59\"\n\"'OSMIS-Interface'!C120\"\n\"'OSMIS-Interface'!G120\"\n\"'OSMIS-Interface'!B120\"\n\"'OSMIS-Interface'!C146\"\n\"'OSMIS-Interface'!G146\"\n\"'OSMIS-Interface'!B146\"\n\"'OSMIS-Interface'!C179\"\n\"'OSMIS-Interface'!G179\"\n\"'OSMIS-Interface'!B179\"\n\"'OSMIS-Interface'!C186\"\n\"'OSMIS-Interface'!G186\"\n\"'OSMIS-Interface'!B186\"\n\"'OSMIS-Interface'!C204\"\n\"'OSMIS-Interface'!G204\"\n\"'OSMIS-Interface'!B204\"\n\"'OSMIS-Interface'!C265\"\n\"'OSMIS-Interface'!G265\"\n\"'OSMIS-Interface'!B265\"\n\"'OSMIS-Interface'!C295\"\n\"'OSMIS-Interface'!G295\"\n\"'OSMIS-Interface'!B295\"\n\"'OSMIS-Interface'!C322\"\n\"'OSMIS-Interface'!G322\"\n\"'OSMIS-Interface'!B322\"\n\"'OSMIS-Interface'!C342\"\n\"'OSMIS-Interface'!G342\"\n\"'OSMIS-Interface'!B342\"\n\"'OSMIS-Interface'!C368\"\n\"'OSMIS-Interface'!G368\"\n\"'OSMIS-Interface'!B368\"\n\"'OSMIS-Interface'!C403\"\n\"'OSMIS-Interface'!G403\"\n\"'OSMIS-Interface'!B403\"\n\"'OSMIS-Interface'!C425\"\n\"'OSMIS-Interface'!G425\"\n\"'OSMIS-Interface'!B425\"\n\"'OSMIS-Interface'!C444\"\n\"'OSMIS-Interface'!G444\"\n\"'OSMIS-Interface'!B444\"\n\"'OSMIS-Interface'!C469\"\n\"'OSMIS-Interface'!G469\"\n\"'OSMIS-Interface'!B469\"\n\"'OSMIS-Interface'!C493\"\n\"'OSMIS-Interface'!G493\"\n\"'OSMIS-Interface'!B493\"\n\"'OSMIS-Interface'!C523\"\n\"'OSMIS-Interface'!G523\"\n\"'OSMIS-Interface'!B523\"\n\"'OSMIS-Interface'!C555\"\n\"'OSMIS-Interface'!G555\"\n\"'OSMIS-Interface'!B555\"\n\"'OSMIS-Interface'!C585\"\n\"'OSMIS-Interface'!G585\"\n\"'OSMIS-Interface'!B585\"\n\"'OSMIS-Interface'!C611\"\n\"'OSMIS-Interface'!G611\"\n\"'OSMIS-Interface'!B611\"\n\"'OSMIS-Interface'!C638\"\n\"'OSMIS-Interface'!G638\"\n\"'OSMIS-Interface'!B638\"\n\"'OSMIS-Interface'!C649\"\n\"'OSMIS-Interface'!G649\"\n\"'OSMIS-Interface'!B649\"\n\"'OSMIS-Interface'!C662\"\n\"'OSMIS-Interface'!G662\"\n\"'OSMIS-Interface'!B662\"\n\"'OSMIS-Interface'!C686\"\n\"'OSMIS-Interface'!G686\"\n\"'OSMIS-Interface'!B686\"\n\"'OSMIS-Interface'!C702\"\n\"'OSMIS-Interface'!G702\"\n\"'OSMIS-Interface'!B702\"\n\"'OSMIS-Interface'!C719\"\n\"'OSMIS-Interface'!G719\"\n\"'OSMIS-Interface'!B719\"\n\"'OSMIS-Interface'!C749\"\n\"'OSMIS-Interface'!G749\"\n\"'OSMIS-Interface'!B749\"\n\"'OSMIS-Interface'!C777\"\n\"'OSMIS-Interface'!G777\"\n\"'OSMIS-Interface'!B777\"\n\"'OSMIS-Interface'!C838\"\n\"'OSMIS-Interface'!G838\"\n\"'OSMIS-Interface'!B838\"\n\"'OSMIS-Interface'!C861\"\n\"'OSMIS-Interface'!G861\"\n\"'OSMIS-Interface'!B861\"\n\"'OSMIS-Interface'!C877\"\n\"'OSMIS-Interface'!G877\"\n\"'OSMIS-Interface'!B877\"\n\"'OSMIS-Interface'!C882\"\n\"'OSMIS-Interface'!G882\"\n\"'OSMIS-Interface'!B882\"\n\"'OSMIS-Interface'!C906\"\n\"'OSMIS-Interface'!G906\"\n\"'OSMIS-Interface'!B906\"\n\"'OSMIS-Interface'!C930\"\n\"'OSMIS-Interface'!G930\"\n\"'OSMIS-Interface'!B930\"\n\"'OSMIS-Interface'!C937\"\n\"'OSMIS-Interface'!G937\"\n\"'OSMIS-Interface'!B937\"\n\"'OSMIS-Interface'!C951\"\n\"'OSMIS-Interface'!G951\"\n\"'OSMIS-Interface'!B951\"\n\"'OSMIS-Interface'!C1064\"\n\"'OSMIS-Interface'!G1064\"\n\"'OSMIS-Interface'!B1064\"\n\"'OSMIS-Interface'!C1101\"\n\"'OSMIS-Interface'!G1101\"\n\"'OSMIS-Interface'!B1101\"\n\"'OSMIS-Interface'!C1448\"\n\"'OSMIS-Interface'!G1448\"\n\"'OSMIS-Interface'!B1448\"\n\"'OSMIS-Interface'!C1470\"\n\"'OSMIS-Interface'!G1470\"\n\"'OSMIS-Interface'!B1470\"\n\"'OSMIS-Interface'!C1494\"\n\"'OSMIS-Interface'!G1494\"\n\"'OSMIS-Interface'!B1494\"\n\"'OSMIS-Interface'!C1607\"\n\"'OSMIS-Interface'!G1607\"\n\"'OSMIS-Interface'!B1607\"\n\"'OSMIS-Interface'!C1720\"\n\"'OSMIS-Interface'!G1720\"\n\"'OSMIS-Interface'!B1720\"\n\"'OSMIS-Interface'!C1833\"\n\"'OSMIS-Interface'!G1833\"\n\"'OSMIS-Interface'!B1833\"\n\"'OSMIS-Interface'!C1946\"\n\"'OSMIS-Interface'!G1946\"\n\"'OSMIS-Interface'!B1946\"\n\"'OSMIS-Interface'!C2059\"\n\"'OSMIS-Interface'!G2059\"\n\"'OSMIS-Interface'!B2059\"\n\"'OSMIS-Interface'!C2172\"\n\"'OSMIS-Interface'!G2172\"\n\"'OSMIS-Interface'!B2172\"\n\"'OSMIS-Interface'!C2285\"\n\"'OSMIS-Interface'!G2285\"\n\"'OSMIS-Interface'!B2285\"\n\"'OSMIS-Interface'!C2398\"\n\"'OSMIS-Interface'!G2398\"\n\"'OSMIS-Interface'!B2398\"\n\"'OSMIS-Interface'!C2511\"\n\"'OSMIS-Interface'!G2511\"\n\"'OSMIS-Interface'!B2511\"\n\"'OSMIS-Interface'!C2534\"\n\"'OSMIS-Interface'!G2534\"\n\"'OSMIS-Interface'!B2534\"\n\"'OSMIS-Interface'!C2579\"\n\"'OSMIS-Interface'!G2579\"\n\"'OSMIS-Interface'!B2579\"\n\"'OSMIS-Interface'!C2597\"\n\"'OSMIS-Interface'!G2597\"\n\"'OSMIS-Interface'!B2597\"\n\"'OSMIS-Interface'!C2619\"\n\"'OSMIS-Interface'!G2619\"\n\"'OSMIS-Interface'!B2619\"\n\"'OSMIS-Interface'!C2663\"\n\"'OSMIS-Interface'!G2663\"\n\"'OSMIS-Interface'!B2663\"\n\"'OSMIS-Interface'!C2676\"\n\"'OSMIS-Interface'!G2676\"\n\"'OSMIS-Interface'!B2676\"\n\"'OSMIS-Interface'!C2699\"\n\"'OSMIS-Interface'!G2699\"\n\"'OSMIS-Interface'!B2699\"\n\"'OSMIS-Interface'!C2710\"\n\"'OSMIS-Interface'!G2710\"\n\"'OSMIS-Interface'!B2710\"\n\"'OSMIS-Interface'!C2739\"\n\"'OSMIS-Interface'!G2739\"\n\"'OSMIS-Interface'!B2739\"\n\"'OSMIS-Interface'!C2764\"\n\"'OSMIS-Interface'!G2764\"\n\"'OSMIS-Interface'!B2764\"\n\"'OSMIS-Interface'!C2793\"\n\"'OSMIS-Interface'!G2793\"\n\"'OSMIS-Interface'!B2793\"\n\"'OSMIS-Interface'!C2812\"\n\"'OSMIS-Interface'!G2812\"\n\"'OSMIS-Interface'!B2812\"\n\"'OSMIS-Interface'!C2843\"\n\"'OSMIS-Interface'!G2843\"\n\"'OSMIS-Interface'!B2843\"\n\"'OSMIS-Interface'!C2873\"\n\"'OSMIS-Interface'!G2873\"\n\"'OSMIS-Interface'!B2873\"\n\"'OSMIS-Interface'!C2887\"\n\"'OSMIS-Interface'!G2887\"\n\"'OSMIS-Interface'!B2887\"\n\"'OSMIS-Interface'!C2906\"\n\"'OSMIS-Interface'!G2906\"\n\"'OSMIS-Interface'!B2906\"\n\"'OSMIS-Interface'!C2923\"\n\"'OSMIS-Interface'!G2923\"\n\"'OSMIS-Interface'!B2923\"\n\"'OSMIS-Interface'!C2942\"\n\"'OSMIS-Interface'!G2942\"\n\"'OSMIS-Interface'!B2942\"\n\"'OSMIS-Interface'!C2959\"\n\"'OSMIS-Interface'!G2959\"\n\"'OSMIS-Interface'!B2959\"\n\"'OSMIS-Interface'!C2964\"\n\"'OSMIS-Interface'!G2964\"\n\"'OSMIS-Interface'!B2964\"\n\"'OSMIS-Interface'!C2970\"\n\"'OSMIS-Interface'!G2970\"\n\"'OSMIS-Interface'!B2970\"\n\"'OSMIS-Interface'!C2984\"\n\"'OSMIS-Interface'!G2984\"\n\"'OSMIS-Interface'!B2984\"\n\"'OSMIS-Interface'!C3003\"\n\"'OSMIS-Interface'!G3003\"\n\"'OSMIS-Interface'!B3003\"\n\"'OSMIS-Interface'!C3020\"\n\"'OSMIS-Interface'!G3020\"\n\"'OSMIS-Interface'!B3020\"\n\"'OSMIS-Interface'!C3034\"\n\"'OSMIS-Interface'!G3034\"\n\"'OSMIS-Interface'!B3034\"\n\"'OSMIS-Interface'!C3053\"\n\"'OSMIS-Interface'!G3053\"\n\"'OSMIS-Interface'!B3053\"\n\"'OSMIS-Interface'!C3070\"\n\"'OSMIS-Interface'!G3070\"\n\"'OSMIS-Interface'!B3070\"\n\"'OSMIS-Interface'!C3076\"\n\"'OSMIS-Interface'!G3076\"\n\"'OSMIS-Interface'!B3076\"\n\"'OSMIS-Interface'!C3082\"\n\"'OSMIS-Interface'!G3082\"\n\"'OSMIS-Interface'!B3082\"\n\"'OSMIS-Interface'!C3088\"\n\"'OSMIS-Interface'!G3088\"\n\"'OSMIS-Interface'!B3088\"\n\"'OSMIS-Interface'!C3099\"\n\"'OSMIS-Interface'!G3099\"\n\"'OSMIS-Interface'!B3099\"\n\"'OSMIS-Interface'!C3110\"\n\"'OSMIS-Interface'!G3110\"\n\"'OSMIS-Interface'!B3110\"\n\"'OSMIS-Interface'!C3121\"\n\"'OSMIS-Interface'!G3121\"\n\"'OSMIS-Interface'!B3121\"\n\"'OSMIS-Interface'!C3132\"\n\"'OSMIS-Interface'!G3132\"\n\"'OSMIS-Interface'!B3132\"\n\"'OSMIS-Interface'!C3149\"\n\"'OSMIS-Interface'!G3149\"\n\"'OSMIS-Interface'!B3149\"\n\"'OSMIS-Interface'!C3165\"\n\"'OSMIS-Interface'!G3165\"\n\"'OSMIS-Interface'!B3165\"\n\"'OSMIS-Interface'!C3171\"\n\"'OSMIS-Interface'!G3171\"\n\"'OSMIS-Interface'!B3171\"\n\"'OSMIS-Interface'!C3177\"\n\"'OSMIS-Interface'!G3177\"\n\"'OSMIS-Interface'!B3177\"\n\"A3+1\"\n\"D5*E5\"\n\"SUM(F5:F15)\"\n\"F16\"\n\"E20*D20\"\n\"SUM(F20:F28)\"\n\"G16+F29\"\n\"SUM(F33:F40)\"\n\"G29+F41\"\n\"G41\"\n\"D5*E5\"\n\"SUM(F5:F15)\"\n\"F16\"\n\"E20*D20\"\n\"SUM(F20:F28)\"\n\"G16+F29\"\n\"SUM(F33:F40)\"\n\"G29+F41\"\n\"G41\"\n\"SUM(G10:G35)\"\n\"SUM(G42:G92)\"\n\"SUM(G120:G223)\"\n\"SUM(G232:G245)\"\n\"SUM(G269:G383)\"\n\"SUM(C10:K10)\"\n\"SUM(C22+E22+G22+I22+K22)\"\n\"SUM(B6:B15)\"\n\"SUM(B6:B15)\"\n\"SUM(B6:B15)\"\n\"(E16/E16)*100\"\n\"H8*C8\"\n\"K8*C8\"\n\"N8*C8\"\n\"Q10*C10\"\n\"SUM(I8:I43)\"\n\"SUM(A10:A13)\"\n\"SUM(A16:A22)\"\n\"SUM(A25:A30)\"\n\"SUM(A41:A49)\"\n\"SUM(A62:A64)\"\n\"SUM(A72:A73)\"\n\"SUM(A89,A83,A74,A70,A65,A60,A50,A40,A31,A23,A14)\"\n\"SUM(A10:A13)\"\n\"SUM(A25:A30)\"\n\"SUM(A33:A39)\"\n\"SUM(A42:A49)\"\n\"SUM(A62:A64)\"\n\"SUM(A72:A73)\"\n\"SUM(A89,A83,A74,A70,A65,A60,A50,A40,A31,A23,A14)\"\n\"E2*0.7\"\n\"ROUND(J9*0.97,2)\"\n\"SUM(J9*1.035)\"\n\"ROUND(K9*0.97,2)\"\n\"SUM(K9*1.035)\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,5,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,5,FALSE))\"\n\"IF(ISNA(F$6),\"\"N\"\",IF(AND(OR($B$2=\"\"Yes\"\",$D$2=F$6),OR($B$3=\"\"Yes\"\",$D$3=F$9),OR($B$4=\"\"Yes\"\",$D$4=F$10)),\"\"Y\"\",\"\"N\"\"))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,3,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,3,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,4,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,4,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,6,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,6,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,7,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,7,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,11,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,11,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,9,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,9,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,10,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,10,FALSE))\"\n\"IF(ISBLANK(VLOOKUP(F$8,MetaData,8,FALSE)),\"\"…\"\",VLOOKUP(F$8,MetaData,8,FALSE))\"\n\"IF(AND(D18>=$D$5,D18<=$D$6),\"\"Y\"\",\"\"N\"\")\"\n\"IF(AND(D944>=$D$5,D944<=$D$6),\"\"Y\"\",\"\"N\"\")\"\n\"IF(AND(#REF!>=$D$5,#REF!<=$D$6),\"\"Y\"\",\"\"N\"\")\"\n\"B9*B11\"\n\"B19/B8\"\n\"B19/C8\"\n\"D19/D8\"\n\"B11/$B$19\"\n\"D11/$D$19\"\n\"G11/$G$19\"\n\"SUM(B11:B16)\"\n\"SUM(B17:B18)\"\n\"B19+D19+G19\"\n\"SUM(B7:B14)\"\n\"B15/B4\"\n\"SUM(B7:B14)\"\n\"B15/$B$4\"\n\"SUM(G13:G38)\"\n\"SUM(G65:G114)\"\n\"SUM(G123,G126,G129,G132,G135,G138,G141,G144,G163,G166,G169,G172,G175,G178,G181,G186,G191,G193,G196,G201,G214,G217,G220,G225,G230)\"\n\"SUM(G239:G247)\"\n\"SUM(G267:G333)\"\n\"B21/B10\"\n\"B21/C10\"\n\"D21/D10\"\n\"B13/$B$21\"\n\"D13/$D$21\"\n\"G13/$G$21\"\n\"SUM(B13:B18)\"\n\"SUM(B19:B20)\"\n\"B21+D21+G21\"\n\"SUM(B9:B16)\"\n\"B17/B6\"\n\"SUM(B9:B16)\"\n\"B17/$B$6\"\n\"SUM(B7:B18)\"\n\"SUM(B7:B18)\"\n\"SUM(B7:B18)\"\n\"SUM(B7:U7)\"\n\"SUM(B6:B148)\"\n\"SUM(B7:U7)\"\n\"SUM(B6:B207)\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"+Y2/1000\"\n\"+N2+O2\"\n\"+U2/V2\"\n\"+AJ2/Y2\"\n\"+T2/D2\"\n\"+V2/D2\"\n\"+G2/D2\"\n\"SUM(G2:M2)/D2\"\n\"+L2/D2\"\n\"ROUND(W15*0.67,0)\"\n\"ROUND(W15*0.33,0)\"\n\"MAX(N2,O2)\"\n\"MAX(U2,V2)\"\n\"MAX(AH2,W2)\"\n\"MAX(T2,D2)\"\n\"MAX(V2,D2)\"\n\"MAX(G2,D2)\"\n\"MAX(G2:M2)\"\n\"+L2\"\n\"+Selection!D1\"\n\"IF(ISERR(Selection!D2),\"\"\"\",IF(ISNA(Selection!D2),\"\"\"\",Selection!F2))\"\n\"IF(ISERR(Selection!D2),\"\"\"\",IF(ISNA(Selection!D2),\"\"\"\",Selection!D2))\"\n\"IF(C2=\"\"\"\",\"\"\"\",IF(Menus!$K$10=\"\"2001 Grossed\"\",VLOOKUP(MAX(Selection!M2:N2),$N$2:$O$4,2),\"\"\"\"))\"\n\"1+A2\"\n\"IF(Menus!$J$9,OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$3)&\"\" / \"\"&OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$4),OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$3))\"\n\"OFFSET(INDIRECT(ADDRESS(1,3,3,1,Menus!$K$10)),0,Menus!J$4)\"\n\"IF(Menus!$K$5=0,\"\"(blank)\"\",Menus!$K$5)\"\n\"IF(Menus!$K$6=0,\"\"(blank)\"\",Menus!$K$6)\"\n\"IF(Menus!$K$7=0,\"\"(blank)\"\",Menus!$K$7)\"\n\"IF(Menus!$K$8=0,\"\"(blank)\"\",Menus!$K$8)\"\n\"SUM(K2:K501)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,Menus!$K$10)),0,Menus!$J$4)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,Menus!$K$10)),0,Menus!$J$3)\"\n\"IF(Menus!$J$9,C2/B2,C2)\"\n\"IF($K2=1,VALUE(B2),#N/A)\"\n\"INDIRECT(ADDRESS($A2,1,3,1,Menus!$K$10))\"\n\"IF(INDIRECT(ADDRESS($A2,2,3,1,Menus!$K$10))=G$1,$D2,#N/A)\"\n\"IF(INDIRECT(ADDRESS($A2,1,3,1,Menus!$K$10))=T(J$1),$D2,#N/A)\"\n\"IF(OR(ISNUMBER($G2),ISNUMBER($H2),ISNUMBER($I2),ISNUMBER($J2)),1,0)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,\"\"Gross\"\")),0,Menus!$J$4)\"\n\"OFFSET(INDIRECT(ADDRESS($A2,3,3,1,\"\"Gross\"\")),0,Menus!$J$3)\"\n\"TRANSPOSE(INDIRECT(ADDRESS(1,4,3,1,Menus!$K$10)):INDIRECT(ADDRESS(1,256,3,1,Menus!$K$10)))\"\n\"INDIRECT(ADDRESS($B2,1,3,1,Menus!$K$10))\"\n\"INDIRECT(ADDRESS($B2,2,3,1,Menus!$K$10))\"\n\"INDEX(F4:F54,J5)\"\n\"INDEX(F4:F54,J6)\"\n\"INDEX(F4:F54,J7)\"\n\"INDEX(C2:C501,J8)\"\n\"INDEX(N2:N51,J10)\"\n\"IF(K10=\"\"2000 Grossed\"\",\"\"Gross\"\",\"\"\"\")\"\n\"+D3+C3\"\n\"+'Material Calculator'!F7+'Material Calculator'!F16\"\n\"+'Material Calculator'!F9\"\n\"+'Material Calculator'!F11+'Material Calculator'!F12\"\n\"+'Material Calculator'!F18\"\n\"SUM(H3:H27)\"\n\"IF(B6=0,0,($B$2/(12/B6))/27)\"\n\"+E6*D6\"\n\"IF(B11=0,0,($B$2/(12/B11))/27)*C11\"\n\"+E16*B16\"\n\"SUM(F6:F18)\"\n\"COUNTIF(RawData!D5:D17,\"\"yes\"\")\"\n\"COUNTIF(RawData!D5:D17,\"\"no\"\")\"\n\"(RawData!E19)\"\n\"(RawData!F19)\"\n\"(RawData!G19)\"\n\"(RawData!H19)\"\n\"(RawData!I19)\"\n\"COUNTIF(RawData!O5:O17,\"\"Immediately\"\")\"\n\"COUNTIF(RawData!O5:O17,\"\"1Mo\"\")\"\n\"COUNTIF(RawData!O5:O17,\"\"1-3mo\"\")\"\n\"COUNTIF(RawData!O5:O17,\"\"3-6mo\"\")\"\n\"COUNTIF(RawData!O5:O17,\"\"MoreThan6Mo\"\")\"\n\"COUNTIF(RawData!Q5:Q17,\"\"OnEachPage\"\")\"\n\"COUNTIF(RawData!Q5:Q17,\"\"OnHomePage\"\")\"\n\"COUNTIF(RawData!Q5:Q17,\"\"OnGateway\"\")\"\n\"COUNTIF(RawData!Q5:Q17,\"\"NA\"\")\"\n\"(RawData!R7)\"\n\"(RawData!R9)\"\n\"(RawData!R11)\"\n\"(RawData!X7)\"\n\"(RawData!X12)\"\n\"(RawData!X14)\"\n\"(RawData!X17)\"\n\"RawData!Z7\"\n\"(RawData!Z8)\"\n\"COUNTIF(E5:E17,\"\"Students\"\")\"\n\"COUNTIF(F5:F17,\"\"Teaching Staff\"\")\"\n\"COUNTIF(G5:G17,\"\"Support Staff\"\")\"\n\"COUNTIF(H5:H17,\"\"Student Organizations\"\")\"\n\"COUNTIF(I5:I17,\"\"Group Class Projects\"\")\"\n\"SUM(G9:I9)\"\n\"bcvol!D4\"\n\"bcvol!D4\"\n\"bcvol!D4\"\n\"bcvol!D4\"\n\"origvol!D4\"\n\"D5/E5-1\"\n\"A4+1\"\n\"SUM('Table - Defoliation 2000'!C5)\"\n\"SUM('Table - Defoliation 2001'!C5)\"\n\"SUM(E4:E7)\"\n\"(E4*100)/E8\"\n\"E10*0.01\"\n\"(E5*100)/E8\"\n\"(E6*100)/E8\"\n\"(E7*100)/E8\"\n\"SUM(E10,E12,E14,E16)\"\n\"C5*100/C9\"\n\"C6*100/C9\"\n\"C8*100/C9\"\n\"SUM(C5:C8)\"\n\"C5*100/C9\"\n\"C6*100/C9\"\n\"C7*100/C9\"\n\"C8*100/C9\"\n\"SUM(C5:C8)\"\n\"C5*100/C9\"\n\"C6*100/C9\"\n\"C7*100/C9\"\n\"C8*100/C9\"\n\"SUM(C5:C8)\"\n\"C6*100/C10\"\n\"C7*100/C10\"\n\"C8*100/C10\"\n\"C9*100/C10\"\n\"SUM(C5:C9)\"\n\"SUM(E6:E9)\"\n\"I5-C5-E5\"\n\"SUM('Table - Defoliation 2000'!C6)\"\n\"SUM('Table - Defoliation 2000'!C5)\"\n\"SUM('Table - Defoliation 2000'!C7:C8)\"\n\"SUM(C15,E15,G15)\"\n\"SUM('Table - Defoliation 2001'!C6)\"\n\"SUM('Table - Defoliation 2001'!C5)\"\n\"SUM('Table - Defoliation 2001'!C7:C8)\"\n\"SUM(C6:E6)\"\n\"AVERAGE(C8:R8)\"\n\"SUM(C9:R9)\"\n\"S11/S10*100\"\n\"(C105/S105)\"\n\"(D105/S105)\"\n\"(E105/S105)\"\n\"(F105/S105)\"\n\"(G105/S105)\"\n\"(H105/S105)\"\n\"(I105/S105)\"\n\"J105/S105\"\n\"(K105/S105)\"\n\"(L105/S105)\"\n\"(M105/S105)\"\n\"(N105/S105)\"\n\"(O105/S105)\"\n\"(P105/S105)\"\n\"(Q105/S105)\"\n\"(R105/S105)\"\n\"(C107-C105)/C105\"\n\"(C109-C107)/C107\"\n\"C107/C112\"\n\"(C113-C114)/C114\"\n\"C2&\"\" (\"\"&D2&\"\") \"\"&E2&\"\". \"\"&F2&\"\", \"\"&G3&\"\", \"\"&H2&\"\".\"\"\"\n\"C5&\"\" (\"\"&D5&\"\") \"\"&E5&\"\". \"\"&F5&\"\", \"\"&G7&\"\", \"\"&H5&\"\".\"\"\"\n\"C6&\"\" (\"\"&D6&\"\") \"\"&E6&\"\". \"\"&F6&\"\", \"\"&G12&\"\", \"\"&H6&\"\".\"\"\"\n\"C12&\"\" (\"\"&D12&\"\") \"\"&E12&\"\". \"\"&F12&\"\", \"\"&G21&\"\", \"\"&H12&\"\".\"\"\"\n\"C21&\"\" (\"\"&D21&\"\") \"\"&E21&\"\". \"\"&F21&\"\", \"\"&G34&\"\", \"\"&H21&\"\".\"\"\"\n\"SUM(B10,D10)\"\n\"SUM(C7:C36)\"\n\"SUM(AG9:AN9)\"\n\"SUM(AO9:AO10)\"\n\"SUM(T9:T11)\"\n\"+T9-AU9\"\n\"+AU24+AU23\"\n\"+T17-AU23\"\n\"+T19+AG33+AG27-AG18\"\n\"+C32+C23\"\n\"SUM(C40:C49)\"\n\"+C34+C50\"\n\"SUM(C7:C22)\"\n\"+C32+C23\"\n\"SUM(C40:C49)\"\n\"+C34+C50\"\n\"SUM(C7:C22)\"\n\"+C32+C23\"\n\"SUM(C40:C49)\"\n\"+C34+C50\"\n\"SUM(C7:C22)\"\n\"+C32+C23\"\n\"SUM(C40:C49)\"\n\"+C34+C50\"\n\"AVERAGE(B6:B338)\"\n\"AVERAGE(C6:C81)\"\n\"AVERAGE(D6:D32)\"\n\"AVERAGE(E6:E12)\"\n\"AVERAGE(F6:F9)\"\n\"1.34*(Q13^0.5)\"\n\"2*PI()*(((S13^1.744/35.5)/(0.04*32.2*Q13*64*(0.82*R13)^3))^0.5)\"\n\"SUM(B16:K16)\"\n\"R18+R21+R24+R27+R30+R33+R36\"\n\"B56\"\n\"B72\"\n\"B93\"\n\"B112\"\n\"B116\"\n\"B137\"\n\"B141\"\n\"B170\"\n\"B205\"\n\"B230\"\n\"AVERAGE(B18:K18)\"\n\"T13/(S13/64)^0.666\"\n\"ABS(N18-P18)/N18\"\n\"B122\"\n\"B148\"\n\"C56\"\n\"C72\"\n\"C93\"\n\"C112\"\n\"C121\"\n\"C137\"\n\"C147\"\n\"C170\"\n\"C205\"\n\"C230\"\n\"(S13/2240)/(0.01*Q13)^3\"\n\"D56\"\n\"D72\"\n\"D93\"\n\"D112\"\n\"D121\"\n\"D137\"\n\"D147\"\n\"D170\"\n\"D205\"\n\"D230\"\n\"S13/(0.65*(0.7*Q13+0.3*P13)*R13^1.33)\"\n\"E56\"\n\"E72\"\n\"E93\"\n\"E112\"\n\"E121\"\n\"E137\"\n\"E147\"\n\"E170\"\n\"E205\"\n\"E230\"\n\"R13/(S13/(0.9*64))^0.333\"\n\"F56\"\n\"F72\"\n\"F93\"\n\"F112\"\n\"F121\"\n\"F137\"\n\"F147\"\n\"F170\"\n\"F205\"\n\"F230\"\n\"(1.88*Q13^0.5*T13^0.333/S13^0.25)/U13\"\n\"G56\"\n\"G72\"\n\"G93\"\n\"G112\"\n\"G121\"\n\"G137\"\n\"G147\"\n\"G170\"\n\"G205\"\n\"G230\"\n\"P13/R13\"\n\"H56\"\n\"H72\"\n\"H93\"\n\"H112\"\n\"H121\"\n\"H137\"\n\"H147\"\n\"H170\"\n\"H205\"\n\"H230\"\n\"(((2*3.14)/V13)^2*((R13/2)-1.5)*(10*3.14/180)/32.2)\"\n\"AVERAGE(B42:B55)\"\n\"STDEV(B42:B55)\"\n\"AVERAGE(B60:B71)\"\n\"STDEV(B60:B71)\"\n\"AVERAGE(B76:B92)\"\n\"STDEV(B76:B92)\"\n\"AVERAGE(B97:B111)\"\n\"STDEV(B97:B111)\"\n\"AVERAGE(B116:B120)\"\n\"STDEV(B116:B120)\"\n\"AVERAGE(B141:B146)\"\n\"STDEV(B141:B146)\"\n\"AVERAGE(B151:B169)\"\n\"STDEV(B151:B169)\"\n\"AVERAGE(B174:B204)\"\n\"STDEV(B174:B204)\"\n\"AVERAGE(B210:B229)\"\n\"STDEV(B210:B229)\"\n\"INPUTS!I4\"\n\"INPUTS!D11\"\n\"NOW()\"\n\"AI2\"\n\"AK13\"\n\"AK34\"\n\"AK27\"\n\"AK20\"\n\"AK41\"\n\"AK55\"\n\"AK48\"\n\"INPUTS!C22\"\n\"MIN(W8,Z8,Y8,X8,AA8,AC8,AB8)\"\n\"L8/(J8/64)^0.666\"\n\"(J8/2240)/(0.01*E8)^3\"\n\"J8/(0.65*(0.7*E8+0.3*D8)*F8^1.33)\"\n\"F8/(J8/(0.9*64))^0.333\"\n\"(1.88*E8^0.5*L8^0.333/J8^0.25)/T8\"\n\"D8/F8\"\n\"(((2*3.14)/U8)^2*((F8/2)-1.5)*(10*3.14/180)/32.2)\"\n\"1.34*(E8^0.5)\"\n\"2*PI()*(((J8^1.744/35.5)/(0.04*32.2*E8*64*(0.82*F8)^3))^0.5)\"\n\"U8*(32.2/F8)^0.5\"\n\"sddoc(M8,AJ$15,AJ$16,AJ$17,AJ$18)\"\n\"dldoc(N8,AJ$36,AJ$37,AJ$38,AJ$39)\"\n\"cfdoc(O8,AJ$29,AJ$30,AJ$31,AJ$32)\"\n\"crdoc(P8,AJ$24,AJ$25)\"\n\"vmvhdoc(Q8,AJ$43,AJ$44,AJ$45,AJ$46)\"\n\"lbdoc(R8,AJ$57,AJ$58,AJ$59,AJ$60)\"\n\"aceldoc(S8,AJ$52,AJ$53)\"\n\"C8\"\n\"OFFSET(M$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N19\"\n\"AK13-3*AL13*INPUTS!$C$24\"\n\"AK13-AL13*INPUTS!$C$24\"\n\"AK13+AL13*INPUTS!$C$24\"\n\"AK13+3*AL13*INPUTS!$C$24\"\n\"OFFSET(P$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N28\"\n\"AK20+INPUTS!$C$24*$AL$20\"\n\"AK20+3*INPUTS!$C$24*$AL$20\"\n\"OFFSET(O$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N25\"\n\"AK27-3*$AL$27*INPUTS!$C$24\"\n\"AK27-$AL$27*INPUTS!$C$24\"\n\"AK27+$AL$27*INPUTS!$C$24\"\n\"AK27+3*$AL$27*INPUTS!$C$24\"\n\"OFFSET(N$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N22\"\n\"AK34-3*$AL$34*INPUTS!$C$24\"\n\"AK34-$AL$34*INPUTS!$C$24\"\n\"AK34+$AL$34*INPUTS!$C$24\"\n\"AK34+3*$AL$34*INPUTS!$C$24\"\n\"OFFSET(Q$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N31\"\n\"AK41-3*$AL$41*INPUTS!$C$24\"\n\"AK41-$AL$41*INPUTS!$C$24\"\n\"AK41+$AL$41*INPUTS!$C$24\"\n\"AK41+3*$AL$41*INPUTS!$C$24\"\n\"OFFSET(S$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N37\"\n\"AK48+$AL$48*INPUTS!$C$24\"\n\"AK48+3*$AL$48*INPUTS!$C$24\"\n\"OFFSET(R$7,$AO$2+1,0)\"\n\"'OPTIMAL VALUES'!N34\"\n\"AK55-3*$AL$55*INPUTS!$C$24\"\n\"AK55-$AL$55*INPUTS!$C$24\"\n\"AK55+$AL$55*INPUTS!$C$24\"\n\"AK55+3*$AL$55*INPUTS!$C$24\"\n\"13.25*3.2808\"\n\"11.35*3.2808\"\n\"4.4*3.2808\"\n\"2.25*3.2808\"\n\"(13.25+0.7)*3.2808\"\n\"(11.35+0.35)*3.2808\"\n\"25352+500\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,0)\"\n\"D8\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,1)\"\n\"$D$11+8\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,3)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,4)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,5)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,9)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,11)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,12)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,15)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,14)\"\n\"IF(C22=\"\"very close\"\",1,IF(C22=\"\"close\"\",2,IF(C22=\"\"somewhat close\"\",3)))\"\n\"(C23/6)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,13)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,16)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,18)\"\n\"OFFSET('DATA BASE'!$A$1,$D$8-1,17)\"\n\"SUM(B11:B199)\"\n\"250*C4\"\n\"200*C6\"\n\"300*C85\"\n\"('Library Standards Outline'!$J$6)\"\n\"IF('Library Standards Profile'!$B$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$19)\"\n\"IF(OR('Library Standards Profile'!$B$90=\"\"X\"\",'Library Standards Profile'!$B$130=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$E$90=\"\"X\"\",'Library Standards Profile'!$E$130=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$H$90=\"\"X\"\",'Library Standards Profile'!$H$130=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$K$90=\"\"X\"\",'Library Standards Profile'!$K$130=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$B$108=\"\"X\"\",'Library Standards Profile'!$B$146=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$E$108=\"\"X\"\",'Library Standards Profile'!$E$146=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$H$108=\"\"X\"\",'Library Standards Profile'!$H$146=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"IF(OR('Library Standards Profile'!$K$108=\"\"X\"\",'Library Standards Profile'!$K$146=\"\"X\"\"),\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$30)\"\n\"IF('Library Standards Profile'!$B$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$54)\"\n\"IF('Library Standards Profile'!$B$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$79)\"\n\"IF('Library Standards Profile'!$B$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"AVERAGE(J6,J19,J30,J54,J79)\"\n\"SUM(E8:H11)\"\n\"IF('Library Standards Tally'!$E$8=\"\"X\"\",0.25*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$8=\"\"X\"\",0.25*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$8=\"\"X\"\",0.25*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$8=\"\"X\"\",0.25*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$9=\"\"X\"\",0.25*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$9=\"\"X\"\",0.25*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$9=\"\"X\"\",0.25*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$9=\"\"X\"\",0.25*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$10=\"\"X\"\",0.25*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$10=\"\"X\"\",0.25*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$10=\"\"X\"\",0.25*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$10=\"\"X\"\",0.25*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$11=\"\"X\"\",0.25*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$11=\"\"X\"\",0.25*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$11=\"\"X\"\",0.25*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$11=\"\"X\"\",0.25*0.65,\"\" \"\")\"\n\"SUM(E21:H22)\"\n\"IF('Library Standards Tally'!$E$21=\"\"X\"\",0.5*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$21=\"\"X\"\",0.5*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$21=\"\"X\"\",0.5*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$21=\"\"X\"\",0.5*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$22=\"\"X\"\",0.5*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$22=\"\"X\"\",0.5*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$22=\"\"X\"\",0.5*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$22=\"\"X\"\",0.5*0.65,\"\" \"\")\"\n\"SUM(E32:H37)\"\n\"IF('Library Standards Tally'!$E$32=\"\"X\"\",0.6*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$32=\"\"X\"\",0.6*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$32=\"\"X\"\",0.6*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$32=\"\"X\"\",0.6*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$33=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$33=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$33=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$33=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$35=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$35=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$35=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$35=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$36=\"\"X\"\",0.15*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$36=\"\"X\"\",0.15*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$36=\"\"X\"\",0.15*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$36=\"\"X\"\",0.15*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$37=\"\"X\"\",0.05*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$37=\"\"X\"\",0.05*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$37=\"\"X\"\",0.05*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$37=\"\"X\"\",0.05*0.65,\"\" \"\")\"\n\"SUM(E57:H72)\"\n\"IF('Library Standards Tally'!$E$57=\"\"X\"\",0.3*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$57=\"\"X\"\",0.3*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$57=\"\"X\"\",0.3*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$57=\"\"X\"\",0.3*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$58=\"\"X\"\",0.3*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$58=\"\"X\"\",0.3*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$58=\"\"X\"\",0.3*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$58=\"\"X\"\",0.3*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$67=\"\"X\"\",0.16*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$67=\"\"X\"\",0.16*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$67=\"\"X\"\",0.16*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$67=\"\"X\"\",0.16*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$68=\"\"X\"\",0.18*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$68=\"\"X\"\",0.18*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$68=\"\"X\"\",0.18*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$68=\"\"X\"\",0.18*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$70=\"\"X\"\",0.03*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$70=\"\"X\"\",0.03*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$70=\"\"X\"\",0.03*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$70=\"\"X\"\",0.03*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$71=\"\"X\"\",0.02*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$71=\"\"X\"\",0.02*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$71=\"\"X\"\",0.02*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$71=\"\"X\"\",0.02*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$72=\"\"X\"\",0.01*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$72=\"\"X\"\",0.01*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$72=\"\"X\"\",0.01*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$72=\"\"X\"\",0.01*0.65,\"\" \"\")\"\n\"SUM(E81:H89)\"\n\"IF('Library Standards Tally'!$E$81=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$81=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$81=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$81=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$82=\"\"X\"\",0.15*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$82=\"\"X\"\",0.15*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$82=\"\"X\"\",0.15*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$82=\"\"X\"\",0.15*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$83=\"\"X\"\",0.15*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$83=\"\"X\"\",0.15*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$83=\"\"X\"\",0.15*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$83=\"\"X\"\",0.15*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$84=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$84=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$84=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$84=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$85=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$85=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$85=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$85=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$86=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$86=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$86=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$86=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$87=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$87=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$87=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$87=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$88=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$88=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$88=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$88=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"IF('Library Standards Tally'!$E$89=\"\"X\"\",0.1*0.95,\"\" \"\")\"\n\"IF('Library Standards Tally'!$F$89=\"\"X\"\",0.1*0.85,\"\" \"\")\"\n\"IF('Library Standards Tally'!$G$89=\"\"X\"\",0.1*0.75,\"\" \"\")\"\n\"IF('Library Standards Tally'!$H$89=\"\"X\"\",0.1*0.65,\"\" \"\")\"\n\"AVERAGE(J6,J19,J30,J54,J79)\"\n\"('Library Standards Outline'!$J$6)\"\n\"IF('Library Standards Profile'!$B$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$10=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$20=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$26=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$33=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$19)\"\n\"IF('Library Standards Profile'!$B$90=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$90=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$90=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$90=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$108=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$108=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$108=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$108=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$30)\"\n\"IF('Library Standards Profile'!$B$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$211=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$218=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$225=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$232=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$237=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$54)\"\n\"IF('Library Standards Profile'!$B$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$292=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$312=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$413=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$418=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$427=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$432=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$437=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"('Library Standards Outline'!$J$79)\"\n\"IF('Library Standards Profile'!$B$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$492=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$502=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$513=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$521=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$532=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$542=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$549=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$554=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$B$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$E$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$H$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"IF('Library Standards Profile'!$K$573=\"\"X\"\",\"\"X\"\",\"\" \"\")\"\n\"AVERAGE(J6,J20,J32,J56,J85)\"\n\"SUM(G10:G13)\"\n\"SUM(G9)\"\n\"SUM(G10,G15,G20,G25,G30,G35,G40,G45,G50,G55,G60,G65,G70,G75,G80,G85,G90,G95,G100,G105,G110,G115,G120,G125,G130,G135,G140,G145,G150,G155)\"\n\"SUM(G161:G165)\"\n\"B14+(B14*0.02)\"\n\"SUM(B14:B67)\"\n\"SUM(B68:H68)\"\n\"B5+(B5*0.02)\"\n\"K5+(K5*0.023)\"\n\"SUM(E5:E58)\"\n\"B7+(B7*0.02)\"\n\"K7+(K7*0.023)\"\n\"SUM(E7:E60)\"\n\"B6+(B6*0.02)\"\n\"K6+(K6*0.023)\"\n\"SUM(B6:B59)\"\n\"SUM(B60:T60)\"\n\"NOW()\"\n\"NOW()\"\n\"SUM(B9+D9+F9+H9+J9+L9)\"\n\"SUM(B9:B15)\"\n\"SUM(B18:B19)\"\n\"SUM(B16+B20)\"\n\"EXIS!N2\"\n\"EXIS!A2\"\n\"SUM(B8+D8+F8+H8+J8+L8)\"\n\"SUM(C13:C17)\"\n\"SUM(B8:B21)\"\n\"SUM(C8:C11)+C18+C19+C20+C21\"\n\"SUM(L8)\"\n\"SUM(M8:M11)+M18+M19+M21\"\n\"SUM(B24:B31)\"\n\"SUM(B22+B32)\"\n\"SUM(B35:B36)\"\n\"SUM(B37+B40)\"\n\"SUM(C40+C37)\"\n\"SUM(B33+B41)\"\n\"EXIS!N2\"\n\"EXIS!A2\"\n\"SUM(B8+D8+F8+H8+J8+L8)\"\n\"SUM(C13:C17)\"\n\"SUM(B8:B21)\"\n\"SUM(C8:C11)+C18+C19+C20+C21\"\n\"SUM(L8)\"\n\"SUM(M8:M11)+M18+M19+M21\"\n\"SUM(B24:B31)\"\n\"SUM(B22+B32)\"\n\"SUM(B35:B36)\"\n\"SUM(B37+B40)\"\n\"SUM(C40+C37)\"\n\"SUM(B33+B41)\"\n\"EXIS!N2\"\n\"EXIS!A2\"\n\"SUM(B8+D8+F8+H8+J8+L8)\"\n\"SUM(C13:C17)\"\n\"SUM(B8:B21)\"\n\"SUM(C8:C11)+C18+C19+C20+C21\"\n\"SUM(L8)\"\n\"SUM(M8:M11)+M18+M19+M21\"\n\"SUM(B24:B31)\"\n\"SUM(B22+B32)\"\n\"SUM(B35:B36)\"\n\"SUM(B37+B40)\"\n\"SUM(C40+C37)\"\n\"SUM(B33+B41)\"\n\"EXIS!N2\"\n\"EXIS!A2\"\n\"EXIS!E2\"\n\"EXIS!E2\"\n\"EXIS!E2\"\n\"EXIS!E2\"\n\"EXIS!B16\"\n\"EXIS!B20\"\n\"EXIS!B22\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!E1\"\n\"'ALT(P)'!B33\"\n\"'ALT(P)'!B41\"\n\"SUM(N13:N14)\"\n\"SUM(B10-B15)\"\n\"'ALT(P)'!C43\"\n\"SUM(B16)\"\n\"SUM(C16+C17)\"\n\"B18\"\n\"B19+D18\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!D1\"\n\"'ALT (1)'!B33\"\n\"'ALT (1)'!B41\"\n\"SUM(B10-B24)\"\n\"'ALT (1)'!C43\"\n\"SUM(C26+E26+G26+I26+K26+M26)\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!D1\"\n\"'ALT (2)'!B33\"\n\"'ALT (2)'!B40\"\n\"'ALT (2)'!C41\"\n\"SUM(B10-B33)\"\n\"EXIS!A2\"\n\"'ALT(P)'!B33\"\n\"B7+D7+F7+H7+J7+L7\"\n\"SUM(B9:B12)\"\n\"377650+2500\"\n\"9500\"\n\"9250\"\n\"SUM(B15+B16)\"\n\"SUM(L15:L16)\"\n\"SUM(B13+B17)\"\n\"SUM(B18+D18+F18+H18+J18+L18)\"\n\"SUM(B18-B7)\"\n\"EXIS!A2\"\n\"SUM(B45)\"\n\"SUM(B15)\"\n\"SUM(D15-B15)\"\n\"SUM(B16)\"\n\"SUM(D16-B16)\"\n\"SUM(B44+B48)\"\n\"SUM(N45+N49)\"\n\"SUM(B21)\"\n\"SUM(D21-B21)\"\n\"'ALT(P)'!C43\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P045644\"\",\"\"Post Conflict Social Recovery Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P056393\"\",\"\"Social Action Fund Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P000061\"\",\"\"Social Action Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P070204\"\",\"\"Labor Force Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P000117\"\",\"\"Transport Sector Investment Program Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064510\"\",\"\"Social Action Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P071371\"\",\"\"Multisectoral HIV/AIDS Control and Orphans Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064961\"\",\"\"Public Works and Employment Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P048204\"\",\"\"Petroleum Environment Capacity Enhancement Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P000432\"\",\"\"Social Sector Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P040990\"\",\"\"Energy and Water Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P048202\"\",\"\"Petroleum Sector Management Capacity Building Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P039264\"\",\"\"Community Development Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P068463\"\",\"\"Integrated Early Childhood Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P000771\"\",\"\"Social Rehabilitation and Development Fund Project \"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050342\"\",\"\"Women's Development Initiatives Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P040659\"\",\"\"Community Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P058050\"\",\"\"Community Development Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P035669\"\",\"\"Social Fund Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064305\"\",\"\"Social Fund Project (03)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P001568\"\",\"\"Community Nutrition Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055166\"\",\"\"Community Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P052208\"\",\"\"Transport Sector Reform and Rehabilitation Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P049599\"\",\"\"Social Action Fund Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P001668\"\",\"\"Social Action Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P035617\"\",\"\"Grassroots Initiative to Fight Hunger and Poverty Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P041723\"\",\"\"National Rural Infrastructure Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055003\"\",\"\"Nutrition, Food Security and Social Mobilization Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P051931\"\",\"\"Community Reintegration and Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P041566\"\",\"\"Social Development Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P040649\"\",\"\"Community Reintegration and Rehabilitation Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P065372\"\",\"\"Social Action Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P040551\"\",\"\"Nutrition and Early Childhood Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P063584\"\",\"\"Social Investment Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P003210\"\",\"\"Social Recovery (02) Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050400\"\",\"\"Public Service Capacity Building Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P003227\"\",\"\"Railway Restructuring Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P045031\"\",\"\"Community Action Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050601\"\",\"\"Social Fund Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P003603\"\",\"\"Enterprise Housing and Social Security Reform Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P003639\"\",\"\"Southwest Poverty Reduction Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P056521\"\",\"\"Structural Adjustment Loan Project (02) (Second Series)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P004207\"\",\"\"Luang Namtha Provincial Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P065884\"\",\"\"Social Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P060943\"\",\"\"Social Sector Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P036417\"\",\"\"Poverty Alleviation for Vulnerable Groups Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P051386\"\",\"\"Szopad Social Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P065113\"\",\"\"Social Expenditure Management Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P056269\"\",\"\"Social Investment Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P042568\"\",\"\"Coastal Wetlands Protection and Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P051309\"\",\"\"Community Works Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055383\"\",\"\"Social Service Delivery Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069935\"\",\"\"Poverty Reduction Strategy Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P057952\"\",\"\"Social Investment Fund Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P065504\"\",\"\"Pilot Reconstruction Project (Supplemental Credit)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P070146\"\",\"\"Pilot Emergency Labor Redeployment Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069058\"\",\"\"Social Sector Adjustment Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064536\"\",\"\"Child Welfare Reform Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055156\"\",\"\"Regional Initiatives Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P008417\"\",\"\"Municipal Infrastructure Rehabilitation Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P039929\"\",\"\"Social Investment Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P052154\"\",\"\"Structural Reform Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P038569\"\",\"\"Social Sector Adjustment Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069814\"\",\"\"Technical Assistance Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P035810\"\",\"\"Consolidation Structural Adjustment Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P035807\"\",\"\"Welfare Reform Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P008530\"\",\"\"Riga and Daugavpils District Heating Rehabilitation Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P066153\"\",\"\"Programmatic Structural Adjustment Loan Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P074410\"\",\"\"Housing Project - Phase I (LIL) Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P008539\"\",\"\"Social Policy & Community Social Services Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P066221\"\",\"\"Social Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P044840\"\",\"\"Social Investment Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P058202\"\",\"\"Rural Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P049200\"\",\"\"Social Development Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P008783\"\",\"\"Social Sector Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055495\"\",\"\"Child Welfare Reform Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P035761\"\",\"\"Community Social Infrastructure Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064238\"\",\"\"Northern Out - Mitigration Pilot Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P009102\"\",\"\"Privatization Implementation Assistance and Social Safety Net Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P074408\"\",\"\"Social Risk Mitigation Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069894\"\",\"\"Privatization Social Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055739\"\",\"\"Kiev Public Buildings Energy Efficiency Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P044110\"\",\"\"Coal Pilot Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P055738\"\",\"\"Sevastopol Heat Supply Improvement Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P049268\"\",\"\"Social Protection Project (02) - TRABAJAR\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P049269\"\",\"\"Social Protection Project (03)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P006058\"\",\"\"Social Protection Project (04)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P057473\"\",\"\"Indigenous Protected Areas Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P057459\"\",\"\"Sustainable Fisheries Management Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P059566\"\",\"\"CEARA Basic Education Quality Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P039199\"\",\"\"Low Income Sanitation Technical Assistance Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050763\"\",\"\"School Improvement Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P057910\"\",\"\"State Pension Systems Reform Technical Assistance Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P068762\"\",\"\"Community Works and Employment Project - Manos a la Obra; Proyectos Comunitarios\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P065263\"\",\"\"Earthquake Recovery Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050578\"\",\"\"Rural Education Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050576\"\",\"\"Youth Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069964\"\",\"\"Human Capital Protection Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P048651\"\",\"\"Social Investment Fund Project (04)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064895\"\",\"\"Social Investment Fund Project (05)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P067774\"\",\"\"Social Safety Net Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P056087\"\",\"\"Pension and Financial Market Reform Technical Assistance Credit Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P064906\"\",\"\"Poverty Reduction and Local Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P060499\"\",\"\"Indigenous and Afro-Peruvian Peoples Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P054939\"\",\"\"Poverty Reduction Fund Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069947\"\",\"\"Ain Temouchent Emergency Earthquake Recovery Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P004978\"\",\"\"Social Safety Net Support Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P056419\"\",\"\"Ex-Combatants Reintegration Pilot Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P044584\"\",\"\"Social Development and Public Works Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P052705\"\",\"\"Social Fund for Development Project (03)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P066336\"\",\"\"Social Protection Initiatives Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P040858\"\",\"\"Sohag Rural Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P069943\"\",\"\"Primary Health Care and Nutrition Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P005501\"\",\"\"Social Priorities Program - Basic Education Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P047067\"\",\"\"NGO Trust Fund for the West Bank & Gaza Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P071040\"\",\"\"Palestinian NGO (02) Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P050483\"\",\"\"Child Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P068830\"\",\"\"Social Fund for Development Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P041199\"\",\"\"Social Fund for Development Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P009518\"\",\"\"Rural Roads and Markets Improvement and Maintenance Project (02)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P038021\"\",\"\"District Primary Education Project (03)\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P059242\"\",\"\"Madhya Pradesh District Poverty Initiatives Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P044449\"\",\"\"Rural Women's Development and Empowerment Project\"\")\"\n\"HYPERLINK(\"\"http://www4.worldbank.org/sprojects/Project.asp?pid=P043310\"\",\"\"Coal Sector Environmental and Social Mitigation Project\"\")\"\n\"A3+1\"\n\"A2+1\"\n\"755+733+755+755+795\"\n\"835+871+906+933+1000\"\n\"1049+1080+1155+1204+1249\"\n\"1280+1285+1250+1245+1252\"\n\"1273+1233+1177+1111+996\"\n\"946+964+962+972+959\"\n\"962+985+1031+1121+1170\"\n\"1239+1300+1387+1552+1682\"\n\"B4:B180+C4:C180+D4:D180\"\n\"SUM(B4:B180)\"\n\"SUM(B181:D181)\"\n\"B181/E181*100\"\n\"C181/E181*100\"\n\"D181/E181*100\"\n\"SUM(B134:B180)\"\n\"VLOOKUP(speed,speedTable,2,0)\"\n\"SUM(B3:B4)\"\n\"SUM(B8:B19)\"\n\"SUM(B23:B26)\"\n\"B5+B20+B27\"\n\"(B19/10)+(SUM(B8:B18))+B5+B27\"\n\"SUM(B9:B19)\"\n\"SUM(B6:B7)\"\n\"SUM(C12:C14)\"\n\"SUM(C19:C26)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E11:E12)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E14:E16)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E23:E24)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E26:E28)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E36:E42)\"\n\"SUM('3. STEAM SYSTEM PROFILING'!E44:E48)\"\n\"SUM($B$10:$B$17)\"\n\"SUM($C$10:$C$17)\"\n\"SUM('4. SSOP-Total Steam System'!E12:E15)\"\n\"SUM('4. SSOP-Total Steam System'!E23:E25)\"\n\"SUM('4. SSOP-Total Steam System'!E27:E29)\"\n\"SUM('4. SSOP-Total Steam System'!E31:E33)\"\n\"SUM('4. SSOP-Total Steam System'!E40:E41)\"\n\"SUM('4. SSOP-Total Steam System'!E43:E44)\"\n\"SUM('4. SSOP-Total Steam System'!E51:E53)\"\n\"SUM('4. SSOP-Total Steam System'!E60:E62)\"\n\"SUM('4. SSOP-Total Steam System'!E70:E74)\"\n\"SUM($B$23:$B$36)\"\n\"SUM($C$23:$C$36)\"\n\"SUM('5. SSOP-Boiler Plant'!E11:E13)\"\n\"SUM('5. SSOP-Boiler Plant'!E16:E19)\"\n\"SUM('5. SSOP-Boiler Plant'!E21:E23)\"\n\"SUM('5. SSOP-Boiler Plant'!E31:E33)\"\n\"SUM('5. SSOP-Boiler Plant'!E40:E42)\"\n\"SUM('5. SSOP-Boiler Plant'!E49:E50)\"\n\"SUM('5. SSOP-Boiler Plant'!E52:E54)\"\n\"SUM('5. SSOP-Boiler Plant'!E56:E58)\"\n\"SUM($B$42:$B$52)\"\n\"SUM($C$42:$C$52)\"\n\"SUM('6. SSOP-Dist, End Use, Recovery'!E11:E12)\"\n\"SUM('6. SSOP-Dist, End Use, Recovery'!E20:E22)\"\n\"SUM('6. SSOP-Dist, End Use, Recovery'!E29:E31)\"\n\"SUM($B$58:$B$62)\"\n\"SUM($C$58:$C$62)\"\n\"SUM(B71:B74)\"\n\"C76/B76\"\n\"MDTS!C175\"\n\"COUNTIF(MDTS!C5:C22, \"\"*\"\")\"\n\"COUNTIF(MDTS!C$130:C$172, \"\"*\"\")\"\n\"COUNTIF(MDTS!N5, \"\"*migrat*\"\")\"\n\"MDTS!D175\"\n\"COUNTIF(MDTS!D5:D22, \"\"*\"\")\"\n\"COUNTIF(MDTS!D$130:D$172, \"\"*\"\")\"\n\"MDTS!E175\"\n\"COUNTIF(MDTS!E5:E22, \"\"*\"\")\"\n\"COUNTIF(MDTS!E$130:E$172, \"\"*\"\")\"\n\"MDTS!F175\"\n\"COUNTIF(MDTS!F$130:F$172, \"\"*\"\")\"\n\"MDTS!G175\"\n\"COUNTIF(MDTS!G$5:G$22, \"\"*\"\")\"\n\"COUNTIF(MDTS!G$130:G$172, \"\"*\"\")\"\n\"MDTS!H175\"\n\"COUNTIF(MDTS!H$5:H$22, \"\"*\"\")\"\n\"COUNTIF(MDTS!H$130:H$172, \"\"*\"\")\"\n\"MDTS!I175\"\n\"COUNTIF(MDTS!I$5:I$22, \"\"*\"\")\"\n\"COUNTIF(MDTS!I$130:I$172, \"\"*\"\")\"\n\"COUNTIF(C5:C172, \"\"*\"\")\"\n\"B179-L177\"\n\"COUNTIF(B5:B22, \"\"*\"\")\"\n\"SUM(L178:L182)\"\n\"COUNTIF(B24:B60, \"\"*\"\")\"\n\"COUNTIF($L$62:$L$128, \"\"*WAIVED* NETWORK*\"\")-1-1-1-1-1\"\n\"COUNTIF(B62:B128, \"\"*\"\")\"\n\"COUNTIF($L$62:$L$128, \"\"*WAIVED* SYSTEM*\"\")-1-1-1\"\n\"COUNTIF(B130:B172, \"\"*\"\")\"\n\"COUNTIF($L$62:$L$128, \"\"*MIGRATED*\"\")\"\n\"SUM(B177:B181)\"\n\"COUNTIF($L$62:$L$128, \"\"*MIGRATING*\"\")\"\n\"SUM(B177:B179)\"\n\"DSUM(_xlnm.Database,\"\"Units\"\",_xlnm.Criteria)\"\n\"DSUM(_xlnm.Database,\"\"Revenue\"\",_xlnm.Criteria)\"\n\"E5*3.75\"\n\"E6*2.3\"\n\"SUM(K5:K7)\"\n\"E9*21\"\n\"E11*1.15\"\n\"SUBTOTAL(3,B4:B8)\"\n\"SUBTOTAL(3,B22:B25)\"\n\"SUBTOTAL(3,B52:B54)\"\n\"SUBTOTAL(3,B108:B109)\"\n\"SUBTOTAL(3,B249:B249)\"\n\"SUBTOTAL(3,B4:B1247)\"\n\"IF(C6=\"\"yes\"\",(1*F6),IF(C6=\"\"no\"\",(0*F6),\"\"\"\"))\"\n\"IF(SUM(F6:F10)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G6:G10)\"\n\"IF(SUM(F16:F22)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G16:G22)\"\n\"IF(C41=\"\"yes\"\",(1*F41),IF(C41=\"\"no\"\",(0*F41),IF(C41=\"\"small extent\"\",(0.33*F41),IF(C41=\"\"large extent\"\",(0.67*F41),\"\"\"\"))))\"\n\"IF((F55+F54+F53+F45+F41)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"G55+G54+G53+G45+G41\"\n\"D3/16\"\n\"G3/26\"\n\"D3+G3\"\n\"J3/42\"\n\"M3/39\"\n\"P3/23\"\n\"S3/10\"\n\"V3/33\"\n\"D3+S3+G3+M3+P3\"\n\"Y3/114\"\n\"[1]Sheet1!$B7\"\n\"ROUND([1]Sheet1!$D7*1.22*1.25,0)\"\n\"F13*1.02*0.7\"\n\"[1]Sheet1!$B$12\"\n\"[1]Sheet1!$B17\"\n\"ROUND([1]Sheet1!$D17*1.22*1.25,0)\"\n\"[1]Sheet1!$B$21\"\n\"[1]Sheet1!$B$34\"\n\"[1]Sheet1!$B$42\"\n\"ROUND([1]Sheet1!$D42*1.22*1.25,0)\"\n\"[1]Sheet1!$B7\"\n\"ROUND([1]Sheet1!$E7*1.22*1.25,0)\"\n\"[1]Sheet1!$B13\"\n\"ROUND([1]Sheet1!$E13*1.22*1.25,0)\"\n\"[1]Sheet1!$B17\"\n\"ROUND([1]Sheet1!$E17*1.22*1.25,0)\"\n\"[1]Sheet1!$B36\"\n\"ROUND([1]Sheet1!$E36*1.22*1.25,0)\"\n\"F68\"\n\"H68*1.02\"\n\"[1]Sheet1!$A75\"\n\"[1]Sheet1!$B75\"\n\"[1]Sheet1!$B81\"\n\"[1]Sheet1!$B$44\"\n\"[1]Sheet1!$B46\"\n\"ROUND([1]Sheet1!$D46*1.22*1.25,0)\"\n\"F13*1.02*0.7\"\n\"[1]Sheet1!$B$49\"\n\"[1]Sheet1!$B$54\"\n\"[1]Sheet1!$B$56\"\n\"[1]Sheet1!$B46\"\n\"ROUND([1]Sheet1!$E46*1.22*1.25,0)\"\n\"ROUND([1]Sheet1!$E56*1.22*1.25,0)\"\n\"adatbáziskezelők!F68\"\n\"H41\"\n\"J41*1.02\"\n\"[1]Sheet1!$A$75\"\n\"[1]Sheet1!$B$75\"\n\"[1]Sheet1!$A$77\"\n\"[1]Sheet1!$B$77\"\n\"adatbáziskezelők!A76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"adatbáziskezelők!B76\"\n\"[1]Sheet1!$B$58\"\n\"[1]Sheet1!$B60\"\n\"ROUND([1]Sheet1!$D60*1.22*1.25,0)\"\n\"F13*1.02*0.7\"\n\"F20\"\n\"H20*1.02\"\n\"adatbáziskezelők!F68\"\n\"[1]Sheet1!$B$27\"\n\"[1]Sheet1!$B30\"\n\"ROUND([1]Sheet1!$D30*1.22*1.25,0)\"\n\"F13*1.02*0.7\"\n\"[1]Sheet1!$B29\"\n\"ROUND([1]Sheet1!$E29*1.22*1.25,0)\"\n\"[1]Sheet1!$B$12\"\n\"[1]Sheet1!$B16\"\n\"ROUND([1]Sheet1!$D16*1.22*1.25,0)\"\n\"[1]Sheet1!$B16\"\n\"ROUND([1]Sheet1!$E16*1.22*1.25,0)\"\n\"[1]Sheet1!$A76\"\n\"[1]Sheet1!$B76\"\n\"F28\"\n\"H28*1.02\"\n\"F15*(1-G15)\"\n\"(H15*0.02)*1.25\"\n\"F6*(1-G6)\"\n\"H6*1.02\"\n\"I6*1.25\"\n\"F29*0.9\"\n\"12183+33\"\n\"13504+46\"\n\"14759+59\"\n\"16039+84\"\n\"B4+B5\"\n\"SUM(L4:L5)\"\n\"24435+11890+21403+18580+11876+20586\"\n\"22240+12204+18692+21787+12650+24790\"\n\"25007+13017+22779+18777+13710+22022\"\n\"22701+14032+18835+23096+13485+25339\"\n\"23566+14702+19858+23408+13746+25861\"\n\"26271+14230+23533+20241+14580+23682\"\n\"26596+14887+23170+21007+14848+24442\"\n\"24780+14939+22300+23298+15172+27144\"\n\"29076+32169+40927+103979+48797+208487\"\n\"205768+48779+104272+41245+32375+29234\"\n\"202585+49788+97688+44716+33006+29102\"\n\"201258+49448+99049+44223+33157+29093\"\n\"206389+49416+98196+37422+35031+28865\"\n\"212807+48790+95527+38245+34340+28889\"\n\"28638+34445+38525+96576+47670+211059\"\n\"210682+47390+95751+38401+34813+28081\"\n\"4324+2399+3224+3395+1095+2410\"\n\"4384+2447+3233+3430+1164+2374\"\n\"3939+2467+3217+3254+1077+2369\"\n\"3780+2466+3126+3227+1043+2290\"\n\"3889+2415+3154+3013+1080+2141\"\n\"3782+2308+3031+2963+1038+2083\"\n\"3785+2337+2964+2859+1079+2070\"\n\"3742+2270+2990+2772+1062+2010\"\n\"4467+3446+5381+5788+3809+7375\"\n\"4914+3517+5145+5739+3954+7573\"\n\"4186+3424+4479+5125+3339+5690\"\n\"4302+3394+4477+5181+3473+5684\"\n\"4469+3517+4761+5205+3293+5779\"\n\"4421+3561+4961+5225+3356+5963\"\n\"4529+3639+5190+5160+3458+6111\"\n\"4373+3490+5635+5067+3044+5256\"\n\"79450+11301+20254+5781+2706+1526\"\n\"76098+11321+20132+5670+2768+1513\"\n\"64759+10362+15983+7288+2663+1320\"\n\"60481+9834+15181+6828+2473+1251\"\n\"60270+9430+14215+4363+2551+1162\"\n\"1195+2476+4185+12926+8628+59702\"\n\"57178+8268+13107+4189+2433+1249\"\n\"55065+8060+12833+3983+2427+1261\"\n\"31647+7817+13811+5952+4791+6071\"\n\"29586+7045+13426+5935+4904+5855\"\n\"23535+5630+10742+5561+4348+4334\"\n\"23463+5762+10456+5347+4191+4270\"\n\"24096+5508+10245+4520+4259+4180\"\n\"24368+5682+10301+4713+4178+4221\"\n\"24037+5387+10396+4800+4271+4230\"\n\"23741+5155+9977+4517+3734+3421\"\n\"B6+B9\"\n\"L10+L7\"\n\"SUM(I4,I9)\"\n\"A2 + 0.01\"\n\"Parameters!B6\"\n\"Parameters!B6\"\n\"Parameters!C6\"\n\"Parameters!D6\"\n\"Parameters!E6\"\n\"Parameters!F6\"\n\"Parameters!G6\"\n\"($F$1/100)*MAX(C10:C59)\"\n\"COUNTIF(ThresholdCalc!A:A, \"\"<> 9999\"\")-1\"\n\"COUNTIF(ThresholdCalc!B:B, \"\"<> 9999\"\")-1\"\n\"COUNTIF(ThresholdCalc!C:C, \"\"<> 9999\"\")-1\"\n\"COUNTIF(ThresholdCalc!D:D, \"\"<> 9999\"\")-1\"\n\"COUNTIF(ThresholdCalc!E:E, \"\"<> 9999\"\")-1\"\n\"COUNTIF(ThresholdCalc!F:F, \"\"<> 9999\"\")-1\"\n\"Unknown!B1\"\n\"TODAY()\"\n\"Knowns!B1\"\n\"Parameters!B3\"\n\"'Unknown Data Entry'!F1\"\n\"Unknown!B1\"\n\"TODAY()\"\n\"Knowns!B1\"\n\"IF(Knowns!A2<>\"\"\"\", Knowns!A2, \"\"\"\")\"\n\"IF(A10<>\"\"\"\", MAX('Error Calc (bp)'!B2:G2), \"\"\"\")\"\n\"IF(A10<>\"\"\"\", IF(B10<Parameters!B$3, \"\"yes\"\", \"\"no\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!A:A) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!B2<>0, Knowns!B2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!B:B) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!C2<>0, Knowns!C2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!C:C) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!D2<>0, Knowns!D2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!D:D) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!E2<>0, Knowns!E2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!E:E) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!F2<>0, Knowns!F2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF(MIN('Clean Unknown'!F:F) < 9999, IF($C10=\"\"yes\"\", IF(Knowns!G2<>0, Knowns!G2, \"\"****\"\"), \"\"\"\"), \"\"\"\")\"\n\"IF($C55=\"\"yes\"\", IF(Knowns!B47<>0, Knowns!B47, \"\"****\"\"), \"\"\"\")\"\n\"Parameters!B6\"\n\"Parameters!B6\"\n\"IF('Unknown Data Entry'!C10>'Unknown Data Entry'!C$8, 'Unknown Data Entry'!B10, 9999)\"\n\"IF('Unknown Data Entry'!E10>'Unknown Data Entry'!E$8, 'Unknown Data Entry'!D10, 9999)\"\n\"IF('Unknown Data Entry'!G10>'Unknown Data Entry'!G$8, 'Unknown Data Entry'!F10, 9999)\"\n\"IF('Unknown Data Entry'!I10>'Unknown Data Entry'!I$8, 'Unknown Data Entry'!H10, 9999)\"\n\"IF('Unknown Data Entry'!K10>'Unknown Data Entry'!K$8, 'Unknown Data Entry'!J10, 9999)\"\n\"IF('Unknown Data Entry'!M10>'Unknown Data Entry'!M$8, 'Unknown Data Entry'!L10, 9999)\"\n\"Parameters!B6\"\n\"IF(Unknown!C10>Unknown!C$8, Unknown!B10, 9999)\"\n\"IF(Unknown!E10>Unknown!E$8, Unknown!D10, 9999)\"\n\"IF(Unknown!G10>Unknown!G$8, Unknown!F10, 9999)\"\n\"IF(Unknown!I10>Unknown!I$8, Unknown!H10, 9999)\"\n\"IF(Unknown!K10>Unknown!K$8, Unknown!J10, 9999)\"\n\"IF(Unknown!M10>Unknown!M$8, Unknown!L10, 9999)\"\n\"Parameters!B6\"\n\"Knowns!A2\"\n\"IF(Knowns!B2<>\"\"\"\",IF(MIN('Clean Unknown'!A$2:A$52) < 9999,MIN(ABS(Knowns!B2-'Clean Unknown'!A$2:A$52)),\"\"\"\"),\"\"\"\")\"\n\"SUM(C9:L9)\"\n\"H2-F2\"\n\"database.c15.2!A1\"\n\"database.c15.2!A1\"\n\"database!A1\"\n\"database!A1\"\n\"database!A3\"\n\"database!A2\"\n\"SUM(G14:G19)\"\n\"SUM(G22:G32)\"\n\"SUM(G45:G54)\"\n\"2500*15\"\n\"SUM(I7,I8,I9,I10)\"\n\"B9\"\n\"B9*C9\"\n\"C10\"\n\"SUM(I9:I12)\"\n\"D21*F21\"\n\"SUM(I21:I22)\"\n\"I13+I16+I18+I23\"\n\"I25*0.11111\"\n\"I25+I27\"\n\"SUM(E38:E38,E37,E36,E35,E34)\"\n\"SUM(E12,'Stage 4'!E4,E23,'Stage 4'!E9,E39)*0.2\"\n\"SUM(I29,,,,E39,E41)\"\n\"SUM(E43,I29)\"\n\"SUM(I7,I8,I9,I10)\"\n\"SUM(I7,I8)\"\n\"SUM(I7,I8,I9,I10,I11)\"\n\"SUM(E23,E12,E28)\"\n\"E35*0.2\"\n\"SUM(,E35,E37)\"\n\"SUM(E47,E45,E46)\"\n\"SUM(,E48,E39)\"\n\"B6\"\n\"B6\"\n\"B8\"\n\"B8\"\n\"B8\"\n\"B8\"\n\"B6\"\n\"B6\"\n\"B9\"\n\"B9\"\n\"B11\"\n\"B11\"\n\"B7\"\n\"B7\"\n\"B6\"\n\"B6\"\n\"B11\"\n\"B11\"\n\"B7\"\n\"B7\"\n\"COUNTIF(AL,\"\"yes*\"\")\"\n\"(N3/12)\"\n\"COUNTIF(AK,\"\"yes*\"\")\"\n\"COUNTIF(AS,\"\"yes*\"\")\"\n\"COUNTIF(AZ,\"\"yes*\"\")\"\n\"COUNTIF(AR,\"\"yes*\"\")\"\n\"COUNTIF(CA,\"\"yes*\"\")\"\n\"COUNTIF(CO,\"\"yes*\"\")\"\n\"COUNTIF(CT,\"\"yes*\"\")\"\n\"COUNTIF(DE,\"\"yes*\"\")\"\n\"COUNTIF(DC,\"\"yes*\"\")\"\n\"COUNTIF(FL,\"\"yes*\"\")\"\n\"COUNTIF(GA,\"\"yes*\"\")\"\n\"COUNTIF(GU,\"\"yes*\"\")\"\n\"COUNTIF(HI,\"\"yes*\"\")\"\n\"COUNTIF(ID,\"\"yes*\"\")\"\n\"COUNTIF(IL,\"\"yes*\"\")\"\n\"COUNTIF(IN,\"\"yes*\"\")\"\n\"COUNTIF(IA,\"\"yes*\"\")\"\n\"COUNTIF(KS,\"\"yes*\"\")\"\n\"COUNTIF(KY,\"\"yes*\"\")\"\n\"COUNTIF(LA,\"\"yes*\"\")\"\n\"COUNTIF(ME,\"\"yes*\"\")\"\n\"COUNTIF(MD,\"\"yes*\"\")\"\n\"COUNTIF(MA,\"\"yes*\"\")\"\n\"COUNTIF(MI,\"\"yes*\"\")\"\n\"COUNTIF(MN,\"\"yes*\"\")\"\n\"COUNTIF(MS,\"\"yes*\"\")\"\n\"COUNTIF(MO,\"\"yes*\"\")\"\n\"COUNTIF(MT,\"\"yes*\"\")\"\n\"COUNTIF(NE,\"\"yes*\"\")\"\n\"COUNTIF(NV,\"\"yes*\"\")\"\n\"COUNTIF(NH,\"\"yes*\"\")\"\n\"COUNTIF(NJ,\"\"yes*\"\")\"\n\"COUNTIF(NM,\"\"yes*\"\")\"\n\"COUNTIF(NY,\"\"yes*\"\")\"\n\"COUNTIF(NC,\"\"yes*\"\")\"\n\"COUNTIF(ND,\"\"yes*\"\")\"\n\"COUNTIF(OH,\"\"yes*\"\")\"\n\"COUNTIF(OK,\"\"yes*\"\")\"\n\"COUNTIF(OR,\"\"yes*\"\")\"\n\"COUNTIF(PA,\"\"yes*\"\")\"\n\"COUNTIF(PR,\"\"yes*\"\")\"\n\"COUNTIF(RI,\"\"yes*\"\")\"\n\"COUNTIF(SC,\"\"yes*\"\")\"\n\"COUNTIF(SD,\"\"yes*\"\")\"\n\"COUNTIF(TN,\"\"yes*\"\")\"\n\"COUNTIF(TX,\"\"yes*\"\")\"\n\"COUNTIF(UT,\"\"yes*\"\")\"\n\"COUNTIF(VT,\"\"yes*\"\")\"\n\"COUNTIF(VI,\"\"yes*\"\")\"\n\"COUNTIF(VA,\"\"yes*\"\")\"\n\"COUNTIF(WA,\"\"yes*\"\")\"\n\"COUNTIF(WV,\"\"yes*\"\")\"\n\"COUNTIF(WI,\"\"yes*\"\")\"\n\"COUNTIF(WY,\"\"yes*\"\")\"\n\"COUNTIF(ALERT,\"\"yes*\"\")\"\n\"COUNTIF(CDS,\"\"yes*\"\")\"\n\"COUNTIF(CER,\"\"yes*\"\")\"\n\"COUNTIF(ETS,\"\"yes*\"\")\"\n\"COUNTIF(FDR,\"\"yes*\"\")\"\n\"COUNTIF(PDB,\"\"yes*\"\")\"\n\"COUNTIF(PIN,\"\"yes*\"\")\"\n\"COUNTIF(Regcast,\"\"yes*\"\")\"\n\"COUNTIF(RIRS,\"\"yes*\"\")\"\n\"COUNTIF(SAD,\"\"yes*\"\")\"\n\"COUNTIF(SERFF,\"\"yes*\"\")\"\n\"COUNTIF(UT_LR,\"\"yes*\"\")\"\n\"SUM(B58:M58)\"\n\"COUNTA(P3:P57)\"\n\"SUM(N2:N57)\"\n\"B58/55\"\n\"(N58/660)\"\n\"SUM(C2:C24)\"\n\"SUM(C25,databases!C147)\"\n\"SUM(C2:C146)\"\n\"A6\"\n\"I3\"\n\"B7\"\n\"'Non-Functional Detail'!D4\"\n\"'Non-Functional Detail'!H4\"\n\"'Non-Functional Detail'!N4\"\n\"'Non-Functional Detail'!K4\"\n\"A11\"\n\"B12\"\n\"A15\"\n\"B16\"\n\"SUM(B4:B5)\"\n\"A20\"\n\"B21\"\n\"B6/B6\"\n\"C6/$B6\"\n\"A32\"\n\"B33\"\n\"SUM(J3:J7)\"\n\"B36\"\n\"SUM(B14)\"\n\"SUM(B23:B31)\"\n\"SUM(B6,B11,B15,B20,B32)\"\n\"'Non-Functional Detail'!B4\"\n\"'Non-Functional Detail'!G4\"\n\"'Non-Functional Detail'!M4\"\n\"'Non-Functional Detail'!J4\"\n\"R45\"\n\"R8\"\n\"SUM(B4:B19)\"\n\"SUM(B22:B26)\"\n\"B4*C4\"\n\"3*$O4/F4\"\n\"G4*C4\"\n\"J4*C4\"\n\"M4*C4\"\n\"MIN(F4,I4,L4)\"\n\"SUM(B4:B5)\"\n\"G6/B6\"\n\"H6/D6\"\n\"J6/B6\"\n\"K6/D6\"\n\"M6/B6\"\n\"N6/D6\"\n\"SUM(B14)\"\n\"3*F19/$O19\"\n\"MAX(F19,I19,L19)\"\n\"SUM(B23:B31)\"\n\"SUM(B6,B11,B15,B20,B32)\"\n\"K35/$D35\"\n\"SUM(D5:F5)\"\n\"SUM(B5:F5)\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"1.29*EXP(0.0099*P6)\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"($D10+$E10*P$8+$F10*P$8^2+$G10*P$8^$H10+$I10*LN(P$8)+$J10*P$8^3+$K10/P$8+$L10/(P$8^2)+$M10/(P$8^3))*$N10\"\n\"($D10+$E10*P$8+$F10*P$8^2+$G10*P$8^$H10+$I10*LN(P$8)+$J10*P$8^3+$K10/P$8+$L10/(P$8^2)+$M10/(P$8^3))*$N10\"\n\"($D10+$E10*P$8+$F10*P$8^2+$G10*P$8^$H10+$I10*LN(P$8)+$J10*P$8^3+$K10/P$8+$L10/(P$8^2)+$M10/(P$8^3))*$N10\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"1.29*EXP(0.0099*P6)\"\n\"($D8+$E8*P$6+$F8*P$6^2+$G8*P$6^$H8+$I8*LN(P$6)+$J8*P$6^3+$K8/P$6+$L8/(P$6^2)+$M8/(P$6^3))*$N8\"\n\"C11*E11/100\"\n\"C11*H11\"\n\"H11*C11*E11/100\"\n\"H11*C11-J11\"\n\"K11/K35\"\n\"K12/K35\"\n\"K13/K35\"\n\"K14/K35\"\n\"K15/K35\"\n\"K16/K35\"\n\"K17/K35\"\n\"K18/K35\"\n\"SUM(C11:C34)\"\n\"D35/C35\"\n\"(J35+K35)/C35\"\n\"SUM(I10:I34)\"\n\" J35/(J35+K35)\"\n\"K35/(J35+K35)\"\n\"NOW()\"\n\"SUM(Summary!H15)\"\n\"SUM(Summary!H29)\"\n\"SUM(Summary!H31)\"\n\"SUM(F5*C6)\"\n\"SUM(Summary!H39)\"\n\"SUM(Assests!E54)\"\n\"SUM(Assests!E31)\"\n\"SUM(Summary!H70)\"\n\"SUM(Traffic!B45)\"\n\"SUM(Summary!H79)\"\n\"SUM(F6)\"\n\"SUM(F9:F12,F15:F17,F16,F17,F16)\"\n\"SUM(F18:F19)\"\n\"SUM(Revenues!C4)\"\n\"SUM(H5*12)\"\n\"SUM(Revenues!C7)\"\n\"SUM(H15-H29)\"\n\"SUM(Assests!E8)\"\n\"SUM(Assests!E15)\"\n\"SUM(Assests!E21)\"\n\"SUM(H35:H37)\"\n\"SUM(Assests!D26)\"\n\"SUM(Assests!E37)\"\n\"SUM(Assests!E62)\"\n\"SUM(Assests!E67)\"\n\"SUM(Assests!E62,Assests!E67)\"\n\"SUM(Assests!E33)\"\n\"SUM(Traffic!B45)\"\n\"SUM(Links!B11)\"\n\"SUM(Traffic!B16)\"\n\"AVERAGE(D3:G3)\"\n\"SUM(B3*B6)\"\n\"SUM(B3*B9/1000*B10)\"\n\"SUM(C27)\"\n\"SUM(B15/Traffic!B13)\"\n\"SUM(C15/Traffic!B13)\"\n\"SUM(D15/Traffic!B13)\"\n\"SUM(E15/Traffic!B13)\"\n\"SUM(F15/Traffic!B13)\"\n\"SUM(G15/Traffic!B13)\"\n\"SUM(H15/Traffic!B13)\"\n\"SUM(I15/Traffic!B13)\"\n\"SUM(K15/Traffic!B13)\"\n\"SUM(C22:J22)\"\n\"AVERAGE(C22:C26)\"\n\"SUM(B3*30)\"\n\"SUM(B3*365)\"\n\"SUM(C3*12)\"\n\"SUM(B4/B3)\"\n\"AVERAGE(C12:N12)\"\n\"SUM((D12-C12)/C12)\"\n\"SUM(B7*C4/1000)\"\n\"SUM(B22*12)\"\n\"SUM(B8*C4/1000)\"\n\"SUM(B9*C4/1000)\"\n\"SUM(B22*B19)\"\n\"SUM(B23*B19)\"\n\"SUM(B24*B19)\"\n\"SUM(B34*B35)\"\n\"SUM(B36,C4,B38,B40)\"\n\"SUM(B7*C42/1000)\"\n\"SUM(B8*C42/1000)\"\n\"SUM(B9*C42/1000)\"\n\"AVERAGE(D4:H4)\"\n\"SUM(D10/D11)\"\n\"SUM(C4:C10)\"\n\"AVERAGE(D18:I18)\"\n\"SUM(C18:C26)\"\n\"SUM(D4:D5)\"\n\"SUM(D11)\"\n\"SUM(D18:D19)\"\n\"SUM(E8:E17)\"\n\"SUM(D26:D29)\"\n\"SUM(E23,E31,E62,E67)\"\n\"SUM(E38*E39)\"\n\"SUM(E41,E47)\"\n\"SUM(E58*E61)\"\n\"SUM(E64:E66)\"\n\"SUM(E62,E67)\"\n\"SUM(C3:C10)\"\n\"SUM(C12:C20)\"\n\"C11+C21+C31\"\n\"10^-2.1\"\n\"10^(0.5*(E4^2-D4^2)*SQRT($J$7)/(1+SQRT($J$7)))\"\n\"10^-7.2\"\n\"10^-12.3\"\n\"B4*F4\"\n\"10^-A14\"\n\"$B$12/B16\"\n\"P($J$5,$B$9,$B$10,$B$11,B16)\"\n\"D16*B16/$B$11\"\n\"D16*B16^2/($B$11*$B$10)\"\n\"D16*B16^3/($B$11*$B$10*$B$9)\"\n\"LOG(B16)\"\n\"D16/$J$5\"\n\"10^-C5\"\n\"f(D5,B7,B8,B9,B10,E7)\"\n\"'Speciation calculations'!B9\"\n\"10^-A29\"\n\"$E$7/(1+B31/$B$9+B31^2/($B$8*$B$9)+B31^3/($B$7*$B$8*$B$9))\"\n\"C31+$B$10/B31-C31*B31^2/($B$8*$B$9)-2*C31*B31^3/($B$7*$B$8*$B$9)-B31\"\n\"(D50-D49)/(A50-A49)\"\n\"A50-D50/E50\"\n\"SUM(D8:D25)\"\n\"pH($B$1,$B$2,$B$3,$D$1,A8,2)\"\n\"(B8-C8)^2\"\n\"pH($B$1,$B$2,$B$3,$D$1,A26,2)\"\n\"(F31-G31)/F31\"\n\"AVERAGE(B13:B30)\"\n\"(I31-G31)/I31\"\n\"LN(I31/G31)-2*2/COUNT(A13:A30)\"\n\"B13^2\"\n\"(B13-D13)^2\"\n\"(B13-$F$6)^2\"\n\"SUM(F13:F30)\"\n\"(D5+E5+F5+G5+H5)/5\"\n\"AVERAGE(D5:H5)\"\n\"AVERAGE(D5:H5)\"\n\"1/C4\"\n\"AVERAGE(E5:I5)\"\n\"LN(K5)\"\n\"1/C5\"\n\"AVERAGE(E5:I5)\"\n\"LN(K5)\"\n\"1/C5\"\n\"AVERAGE(E5:I5)\"\n\"LN(K5)\"\n\"1/C5\"\n\"AVERAGE(E5:I5)\"\n\"LN(K5)\"\n\"Intcpt\"\n\"Slope\"\n\"R_Square\"\n\"(-Slope*R_/1000)\"\n\"IF(R_=8.314,\"\"kJ mol^-1\"\",IF(R_=1.987,\"\"kcal mol^-1\"\",\"\" Check Result-incorrect unit!\"\"))\"\n\"FIXED(EXP(Intcpt),4,TRUE)&\"\"  M^-1 s^-1\"\"\"\n\"IF('Step 9. RegrResults'!B5>0.95,\"\"Well correlated\"\",\"\"Poor Correlation\"\")\"\n\"TODAY()\"\n\"10^-33.89\"\n\"10^-14\"\n\"10^10.34\"\n\"10^16.13\"\n\"10^10.7\"\n\"10^9\"\n\"10^16.58\"\n\"10^18.7\"\n\"10^13.8\"\n\"10^19.33\"\n\"10^24.2\"\n\"10^27\"\n\"10^21.4\"\n\"10^33\"\n\"10^23\"\n\"10^42.1\"\n\"10^23.9\"\n\"10^-A9\"\n\"G2/10^-A9\"\n\"D2/C11^3\"\n\"D3*D11*C11\"\n\"D4*D11*C11^2\"\n\"D5*D11*C11^3\"\n\"D6*D11*C11^4\"\n\"D7*D11^3*C11^4\"\n\"LOG(SUM(D11:H11)+3*I11)\"\n\"$L$8/(1+$L$2*$B$11+$L$3*$B$11^2+$L$4*$B$11^3+$L$5*$B$11^4+$L$6*$B$11^5+$L$7*$B$11^6+$O$2*$D$11+$O$3*$D$11*$B$11+$O$4*$D$11*$C$11)\"\n\"$O$2*$K$11*$D$11\"\n\"$O$3*$K$11*$D$11*$B$11\"\n\"$O$4*$D$11*$C$11*$K$11\"\n\"LOG(SUM(L11:N11)+10^$J$11)\"\n\"R2\"\n\"$L$8/(1+$L$2*$B$11+$L$3*$B$11^2+$L$4*$B$11^3+$L$5*$B$11^4+$L$6*$B$11^5+$L$7*$B$11^6+$O$2*$D$11+$O$3*$D$11*$B$11+$O$4*$D$11*$C$11+U2*P11+U3*P11*B11)\"\n\"$O$2*Q11*$D$11\"\n\"$O$3*Q11*$D$11*$B$11\"\n\"$O$4*$D$11*$C$11*Q11\"\n\"2*PI()*RAND()\"\n\"COS(D9)\"\n\"SIN(D9)\"\n\"SQRT(B9^2+C9^2)\"\n\"MAX(G9:G1009)\"\n\"J9\"\n\"FREQUENCY(L10:L1009,N9:N29)\"\n\"1+A9\"\n\"B9+E9\"\n\"(1/(2*PI()))*SQRT(3*E*I/(F9*L^3))\"\n\"(1/(2*PI()))*SQRT(3*E*I/(m*L^3))\"\n\"1/D8\"\n\"-(3*E*I/(m*L^3))*G15\"\n\"F15+delt\"\n\"G15+H16*delt\"\n\"H15+I15*delt\"\n\"G8\"\n\"K19\"\n\"(1/(2*PI()))*SQRT(3*E*I/(m*L^3))\"\n\"1/D8\"\n\"-(3*E*I/(m*L^3))*G15\"\n\"G15\"\n\"F15+delt\"\n\"J15+H16*delt\"\n\"H15+I15*delt\"\n\"J15+((H15+H16)/2)*delt\"\n\"G8\"\n\"M19\"\n\"IF(A3=\"\"D\"\",-1,0)\"\n\"IF(A3=\"\"E\"\",-1,0)\"\n\"IF(A3=\"\"K\"\",1,0)\"\n\"IF(A3=\"\"R\"\",1,0)\"\n\"IF(A3=\"\"H\"\",0.5,0)\"\n\"SUM(B3:F3)\"\n\"SUM(G3:G30)\"\n\"IF(SELECT=0,SOLUTION,SELECT)\"\n\"'Eqn. Solve'!F7\"\n\"IF(OR(TEMP<100,TEMP>500),\"\"WARNING! Temperature is outside bounds of experimental data.\"\",\"\"\"\")\"\n\"BASIS*PURITY\"\n\"MAX(0.01,2*(FEEDR1-PURR1)*(1+XSR2))\"\n\"BASIS*(1-PURITY)\"\n\"IF(OR(TEMP<100,TEMP>499),\"\"WARNING! Temperature is outside\"\",\"\"\"\")\"\n\"IF(OR(TEMP<100,TEMP>499),\"\"of range of table of Keq values.\"\",\"\"\"\")\"\n\"MIN(RECYR1,PURR3*RECYR1/MAX(0.01,RECYR3))\"\n\"PURR3*RECYR2/MAX(0.01,RECYR3)\"\n\"MIN(RECYP,PURR3*RECYP/MAX(0.01,RECYR3))\"\n\"MAX(0.01,F24+Flash!D37)\"\n\"(1-CONV)*(FEEDR1+RECYR1-PURR1)\"\n\"MAX(0.01,Flash!D38)\"\n\"FEEDR2+RECYR2-PURR2-EXITP\"\n\"RECYR3/(RECYR3+RECYR2+RECYR1+RECYP)\"\n\"MAX(0.01,F25+Flash!D39)\"\n\"FEEDR3+RECYR3-PURR3\"\n\"2*CONV*(FEEDR1+RECYR1-PURR1)\"\n\"H24-H33\"\n\"Flash!E37\"\n\"H26\"\n\"H25-H34\"\n\"0.01*H24\"\n\"0.02*H25\"\n\"H27\"\n\"EXITR1/SUM(Flowsheet!H15:H18)\"\n\"EXITR2/SUM(Flowsheet!H15:H18)\"\n\"EXITR3/SUM(Flowsheet!H15:H18)\"\n\"EXITP/SUM(Flowsheet!H15:H18)\"\n\"SUM(B3:B6)\"\n\"_ZR1*(1-_KR1)/(1+D9*(_KR1-1))+_ZR2*(1-_KR2)/(1+D9*(_KR2-1))+_ZR3*(1-_KR3)/(1+D9*(_KR3-1))+ZP*(1-KP)/(1+D9*(KP-1))\"\n\"(D9*G9-F9*E9)/(G9-E9)\"\n\"IF(E9*I9>0,H9,D9)\"\n\"IF(E9*I9>0,F9,H9)\"\n\"VAPR1\"\n\"LIQR1\"\n\"VAPP\"\n\"LIQP\"\n\"_KR1*_ZR1/(1+$H$22*(_KR1-1))\"\n\"_ZR1/(1+$H$22*(_KR1-1))\"\n\"_YR1*TOTV\"\n\"_XR1*TOTL\"\n\"VAPR1+LIQR1\"\n\"Flowsheet!E15\"\n\"_KR2*_ZR2/(1+$H$22*(_KR2-1))\"\n\"_ZR2/(1+$H$22*(_KR2-1))\"\n\"_YR2*TOTV\"\n\"_XR2*TOTL\"\n\"Flowsheet!H25\"\n\"_KR3*_ZR3/(1+$H$22*(_KR3-1))\"\n\"_ZR3/(1+$H$22*(_KR3-1))\"\n\"_YR3*TOTV\"\n\"_XR3*TOTL\"\n\"KP*ZP/(1+$H$22*(KP-1))\"\n\"ZP/(1+$H$22*(KP-1))\"\n\"YP*TOTV\"\n\"XP*TOTL\"\n\"VAPP+LIQP\"\n\"SUM(_YR1:(YP))\"\n\"SUM(_XR1:(XP))\"\n\"H22*TOTFED\"\n\"TOTFED-TOTV\"\n\"SUM(Flowsheet!H15:H18)\"\n\"(VAPR1+B24)/2\"\n\"(LIQR1+C24)/2\"\n\"TOTFED\"\n\"(VAPP+B27)/2\"\n\"(LIQP+C27)/2\"\n\"IF(TEMP<100,100,IF(TEMP>499,499,TEMP))\"\n\"VLOOKUP(TTEMP,TABLE2,3)\"\n\"G5+1\"\n\"VLOOKUP(LOWINDEX,TABLE1,2)\"\n\"VLOOKUP(HIGHINDEX,TABLE1,2)\"\n\"VLOOKUP(LOWTEMP,TABLE2,2)\"\n\"VLOOKUP(HIGHTEMP,TABLE2,2)\"\n\"(HIGHK-LOWK)*(TTEMP-LOWTEMP)/(HIGHTEMP-LOWTEMP)+LOWK\"\n\"EXP((LN(HIGHK)-LN(LOWK))*(LN(TTEMP)-LN(LOWTEMP))/(LN(HIGHTEMP)-LN(LOWTEMP))+LN(LOWK))\"\n\"LN(K25)\"\n\"EXP(O25)\"\n\"IF(OR(ISERROR(RECYR1),ISERROR(PURR1)),100,FEEDR1+RECYR1-PURR1)\"\n\"IF(OR(ISERROR(RECYR2),ISERROR(PURR2)),200,FEEDR2+RECYR2-PURR2)\"\n\"IF(OR(ISERROR(RECYR3),ISERROR(PURR3)),2,FEEDR3+RECYR3-PURR3)\"\n\"RECYP-PURP\"\n\"[0]!LOGINTERP\"\n\"(2*G9+INLETP)^2/(INLETR1-G9)/(INLETR2-2*G9)^2*(INLETR1+INLETR2+INLETR3+INLETP-G9)-$F$7*PRES\"\n\"MIN(0.9999*INLETR1,0.9999*INLETR2/2)\"\n\"(I9+G9)/2\"\n\"IF(H9*L9>0,K9,G9)\"\n\"IF(H9*L9>0,I9,K9)\"\n\"NEWCONV\"\n\"IF(AND(H9*J9>0,J9*L9>0),0.9999*INLETR1,K33)\"\n\"MIN(0.9999,M36/INLETR1)\"\n\"MAX(0.000001,MIN(0.9999,OLDCONV+SENS*(NEWCONV-OLDCONV)))\"\n\"LOOKUP(A4,$N$4:$N$23,$O$4:$O$23)\"\n\"OFFSET($P$4,$B4,0,1,1)\"\n\"OFFSET($Q$4,$B4,0,1,1)\"\n\"OFFSET($R$4,$B4,0,1,1)\"\n\"OFFSET($P$4,B5,0,1,1)\"\n\"AVERAGE(C4:C10)\"\n\"AVERAGE(E4:E7)\"\n\"PRODUCT(OFFSET($S$4,B4,0,1,1),OFFSET($S$4,B5,1,1,1),OFFSET($S$4,B6,2,1,1),OFFSET($S$4,B7,3,1,1))\"\n\"IF(AND(F6>G6,F6>1.05)=TRUE,2,1)\"\n\"IF(AND(G6>1.05,G6>F6)=TRUE,4,3)\"\n\"IF(AND(H6>F6,H6>G6,H6>1,I6>0.000075)=TRUE,6,5)\"\n\"NOW()\"\n\"SUM(B30:B34)\"\n\"AVERAGE(J40:J41,J44:J45)\"\n\"COUNT(NrList)\"\n\"MAX(J40:J45)\"\n\"MIN(J41:J46)\"\n\"EVEN(J41)\"\n\"ROW(J42)\"\n\"LEN(J39)\"\n\"IF(B78<B79,\"\"It's true\"\",\"\"It's false\"\")\"\n\"NOW()\"\n\"REPT(\"\"abc\"\",3)\"\n\"K86>K87\"\n\"LEN(K88)>LEN(K89)\"\n\"K86=K87\"\n\"LEN(K89)<>LEN(K90)\"\n\"IF(PrtyClr=\"\"red\"\",\"\"Labour\"\",\"\"tory\"\")\"\n\"LOOKUP($A3,$V$4:$V$23,$W$4:$W$23)\"\n\"OFFSET($X$4,$B3,MOD($C3,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+1,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+2,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+3,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+4,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+5,7),1,1)\"\n\"OFFSET($X$4,$B3,MOD($C3+6,7),1,1)\"\n\"POWER(PRODUCT(D3:D30),1/28)\"\n\"MAX(K3:Q3)\"\n\"MAX(S3:S30)\"\n\"C3+1\"\n\"IF(R3>1.55,1,IF(R3>1.48,0.9,IF(R3>1.4,0.8,IF(R3>1.36666,0.6,IF(R3>1.33333,0.4,IF(R3>1.22,0.2,IF(R3>1,0.1,0)))))))\"\n\"MAX(S374:S400)\"\n\"B13\"\n\"IF(RAND()<=$B$1,1,0)\"\n\"FREQUENCY(E3:E102,G3:G13)\"\n\"SUM(B3:B12)\"\n\"TODAY()\"\n\"NOW()\"\n\"B16/$E$7\"\n\" $E$6/(2*SIN((A16*PI())/(2*180)))\"\n\"SIN((A16*PI())/(2*180))^2\"\n\"AVERAGE(F16:F23)\"\n\"STDEV(F16:F23)/F25\"\n\"IF(A3=\"\"G\"\",1,IF(A3=\"\"C\"\",1,0))\"\n\"IF(AND(A3=\"\"C\"\",A4=\"\"G\"\")=TRUE,1,0)\"\n\"SUM(B3:B52)*2\"\n\"IF(AND(A3=\"\"G\"\",A4=\"\"A\"\",A5=\"\"T\"\",A6=\"\"C\"\") = TRUE,1,0)\"\n\"C2+1\"\n\"C2+1\"\n\"IF(OFFSET($A$3,$C3,0,1,1)=OFFSET($A$3,D$2,1,1,1),OFFSET($A$3,D$2,1,1,1),\"\" \"\")\"\n\"B5/E0\"\n\"_MU1*B5*(1+B*C5^K)/(1+C5^K)\"\n\"B6/E0\"\n\"D6/B6\"\n\"B7/E0\"\n\"B8/E0\"\n\"B9/E0\"\n\"B10/E0\"\n\"B11/E0\"\n\"B12/E0\"\n\"B13/E0\"\n\"B14/E0\"\n\"B15/E0\"\n\"FREQUENCY(B4:B24,G4:G10)\"\n\"ROUND(H4*100/$H$10,3)\"\n\"SUM(H4:H9)\"\n\"(((B4/2)*((B4/2)*(B5-B6)/0.19))/(2*((B5-B6)+(B4/2))*D7))*LN((B5-B6)/E7)\"\n\"(40/((20+(B5-B6)/(B4/2))*(2-((E5+E6)/2)/(B5-B6))))*((B4/2)/((E5+E6)/2))*((E5-E6)/(D6-D5))\"\n\"178.3*2\"\n\"176.7*2\"\n\"175*2\"\n\"173.3*2\"\n\"171.6*2\"\n\"170*2\"\n\"168.4*2\"\n\"166.7*2\"\n\"165.1*2\"\n\"163.5*2\"\n\"162*2\"\n\"160.5*2\"\n\"159*2\"\n\"157.5*2\"\n\"156*2\"\n\"154.5*2\"\n\"153*2\"\n\"151.5*2\"\n\"150*2\"\n\"148.5*2\"\n\"147.1*2\"\n\"145.7*2\"\n\"144.3*2\"\n\"142.9*2\"\n\"141.5*2\"\n\"140.1*2\"\n\"138.7*2\"\n\"137.3*2\"\n\"135.9*2\"\n\"134.5*2\"\n\"133.2*2\"\n\"131.9*2\"\n\"130.6*2\"\n\"129.3*2\"\n\"128*2\"\n\"126.7*2\"\n\"125.4*2\"\n\"124.1*2\"\n\"122.8*2\"\n\"121.5*2\"\n\"120.2*2\"\n\"119*2\"\n\"117.7*2\"\n\"116.4*2\"\n\"115.2*2\"\n\"114*2\"\n\"112.7*2\"\n\"111.5*2\"\n\"110.2*2\"\n\"109*2\"\n\"107.7*2\"\n\"106.5*2\"\n\"105.2*2\"\n\"104*2\"\n\"102.7*2\"\n\"101.4*2\"\n\"100*2\"\n\"98.7*2\"\n\"97.3*2\"\n\"96*2\"\n\"94.6*2\"\n\"93.2*2\"\n\"91.8*2\"\n\"90.4*2\"\n\"89*2\"\n\"87.6*2\"\n\"86.1*2\"\n\"84.7*2\"\n\"83.2*2\"\n\"81.8*2\"\n\"80.2*2\"\n\"78.7*2\"\n\"77.1*2\"\n\"75.6*2\"\n\"74*2\"\n\"72.2*2\"\n\"70.5*2\"\n\"68.7*2\"\n\"67*2\"\n\"65.2*2\"\n\"63.4*2\"\n\"61.5*2\"\n\"59.7*2\"\n\"57.8*2\"\n\"56*2\"\n\"53.9*2\"\n\"51.9*2\"\n\"49.8*2\"\n\"47.8*2\"\n\"45.7*2\"\n\"43.5*2\"\n\"41*2\"\n\"38.5*2\"\n\"36*2\"\n\"32.7*2\"\n\"30*2\"\n\"25.5*2\"\n\"20*2\"\n\"13*2\"\n\"FREQUENCY(A4:A41,B4:B39)\"\n\"C4/$C$40\"\n\"D4*100\"\n\"E4*(0.087)\"\n\"E4*(0.996)\"\n\"178.3*2\"\n\"ROUND(IF(ATAN2(G40,F40)*57.29577>0,ATAN2(G40,F40)*57.29577,ATAN2(G40,F40)*57.29577+360),0)\"\n\"E5*(0.259)\"\n\"E5*(0.966)\"\n\"176.7*2\"\n\"E6*(0.423)\"\n\"E6*(0.906)\"\n\"175*2\"\n\"ROUND(SQRT(F40^2+G40^2),0)\"\n\"E7*(0.574)\"\n\"E7*(0.819)\"\n\"173.3*2\"\n\"E8*(0.707)\"\n\"E8*(0.707)\"\n\"171.6*2\"\n\"ROUND(VLOOKUP(J6,H4:I103,2),0)\"\n\"E9*(0.819)\"\n\"E9*(0.574)\"\n\"170*2\"\n\"E10*(0.906)\"\n\"E10*(0.423)\"\n\"168.4*2\"\n\"ROUND(J8*0.00873/SIN(J8*0.00873),2)\"\n\"E11*(0.996)\"\n\"E11*(0.259)\"\n\"166.7*2\"\n\"E12*(0.087)\"\n\"165.1*2\"\n\"E13*(0.966)\"\n\"E13*(-0.087)\"\n\"163.5*2\"\n\"E14*(-0.259)\"\n\"162*2\"\n\"E15*(-0.423)\"\n\"160.5*2\"\n\"E16*(-0.574)\"\n\"159*2\"\n\"E17*(-0.707)\"\n\"157.5*2\"\n\"E18*(-0.819)\"\n\"156*2\"\n\"E19*(-0.906)\"\n\"154.5*2\"\n\"E20*(-0.966)\"\n\"153*2\"\n\"E21*(-0.996)\"\n\"151.5*2\"\n\"E22*(-0.087)\"\n\"150*2\"\n\"E23*(-0.259)\"\n\"148.5*2\"\n\"E24*(-0.423)\"\n\"147.1*2\"\n\"E25*(-0.574)\"\n\"145.7*2\"\n\"E26*(-0.707)\"\n\"144.3*2\"\n\"E27*(-0.819)\"\n\"142.9*2\"\n\"E28*(-0.906)\"\n\"141.5*2\"\n\"E29*(-0.966)\"\n\"140.1*2\"\n\"E30*(-0.996)\"\n\"138.7*2\"\n\"137.3*2\"\n\"135.9*2\"\n\"134.5*2\"\n\"133.2*2\"\n\"131.9*2\"\n\"130.6*2\"\n\"129.3*2\"\n\"128*2\"\n\"126.7*2\"\n\"SUM(C4:C39)\"\n\"125.4*2\"\n\"124.1*2\"\n\"122.8*2\"\n\"121.5*2\"\n\"120.2*2\"\n\"119*2\"\n\"117.7*2\"\n\"116.4*2\"\n\"115.2*2\"\n\"114*2\"\n\"112.7*2\"\n\"111.5*2\"\n\"110.2*2\"\n\"109*2\"\n\"107.7*2\"\n\"106.5*2\"\n\"105.2*2\"\n\"104*2\"\n\"102.7*2\"\n\"101.4*2\"\n\"100*2\"\n\"98.7*2\"\n\"97.3*2\"\n\"96*2\"\n\"94.6*2\"\n\"93.2*2\"\n\"91.8*2\"\n\"90.4*2\"\n\"89*2\"\n\"87.6*2\"\n\"86.1*2\"\n\"84.7*2\"\n\"83.2*2\"\n\"81.8*2\"\n\"80.2*2\"\n\"78.7*2\"\n\"77.1*2\"\n\"75.6*2\"\n\"74*2\"\n\"72.2*2\"\n\"70.5*2\"\n\"68.7*2\"\n\"67*2\"\n\"65.2*2\"\n\"63.4*2\"\n\"61.5*2\"\n\"59.7*2\"\n\"57.8*2\"\n\"56*2\"\n\"53.9*2\"\n\"51.9*2\"\n\"49.8*2\"\n\"47.8*2\"\n\"45.7*2\"\n\"43.5*2\"\n\"41*2\"\n\"38.5*2\"\n\"36*2\"\n\"32.7*2\"\n\"30*2\"\n\"25.5*2\"\n\"20*2\"\n\"13*2\"\n\"IF(B3>0,IF(B3<=90,B3+270,B3-90),0)\"\n\"IF(B5>0,IF(B5<=90,B5+270,B5-90),0)\"\n\"ABS(B3-B5)\"\n\"IF(B3>0,COS(B6*0.01745)*COS(B4*0.01745)+SIN(B6*0.01745)*SIN(B4*0.01745)*COS(J2*0.01745),0)\"\n\"IF(H2<>I2,ACOS((COS(B6*0.01745)-K2*COS($B$4*0.01745))/(SIN((ACOS(K2)*57.29577)*0.01745)*SIN($B$4*0.01745)))*57.29577,0)\"\n\"IF(K2>0,IF(AND(H2<I2,ABS(H2-I2)<180),H2-L2,IF(AND(H2>I2,ABS(H2-I2)<180),H2+L2,0)),0)\"\n\"IF(K2>0,IF(AND(H2<I2,ABS(H2-I2)>180),H2+L2,IF(AND(H2>I2,ABS(H2-I2)>180),H2-L2,0)),0)\"\n\"IF(K2<0,IF(H2<I2,H2-L2-180,IF(H2>I2,H2+L2-180,0)),0)\"\n\"IF(B3>0,IF(AND(H2=I2,B4<B6),H2-180,IF(AND(H2=I2,B4>B6),H2,0)),0)\"\n\"IF(AND(M2>0,M2<360),M2,IF(M2<0,M2+360,IF(M2>360,M2-360,0)))\"\n\"ROUND(IF(MAXA(Q2:T2)>=90,MAXA(Q2:T2)-90,270+MAXA(Q2:T2)),0)\"\n\"IF(B3>0,IF(B3<=90,B3+270,B3-90),0)\"\n\"IF(B7>0,IF(B7<=90,B7+270,B7-90),0)\"\n\"ABS(B3-B7)\"\n\"IF(B3>0,COS(B8*0.01745)*COS(B4*0.01745)+SIN(B8*0.01745)*SIN(B4*0.01745)*COS(J3*0.01745),0)\"\n\"IF(H3<>I3,ACOS((COS(B8*0.01745)-K3*COS($B$4*0.01745))/(SIN((ACOS(K3)*57.29577)*0.01745)*SIN($B$4*0.01745)))*57.29577,0)\"\n\"IF(B4>0,IF(AND(H3=I3,B4<B8),H3-180,IF(AND(H3=I3,B4>B8),H3,0)),0)\"\n\"ROUND(ACOS(K2)*57.29577,0)\"\n\"IF(B3>0,IF(B3<=90,B3+270,B3-90),0)\"\n\"IF(B9>0,IF(B9<=90,B9+270,B9-90),0)\"\n\"ABS(B3-B9)\"\n\"IF(B3>0,COS(B10*0.01745)*COS(B4*0.01745)+SIN(B10*0.01745)*SIN(B4*0.01745)*COS(J4*0.01745),0)\"\n\"IF(H4<>I4,ACOS((COS(B10*0.01745)-K4*COS($B$4*0.01745))/(SIN((ACOS(K4)*57.29577)*0.01745)*SIN($B$4*0.01745)))*57.29577,0)\"\n\"IF(B5>0,IF(AND(H4=I4,B4<B10),H4-180,IF(AND(H4=I4,B4>B10),H4,0)),0)\"\n\"IF(D3<=270,D3+90,D3-270)\"\n\"ROUND(IF(MAXA(Q3:T3)>=90,MAXA(Q3:T3)-90,270+MAXA(Q3:T3)),0)\"\n\"ROUND(ACOS(K3)*57.29577,0)\"\n\"ROUND(IF(MAXA(Q4:T4)>=90,MAXA(Q4:T4)-90,270+MAXA(Q4:T4)),0)\"\n\"ROUND(ACOS(K4)*57.29577,0)\"\n\"ROUND(AVERAGEA(B4:B23),2)\"\n\"MAXA(B4:B23)-MINA(B4:B23)\"\n\"ROUND(STDEVA(B4:B23),3)\"\n\"ROUND(VARA(B4:B23),3)\"\n\"COUNTA(B4:B23)\"\n\"ROUND((0.2227*B29+22.732),1)\"\n\"SQRT(0.9322)\"\n\"SUM(B5:D5)\"\n\"SUM(B5:B7)\"\n\"(B8/$E$8)\"\n\"B9*$E$5\"\n\"B9*$E$6\"\n\"B9*$E$7\"\n\"ROUND(((B5-B13)^2/B13),2)\"\n\"ROUND(SUM(B19:D21),2)\"\n\"(COUNTA(B13:D13)-1)*(COUNTA(B13:B15)-1)\"\n\"CHIDIST(B23,B24)\"\n\"ROUND(B6/B10,2)\"\n\"ROUND(B7/B10,2)\"\n\"ROUND(B8/B10,2)\"\n\"ROUND(B5/B10,2)\"\n\"ROUND(((B7-B8)/B10),2)\"\n\"ROUND(B5/B10,2)\"\n\"(B7-B8)*B6/(B7*B6)\"\n\"(B8*B6)/(B7*B6)\"\n\"(B12*B9)\"\n\"(B9/20)*(20-15*(B10/B6)+4*(B10^2/B6^2))\"\n\"(B13*B9*D11)+(B14*B9*D10)\"\n\"ROUND(SQRT(2*D14-D12-D13)*2,2)\"\n\"ROUND($B$6+NPV(C$5,$B7),0)\"\n\"ROUND($E$6+NPV(F$5,$E7),0)\"\n\"ROUND($B$6+NPV(C$5,$B$7:$B8),0)\"\n\"ROUND($E$6+NPV(F$5,$E$7:$E8),0)\"\n\"ROUND($B7*(1+C$5)^4,0)\"\n\"ROUND($E7*(1+F$5)^4,0)\"\n\"ROUND($B8*(1+C$5)^3,0)\"\n\"ROUND($E8*(1+F$5)^3,0)\"\n\"ROUND($B9*(1+C$5)^2,0)\"\n\"ROUND($E9*(1+F$5)^2,0)\"\n\"ROUND($B10*(1+C$5),0)\"\n\"ROUND($E10*(1+F$5),0)\"\n\"$B$11\"\n\"$E$11\"\n\"SUM(C14:C18)\"\n\"ROUND(((C19/ABS(B6))^(1/5)-1)*100,2)\"\n\"ROUND(((D19/ABS(B6))^(1/5)-1)*100,2)\"\n\"ROUND(100*IRR(B6:B11,C5),2)\"\n\"IF(AND(A3>0.001,B3>0.001),(A3-B3)^2,0)\"\n\"IF(OR(AND(AND(A3>0,B3>0),A3=B3),K1>0),1,0)\"\n\"IF(AND(A3>0.001,C3>0.001),(A3-C3)^2,0)\"\n\"IF(OR(AND(AND(A3>0,C3>0),A3=C3),AC1>0),1,0)\"\n\"IF(AND(A3>0.001,D3>0.001),(A3-D3)^2,0)\"\n\"IF(OR(AND(AND(A3>0,D3>0),A3=D3),AS1>0),1,0)\"\n\"IF(AND(A3>0.001,E3>0.001),(A3-E3)^2,0)\"\n\"IF(OR(AND(AND(A3>0,E3>0),A3=E3),BG1>0),1,0)\"\n\"IF(AND(A3>0.001,A4>0.001),(A3-A4)^2,0)\"\n\"IF(OR(AND(AND(A3>0,A4>0),A3=A4),K9>0),1,0)\"\n\"IF(AND(A3>0.001,A5>0.001),(A3-A5)^2,0)\"\n\"IF(OR(AND(AND(A3>0,A5>0),A3=A5),AE9>0),1,0)\"\n\"IF(AND(A3>0.001,A6>0.001),(A3-A6)^2,0)\"\n\"IF(OR(AND(AND(A3>0,A6>0),A3=A6),AY9>0),1,0)\"\n\"IF(AND(A3>0.001,A7>0.001),(A3-A7)^2,0)\"\n\"IF(OR(AND(AND(A3>0,A7>0),A3=A7),BS9>0),1,0)\"\n\"SUM(K1:S8)/(2*SUM(T1:AB8))\"\n\"SUM(K9:T15)/(2*SUM(U9:AD15))\"\n\"(SUM(T1:AB8)*B14+SUM(U9:AD15)*C14)/(SUM(T1:AB8)+SUM(U9:AD15))\"\n\"IF(A14<$B$19,$B$20*(((3*A14)/(2*$B$19))-(A14^3/(2*$B$19^3))),$B$20)\"\n\"SUM(AC1:AJ8)/(2*SUM(AK1:AR8))\"\n\"SUM(AE9:AN14)/(2*SUM(AO9:AX14))\"\n\"(SUM(AK1:AR8)*B15+SUM(AO9:AX14)*C15)/(SUM(AK1:AR8)+SUM(AO9:AX14))\"\n\"SUM(AS1:AY8)/(2*SUM(AZ1:BF8))\"\n\"SUM(AY9:BH13)/(2*SUM(BI9:BR13))\"\n\"(SUM(AZ1:BF8)*B16+SUM(BI9:BR13)*C16)/(SUM(AZ1:BF8)+SUM(BI9:BR13))\"\n\"SUM(BG1:BL8)/(2*SUM(BM1:BR8))\"\n\"SUM(BS9:CB12)/(2*SUM(CC9:CL12))\"\n\"(SUM(BM1:BR8)*B17+SUM(CC9:CL12)*C17)/(SUM(BM1:BR8)+SUM(CC9:CL12))\"\n\"ABS(B14-E14)+ABS(B15-E15)+ABS(B16-E16)+ABS(B17-E17)\"\n\"E18/E19\"\n\"IMABS(E5)\"\n\"D6/$J$2\"\n\"1/J6\"\n\"-($J$2-D38)/$J$2\"\n\"E82\"\n\"AVERAGE(B10:B81)\"\n\"F82\"\n\"1-E3/E5\"\n\"A*SIN(B*t+C_)+D+E*t\"\n\"(D10-B10)^2\"\n\"(B10-$E$4)^2\"\n\"SUM(E10:E81)\"\n\"B5-B6\"\n\"RAND()\"\n\"AVERAGE(B11,C11,D11,E11,F11,G11,H11,I11,J11,K11,L11,M11)\"\n\"B17*D17\"\n\"((Q/(2*PI()*SY*SZ*U))*EXP((-Y^2)/2*SIGy^2))*(EXP(-(Z_-h^2)/2*SIGz^2)+EXP(-(Z_+h^2)/2*SIGz^2))\"\n\"149.86-94.83*B7+25.47*B7*LN(B7)+220.9*B7-229*B3^3/2\"\n\"RAND()\"\n\"AVERAGE(B15:H15)\"\n\"TODAY()\"\n\"NOW()\"\n\" AVERAGE(B16:B32)\"\n\" STDEV(B16:B32)\"\n\"$C$7/A16/$C$8\"\n\"(200*F15/(G18 * F14))^2\"\n\"A500\"\n\"1+B7-A*A7^2\"\n\"B*A7\"\n\"IF(reset,1,(353.65-2*B8-5*B9)/14.6)\"\n\"IF(reset,1,(764.55-6.7*B9-3*B7)/17)\"\n\"IF(reset,1,(1038.85-9.5*B8-22.8*B7)/14)\"\n\"C14+relax*((353.65-2*C15-5*C16)/14.6-C14)\"\n\"IF(reset,1,B14)\"\n\"C15+relax*((764.55-6.7*C16-3*C14)/17-C15)\"\n\"C16+relax*((1038.85-9.5*C15-22.8*C14)/14-C16)\"\n\"D4/100\"\n\"$B$4*B7*(1-B7)\"\n\"B2*0.05\"\n\"1+A2\"\n\"B2+C2\"\n\"B4*$B$1\"\n\"1+A4\"\n\"B4+C4\"\n\"$B$1*(1-B5/$B$2)*B5\"\n\"1+A5\"\n\"B5+C5\"\n\"B15\"\n\"$B$1*(1-B5/$B$2)*B5\"\n\"1+A5\"\n\"B5+C5\"\n\"$B$1*(1-B6/$B$2)*B6\"\n\"A6+$B$3\"\n\"B6+$B$3*C6\"\n\"B7*($B$1-$B$2*C7)\"\n\"C7*(-$B$3+$B$4*B7)\"\n\"1+A7\"\n\"B7+D7\"\n\"SQRT(B4^2+C4^2)\"\n\"-$B$1*B4/F4^3\"\n\"-$B$1*C4/F4^3\"\n\"1+A4\"\n\"B4+D4\"\n\"D4+G4\"\n\"SQRT(B4^2+C4^2)\"\n\"-$B$1*B4/F4^3\"\n\"-$B$1*C4/F4^3\"\n\"1+A4\"\n\"B4+D4\"\n\"D4+G5\"\n\"MDETERM(B8:D10)\"\n\"MINVERSE(B8:D10)\"\n\"MMULT(B13:D15,F8:F10)\"\n\"LOOKUP(A3,$F$5:$F$24,$G$5:$G$24)\"\n\"OFFSET($G$5,B3,$F$3,1,1)\"\n\"--2.5\"\n\"AVERAGE(C3:C22)\"\n\"0.004/(1+E20/E11+E21/E11^2)\"\n\"B8*E20/E11\"\n\"B8*E21/E11^2\"\n\"10^-C1\"\n\"E3/(E7*E9)\"\n\"E4/(E7*E9^2)\"\n\"E5/(E7*E10)\"\n\"10^-11.52\"\n\"E6*E11/E7\"\n\"E3+E4+E5+E6+E7\"\n\"10^-6.33\"\n\"E9*E11/E8\"\n\"10^-(6.33+10.27)\"\n\"E10*E11^2/E8\"\n\"4*10^-3\"\n\"E3+E4+E5+E9+E10+E8\"\n\"LOG(B2)\"\n\"100-C7-D7-E7-F7-G7\"\n\"M9/55.85+D7/54.93+E7/92.91+F7/47.9+C7/12.01+G7/14.01\"\n\"C7/12.01/N9\"\n\"G7/14.01/N9\"\n\"E7/92.91/N9\"\n\"F7/47.9/N9\"\n\"2*(O12+P12)\"\n\"2*(M12+N12)\"\n\"MIN(R12,R13)\"\n\"2*(O12+P12)\"\n\"N15+273\"\n\"-4260/4.18/1.986/O15\"\n\"(O12-N6/2*M6)/M21\"\n\"(O12*M12)/(E7*C7)*(10^((-6770/O15)+2.26))\"\n\"(O12*N12)/(E7*G7)*(10^((-10230/O15)+4.04))\"\n\"(P12*M12)/(F7*C7)*(10^((-7000/O15)+2.75))\"\n\"(P12*N12)/(F7*G7)*(10^((-8000/O15)+0.322))\"\n\"(P12-N21/2*M6)/M21\"\n\"(M12-O6/2*M6)/M21\"\n\"(N12-O21/2*M6)/M21\"\n\"1-M6\"\n\"N6*LN(ABS(N6*O6*M18/S17/S19))+N21*LN(ABS(O6*N21*O18/S18/S19))+P15*O21^2\"\n\"O6*LN(ABS(N6*O6*M18/S17/S19))+O21*LN(ABS(N6*O21*N18/S17/S20))+P15*O6*O21\"\n\"N6*LN(ABS(N6*O21*N18/S17/S20))+N21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6^2\"\n\"O6*LN(ABS(O6*N21*O18/S18/S19))+O21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6*O21\"\n\"M24*M24+N24*N24+O24*O24+P24*P24\"\n\"100-C7-D7-E7-F7-G7\"\n\"M9/55.85+D7/54.93+E7/92.91+F7/47.9+C7/12.01+G7/14.01\"\n\"C7/12.01/N9\"\n\"G7/14.01/N9\"\n\"E7/92.91/N9\"\n\"F7/47.9/N9\"\n\"2*(O12+P12)\"\n\"2*(M12+N12)\"\n\"MIN(R12,R13)\"\n\"2*(O12+P12)\"\n\"N15+273\"\n\"-4260/4.18/1.986/O15\"\n\"(O12-N6/2*M6)/M21\"\n\"(O12*M12)/(E7*C7)*(10^((-6770/O15)+2.26))\"\n\"(O12*N12)/(E7*G7)*(10^((-10230/O15)+4.04))\"\n\"(P12*M12)/(F7*C7)*(10^((-7000/O15)+2.75))\"\n\"(P12*N12)/(F7*G7)*(10^((-8000/O15)+0.322))\"\n\"(P12-N21/2*M6)/M21\"\n\"(M12-O6/2*M6)/M21\"\n\"(N12-O21/2*M6)/M21\"\n\"1-M6\"\n\"N6*LN(ABS(N6*O6*M18/S17/S19))+N21*LN(ABS(O6*N21*O18/S18/S19))+P15*O21^2\"\n\"O6*LN(ABS(N6*O6*M18/S17/S19))+O21*LN(ABS(N6*O21*N18/S17/S20))+P15*O6*O21\"\n\"N6*LN(ABS(N6*O21*N18/S17/S20))+N21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6^2\"\n\"O6*LN(ABS(O6*N21*O18/S18/S19))+O21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6*O21\"\n\"M24*M24+N24*N24+O24*O24+P24*P24\"\n\"TODAY()\"\n\"NOW()\"\n\"100-C7-D7-E7-F7-G7\"\n\"M9/55.85+D7/54.93+E7/92.91+F7/47.9+C7/12.01+G7/14.01\"\n\"C7/12.01/N9\"\n\"G7/14.01/N9\"\n\"E7/92.91/N9\"\n\"F7/47.9/N9\"\n\"2*(O12+P12)\"\n\"2*(M12+N12)\"\n\"MIN(R12,R13)\"\n\"2*(O12+P12)\"\n\"N15+273\"\n\"-4260/4.18/1.986/O15\"\n\"(O12-N6/2*M6)/M21\"\n\"(O12*M12)/(E7*C7)*(10^((-6770/O15)+2.26))\"\n\"(O12*N12)/(E7*G7)*(10^((-10230/O15)+4.04))\"\n\"(P12*M12)/(F7*C7)*(10^((-7000/O15)+2.75))\"\n\"(P12*N12)/(F7*G7)*(10^((-8000/O15)+0.322))\"\n\"(P12-N21/2*M6)/M21\"\n\"(M12-O6/2*M6)/M21\"\n\"(N12-O21/2*M6)/M21\"\n\"1-M6\"\n\"N6*LN(ABS(N6*O6*M18/S17/S19))+N21*LN(ABS(O6*N21*O18/S18/S19))+P15*O21^2\"\n\"O6*LN(ABS(N6*O6*M18/S17/S19))+O21*LN(ABS(N6*O21*N18/S17/S20))+P15*O6*O21\"\n\"N6*LN(ABS(N6*O21*N18/S17/S20))+N21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6^2\"\n\"O6*LN(ABS(O6*N21*O18/S18/S19))+O21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6*O21\"\n\"M24*M24+N24*N24+O24*O24+P24*P24\"\n\"TODAY()\"\n\"NOW()\"\n\"100-C7-D7-E7-F7-G7\"\n\"M9/55.85+D7/54.93+E7/92.91+F7/47.9+C7/12.01+G7/14.01\"\n\"C7/12.01/N9\"\n\"G7/14.01/N9\"\n\"E7/92.91/N9\"\n\"F7/47.9/N9\"\n\"2*(O12+P12)\"\n\"2*(M12+N12)\"\n\"MIN(R12,R13)\"\n\"2*(O12+P12)\"\n\"N15+273\"\n\"-4260/4.18/1.986/O15\"\n\"(O12-N6/2*M6)/M21\"\n\"(O12*M12)/(E7*C7)*(10^((-6770/O15)+2.26))\"\n\"(O12*N12)/(E7*G7)*(10^((-10230/O15)+4.04))\"\n\"(P12*M12)/(F7*C7)*(10^((-7000/O15)+2.75))\"\n\"(P12*N12)/(F7*G7)*(10^((-8000/O15)+0.322))\"\n\"(P12-N21/2*M6)/M21\"\n\"(M12-O6/2*M6)/M21\"\n\"(N12-O21/2*M6)/M21\"\n\"1-M6\"\n\"N6*LN(ABS(N6*O6*M18/S17/S19))+N21*LN(ABS(O6*N21*O18/S18/S19))+P15*O21^2\"\n\"O6*LN(ABS(N6*O6*M18/S17/S19))+O21*LN(ABS(N6*O21*N18/S17/S20))+P15*O6*O21\"\n\"N6*LN(ABS(N6*O21*N18/S17/S20))+N21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6^2\"\n\"O6*LN(ABS(O6*N21*O18/S18/S19))+O21*LN(ABS(N21*O21*P18/S18/S20))+P15*O6*O21\"\n\"M24*M24+N24*N24+O24*O24+P24*P24\"\n\"(2*PI()*h*c_^2/($A10^5))*1/(EXP(h*c_/($A10*k*B$9))-1)\"\n\"PlanckBB($A10,B$9)\"\n\"(2*PI()*h*c_^2/(B7^5))*1/(EXP(h*c_/(B7*k*B6))-1)\"\n\"C9\"\n\"D8\"\n\"(C7+D8+C9+B8)/4\"\n\"V1_\"\n\"V2_\"\n\"N8\"\n\"C18\"\n\"-(Potential!D8-Potential!B8)/(2*h)\"\n\"-(Potential!C9-Potential!C7)/(2*h_)\"\n\"TODAY()\"\n\"NOW()\"\n\"TODAY()\"\n\"NOW()\"\n\"INTERCEPT(E15:E20, A15:A20)\"\n\"INTERCEPT(F15:F20, A15:A20)\"\n\"(INTERCEPT(E15:E20, A15:A20) + INTERCEPT(F15:F20, A15:A20))/2\"\n\"B15/$E$8\"\n\"(B15-$E$8)/$E$8\"\n\"D15/A15\"\n\"LN(C15)/A15\"\n\"(H14/0.00048)^2\"\n\"TODAY()\"\n\"NOW()\"\n\" AVERAGE(B16:B25)\"\n\" STDEV(B16:B25)\"\n\"A16/$C$7\"\n\"(200*F15/(G18 * F14))^2\"\n\"IF(DEPTNAME=AB43,\"\"\"\",DEPTNAME&\"\" (\"\"&VLOOKUP(DEPTNAME,List,2,FALSE)&\"\")\"\")\"\n\"IF(H12=\"\"\"\",\"\"\"\",VLOOKUP(DEPTNAME,List,4,FALSE))\"\n\"IF(H13=\"\"\"\",\"\"\"\",VLOOKUP(DEPTNAME,List,6,FALSE))\"\n\"IF(H12=\"\"\"\",\"\"\"\",VLOOKUP(DEPTNAME,List,5,FALSE)&\"\"@umich.edu\"\")\"\n\"'Department assignments'!A1\"\n\"'Department assignments'!A136\"\n\"SUM(D22:D24)\"\n\"SUM(D26:D30)\"\n\"+D20+D21+D25\"\n\"D19\"\n\"SUM(D34:D37)\"\n\"D38+D33\"\n\"E33+E38\"\n\"D19\"\n\"D47+D48+D49-D50-D51-D52\"\n\"+D53-D54\"\n\"+D55+D56-D57-D58\"\n\"+D59+D60-D61\"\n\"DATE(2003,8,12)\"\n\"IF(D6=\"\"\"\", \"\"please enter college code in cell D6\"\", \"\"\"\")\"\n\"IF(D7=\"\"\"\", \"\"please enter college name in cell D7\"\", \"\"\"\")\"\n\"IF(D8=\"\"\"\", \"\"please enter payment code in cell D8\"\", \"\"\"\")\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'SCHED 1A'!F40\"\n\"'SCHED 2'!F47+'SCHED 2'!F50\"\n\"'SCHED 1B'!F29\"\n\"'SCHED 2'!F48\"\n\"SUM(E11:E18)\"\n\"SUM(E20:E28)\"\n\"SUM(E30:E32)\"\n\"'SCHED 2'!F49\"\n\"SUM(E34:E39)\"\n\"SUM(E41:E42)\"\n\"SUM(E43,E40,E33,E29,E19)\"\n\"'FORM 2B'!F29\"\n\"E44-E45+'FORM 2A'!F27\"\n\"E44-E45\"\n\"-'SCHED 12'!F14\"\n\"E47+E48\"\n\"E49\"\n\"'SCHED 11'!F17+'SCHED 11'!F18+'SCHED 11'!F47+'SCHED 11'!F48\"\n\"E62\"\n\"SUM(E58:E61)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'SCHED 5'!F13+'SCHED 5'!F29+'SCHED 5'!F39\"\n\"'SCHED 8'!F23\"\n\"SUM(F11:F27)\"\n\"IF(F31=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2002/2003\"\",IF(G31=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2003/2004\"\",IF(H31=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2004/2005\"\",IF(I31=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2005/2006\"\",\"\"\"\"))))\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"SUM(F11:F23)\"\n\"'SCHED 8'!F22\"\n\"F24+F25+F26\"\n\"'FORM 2A'!F28\"\n\"F28+F27\"\n\"IF(AND(('SCHED 10'!F15+'SCHED 10'!G15+'SCHED 10'!H15+'SCHED 10'!I15)<=(F27+G27+H27+I27+1),('SCHED 10'!F15+'SCHED 10'!G15+'SCHED 10'!H15+'SCHED 10'!I15)>=(F27+G27+H27+I27-1)),\"\"\"\",\"\"Analysis of pay costs does not equal total pay\"\")\"\n\"IF(AND((G27+H27+I27)<=('FORM 5'!G24+'FORM 5'!H24+'FORM 5'!I24+5),(G27+H27+I27)>=('FORM 5'!G24+'FORM 5'!H24+'FORM 5'!I24-5)),\"\"\"\",\"\"Total pay expenditure on form 2B and on form 5 are not equal\"\")\"\n\"IF(AND((G28+H28+I28)<=('FORM 5'!G15+'FORM 5'!H15+'FORM 5'!I15+5),(G28+H28+I28)>=('FORM 5'!G15+'FORM 5'!H15+'FORM 5'!I15-5)),\"\"\"\",\"\"Total non pay expenditure on form 2a and on form 5 are not equal\"\")\"\n\"IF(F31=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2002/2003\"\",IF(G31=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2003/2004\"\",IF(H31=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2004/2005\"\",IF(I31=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2005/2006\"\",\"\"\"\"))))\"\n\"IF(F32=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2002/2003\"\",IF(G32=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2003/2004\"\",IF(H32=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2004/2005\"\",IF(I32=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2005/2006\"\",\"\"\"\"))))\"\n\"'FORM 1'!E9\"\n\"D11-'SCHED 3'!F13+'SCHED 3'!F14-'SCHED 5'!F11+'SCHED 11'!F19+'SCHED 11'!F12\"\n\"D12-'SCHED 3'!F19+'SCHED 3'!F20+'SCHED 4'!F11-'SCHED 5'!F15-'SCHED 5'!F16-'SCHED 5'!F17-'SCHED 5'!F18-'SCHED 5'!F19-'SCHED 5'!F20+'SCHED 11'!F20+'SCHED 11'!F23\"\n\"D13-'SCHED 3'!F25+'SCHED 3'!F26+'SCHED 4'!F16-'SCHED 5'!F31-'SCHED 5'!F32+'SCHED 11'!F31\"\n\"D14-'SCHED 3'!F31+'SCHED 3'!F32-'SCHED 5'!F12+'SCHED 11'!F14\"\n\"D15-'SCHED 3'!F37+'SCHED 3'!F38+'SCHED 4'!F19-'SCHED 5'!F21-'SCHED 5'!F22-'SCHED 5'!F23-'SCHED 5'!F24-'SCHED 5'!F25-'SCHED 5'!F26+'SCHED 11'!F27\"\n\"D16-'SCHED 3'!F43+'SCHED 3'!F44+'SCHED 4'!F24-'SCHED 5'!F33-'SCHED 5'!F34+'SCHED 11'!F35\"\n\"D17-'SCHED 3'!F49+'SCHED 4'!F27+'SCHED 11'!F39\"\n\"D18-'SCHED 3'!F54+'SCHED 3'!F55+'SCHED 4'!F32-'SCHED 5'!F35-'SCHED 5'!F36+'SCHED 11'!F43\"\n\"SUM(D11:D18)\"\n\"'SCHED 6'!E19\"\n\"D21+D22+D24+D25\"\n\"'SCHED 7'!E11\"\n\"'SCHED 7'!E19\"\n\"'SCHED 7'!E27\"\n\"'SCHED 7'!E33\"\n\"'SCHED 7'!E40+'SCHED 7'!E49\"\n\"SUM(D28:D34)\"\n\"D26-D35\"\n\"D37+D19\"\n\"'SCHED 7'!E20\"\n\"'SCHED 7'!E28\"\n\"'SCHED 7'!E41+'SCHED 7'!E50\"\n\"SUM(D41:D43)\"\n\"'SCHED 8'!E25+'SCHED 8'!E31\"\n\"D39-D44-D46\"\n\"'SCHED 8'!E18\"\n\"'SCHED 11'!F50\"\n\"D53-'FORM 1'!E60\"\n\"'FORM 1'!E58\"\n\"'FORM 1'!E62\"\n\"D52+D53+D54+D55\"\n\"(D50+D57)\"\n\"IF(AND((D48+E48+F48+G48+H48)<=(D59+E59+F59+G59+H59+5),(D48+E48+F48+G48+H48)>=(D59+E59+F59+G59+H59-5)),\"\"\"\",\"\"Balance sheet does not balance\"\")\"\n\"IF(AND('FORM 5'!F29=\"\"N\"\", D11+E11+F11+G11+H11+D14+E14+F14+G14+H14<>D52+E52+F52+G52+H52),\"\"WARNING, total of inherited assets does not equal balance on revaluation reserve\"\",\"\"\"\")\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'SCHED 12'!F24\"\n\"'FORM 1'!E42+'SCHED 6'!E14-'SCHED 6'!F14\"\n\"-('FORM 2A'!F26+'SCHED 7'!E45-'SCHED 7'!F45-'SCHED 9'!F12)\"\n\"-'SCHED 9'!F12\"\n\"SUM(F14:F16)\"\n\"-('SCHED 4'!F11+'SCHED 4'!F14+'SCHED 4'!F19+'SCHED 4'!F22+'SCHED 4'!F27+'SCHED 4'!F30-'SCHED 2'!F25)\"\n\"'SCHED 3'!F11+'SCHED 3'!F17+'SCHED 3'!F23+'SCHED 3'!F29+'SCHED 3'!F35+'SCHED 3'!F41+'SCHED 3'!F47+'SCHED 3'!F52\"\n\"'SCHED 2'!F16+'SCHED 2'!F26+'SCHED 2'!F34+'SCHED 2'!F44\"\n\"F28+F29\"\n\"'SCHED 7'!F14\"\n\"-'SCHED 7'!F16\"\n\"-'SCHED 7'!F24\"\n\"-'SCHED 7'!F37\"\n\"SUM(F33:F37)\"\n\"F11+F17+F19+F25+F30+F38\"\n\"F40\"\n\"('SCHED 7'!F16+'SCHED 7'!F24+'SCHED 7'!F37)\"\n\"-F30\"\n\"-('SCHED 7'!F14+'SCHED 7'!F15+'SCHED 7'!F36)\"\n\"SUM(F43:F46)\"\n\"'SCHED 13'!E16\"\n\"'SCHED 13'!F16\"\n\"IF(AND(F47+F48<=F49+10,F47+F48>=F49-10),\"\"\"\",\"\"cashflow statement does not balance for 2002-03\"\")\"\n\"IF(AND(G47+G48<=G49+10,G47+G48>=G49-10),\"\"\"\",\"\"cashflow statement does not balance for 2003-04\"\")\"\n\"IF(AND(H47+H48<=H49+10,H47+H48>=H49-10),\"\"\"\",\"\"cashflow statement does not balance for 2004-05\"\")\"\n\"IF(AND(I47+I48<=I49+10,I47+I48>=I49-10),\"\"\"\",\"\"cashflow statement does not balance for 2005-06\"\")\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!F9\"\n\"'FORM 2A'!F28-'FORM 2A'!F24-'FORM 2A'!F25-'FORM 2A'!F26-'FORM 2A'!F27\"\n\"'FORM 2A'!G24+'FORM 2A'!G25+'FORM 2A'!G26+'FORM 2A'!G27\"\n\"SUM(G11:G14)\"\n\"IF(G11=0,0,G13/G11)\"\n\"'FORM 2B'!F27-'FORM 2B'!F26-'FORM 2B'!F25-'FORM 2B'!F23\"\n\"'FORM 2B'!G25+'FORM 2B'!G26+'FORM 2B'!G23\"\n\"G20+G21+G22+G23\"\n\"IF(F29=A61,\"\" \"\",IF(F29=A62,\"\" \"\",\"\"Please Insert Y or N\"\"))\"\n\"IF('Indicative Health Group'!B30>168,\"\"A\"\",IF('Indicative Health Group'!B30>84,\"\"B\"\",IF('Indicative Health Group'!B30<=84,\"\"C\"\",\"\" \"\")))\"\n\"IF(F33=A58,\"\"\"\",IF(F33=A59,\"\"\"\",IF(F33=A60,\"\"\"\",\"\"Please assign college to health group A, B or C\"\")))\"\n\"IF(F37=A61,\"\"\"\",IF(F37=A62,\"\"\"\",\"\"Please insert Y or N\"\"))\"\n\"IF(F39=A61, \"\" \"\", IF(F39=A62, \"\" \"\", \"\"Please insert  Y or N\"\"))\"\n\"IF(F29=\"\"\"\", \"\"Line 13 is incomplete\"\", IF(F33=\"\"\"\", \"\"Line 15 is incomplete\"\", IF(F37=\"\"\"\", \"\"Line 16 is incomplete\"\", IF(F39=\"\"\"\", \"\"Line 17 is incomplete\"\", \"\"\"\"))))\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"(G27*G29*G31)+(G19*G29*G31)\"\n\"SUM(G15:G18)\"\n\"SUM(F22:F26)\"\n\"IF(F12=0,\"\"0\"\",F12/F46*1000)\"\n\"F12-F37-F38\"\n\"F44+F45\"\n\"IF(F44=\"\"\"\",\"\"Please enter forecast FTEs,16-18 full time for 2002/03\"\",IF(G44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2003/2004\"\",IF(H44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2004/2005\"\",IF(I44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2005/2006\"\",\"\"\"\"))))\"\n\"IF(F45=\"\"\"\",\"\"Please enter forecast FTEs, other for 2002/2003\"\",IF(G45=\"\"\"\",\"\"Please enter forecast FTEs, other for 2003/2004\"\",IF(H45=\"\"\"\",\"\"Please enter forecast FTEs other for 2004/2005\"\",IF(I45=\"\"\"\",\"\"Please enter forecast FTEs other for 2005/2006\"\",\"\"\"\"))))\"\n\"IF(F48=\"\"\"\",\"\"Please enter franchised provision funds for 2002/2003, if applicable\"\",IF(G48=\"\"\"\",\"\"Please enter franchised provision funds for 2003/2004, if applicable\"\",IF(H48=\"\"\"\",\"\"Please enter franchised provision funds for 2004/2005, if applicable\"\",IF(I48=\"\"\"\",\"\"Please enter franchised provision funds for 2005/2006\"\",\"\"\"\"))))\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"IF(B26=\"\"\"\",\"\"PLEASE ENTER ANY OTHER LSC INCOME TYPES IN LINES 14, 15\"\",\"\"\"\")\"\n\"SUM(F12:F28)\"\n\"SUM(F37:F40)\"\n\"SUM(F45:F46)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"F11+F12-F13-F14+F15\"\n\"F19+F20+F21-F22-F23+F24+F25\"\n\"F37+F38+F39+F40-F41-F42+F43\"\n\"'SCHED 5'!F15+'SCHED 5'!F21\"\n\"'SCHED 5'!F17+'SCHED 5'!F23\"\n\"F39+'SCHED 5'!F19+'SCHED 5'!F25\"\n\"'SCHED 3'!F19-'SCHED 3'!F20+'SCHED 3'!F37-'SCHED 3'!F38\"\n\"SUM(F47:F50)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'SCHED 2'!F19+'SCHED 2'!F29+'SCHED 2'!F37+'SCHED 2'!F25\"\n\"SUM(F14:F15)-'SCHED 2'!F25\"\n\"'SCHED 2'!F11+'SCHED 2'!F20+'SCHED 2'!F38\"\n\"SUM(F22:F23)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"SUM(F11:F12)\"\n\"F15+F17+F19+F21+F23+F25\"\n\"+F16+F18+F20+F22+F24+F26\"\n\"+G16+G20+G22+G26\"\n\"SUM(F31,F33,F35)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 3'!D9\"\n\"'FORM 1'!E9\"\n\"E12+'SCHED 2'!F13+'SCHED 2'!F22+'SCHED 2'!F31-'SCHED 2'!F15-'SCHED 2'!F24-'SCHED 2'!F33\"\n\"E13+'SCHED 2'!F41-'SCHED 2'!F43\"\n\"SUM(E11:E18)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 3'!D9\"\n\"'FORM 1'!E9\"\n\"E17\"\n\"E13+E14+E15-E16\"\n\"E19+E20\"\n\"IF((E17+F17+G17+H17+I17)<>(E21+F21+G21+H21+I21),\"\"ERROR - value V must equal Viii\"\",\"\"\"\")\"\n\"E25\"\n\"E23-E24\"\n\"E28+E27\"\n\"IF((E25+F25+G25+H25+I25)<>(E29+F29+G29+H29+I29),\"\"ERROR - value 2c must equal 2f\"\",\"\"\"\")\"\n\"E31+'SCHED 2'!F12+'SCHED 2'!F21+'SCHED 2'!F30+'SCHED 2'!F40-'SCHED 2'!F14-'SCHED 2'!F23-'SCHED 2'!F32-'SCHED 2'!F42\"\n\"E35+E36-E37\"\n\"E36+E35-E37\"\n\"IF((E38+F38+G38+H38+I38)<>(E42+F42+G42+H42+I42),\"\"ERROR - value 4d must equal 4g\"\",\"\"\"\")\"\n\"E44+E45+E46\"\n\"IF((E47+F47+G47+H47+I47)<>(E51+F51+G51+H51+I51),\"\"ERROR - value 5d must equal 5g\"\",\"\"\"\")\"\n\"IF(AND((E17+F17+G17+H17+I17)<=(E21+F21+G21+H21+I21+1),(E17+F17+G17+H17+I17+1)>=(E21+F21+G21+H21+I21-1)),\"\"\"\",\"\"Analysis of loans falling due within and after one year does not equal total loans\"\")\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 3'!D9\"\n\"'FORM 1'!E9\"\n\"E18\"\n\"'SCHED 2'!F16+'SCHED 2'!F26+'SCHED 2'!F34+'SCHED 2'!F44\"\n\"'SCHED 6'!E12+'SCHED 6'!E13\"\n\"'SCHED 2'!F13+'SCHED 2'!F22+'SCHED 2'!F31+'SCHED 2'!F41\"\n\"'SCHED 7'!E31\"\n\"'SCHED 2'!F12+'SCHED 2'!F21+'SCHED 2'!F30+'SCHED 2'!F40\"\n\"'SCHED 2'!F51\"\n\"E11+E12+E13-E14-E15+E16-E17\"\n\"E25\"\n\"E21+E22+E23-E24\"\n\"E31\"\n\"E28+E29-E30\"\n\"IF(OR(E25>-1,F25>-1,G25>-1,H25>-1,I25>-1),\"\"\"\",\"\"Insufficient SSAP24 provision made to allow for release of provision\"\")\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'SCHED 7'!F37\"\n\"F13-F11\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"('FORM 2B'!F23)\"\n\"'FORM 2B'!F25+'FORM 2B'!F26\"\n\"F14+F13+F12+F11\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"$F$11+$F$12\"\n\"$G$11+$G$12\"\n\"$H$11+$H$12\"\n\"$F$13+$F$14\"\n\"$G$13+$G$14\"\n\"$H$13+$H$14\"\n\"SUM(F11:F14)\"\n\"F16+F17+F18-F19-F20\"\n\"'SCHED 5'!F13\"\n\"('SCHED 3'!F13-'SCHED 3'!F14)+('SCHED 3'!F31-'SCHED 3'!F32)\"\n\"F22+F23\"\n\"SUM(F22:F23)\"\n\"SUM(F26:F27)\"\n\"F46+F47+F48-F49\"\n\"'SCHED 5'!F28+'SCHED 5'!F38\"\n\"F15-F16-F17-F18+F19+F20+F24+F28+F32+F36+F40+F44-F46-F47-F48+F49\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'FORM 1'!E49\"\n\"'SCHED 5'!F13+'SCHED 5'!F29+'SCHED 5'!F39\"\n\"-'SCHED 2'!F51\"\n\"-('SCHED 3'!F11-'SCHED 3'!F13+'SCHED 3'!F14)-('SCHED 3'!F17-'SCHED 3'!F19+'SCHED 3'!F20)-('SCHED 3'!F23-'SCHED 3'!F25+'SCHED 3'!F26)-('SCHED 3'!F29-'SCHED 3'!F31+'SCHED 3'!F32)-('SCHED 3'!F35-'SCHED 3'!F37+'SCHED 3'!F38)-('SCHED 3'!F41-'SCHED 3'!F43+'SCHED 3'!F44)-('SCHED 3'!F52-'SCHED 3'!F54+'SCHED 3'!F55)-('SCHED 3'!F47-'SCHED 3'!F49)\"\n\"-('SCHED 3'!G11-'SCHED 3'!G13+'SCHED 3'!G14)-('SCHED 3'!G17-'SCHED 3'!G19+'SCHED 3'!G20)-('SCHED 3'!G23-'SCHED 3'!G25+'SCHED 3'!G26)-('SCHED 3'!G29-'SCHED 3'!G31+'SCHED 3'!G32)-('SCHED 3'!G35-'SCHED 3'!G37+'SCHED 3'!G38)-('SCHED 3'!G41-'SCHED 3'!G43+'SCHED 3'!G44)-('SCHED 3'!G52-'SCHED 3'!G54+'SCHED 3'!G55)\"\n\"'FORM 3'!D21-'FORM 3'!E21\"\n\"'FORM 2A'!F26\"\n\"('SCHED 6'!E11+'SCHED 6'!E15+'SCHED 6'!E16+'SCHED 6'!E17+'SCHED 6'!E18)-('SCHED 6'!F11+'SCHED 6'!F15+'SCHED 6'!F16+'SCHED 6'!F17+'SCHED 6'!F18)\"\n\"'FORM 3'!E31-'FORM 3'!D31\"\n\"'SCHED 7'!F32-'SCHED 7'!E32\"\n\"('SCHED 7'!F44+'SCHED 7'!F46)-('SCHED 7'!E44+'SCHED 7'!E46)\"\n\"'FORM 3'!E46-'FORM 3'!D46\"\n\"-'FORM 1'!E42\"\n\"SUM(F11:F23)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 3'!D9\"\n\"'FORM 1'!E9\"\n\"'FORM 3'!D24+'FORM 3'!D25\"\n\"-'SCHED 7'!E11\"\n\"SUM(E11:E12)\"\n\"-('SCHED 7'!E19+'SCHED 7'!E27+'SCHED 7'!E40)\"\n\"E13+E14+E15\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"'FORM 1'!E44-'FORM 1'!E13\"\n\"IF(F11=0,0,(('FORM 3'!E24+'FORM 3'!E25-'FORM 3'!E28)/F11)*365)\"\n\"IF('FORM 3'!E35=0,0,'FORM 3'!E26/'FORM 3'!E35)\"\n\"IF(('FORM 1'!E44-'FORM 1'!E11-'FORM 1'!E12-'FORM 1'!E14-'FORM 1'!E13-'FORM 1'!E15-'FORM 1'!E16-'FORM 1'!E17-'FORM 1'!E18-'FORM 1'!E42)=0,0,('SCHED 6'!F15+'SCHED 6'!F16+'SCHED 6'!F17+'SCHED 6'!F18)/('FORM 1'!E44-'FORM 1'!E11-'FORM 1'!E12-'FORM 1'!E13-'FORM 1'!E14-'FORM 1'!E15-'FORM 1'!E16-'FORM 1'!E17-'FORM 1'!E18-'FORM 1'!E42)*365)\"\n\"IF(('FORM 2A'!F28-'FORM 2A'!F25-'FORM 2A'!F26-'FORM 2A'!F24)=0,0,'FORM 3'!E31/('FORM 2A'!F28-'FORM 2A'!F26-'FORM 2A'!F24-'FORM 2A'!F25)*365)\"\n\"IF('FORM 3'!E35=0,0,('FORM 3'!E26-'FORM 3'!E21)/'FORM 3'!E35)\"\n\"IF(F11=0,0,'FORM 4'!F11/F11)\"\n\"IF(F11=0,0,-('FORM 4'!F35+'FORM 4'!F36+'FORM 4'!F15+'FORM 4'!F16)/F11)\"\n\"IF(F11=0,0,('SCHED 7'!F11+'SCHED 7'!F21+'SCHED 7'!F29)/F11)\"\n\"IF('FORM 3'!E57-'FORM 3'!E52=0,0,('SCHED 7'!F11+'SCHED 7'!F21+'SCHED 7'!F29)/('FORM 3'!E57-'FORM 3'!E52))\"\n\"IF(F11=0,0,'FORM 1'!E47/F11)\"\n\"IF(F11=0,0,'FORM 1'!E55/F11)\"\n\"IF(F11=0,0,('FORM 3'!E54+'FORM 3'!E55)/F11)\"\n\"IF(F11=0,0,('FORM 3'!E57-'FORM 3'!E52)/F11)\"\n\"IF('SCHED 1A'!F46=0,0,('SCHED 1A'!F34))\"\n\"IF(F35=0,0,(G35/F35)-1)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!E9\"\n\"IF('SCHED 14A'!F11=0,0,('SCHED 14A'!G11/'SCHED 14A'!F11)-1)\"\n\"IF('SCHED 14A'!F11=0,0,('FORM 1'!E11+'FORM 1'!E12+'FORM 1'!E14)/'SCHED 14A'!F11)\"\n\"IF('SCHED 14A'!F11=0,0,('FORM 1'!E30-'FORM 1'!E31)/'SCHED 14A'!F11)\"\n\"IF('SCHED 14A'!F11=0,0,('FORM 1'!E15+'FORM 1'!E16+'FORM 1'!E17+'FORM 1'!E18+'FORM 1'!E23)/'SCHED 14A'!F11)\"\n\"IF('SCHED 14A'!F11=0,0,('FORM 1'!E20+'FORM 1'!E21+'FORM 1'!E22+'FORM 1'!E24+'FORM 1'!E25+'FORM 1'!E26+'FORM 1'!E27+'FORM 1'!E28+'FORM 1'!E32+'FORM 1'!E34+'FORM 1'!E35+'FORM 1'!E36+'FORM 1'!E37+'FORM 1'!E38+'FORM 1'!E39+'FORM 1'!E41+'FORM 1'!E42)/'SCHED 14A'!F11)\"\n\"('SCHED 1A'!F48*'SCHED 1A'!F29)-('FORM 2A'!F22+'FORM 2B'!F21)\"\n\"'FORM 1'!E34-'FORM 2A'!F19-'FORM 2B'!F18\"\n\"'FORM 1'!E36-'FORM 2A'!F20-'FORM 2B'!F19\"\n\"'FORM 1'!E35-'FORM 2A'!F21-'FORM 2B'!F20\"\n\"IF('SCHED 14A'!F11=0,0,'FORM 2B'!F24/'SCHED 14A'!F11)\"\n\"IF('SCHED 14A'!F11=0,0,(('FORM 2B'!F24-'FORM 2B'!F23)/'SCHED 14A'!F11))\"\n\"IF('SCHED 10'!F15=0,0,'SCHED 10'!F11/'SCHED 10'!F15)\"\n\"IF('FORM 2B'!F27=0,0,('FORM 2B'!G24/'FORM 2B'!F24)-1)\"\n\"IF('FORM 2B'!F29=0,0,('FORM 2A'!F14+'FORM 2B'!F15)/'FORM 2B'!F29)\"\n\"IF('FORM 2B'!F28=0,0,('FORM 2B'!G28/'FORM 2B'!F28)-1)\"\n\"IF('FORM 2A'!F31=0,0,('FORM 2A'!F16+'FORM 2A'!F17+'FORM 2A'!F18+'FORM 2B'!F16+'FORM 2B'!F17)*1000/'FORM 2A'!F31)\"\n\"IF('FORM 3'!E57=0,0,'SCHED 14A'!F11/'FORM 3'!E57)\"\n\"IF('FORM 2B'!F31=0,0,('FORM 2B'!F11)/'FORM 2B'!F31)\"\n\"IF('FORM 2B'!F32=0,0,(('FORM 2B'!F24-'FORM 2B'!F11-'FORM 2B'!F23))/'FORM 2B'!F32)\"\n\"IF('SCHED 1A'!F44=0,0,(('FORM 2B'!F11+'FORM 2B'!F23)/('SCHED 1A'!F44+'SCHED 1A'!F45)))\"\n\"IF('SCHED 1A'!F44=0,0,((SUM('FORM 2B'!F12:F22))/('SCHED 1A'!F44+'SCHED 1A'!F45)))\"\n\"IF('FORM 2B'!F31=0,0,(('SCHED 1A'!F44+'SCHED 1A'!F45)/'FORM 2B'!F31))\"\n\"IF('SCHED 1A'!F44=0,0,('FORM 2B'!F29/('SCHED 1A'!F44+'SCHED 1A'!F45)))\"\n\"IF('FORM 2A'!F31=0,\"\"0\"\",'FORM 2A'!F31/'SCHED 1A'!F46)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'SCHED 14A'!F21\"\n\"'SCHED 14A'!F14\"\n\"IF('FORM 3'!E55=0,0,(('FORM 3'!E55/'SCHED 14A'!F11)*100))\"\n\"'SCHED 14A'!F29*100\"\n\"'SCHED 14A'!F26*100\"\n\"IF(B12>0.02,6,IF(B12>=0,3,IF(B12<0,0)))\"\n\"IF(B13>25,6,IF(B13>15,3,IF(B13>0,0,IF(B13<=0,-3))))\"\n\"IF(B14<0.5,-100, IF(B14<1,-50, IF(B14<1.1,0, IF(B14<=1.5,3,IF(B14>1.5, 6)))))\"\n\"IF(B15>5,6,IF(B15>=0,3,IF(B15<-5,-3,IF(B15>-5,0))))\"\n\"IF(B16>3,6,IF(B16>=0,3,IF(B16<0,0)))\"\n\"IF(B17<0,0,IF(B17<50, 6, IF(B17<=100,3,IF(B17>100,0))))\"\n\"SUM(B21:B27)\"\n\"(B28*3)+(C28*2)+D28+E28\"\n\"IF(D6=\"\"\"\", \"\"please enter college code in cell D6\"\", \"\"\"\")\"\n\"IF(D7=\"\"\"\", \"\"please enter college name in cell D7\"\", \"\"\"\")\"\n\"IF(D8=\"\"\"\", \"\"please enter payment code in cell D8\"\", \"\"\"\")\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'SCHED 1A'!D40\"\n\"'SCHED 2'!E47+'SCHED 2'!E50\"\n\"'SCHED 1B'!D30\"\n\"'SCHED 2'!E48\"\n\"SUM(D11:D18)\"\n\"SUM(D21:D29)\"\n\"SUM(D32:D34)\"\n\"'SCHED 2'!E49\"\n\"SUM(D37:D42)\"\n\"SUM(D45:D46)\"\n\"D47+D43+D35+D30+D19\"\n\"'FORM 2B'!D32\"\n\"D48-D49+'FORM 2A'!D28\"\n\"D48-D49\"\n\"-'SCHED 12'!C14\"\n\"D52+D53\"\n\"D54\"\n\"'SCHED 11'!C17+'SCHED 11'!C18+'SCHED 11'!C47+'SCHED 11'!C48\"\n\"D67\"\n\"SUM(D63:D66)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'SCHED 5'!C13+'SCHED 5'!C35+'SCHED 5'!C48\"\n\"'SCHED 8'!D25\"\n\"SUM(D11:D28)\"\n\"IF(D32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2002/2003\"\", IF(E32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2003/2004\"\",IF(F32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2004/2005\"\",IF(G32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2005/2006\"\",IF(H32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2006/2007\"\",IF(I32=\"\"\"\",\"\"PLEASE ENTER YOUR PREMISES AREA FOR 2007/2008\"\",\"\"\"\"))))))\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"SUM(D11:D25)\"\n\"'SCHED 8'!D24\"\n\"D26+D28+D29\"\n\"'FORM 2A'!D29\"\n\"D31+D30\"\n\"IF(AND(('SCHED 10'!D15+'SCHED 10'!E15+'SCHED 10'!F15+'SCHED 10'!G15+'SCHED 10'!H15+'SCHED 10'!I15)<=(D30+E30+F30+G30+H30+I30+1),('SCHED 10'!D15+'SCHED 10'!E15+'SCHED 10'!F15+'SCHED 10'!G15+'SCHED 10'!H15+'SCHED 10'!I15)>=(D30+E30+F30+G30+H30+I30-1)),\"\"\"\",\"\"Analysis of pay costs does not equal total pay\"\")\"\n\"IF(AND((E30+F30+G30+H30+I30)<=('FORM 5'!D24+'FORM 5'!E24+'FORM 5'!F24+'FORM 5'!G24+'FORM 5'!H24+5),(E30+F30+G30+H30+I30)>=('FORM 5'!D24+'FORM 5'!E24+'FORM 5'!F24+'FORM 5'!G24+'FORM 5'!H24-5)),\"\"\"\",\"\"Total pay expenditure on form 2B and on form 5 are not equal\"\")\"\n\"IF(AND((E31+F31+G31+H31+I31)<=('FORM 5'!D15+'FORM 5'!E15+'FORM 5'!F15+'FORM 5'!G15+'FORM 5'!H15+5),(E31+F31+G31+H31+I31)>=('FORM 5'!D15+'FORM 5'!E15+'FORM 5'!F15+'FORM 5'!G15+'FORM 5'!H15-5)),\"\"\"\",\"\"Total non pay expenditure on form 2a and on form 5 are not equal\"\")\"\n\"IF(D34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2002/2003\"\", IF(E34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2003/2004\"\",IF(F34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2004/2005\"\",IF(G34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2005/2006\"\",IF(H34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2006/2007\"\",IF(I34=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF TEACHING STAFF FOR 2007/2008\"\",\"\"\"\"))))))\"\n\"IF(D35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2002/2003\"\",IF(E35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2003/2004\"\",IF(F35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2004/2005\"\",IF(G35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2005/2006\"\",IF(H35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2006/2007\"\",IF(I35=\"\"\"\",\"\"PLEASE ENTER THE NUMBER OF NON TEACHING STAFF FOR 2007/2008\"\",\"\"\"\"))))))\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"C12-'SCHED 3'!D13+'SCHED 3'!D14-'SCHED 5'!C11+'SCHED 11'!C19+'SCHED 11'!C12\"\n\"C13-'SCHED 3'!D19+'SCHED 3'!D20+'SCHED 4'!D11-'SCHED 5'!C16-'SCHED 5'!C17-'SCHED 5'!C19-'SCHED 5'!C20-'SCHED 5'!C22-'SCHED 5'!C23+'SCHED 11'!C20+'SCHED 11'!C23\"\n\"C14-'SCHED 3'!D25+'SCHED 3'!D26+'SCHED 4'!D16-'SCHED 5'!C38-'SCHED 5'!C39+'SCHED 11'!C31\"\n\"C15-'SCHED 3'!D31+'SCHED 3'!D32-'SCHED 5'!C12+'SCHED 11'!C14\"\n\"C16-'SCHED 3'!D37+'SCHED 3'!D38+'SCHED 4'!D19-'SCHED 5'!C25-'SCHED 5'!C26-'SCHED 5'!C28-'SCHED 5'!C29-'SCHED 5'!C31-'SCHED 5'!C32+'SCHED 11'!C27\"\n\"C17-'SCHED 3'!D43+'SCHED 3'!D44+'SCHED 4'!D24-'SCHED 5'!C41-'SCHED 5'!C42+'SCHED 11'!C36\"\n\"C18-'SCHED 3'!D49+'SCHED 4'!D27+'SCHED 11'!C40\"\n\"C19-'SCHED 3'!D54+'SCHED 3'!D55+'SCHED 4'!D32-'SCHED 5'!C44-'SCHED 5'!C45+'SCHED 11'!C44\"\n\"SUM(C12:C19)\"\n\"'SCHED 6'!C19\"\n\"SUM(C23:C27)\"\n\"'SCHED 7'!D11\"\n\"'SCHED 7'!D20\"\n\"'SCHED 7'!D29\"\n\"'SCHED 7'!D36\"\n\"'SCHED 7'!D44+'SCHED 7'!D54\"\n\"SUM(C31:C37)\"\n\"C28-C38\"\n\"C40+C20\"\n\"'SCHED 7'!D21\"\n\"'SCHED 7'!D30\"\n\"'SCHED 7'!D45+'SCHED 7'!D55\"\n\"SUM(C45:C47)\"\n\"'SCHED 8'!C27+'SCHED 8'!C33\"\n\"C42-C48-C50\"\n\"'SCHED 8'!C19\"\n\"'SCHED 11'!C50\"\n\"C57-'FORM 1'!D65\"\n\"'FORM 1'!D63\"\n\"'FORM 1'!D67\"\n\"C56+C57+C58+C59\"\n\"(C54+C61)\"\n\"IF(AND((C52+D52+E52+F52+G52+H52+I52)<=(C63+D63+E63+F63+G63+H63+I63+5),(C52+D52+E52+F52+G52+H52+I52)>=(C63+D63+E63+F63+G63+H63+I63-5)),\"\"\"\",\"\"Balance sheet does not balance\"\")\"\n\"IF(AND('FORM 5'!C29=\"\"N\"\", C12+D12+E12+F12+G12+H12+I12+C15+D15+E15+F15+G15+H15+I15<>C56+D56+E56+F56+G56+H56+I56),\"\"WARNING, total of inherited assets does not equal balance on revaluation reserve\"\",\"\"\"\")\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'SCHED 12'!C24\"\n\"'FORM 1'!D46+'SCHED 6'!C14-'SCHED 6'!D14\"\n\"-('FORM 2A'!D27+'SCHED 7'!E50-'SCHED 7'!D50-'SCHED 9'!D12)\"\n\"-'SCHED 9'!D12\"\n\"SUM(D14:D16)\"\n\"-('SCHED 4'!D11+'SCHED 4'!D14+'SCHED 4'!D19+'SCHED 4'!D22+'SCHED 4'!D27+'SCHED 4'!D30-'SCHED 2'!E25)\"\n\"'SCHED 3'!D11+'SCHED 3'!D17+'SCHED 3'!D23+'SCHED 3'!D29+'SCHED 3'!D35+'SCHED 3'!D41+'SCHED 3'!D47+'SCHED 3'!D52\"\n\"'SCHED 2'!E16+'SCHED 2'!E26+'SCHED 2'!E34+'SCHED 2'!E44\"\n\"D28+D29\"\n\"'SCHED 7'!E15\"\n\"-'SCHED 7'!E17\"\n\"-'SCHED 7'!E26\"\n\"-'SCHED 7'!E41\"\n\"SUM(D33:D37)\"\n\"D11+D17+D19+D25+D30+D38\"\n\"D40\"\n\"('SCHED 7'!E17+'SCHED 7'!E26+'SCHED 7'!E41)\"\n\"-D30\"\n\"-('SCHED 7'!E15+'SCHED 7'!E16+'SCHED 7'!E40)\"\n\"SUM(D43:D46)\"\n\"'SCHED 13'!C16\"\n\"'SCHED 13'!D16\"\n\"IF(AND(D47+D48<=D49+10,D47+D48>=D49-10),\"\"\"\",\"\"cashflow statement does not balance for 2002-03\"\")\"\n\"IF(AND(E47+E48<=E49+10,E47+E48>=E49-10),\"\"\"\",\"\"cashflow statement does not balance for 2003-04\"\")\"\n\"IF(AND(F47+F48<=F49+10,F47+F48>=F49-10),\"\"\"\",\"\"cashflow statement does not balance for 2004-05\"\")\"\n\"IF(AND(G47+G48<=G49+10,G47+G48>=G49-10),\"\"\"\",\"\"cashflow statement does not balance for 2005-06\"\")\"\n\"IF(AND(H47+H48<=H49+10,H47+H48>=H49-10),\"\"\"\",\"\"cashflow statement does not balance for 2006-07\"\")\"\n\"IF(AND(I47+I48<=I49+10,I47+I48>=I49-10),\"\"\"\",\"\"cashflow statement does not balance for 2007-08\"\")\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!E9\"\n\"'FORM 2A'!D29-'FORM 2A'!D25-'FORM 2A'!D26-'FORM 2A'!D27-'FORM 2A'!D28\"\n\"'FORM 2A'!E25+'FORM 2A'!E26+'FORM 2A'!E27+'FORM 2A'!E28\"\n\"SUM(D11:D14)\"\n\"IF(D11=0,0,D13/D11)\"\n\"'FORM 2B'!D30-'FORM 2B'!D28-'FORM 2B'!D29-'FORM 2B'!D25\"\n\"'FORM 2B'!E29+'FORM 2B'!E28+'FORM 2B'!E25\"\n\"D20+D21+D22+D23\"\n\"IF(C29=\"\"\"\",\"\"Please insert Y or N\"\",\"\"\"\")\"\n\"IF('Indicative Health Group'!B30>168,\"\"A\"\",IF('Indicative Health Group'!B30>84,\"\"B\"\",IF('Indicative Health Group'!B30<=84,\"\"C\"\",\"\" \"\")))\"\n\"IF(C33=\"\"\"\",\"\"Please assign financial health group A, B or C\"\",\"\"\"\")\"\n\"IF(C39=\"\"\"\",\"\"Please insert Y or N\"\",\"\"\"\")\"\n\"IF(C29=\"\"\"\", \"\"Line 13 is incomplete\"\", IF(C33=\"\"\"\", \"\"Line 15 is incomplete\"\", IF(C36=\"\"\"\", \"\"Line 16 is incomplete\"\", IF(39=\"\"\"\", \"\"Line 17 is incomplete\"\", \"\"\"\"))))\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"(E27*E29*E31)+(E19*E29*E31)\"\n\"SUM(E15:E18)\"\n\"SUM(D22:D26)\"\n\"IF(D12=0,\"\"0\"\",D12/D46*1000)\"\n\"D12-D37-D38\"\n\"D44+D45\"\n\"IF(D44=\"\"\"\",\"\"Please enter forecast FTEs,16-18 full time for 2002/03\"\",IF(E44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2003/2004\"\",IF(F44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2004/2005\"\",IF(G44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2005/2006\"\",IF(H44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2006/2007\"\",IF(I44=\"\"\"\",\"\"Please enter forecast FTEs, 16-18 full time for 2007/2008\"\",\"\"\"\"))))))\"\n\"IF(D45=\"\"\"\",\"\"Please enter forecast FTEs, other for 2002/2003\"\",IF(E45=\"\"\"\",\"\"Please enter forecast FTEs, other for 2003/2004\"\",IF(F45=\"\"\"\",\"\"Please enter forecast FTEs other for 2004/2005\"\",IF(G45=\"\"\"\",\"\"Please enter forecast FTEs other for 2005/2006\"\",IF(H45=\"\"\"\",\"\"Please enter forecast FTEs, other for 2006/2007\"\",IF(I45=\"\"\"\",\"\"Please enter forecast FTEs, other for2007/2008\"\",\"\"\"\"))))))\"\n\"IF(D48=\"\"\"\",\"\"Please enter franchised provision funds for 2002/2003, if applicable\"\", IF(E48=\"\"\"\",\"\"Please enter franchised provision funds for 2003/2004, if applicable\"\",IF(F48=\"\"\"\",\"\"Please enter franchised provision funds for 2004/2005, if applicable\"\",IF(G48=\"\"\"\",\"\"Please enter franchised provision funds for 2005/2006, if applicable\"\",IF(H48=\"\"\"\",\"\"Please enter franchised provision funds for 2006/2007, if applicable\"\",IF(I48=\"\"\"\",\"\"Please enter franchised provision funds for 2007/2008, if applicable\"\",\"\"\"\"))))))\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"IF(B27=\"\"\"\",\"\"PLEASE ENTER ANY OTHER LSC INCOME TYPES IN LINES 14, 15\"\",\"\"\"\")\"\n\"SUM(D13:D29)\"\n\"SUM(D38:D41)\"\n\"SUM(D47:D48)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'FORM 1'!D9\"\n\"E11+E12-E13-E14+E15\"\n\"E19+E20+E21-E22-E23+E24+E25\"\n\"E37+E38+E39+E40-E41-E42+E43\"\n\"'SCHED 5'!C16+'SCHED 5'!C25\"\n\"'SCHED 5'!C19+'SCHED 5'!C28\"\n\"E39+'SCHED 5'!C22+'SCHED 5'!C31\"\n\"'SCHED 3'!D19-'SCHED 3'!D20+'SCHED 3'!D37-'SCHED 3'!D38\"\n\"SUM(E47:E50)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'SCHED 2'!E19+'SCHED 2'!E29+'SCHED 2'!E37+'SCHED 2'!E25\"\n\"SUM(D14:D15)-'SCHED 2'!E25\"\n\"'SCHED 2'!E11+'SCHED 2'!E20+'SCHED 2'!E38\"\n\"SUM(D22:D23)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"SUM(C11:C12)\"\n\"SUM(C16+C19+C22+C25+C28+C31)\"\n\"C32+C29+C26+C23+C20+C17\"\n\"C38+C41+C44\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 3'!C9\"\n\"'FORM 1'!D9\"\n\"C12+'SCHED 2'!E13+'SCHED 2'!E22+'SCHED 2'!E31-'SCHED 2'!E15-'SCHED 2'!E24-'SCHED 2'!E33\"\n\"C13+'SCHED 2'!E41-'SCHED 2'!E43\"\n\"SUM(C11:C18)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 3'!C9\"\n\"'FORM 1'!D9\"\n\"D18\"\n\"D14+D15+D16-D17\"\n\"D20+D21\"\n\"IF((D18+E18+F18+G18+H18+I18+J18)<>(D22+E22+F22+G22+H22+I22+J22),\"\"ERROR - value V must equal Viii\"\",\"\"\"\")\"\n\"D27\"\n\"D25-D26\"\n\"D30+D29\"\n\"IF((D27+E27+F27+G27+H27+I27+J27)<>(D31+E31+F31+G31+H31+I31+J31),\"\"ERROR - value 2c must equal 2f\"\",\"\"\"\")\"\n\"D34+'SCHED 2'!E12+'SCHED 2'!E21+'SCHED 2'!E30+'SCHED 2'!E40-'SCHED 2'!E14-'SCHED 2'!E23-'SCHED 2'!E32-'SCHED 2'!E42\"\n\"D39+D40-D41\"\n\"D40+D39-D41\"\n\"IF((D42+E42+F42+G42+H42+I42+J42)<>(D46+E46+F46+G46+H46+I46+J46),\"\"ERROR - value 4d must equal 4g\"\",\"\"\"\")\"\n\"D49+D50+D51\"\n\"IF((D52+E52+F52+G52+H52+I52+J52)<>(D56+E56+F56+G56+H56+I56+J56),\"\"ERROR - value 5d must equal 5g\"\",\"\"\"\")\"\n\"IF(AND((D18+E18+F18+G18+H18+I18+J18)<=(D22+E22+F22+G22+H22+I22+J22+1),(D18+E18+F18+G18+H18+I18+J18+1)>=(D22+E22+F22+G22+H22+I22+J22-1)),\"\"\"\",\"\"Analysis of loans falling due within and after one year does not equal total loans\"\")\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 3'!C9\"\n\"'FORM 1'!D9\"\n\"C19\"\n\"'SCHED 2'!E16+'SCHED 2'!E26+'SCHED 2'!E34+'SCHED 2'!E44\"\n\"'SCHED 6'!C12+'SCHED 6'!C13\"\n\"'SCHED 2'!E13+'SCHED 2'!E22+'SCHED 2'!E31+'SCHED 2'!E41\"\n\"'SCHED 7'!D34\"\n\"'SCHED 2'!E12+'SCHED 2'!E21+'SCHED 2'!E30+'SCHED 2'!E40\"\n\"'SCHED 2'!E51\"\n\"C12+C13+C14-C15-C16+C17-C18\"\n\"C27\"\n\"C23+C24+C25-C26\"\n\"C33\"\n\"C30+C31-C32\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'SCHED 7'!E41\"\n\"D13-D11\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"('FORM 2B'!D25)\"\n\"'FORM 2B'!D28+'FORM 2B'!D29\"\n\"'FORM 2B'!D30\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"$C$11+$C$12\"\n\"$D$11+$D$12\"\n\"$E$11+$E$12\"\n\"$C$13+$C$14\"\n\"$D$13+$D$14\"\n\"$E$13+$E$14\"\n\"SUM(C11:C14)\"\n\"C16+C17+C18-C19-C20\"\n\"'SCHED 5'!C13\"\n\"('SCHED 3'!D13-'SCHED 3'!D14)+('SCHED 3'!D31-'SCHED 3'!D32)\"\n\"C22+C23\"\n\"SUM(C22:C23)\"\n\"SUM(C26:C27)\"\n\"C46+C47+C48-C49\"\n\"'SCHED 5'!C34+'SCHED 5'!C47\"\n\"C15-C16-C17-C18+C19+C20+C24+C28+C32+C36+C40+C44-C46-C47-C48+C49\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'FORM 1'!D54\"\n\"'SCHED 5'!C13+'SCHED 5'!C35+'SCHED 5'!C48\"\n\"-'SCHED 2'!E51\"\n\"-('SCHED 3'!D11-'SCHED 3'!D13+'SCHED 3'!D14)-('SCHED 3'!D17-'SCHED 3'!D19+'SCHED 3'!D20)-('SCHED 3'!D23-'SCHED 3'!D25+'SCHED 3'!D26)-('SCHED 3'!D29-'SCHED 3'!D31+'SCHED 3'!D32)-('SCHED 3'!D35-'SCHED 3'!D37+'SCHED 3'!D38)-('SCHED 3'!D41-'SCHED 3'!D43+'SCHED 3'!D44)-('SCHED 3'!D52-'SCHED 3'!D54+'SCHED 3'!D55)-('SCHED 3'!D47-'SCHED 3'!D49)\"\n\"-('SCHED 3'!E11-'SCHED 3'!E13+'SCHED 3'!E14)-('SCHED 3'!E17-'SCHED 3'!E19+'SCHED 3'!E20)-('SCHED 3'!E23-'SCHED 3'!E25+'SCHED 3'!E26)-('SCHED 3'!E29-'SCHED 3'!E31+'SCHED 3'!E32)-('SCHED 3'!E35-'SCHED 3'!E37+'SCHED 3'!E38)-('SCHED 3'!E41-'SCHED 3'!E43+'SCHED 3'!E44)-('SCHED 3'!E52-'SCHED 3'!E54+'SCHED 3'!E55)\"\n\"'FORM 3'!C23-'FORM 3'!D23\"\n\"'FORM 2A'!D27\"\n\"('SCHED 6'!C11+'SCHED 6'!C15+'SCHED 6'!C16+'SCHED 6'!C17+'SCHED 6'!C18)-('SCHED 6'!D11+'SCHED 6'!D15+'SCHED 6'!D16+'SCHED 6'!D17+'SCHED 6'!D18)\"\n\"'FORM 3'!D34-'FORM 3'!C34\"\n\"'SCHED 7'!E35-'SCHED 7'!D35\"\n\"('SCHED 7'!E49+'SCHED 7'!E51)-('SCHED 7'!D49+'SCHED 7'!D51)\"\n\"'FORM 3'!D50-'FORM 3'!C50\"\n\"-'FORM 1'!D46\"\n\"SUM(C11:C23)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 3'!C9\"\n\"'FORM 1'!D9\"\n\"'FORM 3'!C26+'FORM 3'!C27\"\n\"-'SCHED 7'!D11\"\n\"SUM(C11:C12)\"\n\"-('SCHED 7'!D20+'SCHED 7'!D29+'SCHED 7'!D44)\"\n\"C13+C14+C15\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"'FORM 1'!D48-'FORM 1'!D13\"\n\"IF(D11=0,0,(('FORM 3'!D26+'FORM 3'!D27-'FORM 3'!D31)/D11)*365)\"\n\"IF('FORM 3'!D38=0,0,'FORM 3'!D28/'FORM 3'!D38)\"\n\"IF(('FORM 1'!D48-'FORM 1'!D11-'FORM 1'!D12-'FORM 1'!D14-'FORM 1'!D13-'FORM 1'!D15-'FORM 1'!D16-'FORM 1'!D17-'FORM 1'!D18-'FORM 1'!D45)=0,0,('SCHED 6'!D15+'SCHED 6'!D16+'SCHED 6'!D17+'SCHED 6'!D18)/('FORM 1'!D48-'FORM 1'!D11-'FORM 1'!D12-'FORM 1'!D13-'FORM 1'!D14-'FORM 1'!D15-'FORM 1'!D16-'FORM 1'!D17-'FORM 1'!D18-'FORM 1'!D46)*365)\"\n\"IF(('FORM 2A'!D29-'FORM 2A'!D26-'FORM 2A'!D27-'FORM 2A'!D25)=0,0,'FORM 3'!D34/('FORM 2A'!D29-'FORM 2A'!D27-'FORM 2A'!D25-'FORM 2A'!D26)*365)\"\n\"IF('FORM 3'!D38=0,0,('FORM 3'!D28-'FORM 3'!D23)/'FORM 3'!D38)\"\n\"IF(D11=0,0,'FORM 4'!D11/D11)\"\n\"IF(D11=0,0,-('FORM 4'!D35+'FORM 4'!D36+'FORM 4'!D15+'FORM 4'!D16)/D11)\"\n\"IF(D11=0,0,('SCHED 7'!E11+'SCHED 7'!E22+'SCHED 7'!E31)/D11)\"\n\"IF('FORM 3'!D61-'FORM 3'!D56=0,0,('SCHED 7'!E11+'SCHED 7'!E22+'SCHED 7'!E31)/('FORM 3'!D61-'FORM 3'!D56))\"\n\"IF(D11=0,0,'FORM 1'!D52/D11)\"\n\"IF(D11=0,0,'FORM 1'!D60/D11)\"\n\"IF(D11=0,0,('FORM 3'!D58+'FORM 3'!D59)/D11)\"\n\"IF(D11=0,0,('FORM 3'!D61-'FORM 3'!D56)/D11)\"\n\"IF('SCHED 1A'!D46=0,0,('SCHED 1A'!D34))\"\n\"IF(D35=0,0,(E35/D35)-1)\"\n\"IF(DETAILS!D6=\"\"\"\",\"\"\"\",DETAILS!D6)\"\n\"'FORM 1'!D9\"\n\"IF('SCHED 14A'!D11=0,0,('SCHED 14A'!E11/'SCHED 14A'!D11)-1)\"\n\"IF('SCHED 14A'!D11=0,0,('FORM 1'!D11+'FORM 1'!D12+'FORM 1'!D14)/'SCHED 14A'!D11)\"\n\"IF('SCHED 14A'!D11=0,0,('FORM 1'!D32-'FORM 1'!D33)/'SCHED 14A'!D11)\"\n\"IF('SCHED 14A'!D11=0,0,('FORM 1'!D15+'FORM 1'!D16+'FORM 1'!D17+'FORM 1'!D18+'FORM 1'!D24)/'SCHED 14A'!D11)\"\n\"IF('SCHED 14A'!D11=0,0,('FORM 1'!D21+'FORM 1'!D22+'FORM 1'!D23+'FORM 1'!D25+'FORM 1'!D26+'FORM 1'!D27+'FORM 1'!D28+'FORM 1'!D29+'FORM 1'!D34+'FORM 1'!D37+'FORM 1'!D38+'FORM 1'!D39+'FORM 1'!D40+'FORM 1'!D41+'FORM 1'!D42+'FORM 1'!D45+'FORM 1'!D46)/'SCHED 14A'!D11)\"\n\"('SCHED 1A'!D48*'SCHED 1A'!D29)-('FORM 2A'!D23+'FORM 2B'!D23)\"\n\"'FORM 1'!D37-'FORM 2A'!D20-'FORM 2B'!D20\"\n\"'FORM 1'!D39-'FORM 2A'!D21-'FORM 2B'!D21\"\n\"'FORM 1'!D38-'FORM 2A'!D22-'FORM 2B'!D22\"\n\"IF('SCHED 14A'!D11=0,0,'FORM 2B'!D26/'SCHED 14A'!D11)\"\n\"IF('SCHED 14A'!D11=0,0,(('FORM 2B'!D26-'FORM 2B'!D25)/'SCHED 14A'!D11))\"\n\"IF('SCHED 10'!D15=0,0,'SCHED 10'!D11/'SCHED 10'!D15)\"\n\"IF('FORM 2B'!D30=0,0,('FORM 2B'!E26/'FORM 2B'!D26)-1)\"\n\"IF('FORM 2B'!D32=0,0,('FORM 2A'!D14+'FORM 2B'!D16)/'FORM 2B'!D32)\"\n\"IF('FORM 2B'!D31=0,0,('FORM 2B'!E31/'FORM 2B'!D31)-1)\"\n\"IF('FORM 2A'!D32=0,0,('FORM 2A'!D17+'FORM 2A'!D18+'FORM 2A'!D19+'FORM 2B'!D18+'FORM 2B'!D19)*1000/'FORM 2A'!D32)\"\n\"IF('FORM 3'!D61=0,0,'SCHED 14A'!D11/'FORM 3'!D61)\"\n\"IF('FORM 2B'!D34=0,0,('FORM 2B'!D12)/'FORM 2B'!D34)\"\n\"IF('FORM 2B'!D35=0,0,(('FORM 2B'!D26-'FORM 2B'!D12-'FORM 2B'!D25))/'FORM 2B'!D35)\"\n\"IF('SCHED 1A'!D44=0,0,(('FORM 2B'!D12+'FORM 2B'!D25)/('SCHED 1A'!D44+'SCHED 1A'!D45)))\"\n\"IF('SCHED 1A'!D44=0,0,((SUM('FORM 2B'!D13:D24))/('SCHED 1A'!D44+'SCHED 1A'!D45)))\"\n\"IF('FORM 2B'!D34=0,0,(('SCHED 1A'!D44+'SCHED 1A'!D45)/'FORM 2B'!D34))\"\n\"IF('SCHED 1A'!D44=0,0,('FORM 2B'!D32/('SCHED 1A'!D44+'SCHED 1A'!D45)))\"\n\"IF('FORM 2A'!D32=0,\"\"0\"\",'FORM 2A'!D32/'SCHED 1A'!D46)\"\n\"IF(INDEX(DETAILS,1,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,1,1))\"\n\"IF(INDEX(DETAILS,2,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,2,1))\"\n\"IF(INDEX(DETAILS,3,1)=\"\"\"\",\"\"\"\",INDEX(DETAILS,3,1))\"\n\"'SCHED 14A'!D21\"\n\"'SCHED 14A'!D14\"\n\"IF('FORM 3'!D59=0,0,(('FORM 3'!D59/'SCHED 14A'!D11)*100))\"\n\"'SCHED 14A'!D29*100\"\n\"'SCHED 14A'!D26*100\"\n\"IF(B12>0.02,6,IF(B12>=0,3,IF(B12<0,0)))\"\n\"IF(B13>25,6,IF(B13>15,3,IF(B13>0,0,IF(B13<=0,-3))))\"\n\"IF(B14<0.5,-100, IF(B14<1,-50, IF(B14<1.1,0, IF(B14<=1.5,3,IF(B14>1.5, 6)))))\"\n\"IF(B15>5,6,IF(B15>=0,3,IF(B15<-5,-3,IF(B15>-5,0))))\"\n\"IF(B16>3,6,IF(B16>=0,3,IF(B16<0,0)))\"\n\"IF(B17<0,0,IF(B17<50, 6, IF(B17<=100,3,IF(B17>100,0))))\"\n\"SUM(B21:B27)\"\n\"(B28*3)+(C28*2)+D28+E28\"\n\"D78\"\n\"(+D10-F10)/F10\"\n\"10969+D10\"\n\"7642+D12\"\n\"6775+D14\"\n\"D90\"\n\"633+D16\"\n\"D94\"\n\"869+D18\"\n\"D98\"\n\"973+D20\"\n\"+'Statutory Reconciliation'!H36\"\n\"1201+D22\"\n\"2638+D24\"\n\"'Consolidated Results 2'!D9\"\n\"'Consolidated Results 2'!O9\"\n\"'Consolidated Results 2'!D10+'Consolidated Results 2'!D11\"\n\"'Consolidated Results 2'!O10+'Consolidated Results 2'!O11\"\n\"'Consolidated Results 2'!D12\"\n\"'Consolidated Results 2'!O12\"\n\"'Earnings per share '!D37\"\n\"'Earnings per share '!H37\"\n\"'Earnings per share '!D39\"\n\"'Earnings per share '!H39\"\n\"'Consol Bal Sheet'!D47\"\n\"'Consol Bal Sheet'!D47\"\n\"+F38\"\n\"'Earnings per share '!D28/1000000\"\n\"'Earnings per share '!H28/1000000\"\n\"'Capital Structure'!E26\"\n\"'Capital Structure'!E26\"\n\"+'Consolidated Results'!C9+'Global Reinsurance '!D18+'Financial Services'!C10\"\n\"+'Consolidated Results'!C10+'Global Reinsurance '!D19+'Financial Services'!C11\"\n\"+'Consolidated Results'!C11+'Global Reinsurance '!D20+'Financial Services'!C12\"\n\"+'Consolidated Results'!C12+'Financial Services'!C13\"\n\"4261+D84\"\n\"+'Global Reinsurance '!D21\"\n\"137+D85\"\n\"+'Consolidated Results'!C13+'Global Reinsurance '!D22+'Financial Services'!C14\"\n\"840+D87\"\n\"+D82-D84-D85-D86-D87\"\n\"+'Consolidated Results'!C19\"\n\"-8+D91\"\n\"133+D92\"\n\"187+D93\"\n\"+D88+D90+D91-D92-D93\"\n\"124+D96\"\n\"-20+D97\"\n\"+D94+D96+D97\"\n\"'Segment  2003 '!M11\"\n\"C9+E9+G9+I9\"\n\"+C11-C12-C13-C14\"\n\"+'Segment  2003 '!O17\"\n\"+'Financial Services'!G16\"\n\"'Segment  2003 '!M19-'Global Reinsurance '!D24\"\n\"3-8\"\n\"+'Segment  2003 '!Q20+'Global Reinsurance '!D24\"\n\"203+8\"\n\"+'Segment  2003 '!Q21\"\n\"+C18+C15+C19-C21-C22+C20+C17\"\n\"+C23+C25+C26\"\n\"+C9/K9-1\"\n\"+N9/P9-1\"\n\"+'Consolidated Results'!C10/'Consolidated Results'!C9\"\n\"+'Consolidated Results'!C22/('Consolidated Results'!C22+'Consolidated Results'!C23)\"\n\"+'Financial Highlights'!D31\"\n\"+'Financial Highlights'!J31\"\n\"+'Segment  2003 '!Q57\"\n\"+'Segment  2003  (2)'!Q57\"\n\"SUM(D9:D11)\"\n\"+'Segment  2003 '!M57\"\n\"+'Segment  2003  (2)'!M57\"\n\"+H27+F27+D27+J27\"\n\"100+46+10\"\n\"587-516\"\n\"680-516\"\n\"+'Financial Highlights'!D94\"\n\"+'Financial Highlights'!J94\"\n\"-15+D10\"\n\"SUM(D9:D11)\"\n\"+'Financial Highlights'!D96+'Financial Highlights'!D97\"\n\"+'Financial Highlights'!J96+'Financial Highlights'!J97\"\n\"+D12+D13\"\n\"SUM(D17:D21)\"\n\"+D32+D31\"\n\"SUM(F31:F32)\"\n\"2759+369-200\"\n\"2520+555-144\"\n\"2048+893-101\"\n\"2081+56-36\"\n\"1885+503-118\"\n\"SUM(D8:D13)\"\n\"2220+200+29\"\n\"2114+144\"\n\"2181-40+101\"\n\"2235+36\"\n\"1924+118\"\n\"SUM(D14:D22)\"\n\"SUM(D26:D36)\"\n\"8835-720\"\n\"853-40\"\n\"SUM(D42:D43)\"\n\"D37+D44+D39\"\n\"+'Reconciliation Book Value'!D25\"\n\"+E11/$E$19\"\n\"+I11/$I$19\"\n\"+E11/I11-1\"\n\"+I12/$I$19-0.006\"\n\"SUM(E11:E13)\"\n\"+'Global Reinsurance '!O19\"\n\"+'Financial Services 2'!N17\"\n\"+E14+E16+E17+E18\"\n\"+E26/$E$34\"\n\"+I26/$I$34\"\n\"701\"\n\"+'Global Reinsurance '!O20\"\n\"+'Financial Services 2'!N23\"\n\"+E32/$E$34-0.001\"\n\"+I33/$I$34+0.002\"\n\"SUM(E11:K11)\"\n\"SUM(M11:O11)\"\n\"E13-E14-E15-E16\"\n\"+E17+E19+E20+E21-E22-E23\"\n\"69+23\"\n\"+E24+E26+E27\"\n\"SUM(E57:E59)\"\n\"'Segment  2003 '!E11+5131\"\n\"'Segment  2003 '!G11+3850\"\n\"'Segment  2003 '!I11+1087\"\n\"'Segment  2003 '!K11\"\n\"SUM(E11:K11)\"\n\"+'Segment  2003 '!O11+757\"\n\"SUM(M11:O11)\"\n\"'Segment  2003 '!E12+2967\"\n\"'Segment  2003 '!G12+2769\"\n\"'Segment  2003 '!I12+1005\"\n\"'Segment  2003 '!O12+763\"\n\"'Segment  2003 '!E13+2663\"\n\"'Segment  2003 '!G13+2556\"\n\"'Segment  2003 '!I13+791\"\n\"'Segment  2003 '!O13+629\"\n\"'Segment  2003 '!E14+1861\"\n\"'Segment  2003 '!G14+1541\"\n\"'Segment  2003 '!I14+393\"\n\"'Segment  2003 '!O14+466\"\n\"'Segment  2003 '!E15+279\"\n\"'Segment  2003 '!G15+485\"\n\"'Segment  2003 '!I15+153\"\n\"'Segment  2003 '!O15+45\"\n\"'Segment  2003 '!E16+293\"\n\"'Segment  2003 '!G16+356\"\n\"'Segment  2003 '!K16+84\"\n\"'Segment  2003 '!O16+60\"\n\"E13-E14-E15-E16\"\n\"+'Segment  2003 '!I19+11\"\n\"'Segment  2003 '!E20+306\"\n\"'Segment  2003 '!G20+113\"\n\"'Segment  2003 '!I20+63\"\n\"'Segment  2003 '!K20-23\"\n\"'Segment  2003 '!O20+149\"\n\"'Segment  2003 '!E21-6\"\n\"'Segment  2003 '!G21-4\"\n\"'Segment  2003 '!I21+2\"\n\"'Segment  2003 '!E22+22\"\n\"'Segment  2003 '!K22+104\"\n\"'Segment  2003 '!O22+5\"\n\"'Segment  2003 '!E23+129\"\n\"'Segment  2003 '!I23+10\"\n\"'Segment  2003 '!K23-40\"\n\"'Segment  2003 '!O23+28\"\n\"+E17+E19+E20+E21-E22-E23\"\n\"'Segment  2003 '!E26+15\"\n\"'Segment  2003 '!G26-7\"\n\"+'Segment  2003 '!I26+26\"\n\"'Segment  2003 '!K26-8\"\n\"'Segment  2003 '!O26+98\"\n\"'Segment  2003 '!I27+1\"\n\"'Segment  2003 '!O27-26\"\n\"+E24+E26+E27\"\n\"-69-10\"\n\"SUM(E57:E59)\"\n\"'Segment  2003 '!E11\"\n\"D9+F9+H9+J9\"\n\"+D11-D12-D13-D14\"\n\"'Segment  2003 '!E20\"\n\"+D15+D17-D19-D20+D18\"\n\"+D21+D23+D24\"\n\"'Segment  2003 '!E57\"\n\"+'Segment  2003  (2)'!E57\"\n\"SUM(D28:D30)\"\n\"+H34+F34+D34\"\n\"(D9/L9)-1\"\n\"+O9/Q9-1\"\n\"D10/D9\"\n\"+'Segment  2003 '!G11\"\n\"D9+F9+H9+J9\"\n\"+D11-D12-D13-D14\"\n\"+'Segment  2003 '!G20\"\n\"'Segment  2003 '!G21\"\n\"+D15+D17-D19-D20+D18\"\n\"+D21+D24+D23\"\n\"'Segment  2003 '!G57\"\n\"+'Segment  2003  (2)'!G57\"\n\"SUM(D28:D30)\"\n\"+H34+F34+D34\"\n\"(D9/L9)-1\"\n\"+O9/Q9-1\"\n\"+'Insurance-Overseas General '!D10/'Insurance-Overseas General '!D9\"\n\"O10/O9\"\n\"C10+E10+G10+I10\"\n\"+C11+C10\"\n\"SUM(G10:G11)\"\n\"SUM(P9:P11)\"\n\"+C16/C10\"\n\"+C33+C38\"\n\"+'Segment  2003 '!I11\"\n\"D9+F9+H9+J9\"\n\"+D11-D12-D13-D14\"\n\"+D20-D21-D22-D23+D24\"\n\"+D15+D25\"\n\"+'Segment  2003 '!I20\"\n\"+D27+D28+D29-D30-D31\"\n\"+D32+D34+D35\"\n\"+'Segment  2003 '!I57\"\n\"+'Segment  2003  (2)'!I57\"\n\"SUM(D39:D41)\"\n\"+H45+F45+D45+J45\"\n\"32+46+10\"\n\"+'Global Reinsurance '!D9/'Global Reinsurance '!L9-1\"\n\"'Global Reinsurance '!O9/'Global Reinsurance '!Q9-1\"\n\"+'Global Reinsurance '!D10/'Global Reinsurance '!D9\"\n\"D21+F21+H21+J21\"\n\"+D23+D22+D21\"\n\"+D27/D21\"\n\"+'Segment  2003 '!O11\"\n\"C10+E10+G10+I10\"\n\"+C12-C13-C14-C15\"\n\"+'Segment  2003 '!O20\"\n\"+C16+C18-C20-C21+C19\"\n\"+C22+C24+C25\"\n\"'Segment  2003 '!O57\"\n\"+'Segment  2003  (2)'!O57\"\n\"SUM(C29:C31)\"\n\"+C35+E35+G35\"\n\"(C10/K10)-1\"\n\"+N10/P10-1\"\n\"+'Financial Services'!C11/'Financial Services'!C10\"\n\"C11+E11+G11+I11\"\n\"+C12+C11\"\n\"+C29+C34\"\n\"+I34+I29\"\n\"E11/$E$28\"\n\"1611+E11\"\n\"I11/$I$28\"\n\"M11/$M$28\"\n\"1233+E12\"\n\"M12/$M$28+0.0005\"\n\"1077+E13\"\n\"428+E14\"\n\"M14/$M$28-0.002\"\n\"0+E15\"\n\"475+E16\"\n\"SUM(E11:E16)\"\n\"SUM(O11:O16)+0.003\"\n\"3772+E20\"\n\"2220+E21\"\n\"M21/$M$28-0.0005\"\n\"150+E22\"\n\"1489+E23\"\n\"E24/$E$28+0.0005\"\n\"454+E24\"\n\"8+E25\"\n\"SUM(E17+E26)\"\n\"+G26+G17\"\n\"+F11/$F$17\"\n\"SUM(F11:F16)\"\n\"F25/$L$39\"\n\"F28/$L$39-0.001\"\n\"SUM(F25:F36)\"\n\"SUM(H25:H36)+0.001\"\n\"+F37+L31\"\n\"SUM(N12:N16)\"\n\"+D14\"\n\"+D12-D13\"\n\"D19\"\n\"3750+D30\"\n\"6+D31\"\n\"11+D32\"\n\"5+D33\"\n\"0+D34\"\n\"8+D35\"\n\"SUM(D30:D35)\"\n\"+B10-C10\"\n\"+B10-K10\"\n\"SUM(B10:B14)\"\n\"2849-37\"\n\"-508+131\"\n\"-128+131\"\n\"-131+131\"\n\"+D9-E9\"\n\"SUM(D17:D20)\"\n\"+E12+E11+E10\"\n\"+G16+G10\"\n\"I19+I13\"\n\"SUM(I28:I30)\"\n\"E22+E28\"\n\"+E37\"\n\"-'Reinsurance Recoverable 4'!H38\"\n\"-'Reinsurance Recoverable 4'!H31\"\n\"+'Reinsurance Recoverable 4'!H39\"\n\"+'Reinsurance Recoverable 4'!H32\"\n\"SUM(E58:E61)\"\n\"ROUND(E9/D9,3)\"\n\"SUM(D9:D15)\"\n\"ROUND(E10/D10,3)\"\n\"SUM(D10:D16)\"\n\"+D10+F10\"\n\"SUM(D11:F11)\"\n\"+D11/D10\"\n\"+D10-D11\"\n\"+F13+D13\"\n\"+'Consol Bal Sheet'!D8\"\n\"+'Consol Bal Sheet'!D10\"\n\"2520+555-144\"\n\"2941-101\"\n\"2081+56-36\"\n\"1885+503-118\"\n\"+'Consol Bal Sheet'!D13\"\n\"SUM(E9:E12)\"\n\"1467+45\"\n\"8162+2-45-1\"\n\"3319+369+1-200\"\n\"2951+555-144\"\n\"2624+893-101\"\n\"2558+56-36\"\n\"2548+503-118\"\n\"SUM(E16:E23)\"\n\"11946+369\"\n\"10376+555\"\n\"9841+792\"\n\"8566+323\"\n\"3589-200\"\n\"3661-144\"\n\"3623+101-101\"\n\"3265+56-36\"\n\"2880+65+115-118\"\n\"1784-1\"\n\"SUM(E27:E33)\"\n\"15975-1\"\n\"+G11\"\n\"+E37+E38+E39+E40\"\n\"+E41+E42+E43\"\n\"+E12+G12\"\n\"77+E12\"\n\"90+G12\"\n\"-9+E13\"\n\"-53+E14\"\n\"140+G14\"\n\"28+E15\"\n\"18+E16\"\n\"-13+E17\"\n\"9+G17\"\n\"SUM(E12:E17)\"\n\"64+23\"\n\"76+E19\"\n\"+G19\"\n\"SUM(E18:E20)\"\n\"-20+E22\"\n\"-28+G22\"\n\"SUM(E21:E22)\"\n\"'Consol Bal Sheet'!D34\"\n\"'Consol Bal Sheet'!F34\"\n\"+E10+E11\"\n\"'Consol Bal Sheet'!D36\"\n\"'Consol Bal Sheet'!F36\"\n\"'Consol Bal Sheet'!D39\"\n\"575-18\"\n\"'Consol Bal Sheet'!D44-E18\"\n\"SUM(E18:E19)\"\n\"+E20+E16+E14+E11+E10\"\n\"+'Consol Bal Sheet'!D44-'Consol Bal Sheet'!D20\"\n\"+O19-2772\"\n\"+E12/E22\"\n\"(E12+E14)/E22\"\n\"+E12/E23\"\n\"(E12+E14+E16)/(E23)\"\n\"(+E12+E14+E18)/E22\"\n\"+'Segment  2003 '!Q28\"\n\"+F13+E13+D13+G13\"\n\"+'Segment  2003 '!Q26\"\n\"+D13-D14-D15\"\n\"+'Consol Bal Sheet'!D44\"\n\"-575+18\"\n\"SUM(D10:D13)\"\n\"+D14-D15\"\n\"SUM(D19:D21)\"\n\"(+D10+D12)/(D19/1000000)-0.001\"\n\"(+E10+E12)/(E19/1000000)\"\n\"+G10/(G19/1000000)\"\n\"+D14/(D22/1000000)\"\n\"+D16/(D22/1000000)\"\n\"SUM(K9:K13)\"\n\"SUM(K14:K16)\"\n\"+K14/K17\"\n\"+'Financial Highlights'!D20\"\n\"+J26+I26+H26+K26\"\n\"-40-19\"\n\"-82+19\"\n\"SUM(H28:H34)\"\n\"SUM(H26:H34)\"\n\"IF(U39>0,U39,\"\"\"\")\"\n\"IF(U39>0,U39,\"\"\"\")\"\n\"IF(U39>0,U39,\"\"\"\")\"\n\"IF(U39>0,U39,\"\"\"\")\"\n\"IF(Q32>0,Q32,\"\"\"\")\"\n\"IF(Q32>0,Q32,\"\"\"\")\"\n\"IF(Q32>0,Q32,\"\"\"\")\"\n\"IF(Q32>0,Q32,\"\"\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(O88=V108,\"\"\"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V108>0,V108,\"\"\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121=Y89,\"\" \"\",\"\"*** Check Sums ***\"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(V121>0,V121,\"\" \"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(M89=U123,\"\"\"\",\"\"Check Sums - Expenditure Does Not Equal Account Dissection\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(SUM(V31,V37)>0,SUM(V31,V37),\"\"\"\")\"\n\"IF(S2>0,S2,\"\"\"\")\"\n\"IF(O58>0,(O58/11),\"\"\"\")\"\n\"IF(O58>0,(O58/11),\"\"\"\")\"\n\"IF(SUM(M58:N87)>0,SUM(M58:N87),\"\"\"\")\"\n\"IF(SUM(M58:N87)>0,SUM(M58:N87),\"\"\"\")\"\n\"IF(SUM(O58:Q87)>0,SUM(O58:Q87),\"\"\"\")\"\n\"IF(SUM(O58:Q87)>0,SUM(O58:Q87),\"\"\"\")\"\n\"IF(SUM(O58:Q87)>0,SUM(O58:Q87),\"\"\"\")\"\n\"IF(SUM(O88,R88,Y88)>0,SUM(O88,R88,Y88),\"\"\"\")\"\n\"IF(SUM(O88,R88,Y88)>0,SUM(O88,R88,Y88),\"\"\"\")\"\n\"IF(SUM(O88,R88,Y88)>0,SUM(O88,R88,Y88),\"\"\"\")\"\n\"IF(SUM(O88,R88,Y88)>0,SUM(O88,R88,Y88),\"\"\"\")\"\n\"IF(SUM(O88,R88,Y88)>0,SUM(O88,R88,Y88),\"\"\"\")\"\n\"IF(SUM(R88,Y88)>0,SUM(R88,Y88),\"\"\"\")\"\n\"IF(SUM(R88,Y88)>0,SUM(R88,Y88),\"\"\"\")\"\n\"IF(SUM(R88,Y88)>0,SUM(R88,Y88),\"\"\"\")\"\n\"IF(S2>0,S2,\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(V108/11),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(V108/11),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(V108/11),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(V108/11),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107)>0,SUM(U28,U29,U30,U98,U99,U100,U101,U102,U103,U104,U105,U106,U107),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120)>0,SUM(U34,U35,U36,U111,U112,U113,U114,U115,U116,U117,U118,U119,U120),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"IF(SUM(V121,V108)>0,SUM(V121,V108),\"\"\"\")\"\n\"+C18+C17+C16+C15\"\n\"IF(H20>0,H20+K20,0)\"\n\"C20*H20\"\n\"N20*C20\"\n\"C20*F20\"\n\"I20\"\n\"H21*C21\"\n\"I$21\"\n\"L$20\"\n\"SUM(C20:C32)\"\n\"R33\"\n\"P33\"\n\"Q33\"\n\"H33*12\"\n\"(N41/C33)/12\"\n\"SUM(N40:N42)\"\n\"1-((N40-N44)/N40)\"\n\"N43-SUM(N44:N46)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(K58:K67)\"\n\"1-((N48-K70)/N48)\"\n\"K70\"\n\"SUM(K74:K76)\"\n\"SUM(K80:K87)\"\n\"SUM(K92:K98)\"\n\"N101/R33\"\n\"(N107/C33)\"\n\"N111/C33\"\n\"SUM(N68,N71,N77,N88,N99,N101,N103,N105,N107,N109)\"\n\"N48-N111\"\n\"N113/N114\"\n\"N113-N114\"\n\"+C18+C17+C16+C15\"\n\"IF(H20>0,H20+K20,0)\"\n\"C20*H20\"\n\"N20*C20\"\n\"C20*F20\"\n\"I20\"\n\"H21*C21\"\n\"I$21\"\n\"L$20\"\n\"SUM(C20:C32)\"\n\"R33\"\n\"P33\"\n\"Q33\"\n\"H33*12\"\n\"(N41/C33)/12\"\n\"SUM(N40:N42)\"\n\"1-((N40-N44)/N40)\"\n\"N43-SUM(N44:N46)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(K58:K67)\"\n\"1-((N48-K70)/N48)\"\n\"K70\"\n\"SUM(K74:K76)\"\n\"SUM(K80:K87)\"\n\"SUM(K92:K98)\"\n\"N101/R33\"\n\"(N107/C33)\"\n\"N111/C33\"\n\"SUM(N68,N71,N77,N88,N99,N101,N103,N105,N107,N109)\"\n\"N48-N111\"\n\"N113/N114\"\n\"N113-N114\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"K7\"\n\"K7\"\n\"K7\"\n\"K7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"B7\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"C10\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"L6\"\n\"SUM(C11:C13)\"\n\"1861585-C14-C16\"\n\"+C14+C16+C18\"\n\"1179859-C24-C25-C27\"\n\"SUM(C24:C27)\"\n\"SUM(C33:C42)\"\n\"+C28+C30+C43\"\n\"SUM(C11:C12)\"\n\"SUM(C16:C18)\"\n\"+C13-C19\"\n\"C24+C28\"\n\"C24+C28+C32\"\n\"SUM(C49:C54)\"\n\"42499+3+150+29\"\n\"40461+8+40+46\"\n\"39540\"\n\"36357+56+291\"\n\"C10+C12\"\n\"12151+558\"\n\"11248+404\"\n\"U59/U61\"\n\"+AI20/29536\"\n\"11652/28808\"\n\"U59/U63\"\n\"+AI20/29568\"\n\"+AK20/28840\"\n\"333371-E28-G28-I28\"\n\"1702771-1678174\"\n\"1590111-1574153+I29\"\n\"1574153-1521337+K29\"\n\"1521337-1351157+M29\"\n\"1351157-1316827\"\n\"1316827-1229694\"\n\"1229694-1202442+1127\"\n\"1202442-1089384+7547-54\"\n\"1089384-1056863\"\n\"1056863-1037870\"\n\"951745-944245\"\n\"+AI34-AK34\"\n\"863710-646457+3464\"\n\"646457-599147+3311\"\n\"599147-511132\"\n\"511132-413273\"\n\"413273-263957\"\n\"263957-153605\"\n\"96532+57073\"\n\"1577822+100352\"\n\"427214+524531\"\n\"599147+47310\"\n\"511132+88015\"\n\"29+35\"\n\"21+14\"\n\"I10\"\n\"7366+41\"\n\"7313+39\"\n\"6741+36\"\n\"6236+36\"\n\"5907+36\"\n\"5432+29\"\n\"3293+5\"\n\"3481+15\"\n\"2948+11\"\n\"2573+14\"\n\"SUM(C54:C58)\"\n\"+C8/C11\"\n\"+C9/C11\"\n\"SUM(C8:C9)\"\n\"SUM(E8:E10)\"\n\"C11*C13\"\n\"C18*C19\"\n\"C15+C21\"\n\"+C24/C28\"\n\"1070509+75009\"\n\"+C24+C26\"\n\"SUM(E24:E26)\"\n\"+C26\"\n\"+C33/C34\"\n\"+C33\"\n\"1504556+78210\"\n\"SUM(E49:E54)\"\n\"E55/E55\"\n\"G55/E55\"\n\"I55/E55\"\n\"SUM(C10:C18)\"\n\"SUM(C23:C25)\"\n\"C28+C21\"\n\"SUM(C33:C35)\"\n\"C37+C30\"\n\"13442+34\"\n\"10280+48\"\n\"SUM(C11:C18)\"\n\"E19/E23\"\n\"4383+436+914\"\n\"4774+262+960\"\n\"4387+31+62\"\n\"3702+26+73\"\n\"7283-73\"\n\"6953+48+115\"\n\"1272-40\"\n\"7259-210\"\n\"SUM(I12:I23)\"\n\"SUM(I26:I39)\"\n\"I24+I40\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(I78:I86)\"\n\"I76+I87\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(I115:I121)\"\n\"I88+I122\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(I161:I170)\"\n\"SUM(I173:I178)\"\n\"SUM(I171-I179)\"\n\"I181+I182+I183\"\n\"SUM(I185:I186)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"E213+E214\"\n\"E215+E216+E217\"\n\"SUM(E221:E223)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(I261:I277)\"\n\"SUM(I278:I297)\"\n\"SUM(I311:I321)\"\n\"I339+I322+I298\"\n\"SUM(K370:K373)\"\n\"SUM(K12:K24)\"\n\"SUM(K27:K44)\"\n\"SUM(K25+K45)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(K69:K84)\"\n\"SUM(K87:K95)\"\n\"K85+K96\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(K97+K139)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"14554+754\"\n\"9307+5454\"\n\"SUM(K182:K191)\"\n\"SUM(K194:K199)\"\n\"SUM(K192-K200)\"\n\"SUM(K202:K205)\"\n\"SUM(K206:K207)\"\n\"SUM(K208/K212)\"\n\"38964+1674\"\n\"16947+15640\"\n\"SUM(K259:K261)\"\n\"SUM(E297:O297)\"\n\"E297+E298\"\n\"E299+E300+E302+E303+E301\"\n\"G303+G302+G301+G300+G299\"\n\"SUM(I303)\"\n\"SUM(M299:M303)\"\n\"E324+E325+E327\"\n\"G324+G325+G326+G327\"\n\"O331+O333+O334\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"SUM(K353:K373)\"\n\"SUM(K401:K407,K374:K388)\"\n\"SUM(K410:K424)\"\n\"SUM(K447:K455,K427:K435)\"\n\"K408+K425+K456\"\n\"SUM(M467:M469)\"\n\"SUM(B9:B10)\"\n\"SUM(B14:B21)\"\n\"SUM(B9+B24)\"\n\"SUM(B27-B23)\"\n\"SUM(B11+B22)\"\n\"SUM(C30-B30)\"\n\"SUM(C14:C15)\"\n\"SUM(C18:C21)\"\n\"+C17+C13\"\n\"SUM(C29:C31)\"\n\"+C330\"\n\"+C36+C34+C28\"\n\"+E36+E28+E34\"\n\"SUM(C55:C60)\"\n\"+E54\"\n\"SUM(C62:C69)\"\n\"SUM(H54:H69)\"\n\"+H70-E120\"\n\"+C72\"\n\"1416\"\n\"+C61+C54+C71\"\n\"SUM(C79:C91)\"\n\"476555.8+3116.33\"\n\"103735.39+26083.05+11314.95\"\n\"119787.63+23296.62+7810.26+39259.95+700.75+9833.86\"\n\"5391.07+1100+386269.71+19556\"\n\"401702.82+57330.93\"\n\"+C92+C78\"\n\"+C74-C100\"\n\"SUM(C122:C125)\"\n\"-26907-7561074\"\n\"+E120+E121\"\n\"+C64\"\n\"+C84\"\n\"SUM(E131:E132)\"\n\"SUM(E138:E141)\"\n\"+C31-E31\"\n\"+C136+C129+C117\"\n\"+E147\"\n\"+C144+C145\"\n\"+C147-C532\"\n\"SUM(C235:C239)\"\n\"+C234-C241\"\n\"+C235-C242\"\n\"SUM(C251:C255)\"\n\"+E277\"\n\"+E280\"\n\"-C289\"\n\"SUM(C266:C268)\"\n\"-16647\"\n\"+C280\"\n\"SUM(C313:C314)\"\n\"+C102\"\n\"SUM(C324:C329)\"\n\"+E344+E335-E338\"\n\"+C352+C362\"\n\"+E352+E356+E362\"\n\"+C469-C467\"\n\"SUM(E473:E490)\"\n\"+C102\"\n\"+C83\"\n\"-C66\"\n\"-C64\"\n\"-C63\"\n\"+E18-C18\"\n\"-E37+C37\"\n\"+C38-E38\"\n\"SUM(C504:C510)\"\n\"+C272\"\n\"+C39\"\n\"+C21\"\n\"+C20\"\n\"+'Financial Statements '!E54\"\n\"+'Financial Statements '!E61\"\n\"+C15+C16\"\n\"+'Financial Statements '!C100\"\n\"+C17-C18\"\n\"+'Financial Statements '!C14\"\n\"-'Financial Statements '!C34\"\n\"+'Financial Statements '!C17-'Financial Statements '!C36\"\n\"SUM(E23:E27)\"\n\"+'Financial Statements '!C117\"\n\"+'Financial Statements '!C129\"\n\"+'Financial Statements '!C136\"\n\"SUM(C32:C34)\"\n\"+'Financial Statements '!C28/'Financial Statements '!C23\"\n\"+'Financial Statements '!C17/'Financial Statements '!C36\"\n\"SUM(C5:C10)\"\n\"SUM(C15:C27)\"\n\"SUM(F156:F162)\"\n\"37*7\"\n\"42*7\"\n\"SUM(A172:A180)\"\n\"SUM(J16:J23)\"\n\"SUM(K14:K19)\"\n\"K22\"\n\"SUM(K26:K28)\"\n\"K35+K23+K20+K29\"\n\"SUM(K40:K46)\"\n\"K37-K47\"\n\"F9\"\n\"K51+K49\"\n\"SUM(C6:C12)\"\n\"SUM(C16:C28)\"\n\"IF(A2=A1,0,1)\"\n\"SUM(C2:C5)\"\n\"SUM(F5:F9)\"\n\"SUM(G4:G12)\"\n\"SUM(H2+G13)\"\n\"SUM(F18:F26)\"\n\"SUM(F18:F29)\"\n\"SUM(H14-G30)\"\n\"SUM(G36:G37)\"\n\"SUM(H34+G38)\"\n\"SUM(G41:G43)\"\n\"SUM(H39-G44)\"\n\"SUM(H54-(G56+G57))\"\n\"SUM(G77:G77)\"\n\"SUM(H75+G78)\"\n\"SUM(H79-G81)\"\n\"SUM(H111+(G112+G113))\"\n\"SUM(G118:G124)\"\n\"+I7\"\n\"+B9*B10\"\n\"+E13\"\n\"+E14/360\"\n\"+G14*B11\"\n\"+D19\"\n\"+B9\"\n\"+E30+C30-B30\"\n\"+D25\"\n\"+D30\"\n\"+B34/C34\"\n\"+D30\"\n\"+B34+B35\"\n\"+D30\"\n\"+ C40/360*B34\"\n\"+D30\"\n\"+B9\"\n\"+B44 - C44\"\n\"+D19\"\n\"+IF(E44<0,E44,0)\"\n\"+D20\"\n\"+G50*F50\"\n\"+IF(E44>=0,E44,0)\"\n\"+D36\"\n\"+H52/F52\"\n\"+D21\"\n\"+B56-E56+D56\"\n\"+B36\"\n\"+H52\"\n\"+B11\"\n\"+C56\"\n\"+C61-C62\"\n\"0.05*C61\"\n\"SUM(C65:C71)\"\n\"0.05*(C92+D92)/2\"\n\"+C63-C72-C73-C74\"\n\"+IF(C76>0,0.35*C76,0)\"\n\"+C86+E86\"\n\"+D139\"\n\"+F15\"\n\"+D87-C87\"\n\"+D21\"\n\"+H52\"\n\"SUM(C86:C89)\"\n\"+C93+-1*C73\"\n\"SUM(C90:C95)\"\n\"SUM(D90:D94)\"\n\"+I40\"\n\"SUM(D100)\"\n\"+C110\"\n\"+C78\"\n\"+C96-C103-C101\"\n\"+D106+D108\"\n\"+C110+C100+C103\"\n\"+D110+D101+D103\"\n\"+D108\"\n\"+C73\"\n\"+IF(E87>0,-1*E87,E87)\"\n\"+E100\"\n\"SUM(D118:D125)\"\n\"+IF(E94>0,-1*E94,E94)\"\n\"+IF(E92>0,-1*E92,E92)\"\n\"SUM(D129:D130)\"\n\"+E103\"\n\"+E107\"\n\"+D109\"\n\"SUM(D134:D136)\"\n\"+D126+D131+D137\"\n\"+Summary!D9\"\n\"+Summary!D10\"\n\"+Summary!D11\"\n\"+Summary!D30\"\n\"+Summary!D32\"\n\"+Summary!D31\"\n\"+'Baltimore MD'!$D$2*1000\"\n\"+'Atlanta GA'!$D$2*1000\"\n\"+'New York City'!$D$2*1000\"\n\"+'Orange County CA'!$D$2*1000\"\n\"+'Omaha NE'!$D$2*1000\"\n\"+Philadelphia!$D$2*1000\"\n\"+'Rural CO'!$D$2*1000\"\n\"+'Baltimore MD'!$G$2*1000\"\n\"+'Atlanta GA'!$G$2*1000\"\n\"+'New York City'!$G$2*1000\"\n\"+'Orange County CA'!$G$2*1000\"\n\"+'Omaha NE'!$G$2*1000\"\n\"+Philadelphia!$G$2*1000\"\n\"+'Rural CO'!$G$2*1000\"\n\"+'Baltimore MD'!$D$6\"\n\"+'Atlanta GA'!$D$6\"\n\"+'New York City'!$D$6\"\n\"+'Orange County CA'!$D$6\"\n\"+'Omaha NE'!$D$6\"\n\"+Philadelphia!$D$6\"\n\"+'Rural CO'!$D$6\"\n\"+'Baltimore MD'!$D$23\"\n\"+'Atlanta GA'!$D$23\"\n\"+'New York City'!$D$23\"\n\"+'Orange County CA'!$D$23\"\n\"+'Omaha NE'!$D$23\"\n\"+Philadelphia!$D$23\"\n\"+'Rural CO'!$D$23\"\n\"+A31\"\n\"CONCATENATE(TEXT('Baltimore MD'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$D$29\"\n\"+'Atlanta GA'!$D$29\"\n\"+'New York City'!$D$29\"\n\"+'Orange County CA'!$D$29\"\n\"+'Omaha NE'!$D$29\"\n\"+Philadelphia!$D$29\"\n\"+'Rural CO'!$D$29\"\n\"+'Baltimore MD'!$E$6\"\n\"+'Atlanta GA'!$E$6\"\n\"+'New York City'!$E$6\"\n\"+'Orange County CA'!$E$6\"\n\"+'Omaha NE'!$E$6\"\n\"+Philadelphia!$E$6\"\n\"+'Rural CO'!$E$6\"\n\"+K9\"\n\"+'Baltimore MD'!$E$23\"\n\"+'Atlanta GA'!$E$23\"\n\"+'New York City'!$E$23\"\n\"+'Orange County CA'!$E$23\"\n\"+'Omaha NE'!$E$23\"\n\"+Philadelphia!$E$23\"\n\"+'Rural CO'!$E$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$E$29\"\n\"+'Atlanta GA'!$E$29\"\n\"+'New York City'!$E$29\"\n\"+'Orange County CA'!$E$29\"\n\"+'Omaha NE'!$E$29\"\n\"+Philadelphia!$E$29\"\n\"+'Rural CO'!$E$29\"\n\"+'Baltimore MD'!$F$6\"\n\"+'Atlanta GA'!$F$6\"\n\"+'New York City'!$F$6\"\n\"+'Orange County CA'!$F$6\"\n\"+'Omaha NE'!$F$6\"\n\"+Philadelphia!$F$6\"\n\"+'Rural CO'!$F$6\"\n\"+'Baltimore MD'!$F$23\"\n\"+'Atlanta GA'!$F$23\"\n\"+'New York City'!$F$23\"\n\"+'Orange County CA'!$F$23\"\n\"+'Omaha NE'!$F$23\"\n\"+Philadelphia!$F$23\"\n\"+'Rural CO'!$F$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$F$29\"\n\"+'Atlanta GA'!$F$29\"\n\"+'New York City'!$F$29\"\n\"+'Orange County CA'!$F$29\"\n\"+'Omaha NE'!$F$29\"\n\"+Philadelphia!$F$29\"\n\"+'Rural CO'!$F$29\"\n\"+'Baltimore MD'!$G$6\"\n\"+'Atlanta GA'!$G$6\"\n\"+'New York City'!$G$6\"\n\"+'Orange County CA'!$G$6\"\n\"+'Omaha NE'!$G$6\"\n\"+Philadelphia!$G$6\"\n\"+'Rural CO'!$G$6\"\n\"+'Baltimore MD'!$G$23\"\n\"+'Atlanta GA'!$G$23\"\n\"+'New York City'!$G$23\"\n\"+'Orange County CA'!$G$23\"\n\"+'Omaha NE'!$G$23\"\n\"+Philadelphia!$G$23\"\n\"+'Rural CO'!$G$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$G$29\"\n\"+'Atlanta GA'!$G$29\"\n\"+'New York City'!$G$29\"\n\"+'Orange County CA'!$G$29\"\n\"+'Omaha NE'!$G$29\"\n\"+Philadelphia!$G$29\"\n\"+'Rural CO'!$G$29\"\n\"+'Baltimore MD'!$G$3\"\n\"+'Atlanta GA'!$G$3\"\n\"+'New York City'!$G$3\"\n\"+'Orange County CA'!$G$3\"\n\"+'Omaha NE'!$G$3\"\n\"+Philadelphia!$G$3\"\n\"+'Rural CO'!$G$3\"\n\"+K24\"\n\"CONCATENATE(TEXT('Baltimore MD'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$I$29\"\n\"+'Atlanta GA'!$I$29\"\n\"+'New York City'!$I$29\"\n\"+'Orange County CA'!$I$29\"\n\"+'Omaha NE'!$I$29\"\n\"+Philadelphia!$I$29\"\n\"+'Rural CO'!$I$29\"\n\"SUM(B25:C25)\"\n\"+D5-E5\"\n\"+J7+J8+J9+1\"\n\"+K7+K8+K9\"\n\"SUM(L7:L9)\"\n\"+Q45\"\n\"SUM(P10:P16)\"\n\"+D10-E10+1\"\n\"SUM(J13:J18)\"\n\"+D10+D8+D5\"\n\"+D12+D14\"\n\"SUM(P22:P27)\"\n\"+J11+J5\"\n\"+J20-J22\"\n\"+K20-K22+1\"\n\"+D20+D25+D24+D23+D22\"\n\"+E20+E25+E24+E23+E22-1\"\n\"+J30+J31\"\n\"SUM(P31:P39)\"\n\"+D31+D30+D28\"\n\"+J33+J36+J37\"\n\"-78362\"\n\"+J39+J28\"\n\"+K39+K28+1\"\n\"+P41+P29+P19+P8\"\n\"+P43+P5\"\n\"+D42-D45\"\n\"+J56+J57+J58+J59\"\n\"+Q95\"\n\"SUM(P60:P66)\"\n\"+D59-E59-1\"\n\"+J61+J54\"\n\"+D80+D79+D77\"\n\"+J90+J78+1\"\n\"+K90+K78\"\n\"+P91+P79+P69+P57\"\n\"+P93+P54\"\n\"+E5-D5\"\n\"+J7+J8+J9\"\n\"SUM(P10:P16)\"\n\"SUM(J13:J18)\"\n\"+D10+D8+D5\"\n\"+D12+D14\"\n\"SUM(P22:P27)\"\n\"+J11+J5\"\n\"+J20-J22\"\n\"+D20+D25+D24+D23+D22\"\n\"+J30+J31\"\n\"SUM(P31:P39)\"\n\"+D31+D30+D28\"\n\"+J33+J36+J37\"\n\"+J39+J28\"\n\"+P41+P29+P19+P8\"\n\"+P43+P5\"\n\"+J56+J57+J58+J59\"\n\"SUM(P60:P66)\"\n\"+D60+D57+D54\"\n\"+J61+J54\"\n\"SUM(P81:P90)\"\n\"+D81+D80+D78\"\n\"+J90+J78\"\n\"+P92+P79+P69+P57\"\n\"+P94+P54\"\n\"(4/3)*12.8/((811.2+772.1)/2)\"\n\"(4/3)*5.283/((811.2+772.1)/2)\"\n\"C29/C32\"\n\"C30/C32\"\n\"C38/C32\"\n\"C35/C32\"\n\"C36/C32\"\n\"C34/C32\"\n\"F18*F32\"\n\"F19*F32\"\n\"B32-B30-B29\"\n\"F20*F32\"\n\"D32*(1+F22)\"\n\"F32*(1+G22)\"\n\"D34*(1+F21)\"\n\"F34*(1+G21)\"\n\"F37-F34-F36\"\n\"D32-D38-D34-D35\"\n\"F25*F32\"\n\"SUM(C34:C36)\"\n\"F32-F38\"\n\"F23*F32\"\n\"F8*(F29+B29)/2\"\n\"G8*(G29+F29)/2\"\n\"F9*(F30+D30)/2\"\n\"F10*(F34+D34)/2\"\n\"G10*(G34+F34)/2\"\n\"F12*(F29+D29)/2\"\n\"G12*(G29+F29)/2\"\n\"F15*(F32+D32)/2\"\n\"G15*(G32+F32)/2\"\n\"F14*(F32+D32)/2\"\n\"G14*(G32+F32)/2\"\n\"F40+F41-F42-F43-F44+F45-F46\"\n\"F48*F16\"\n\"F48-F49\"\n\"F51-(F38-D38)\"\n\"G51-(G38-F38)\"\n\"B51-B1*97909\"\n\"D51-$B1*B38\"\n\"F51-$B$1*D38\"\n\"G51-$B$1*F38\"\n\"NPV($B$1,F56,G56,H56)\"\n\"H56*1.02/($B$1-0.02)\"\n\"H59/(1+$B$1)^3\"\n\"D38+D57+D60\"\n\"D62/D63\"\n\"B14/((B6+B8+C6+C8)/2)\"\n\"-B15/((B10+B9+C10+C9)/2)\"\n\"B20/((B6+C6)/2)\"\n\"-B18/((B5+C5)/2)\"\n\"B17/((B5+C5)/2)\"\n\"-B24/B23\"\n\"B6/B5\"\n\"B8/B5\"\n\"(B5-B6-B8)/B5\"\n\"B9/C9-1\"\n\"B5/C5-1\"\n\"B11/B5\"\n\"B10/B5\"\n\"(B5-B9-B10-B11)/B5\"\n\"B9/B5\"\n\"-B18/(B16+B17)\"\n\"B26/((B5+C5)/2)\"\n\"B26/((B11+C11)/2)\"\n\"387+(14*4)\"\n\"515+(14*4)\"\n\"140.642622+14\"\n\"127.101524+14\"\n\"37.423454+14\"\n\"92.960403+22\"\n\"398.128003+64\"\n\"77+12\"\n\"26+8\"\n\"-32.642622-2\"\n\"-8.10152400000001+1\"\n\"15.310546+1\"\n\"6.039597+3\"\n\"-19.3940029999999+2\"\n\"507+(14*4)+12\"\n\"524+(14*4)+8\"\n\"67+14-2\"\n\"154+14+1\"\n\"133+14\"\n\"90+22+3\"\n\"444+64+2\"\n\"17763+12\"\n\"19118+(14*4)+8\"\n\"3626+14-2\"\n\"4535+14+1\"\n\"4157+14\"\n\"4296+22+3\"\n\"16614+64+2\"\n\"1232-12\"\n\"-367-(14*4)-8\"\n\"665-14+2\"\n\"-252-14-1\"\n\"-105-14\"\n\"86-22-3\"\n\"394-64-2\"\n\"446-22\"\n\"-70-22\"\n\"437-5\"\n\"-124-5\"\n\"-45-5\"\n\"229-9\"\n\"497-24\"\n\"SUM(M9:M11)\"\n\"1314+2\"\n\"87+1\"\n\"+M9-M15\"\n\"SUM(L29:O29)\"\n\"1114.5-40.3-2-1\"\n\"SUM(M29:M30)\"\n\"19\"\n\"+E37-E33-E34-E35\"\n\"+J37-J35-J34-J33\"\n\"121-103-19-9\"\n\"631-524-11-36+6\"\n\"136+1\"\n\"152+3\"\n\"139-6\"\n\"163+5\"\n\"590+3\"\n\"156+1\"\n\"116+5\"\n\"631+6\"\n\"121-1\"\n\"174.08-4.798-0.309+6.533\"\n\"+E18+E26+E31+E37+E39+E42+E44\"\n\"+E12-E46\"\n\"+E51-E53+E54\"\n\"+G51-G53+G54+#REF!\"\n\"+F21/F9\"\n\"+N31/N12\"\n\"+N53/N51\"\n\"176-65\"\n\"SUM(F9:I9)\"\n\"2093+1\"\n\"441-1\"\n\"38+417+1\"\n\"SUM(F9:F12)\"\n\"184-1\"\n\"93-3\"\n\"181+11\"\n\"242+1\"\n\"51-1\"\n\"+F22-F18-F19-F20\"\n\"167\"\n\"+F18/F9\"\n\"B56\"\n\"F6\"\n\"F6\"\n\"F6\"\n\"F6\"\n\"B5/F6\"\n\"C5/F6\"\n\"D5/F6\"\n\"E5/F6\"\n\"F5/F6\"\n\"B5-B7\"\n\"B5*0.15\"\n\"F12/4\"\n\"F12/4\"\n\"F12/4\"\n\"F12/4\"\n\"(F76*0.11)\"\n\"(F77*0.09)\"\n\"SUM(B11:B18)\"\n\"B8-B19\"\n\"SUM(B20:E20)\"\n\"B20*0.34\"\n\"B20-B22\"\n\"SUM(G30:G41)\"\n\"F44*(B30*0.01)\"\n\"F44*(C30*0.01)\"\n\"F44*(D30*0.01)\"\n\"F44*(E30*0.01)\"\n\"F5*(G30*0.01)\"\n\"F5*(G31*0.01)\"\n\"F5*(G32*0.01)\"\n\"F5*(G33*0.01)\"\n\"F5*(G34*0.01)\"\n\"F5*(G35*0.01)\"\n\"F5*(G36*0.01)\"\n\"F5*(G37*0.01)\"\n\"F5*(G38*0.01)\"\n\"F5*(G39*0.01)\"\n\"F5*(G40*0.01)\"\n\"F5*(G41*0.01)\"\n\"F61+B24\"\n\"B62+C24\"\n\"E62\"\n\"B7*0.25\"\n\"SUM(B62:B63)\"\n\"B69\"\n\"($F68/4)\"\n\"(-F67)*0.08\"\n\"(+B67+B68)\"\n\"$F70\"\n\"B69+B70\"\n\"B64+B71\"\n\"B73-B78\"\n\"(+B24/+B79)*100\"\n\"(B24/B73)*100\"\n\"(+B64/+B76)\"\n\"(+B64-B63)/B76\"\n\"B78/+B79\"\n\"B79/+B71\"\n\"(B24/B5)*100\"\n\"(B5/B73)\"\n\"(B73/B79)\"\n\"(F76*0.11)\"\n\"(F77*0.09)\"\n\"F62+B134\"\n\"B115*0.06\"\n\"B117*0.25\"\n\"SUM(B172:B174)\"\n\"F69\"\n\"F69\"\n\"F70\"\n\"(+B134/+B190)*100\"\n\"(B134/B184)*100\"\n\"(B134/B115)*100\"\n\"(B115/B184)\"\n\"F76*0.11\"\n\"F77*0.09\"\n\"F178\"\n\"F178\"\n\"F70\"\n\"+F297+F298\"\n\"IF(ISBLANK(D14),\"\"\"\",VLOOKUP(D14,Sheet2!B5:C162,2))\"\n\"SUM(G5:I5)\"\n\"217016188+74923\"\n\"M5+K5-G5-I5\"\n\"69865580+1665775\"\n\"43035239+18511296\"\n\"SUM(E5:E14)\"\n\"SUM(E34:E36)\"\n\"E38+E52+E66\"\n\"SUM(E131:E138)\"\n\"SUM(E144:E150)\"\n\"667551924-27113-126307-241391\"\n\"378066232-27113-126307-241391\"\n\"E16+E30+E68+E83+E97+E112+E127+E140+E152+E156+E170+E184\"\n\"SUM(G5:I5)\"\n\"53551931.59+1539873.2\"\n\"40550940.32+1404857.77\"\n\"13997041.92+135015.43\"\n\"37905998.33+17923635.6\"\n\"33115818.21+8935845.26\"\n\"17536897.7+9052789.81\"\n\"1263371.23-1263371.23\"\n\"-7407861.79-1263371.23\"\n\"42520896.61\"\n\"42725578.74+1263371.23\"\n\"36016783.03+1263371.23\"\n\"SUM(E5:E14)\"\n\"31853446.41+19598613.19-822062.79\"\n\"4511568.27+5669869.53-393280.81\"\n\"27341878.14+19396337-428781.98\"\n\"11889.55+1124.62\"\n\"1910249.77+208437.02\"\n\"50149.51+72017.81\"\n\"1860100.26+136365.21\"\n\"28141979.09+1263371\"\n\"16882008.37+1263371\"\n\"7808000-1263371\"\n\"2609407.37+286521\"\n\"2490377.43+286521\"\n\"SUM(E34:E36)\"\n\"1207195.67+174139.87\"\n\"809381.86+93901.33\"\n\"397813.81+80238.54\"\n\"87992409.17+985902.01\"\n\"47881351.81+452501.08\"\n\"45683858.51+533400.93\"\n\"663131.28+30500.25\"\n\"235474.07+30500.25\"\n\"100659.19\"\n\"23039013.84+28743.78\"\n\"5730916.85+14919.85\"\n\"17308676.47+13823.93\"\n\"E38+E52+E66\"\n\"0\"\n\"1960996.7+2883350.38\"\n\"407572.69+502713.13\"\n\"1553924.01+2380637.25\"\n\"25881751.5+18216.73\"\n\"13118854.53+11382.15\"\n\"12754226.97+6834.58\"\n\"1056389.03+101.81\"\n\"584442.69+101.81\"\n\"1334950.33+42104.43\"\n\"690199.61+24134.36\"\n\"644750.72+17970.07\"\n\"117535.07+0\"\n\"2647205.41+16719.59\"\n\"1003977.01+329.55\"\n\"1760993.47+16390.04\"\n\"27749.54+0\"\n\"40820993.06+1367286.94\"\n\"19859501.69+456508.3\"\n\"21018214.99+910778.64\"\n\"230077.39+0\"\n\"1192397.65+33157.79\"\n\"1052652.87+33157.79\"\n\"176680.63+0\"\n\"1692427.32\"\n\"357302.5+0\"\n\"1507435\"\n\"2500010.7+4371.33\"\n\"3934623.58+4371.33\"\n\"336036.91+34911.59\"\n\"430083.01+34911.59\"\n\"SUM(N120:O120)\"\n\"SUM(O120:O120)\"\n\"2729079.85+102509\"\n\"2762411.32+102509\"\n\"18199912.1+4911812\"\n\"10292657.21+107047.22\"\n\"32115771.32-127.9+4911812-102509\"\n\"SUM(E131:E138)\"\n\"64463690.19+3950000-13946841.62\"\n\"13216532.67-80912.92\"\n\"55793416.82+3950000-13861597.55\"\n\"555747669.3+13946841.62-4311812\"\n\"252537981.26+80912.92\"\n\"314454779.25+13861597.55-4311812\"\n\"916832.63+12762.93\"\n\"324344.33+0\"\n\"1154442.96+12762.93\"\n\"2037255.56+92740.49\"\n\"720872.62+48747.81\"\n\"1340799.53+43992.68\"\n\"1474827.74+248305.38\"\n\"1336994.59+128732.62\"\n\"1822400.81+143371.19\"\n\"520358.11-115055.24\"\n\"348389.07-115055.24\"\n\"189021.87+20485.59\"\n\"6796.95+1000\"\n\"182224.92+19485.59\"\n\"E16+E30+E68+E83+E97+E112+E127+E140+E153+E157+E171+E185\"\n\"SUM(G5:I5)\"\n\"47168129.38+1473907.28\"\n\"36165707.89+1392627.39\"\n\"11572184.7+81546.69\"\n\"569763.21+266.8\"\n\"19421663.83+34482632.3\"\n\"29590308.46+8683005.96\"\n\"16338097.73+10845964.44\"\n\"11445773.89+107306.57\"\n\"1820304.96-1820304.96\"\n\"-6034184.36-1820304.96\"\n\"36236174.54+1820304.96\"\n\"29798555.49+1820304.96\"\n\"SUM(E5:E14)\"\n\"32587235+20956926.22\"\n\"3773015.64+8922317.63\"\n\"28815910.84+17320484.51\"\n\"1691.48+5285875.92\"\n\"1898.34-1258.59\"\n\"3549538.27+130420.1\"\n\"298793.53+70528.17\"\n\"3250744.74+59891.93\"\n\"25929499.16+1820304.96\"\n\"15481647.8+1820304.96\"\n\"8099000-1820304.96\"\n\"2598934.4+438078\"\n\"2438887.21+438078\"\n\"SUM(E34:E36)\"\n\"1608784.3+222727.87\"\n\"1050749.5+122769.85\"\n\"558199.44+99930.69\"\n\"164.64-27.33\"\n\"79437265.99+517300.93\"\n\"44740675.86+263377.78\"\n\"39424764.37+254403.15\"\n\"4728174.24+480\"\n\"215775.51\"\n\"18444642.76+18609.22\"\n\"5891049.03+11796.74\"\n\"12553855.73+6812.48\"\n\"SUM(E55:E63)\"\n\"E38+E52+E65\"\n\"0\"\n\"1701593.26+980926.32\"\n\"402311.68+340997.66\"\n\"1299281.58+639928.66\"\n\"19244380.63-3245.88\"\n\"11126579.67+2328.96\"\n\"8127733.2-5574.84\"\n\"917330.54+555289.3\"\n\"364196.34+555289.3\"\n\"530465.69+64468.12\"\n\"287539.87+1219.78\"\n\"242925.82+63248.34\"\n\"2086336.48+73758.97\"\n\"791253.17+31177.62\"\n\"1312854.37+42581.35\"\n\"35593069.63+444284.87\"\n\"17862413.48+256441.71\"\n\"17991935.18+187917.1\"\n\"23335.19+73.94\"\n\"1350882.82+24786.26\"\n\"1186898.33+24786.26\"\n\"683854.55\"\n\"395906.19\"\n\"1035290.12\"\n\"3968138.5+14707.84\"\n\"1739501.2+220.24\"\n\"1779405.28+959.1\"\n\"3928341.91+13968.98\"\n\"606157+27975.36\"\n\"344097.65+0\"\n\"573635.47+27975.36\"\n\"1766988.5+68391.56\"\n\"1018099.47+87015.61\"\n\"1844266+6145.42\"\n\"1095376.97+24769.47\"\n\"SUM(E130:E137)\"\n\"SUM(E143:E149)\"\n\"1514991.04+44693.16\"\n\"305190.44+0\"\n\"1231149.61+44693.16\"\n\"1652161.1+31792.14\"\n\"710178.65+15958.97\"\n\"945182.45+15833.17\"\n\"1273052.91+363011.74\"\n\"1180792.49+86911.92\"\n\"1682915.19+296420.78\"\n\"1590654.77+20320.96\"\n\"605478.95+99716.13\"\n\"121800.72+9250\"\n\"483678.23+90466.13\"\n\"699029.27+11410.2\"\n\"348831.38+0\"\n\"350197.89+11410.2\"\n\"E16+E30+E67+E82+E96+E111+E126+E139+E151+E155+E169+E183\"\n\"D188+E185\"\n\"D188+I185\"\n\"D188+M185\"\n\"D190+G185\"\n\"District_name\"\n\"District_County\"\n\" \"\"For the Fiscal Years Ended June 30, \"\" & Fiscal_Year - 3 & \"\", \"\" & Fiscal_Year -2 & \"\" and \"\" & Fiscal_Year -1 & \"\" Actual;\"\"\"\n\"\"\"Forecasted Fiscal Years Ending June 30, \"\" & Fiscal_Year & \"\" Through \"\" & Fiscal_Year + 4\"\n\"Fiscal_Year -3\"\n\"Fiscal_Year -2\"\n\"Fiscal_Year -1\"\n\"Fiscal_Year\"\n\"Fiscal_Year +1\"\n\"Fiscal_Year +2\"\n\"Fiscal_Year+3\"\n\"Fiscal_Year+4\"\n\"INDEX(Data!$A$1:$F$70, MATCH($A12,Data!$A$1:$A$70,), MATCH(C$9,Data!$A$1:$F$1,))\"\n\"IF(OR(C12=0,D12 = 0),0,AVERAGE((D12-C12)/C12,(E12-D12)/D12))\"\n\"SUM(C12:C18)\"\n\"SUM(C22:C26)\"\n\"C19+C27\"\n\"G37*(1+$F37+RAND()*0.05-RAND()*0.05)\"\n\"SUM(C31:C45)\"\n\"SUM(C49:C51)\"\n\"C46+C52\"\n\"C28-C53\"\n\"C59\"\n\"E59\"\n\"C55+C57\"\n\"C59-C61-C71\"\n\"C76+C77\"\n\"D76+D77+C79\"\n\"G76+G77+E79\"\n\"C73+C79\"\n\"AVERAGE(IF(C89<>0,(D89-C89)/C89,0),IF(D89<>0,(E89-D89)/D89,0))\"\n\"C81+C87+C89\"\n\"SUM(Forecast!C39:C44)\"\n\"SUM(Forecast!G39:G44)\"\n\"District_name\"\n\"District_County\"\n\"\"\"For the Fiscal Years Ending June 30, \"\" & Fiscal_Year & \"\" Through \"\" & Fiscal_Year + 4\"\n\"Fiscal_Year\"\n\"Fiscal_Year +1\"\n\"Fiscal_Year +2\"\n\"Fiscal_Year+3\"\n\"Fiscal_Year+4\"\n\"VLOOKUP($A12,Forecast!$A:$K,6,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,7,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,8,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,9,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,10,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,11,FALSE)\"\n\"AVERAGE(IF(D12=0,0,(E12-D12)/D12),IF(E12=0,0,(F12-E12)/E12),IF(F12=0,0,(G12-F12)/F12),IF(G12=0,0,(H12-G12)/G12))\"\n\"SUM(D12:D18)\"\n\"AVERAGE(IF(D49=0,0,E49-D49/D49),IF(E49=0,0,F49-E49/E49),IF(F49=0,0,G49-F49/F49),IF(G49=0,0,H49-G49/G49))/100\"\n\"District_name\"\n\"District_County\"\n\"\"\"For the Forecasted Fiscal Years Ending June 30, \"\" & Fiscal_Year & \"\" Through \"\" & Fiscal_Year + 4\"\n\"Fiscal_Year\"\n\"Fiscal_Year +1\"\n\"Fiscal_Year +2\"\n\"Fiscal_Year+3\"\n\"Fiscal_Year+4\"\n\"VLOOKUP($A12,Forecast!$A:$K,6,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,7,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,8,FALSE)\"\n\"IF(D12=0,0,(E12-D12)/D12)\"\n\"VLOOKUP($A12,Forecast!$A:$K,9,FALSE)\"\n\"IF(E12=0,0,(G12-E12)/E12)\"\n\"VLOOKUP($A12,Forecast!$A:$K,10,FALSE)\"\n\"VLOOKUP($A12,Forecast!$A:$K,11,FALSE)\"\n\"SUM(D12:D18)\"\n\"District_name\"\n\"District_County\"\n\" \"\"For the Fiscal Years Ended June 30, \"\" & Fiscal_Year - 3 & \"\", \"\" & Fiscal_Year -2 & \"\" and \"\" & Fiscal_Year -1 & \"\" Actual;\"\"\"\n\"\"\"Forecasted Fiscal Years Ending June 30, \"\" & Fiscal_Year & \"\" Through \"\" & Fiscal_Year + 4\"\n\"Fiscal_Year -3\"\n\"Fiscal_Year -2\"\n\"Fiscal_Year -1\"\n\"Fiscal_Year\"\n\"Fiscal_Year +1\"\n\"Fiscal_Year +2\"\n\"Fiscal_Year+3\"\n\"Fiscal_Year+4\"\n\"INDEX(Data!$A$1:$F$70, MATCH($A12,Data!$A$1:$A$70,), MATCH(C$9,Data!$A$1:$F$1,))\"\n\"IF(OR(C12=0,D12 = 0),0,AVERAGE((D12-C12)/C12,(E12-D12)/D12))\"\n\"SUM(C12:C18)\"\n\"SUM(C22:C26)\"\n\"C19+C27\"\n\"G37*(1+$F37+RAND()*0.05-RAND()*0.05)\"\n\"SUM(C31:C45)\"\n\"SUM(C49:C51)\"\n\"C46+C52\"\n\"C28-C53\"\n\"C59\"\n\"E59\"\n\"C55+C57\"\n\"C59-C61-C71\"\n\"C76+C77\"\n\"D76+D77+C79\"\n\"G76+G77+E79\"\n\"C73+C79\"\n\"AVERAGE(IF(C89<>0,(D89-C89)/C89,0),IF(D89<>0,(E89-D89)/D89,0))\"\n\"C81+C87+C89\"\n\"SUM(Forecast!C39:C44)\"\n\"SUM(Forecast!G39:G44)\"\n\"YearEndStatusReport2002!A6\"\n\"YearEndStatusReport2002!A6\"\n\"YearEndStatusReport2002!C6\"\n\"YearEndStatusReport2002!F6\"\n\"YearEndStatusReport2002!F6\"\n\"SUM(H31+H32+H33+H34)\"\n\"SUM(H31+H32+H33+H34)\"\n\"SUM(H37+H38+H39)\"\n\"SUM(H37+H38+H39)\"\n\"SUM(J19:K45)\"\n\"SUM(J19:K45)\"\n\"+L17-L46\"\n\"+L17-L46\"\n\"YearEndStatusReport2002!A6\"\n\"YearEndStatusReport2002!A6\"\n\"YearEndStatusReport2002!C6\"\n\"YearEndStatusReport2002!F6\"\n\"YearEndStatusReport2002!F6\"\n\"SUM(H31+H32+H33+H34)\"\n\"SUM(H31+H32+H33+H34)\"\n\"SUM(H37+H38+H39)\"\n\"SUM(H37+H38+H39)\"\n\"SUM(J19:K40)\"\n\"SUM(J19:K40)\"\n\"+L17-L41\"\n\"+L17-L41\"\n\"SUM(J45:K53)\"\n\"SUM(J45:K53)\"\n\"SUM(F3:BG3)\"\n\"SUM(C3*BK3)\"\n\"SUM(F3*$E$3)\"\n\"SUM(D3*BK3)\"\n\"SUM(BM4-BO4)\"\n\"SUM(F4:BG4)\"\n\"SUM(F4-$D3*F3)\"\n\"SUM(F6*$E$6)\"\n\"SUM(F9*$E$9)\"\n\"SUM(F12*$E$12)\"\n\"SUM(F15*$E$15)\"\n\"SUM(F18*$E$18)\"\n\"SUM(F21*$E$21)\"\n\"SUM(F24*$E$24)\"\n\"SUM(F27*$E$27)\"\n\"SUM(F30*$E$30)\"\n\"SUM(F33*$E$33)\"\n\"SUM(F36*$E$36)\"\n\"SUM(F39*$E$39)\"\n\"SUM(F42*$E$42)\"\n\"SUM(F45*$E$45)\"\n\"SUM(F48*$E$48)\"\n\"SUM(F51*$E$51)\"\n\"SUM(F54*$E$54)\"\n\"SUM(F57*$E$57)\"\n\"SUM(F60*$E$60)\"\n\"SUM(F63*$E$63)\"\n\"SUM(F66*$E$66)\"\n\"SUM(F69*$E$69)\"\n\"SUM(F72*$E$72)\"\n\"SUM(F75*$E$75)\"\n\"SUM(F78*$E$78)\"\n\"SUM(F81*$E$81)\"\n\"SUM(F84*$E$84)\"\n\"SUM(F87*$E$87)\"\n\"SUM(F90*$E$90)\"\n\"SUM(F93*$E$93)\"\n\"SUM(F96*$E$96)\"\n\"SUM(F99*$E$99)\"\n\"SUM(F102*$E$102)\"\n\"SUM(F105*$E$105)\"\n\"SUM(F108*$E$108)\"\n\"SUM(F111*$E$111)\"\n\"SUM(F114*$E$114)\"\n\"SUM(F117*$E$117)\"\n\"SUM(F120*$E$120)\"\n\"SUM(F123*$E$123)\"\n\"SUM(F126*$E$126)\"\n\"SUM(F129*$E$129)\"\n\"SUM(F132*$E$132)\"\n\"SUM(F135*$E$135)\"\n\"SUM(F138*$E$138)\"\n\"SUM(F141*$E$141)\"\n\"SUM(F144*$E$144)\"\n\"SUM(F147*$E$147)\"\n\"SUM(F150*$E$150)\"\n\"SUM(F153*$E$153)\"\n\"SUM(F156*$E$156)\"\n\"SUM(F159*$E$159)\"\n\"SUM(F162*$E$162)\"\n\"SUM(F165*$E$165)\"\n\"SUM(F168*$E$168)\"\n\"SUM(F171*$E$171)\"\n\"SUM(F174*$E$174)\"\n\"SUM(F177*$E$177)\"\n\"SUM(F180*$E$180)\"\n\"SUM(F183*$E$183)\"\n\"SUM(F186*$E$186)\"\n\"SUM(F189*$E$189)\"\n\"SUM(F192*$E$192)\"\n\"SUM(F195*$E$195)\"\n\"SUM(F198*$E$198)\"\n\"SUM(F201*$E$201)\"\n\"SUM(F204*$E$204)\"\n\"SUM(F207*$E$207)\"\n\"SUM(F210*$E$210)\"\n\"SUM(F213*$E$213)\"\n\"SUM(F216*$E$216)\"\n\"SUM(F219*$E$219)\"\n\"SUM(F222*$E$222)\"\n\"SUM(F225*$E$225)\"\n\"SUM(F228*$E$228)\"\n\"SUM(F231*$E$231)\"\n\"SUM(F234*$E$234)\"\n\"SUM(F237*$E$237)\"\n\"SUM(F240*$E$240)\"\n\"SUM(F243*$E$243)\"\n\"SUM(F246*$E$246)\"\n\"SUM(F249*$E$249)\"\n\"SUM(F252*$E$252)\"\n\"SUM(F255*$E$255)\"\n\"SUM(F258*$E$258)\"\n\"SUM(F261*$E$261)\"\n\"SUM(F264*$E$264)\"\n\"SUM(C3:C264)\"\n\"SUM(F269-F270)\"\n\"SUM(F268:BG268)\"\n\"SUM(BM4:BM265)\"\n\"SUM(BO4+BO7+BO10+BO13+BO16+BO19+BO22+BO25+BO28+BO31+BO34+BO37+BO40+BO43+BO46+BO49+BO52+BO55+BO58+BO61+BO64+BO67+BO70+BO73+BO76+BO79+BO82+BO85+BO88+BO91+BO94+BO97+BO100+BO103+BO106+BO109+BO112+BO115+BO118+BO121+BO124+BO127+BO130+BO133+BO136+BO139+BO142+BO145+BO148+BO151+BO154+BO157+BO160+BO163+BO166+BO169+BO172+BO175+BO178+BO181+BO184+BO187+BO190+BO193+BO196+BO199+BO202+BO205+BO208+BO211+BO214+BO217+BO220+BO223+BO226+BO229+BO232+BO235+BO238+BO241+BO244+BO247+BO250+BO253+BO256+BO259+BO262+BO265)\"\n\"SUM(F4+F7+F10+F13+F16+F19+F22+F25+F28+F31+F34+F37+F40+F43+F46+F49+F52+F55+F58+F61+F64+F67+F70+F73+F76+F79+F82+F85+F88+F91+F94+F97+F100+F103+F106+F109+F112+F115+F118+F121+F124+F127+F130+F133+F136+F139+F142+F145+F148+F151+F154+F157+F160+F163+F166+F169+F172+F175+F178+F181+F184+F187+F190+F193+F196+F199+F202+F205+F208+F211+F214+F217+F220+F223+F226+F229+F232+F235+F238+F241+F244+F247+F250+F253+F256+F259+F262+F265)\"\n\"SUM(F3+F6+F9+F12+F15+F18+F21+F24+F27+F30+F33+F36+F39+F42+F45+F48+F51+F54+F57+F60+F63+F66+F69+F72+F75+F78+F81+F84+F87+F90+F93+F96+F99+F102+F105+F108+F111+F114+F117+F120+F123+F126+F129+F132+F135+F138+F141+F144+F147+F150+F153+F156+F159+F162+F165+F168+F171+F174+F177+F180+F183+F186+F189+F192+F195+F198+F201+F204+F207+F210+F213+F216+F219+F222+F225+F228+F231+F234+F237+F240+F243+F246+F249+F252+F255+F258+F261+F264)\"\n\"SUM(C3-D3)\"\n\"SUM(B3:B56)\"\n\"'311'!L32\"\n\"G20\"\n\"A20+1\"\n\"'311'!L48\"\n\"'312'!L41\"\n\"'313'!L28\"\n\"'314'!K38\"\n\"H24\"\n\"SUM(G20:G23)\"\n\"H24\"\n\"SUM(I20:I25)\"\n\"A26+1\"\n\"'316'!L51\"\n\"'316'!L59\"\n\"SUM(G28:H28)\"\n\"SUM(G28:G30)\"\n\"G26-G31\"\n\"I32-I33\"\n\"I36+I37\"\n\"(I34+I38)-(I44+I49)\"\n\"I53-I54-I55\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(F21:G21)\"\n\"I21+J21\"\n\"H21+K21\"\n\"A21+1\"\n\"SUM(F21:F26)\"\n\"A27+1\"\n\"F29+F30\"\n\"F27+F31\"\n\"A32+1\"\n\"SUM(F36:F37)\"\n\"+G42+G43\"\n\"+A44+1\"\n\"F40+F44+F46+F47\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(F17:G17)\"\n\"I17+J17\"\n\"H17+K17\"\n\"A17+1\"\n\"SUM(F17:F20)\"\n\"F21+F22\"\n\"SUM(H24:H26)\"\n\"F23+F27+F30+F31\"\n\"A32+1\"\n\"F32+F37+F39\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(F20:G20)\"\n\"I20+J20\"\n\"H20+K20\"\n\"K26\"\n\"SUM(F20:F24)+F27\"\n\"SUM(H20:H27)\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(H19:I19)\"\n\"G19+J19\"\n\"A19+1\"\n\"A20+1\"\n\"SUM(G22:G23)\"\n\"G19+G20+G24+G25+G26\"\n\"A27+1\"\n\"SUM(G30:G33)\"\n\"G27+G34+G36\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"IF(F21=0,\"\"-\"\",H21/F21)\"\n\"A21+1\"\n\"SUM(F21:F24)\"\n\"SUM(F21:F24)\"\n\"A25+1\"\n\"'311'!G32\"\n\"'311'!G32\"\n\"'311'!G48\"\n\"'311'!G48\"\n\"'312'!G41\"\n\"'312'!G41\"\n\"'313'!G28\"\n\"'313'!G28\"\n\"SUM(H28:I31)\"\n\"SUM(H28:I31)\"\n\"A32+1\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(H21:K21)\"\n\"A21+1\"\n\"SUM(H21:H29)\"\n\"A30+1\"\n\"SUM(H33:H36)\"\n\"A37+1\"\n\"SUM(H39:H44)\"\n\"SUM(H47:H49)\"\n\"H30+H37+H45+H50\"\n\"L51+L59\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"A13+1\"\n\"SUM(G13:G16)\"\n\"A17+1\"\n\"G19+G20-G21+G22\"\n\"SUM(G25:G27)\"\n\"G17+G23+G28\"\n\"A29+1\"\n\"SUM(G44:G49)\"\n\"G37+G42+G50\"\n\"G29-G51\"\n\"A51+1\"\n\"G29-G51\"\n\"'310'!$G$3\"\n\"'310'!$G$5\"\n\"SUM(F19:G19)\"\n\"A19+1\"\n\"SUM(F19:F23)\"\n\"A24+1\"\n\"SUM(F26:F28)\"\n\"F24+F29\"\n\"A30+1\"\n\"SUM(F46:F51)\"\n\"F30+F44+F52+F53+F54\"\n\"'Segment P&L'!C15\"\n\"'Segment P&L'!C23\"\n\"'Segment P&L'!C31\"\n\"'Segment P&L'!C39\"\n\"'Segment P&L'!C47\"\n\"'Segment P&L'!C55\"\n\"'Segment P&L'!C63\"\n\"C11-C14-C15-C16-C17-C18-C19\"\n\"-0.4-0.1\"\n\"C21-C23-C24-C25\"\n\"C28-C30\"\n\"SUM(C33:C37)\"\n\"C39-C41\"\n\"SUM(C47:C49)\"\n\"279.6+0.1\"\n\"480.7-E13-E12-E11-E10\"\n\"509.3-G13-G12-G11-G10\"\n\"570.3-I13-I12-I11-I10\"\n\"-19.4-0.1\"\n\"542.8-M13-M12-M11-M10\"\n\"SUM(C10:C14)\"\n\"69.8\"\n\"65.6+0.1\"\n\"32.9\"\n\"11.8+3.6\"\n\"15.2+0.1\"\n\"171.9+0.1\"\n\"143.5+0.1\"\n\"177.1\"\n\"261.7-C21-C20-C19-C18\"\n\"219.4-E21-E20-E19-E18\"\n\"247.5-G21-G20-G19-G18\"\n\"254.1-I21-I20-I19-I18\"\n\"271.1-K21-K20-K19-K18\"\n\"268-M21-M20-M19-M18\"\n\"36.2+0.1\"\n\"36.4\"\n\"11.6-0.1\"\n\"3.7+0.1\"\n\"108.2-C29-C28-C27-C26\"\n\"120.3-E29-E28-E27-E26\"\n\"120.7-G29-G28-G27-G26+0.1\"\n\"121.6-I29-I28-I27-I26\"\n\"127-K29-K28-K27-K26\"\n\"127.8-M29-M28-M27-M26\"\n\"0.5-0.1\"\n\"0+0.1\"\n\"2200+0.9\"\n\"-2280.4-0.9\"\n\"-74.3+0.3\"\n\"-10.4-0.1\"\n\"-2198.4-G69-G68-G67-G66-0.9\"\n\"60.7-I69-I68-I67-I66\"\n\"8.9+0.3-M69-M68-M67-M66\"\n\"C10-D10\"\n\"SUM(B10:B11)\"\n\"SUM(B10-B19)\"\n\"B28-B37\"\n\"D9-C9\"\n\"B9-B15\"\n\"SUM(I20:M20)\"\n\"SUMIF(S13:S33,\"\"A\"\",AJ13:AJ33)\"\n\"SUMIF(S14:S34,\"\"Q\"\",AJ14:AJ34)\"\n\"B8\"\n\"C8+L8\"\n\"D8+H8\"\n\"E8+F8+G8\"\n\"B16+B18+B20\"\n\"B6+B10+B14+B22+B26\"\n\"SUM(B15:B69)\"\n\"SUM(G8:G18)\"\n\"SUM(G24-G25+G26-G27+G28-G29+G30)\"\n\"SUM(G20+G32)\"\n\"SUM(G41:G47)\"\n\"SUM(G52:G55)\"\n\"SUM(G49+G57)\"\n\"SUM(G62:G63)\"\n\"SUM(G59+G65)\"\n\"SUM(G8+I8+K8)\"\n\"SUM(G8+G9-G10)\"\n\"SUM(G14:G15)\"\n\"SUM(G11-G16)\"\n\"SUM(G21:G23)\"\n\"SUM(G32:G48)\"\n\"SUM(G51:G59)\"\n\"SUM(G18+G24-G29-G49+G60-G71)\"\n\"SUM(C6:C19)\"\n\"SUM(C23:C28)\"\n\"SUM(C32:C33)\"\n\"SUM(D20:D34)\"\n\"SUM(E36+E38)\"\n\"SUM(G9:G10)\"\n\"I9+I10\"\n\"G39\"\n\"SUM(G162:G166)\"\n\"G13+G22+G31+G40+G48+G61+G70+G79+G88+G97+G106+G115+G124+G134+G144+G154+G167+G173\"\n\"G187+G196+G204+G213+G222+G228\"\n\"G239\"\n\"G305+G314\"\n\"G326+G335+G347\"\n\"SUM(G390)\"\n\"G176+G230+G241+G252+G263+G274+G285+G296+G316+G349+G360+G370+G381+G392\"\n\"G406+G415+G421\"\n\"G434\"\n\"G395\"\n\"G424\"\n\"G437\"\n\"G451+G453+G455\"\n\"D7-D8\"\n\"651.6\"\n\"SUM(D11:D12)\"\n\"SUM(N11:N13)\"\n\"SUM(D14:D17)\"\n\"SUM(G14:G17)+0.1\"\n\"SUM(G18:G19)-0.1\"\n\"SUM(D31:D37)\"\n\"1236.8-193.4+73.7+13.2\"\n\"SUM(D40:D41)\"\n\"225.4+19.6\"\n\"SUM(F3:BZ3)\"\n\"SUM(C3*CD3)\"\n\"SUM(F3*E3)\"\n\"SUM(G3*E3)\"\n\"SUM(H3*E3)\"\n\"SUM(I3*E3)\"\n\"SUM(J3*E3)\"\n\"SUM(K3*E3)\"\n\"SUM(L3*E3)\"\n\"SUM(M3*E3)\"\n\"SUM(N3*E3)\"\n\"SUM(O3*E3)\"\n\"SUM(P3*E3)\"\n\"SUM(Q3*E3)\"\n\"SUM(R3*E3)\"\n\"SUM(S3*E3)\"\n\"SUM(T3*E3)\"\n\"SUM(U3*E3)\"\n\"SUM(V3*E3)\"\n\"SUM(W3*E3)\"\n\"SUM(X3*E3)\"\n\"SUM(Y3*E3)\"\n\"SUM(Z3*E3)\"\n\"SUM(AA3*E3)\"\n\"SUM(AB3*E3)\"\n\"SUM(AC3*E3)\"\n\"SUM(AD3*E3)\"\n\"SUM(AE3*E3)\"\n\"SUM(AF3*E3)\"\n\"SUM(AG3*E3)\"\n\"SUM(AH3*E3)\"\n\"SUM(AI3*E3)\"\n\"SUM(AJ3*E3)\"\n\"SUM(AK3*E3)\"\n\"SUM(AL3*E3)\"\n\"SUM(AM3*E3)\"\n\"SUM(AN3*E3)\"\n\"SUM(AO3*E3)\"\n\"SUM(AP3*E3)\"\n\"SUM(AQ3*E3)\"\n\"SUM(AR3*E3)\"\n\"SUM(AS3*E3)\"\n\"SUM(AT3*E3)\"\n\"SUM(AU3*E3)\"\n\"SUM(AV3*E3)\"\n\"SUM(AW3*E3)\"\n\"SUM(AX3*E3)\"\n\"SUM(AY3*E3)\"\n\"SUM(AZ3*E3)\"\n\"SUM(BA3*E3)\"\n\"SUM(BB3*E3)\"\n\"SUM(BC3*E3)\"\n\"SUM(BD3*E3)\"\n\"SUM(BE3*E3)\"\n\"SUM(BF3*E3)\"\n\"SUM(BG3*E3)\"\n\"SUM(BH3*E3)\"\n\"SUM(BI3*E3)\"\n\"SUM(BJ3*E3)\"\n\"SUM(BK3*E3)\"\n\"SUM(BL3*E3)\"\n\"SUM(BM3*E3)\"\n\"SUM(BN3*E3)\"\n\"SUM(BO3*E3)\"\n\"SUM(BP3*E3)\"\n\"SUM(BQ3*E3)\"\n\"SUM(BR3*E3)\"\n\"SUM(BS3*E3)\"\n\"SUM(BT3*E3)\"\n\"SUM(BU3*E3)\"\n\"SUM(BV3*E3)\"\n\"SUM(BW3*E3)\"\n\"SUM(BX3*E3)\"\n\"SUM(BY3*E3)\"\n\"SUM(BZ3*E3)\"\n\"SUM(D3*CD3)\"\n\"SUM(CF4-CH4)\"\n\"SUM(F4:BZ4)\"\n\"SUM(F4-D3*F3)\"\n\"SUM(G4-D3*G3)\"\n\"SUM(H4-D3*H3)\"\n\"SUM(I4-D3*I3)\"\n\"SUM(J4-D3*J3)\"\n\"SUM(K4-D3*K3)\"\n\"SUM(L4-D3*L3)\"\n\"SUM(M4-D3*M3)\"\n\"SUM(N4-D3*N3)\"\n\"SUM(O4-D3*O3)\"\n\"SUM(P4-D3*P3)\"\n\"SUM(Q4-D3*Q3)\"\n\"SUM(R4-D3*R3)\"\n\"SUM(S4-D3*S3)\"\n\"SUM(T4-D3*T3)\"\n\"SUM(U4-D3*U3)\"\n\"SUM(V4-D3*V3)\"\n\"SUM(W4-D3*W3)\"\n\"SUM(X4-D3*X3)\"\n\"SUM(Y4-D3*Y3)\"\n\"SUM(Z4-D3*Z3)\"\n\"SUM(AA4-D3*AA3)\"\n\"SUM(AB4-D3*AB3)\"\n\"SUM(AC4-D3*AC3)\"\n\"SUM(AD4-D3*AD3)\"\n\"SUM(AE4-D3*AE3)\"\n\"SUM(AF4-D3*AF3)\"\n\"SUM(AG4-D3*AG3)\"\n\"SUM(AH4-D3*AH3)\"\n\"SUM(AI4-D3*AI3)\"\n\"SUM(AJ4-D3*AJ3)\"\n\"SUM(AK4-D3*AK3)\"\n\"SUM(AL4-D3*AL3)\"\n\"SUM(AM4-D3*AM3)\"\n\"SUM(AN4-D3*AN3)\"\n\"SUM(AO4-D3*AO3)\"\n\"SUM(AP4-D3*AP3)\"\n\"SUM(AQ4-D3*AQ3)\"\n\"SUM(AR4-D3*AR3)\"\n\"SUM(AS4-D3*AS3)\"\n\"SUM(AT4-D3*AT3)\"\n\"SUM(AU4-D3*AU3)\"\n\"SUM(AV4-D3*AV3)\"\n\"SUM(AW4-D3*AW3)\"\n\"SUM(AX4-D3*AX3)\"\n\"SUM(AY4-D3*AY3)\"\n\"SUM(AZ4-D3*AZ3)\"\n\"SUM(BA4-D3*BA3)\"\n\"SUM(BB4-D3*BB3)\"\n\"SUM(BC4-D3*BC3)\"\n\"SUM(BD4-D3*BD3)\"\n\"SUM(BE4-D3*BE3)\"\n\"SUM(BF4-D3*BF3)\"\n\"SUM(BG4-D3*BG3)\"\n\"SUM(BH4-D3*BH3)\"\n\"SUM(BI4-D3*BI3)\"\n\"SUM(BJ4-D3*BJ3)\"\n\"SUM(BL4-D3*BL3)\"\n\"SUM(BM4-D3*BM3)\"\n\"SUM(BN4-D3*BN3)\"\n\"SUM(BO4-D3*BO3)\"\n\"SUM(BP4-D3*BP3)\"\n\"SUM(BQ4-D3*BQ3)\"\n\"SUM(BR4-D3*BR3)\"\n\"SUM(BS4-D3*BS3)\"\n\"SUM(BT4-D3*BT3)\"\n\"SUM(BU4-D3*BU3)\"\n\"SUM(BV4-D3*BV3)\"\n\"SUM(BW4-D3*BW3)\"\n\"SUM(BX4-D3*BX3)\"\n\"SUM(BY4-D3*BY3)\"\n\"SUM(BZ4-D3*BZ3)\"\n\"SUM(BK190-D189*BK189)\"\n\"SUM(C3:C258)\"\n\"SUM(CF4+CF7+CF10+CF13+CF16+CF19+CF22+CF25+CF28+CF31+CF34+CF37+CF40+CF43+CF46+CF49+CF52+CF55+CF58+CF61+CF64+CF67+CF70+CF73+CF76+CF79+CF82+CF85+CF88+CF91+CF94+CF97+CF100+CF103+CF106+CF109+CF112+CF115+CF118+CF121+CF124+CF127+CF130+CF133+CF136+CF139+CF142+CF145+CF148+CF151+CF154+CF157+CF160+CF163+CF166+CF169+CF172+CF175+CF178+CF181+CF184+CF187+CF190+CF193+CF196+CF199+CF202+CF205+CF208+CF211+CF214+CF217+CF220+CF223+CF226+CF229+CF232+CF235+CF238+CF241+CF244+CF247+CF250+CF253+CF256+CF259)\"\n\"SUM(F264-F265)\"\n\"SUM(F263:BZ263)\"\n\"SUM(F4+F7+F10+F13+F16+F19+F22+F25+F28+F31+F34+F37+F40+F43+F46+F49+F52+F55+F58+F61+F64+F67+F70+F73+F76+F79+F82+F85+F88+F91+F94+F97+F100+F103+F106+F109+F112+F115+F118+F121+F124+F127+F130+F133+F136+F139+F142+F145+F148+F151+F154+F157+F160+F163+F166+F169+F172+F175+F178+F181+F184+F187+F190+F193+F196+F199+F202+F205+F208+F211+F214+F217+F220+F223+F226+F229+F232+F235+F238+F241+F244+F247+F250+F253+F256+F259)\"\n\"SUM(A2:B249)\"\n\"SUM(B101:B105)\"\n\"SUM(B100:B104)\"\n\"SUM(E9:E16)\"\n\"+E21-E22\"\n\"+E17+E19+E23+E25+E26+E27+E28\"\n\"SUM(E34:E39)\"\n\"+E50+E54+E55+E56+E57+E58+E59\"\n\"+E40+E42+E43+E44+E45+E46+E60\"\n\"+C8+C9\"\n\"SUM(C13:C15)\"\n\"+C10-C16\"\n\"SUM(C20:C23)\"\n\"+C26+C29+C30+C31+C32\"\n\"+C33-C34\"\n\"+C36/C38\"\n\"+C36/C39\"\n\"SUM(C9:I9)\"\n\"+E11\"\n\"+G11\"\n\"SUM(G12:G14)\"\n\"+G15\"\n\"+G11+G15\"\n\"SUM(B9:B23)\"\n\"SUM(B24:B37)\"\n\"SUM(D8:D22)\"\n\"SUM(D26:D32)\"\n\"SUM(D36:D43)\"\n\"+D23+D33+D44+D45\"\n\"+E49\"\n\"+D46+D47\"\n\"SUM(E20:E21)\"\n\"SUM(E24:E29)\"\n\"SUM(E30,E37)\"\n\"SUM(E22,-E39)\"\n\"C11/C10\"\n\"C12/C10\"\n\"C13/C10\"\n\"C14/C10\"\n\"C14+C11\"\n\"C15/C10\"\n\"C16/C10\"\n\"C16+C15\"\n\"C17/C10\"\n\"SUM(C19:C20)\"\n\"C18/C10\"\n\"C19/$C$9\"\n\"C11/C10\"\n\"C12/C10\"\n\"C12+C11\"\n\"C13/C10\"\n\"C14/C10\"\n\"C13+C14\"\n\"C15/C10\"\n\"SUM(C17:C20)\"\n\"C16/$C$10\"\n\"C18+D18+E18\"\n\"F18/B18\"\n\"SUM(D8:I8)\"\n\"22441627.36+987072.86+464876\"\n\"'General Rev 3 '!G68\"\n\"'Debt Service Page 5'!G27\"\n\"'Capital Projects Page 6'!F43\"\n\"'Food Service Page 7'!E42\"\n\"'Federal Projects Page 8'!F46\"\n\"'Internal Service Page 9'!F23\"\n\"'General Exp Page 4'!I38\"\n\"'Debt Service Page 5'!I44\"\n\"'Capital Projects Page 6'!H68\"\n\"'Food Service Page 7'!G65\"\n\"'Federal Projects Page 8'!H81\"\n\"'Internal Service Page 9'!H41\"\n\"SUM(J8:J22)\"\n\"'General Exp Page 4'!G38\"\n\"'Capital Projects Page 6'!F68\"\n\"'Food Service Page 7'!E65\"\n\"'Federal Projects Page 8'!F81\"\n\"'Internal Service Page 9'!F41\"\n\"'General Rev 3 '!I68\"\n\"'Debt Service Page 5'!I27\"\n\"'Capital Projects Page 6'!H43\"\n\"'Food Service Page 7'!G42\"\n\"'Federal Projects Page 8'!H46\"\n\"'Internal Service Page 9'!H23\"\n\"SUM(J27:J38)\"\n\"'Internal Service Page 9'!F43\"\n\"'General Exp Page 4'!G42\"\n\"'Food Service Page 7'!E68\"\n\"D21\"\n\"'Debt Service Page 5'!G46\"\n\"-59594.61+1095-127.4\"\n\"'General Exp Page 4'!G41\"\n\"'Capital Projects Page 6'!F71\"\n\"'General Exp Page 4'!G40\"\n\"'Capital Projects Page 6'!F70\"\n\"'Food Service Page 7'!E67\"\n\"SUM(J40:J53)\"\n\"SUM(L39:L54)\"\n\"D24-D54\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"'General Rev 3 '!I14\"\n\"'Federal Projects Page 8'!H12\"\n\"SUM(D8:I8)\"\n\"'General Rev 3 '!I18\"\n\"'Food Service Page 7'!G19\"\n\"'Federal Projects Page 8'!H24\"\n\"+'General Rev 3 '!I38\"\n\"'Debt Service Page 5'!I23+'Debt Service Page 5'!I13\"\n\"'Capital Projects Page 6'!H20\"\n\"'Food Service Page 7'!G26\"\n\"'Federal Projects Page 8'!H29\"\n\"'General Rev 3 '!I55\"\n\"'Debt Service Page 5'!I18\"\n\"'Capital Projects Page 6'!H28\"\n\"'Food Service Page 7'!G37\"\n\"'Federal Projects Page 8'!H41\"\n\"'Internal Service Page 9'!H18\"\n\"'General Rev 3 '!I66\"\n\"'Debt Service Page 5'!I25+'Debt Service Page 5'!I22\"\n\"'Capital Projects Page 6'!H35+'Capital Projects Page 6'!H41\"\n\"'Food Service Page 7'!G41\"\n\"'Internal Service Page 9'!H21\"\n\"SUM(J7:J12)\"\n\"'General Exp Page 4'!I11\"\n\"'Federal Projects Page 8'!H55\"\n\"'Federal Projects Page 8'!H58\"\n\"SUM(J19:J23)\"\n\"'General Exp Page 4'!I19\"\n\"'Federal Projects Page 8'!H65\"\n\"SUM(Capital Projects Page 6!H53:H61)\"\n\"'Food Service Page 7'!G59\"\n\"'Federal Projects Page 8'!H70\"\n\"'Internal Service Page 9'!H41\"\n\"SUM(J24:J32)\"\n\"'General Exp Page 4'!I30\"\n\"'Federal Projects Page 8'!H75\"\n\"'Debt Service Page 5'!I39\"\n\"'General Exp Page 4'!I35+'General Exp Page 4'!I36+'General Exp Page 4'!I37+'General Exp Page 4'!I34\"\n\"SUM(Capital Projects Page 6!H65:H67)\"\n\"SUM(Food Service Page 7!G63:G63)\"\n\"'Federal Projects Page 8'!H79\"\n\"SUM(J16:J37)\"\n\"K14-K38\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+G11-I11\"\n\"IF(G11>I11,G11-I11,0)\"\n\"SUM(G11:G13)\"\n\"SUM(G16:G17)\"\n\"SUM(G21:G37)\"\n\"31792619.08+166040.81+4736666.96\"\n\"IF(G41>I43,G41-I43,0)\"\n\"286079.21+98489.64+333609.44+28633.12+126820.26\"\n\"29.4+139347.28+1237049.7+480918.65+597643.73+41871.98\"\n\"SUM(G40:G54)\"\n\"SUM(G57:G65)\"\n\"G66+G55+G38+G18+G14\"\n\"65959956.82\"\n\"G70\"\n\"M72\"\n\"SUM(M10:M65)\"\n\"K75\"\n\"SUM(G68:G74)\"\n\"(K68)-(K72)\"\n\"706755294.83-G75\"\n\"SUM(G70:G71)\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"127326317.18+28335138.43+4904540.69+6452249.17\"\n\"SUM(G13:G16)\"\n\"SUM(I12:I16)\"\n\"+G24-I24\"\n\"SUM(G19:G27)\"\n\"SUM(G30:G37)+G28+G17+G11\"\n\"6026707.6+1500000\"\n\"G40\"\n\"K38\"\n\"SUM(G38:G44)\"\n\"'General Rev 3 '!G75-'General Exp Page 4'!G45\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+G12-I12\"\n\"IF(G12>I12,G12-I12,0)\"\n\"SUM(G11:G12)\"\n\"SUM(G14:G17)\"\n\"SUM(G19:G21)\"\n\"G25+G22+G18+G13\"\n\"G29\"\n\"M30\"\n\"SUM(M11:M24)\"\n\"K32\"\n\"SUM(G27:G31)\"\n\"(K27)-(K30)\"\n\"G39+G41\"\n\"K39\"\n\"K44\"\n\"SUM(G44:G47)\"\n\"SUM(I44:I49)\"\n\"+G32-G50\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"SUM(F12:F19)\"\n\"SUM(H11:H19)\"\n\"SUM(F21:F27)\"\n\"+F30-H30\"\n\"IF(F31>H31,F31-H31,0)\"\n\"SUM(F29:F34)\"\n\"SUM(F36:F40)\"\n\"F20+F28+F35+F41\"\n\"F45\"\n\"L46\"\n\"SUM(L11:L34)\"\n\"J48\"\n\"(J43)-(J46)\"\n\"SUM(F51:F67)\"\n\"J68\"\n\"+F48-F75\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"SUM(E11:E18)\"\n\"+E22-G22\"\n\"IF(E22>G22,E22-G22,0)\"\n\"SUM(E21:E25)\"\n\"SUM(E28:E36)\"\n\"SUM(E38:E40)\"\n\"E19+E26+E37+E41\"\n\"E44\"\n\"K45\"\n\"SUM(K11:K40)\"\n\"I47\"\n\"(I42)-(I45)\"\n\"SUM(E59:E63)\"\n\"8792696.43\"\n\"+E67\"\n\"I65\"\n\"SUM(E65:E71)\"\n\"+E47-E72\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+F11-H11\"\n\"SUM(F10:F11)\"\n\"SUM(F14:F23)\"\n\"SUM(H26:H28)\"\n\"SUM(F31:F36)\"\n\"F12+F24+F29+F37+F42\"\n\"H12+H24+H29+H37+H42+H44\"\n\"SUM(F50:F54)\"\n\"SUM(F64:F72)\"\n\"F55+F62+F73+F75+F76+F77+F79\"\n\"+H46-H81\"\n\"SUM(F81:F84)\"\n\"+F46-F85\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"SUM(F10:F17)\"\n\"F20-H20\"\n\"IF(F20>H20,F20-H20,0)\"\n\"SUM(F19:F20)\"\n\"+F21+F18\"\n\"F25\"\n\"+L26\"\n\"(H26)\"\n\"SUM(L11:L22)\"\n\"J28\"\n\"SUM(F23:F27)\"\n\"(J23)-(J26)\"\n\"SUM(F32:F40)\"\n\"+J41\"\n\"SUM(F41:F45)\"\n\"+F28-F47\"\n\"'Comb Rev & Expend Page 2'!J8\"\n\"C5/$C$11\"\n\"SUM(C4:C9)\"\n\"SUM(D5:D10)\"\n\"'Comb Rev & Expend Page 2'!K23\"\n\"'Comb Rev & Expend Page 2'!K32\"\n\"'Comb Rev & Expend Page 2'!J33\"\n\"SUM(C13:C20)\"\n\"SUM(D14:D20)\"\n\"C11-C21\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"K9/$K$19\"\n\"4845338.38+97266.93+6318.01\"\n\"SUM(L9:L17)\"\n\"SUM(E19:J19)\"\n\"SUM(K8:K17)\"\n\"'Comb Rev & Expend Page 2'!D38\"\n\"'Comb Rev & Expend Page 2'!D8\"\n\"C7/$C$13\"\n\"SUM(C6:C11)\"\n\"SUM(D7:D12)\"\n\"ROUND(SUM(C16/$C$24),4)\"\n\"SUM(C16/C24)\"\n\"SUM(Comb Rev & Expend Page 2!D19:D22)\"\n\"SUM(C17/C24)\"\n\"SUM(Comb Rev & Expend Page 2!D24:D32)\"\n\"SUM(C18/C24)\"\n\"'Comb Rev & Expend Page 2'!D33\"\n\"SUM(C19/C24)\"\n\"ROUND(SUM(C20/$C$24),3)\"\n\"SUM(C20/C24)\"\n\"SUM(C21/C24)\"\n\"SUM(C22/C24)\"\n\"SUM(D16:D22)\"\n\"SUM(C15:C22)\"\n\"C13-C24\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"'General Rev 3 '!I14\"\n\"'Federal Projects Page 8'!H12\"\n\"SUM(D8:I8)\"\n\"'General Rev 3 '!I18\"\n\"'Food Service Page 7'!G19\"\n\"'Federal Projects Page 8'!H24\"\n\"'General Rev 3 '!I38\"\n\"'Debt Service Page 5'!I13\"\n\"'Capital Projects Page 6'!H20\"\n\"'Food Service Page 7'!G26\"\n\"'Federal Projects Page 8'!H29\"\n\"'General Rev 3 '!I55\"\n\"'Debt Service Page 5'!I18\"\n\"'Capital Projects Page 6'!H28\"\n\"'Food Service Page 7'!G37\"\n\"'Federal Projects Page 8'!H37\"\n\"'Internal Service Page 9'!H18\"\n\"'General Rev 3 '!I66\"\n\"'Debt Service Page 5'!I25+'Debt Service Page 5'!I22\"\n\"'Capital Projects Page 6'!H35+'Capital Projects Page 6'!H41\"\n\"'Food Service Page 7'!G41\"\n\"'Federal Projects Page 8'!H42\"\n\"'Internal Service Page 9'!H21\"\n\"'General Exp Page 4'!I19\"\n\"'Federal Projects Page 8'!H65\"\n\"'Food Service Page 7'!G59\"\n\"'Federal Projects Page 8'!H70\"\n\"'Internal Service Page 9'!H41\"\n\"'General Exp Page 4'!I30\"\n\"'Federal Projects Page 8'!H75\"\n\"'Food Service Page 7'!G61\"\n\"'General Exp Page 4'!I35+'General Exp Page 4'!I36+'General Exp Page 4'!I37+'General Exp Page 4'!I34\"\n\"SUM(Capital Projects Page 6!H65:H67)\"\n\"SUM(Food Service Page 7!G63:G63)\"\n\"'Federal Projects Page 8'!H79\"\n\"SUM(D8:I8)\"\n\"'General Rev 3 '!G70\"\n\"'Debt Service Page 5'!G28\"\n\"'Capital Projects Page 6'!F44\"\n\"'Food Service Page 7'!E42\"\n\"'Federal Projects Page 8'!F47\"\n\"'Internal Service Page 9'!F23\"\n\"'General Exp Page 4'!I38\"\n\"'Debt Service Page 5'!I45\"\n\"'Capital Projects Page 6'!H69\"\n\"'Food Service Page 7'!G66\"\n\"'Federal Projects Page 8'!H83\"\n\"'Internal Service Page 9'!H41\"\n\"SUM(D8:D22)\"\n\"SUM(J8:J22)\"\n\"'General Exp Page 4'!G38\"\n\"'Capital Projects Page 6'!F69\"\n\"'Food Service Page 7'!E66\"\n\"'Federal Projects Page 8'!F83\"\n\"'Internal Service Page 9'!F41\"\n\"'General Rev 3 '!I70\"\n\"'Debt Service Page 5'!I28\"\n\"'Capital Projects Page 6'!H44\"\n\"'Food Service Page 7'!G42\"\n\"'Federal Projects Page 8'!H47\"\n\"'Internal Service Page 9'!H23\"\n\"SUM(D26:D38)\"\n\"SUM(J27:J37)\"\n\"SUM(J27:J38)\"\n\"'Internal Service Page 9'!F43\"\n\"D21\"\n\"'Debt Service Page 5'!G47\"\n\"'General Exp Page 4'!G41\"\n\"'Capital Projects Page 6'!F72\"\n\"'General Exp Page 4'!G40\"\n\"'Capital Projects Page 6'!F71\"\n\"'Food Service Page 7'!E68\"\n\"SUM(D39:D51)\"\n\"SUM(E39:E53)\"\n\"SUM(J39:J52)\"\n\"SUM(J40:J53)\"\n\"SUM(L39:L54)\"\n\"D24-D54\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"'General Rev 3 '!I14\"\n\"'Federal Projects Page 8'!H12\"\n\"SUM(D8:I8)\"\n\"'General Rev 3 '!I18\"\n\"'Food Service Page 7'!G19\"\n\"'Federal Projects Page 8'!H24\"\n\"+'General Rev 3 '!I40\"\n\"'Debt Service Page 5'!I23+'Debt Service Page 5'!I13\"\n\"'Capital Projects Page 6'!H20\"\n\"'Food Service Page 7'!G26\"\n\"'Federal Projects Page 8'!H29\"\n\"'General Rev 3 '!I57\"\n\"'Debt Service Page 5'!I18\"\n\"'Capital Projects Page 6'!H28\"\n\"'Food Service Page 7'!G37\"\n\"'Federal Projects Page 8'!H38\"\n\"'Internal Service Page 9'!H18\"\n\"'General Rev 3 '!I68\"\n\"'Debt Service Page 5'!I26+'Debt Service Page 5'!I22\"\n\"'Capital Projects Page 6'!H35+'Capital Projects Page 6'!H42\"\n\"'Food Service Page 7'!G41\"\n\"'Federal Projects Page 8'!H43\"\n\"'Internal Service Page 9'!H21\"\n\"SUM(D7:D12)\"\n\"SUM(J7:J12)\"\n\"'General Exp Page 4'!I11\"\n\"'Federal Projects Page 8'!H56\"\n\"'Federal Projects Page 8'!H59\"\n\"SUM(J19:J23)\"\n\"'General Exp Page 4'!I19\"\n\"'Federal Projects Page 8'!H66\"\n\"SUM('Capital Projects Page 6'!H54:H62)\"\n\"'Food Service Page 7'!G59\"\n\"'Internal Service Page 9'!H41\"\n\"SUM(J24:J32)\"\n\"'General Exp Page 4'!I30\"\n\"'Federal Projects Page 8'!H77\"\n\"'Debt Service Page 5'!I40\"\n\"'General Exp Page 4'!I35+'General Exp Page 4'!I36+'General Exp Page 4'!I37+'General Exp Page 4'!I34\"\n\"SUM('Capital Projects Page 6'!H66:H68)\"\n\"SUM('Food Service Page 7'!G64:G64)\"\n\"'Federal Projects Page 8'!H81\"\n\"SUM(D16:D36)\"\n\"SUM(J16:J37)\"\n\"D14-D38\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+G11-I11\"\n\"IF(G11>I11,G11-I11,0)\"\n\"SUM(G11:G13)\"\n\"SUM(G16:G17)\"\n\"SUM(G21:G39)\"\n\"IF(G43>I45,G43-I45,0)\"\n\"SUM(G42:G56)\"\n\"SUM(G59:G67)\"\n\"G68+G57+G40+G18+G14\"\n\"G72\"\n\"M74\"\n\"SUM(M10:M67)\"\n\"K77\"\n\"SUM(G70:G76)\"\n\"(K70)-(K74)\"\n\"706755294.83-G77\"\n\"SUM(G72:G73)\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+G11-I11\"\n\"SUM(G13:G16)\"\n\"SUM(I12:I16)\"\n\"SUM(G19:G27)\"\n\"SUM(G30:G37)+G28+G17+G11\"\n\"G40\"\n\"K38\"\n\"SUM(G38:G44)\"\n\"'General Rev 3 '!G77-'General Exp Page 4'!G45\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+G12-I12\"\n\"IF(G12>I12,G12-I12,0)\"\n\"SUM(G11:G12)\"\n\"SUM(G15:G17)\"\n\"SUM(I14:I17)\"\n\"G26+G22+G18+G13\"\n\"G30\"\n\"M31\"\n\"SUM(M11:M24)\"\n\"K33\"\n\"SUM(G28:G32)\"\n\"(K28)-(K31)\"\n\"G40+G42\"\n\"K40\"\n\"K45\"\n\"SUM(G45:G48)\"\n\"SUM(I45:I50)\"\n\"+G33-G51\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+F12-H12\"\n\"IF(F12>H12,F12-H12,0)\"\n\"SUM(F12:F19)\"\n\"SUM(H11:H19)\"\n\"SUM(F21:F27)\"\n\"SUM(F29:F34)\"\n\"F20+F28+F35+F42\"\n\"F46\"\n\"L47\"\n\"SUM(L11:L34)\"\n\"J49\"\n\"SUM(F44:F48)\"\n\"(J44)-(J47)\"\n\"SUM(F52:F68)\"\n\"J69\"\n\"+F49-F76\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+E12-G12\"\n\"IF(E12>G12,E12-G12,0)\"\n\"SUM(E11:E18)\"\n\"SUM(E21:E25)\"\n\"SUM(E28:E36)\"\n\"SUM(E38:E40)\"\n\"E19+E26+E37+E41\"\n\"E44\"\n\"K45\"\n\"SUM(K11:K40)\"\n\"I47\"\n\"(I42)-(I45)\"\n\"SUM(E59:E64)\"\n\"+E68\"\n\"I66\"\n\"SUM(E66:E72)\"\n\"+E47-E73\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"+F11-H11\"\n\"SUM(F10:F11)\"\n\"SUM(F14:F23)\"\n\"SUM(H26:H28)\"\n\"SUM(F31:F37)\"\n\"F12+F24+F29+F38+F43\"\n\"H12+H24+H29+H38+H43+H45\"\n\"SUM(F51:F55)\"\n\"F56+F63+F75+F77+F78+F79+F81\"\n\"+H47-H83\"\n\"SUM(F83:F86)\"\n\"+F47-F87\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"F12-H12\"\n\"IF(F12>H12,F12-H12,0)\"\n\"SUM(F10:F17)\"\n\"SUM(F19:F20)\"\n\"+F21+F18\"\n\"F25\"\n\"+L26\"\n\"(H26)\"\n\"SUM(L11:L22)\"\n\"SUM(F23:F27)\"\n\"(J23)-(J26)\"\n\"SUM(F32:F40)\"\n\"+J41\"\n\"SUM(F41:F45)\"\n\"+F28-F47\"\n\"'Comb Rev & Expend Page 2'!J8\"\n\"C5/$C$11\"\n\"SUM(C4:C9)\"\n\"SUM(D5:D10)\"\n\"C14/$C$21\"\n\"'Comb Rev & Expend Page 2'!K23\"\n\"'Comb Rev & Expend Page 2'!K32\"\n\"'Comb Rev & Expend Page 2'!J33\"\n\"SUM(C13:C20)\"\n\"SUM(D14:D20)\"\n\"C11-C21\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"SUM(E9:J9)\"\n\"K9/$K$19\"\n\"SUM(L9:L17)\"\n\"SUM(E8:E18)\"\n\"SUM(K8:K17)\"\n\"'Comb Rev & Expend Page 2'!D38\"\n\"+E19-E22\"\n\"'Comb Rev & Expend Page 2'!D8\"\n\"C7/$C$13\"\n\"SUM(C6:C11)\"\n\"SUM(D7:D12)\"\n\"ROUND(SUM(C16/$C$24),4)-0.0002\"\n\"SUM(C16/C24)\"\n\"SUM('Comb Rev & Expend Page 2'!D19:D22)\"\n\"ROUND(SUM(C17/$C$24),4)\"\n\"SUM(C17/C24)\"\n\"SUM('Comb Rev & Expend Page 2'!D24:D32)\"\n\"SUM(C18/C24)\"\n\"'Comb Rev & Expend Page 2'!D33\"\n\"SUM(C19/C24)\"\n\"ROUND(SUM(C20/$C$24),3)\"\n\"SUM(C20/C24)\"\n\"SUM(C21/C24)\"\n\"SUM(C22/C24)\"\n\"SUM(D16:D22)\"\n\"SUM(C15:C22)\"\n\"C13-C24\"\n\"+'Combined Bal Sheet Page 1'!A3\"\n\"'General Rev 3 '!I14\"\n\"'Federal Projects Page 8'!H12\"\n\"SUM(D8:I8)\"\n\"'General Rev 3 '!I18\"\n\"'Food Service Page 7'!G19\"\n\"'Federal Projects Page 8'!H24\"\n\"'General Rev 3 '!I40\"\n\"'Debt Service Page 5'!I13\"\n\"'Capital Projects Page 6'!H20\"\n\"'Food Service Page 7'!G26\"\n\"'Federal Projects Page 8'!H29\"\n\"'General Rev 3 '!I57\"\n\"'Debt Service Page 5'!I18\"\n\"'Capital Projects Page 6'!H28\"\n\"'Food Service Page 7'!G37\"\n\"'Federal Projects Page 8'!H38\"\n\"'Internal Service Page 9'!H18\"\n\"'General Rev 3 '!I68\"\n\"'Debt Service Page 5'!I26+'Debt Service Page 5'!I22\"\n\"'Capital Projects Page 6'!H35+'Capital Projects Page 6'!H42\"\n\"'Food Service Page 7'!G41\"\n\"'Federal Projects Page 8'!H43\"\n\"'Internal Service Page 9'!H21\"\n\"SUM(D7:D12)\"\n\"'General Exp Page 4'!I19\"\n\"'Federal Projects Page 8'!H66\"\n\"D15/$D$29\"\n\"'Food Service Page 7'!G59\"\n\"'Internal Service Page 9'!H41\"\n\"'General Exp Page 4'!I30\"\n\"'Federal Projects Page 8'!H77\"\n\"'Food Service Page 7'!G61\"\n\"'General Exp Page 4'!I35+'General Exp Page 4'!I36+'General Exp Page 4'!I37+'General Exp Page 4'!I34\"\n\"SUM('Capital Projects Page 6'!H66:H68)\"\n\"SUM('Food Service Page 7'!G64:G64)\"\n\"'Federal Projects Page 8'!H81\"\n\"SUM(D15:D27)\"\n\"D14-D29\"\n\"'FR finances'!N15\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"D19+D29+D39+D49+D59\"\n\"IF((E9=0),\"\"\"\",IF((D9=0),\"\"\"\",((E9*100)/D9)))\"\n\"D9-G9-H9\"\n\"SUM(D9:D15)\"\n\"G19+H19\"\n\"'FR investments'!E13\"\n\"'FR investments'!E19\"\n\"'FR investments'!E25\"\n\"'FR investments'!E31\"\n\"'FR investments'!E37\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!I5\"\n\"'Cover sheet'!I5\"\n\"'FR expenditures'!H16\"\n\"IF((E12=0),\"\"\"\",IF((D12=0),\"\"\"\",((E12*100)/D12)))\"\n\"D12-E12-G12\"\n\"D12*(J12/100)\"\n\"E12*(J12/100)\"\n\"G12*(J12/100)\"\n\"G15-G13-G12\"\n\"SUM(D12:D14)\"\n\"+'FR expenditures'!H16\"\n\"IF(K15=0,0,K15/D15*100)\"\n\"SUM(D18:D26)\"\n\"D27+D15\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"('Cover sheet'!C5:F5)\"\n\"'Cover sheet'!I5\"\n\"SUM(E8:E12)\"\n\"E37+E31+E25+E19+E13\"\n\"SUM(E14:E20)\"\n\"E14-E24\"\n\"IF(E21-E31=E40,\"\"correctly calculated\"\",\"\"OUT OF BALANCE\"\")\"\n\"IF(C24=B11,\"\"BALANCED\"\",\"\"OUT OF BALANCE\"\")\"\n\"SUM(C26:C400)\"\n\"SUM(C26:C400)\"\n\"C26+D26\"\n\"SUM(E13:E18)\"\n\"SUM(E29:E41)\"\n\"+E19+E27+E42+E43\"\n\"IF(C5=\"\"\"\",\"\"\"\",C5)\"\n\"SUM(E60:E70)\"\n\"SUM(E73:E79)\"\n\"+E71+E80\"\n\"+E44\"\n\"+E81\"\n\"+E84-E85\"\n\"SUM(B7:E7)\"\n\"234.71+66.125+152.343\"\n\"SUM(D33:D36)\"\n\"+B49+C46\"\n\"D49\"\n\"+C12\"\n\"SUM(B62:B63)\"\n\"+C13\"\n\"SUM(B66:B66)\"\n\"SUM(B114+C111)\"\n\"+B75\"\n\"SUM(B127:B129)\"\n\"+C76\"\n\"+C77\"\n\"SUM(B137:B141)\"\n\"+C78\"\n\"SUM(B144:B146)\"\n\"SUM(B157:E157)/4\"\n\"E169\"\n\"81.3+28.2+6\"\n\"SUM(B211:B217)\"\n\"SUM(E211:E216)\"\n\"+B161\"\n\"SUM(B229:B237)\"\n\"+B162\"\n\"H17-H19\"\n\"'Charge Adjustment Detail'!H30\"\n\"'Credit Adjustment Detail'!H30\"\n\"-H25+H30\"\n\"IF(F6=\"\"Y\"\",E6*'Summary Sheet'!G7,0)\"\n\"E6+G6\"\n\"IF(F7=\"\"Y\"\",E7*'Summary Sheet'!G7,0)\"\n\"IF(F8=\"\"Y\"\",E8*'Summary Sheet'!G7,0)\"\n\"IF(F9=\"\"Y\"\",E9*'Summary Sheet'!G7,0)\"\n\"IF(F10=\"\"Y\"\",E10*'Summary Sheet'!G7,0)\"\n\"IF(F11=\"\"Y\"\",E11*'Summary Sheet'!G7,0)\"\n\"IF(F12=\"\"Y\"\",E12*'Summary Sheet'!G7,0)\"\n\"IF(F13=\"\"Y\"\",E13*'Summary Sheet'!G7,0)\"\n\"IF(F14=\"\"Y\"\",E14*'Summary Sheet'!G7,0)\"\n\"IF(F15=\"\"Y\"\",E15*'Summary Sheet'!G7,0)\"\n\"IF(F16=\"\"Y\"\",E16*'Summary Sheet'!G7,0)\"\n\"IF(F17=\"\"Y\"\",E17*'Summary Sheet'!G7,0)\"\n\"IF(F18=\"\"Y\"\",E18*'Summary Sheet'!G7,0)\"\n\"IF(F19=\"\"Y\"\",E19*'Summary Sheet'!G7,0)\"\n\"IF(F20=\"\"Y\"\",E20*'Summary Sheet'!G7,0)\"\n\"IF(F21=\"\"Y\"\",E21*'Summary Sheet'!G7,0)\"\n\"IF(F22=\"\"Y\"\",E22*'Summary Sheet'!G7,0)\"\n\"IF(F23=\"\"Y\"\",E23*'Summary Sheet'!G7,0)\"\n\"IF(F24=\"\"Y\"\",E24*'Summary Sheet'!G7,0)\"\n\"IF(F25=\"\"Y\"\",E25*'Summary Sheet'!G7,0)\"\n\"IF(F26=\"\"Y\"\",E26*'Summary Sheet'!G7,0)\"\n\"IF(F27=\"\"Y\"\",E27*'Summary Sheet'!G7,0)\"\n\"IF(F28=\"\"Y\"\",E28*'Summary Sheet'!G7,0)\"\n\"SUM(E6:E28)\"\n\"IF(F6=\"\"Y\"\",E6*'Summary Sheet'!G7,0)\"\n\"E6+G6\"\n\"IF(F7=\"\"Y\"\",E7*'Summary Sheet'!G7,0)\"\n\"(+E6+E7)*0.28\"\n\"IF(F8=\"\"Y\"\",E8*'Summary Sheet'!G7,0)\"\n\"IF(F9=\"\"Y\"\",E9*'Summary Sheet'!G7,0)\"\n\"IF(F10=\"\"Y\"\",E10*'Summary Sheet'!G7,0)\"\n\"IF(F11=\"\"Y\"\",E11*'Summary Sheet'!G7,0)\"\n\"IF(F12=\"\"Y\"\",E12*'Summary Sheet'!G7,0)\"\n\"IF(F13=\"\"Y\"\",E13*'Summary Sheet'!G7,0)\"\n\"IF(F14=\"\"Y\"\",E14*'Summary Sheet'!G7,0)\"\n\"IF(F15=\"\"Y\"\",E15*'Summary Sheet'!G7,0)\"\n\"IF(F16=\"\"Y\"\",E16*'Summary Sheet'!G7,0)\"\n\"IF(F17=\"\"Y\"\",E17*'Summary Sheet'!G7,0)\"\n\"IF(F18=\"\"Y\"\",E18*'Summary Sheet'!G7,0)\"\n\"IF(F19=\"\"Y\"\",E19*'Summary Sheet'!G7,0)\"\n\"IF(F20=\"\"Y\"\",E20*'Summary Sheet'!G7,0)\"\n\"IF(F21=\"\"Y\"\",E21*'Summary Sheet'!G7,0)\"\n\"IF(F22=\"\"Y\"\",E22*'Summary Sheet'!G7,0)\"\n\"IF(F23=\"\"Y\"\",E23*'Summary Sheet'!G7,0)\"\n\"IF(F24=\"\"Y\"\",E24*'Summary Sheet'!G7,0)\"\n\"IF(F25=\"\"Y\"\",E25*'Summary Sheet'!G7,0)\"\n\"IF(F26=\"\"Y\"\",E26*'Summary Sheet'!G7,0)\"\n\"IF(F27=\"\"Y\"\",E27*'Summary Sheet'!G7,0)\"\n\"IF(F28=\"\"Y\"\",E28*'Summary Sheet'!G7,0)\"\n\"SUM(E6:E29)\"\n\"SUM(G6:G28)\"\n\"\"\"*\"\"&ROUND(G8,0)&\"\"*\"\"\"\n\"23000+1044\"\n\"G8+SUM(G10:G14)\"\n\"SUM(G18:G25)\"\n\"+G16-G27\"\n\"+G31+G32+G33+G35-G34\"\n\"+G29-G37\"\n\"-17719+1130\"\n\"SUM(F10:F12)\"\n\"31087+5028\"\n\"SUM(F16:F20)\"\n\"SUM(F21+F23)\"\n\"F25+F13\"\n\"F27+F30+F32\"\n\"F43+F45\"\n\"SUM(K10:K20)\"\n\"SUM(K22+K23)\"\n\"SUM(K26:K55)\"\n\"SUM(K24-K59)\"\n\"SUM(K17:K29)\"\n\"SUM(K30+K31)\"\n\"SUM(K37:K40)\"\n\"SUM(K43:K47)\"\n\"SUM(K50:K67)\"\n\"SUM(K108:K114)-1\"\n\"SUM(+K39+K48+K68+K92+K96+K100+K106+K118+K115)\"\n\"SUM(+K32-K122)\"\n\"SUM(K125:K135)\"\n\"SUM(B11:C11)\"\n\"SUM(B11:B22)\"\n\"D14\"\n\"D11*(1+E12)\"\n\"-IF(ISERROR(VLOOKUP(D7,Maturity,2)),0,VLOOKUP(D7,Maturity,2))\"\n\"D10+D11\"\n\"F10+F11+F13\"\n\"(D10+D14)/2\"\n\"D24\"\n\"'Model Assumptions'!$C$29*-1*'Financial Model'!C23\"\n\"D24-C24-D23-D20\"\n\"-1*IF(ISERROR(VLOOKUP(D7,Retention,3)),0,VLOOKUP(D7,Retention,3))\"\n\"D11/'Model Assumptions'!$C$5\"\n\"'Model Assumptions'!$C$22\"\n\"'Model Assumptions'!$C$20*D27\"\n\"E27*'Model Assumptions'!$C$9\"\n\"ROUNDDOWN(D31*'Model Assumptions'!$C$24,0)\"\n\"D31-C31+D32\"\n\"D31+D30+D29\"\n\"D34/'Model Assumptions'!$C$25\"\n\"D35+D31+D30+D29\"\n\"D21/D31\"\n\"D21*'Model Assumptions'!$C$15*'Model Assumptions'!$C$16/1000\"\n\"D82*'Model Assumptions'!$C$32\"\n\"((D82+E82)/2)*'Model Assumptions'!$C$32\"\n\"((D10+D14)/2)*'Model Assumptions'!$C$6\"\n\"SUM(D45:D47)\"\n\"((C110+D110)/2)*'Model Assumptions'!$C$17\"\n\"((C111+D111)/2)*'Model Assumptions'!$C$34\"\n\"SUM(D51:D52)\"\n\"D48-D53\"\n\"-D84\"\n\"-(E84-D84)\"\n\"D55-D56\"\n\"D27*'Model Assumptions'!$C$18\"\n\"D31*'Model Assumptions'!$C$10+'Financial Model'!D35*'Model Assumptions'!$C$26+'Financial Model'!D30*'Model Assumptions'!$C$21+D29*'Model Assumptions'!$C$23\"\n\"-D88+C88\"\n\"E11*'Model Assumptions'!$C$27\"\n\"M11*'Model Assumptions'!$C$27\"\n\"'Model Assumptions'!$C$28+'Model Assumptions'!$C$19*'Financial Model'!D31-'Financial Model'!C31\"\n\"D11*'Model Assumptions'!$C$30+'Model Assumptions'!C31\"\n\"E11*'Model Assumptions'!$C$30\"\n\"SUM(D60:D65)\"\n\"D57-D66\"\n\"IF(D$68*'Model Assumptions'!$C$12+C71<0,0,D68*'Model Assumptions'!$C$12+C71)\"\n\"IF(D$68*'Model Assumptions'!$C$12+C71>0,0,D68*'Model Assumptions'!$C$12+C71)\"\n\"D68+D70\"\n\"D149\"\n\"D14\"\n\"-D83*'Model Assumptions'!$C$7\"\n\"D83+D84\"\n\"D89+D100\"\n\"(D99+D101)\"\n\"D36*'Model Assumptions'!$C$37+('Model Assumptions'!$C$38+'Model Assumptions'!$C$39)*'Financial Model'!D27\"\n\"D36*'Model Assumptions'!$C$37+('Model Assumptions'!$C$38+'Model Assumptions'!$C$39)*'Financial Model'!D27\"\n\"(E36-D36)*'Model Assumptions'!$C$37+('Model Assumptions'!$C$38+'Model Assumptions'!$C$39)*('Financial Model'!E27-'Financial Model'!D27)\"\n\"E89-E97\"\n\"D90\"\n\"E92\"\n\"D96+D95+D94+D93+D92+D90\"\n\"-(SUM(D92:D96)-D98+SUM(D90:D91)/2)/'Model Assumptions'!$B$37+C99\"\n\"'Model Assumptions'!$C$40*'Financial Model'!D27\"\n\"-D100/'Model Assumptions'!$B$40\"\n\"D87+D88\"\n\"-D71*'Model Assumptions'!$C$12\"\n\"D103+D102+D85+D82\"\n\"(C66+D66)*'Model Assumptions'!$C$33\"\n\"D83*'Model Assumptions'!$C$8\"\n\"D73\"\n\"E73+D115\"\n\"H116\"\n\"D117+D112\"\n\"D73\"\n\"D56\"\n\"D62\"\n\"-(D83-C83)\"\n\"-D103+C103\"\n\"D109-C109\"\n\"SUM(D127:D135)\"\n\"-D87\"\n\"-(E87-D87)\"\n\"SUM(D139:D139)\"\n\"SUM(E139)\"\n\"D111\"\n\"E111-D111\"\n\"D116\"\n\"E116-D116\"\n\"D145+D140+D136\"\n\"D149\"\n\"'Model Assumptions'!$C$4+C153\"\n\"D11\"\n\"D24\"\n\"E11\"\n\"E24\"\n\"F11\"\n\"F24\"\n\"G11\"\n\"G24\"\n\"H11\"\n\"H24\"\n\"I11\"\n\"I24\"\n\"J11\"\n\"J24\"\n\"K11\"\n\"K24\"\n\"L11\"\n\"L24\"\n\"M11\"\n\"M24\"\n\"'Financial Model'!D73\"\n\"'Financial Model'!D62\"\n\"'Financial Model'!D56\"\n\"'Financial Model'!D131+'Financial Model'!D132+'Financial Model'!D134+'Financial Model'!D135\"\n\"'Financial Model'!D139\"\n\"SUM(E7:E12)\"\n\"N13*(1+'Model Assumptions'!C11)/('Model Assumptions'!C13-'Model Assumptions'!C11)\"\n\"E13/(1+'Model Assumptions'!$C$13)^('NPV Calculation'!E6-'NPV Calculation'!$D$6)\"\n\"O13/(1+'Model Assumptions'!$C$13-'Model Assumptions'!$C$14)^('NPV Calculation'!N6-'NPV Calculation'!$D$6)\"\n\"SUM(E15:O15)\"\n\"IF(-'Financial Model'!D143<0,-'Financial Model'!D143,0)\"\n\"E20/(1+$H$28)^(E6-$D$6)\"\n\"SUM(E22:N22)\"\n\"D16+D23\"\n\"E16\"\n\"B5-C5\"\n\"D22*C24\"\n\"B11\"\n\"AVERAGE(D5:D8)\"\n\"D9\"\n\"SUM(K5:K9)\"\n\"AVERAGE(D15:D19)\"\n\"D20*2\"\n\"'Notes 1'!I24\"\n\"IncStmt!J31\"\n\"I21+I24\"\n\"1150+122\"\n\"2500+5885+3275\"\n\"19925+61475.4+88464.6\"\n\"1600\"\n\"SUM(J11:J14)\"\n\"SUM(J23:J29)\"\n\"90.86+137.7+235.47+182.59+152.45\"\n\"19761.95\"\n\"375.76\"\n\"J19-J21\"\n\"SUM(I20:I23)\"\n\"IncStmt!J31\"\n\"I29+I30\"\n\"SUM(I37:I38)\"\n\"12046+200+280+320+250+478.41+422+114+250\"\n\"736+600+520+1800\"\n\"403.94+63.4+771\"\n\"300\"\n\"SUM(G15:G19)\"\n\"G10-G20\"\n\"'Notes 1'!G24\"\n\"'Notes 1'!G32\"\n\"1000+1800+4000\"\n\"G24+G21\"\n\"1150+122\"\n\"2500+5885+3275\"\n\"19925+61475.4+88464.6\"\n\"1600\"\n\"SUM(H11:H14)\"\n\"SUM(H23:H36)\"\n\"2050.04+68.52\"\n\"90.86+137.7+235.47+182.59+152.45\"\n\"21149.53-4480+25159.28-555.71-67.2-400\"\n\"19761.95\"\n\"31629.2-421.2\"\n\"4225.75+421.2\"\n\"375.76\"\n\"H19-H21\"\n\"SUM(G20:G23)\"\n\"I32\"\n\"IncStmt!H38\"\n\"G29+G30\"\n\"SUM(G37:G38)\"\n\"2600\"\n\"300*11\"\n\"SUM(G12:G14)\"\n\"106000+8925\"\n\"G9+G11\"\n\"SUM(G20:G21)\"\n\"5000*6\"\n\"G13-G22-G27\"\n\"SUM(G40:G43)\"\n\"G34-G44\"\n\"300*11\"\n\"SUM(G15:G17)\"\n\"G9-G18\"\n\"B2*2\"\n\"(SUM(B6*B5))\"\n\"B3/B4\"\n\"B21/12\"\n\"SUM(B23,B25)\"\n\"(B21*B7)/B9\"\n\"B21*B7\"\n\"(B21*B8)/B10\"\n\"B21*B8\"\n\" B23/B11\"\n\"Financial!$A4\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"B14/12\"\n\"Entry!$B$23\"\n\"B14*Entry!$B$6\"\n\"Entry!$B$24\"\n\"Entry!$B$22\"\n\"Entry!$B$21\"\n\"OFFSET(Z$1,Entry!$B$13,0,1,1)\"\n\"B16/12\"\n\"B4-R4-U4\"\n\"$A$4\"\n\"G4-R4-X4\"\n\"L4-X4\"\n\"B4*Entry!$B$18\"\n\"P4\"\n\"IF(Q4>=Entry!$B$17,Entry!$B$17,P4)\"\n\"(B4-R4)*Entry!$B$15\"\n\"IF(T4>=Entry!$B$16,Entry!$B$16,T4)\"\n\"(B4)*Entry!$B$15\"\n\"OFFSET(Z$1,Entry!$B$13+1,0,1,1)\"\n\"B16/12\"\n\"$A$5\"\n\"Q4+P5\"\n\"IF(Q5<=Entry!$B$17,P5,IF(Q4<Entry!$B$17,Entry!$B$17-Q4,0))\"\n\"IF(T5<=Entry!$B$16,S5,IF(T4<Entry!$B$16,Entry!$B$16-T4,0))\"\n\"OFFSET(Z$1,Entry!$B$13+2,0,1,1)\"\n\"B16/12\"\n\"$A$6\"\n\"OFFSET(Z$1,Entry!$B$13+3,0,1,1)\"\n\"B16/12\"\n\"$A$7\"\n\"OFFSET(Z$1,Entry!$B$13+4,0,1,1)\"\n\"B16/12\"\n\"$A$8\"\n\"OFFSET(Z$1,Entry!$B$13+5,0,1,1)\"\n\"B16/12\"\n\"$A$9\"\n\"OFFSET(Z$1,Entry!$B$13+6,0,1,1)\"\n\"B16/12\"\n\"$A$10\"\n\"OFFSET(Z$1,Entry!$B$13+7,0,1,1)\"\n\"B16/12\"\n\"$A$11\"\n\"OFFSET(Z$1,Entry!$B$13+8,0,1,1)\"\n\"B16/12\"\n\"$A$12\"\n\"OFFSET(Z$1,Entry!$B$13+9,0,1,1)\"\n\"B16/12\"\n\"$A$13\"\n\"OFFSET(Z$1,Entry!$B$13+10,0,1,1)\"\n\"B16/12\"\n\"$A$14\"\n\"OFFSET(Z$1,Entry!$B$13+11,0,1,1)\"\n\"B16/12\"\n\"$A$15\"\n\"Entry!$B$3\"\n\"SUM(C4:C15)\"\n\"R4\"\n\"U4\"\n\"R4\"\n\"R4\"\n\"X4-L21\"\n\"Financial!$A4\"\n\"Production!$C$2/Production!$B$2\"\n\"Production!$I$2/Production!$H$2\"\n\"Entry!$B$4\"\n\"D2/C2\"\n\"Production!$C$3/Production!$B$3\"\n\"Production!$I$3/Production!$H$3\"\n\"Production!$C$4/Production!$B$4\"\n\"Production!$I$4/Production!$H$4\"\n\"Production!$C$5/Production!$B$5\"\n\"Production!$I$5/Production!$H$5\"\n\"Production!$C$6/Production!$B$6\"\n\"Production!$I$6/Production!$H$6\"\n\"Production!$C$7/Production!$B$7\"\n\"Production!$I$7/Production!$H$7\"\n\"Production!$C$8/Production!$B$8\"\n\"Production!$I$8/Production!$H$8\"\n\"Production!$C$9/Production!$B$9\"\n\"Production!$I$9/Production!$H$9\"\n\"Production!$C$10/Production!$B$10\"\n\"Production!$I$10/Production!$H$10\"\n\"Production!$C$11/Production!$B$11\"\n\"Production!$I$11/Production!$H$11\"\n\"Production!$C$12/Production!$B$12\"\n\"Production!$I$12/Production!$H$12\"\n\"Production!$C$13/Production!$B$13\"\n\"Production!$I$13/Production!$H$13\"\n\"SUM(B8:B13)\"\n\"SUM(B23:B25)\"\n\"SUM(B7:B11)\"\n\"SUM(B16:B23)\"\n\"SUM(B28:B36)+B13+B25\"\n\"SUM(B11:B16)\"\n\"+B18+B17\"\n\"+C17/1.023543\"\n\"+C11/1.023543\"\n\"SUM(B10:B14)\"\n\"SUM(B16:B18)\"\n\"SUM(B20:B21)\"\n\"B10/B8\"\n\"SUM(B9:B12)\"\n\"SUM(B14:B18)\"\n\"SUM(D12:G12)\"\n\"IF(OR(D7<>\"\"\"\", C7<>\"\"\"\"), ROUND(D7*C7, 0), \"\"\"\")\"\n\"IF(OR(E7<>\"\"\"\", E11<>\"\"\"\"), SUM(E6:E13), 0)\"\n\"+D26*C26\"\n\"5*6\"\n\"IF(OR(E36<>\"\"\"\", E35<>\"\"\"\", E24<>\"\"\"\", E21<>\"\"\"\", E20<>\"\"\"\"), SUM(E19:E41), 0)\"\n\"IF(E46<>\"\"\"\", SUM(E46:E48), 0)\"\n\"IF(E53<>\"\"\"\", SUM(E53:E57), 0)\"\n\" SUM(E62:E66)\"\n\"ROUND(+SUM(+$E$74+E67+$E$58+$E$49+$E$42+$E$14)*0.07,-2)\"\n\"ROUND(+SUM(+$E$74+E67+$E$58+$E$49+$E$42+$E$14)*0.05,-2)-4700\"\n\"E14+E42+E58+E49+E67+E74+E77+E79\"\n\"IF(OR(G14<>\"\"\"\",#REF!<> \"\"\"\"), SUM(G13:G21), 0)\"\n\"IF(OR(#REF!<>\"\"\"\",#REF!<> \"\"\"\", G29<>\"\"\"\", G27<>\"\"\"\",#REF!<> \"\"\"\"), SUM(G25:G33), 0)\"\n\"IF(#REF!<>\"\"\"\", SUM(G40:G40), 0)\"\n\"SUM(G51:G53)\"\n\"+SUM($G$22:$G$70)*0.07\"\n\"G22+G34+G41+#REF!+G54+G71+#REF!\"\n\"'Annex D'!A5\"\n\"C16-B16\"\n\"IF(B16=0,\"\"N/A\"\",(D16/B16))\"\n\"SUM(B16:B20)\"\n\"+B21-B29\"\n\"B32+B34\"\n\"+B32+B34+B40+B41\"\n\"B44\"\n\"+B48+B54+B57\"\n\"'Declaration - AnnexC'!C3\"\n\"'Declaration - AnnexC'!C3\"\n\"I9-H9\"\n\"IF(H9=0,\"\"N/A\"\",(J9/H9)*100)\"\n\"SUM(H9:H14)\"\n\"B15+1\"\n\"B18+1\"\n\"SUM(H18:H22)\"\n\"B23+1\"\n\"H15-H23\"\n\"H25+H28-H29\"\n\"H31-H34-H36\"\n\"B38+1\"\n\"H38\"\n\"SUM(H48:H51)\"\n\"B52+1\"\n\"H56-H57\"\n\"'annex e'!A1\"\n\"'Declaration - AnnexC'!C3\"\n\"I7-H7\"\n\"IF(H7=0,\"\"N/A\"\",(J7/H7)*100)\"\n\"SUM(H7:H12)\"\n\"SUM(H18:H21)\"\n\"SUM(H25:H31)\"\n\"H22-H32\"\n\"H13+H15+H34\"\n\"H36-H43-H46\"\n\"H15\"\n\"SUM(H61:H65)\"\n\"H55+H58+H66\"\n\"K48\"\n\"H64\"\n\"H48-H68\"\n\"'annex e'!A1\"\n\"'Declaration - AnnexC'!C3\"\n\"SUM(H7:S7)\"\n\"SUM(H7:H9)\"\n\"H10-H15+H16\"\n\"H19\"\n\"H18\"\n\"SUM(H17:H18)\"\n\"S19\"\n\"H24-H19\"\n\"T19-('annex f'!H20+'annex f'!H21)\"\n\"T42-('annex f'!I20+'annex f'!I21)\"\n\"H42-H19\"\n\"IF(H19=0,\"\"N/A\"\",(H51/H19)*100)\"\n\"'Declaration - AnnexC'!C3\"\n\"'Declaration - AnnexC'!C3\"\n\"'Declaration - AnnexC'!C3\"\n\"'annex e'!I25\"\n\"'annex e'!I19\"\n\"SUM(H10:H26)\"\n\"SUM(C9:C9)\"\n\"'NOTES TO FS'!C14\"\n\"'NOTES TO FS'!G14\"\n\"SUM(C12:C13)\"\n\"'NOTES TO FS'!F40\"\n\"'NOTES TO FS'!D60\"\n\"43153+5981\"\n\"SUM(F9:F13)\"\n\"SUM(C8,C11)\"\n\"SUM(C19:C27)\"\n\"'NOTES TO FS'!F76\"\n\"41243167.25+800\"\n\"36629\"\n\"'NOTES TO FS'!F94\"\n\"'NOTES TO FS'!F110\"\n\"'NOTES TO FS'!F141\"\n\"SUM(F20:F22)\"\n\"'NOTES TO FS'!F158\"\n\"'NOTES TO FS'!F167\"\n\"'NOTES TO FS'!F194\"\n\"'NOTES TO FS'!E60\"\n\"SUM(C30:C36)\"\n\"5175.03+300\"\n\"'NOTES TO FS'!F102+200\"\n\"'NOTES TO FS'!F118\"\n\"'NOTES TO FS'!F124\"\n\"'NOTES TO FS'!G129\"\n\"'NOTES TO FS'!F145\"\n\"'NOTES TO FS'!F157\"\n\"'NOTES TO FS'!F60\"\n\"SUM(C18,C29)\"\n\"SUM(C15,-C38)\"\n\"'NOTES TO FS'!G234\"\n\"SUM(C41,C39)\"\n\"SUM(C9:C12)\"\n\"'NOTES TO FS'!F230\"\n\"'NOTES TO FS'!F262\"\n\"'NOTES TO FS'!G263\"\n\"'NOTES TO FS'!F274\"\n\"-'NOTES TO FS'!G60\"\n\"SUM(C8)\"\n\"'NOTES TO FS'!F321\"\n\"-'NOTES TO FS'!F261\"\n\"'NOTES TO FS'!F331\"\n\"'NOTES TO FS'!F338\"\n\"'NOTES TO FS'!G339\"\n\"SUM(C14,-C24)+500\"\n\"SUM(D14,-D24)\"\n\"SUM(C29:C30)\"\n\"'CHANGES IN EQUITY'!C12\"\n\"SUM(C28)\"\n\"SUM(D29:D30)\"\n\"61205.55+300\"\n\"54273.72+800\"\n\"26470.25\"\n\"SUM(C9-C10+C11)-400\"\n\"SUM(D9-D10+D11)\"\n\"'NOTES TO FS'!C60\"\n\"'NOTES TO FS'!D60\"\n\"SUM(D15:D17)\"\n\"SUM(C12,C18)\"\n\"'NOTES TO FS'!F359\"\n\"'NOTES TO FS'!F365\"\n\"-'NOTES TO FS'!F373\"\n\"SUM(C8:C10)\"\n\"SUM(C14:C17)\"\n\"-'NOTES TO FS'!F357\"\n\"-'NOTES TO FS'!F355\"\n\"SUM(C11,C13)\"\n\"SUM(C18)\"\n\"SUM(C20,C21)\"\n\"SUM(E7-C7)\"\n\"118014301.63+300\"\n\"SUM(C6:D13)\"\n\"SUM(C6:D13)\"\n\"SUM(E6:E13)\"\n\"SUM(F19:F29)\"\n\"SUM(F36:F39)\"\n\"3605253.25+300\"\n\"C51+D51-E51\"\n\"C53+D53-E53-F53\"\n\"C56-E56\"\n\"SUM(C47:C59)\"\n\"SUM(E47:E59)-1000\"\n\"C60+D60-E60-F60-1000\"\n\"G60\"\n\"SUM(F63:F64)\"\n\"79956+1216-8602+1\"\n\"12098-1288\"\n\"6632-734\"\n\"26564-2988\"\n\"SUM(F76)\"\n\"1246\"\n\"1246-146\"\n\"495+26\"\n\"495-106\"\n\"2446438.23+300\"\n\"1923\"\n\"1923-122\"\n\"921\"\n\"921-40\"\n\"2026\"\n\"2026-26\"\n\"314\"\n\"314-4\"\n\"1780+2419+332\"\n\"1780+67\"\n\"SUM(F87:F93)\"\n\"SUM(F94,F102)\"\n\"2138\"\n\"2138-380\"\n\"F118\"\n\"5345\"\n\"5345-840\"\n\"488576.85-500\"\n\"1465\"\n\"1465-4\"\n\"740\"\n\"740+50\"\n\"SUM(F115:F117)\"\n\"F129\"\n\"SUM(F124:F124)\"\n\"46762-1\"\n\"46762-1-976\"\n\"28522\"\n\"28522-482\"\n\"1028\"\n\"1028-574\"\n\"695\"\n\"695+190\"\n\"SUM(F136:F140)\"\n\"SUM(F141,F145)\"\n\"F159\"\n\"628771\"\n\"628771+23081\"\n\"F176\"\n\"F185\"\n\"SUM(F167)\"\n\"16+15+2\"\n\"F199\"\n\"F218\"\n\"SUM(C209:E209)\"\n\"SUM(C208:D212)\"\n\"SUM(C208:D212)\"\n\"F243\"\n\"26539.2-300\"\n\"SUM(F252:F253)-1000\"\n\"SUM(G252:G253)\"\n\"D60-E60-F60\"\n\"SUM(F250:F251)\"\n\"F302\"\n\"F311\"\n\"SUM(G296:G301)\"\n\"11562675.04-200\"\n\"SUM(F250)\"\n\"11562675.04-400\"\n\"F318+F319-F320\"\n\"2004035.82+54273.72\"\n\"2294+86\"\n\"1864257.45+300\"\n\"SUM(F328:F329)-F330-600\"\n\"SUM(G328:G329)-G330\"\n\"74673.44+441.83\"\n\"431676.35\"\n\"4931805.3+1000\"\n\"SUM(F343:F345)+200\"\n\"SUM(G343:G344)\"\n\"'INCOME STATEMENT'!C43\"\n\"SUM(F355:F357)\"\n\"-F36\"\n\"G36\"\n\"'INCOME STATEMENT'!C29\"\n\"'INCOME STATEMENT'!D29+514\"\n\"G357\"\n\"SUM(F352,F354)\"\n\"-67934477.54-200\"\n\"15568586.16+33402.08\"\n\"177711.57\"\n\"-6319\"\n\"-I364\"\n\"F320\"\n\"SUM(G320)\"\n\"F330\"\n\"SUM(F6:F7)\"\n\"SUM(F14:F14)\"\n\"SUM(F15,F19)\"\n\"1400+200\"\n\"SUM(F27:F30)\"\n\"44431.2+200\"\n\"SUM(F34:F38)\"\n\"1450374.82+1628035.42+13281923.96\"\n\"3514635.45\"\n\"SUM(F45:F47)\"\n\"F57\"\n\"149824.73\"\n\"E60\"\n\"64417.8-400\"\n\"64417.8\"\n\"SUM(G65:G67)-200\"\n\"398705.01-300\"\n\"92029.44+199755.5\"\n\"598460.51-200\"\n\"110222.58-200\"\n\"SUM(E73:E75)-500\"\n\"SUM(E62+E70+E78)\"\n\"481480.79+501544.73+613056+487036.54\"\n\"382627.33+472862.32+587592+98789.11\"\n\"385923.84+412488.41+200\"\n\"355154.06+62029.46\"\n\"8025+147000\"\n\"SUM(D8:E8)\"\n\"+G8/F8*100\"\n\"75246+1006+2094\"\n\"68668+580\"\n\"108752+2000\"\n\"22500+66900+20400+116200\"\n\"854+1000+1+140+140+334\"\n\"SUM(F17-G17)\"\n\"SUM(D8:D17)\"\n\"SUM(D11+E11)\"\n\"SUM(D12)\"\n\"752500-100\"\n\"85501-200\"\n\"78580\"\n\"SUM(D13+E13-F13)\"\n\"50400-100\"\n\"18400+14000\"\n\"667337.2+300\"\n\"177150+200\"\n\"SUM(D18-F18)-1000\"\n\"182474+100\"\n\"SUM(D20-F20)+1000\"\n\"14200+8800\"\n\"SUM(C10:C22)\"\n\"SUM(E10:E22)-1000\"\n\"259747.96-300\"\n\"SUM(D28-F28)\"\n\"SUM(C28:C28)\"\n\"SUM(C9:C9)\"\n\"SUM(C8)\"\n\"C9\"\n\"SUM(C12:C14)\"\n\"488576.85-500\"\n\"SUM(C8,C11)\"\n\"+F8/E8*100\"\n\"SUM(J8:J9)\"\n\"SUM(I8:I9)\"\n\"8651+36354+11935\"\n\"126621+33+358\"\n\"1559-33-358\"\n\"SUM(J29:J29)\"\n\"SUM(C7:C29)\"\n\"SUM(L8:L29)\"\n\"130228+33+358\"\n\"10100-33-358\"\n\"SUM(C38:C44)\"\n\"SUM(C50:C58)\"\n\"+D69+C69\"\n\"SUM(C68:C77)\"\n\"4330+76\"\n\"SUM(C84:C88)\"\n\"20088-1\"\n\"+C97+D97\"\n\"2846+1\"\n\"+D100\"\n\"SUM(C95:C100)\"\n\"C126\"\n\"+E126-F126\"\n\"SUM(C110:C126)\"\n\"+C135\"\n\"SUM(C161:C172)\"\n\"-3131+1\"\n\"58827+1\"\n\"7234-1\"\n\"25910-1\"\n\"SUM(C206:C226)\"\n\"80113+33+358\"\n\"807-33-358\"\n\"SUM(D261:D282)\"\n\"16022+33+358\"\n\"SUM(C302:C309)\"\n\"SUM(C324:C343)\"\n\"'NOTES TO FS'!E60+561579.95+1000\"\n\"SUM(G34:G35)\"\n\"'Table 1.0 I & E - Annex D'!A4\"\n\"I9-H9\"\n\"IF(H9=0,\"\"N/A\"\",(J9/H9)*100)\"\n\"SUM(H9:H14)\"\n\"B15+1\"\n\"B18+1\"\n\"SUM(H18:H22)\"\n\"B23+1\"\n\"H15-H23\"\n\"H25+H28-H29\"\n\"H31-H34-H36\"\n\"B38+1\"\n\"H38\"\n\"SUM(H48:H51)\"\n\"B52+1\"\n\"H56-H57\"\n\"'Table 1.0 I & E - Annex D'!A1\"\n\"I7-H7\"\n\"IF(H7=0,\"\"N/A\"\",(J7/H7)*100)\"\n\"SUM(H7:H12)\"\n\"SUM(H18:H22)\"\n\"SUM(H26:H32)\"\n\"H23-H33\"\n\"H13+H15+H35\"\n\"SUM(H40:H43)\"\n\"H37-H44-H47\"\n\"H15\"\n\"H56+H59+H67\"\n\"K49\"\n\"H65\"\n\"H49-H69\"\n\"'Table 1.0 I & E - Annex D'!A1\"\n\"SUM(H7:S7)\"\n\"SUM(H7:H9)\"\n\"H10-H15+H16\"\n\"H19\"\n\"H18\"\n\"SUM(H17:H18)\"\n\"S19\"\n\"H24-H19\"\n\"T19-('Table 2.0 BS - Annex E'!H20+'Table 2.0 BS - Annex E'!H21+'Table 2.0 BS - Annex E'!H22)\"\n\"T42-('Table 2.0 BS - Annex E'!I20+'Table 2.0 BS - Annex E'!I21+'Table 2.0 BS - Annex E'!I22)\"\n\"H42-H19\"\n\"IF(H19=0,\"\"N/A\"\",(H51/H19)*100)\"\n\"C8*D8\"\n\"F8-E8\"\n\"G8/E19\"\n\"G9/E19\"\n\"G10/E19\"\n\"F12/E19\"\n\"F13/E19\"\n\"F14/E19\"\n\"G16/E19\"\n\"G17/E19\"\n\"G18/E19\"\n\"SUM(E8:E18)\"\n\"G19/E19\"\n\"G23/F24\"\n\"SUM(E22:E23)\"\n\"G27/E31\"\n\"SUM(E27:E30)\"\n\"G41/E48\"\n\"G42/E48\"\n\"G43/E48\"\n\"SUM(E41:E47)\"\n\"E55+E48+E38+E31+E24+E19\"\n\"E58/E57\"\n\"E57+E58\"\n\"F58+F57\"\n\"D5/C5\"\n\"D5/D22\"\n\"D6/D22\"\n\"D9/D22\"\n\"D10/D22\"\n\"D11/D22\"\n\"D14/D22\"\n\"D15/D22\"\n\"D16/D22\"\n\"D17/D22\"\n\"C5+C9+C10+C11+C14+C15+C16+C17\"\n\"D20/D22\"\n\"D21/D22\"\n\"C5+C6+C9+C10+C11+C14+C15+C16+C17+C20+C21\"\n\"D22/C22\"\n\"SUM(H10:H11)\"\n\"+F306\"\n\"SUM(A9:A22)\"\n\"SUM(I9:I21)\"\n\"+G252\"\n\"+G259\"\n\"+G274\"\n\"+G306\"\n\"SUM(A29:A35)\"\n\"SUM(I29:I34)\"\n\"+A23-A36\"\n\"+F192\"\n\"+F203\"\n\"+G216\"\n\"38521.32+341.09+6.64+3104.74\"\n\"SUM(A52:A59)\"\n\"SUM(I52:I58)\"\n\"+I63\"\n\"+A60+A63\"\n\"10588.71-39.36\"\n\"13618.49+0.3+2285.29\"\n\"7500+4444.45-5000\"\n\"SUM(I70:I76)\"\n\"+A65-A77\"\n\"+J79\"\n\"+J107\"\n\"+J38\"\n\"+I104\"\n\"+I103+I105+I106\"\n\"SUM(F189:F191)\"\n\"SUM(F198:F202)\"\n\"1051.33+6453.8\"\n\"SUM(G210:G215)\"\n\"+D222-E222-F222\"\n\"SUM(D222:D223)\"\n\"SUM(G234:G237)\"\n\"+G294/2\"\n\"SUM(G242:G251)\"\n\"0.8*40265.59\"\n\"+G294/2\"\n\"944+3354.99+4767.04\"\n\"SUM(G261:G273)\"\n\"144.12+1687\"\n\"+F300-G300\"\n\"+D300+E300+H300\"\n\"10777.86+38412.48\"\n\"SUM('Financial summary'!J4)\"\n\"SUM('Financial summary'!I44)\"\n\"SUM('Financial summary'!I61)\"\n\"SUM(B45:B46)\"\n\"SUM('Financial summary'!I63)\"\n\"'Financial summary'!$I$64\"\n\"SUM(B47:B49)\"\n\"SUM(B43-B50)\"\n\"'Financial summary'!$J$67\"\n\"SUM(F6:F7)\"\n\"E35*0.5\"\n\"(J10 +J11)+J1\"\n\"G8*G9\"\n\"G10\"\n\"J4*0.175\"\n\"'Staffing plan'!$F$8\"\n\"'Staffing plan'!$F$36\"\n\"'Staffing plan'!$F$52\"\n\"'Staffing plan'!$F$67\"\n\"SUM(I20:I43)\"\n\"SUM(I47:I60)\"\n\"I44+I61\"\n\"I62*0.5\"\n\"I63/I62\"\n\"SUM(I44+I61+I63)\"\n\"J4-I65\"\n\"J66/J4\"\n\"SUM(I13,G13)\"\n\"SUM(O13,J13)\"\n\"SUM(G13:G15)\"\n\"SUM(G13,G24,G35)\"\n\"SUM(G42:G44)\"\n\"SUM(J46+O46)\"\n\"SUM(I13,G13)\"\n\"SUM(O13,J13)\"\n\"SUM(G13:G15)\"\n\"SUM(G13,G24,G35)\"\n\"SUM(G42:G44)\"\n\"SUM(O46+J46)\"\n\"SUM(I13,G13)\"\n\"SUM(O13,J13)\"\n\"SUM(G13:G15)\"\n\"SUM(G13+G24)\"\n\"SUM(G25+G14)\"\n\"SUM(G31:G34)\"\n\"SUM(G18+G20+G22+G24+FG3172)\"\n\"SUM(G18+G20+G22+G24+FG3172)\"\n\"SUM(G33+G34+G38+G40+G42+G44+G46+G48+G50+G52+G54+G56+G58+G60)\"\n\"SUM(G33+G34+G38+G40+G42+G44+G46+G48+G50+G52+G54+G56+G58+G60)\"\n\"SUM(D67 + D69 + D71 + D73 + D75 + D77 + I67 + I69 + I71 + I73 + I75)\"\n\"SUM(D67 + D69 + D71 + D73 + D75 + D77 + I67 + I69 + I71 + I73 + I75)\"\n\"SUM(F13:G13)\"\n\"SUM(F13:F43)\"\n\"SUM(F50:F99)\"\n\"SUM(G103:G104)\"\n\"SUM(G107:G109)\"\n\"H100\"\n\"SUM(F119:F136)\"\n\"Data!B3\"\n\"Data!C3\"\n\"Data!A112\"\n\"\"\"Project: \"\"&Data!B87\"\n\"Data!B43\"\n\"\"\"Wind, \"\"&K10\"\n\"Data!B99\"\n\"Data!B74\"\n\"Data!B101\"\n\"Data!B72\"\n\"Data!A119\"\n\"Data!B70\"\n\"Data!B119\"\n\"Data!B136\"\n\"Data!B138\"\n\"SUM(K11:K13)\"\n\"\"\"Prices, \"\"&Data!B81&\"\"/MWh\"\"\"\n\"Data!A141\"\n\"\"\"Invest. cost, \"\"&Data!$B$81&\"\"/kW\"\"\"\n\"64000/60\"\n\"-PMT(K16/100,K17,G16)\"\n\"\"\"O&M cost, \"\"&Data!$B$81&\"\"/kW\"\"\"\n\"Data!C82\"\n\"G17+G18\"\n\"Data!D3\"\n\"Data!A160\"\n\"\"\"Revenue of wind generation, \"\"&Data!$B$81&\"\"/kW\"\"\"\n\"Data!B192\"\n\"E18\"\n\"G18\"\n\"G18\"\n\"\"\"Annual contribution margin, \"\"&Data!$B$81&\"\"/kW\"\"\"\n\"J21-J22\"\n\"-PV($K$16/100,$K$17,J23)\"\n\"\"\"Net annual surplus, \"\"&Data!$B$81&\"\"/kW\"\"\"\n\"J23-$G$17\"\n\"Data!B116\"\n\"Data!B137\"\n\"\"\"benefit \"\"&Data!$B$81&\"\"/ton CO2\"\"\"\n\"\"\"Average electricity price, \"\"&Data!$B$81&\"\"/MWh\"\"\"\n\"Data!B193\"\n\"Data!A197&\"\", \"\"&Data!$B$81&\"\"/MWh\"\"\"\n\"Data!B197\"\n\"\"\"Additional costs,  \"\"&Data!$B$81&\"\" per ton CO2 reduced\"\"\"\n\"-J25/J26*1000\"\n\"\"\"Required further CO2 benefit \"\"&Data!$B$81&\"\"/ton CO2\"\"\"\n\"J29-C28\"\n\"K29-C29\"\n\"B28\"\n\"A141\"\n\"A160\"\n\"B180\"\n\"A5-(A7-A5)\"\n\"100*Data!B59/Data!$B$70\"\n\"100*Data!B88/Data!$B$99\"\n\"Data!B113\"\n\"Data!B120\"\n\"Data!B142\"\n\"Data!B161\"\n\"Data!B181\"\n\"A6\"\n\"B4\"\n\"$D$4\"\n\"B44\"\n\"100*Data!B60/Data!$B$70\"\n\"100*Data!B89/Data!$B$99\"\n\"Data!B121\"\n\"Data!B143\"\n\"Data!B162\"\n\"Data!B182\"\n\"B45\"\n\"100*Data!B61/Data!$B$70\"\n\"100*Data!B90/Data!$B$99\"\n\"Data!B122\"\n\"Data!B144\"\n\"Data!B163\"\n\"Data!B183\"\n\"B46\"\n\"100*Data!B62/Data!$B$70\"\n\"100*Data!B91/Data!$B$99\"\n\"Data!B123\"\n\"Data!B145\"\n\"Data!B164\"\n\"Data!B184\"\n\"B47\"\n\"100*Data!B63/Data!$B$70\"\n\"100*Data!B92/Data!$B$99\"\n\"Data!B124\"\n\"Data!B146\"\n\"Data!B165\"\n\"Data!B185\"\n\"B48\"\n\"100*Data!B64/Data!$B$70\"\n\"100*Data!B93/Data!$B$99\"\n\"Data!B125\"\n\"Data!B147\"\n\"Data!B166\"\n\"Data!B186\"\n\"B49\"\n\"100*Data!B65/Data!$B$70\"\n\"100*Data!B94/Data!$B$99\"\n\"Data!B126\"\n\"Data!B148\"\n\"Data!B167\"\n\"Data!B187\"\n\"B50\"\n\"100*Data!B66/Data!$B$70\"\n\"100*Data!B95/Data!$B$99\"\n\"Data!B127\"\n\"Data!B149\"\n\"Data!B168\"\n\"Data!B188\"\n\"B51\"\n\"100*Data!B67/Data!$B$70\"\n\"100*Data!B96/Data!$B$99\"\n\"Data!B128\"\n\"Data!B150\"\n\"Data!B169\"\n\"Data!B189\"\n\"B52\"\n\"100*Data!B68/Data!$B$70\"\n\"100*Data!B97/Data!$B$99\"\n\"Data!B129\"\n\"Data!B151\"\n\"Data!B170\"\n\"Data!B1794\"\n\"B53\"\n\"100*Data!B69/Data!$B$70\"\n\"100*Data!B98/Data!$B$99\"\n\"\"\"Egypt - avg. 20\"\"&$B$81&\"\"/MWh\"\"\"\n\"\"\"Egypt - avg. 30\"\"&$B$81&\"\"/MWh\"\"\"\n\"\"\"Market 10-40 \"\"&$B$81&\"\"/MWh\"\"\"\n\"INDEX($D$43:$M$55,1,$C$43)\"\n\"B29\"\n\"B30\"\n\"B31\"\n\"B32\"\n\"B33\"\n\"B34\"\n\"B35\"\n\"B36\"\n\"B37\"\n\"B38\"\n\"\"\"0-\"\"&FIXED(B44,0)\"\n\"INDEX($D$43:$M$55,2,$C$43)\"\n\"FIXED(B44,0)&\"\"-\"\"&FIXED(B45,0)\"\n\"INDEX($D$43:$M$55,3,$C$43)\"\n\"INDEX($D$43:$M$55,4,$C$43)\"\n\"INDEX($D$43:$M$55,5,$C$43)\"\n\"INDEX($D$43:$M$55,6,$C$43)\"\n\"INDEX($D$43:$M$55,7,$C$43)\"\n\"INDEX($D$43:$M$55,8,$C$43)\"\n\"INDEX($D$43:$M$55,9,$C$43)\"\n\"INDEX($D$43:$M$55,10,$C$43)\"\n\"INDEX($D$43:$M$55,11,$C$43)\"\n\"INDEX($D$43:$M$55,12,$C$43)\"\n\"INDEX($D$43:$M$55,13,$C$43)\"\n\"'Zafarana 1999'!I33\"\n\"INDEX($D$58:$M$74,1,$C$58)\"\n\"C43\"\n\"INDEX($D$58:$M$74,2,$C$58)\"\n\"'Zafarana 1999'!I36/3.6\"\n\"'Zafarana 2010'!I36/3.6\"\n\"INDEX($D$58:$M$74,3,$C$58)\"\n\"INDEX($D$58:$M$74,4,$C$58)\"\n\"INDEX($D$58:$M$74,5,$C$58)\"\n\"INDEX($D$58:$M$74,6,$C$58)\"\n\"INDEX($D$58:$M$74,7,$C$58)\"\n\"INDEX($D$58:$M$74,8,$C$58)\"\n\"INDEX($D$58:$M$74,9,$C$58)\"\n\"INDEX($D$58:$M$74,10,$C$58)\"\n\"INDEX($D$58:$M$74,11,$C$58)\"\n\"INDEX($D$58:$M$74,12,$C$58)\"\n\"INDEX($D$58:$M$74,13,$C$58)\"\n\"SUM(D59:D69)\"\n\"INDEX($D$58:$M$74,14,$C$58)\"\n\"'Zafarana 1999'!B47/3.6-Data!D70\"\n\"'Zafarana 2010'!B47/3.6-Data!D70\"\n\"INDEX($D$58:$M$74,15,$C$58)\"\n\"'Zafarana 1999'!B34/3.6\"\n\"'Zafarana 2010'!B34/3.6\"\n\"INDEX($D$58:$M$74,16,$C$58)\"\n\"SUM(D70:D72)\"\n\"INDEX($D$58:$M$74,17,$C$58)\"\n\"INDEX($E$76:$M$79,1,$D$76)\"\n\"INDEX($E$76:$M$79,2,$D$76)\"\n\"O77/3.6\"\n\"E77*$F$83\"\n\"INDEX($E$76:$M$79,3,$D$76)\"\n\"INDEX($E$76:$M$79,4,$D$76)\"\n\"LEFT($C$81,1)\"\n\"INDEX($E$81:$M$82,1,$D$76)\"\n\"INDEX($E$81:$M$82,2,$D$76)\"\n\"$B$81&\"\"/MWh\"\"\"\n\"$B$81&\"\"/kW\"\"\"\n\"INDEX($D$87:$M$102,1,$C$87)\"\n\"C29\"\n\"C30\"\n\"C31\"\n\"C32\"\n\"C33\"\n\"C34\"\n\"C35\"\n\"C36\"\n\"C37\"\n\"C38\"\n\"A44\"\n\"INDEX($D$87:$M$102,2,$C$87)\"\n\"-'Zafarana 1999'!$D58/3.6\"\n\"-'Zafarana 1999'!$D36/3.6\"\n\"-'Zafarana 2010'!$D80/3.6\"\n\"-'Zafarana 2010'!$D58/3.6\"\n\"-'Zafarana 2010'!$D36/3.6\"\n\"INDEX($D$87:$M$102,3,$C$87)\"\n\"INDEX($D$87:$M$102,4,$C$87)\"\n\"INDEX($D$87:$M$102,5,$C$87)\"\n\"INDEX($D$87:$M$102,6,$C$87)\"\n\"INDEX($D$87:$M$102,7,$C$87)\"\n\"INDEX($D$87:$M$102,8,$C$87)\"\n\"INDEX($D$87:$M$102,9,$C$87)\"\n\"INDEX($D$87:$M$102,10,$C$87)\"\n\"INDEX($D$87:$M$102,11,$C$87)\"\n\"INDEX($D$87:$M$102,12,$C$87)\"\n\"INDEX($D$87:$M$102,13,$C$87)\"\n\"INDEX($D$87:$M$102,14,$C$87)\"\n\"INDEX($D$87:$M$102,15,$C$87)\"\n\"INDEX($D$87:$M$102,16,$C$87)\"\n\"D99/D101*1000\"\n\"INDEX($D$112:$M$113,1,$C$112)\"\n\"D29\"\n\"D30\"\n\"D31\"\n\"D32\"\n\"D33\"\n\"D34\"\n\"D35\"\n\"D36\"\n\"D37\"\n\"D38\"\n\"A44\"\n\"INDEX($D$112:$M$116,2,$C$112)\"\n\"VLOOKUP(D114,$A$77:$B$79,2)*3.6/(D115/100)\"\n\"INDEX($D$112:$M$116,3,$C$112)\"\n\"INDEX($D$112:$M$116,4,$C$112)\"\n\"INDEX($D$112:$M$116,5,$C$112)\"\n\"$B$102*D113/1000\"\n\"INDEX($D$119:$M$132,1,$C$87)\"\n\"D87\"\n\"A44\"\n\"INDEX($D$119:$M$133,2,$C$87)\"\n\"$B$79*3.6/('Zafarana 1999'!$E36/100)\"\n\"$B$79*3.6/('Zafarana 2010'!$E36/100)\"\n\"INDEX($D$119:$M$133,3,$C$87)\"\n\"INDEX($D$119:$M$133,4,$C$87)\"\n\"INDEX($D$119:$M$133,5,$C$87)\"\n\"INDEX($D$119:$M$133,6,$C$87)\"\n\"INDEX($D$119:$M$133,7,$C$87)\"\n\"INDEX($D$119:$M$133,8,$C$87)\"\n\"INDEX($D$119:$M$133,9,$C$87)\"\n\"INDEX($D$119:$M$133,10,$C$87)\"\n\"INDEX($D$119:$M$133,11,$C$87)\"\n\"INDEX($D$119:$M$133,12,$C$87)\"\n\"INDEX($D$133:$M$137,1,$C$87)\"\n\"'Zafarana 1999'!O69\"\n\"'Zafarana 1999'!$O$47\"\n\"'Zafarana 2010'!$O$91\"\n\"'Zafarana 2010'!$O$69\"\n\"'Zafarana 2010'!$O$47\"\n\"INDEX($D$133:$M$137,2,$C$87)\"\n\"'Zafarana 1999'!P69\"\n\"'Zafarana 1999'!$P$47\"\n\"'Zafarana 2010'!$P$91\"\n\"'Zafarana 2010'!$P$69\"\n\"'Zafarana 2010'!$P$47\"\n\"INDEX($D$133:$M$137,3,$C$87)\"\n\"'Zafarana 1999'!Q69\"\n\"'Zafarana 1999'!$Q$47\"\n\"'Zafarana 2010'!$Q$91\"\n\"'Zafarana 2010'!$Q$69\"\n\"'Zafarana 2010'!$Q$47\"\n\"INDEX($D$133:$M$137,5,$C$87)\"\n\"(D133*$B$77+D134*$B$78+D135*$B$79)/D101\"\n\"IF(B133>0,A133&\"\"/\"\",\"\"\"\")&IF(B134>0,A134&\"\"/\"\",\"\"\"\")&IF(B135>0,A135,\"\"\"\")\"\n\"\"\"Electricity prices, \"\"&$B$81&\"\"/MWh\"\"\"\n\"INDEX($D$141:$M$158,1,$C$141)\"\n\"E29\"\n\"$E$30\"\n\"$E$31\"\n\"$E$32\"\n\"$E$33\"\n\"$E$34\"\n\"$E$35\"\n\"$E$36\"\n\"$E$37\"\n\"$E$38\"\n\"A44\"\n\"INDEX($D$141:$M$158,2,$C$141)\"\n\"$D$157\"\n\"$N142*E$157\"\n\"'Zafarana 1999'!M36\"\n\"INDEX($D$141:$M$158,3,$C$141)\"\n\"INDEX($D$141:$M$158,4,$C$141)\"\n\"INDEX($D$141:$M$158,5,$C$141)\"\n\"INDEX($D$141:$M$158,6,$C$141)\"\n\"INDEX($D$141:$M$158,7,$C$141)\"\n\"INDEX($D$141:$M$158,8,$C$141)\"\n\"INDEX($D$141:$M$158,9,$C$141)\"\n\"INDEX($D$141:$M$158,10,$C$141)\"\n\"INDEX($D$141:$M$158,11,$C$141)\"\n\"INDEX($D$141:$M$158,12,$C$141)\"\n\"INDEX($D$141:$M$158,13,$C$141)\"\n\"INDEX($D$141:$M$158,14,$C$141)\"\n\"$N$154\"\n\"-'Zafarana 1999'!$D$47/'Zafarana 1999'!$F$47\"\n\"INDEX($D$141:$M$158,15,$C$141)\"\n\"$N$155\"\n\"$B$99/H154*3.6\"\n\"'Zafarana 1999'!F47\"\n\"INDEX($D$141:$M$158,16,$C$141)\"\n\"VLOOKUP(D153,$A$77:$B$78,2)*D155/1000\"\n\"INDEX($D$141:$M$158,17,$C$141)\"\n\"Presentation!$C$19\"\n\"F28\"\n\"INDEX($D$160:$M$171,1,$C$160)\"\n\"$F$29\"\n\"$F$30\"\n\"$F$31\"\n\"$F$32\"\n\"$F$33\"\n\"$F$34\"\n\"$F$35\"\n\"$F$36\"\n\"F37\"\n\"F38\"\n\"A44\"\n\"INDEX($D$160:$M$171,2,$C$160)\"\n\"Presentation!$C$24\"\n\"B157\"\n\"N142*Presentation!$C$24\"\n\"G142\"\n\"INDEX($D$160:$M$171,3,$C$160)\"\n\"D$161\"\n\"INDEX($D$160:$M$171,4,$C$160)\"\n\"INDEX($D$160:$M$171,5,$C$160)\"\n\"INDEX($D$160:$M$171,6,$C$160)\"\n\"INDEX($D$160:$M$171,7,$C$160)\"\n\"INDEX($D$160:$M$171,8,$C$160)\"\n\"INDEX($D$160:$M$171,9,$C$160)\"\n\"INDEX($D$160:$M$171,10,$C$160)\"\n\"INDEX($D$160:$M$171,11,$C$160)\"\n\"INDEX($D$160:$M$171,12,$C$160)\"\n\"\"\"Revenue, \"\"&$B$81&\"\"/kW\"\"\"\n\"$A$141\"\n\"$A$160\"\n\"A44\"\n\"B88*B142/$B$101\"\n\"B88*B161/$B$101\"\n\"B192/B102*1000\"\n\"C192/$B$102*1000\"\n\"Presentation!C28*Data!B116/1000\"\n\"Presentation!C29*Data!B137/1000\"\n\"B192+B195\"\n\"C34-B34\"\n\"-D36/J36*100\"\n\"B36-B37\"\n\"SUM(E36:E38)/3\"\n\"VLOOKUP(G36,Data!$A$77:$C$78,3)*$J$36/J36\"\n\"K36*B36/$B$47\"\n\"K36/$L$47\"\n\"M36*D36/$D$47\"\n\"IF(O$33=$G36,$F36,0)\"\n\"J36\"\n\"F39*VLOOKUP(G39,Data!$A$77:$B$78,2)/1000\"\n\"E39\"\n\"B46\"\n\"SUM(B36:B46)\"\n\"B34+B47\"\n\"-D58/J36*100\"\n\"C36/$C$36\"\n\"-(D36-D58)/$B$36\"\n\"-D58/$B$36\"\n\"C34-B34\"\n\"-D36/J36*100\"\n\"F36*VLOOKUP(G36,Data!$A$77:$B$78,2)/1000\"\n\"B49-B37\"\n\"E36\"\n\"VLOOKUP(G36,Data!$A$77:$C$78,3)*$J$36/J36\"\n\"K36*B36/$B$47\"\n\"K36/$L$47\"\n\"M36*D36/$D$47\"\n\"IF(O$33=$G36,$F36,0)\"\n\"B37-B38\"\n\"J36\"\n\"B46\"\n\"SUM(B36:B46)\"\n\"B34+B47\"\n\"B36/8\"\n\"-D58/J36*100\"\n\"'Zafarana 1999'!A36\"\n\"'Zafarana 1999'!D36\"\n\"-D80/J36*100\"\n\"C49/$C$49\"\n\"-(D49-D71)/$B$49\"\n\"-(D71-D93)/$B$49\"\n\"-D93/$B$49\"\n\"C37/$C$49\"\n\"-(D37-D59)/$B$49\"\n\"-(D59-D81)/$B$49\"\n\"-D81/$B$49\"\n\"SUM(G16:H29)\"\n\"SUM(G16:H29)\"\n\"SUM(G16:H29)\"\n\"SUM(G16:H29)\"\n\"SUM(G16:H29)\"\n\"SUM(G16:H29)\"\n\"SUM(D16:E29)\"\n\"SUM(D16:E29)\"\n\"SUM(G30:P32)\"\n\"SUM(G30:P32)\"\n\"SUM(D16:E29)\"\n\"SUM(D16:E29)\"\n\"SUM(G30:P32)\"\n\"SUM(G30:P32)\"\n\"SUM(D16:E29)\"\n\"SUM(D16:E29)\"\n\"SUM(G30:P32)\"\n\"SUM(G30:P32)\"\n\"Sheet1!D16\"\n\"Sheet1!G16\"\n\"Sheet1!D57\"\n\"Sheet1!G57\"\n\"Sheet1!D97\"\n\"Sheet1!G97\"\n\"Sheet1!D138\"\n\"Sheet1!G138\"\n\"Sheet1!D18\"\n\"Sheet1!G18\"\n\"Sheet1!D59\"\n\"Sheet1!G59\"\n\"Sheet1!D99\"\n\"-Sheet1!G99\"\n\"Sheet1!D140\"\n\"Sheet1!G140\"\n\"Sheet1!D20\"\n\"Sheet1!G20\"\n\"Sheet1!D61\"\n\"Sheet1!G61\"\n\"Sheet1!D101\"\n\"Sheet1!G101\"\n\"Sheet1!D142\"\n\"Sheet1!D142\"\n\"Sheet1!D22\"\n\"Sheet1!G22\"\n\"Sheet1!D63\"\n\"Sheet1!G63\"\n\"Sheet1!D103\"\n\"Sheet1!G103\"\n\"Sheet1!D144\"\n\"Sheet1!D144\"\n\"Sheet1!D24\"\n\"Sheet1!G24\"\n\"Sheet1!D65\"\n\"Sheet1!G65\"\n\"Sheet1!D105\"\n\"Sheet1!G105\"\n\"Sheet1!D146\"\n\"Sheet1!D146\"\n\"Sheet1!D26\"\n\"Sheet1!G26\"\n\"Sheet1!D67\"\n\"Sheet1!G67\"\n\"Sheet1!D107\"\n\"Sheet1!G107\"\n\"Sheet1!D148\"\n\"Sheet1!D148\"\n\"Sheet1!D28\"\n\"Sheet1!D69\"\n\"Sheet1!D109\"\n\"Sheet1!D150\"\n\"SUM(C10:C16)\"\n\"SUM(C17+E17+G17+I17)\"\n\"Sheet1!G30\"\n\"Sheet1!G71\"\n\"Sheet1!G111\"\n\"Sheet1!G152\"\n\"Sheet1!G152\"\n\"SUM(C19:J19)\"\n\"Sheet1!I30\"\n\"Sheet1!I30\"\n\"Sheet1!I71\"\n\"Sheet1!I71\"\n\"Sheet1!I111\"\n\"Sheet1!I111\"\n\"Sheet1!I152\"\n\"Sheet1!I152\"\n\"Sheet1!K30\"\n\"Sheet1!K30\"\n\"Sheet1!K71\"\n\"Sheet1!K71\"\n\"Sheet1!K111\"\n\"Sheet1!K111\"\n\"Sheet1!K152\"\n\"Sheet1!K152\"\n\"Sheet1!M30\"\n\"Sheet1!M30\"\n\"Sheet1!M71\"\n\"Sheet1!M71\"\n\"Sheet1!M111\"\n\"Sheet1!M111\"\n\"Sheet1!M152\"\n\"Sheet1!M152\"\n\"Sheet1!O30\"\n\"Sheet1!O30\"\n\"Sheet1!O71\"\n\"Sheet1!O71\"\n\"Sheet1!O111\"\n\"Sheet1!O111\"\n\"Sheet1!O152\"\n\"Sheet1!O152\"\n\"SUM(C19:D23)\"\n\"SUM(C19:D23)\"\n\"SUM(K19:K23)\"\n\"B10-0.25\"\n\"B9*B10\"\n\"B11-(B12*B9)\"\n\"'Assumptions for IS'!B11\"\n\"B7/B$9\"\n\"'Assumptions for IS'!C11\"\n\"'Assumptions for IS'!D11\"\n\"'Assumptions for IS'!E11\"\n\"SUM(B7:B7)\"\n\"'Assumptions for IS'!B9*'Assumptions for IS'!B12\"\n\"'Assumptions for IS'!C9*'Assumptions for IS'!C12\"\n\"'Assumptions for IS'!D9*'Assumptions for IS'!D12\"\n\"'Assumptions for IS'!E9*'Assumptions for IS'!E12\"\n\"B12\"\n\"B9-B13\"\n\"B15/B9\"\n\"B$21*0.775\"\n\"D$21*0.675\"\n\"F$21*0.625\"\n\"B$21*0.2\"\n\"D$21*0.3\"\n\"F$21*0.35\"\n\"B$21*0.025\"\n\"B21/B9\"\n\"IF((B15-B21)>250000,((B15-B21)*0.2),250000)\"\n\"IF(((D15-D21)*0.2)>250000,((D15-D21)*0.2),250000)\"\n\"SUM(B24:B24)\"\n\"B15-B21-B25\"\n\"B27/B9\"\n\"'Assumptions for IS'!B18\"\n\"B7/B$9\"\n\"'Assumptions for IS'!C18\"\n\"'Assumptions for IS'!D18\"\n\"'Assumptions for IS'!E18\"\n\"SUM(B7:B7)\"\n\"'Assumptions for IS'!B16*'Assumptions for IS'!B19\"\n\"'Assumptions for IS'!C16*'Assumptions for IS'!C19\"\n\"'Assumptions for IS'!D16*'Assumptions for IS'!D19\"\n\"'Assumptions for IS'!E16*'Assumptions for IS'!E19\"\n\"B12\"\n\"B9-B13\"\n\"B15/B9\"\n\"'Income Statement 90%'!B18\"\n\"B21/B9\"\n\"IF((B15-B21)>250000,((B15-B21)*0.2),250000)\"\n\"IF(((D15-D21)*0.2)>250000,((D15-D21)*0.2),250000)\"\n\"SUM(B24:B24)\"\n\"B15-B21-B25\"\n\"B27/B9\"\n\"'Assumptions for IS'!B25\"\n\"B7/B$9\"\n\"'Assumptions for IS'!C25\"\n\"'Assumptions for IS'!D25\"\n\"'Assumptions for IS'!E25\"\n\"SUM(B7:B7)\"\n\"'Assumptions for IS'!B23*'Assumptions for IS'!B26\"\n\"'Assumptions for IS'!C23*'Assumptions for IS'!C26\"\n\"'Assumptions for IS'!D23*'Assumptions for IS'!D26\"\n\"'Assumptions for IS'!E23*'Assumptions for IS'!E26\"\n\"B12\"\n\"B9-B13\"\n\"B15/B9\"\n\"'Income Statement 90%'!B18\"\n\"B21/B9\"\n\"IF((B15-B21)>250000,((B15-B21)*0.2),250000)\"\n\"IF(((D15-D21)*0.2)>250000,((D15-D21)*0.2),250000)\"\n\"SUM(B24:B24)\"\n\"B15-B21-B25\"\n\"B27/B9\"\n\"IF(OR(C6<0,C6>10),\"\"Out of Range\"\",ROUND(C6,0))\"\n\"IF(D6=\"\"Out of Range\"\",1,0)\"\n\"IF(D6=\"\"Out of Range\"\",\"\"Out of Range\"\",(D6*(F6/$F$15)))\"\n\"SUM(E6:E14)\"\n\"IF(E15>0,\"\"Out of Range\"\",(SUM(G6:G14)))\"\n\"IF(G17=\"\"Out of Range\"\",\"\"Out of Range\"\",(IF(G17<5,\"\"BELOW AVERAGE\"\",IF(G17<7,\"\"BELOW AVERAGE\"\",IF(G17<8.5,\"\"AVERAGE\"\",\"\"ABOVE AVERAGE\"\")))))\"\n\"SUM(B12:B14)\"\n\"SUM(C58)\"\n\"SUM(C9:O9)\"\n\"SUM(C8:C14)\"\n\"SUM(C17:C21)*0.13\"\n\"SUM(C17:C53)\"\n\"C15-C54\"\n\"SUM(D57:O57)\"\n\"C56-C57\"\n\"+C8/$C$8\"\n\"+F8/$F$8\"\n\"+C8-C10\"\n\"+C16*1.05\"\n\"+SUM(C15:C43)\"\n\"+C12-C44\"\n\"SUM(C38+C43+C46)/21800\"\n\"SUM(D7:D11)\"\n\"SUM(D7*$C20*4)\"\n\"SUM(D20:O20)\"\n\"SUM(D12*3.36*21)/2\"\n\"SUM(D25:D27)\"\n\"+E11+E10+E9\"\n\"SUM(E14:E17)\"\n\"+E20+E18+E12\"\n\"+E27+E26\"\n\"+E31\"\n\"+E28+E32\"\n\"+E40+E34\"\n\"(10231001*((100+'[2]Asmptns non pay 04-05 budget'!D8)/100))/1000\"\n\"SUM(C11:D11)\"\n\"('[2]Detail I&E'!D62)/1000\"\n\"('[2]Detail I&E'!E62)/1000\"\n\"('[2]Detail I&E'!F62)/1000\"\n\"('[2]Detail I&E'!G62)/1000\"\n\"('[2]Detail I&E'!C63)/1000\"\n\"SUM(F12:F12)\"\n\"'[2]Detail I&E'!D64/1000\"\n\"SUM(C11:C13)\"\n\"('[2]Detail I&E'!C41)/1000\"\n\"('[2]Detail I&E'!D41)/1000\"\n\"('[2]Detail I&E'!E41)/1000\"\n\"('[2]Detail I&E'!F41)/1000\"\n\"('[2]Detail I&E'!G41)/1000\"\n\"(('[2]Detail I&E'!C32)/1000)-D17+('[2]Detail I&E'!C52/1000)\"\n\"('[2]Detail I&E'!C26/1000)+200\"\n\"(('[2]Detail I&E'!D32)/1000)+(('[2]Detail I&E'!D52)/1000)-G17\"\n\"('[2]Detail I&E'!D26/1000)-0.0005\"\n\"(('[2]Detail I&E'!E32)/1000)-J17+(('[2]Detail I&E'!E52)/1000)\"\n\"('[2]Detail I&E'!E26/1000)-0.0005\"\n\"(('[2]Detail I&E'!F32)/1000)-M17+(('[2]Detail I&E'!F52)/1000)\"\n\"('[2]Detail I&E'!F26/1000)-0.0005\"\n\"(('[2]Detail I&E'!G32)/1000)-P17+(('[2]Detail I&E'!G52)/1000)\"\n\"('[2]Detail I&E'!G26/1000)-0.0005\"\n\"('[2]Detail I&E'!C48)/1000\"\n\"('[2]Detail I&E'!C57)/1000\"\n\"'[2]Detail I&E'!C57\"\n\"('[2]Detail I&E'!D57)/1000\"\n\"('[2]Detail I&E'!E57)/1000\"\n\"('[2]Detail I&E'!F57)/1000\"\n\"('[2]Detail I&E'!G57)/1000\"\n\"('[2]Detail I&E'!C55)/1000\"\n\"('[2]Detail I&E'!D55)/1000\"\n\"('[2]Detail I&E'!E55)/1000\"\n\"('[2]Detail I&E'!F55)/1000\"\n\"('[2]Detail I&E'!G55)/1000\"\n\"SUM(C16:C20)\"\n\"C14-C21\"\n\"'[2]Detail I&E'!C35\"\n\"SUM(C12:C16)\"\n\"SUM(C26:C35)\"\n\"C36+C39+C40+C43+C44+C45\"\n\"C37+C38+C46+C47+C42+'[2]Detail I&E'!C52\"\n\"'[2]S&R Non payroll 04-05'!J10+'[2]HTA Non payroll 04-05'!K11+'[2]Corp Non-payroll 04-05'!J10\"\n\"C26\"\n\"'[2]HTA Non payroll 04-05'!K12+'[2]Corp Non-payroll 04-05'!J11\"\n\"'[2]Corp Non-payroll 04-05'!J13\"\n\"'[2]HTA Non payroll 04-05'!K14+'[2]Corp Non-payroll 04-05'!J14\"\n\"'[2]S&R Non payroll 04-05'!J11+'[2]HTA Non payroll 04-05'!K16+'[2]Clin Non-payroll 04-05'!J11+'[2]Corp Non-payroll 04-05'!J20\"\n\"'[2]HTA Non payroll 04-05'!K18+'[2]Clin Non-payroll 04-05'!J13+'[2]Corp Non-payroll 04-05'!J22\"\n\"'[2]HTA Non payroll 04-05'!K19+'[2]Corp Non-payroll 04-05'!J24\"\n\"'[2]HTA Non payroll 04-05'!K20+'[2]Clin Non-payroll 04-05'!J14+'[2]Corp Non-payroll 04-05'!J26\"\n\"'[2]S&R Non payroll 04-05'!J13+'[2]HTA Non payroll 04-05'!K21+'[2]Clin Non-payroll 04-05'!J15+'[2]Corp Non-payroll 04-05'!J27\"\n\"'[2]S&R Non payroll 04-05'!J14+'[2]Corp Non-payroll 04-05'!J29\"\n\"'[2]Clin Non-payroll 04-05'!J17+'[2]Corp Non-payroll 04-05'!J30+'[2]Council Non-payroll 04-05'!J15\"\n\"'[2]S&R Non payroll 04-05'!C25+'[2]HTA Non payroll 04-05'!C30+'[2]Clin Non-payroll 04-05'!C25+'[2]Corp Non-payroll 04-05'!C38\"\n\"SUM(C22:C24)\"\n\"'[2]Detail I&E'!C43\"\n\"'[2]Detail I&E'!C45\"\n\"'[2]Detail I&E'!C44+'[2]Detail I&E'!C46+'[2]Detail I&E'!C47\"\n\"SUM(C52:C54)\"\n\"SUM(B8:B9)\"\n\"-2-24-41\"\n\"B11+B12-B13-B14+B15\"\n\"B16-B17\"\n\"SUM(B22:B23)\"\n\"B19+B22+B23+B24+B20\"\n\"ROUND(B19/B35,2)\"\n\"ROUND(J20/J35,2)\"\n\"ROUND((Q22+Q23+Q24)/Q35,2)-0.01\"\n\"ROUND((S22+S23+S24)/S35,2)\"\n\"SUM(B29:B32)\"\n\"100461-20922\"\n\"L43+L42\"\n\"56519+8056\"\n\"B47+B46+B45+B44\"\n\"B52+B51+B50\"\n\"+B53+B54\"\n\"L48\"\n\"+E601\"\n\"+E602+F602\"\n\"NOW()\"\n\"SUM(F17:V17)\"\n\"W17/(2003-1987)\"\n\"SUM(R17:V17)/5\"\n\"AA17-Z17\"\n\"AA17/Z17\"\n\"250+300+130+60+290+260+180+40\"\n\"240+115+40+105+155+170+25+17.5\"\n\"90.87+14.31\"\n\"126.56+141.38\"\n\"159.87+4.45+117.16\"\n\"150.43+122.2+25.78\"\n\"80.26+27.25\"\n\"47.92+24.57\"\n\"37.49+12.43\"\n\"3.02+0.83+1.45+1.36+1.19+1.03+0.8+0.8+0.03\"\n\"0.43+0.91+0.71\"\n\"263.5-16\"\n\"SUM(F17:F24)\"\n\"2.69+9.19\"\n\"'2004-expend-sum'!A4\"\n\"'2004-expend-sum'!C4\"\n\"'2004-expend-sum'!E4\"\n\"100+100\"\n\"'2004-expend-sum'!G4\"\n\"9+17-10\"\n\"202+10\"\n\"12.75+15\"\n\"17+6\"\n\"'2004-expend-sum'!I4\"\n\"'2004-expend-sum'!K4\"\n\"200+200\"\n\"'2004-expend-sum'!A20\"\n\"'2004-expend-sum'!C20\"\n\"'2004-expend-sum'!E20\"\n\"100+30\"\n\"'2004-expend-sum'!G20\"\n\"142.31+67.08\"\n\"692.03+51.25\"\n\"'2004-expend-sum'!I20\"\n\"'2004-expend-sum'!K20\"\n\"'2004-expend-sum'!A38\"\n\"'2004-expend-sum'!C38\"\n\"'2004-expend-sum'!E38\"\n\"SUM(F29:F44)\"\n\"SUM(Z29:Z44)-Z34-Z44\"\n\"250+300\"\n\"350+35\"\n\"SUM(F50:F59)\"\n\"F26-F46-F61\"\n\"F26-F46-F61\"\n\"F64+(G26-G46-G61)\"\n\"(W26-W46-W61)\"\n\"V64+(Z26-Z46-Z61)\"\n\"V64+AA26-AA46-AA61\"\n\"AA58\"\n\"AB68-Z68\"\n\"Z70+Z71\"\n\"AA56\"\n\"SUM(Z67:Z71)\"\n\"AB68+AB72\"\n\"SUM(A5:A17)\"\n\"SUM(C21:C35)\"\n\"SUM(C39:C50)\"\n\"C6\"\n\"SUM(D17+L17+T17+AB17)\"\n\"ROUND(PRODUCT((F17+F22+F23+F27+F28),C41),0)\"\n\"ROUND(PRODUCT((AD23+AD27+AD28),AA41),0)\"\n\"SUM(D17+D22+D23+D27+D28)\"\n\"SUM(F17+F22+F23+F27+F28+F29)\"\n\"C5/D5\"\n\"3*47.5\"\n\"2.5*8\"\n\"3*135.39\"\n\"47.5*3\"\n\"4*8\"\n\"135.39*3\"\n\"47.5*4\"\n\"3.3*8\"\n\"135.39*4\"\n\"47.5*2\"\n\"135.39*2\"\n\"3*8\"\n\"2.83*8\"\n\"AVERAGE(E5:E30)\"\n\"D14*E14\"\n\"-(G14-F14)\"\n\"B15*C15*5*50\"\n\"B13*C13*5*50\"\n\"E13+(F13/1.35)\"\n\"E13/D13\"\n\"I13*D13\"\n\"$F$13-$G$13\"\n\"$F$14-$G$14\"\n\"G15-F15\"\n\"150000+(F15/1.35)\"\n\"$F$15-$G$15\"\n\"$F$16-$G$16\"\n\"$F$17-$G$17\"\n\"592593+150000\"\n\"$F$18-$G$18\"\n\"$F$19-$G$19\"\n\"$F$20-$G$20\"\n\"$F$21-$G$21\"\n\"$F$22-$G$22\"\n\"MVT!F13-MVT!G13\"\n\"B8\"\n\"B8\"\n\"B8\"\n\"IRR(B8:B22)\"\n\"IRR(L8:L20)\"\n\"598135-4475\"\n\"597825-16823\"\n\"548226-7348\"\n\"SUM(D10:J10)\"\n\"5574+2\"\n\"7051+658\"\n\"9913+188\"\n\"SUM(D10:D11)\"\n\"502639-4473\"\n\"505954-16165\"\n\"456108-7160\"\n\"52315\"\n\"D12-SUM(D14:D17)\"\n\"D18-SUM(D19:D20)\"\n\"D22-SUM(D23:D24)\"\n\"D18+D15\"\n\"644716-15495\"\n\"625890-21344\"\n\"658699-27711\"\n\"678684-44897\"\n\"SUM(E10:L10)\"\n\"19754+1727\"\n\"31372+373\"\n\"23605+976\"\n\"8520+3775\"\n\"SUM(E10:E11)\"\n\"541289-13768\"\n\"532446-20971\"\n\"565517-26735\"\n\"579463-41124+4\"\n\"58515-1\"\n\"E12-SUM(E14:E17)\"\n\"E18-SUM(E19:E20)\"\n\"E22-SUM(E23:E24)\"\n\"E25-E26\"\n\"26.6+0.941242\"\n\"(D25*D30)/(D29*1000)\"\n\"(E25*E30)/(E29*1000)\"\n\"E18+E15\"\n\"688411-36129\"\n\"672295-46000\"\n\"H9+F9+D9+J9\"\n\"22218+1266\"\n\"30543+102\"\n\"SUM(D9:D10)\"\n\"571024-34863\"\n\"570957-45898\"\n\"D11-SUM(D13:D16)\"\n\"D17-SUM(D18:D19)\"\n\"D21-SUM(D22:D23)\"\n\"(D24)/(D26*1000)\"\n\"D17+D14\"\n\"SUM(D10:J10)\"\n\"SUM(D10:D11)\"\n\"D12-SUM(D14:D18)\"\n\"D19-SUM(D20:D22)\"\n\"D24-D25-D26\"\n\"D28+D29\"\n\"ROUND((D28)/(D32*1000),2)\"\n\"(F28)/(F32*1000)\"\n\"ROUND((D30)/(D32*1000),2)\"\n\"(F30)/(F32*1000)\"\n\"D19+D15+D16\"\n\"D28+D21\"\n\"D40/52414\"\n\"F40/(F32*1000)\"\n\"+H23+F23+D23\"\n\"SUM(D26:D34)\"\n\"+D23-D36\"\n\"+[1]CECE!B21\"\n\"+[1]CECE!C37\"\n\"+[1]CECE!C45\"\n\"-11.2-3.2\"\n\"+D14+E14+F14+G14\"\n\"+[1]CECE!E47\"\n\"+C14\"\n\"+[1]MDMD!B19\"\n\"+[1]MDMD!C33\"\n\"+[1]MDMD!C42\"\n\"-35.4-1.1\"\n\"+[1]MDMD!E44\"\n\"+[1]MDSS!B19\"\n\"+[1]MDSS!C29\"\n\"+[1]MDSS!C38\"\n\"+[1]MDSS!E40\"\n\"SUM(C18:C19)\"\n\"+[1]CDCD!B21\"\n\"+[1]CDCD!C33\"\n\"+[1]CDCD!C42\"\n\"-17.13-3.2\"\n\"+[1]CDCD!E44\"\n\"+[1]CDCA!B22\"\n\"+[1]CDCA!C30\"\n\"+[1]CDCA!C33\"\n\"+[1]CDCA!E35\"\n\"+[1]CDPS!B24\"\n\"+[1]CDPS!C52\"\n\"+[1]CDPS!C55\"\n\"+[1]CDPS!E57\"\n\"+[1]CDPR!B21\"\n\"+[1]CDPR!C29\"\n\"+[1]CDPR!C32\"\n\"+[1]CDPR!E34\"\n\"SUM(C23:C26)\"\n\"SUM(L23:L25)\"\n\"+[1]FS!B20\"\n\"+[1]FS!C28\"\n\"+[1]FS!C37\"\n\"-13.7-54.4\"\n\"+[1]FS!E39\"\n\"+[1]FSFN!B18\"\n\"+[1]FSFN!C31\"\n\"+[1]FSFN!C40\"\n\"+[1]FSFN!E42\"\n\"+[1]PRCO!B19\"\n\"+[1]PRCO!C33\"\n\"+[1]PRCO!C42\"\n\"+[1]PRCO!E44\"\n\"+[1]PRNH!B19\"\n\"+[1]PRNH!C34\"\n\"+[1]PRNH!C43\"\n\"+[1]PRNH!E45\"\n\"+[1]PRLD!B19\"\n\"+[1]PRLD!C33\"\n\"+[1]PRLD!C42\"\n\"+[1]PRLD!E44\"\n\"+[1]PRDL!B19\"\n\"+[1]PRDL!C33\"\n\"+[1]PRDL!C42\"\n\"+[1]PRDL!E44\"\n\"SUM(C30:C35)\"\n\"SUM(L30:L31)\"\n\"+[1]PEPE!B19\"\n\"+[1]PEPE!C30\"\n\"+[1]PEPE!C39\"\n\"-2.9-1\"\n\"+[1]PEPE!E41\"\n\"SUM(C39)\"\n\"+[1]OPOP!B19\"\n\"+[1]OPOP!C33\"\n\"+[1]OPOP!C42\"\n\"-75.9-25\"\n\"+[1]OPOP!E44\"\n\"+[1]OPIM!B16\"\n\"+[1]OPIM!C31\"\n\"+[1]OPIM!C34\"\n\"+[1]OPIM!E36\"\n\"+[1]OPFM!B19\"\n\"+[1]OPFM!C58\"\n\"+[1]OPFM!C67\"\n\"+[1]OPFM!E69\"\n\"+[1]MDAG!B18\"\n\"+[1]MDAG!C38\"\n\"+[1]MDAG!C47\"\n\"+[1]MDAG!E49\"\n\"+[1]OPDE!B21\"\n\"+[1]OPDE!C31\"\n\"+[1]OPDE!C40\"\n\"+[1]OPDE!E42\"\n\"+[1]OPIT!B19\"\n\"+[1]OPIT!C42\"\n\"+[1]OPIT!C51\"\n\"+[1]OPIT!E53\"\n\"+[1]OPCO!B20\"\n\"+[1]OPCO!C35\"\n\"+[1]OPCO!C44\"\n\"+[1]OPCO!E46\"\n\"+[1]OPHD!B19\"\n\"+[1]OPHD!C30\"\n\"+[1]OPHD!C39\"\n\"+[1]OPHD!E41\"\n\"+[1]OPDA!B18\"\n\"+[1]OPDA!C29\"\n\"+[1]OPDA!C38\"\n\"+[1]OPDA!E40\"\n\"+[1]OPAD!B19\"\n\"+[1]OPAD!C30\"\n\"+[1]OPAD!C39\"\n\"+[1]OPAD!E41\"\n\"SUM(C43:C52)\"\n\"+J8\"\n\"+[1]DCDC!B19\"\n\"+[1]DCDC!C35\"\n\"+[1]DCDC!C44\"\n\"-33.5-6.4\"\n\"+[1]DCDC!E46\"\n\"+[1]PRDO!B20\"\n\"+[1]PRDO!C29\"\n\"+[1]PRDO!C38\"\n\"+[1]PRDO!E40\"\n\"+[1]RESERVES!B20\"\n\"+[1]RESERVES!C27\"\n\"+[1]RESERVES!E20+[1]RESERVES!E27\"\n\"+[1]RESERVES!B39\"\n\"+[1]RESERVES!C39\"\n\"+[1]RESERVES!B47\"\n\"+[1]RESERVES!C55\"\n\"SUM(C68:C70)\"\n\"SUM(L68:L68)\"\n\"+C15+C20+C27+C36+C40+C53+C64+C71\"\n\"+L15+L20+L27+L36+L40+#REF!+L53+#REF!+L64+#REF!+L71\"\n\"+[1]EBEB!B16\"\n\"+[1]EBEB!C27\"\n\"+[1]EBEB!C36\"\n\"+[1]EBEB!E38\"\n\"+[1]OPDR!B19\"\n\"+[1]OPDR!C34\"\n\"+[1]OPDR!C43\"\n\"+[1]OPDR!E45\"\n\"+C77+C79\"\n\"+L77+L79+#REF!\"\n\"+C73+C81\"\n\"+($H$73+$H$77-120)*0.863\"\n\"+$H$79*0.863\"\n\"+F94+G94\"\n\"+($H$73+$H$77-120)*0.075\"\n\"+$H$79*0.075\"\n\"+($H$73+$H$77-120)*0.041\"\n\"+$H$79*0.041\"\n\"+($H$73+$H$77-120)*0.021\"\n\"+$H$79*0.021\"\n\"+SUM(F94:F100)\"\n\"+[1]summary!F94\"\n\"+D6+E6\"\n\"+SUM(D6:D12)\"\n\"+D22+E22+F22\"\n\"200\"\n\"788.4-23\"\n\"+($F$23)/86.3*7.5\"\n\"430.6-12\"\n\"+($F$23)/86.3*4.1\"\n\"220.4-6\"\n\"+($F$23)/86.3*2.1\"\n\"+SUM(D22:D32)\"\n\"+G33-F13\"\n\"SUM(E6+E11+E14)\"\n\"SUM(E7+E9+E12+E15)\"\n\"SUM(E17+E20)\"\n\"SUM(E31+E38)\"\n\"SUM(E29+E32+E36+E39)\"\n\"K11-L11\"\n\"IF(AND(OR(K11=0,L11<>0),OR(L11=0,K11<>0)),IF((K11+L11+M11<>0),IF(AND(OR(K11>0,L11<0),OR(L11>0,K11<0)),ABS(M11/MIN(ABS(L11),ABS(K11))),10),\"\"-\"\"),10)\"\n\"E11-F11\"\n\"IF(AND(OR(E11=0,F11<>0),OR(F11=0,E11<>0)),IF((E11+F11+G11<>0),IF(AND(OR(E11>0,F11<0),OR(F11>0,E11<0)),ABS(G11/MIN(ABS(F11),ABS(E11))),10),\"\"-\"\"),10)\"\n\"E11-I11\"\n\"IF(AND(OR(E11=0,I11<>0),OR(I11=0,E11<>0)),IF((E11+I11+J11<>0),IF(AND(OR(E11>0,I11<0),OR(I11>0,E11<0)),ABS(J11/MIN(ABS(I11),ABS(E11))),10),\"\"-\"\"),10)\"\n\"IF(AND(OR((K11)>2,(K11)<-2),OR((J11)>750,(J11)<-750)),\"\" QUERY - \"\" & (D11) & \"\" 2002/03 2001/02 difference of \"\" & (J11) & \"\"k.\"\",\"\"\"\")\"\n\"IF(AND(OR((H11)>2,(H11)<-2),OR((G11)>750,(G11)<-750)), \"\"QUERY - FC grants 2002/03 / Restated difference of \"\"&(G11)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((K12)>2,(K12)<-2),OR((J12)>750,(J12)<-750)),\"\" QUERY - \"\" & MID(D12,1,12) & \"\" 2002/03 2001/02 difference of \"\" & (J12) & \"\"k.\"\",\"\"\"\")\"\n\"IF(AND(OR((H12)>2,(H12)<-2),OR((G12)>750,(G12)<-750)), \"\"QUERY - Tuition fees 2002/03 / Restated difference of \"\"&(G12)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((K13)>2,(K13)<-2),OR((J13)>750,(J13)<-750)),\"\" QUERY - \"\" & MID(D13,1,15) & \"\" 2002/03 2001/02 difference of \"\" & (J13) & \"\"k.\"\",\"\"\"\")\"\n\"IF(AND(OR((H13)>2,(H13)<-2),OR((G13)>750,(G13)<-750)), \"\"QUERY - Research grants 2002/03 / Restated difference of \"\"&(G13)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((H14)>2,(H14)<-2),OR((G14)>750,(G14)<-750)), \"\"QUERY - Other income 2002/03 / Restated difference of \"\"&(G14)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((K15)>2,(K15)<-2),OR((J15)>750,(J15)<-750)),\"\" QUERY - \"\" & MID(D15,1,24) & \"\" 2002/03 2001/02 difference of \"\" & (J15) & \"\"k.\"\",\"\"\"\")\"\n\"IF(AND(OR((H15)>2,(H15)<-2),OR((G15)>750,(G15)<-750)), \"\"QUERY - Endowment income 2002/03 / Restated difference of \"\"&(G15)& \"\"k\"\",\"\"\"\")\"\n\"SUM(E11:E15)\"\n\"IF(AND(OR((H18)>2,(H18)<-2),OR((G18)>750,(G18)<-750)), \"\"QUERY - Staff costs 2002/03 / Restated difference of \"\"&(G18)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((H19)>2,(H19)<-2),OR((G19)>750,(G19)<-750)), \"\"QUERY - Other op. expenses 2002/03 / Restated difference of \"\"&(G19)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((H20)>2,(H20)<-2),OR((G20)>750,(G20)<-750)), \"\"QUERY - Depreciation 2002/03 / Restated difference of \"\"&(G20)& \"\"k\"\",\"\"\"\")\"\n\"IF(AND(OR((H21)>2,(H21)<-2),OR((G21)>750,(G21)<-750)), \"\"QUERY - Interest payable 2002/03 / Restated difference of \"\"&(G21)& \"\"k\"\",\"\"\"\")\"\n\"SUM(E18:E21)\"\n\"IF(AND(OR((H29)>5,(H29)<-5),OR((G29)>750,(G29)<-750)),\"\" QUERY - \"\" & (D29) & \"\" 2002/03 2001/02 difference of \"\" & (G29) & \"\"k. Genuine?\"\",\"\"\"\")\"\n\"SUM(E29:E68)\"\n\"SUM(E71:E73)\"\n\"SUM(E69,E74,E79)\"\n\"SUM(F79,F74,F69)\"\n\"SUM(E90,I90,M90)\"\n\"IF(OR(OR(AND(OR((H90)>5,(H90)<-5),OR((G90)>750,(G90)<-750)),(AND(OR((L90)>5,(L90)<-5),OR((K90)>750,(K90)<-750))),(AND(OR((P90)>5,(P90)<-5),OR((O90)>750,(O90)<-750))))),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(OR(OR(AND(OR((H90)>5,(H90)<-5),OR((G90)>750,(G90)<-750)),(AND(OR((L90)>5,(L90)<-5),OR((K90)>750,(K90)<-750))),(AND(OR((P90)>5,(P90)<-5),OR((O90)>750,(O90)<-750))))),\"\"QUERY -\"\"&(D90)&\"\" 2002/03 2001/02 diff. in 'SLC/LEA/SAAS/DEL' / 'NHS/RONE/SHHD' / 'Other' values. Genuine?\"\",\"\"\"\")\"\n\"SUM(E90:E95)\"\n\"IF(AND(OR((T97)>5,(T97)<-5),OR((S97)>750,(S97)<-750)),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(AND(OR((T97)>5,(T97)<-5),OR((S97)>750,(S97)<-750)),\"\"QUERY -     \"\" & (D97) & \"\" 2002/03 2001/02 TOTAL difference of \"\" & (S97) &\"\"k. Genuine?\"\",\"\"\"\")\"\n\"Q96+Q97\"\n\"SUM(E120:E128)\"\n\"SUM(E140:E146)\"\n\"SUM(E116,E118,E129,E147,E154)\"\n\"SUM(F154,F147,F129,F118,F116)\"\n\"IF(AND(OR(E165=0,F165<>0),OR(F165=0,E165<>0)),IF((E165+F165+G165<>0),IF(AND(OR(E165>0,F165<0),OR(F165>0,E165<0)),ABS(G165/MIN(ABS(F165),ABS(E165))),20),\"\"-\"\"),20)\"\n\"IF(OR(OR(AND(OR((H165)>10,(H165)<-10),OR((G165)>750,(G165)<-750)),(AND(OR((L165)>10,(L165)<-10),OR((K165)>750,(K165)<-750))),(AND(OR((P165)>10,(P165)<-10),OR((O165)>750,(O165)<-750))))),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(OR(OR(AND(OR((H165)>10,(H165)<-10),OR((G165)>750,(G165)<-750)),(AND(OR((L165)>10,(L165)<-10),OR((K165)>750,(K165)<-750))),(AND(OR((P165)>10,(P165)<-10),OR((O165)>750,(O165)<-750))))),\"\"QUERY - \"\" & (D165) & \"\" 2002/03 2001/02 difference in Acc. Staff Costs / Other Staff Costs / Other Op. Expenses\"\",\"\"\"\")\"\n\"IF(OR(OR(AND(OR((H211)>10,(H211)<-10),OR((G211)>750,(G211)<-750)),(AND(OR((L211)>10,(L211)<-10),OR((K211)>750,(K211)<-750))),(AND(OR((P211)>10,(P211)<-10),OR((O211)>750,(O211)<-750))))),\"\"QUERY - \"\" & (D211) & \"\" 2002/03 2001/02 difference in Acc. Staff Costs / Other Staff Costs / Other Op. Expenses / Int. Payable. Genuine?\"\",\"\"\"\")\"\n\"IF(AND(OR((P217)>10,(P217)<-10),OR((O217)>750,(O217)<-750)),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(AND(OR((P217)>10,(P217)<-10),OR((O217)>750,(O217)<-750)),\"\"QUERY - \"\" & (D217) & \"\" 2002/03 2001/02 difference in Other Op. Expenses\"\",\"\"\"\")\"\n\"IF(AND(OR((AND(OR((L219)>10,(L219)<-10),OR((K219)>750,(K219)<-750))),(AND(OR((P219)>10,(P219)<-10),OR((O219)>750,(O219)<-750))))),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(AND(OR((AND(OR((L219)>10,(L219)<-10),OR((K219)>750,(K219)<-750))),(AND(OR((P219)>10,(P219)<-10),OR((O219)>750,(O219)<-750))))),\"\"QUERY - \"\" & (D219) & \"\" 2002/03 2001/02 difference in Other Staff Costs / Other Op. Expenses / Int. Payable\"\",\"\"\"\")\"\n\"IF(OR(OR(AND(OR((T223)>10,(T223)<-10),OR((S223)>750,(S223)<-750)),(AND(OR((L223)>10,(L223)<-10),OR((K223)>750,(K223)<-750))),(AND(OR((P223)>10,(P223)<-10),OR((O223)>750,(O223)<-750))))),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(OR(OR(AND(OR((T223)>10,(T223)<-10),OR((S223)>750,(S223)<-750)),(AND(OR((L223)>10,(L223)<-10),OR((K223)>750,(K223)<-750))),(AND(OR((P223)>10,(P223)<-10),OR((O223)>750,(O223)<-750))))),\"\"QUERY - \"\" & (D223) & \"\" 2002/03 2001/02 difference in Other Staff Costs / Other Op. Expenses / Int. Payable\"\",\"\"\"\")\"\n\"SUM(I223,I219:I220)\"\n\"SUM(M223,M217:M221)\"\n\"SUM(Q223)\"\n\"IF(OR(OR(AND(OR((T225)>10,(T225)<-10),OR((S225)>750,(S225)<-750)),(AND(OR((L225)>10,(L225)<-10),OR((K225)>750,(K225)<-750))),(AND(OR((P225)>10,(P225)<-10),OR((O225)>750,(O225)<-750))))),\"\"QUERY - \"\" & (D225) & \"\"2002/03 2001/02 difference in Other Staff Costs / Other Op. Expenses / Int. Payabe\"\",\"\"\"\")\"\n\"SUM(E227:E234)\"\n\"IF(OR(OR(OR(AND(OR((H237)>10,(H237)<-10),OR((G237)>750,(G237)<-750)),(AND(OR((L237)>10,(L237)<-10),OR((K237)>750,(K237)<-750))),(AND(OR((P237)>10,(P237)<-10),OR((O237)>750,(O237)<-750)))),(AND(OR((T237)>10,(T237)<-10),OR((S237)>750,(S237)<-750))))),\"\"QUERY\"\",\"\"\"\")\"\n\"IF(OR(OR(OR(AND(OR((H237)>10,(H237)<-10),OR((G237)>750,(G237)<-750)),(AND(OR((L237)>10,(L237)<-10),OR((K237)>750,(K237)<-750))),(AND(OR((P237)>10,(P237)<-10),OR((O237)>750,(O237)<-750)))),(AND(OR((T237)>10,(T237)<-10),OR((S237)>750,(S237)<-750))))),\"\"QUERY - \"\" & (D237) & \"\" 2002/03 2001/02 difference in Acc. Staff Costs / Other Staff Costs / Other Op. Expenses / Int. Payable\"\",\"\"\"\")\"\n\"SUM(E237:E238)\"\n\"SUM(E205,E210,E215,E235,E239)\"\n\"SUM(F239,F235,F215,F210,F205)\"\n\"SUM(I205,I210,I215,I224,I225,I235,I239)\"\n\"SUM(Q224,Q225,Q239)\"\n\"IF(AND(OR(E9=0,E11>0),OR(E11=0,E9>0)),\"\"\"\",\"\"QUERY\"\")\"\n\"IF(OR(E11=0,E9>0),\"\"\"\",\"\"Table 6, but no Table 4 'Total Research Grants and Contracts Expenditure'\"\")\"\n\"IF(OR(E9=0,E11>0),\"\"\"\",\"\"Table 4, but no Table 6 'Total Research Grants and Contracts Expenditure'\"\")\"\n\"IF(AND(OR(E9=0,E11>0),OR(E11=0,E9>0)),\"\"\"\",\"\"Item 1 query - see 'Check_Document_2' sheet for details\"\")\"\n\"IF(AND(OR(E20=0,E22>0),OR(E22=0,E20>0)),\"\"\"\",\"\"QUERY\"\")\"\n\"IF(AND(OR(E20=0,E22>0),OR(E22=0,E20>0)),\"\"\"\",1)\"\n\"IF(SUM(E25:L25)>0,\"\"Item 2 query - see 'Check_Document_2' sheet for details\"\",\"\"\"\")\"\n\"SUM(E36:G36)\"\n\"(IF(OR(E36=0,SUM(E37:E41,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F36=0,SUM(E36:E41,F37:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G36=0,SUM(E36:E41,F36:F41,G37:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H36=0,SUM(H37:H41,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"(IF(OR(E37=0,SUM(E36,E38:E41,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F37=0,SUM(E36:E41,F36,F38:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G37=0,SUM(E36:E41,F36:F41,G36,G38:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H37=0,SUM(H36,H38:H41,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"(IF(OR(E38=0,SUM(E36:E37,E39:E41,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F38=0,SUM(E36:E41,F36:F37,F39:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G38=0,SUM(E36:E41,F36:F41,G36:G37,G39:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H38=0,SUM(H36:H37,H39:H41,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"(IF(OR(E39=0,SUM(E36:E38,E40:E41,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F39=0,SUM(E36:E41,F36:F38,F40:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G39=0,SUM(E36:E41,F36:F41,G36:G38,G40:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H39=0,SUM(H36:H38,H40:H41,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"(IF(OR(E40=0,SUM(E36:E39,E41,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F40=0,SUM(E36:E41,F36:F39,F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G40=0,SUM(E36:E41,F36:F41,G36:G39,G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H40=0,SUM(H36:H39,H41,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"(IF(OR(E41=0,SUM(E36:E40,F36:F41,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(F41=0,SUM(E36:E41,F36:F40,G36:G41)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(G41=0,SUM(E36:E41,F36:F41,G36:G40)>0),\"\"\"\",\"\"QUERY\"\"))\"\n\"(IF(OR(H41=0,SUM(H36:H40,I36:I41,J36:J41)>0),\"\"\"\",1))\"\n\"IF(SUM(M36:M41)>0,\"\"Item 3a query - see 'Check_Document_2' sheet for details\"\",\"\"\"\")\"\n\"SUM(E36:E41)\"\n\"IF(E42>0,\"\"\"\",\"\"      QUERY - Total 'SLC/LEAs/SAAS/DEL' is £0\"\")\"\n\"IF(E42>0,\"\"\"\",\"\"Item 3b query - see 'Check_Document_2' sheet for details\"\")\"\n\"IF(E49<>0,\"\"\"\",\"\"QUERY - 'Recurrent (R)' is £0\"\")\"\n\"IF(E49<>0,\"\"\"\",\"\"Item 4a query - see 'Check_Document_2' sheet for details\"\")\"\n\"IF(AND(E57>0,E56=0),\"\"QUERY - 'Other EU govt. bodies funding, but EC Grants' £0\"\",\"\"\"\")\"\n\"IF(AND(E57>0,E56=0),1,\"\"\"\")\"\n\"IF(AND(E57>500,E56=0),\"\"QUERY - More than £500,000 from 'EU govt. bodies' but 'EC grants' £0\"\",\"\"\"\")\"\n\"IF(AND(E57>500,E56=0),1,\"\"\"\")\"\n\"IF(SUM(M56:M57)>0,\"\"Item 4b query - see 'Check_Document_2' sheet for details\"\",\"\"\"\")\"\n\"SUM(E66:E68)\"\n\"IF(E69=0,\"\"\"\",\"\"QUERY - 'Residencies & Catering' 'FC Funding' is not £0. Genuine?\"\")\"\n\"IF(E69=0,\"\"\"\",\"\"Item 5 query - see 'Check_document_2' sheet for details\"\")\"\n\"SUM(C8:D8)\"\n\"IF(AND(OR(SUM(E8,J8,H8)=0,M8<>0),OR(SUM(E8,J8,H8)<>0,M8=0)),\"\"\"\",\"\" cc\"\"&(A8)& \"\" Student/Staff v Expenditure Query\"\")\"\n\"SUM(C8:C57)\"\n\"SUM(B16:C16)\"\n\"SUM(B16:B20)\"\n\"SUM(F24:I24)\"\n\"SUM(J24:M24)\"\n\"B24-B35\"\n\"SUM(G17:G51)\"\n\"'B-equip'!D11\"\n\"'C-equip'!D12\"\n\"'B-pers'!D9\"\n\"'C-pers'!D9\"\n\"'B-recur'!D9\"\n\"'C-recur'!D9\"\n\"'B-busns'!D9\"\n\"SUM(B4:B7)\"\n\"(B8-C8)/C8\"\n\"SUM(D6:D8)\"\n\"SUM(D6:D8)\"\n\"SUM(D6:D8)\"\n\"SUM(D6:D8)\"\n\"SUM(D6:D8)\"\n\"SUM(E13:E16)\"\n\"SUM(E19:E21)\"\n\"SUM(F19,F21)\"\n\"SUM(F18:F26)\"\n\"SUM(F29:F31)\"\n\"D9-D10\"\n\"F8+F10+SUM(F11:F13)\"\n\"F18+F21+F24+F27+F29\"\n\"SUM(F33)\"\n\"H14+H30+H34\"\n\"SUM(F42:F48)\"\n\"SUM(F52:F53)\"\n\"H49+H54\"\n\"SUM(F61:F63)\"\n\"H56+H64\"\n\"H66-H36\"\n\"D9-D10\"\n\"F8+F10+SUM(F11:F13)\"\n\"F18+F21+F24+F27+F29\"\n\"SUM(F33)\"\n\"H14+H30+H34\"\n\"SUM(F42:F48)\"\n\"SUM(F52:F53)\"\n\"H49+H54\"\n\"+F61+F62-F63\"\n\"H56+H64\"\n\"H66-H36\"\n\"E6-E7\"\n\"152*20\"\n\"121*20\"\n\"137*20\"\n\"143*20\"\n\"161*20\"\n\"SUM(E10:E14)\"\n\"E8-E17\"\n\"SUM(E20:E49)\"\n\"E18-E50\"\n\"SUM(E53:E54)\"\n\"E51+E55\"\n\"SUM(E56)\"\n\"SUM($F$56:G56)\"\n\"A2+1\"\n\"SUM(B16:C16)\"\n\"SUM(B16:B20)\"\n\"SUM(F24:I24)\"\n\"SUM(J24:M24)\"\n\"B24-B35\"\n\"SUM(B5-C5)/C5*100\"\n\"SUM(B5*J5)\"\n\"SUM(H5)+(B5-C5)/C5*100\"\n\"SUM(100/B5)\"\n\"SUM(B5-C5)/C5*100\"\n\"SUM(B5*J5)\"\n\"SUM(H5)+(B5-C5)/C5*100\"\n\"SUM(100/B22)\"\n\"SUM(B10:B13)\"\n\"SUM(B14:B16)\"\n\"SUM(B8+B17)\"\n\"SUM(B25*20)\"\n\"SUM(B5-C5)/C5*100\"\n\"SUM(B5*J5)\"\n\"SUM(H5)+(B5-C5)/C5*100\"\n\"SUM(100/B5)\"\n\"$J$5\"\n\"$K$5\"\n\"SUM('12.2a'!B11)\"\n\"SUM(D4/D5)\"\n\"SUM('12.2a'!C11)\"\n\"SUM('12.2b'!B28-'12.2b'!B19)\"\n\"SUM(D4/D5)\"\n\"SUM('12.2b'!C28-'12.2b'!C19)\"\n\"SUM('12.2a'!B7)\"\n\"SUM('12.2a'!C7)\"\n\"SUM('12.2a'!B5)\"\n\"SUM('12.2a'!C5)\"\n\"$D$8\"\n\"$H$8\"\n\"SUM(0-'12.2a'!B6)\"\n\"SUM(0-'12.2a'!C6)\"\n\"$D$4\"\n\"$H$4\"\n\"$D$9\"\n\"$H$9\"\n\"SUM('12.2b'!B8)\"\n\"SUM('12.2b'!C8)\"\n\"SUM('12.2b'!B10)*365\"\n\"SUM('12.2b'!C10)*365\"\n\"SUM(D12)\"\n\"SUM('12.2b'!B32)*365\"\n\"SUM('12.2b'!C32)*365\"\n\"SUM(D9)\"\n\"SUM('12.2b'!B33)*365\"\n\"SUM('12.2b'!C33)*365\"\n\"SUM(0-'12.2a'!B6)\"\n\"SUM(0-'12.2a'!C6)\"\n\"SUM('12.2b'!B14)\"\n\"SUM('12.2b'!C14)\"\n\"SUM(0-'12.2b'!B16)\"\n\"SUM(0-'12.2b'!C16)\"\n\"SUM('12.2b'!B14-'12.2b'!B10)\"\n\"SUM('12.2b'!C14-'12.2b'!C10)\"\n\"$D$34\"\n\"$H$34\"\n\"SUM(0-'12.2b'!B19)-'12.2b'!B13\"\n\"SUM(0-'12.2b'!C19)-'12.2b'!C13\"\n\"SUM('12.2b'!B28+(0-'12.2b'!B19)-'12.2b'!B13)\"\n\"SUM('12.2b'!C28+(0-'12.2b'!C19)-'12.2b'!C13)\"\n\"D40\"\n\"SUM('12.2b'!B28)\"\n\"SUM('12.2b'!C28)\"\n\"SUM('12.2b'!B34)\"\n\"SUM('12.2b'!C34)\"\n\"$D$46\"\n\"$H$46\"\n\"$D$14\"\n\"$H$14\"\n\"SUM(0-'12.2a'!B13)\"\n\"SUM(0-'12.2a'!C13)\"\n\"SUM('12.2a'!B16)\"\n\"SUM(D59/D60)*100\"\n\"SUM('12.2a'!C16)\"\n\"SUM('12.2b'!B35)\"\n\"SUM(D59/D60)*100\"\n\"SUM('12.2b'!C35)\"\n\"SUM('12.2b'!B36)\"\n\"SUM('12.2b'!C36)\"\n\"SUM(F59)\"\n\"SUM(D59)\"\n\"SUM(0-'12.2a'!B17)\"\n\"SUM(0-'12.2a'!C17)\"\n\"SUM('12.2a'!B21)\"\n\"SUM('12.2a'!C21)\"\n\"SUM('12.2b'!B36)\"\n\"SUM('12.2b'!C36)\"\n\"SUM('12.2a'!B11)\"\n\"SUM(C4/C5)\"\n\"SUM('12.2a'!C11)\"\n\"SUM('12.2b'!B28-'12.2b'!B19)\"\n\"SUM(C4/C5)\"\n\"SUM('12.2b'!C28-'12.2b'!C19)\"\n\"SUM('12.2a'!B7)\"\n\"SUM('12.2a'!C7)\"\n\"SUM('12.2a'!B5)\"\n\"SUM('12.2a'!C5)\"\n\"$C$8\"\n\"$G$8\"\n\"SUM(0-'12.2a'!B6)\"\n\"SUM(0-'12.2a'!C6)\"\n\"$C$4\"\n\"$G$4\"\n\"$C$9\"\n\"$G$9\"\n\"SUM('12.2b'!B8)\"\n\"SUM('12.2b'!C8)\"\n\"SUM('12.2b'!B10)*365\"\n\"SUM('12.2b'!C10)*365\"\n\"SUM(C12)\"\n\"SUM('12.2b'!B32)*365\"\n\"SUM('12.2b'!C32)*365\"\n\"SUM(C9)\"\n\"SUM('12.2b'!B33)*365\"\n\"SUM('12.2b'!C33)*365\"\n\"SUM(0-'12.2a'!B6)\"\n\"SUM(0-'12.2a'!C6)\"\n\"SUM('12.2b'!B14)\"\n\"SUM('12.2b'!C14)\"\n\"SUM(0-'12.2b'!B16)\"\n\"SUM(0-'12.2b'!C16)\"\n\"SUM('12.2b'!B14-'12.2b'!B10)\"\n\"SUM('12.2b'!C14-'12.2b'!C10)\"\n\"$C$34\"\n\"$G$34\"\n\"SUM(0-'12.2b'!B19)-'12.2b'!B13\"\n\"SUM(0-'12.2b'!C19)-'12.2b'!C13\"\n\"SUM('12.2b'!B28+(0-'12.2b'!B19)-'12.2b'!B13)\"\n\"SUM('12.2b'!C28+(0-'12.2b'!C19)-'12.2b'!C13)\"\n\"C40\"\n\"SUM('12.2b'!B28)\"\n\"SUM('12.2b'!C28)\"\n\"I40\"\n\"SUM('12.2b'!B34)\"\n\"SUM('12.2b'!C34)\"\n\"$C$46\"\n\"$G$46\"\n\"$C$14\"\n\"$G$14\"\n\"SUM(0-'12.2a'!B13)\"\n\"SUM(0-'12.2a'!C13)\"\n\"SUM('12.2a'!B16)\"\n\"SUM(C59/C60)*100\"\n\"SUM('12.2a'!C16)\"\n\"SUM('12.2b'!B35)\"\n\"SUM(C59/C60)*100\"\n\"SUM('12.2b'!C35)\"\n\"SUM('12.2b'!B36)\"\n\"SUM('12.2b'!C36)\"\n\"SUM(E59)\"\n\"SUM(C59)\"\n\"SUM(0-'12.2a'!B17)\"\n\"SUM(0-'12.2a'!C17)\"\n\"SUM('12.2a'!B21)\"\n\"SUM('12.2a'!C21)\"\n\"SUM('12.2b'!B36)\"\n\"SUM('12.2b'!C36)\"\n\"CELL(\"\"filename\"\")\"\n\"CELL(\"\"filename\"\")\"\n\"B30+B24+B18+B12+B7\"\n\"G36+G30+G24+G18+G12+G7\"\n\"H42+H36+H30+H24+H18+H12+H7\"\n\"B57+B74+B79+B85\"\n\"C79+C74+C57\"\n\"E79+E57\"\n\"G57+G63+G68+G79\"\n\"B117+B112+B106+B100\"\n\"C112+C106+C100\"\n\"E126\"\n\"B130+B121+B89+B46\"\n\"SUM(G9*H9)\"\n\"SUM(J9:J22)\"\n\"SUM(J26:J48)\"\n\"SUM(J23-J49)\"\n\"IF(ISERROR(MATCH(E21,Changes!$E:$E,0)),\"\"\"\",\"\"Yes\"\")\"\n\"SUM(B2:B13)\"\n\"SUM(B22:D22)\"\n\"SUM(E4:AB4)\"\n\"SUM(D5:D42)/2\"\n\"'Welcome!'!B19\"\n\"SUM(B8:B23)\"\n\"'Required Funds'!A1\"\n\"'Required Funds'!B24-'Required Funds'!B9-'Required Funds'!B16\"\n\"'Required Funds'!B9+'Required Funds'!B16\"\n\"SUM(B6:B7)\"\n\"B8*0.2\"\n\"IF(B12=0,0,B12/B8)\"\n\"B8-B12\"\n\"B6-(B12-(B7-B26))\"\n\"ABS(PMT(B22/12,B23,B21))\"\n\"B7*0.8\"\n\"D24+D29\"\n\"B17-B21-B26\"\n\"'Required Funds'!A1\"\n\"D8*12\"\n\"($D$8+$D$9)*C10\"\n\"C5*G12*C12/12\"\n\"C5*C13*G13/12\"\n\"SUM(D8:D15)\"\n\"SUM(D19:D33)\"\n\"D16+D34\"\n\"'Required Funds'!A1\"\n\"B11+B12\"\n\"IF(C13=0,0,C13/C9)\"\n\"C9-C13\"\n\"IF(C15=0,0,C15/C9)\"\n\"'Required Funds'!A1\"\n\"'Gross Margins'!A7\"\n\"'Gross Margins'!A19\"\n\"'Gross Margins'!A31\"\n\"'Gross Margins'!B8\"\n\"'Gross Margins'!B20\"\n\"'Gross Margins'!B32\"\n\"SUM(B10:B21)\"\n\"'Required Funds'!A1\"\n\"SUM(B7:B9)\"\n\"'Sales Forecast'!A10\"\n\"SUM(B19:B30)\"\n\"'Required Funds'!A1\"\n\"SUM(B9:B19)-B20\"\n\"SUM(B27:B30)\"\n\"SUM(B37:B38)\"\n\"B31+B39\"\n\"B21-B41\"\n\"'Required Funds'!A1\"\n\"'Sales Forecast'!A10\"\n\"'Sales Forecast'!A11\"\n\"'Sales Forecast'!A12\"\n\"'Sales Forecast'!A13\"\n\"'Sales Forecast'!A14\"\n\"'Sales Forecast'!A15\"\n\"'Sales Forecast'!A16\"\n\"'Sales Forecast'!A17\"\n\"'Sales Forecast'!A18\"\n\"'Sales Forecast'!A19\"\n\"'Sales Forecast'!A20\"\n\"'Sales Forecast'!A21\"\n\"'Gross Margins'!A7\"\n\"'Sales Forecast'!B10*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B11*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B12*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B13*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B14*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B15*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B16*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B17*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B18*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B19*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B20*'Gross Margins'!$C$9\"\n\"'Sales Forecast'!B21*'Gross Margins'!$C$9\"\n\"SUM(C8:N8)\"\n\"'Gross Margins'!A19\"\n\"'Sales Forecast'!C10*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C11*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C12*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C13*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C14*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C15*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C16*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C17*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C18*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C19*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C20*'Gross Margins'!$C$21\"\n\"'Sales Forecast'!C21*'Gross Margins'!$C$21\"\n\"'Gross Margins'!A31\"\n\"'Sales Forecast'!D10*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D11*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D12*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D13*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D14*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D15*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D16*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D17*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D18*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D19*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D20*'Gross Margins'!$C$33\"\n\"'Sales Forecast'!D21*'Gross Margins'!$C$33\"\n\"SUM(C8:C10)\"\n\"B8\"\n\"C8*'Gross Margins'!$D$13\"\n\"C9*'Gross Margins'!$D$25\"\n\"C10*'Gross Margins'!$D$37\"\n\"IF(O17=0,0,O17/O11)\"\n\"C11-C17\"\n\"IF(O19=0,0,O19/O11)\"\n\"'Monthly Budget'!B8\"\n\"'Monthly Budget'!D8\"\n\"C22\"\n\"'Monthly Budget'!D10+'Monthly Budget'!D11+'Monthly Budget'!D12+'Monthly Budget'!D13\"\n\"'Monthly Budget'!B14\"\n\"'Monthly Budget'!D14\"\n\"SUM(C22:C26)\"\n\"IF(O27=0,0,O27/O11)\"\n\"('Required Funds'!B9/'Required Funds'!C9/12)+('Required Funds'!B10/'Required Funds'!C10/12)+('Required Funds'!B11/'Required Funds'!C11/12)+('Required Funds'!B12/'Required Funds'!C12/12)+('Required Funds'!B22/'Required Funds'!C22/12)\"\n\"SUM(C30:C45)\"\n\"IF(O46=0,0,O46/O11)\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,1,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,2,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,3,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,4,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,5,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,6,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,7,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,8,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,9,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,10,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,11,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$22/12,12,'Sources of Capital'!$B$23,'Sources of Capital'!$B$21))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,1,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,2,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,3,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,4,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,5,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,6,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,7,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,8,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,9,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,10,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,11,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"ABS(IPMT('Sources of Capital'!$B$27/12,12,'Sources of Capital'!$B$28,'Sources of Capital'!$B$26))\"\n\"'Cash Flow Statement'!C21\"\n\"IF(O52=0,0,O52/O11)\"\n\"C19-C27-C46-C52\"\n\"IF(O54=0,0,O54/O11)\"\n\"'Required Funds'!A1\"\n\"'Income Statement'!C4\"\n\"'Required Funds'!B23+'Current Balance Sheet'!B9\"\n\"C32\"\n\"'Income Statement'!C11*'Cash Receipts and Disbursements'!$B$7\"\n\"SUM(C11:N11)\"\n\"'Income Statement'!C11*'Cash Receipts and Disbursements'!B8\"\n\"('Income Statement'!D11*'Cash Receipts and Disbursements'!$B$8)+('Income Statement'!C11*'Cash Receipts and Disbursements'!$B$9)\"\n\"SUM(C11:C12)\"\n\"'Income Statement'!C27\"\n\"'Income Statement'!C46-'Income Statement'!C45\"\n\"'Sources of Capital'!D31\"\n\"C20\"\n\"('Cash Receipts and Disbursements'!$B$15/12)*C40\"\n\"'Cash Receipts and Disbursements'!B19\"\n\"'Cash Receipts and Disbursements'!B20\"\n\"'Cash Receipts and Disbursements'!B21\"\n\"'Cash Receipts and Disbursements'!B22\"\n\"'Cash Receipts and Disbursements'!B23\"\n\"'Cash Receipts and Disbursements'!B24\"\n\"'Cash Receipts and Disbursements'!B25\"\n\"'Cash Receipts and Disbursements'!B26\"\n\"'Cash Receipts and Disbursements'!B27\"\n\"'Cash Receipts and Disbursements'!B28\"\n\"'Cash Receipts and Disbursements'!B29\"\n\"'Cash Receipts and Disbursements'!B30\"\n\"SUM(C17:C22)\"\n\"C7+C13-C23\"\n\"IF(('Cash Flow Statement'!C26-'Cash Receipts and Disbursements'!$B$14)<0,'Cash Receipts and Disbursements'!$B$14-'Cash Flow Statement'!C26,0)\"\n\"C26+C29\"\n\"C29\"\n\"C40+D29-D22\"\n\"'Required Funds'!A1\"\n\"'Current Balance Sheet'!B9\"\n\"'Cash Flow Statement'!N32\"\n\"D9+'Income Statement'!O11-'Cash Flow Statement'!O13\"\n\"D10+'Required Funds'!B19\"\n\"D11+'Required Funds'!B8+'Required Funds'!B13+'Required Funds'!B14+'Required Funds'!B15+'Required Funds'!B17+'Required Funds'!B20+'Required Funds'!B21+'Required Funds'!B18\"\n\"D12\"\n\"SUM(D8:D12)\"\n\"'Current Balance Sheet'!B14\"\n\"D16+'Required Funds'!B10\"\n\"D17+'Required Funds'!B12\"\n\"D18+'Required Funds'!B11+'Required Funds'!B22\"\n\"D19+'Required Funds'!B16\"\n\"D20+'Required Funds'!B9\"\n\"SUM(D16:D21)\"\n\"'Current Balance Sheet'!B20\"\n\"D24+'Income Statement'!O45\"\n\"D13+D22-D24\"\n\"'Current Balance Sheet'!B27\"\n\"'Sources of Capital'!B21-(('Sources of Capital'!D24*12)-'Income Statement'!O49)+D33\"\n\"D34+'Sources of Capital'!B26-(('Sources of Capital'!D29*12)-'Income Statement'!O50)\"\n\"D35+'Cash Flow Statement'!N40\"\n\"SUM(D32:D35)\"\n\"D39+'Sources of Capital'!B12\"\n\"D40+'Income Statement'!O54\"\n\"SUM(D39:D40)\"\n\"+D36+D41\"\n\"F36+F41\"\n\"IF((G46)<>0,\"\"Statement Does Not Balance\"\",\"\"Statement Balances\"\")\"\n\"F26-F43\"\n\"'Required Funds'!A1\"\n\"'Income Statement'!O46+'Income Statement'!O52+'Income Statement'!O27\"\n\"'Income Statement'!P17\"\n\"'Income Statement'!P19\"\n\"B7+B8\"\n\"B5\"\n\"B8\"\n\"IF(B5=0,0,B5/B8)\"\n\"'Sources of Capital'!B12\"\n\"IF('Sources of Capital'!B14>0.2,\"\"Owner's Injection is adequate\"\",\"\"Owner's injection might be too low for amount of funds requested\"\")\"\n\"IF('Required Funds'!B23=0,0,'Required Funds'!B23/'Required Funds'!B24)\"\n\"IF(C12<0.2,\"\"Cash request seems reasonable with total request\"\",\"\"Cash request exceeds 20% of total request.  This may be not in line.\"\")\"\n\"'Sources of Capital'!B22\"\n\"IF(C16<0.09,\"\"Interest rate may be too low for type of loan requested\"\",\"\"Interest rate seems reasonable\"\")\"\n\"IF(C17>120,\"\"Loan term may be too high for this type of loan\"\",\"\"Loan term seems within range for this type of loan\"\")\"\n\"'Sources of Capital'!B27\"\n\"IF(C19<0.07,\"\"Interest rate may be too low for type of loan requested\"\",\"\"Interest rate seems reasonable\"\")\"\n\"IF(C20>240,\"\"Loan term may be too high for this type of loan\"\",\"\"Loan term seems within range for this type of loan\"\")\"\n\"IF('Sources of Capital'!D31=0,0,('Sources of Capital'!D31*12)/'Income Statement'!O11)\"\n\"IF(C22>0.1,\"\"Calculated loan payments as a percent of sales may be too high\"\",\"\"Calculated loan payments as a percent of sales seem resonable\"\")\"\n\"'Income Statement'!P19\"\n\"IF(C26<0.2,\"\"Gross margin percentage seems very low\"\",\"\"Gross margin percentage seems reasonable\"\")\"\n\"'Income Statement'!O22\"\n\"IF(C27>0,\"\"An owner's compensation amount has been established\"\",\"\"An owner's compensation amount has not been established\"\")\"\n\"C27/'Income Statement'!O54\"\n\"IF(C28>1,\"\"Owner's compensation may be too high relative to profitability of business\"\",\"\"Owner's compensation seems reasonable\"\")\"\n\"IF('Income Statement'!O30=0,0,'Income Statement'!O30/'Income Statement'!O11)\"\n\"IF(C29<0.02,\"\"Advertising as a percent of sales may be too low\"\",\"\"Advertising as a percent of sales seems reasonable\"\")\"\n\"'Income Statement'!O54\"\n\"IF(C30<0,\"\"The business is not showing a profit\"\",\"\"The business is showing a profit\"\")\"\n\"'Income Statement'!P54\"\n\"IF(C31>0.2,\"\"The projection may be too aggressive in stating profitability\"\",\"\"The projection does not seem highly unreasonable\"\")\"\n\"'Cash Flow Statement'!O29\"\n\"IF(C35>0,\"\"The financial projection does not provide the desired level of cash flow\"\",\"\"The financial projection provides the desired level of cash flow\"\")\"\n\"C35\"\n\"IF(C36>0,\"\"The business will need at least this level of a line of credit\"\",\"\"The business doesn't seem to require a line of credit\"\")\"\n\"IF('Income Statement'!O11-'Cash Flow Statement'!O13=0,0,('Income Statement'!O11-'Cash Flow Statement'!O13)/'Income Statement'!O11)\"\n\"IF(C37>0.3,\"\"Accounts receivable amounts seem high\"\",\"\"Accounts receivable amount as a percent of sales seems reasonable\"\")\"\n\"'Balance Sheet'!D26-'Balance Sheet'!D43\"\n\"IF(C41<>0,\"\"The balance sheet is not in balance\"\",\"\"The balance sheet does balance\"\")\"\n\"'Balance Sheet'!G46\"\n\"'Balance Sheet'!F36/'Balance Sheet'!F41\"\n\"IF(C43>5,\"\"Most banks would consider there to be too much debt for the overall amount of equity or ownership\"\",\"\"The debt to equity ratio seems reasonable\"\")\"\n\"'Income Statement'!O11-'Break-Even'!B15\"\n\"IF(C47>0,\"\"The sales projection exceeds the projected break-even sales level\"\",\"\"The sales projection is less than the break-even amount\"\")\"\n\"SUM(C6:C17)\"\n\"SUM(H6:H19)\"\n\"C21-H21\"\n\"C28-C27\"\n\"C29-C28\"\n\"C30+C34+C38-H28+H32\"\n\"SUM(C6,C8)\"\n\"SUM(G6:G8)\"\n\"-(C5-C9)\"\n\"SUM(D8:D12)\"\n\"SUM(E7:E12)\"\n\"SUM(D16:D24)\"\n\"D13-D25\"\n\"D32+D33+D34+D35\"\n\"D40+D41\"\n\"D37-D45\"\n\"D28+D47\"\n\"D50\"\n\"31628.76\"\n\"24482.74\"\n\"D56+D59\"\n\"D81\"\n\"SUM(D8:D12)\"\n\"SUM(D16:D24)\"\n\"D13-D25\"\n\"E32+E33+E34+E35\"\n\"E40+E41\"\n\"D37-D45\"\n\"D28+D47\"\n\"D50\"\n\"E63\"\n\"31628.76\"\n\"D56+D59\"\n\"SUM(D76:D81)\"\n\"D82\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R41:U53)\"\n\"SUM(R41:U53)\"\n\"SUM(R41:U53)\"\n\"SUM(R41:U53)\"\n\"R16+R35-R54\"\n\"R16+R35-R54\"\n\"R16+R35-R54\"\n\"R16+R35-R54\"\n\"Front!R56\"\n\"Front!R56\"\n\"Front!R56\"\n\"Front!R56\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"2865-219992-274789-137722-9239-394000\"\n\"SUM(C18:F18)\"\n\"SUM(C23:C35)\"\n\"C18+C36\"\n\"+C45\"\n\"+B18+B14\"\n\"+D24+D23\"\n\"SUM(C32:C33)\"\n\"C38+C34\"\n\"SUM(C54:F54)\"\n\"SUM(B54:B57)\"\n\"B88\"\n\"B88\"\n\"B88\"\n\"B88\"\n\"+B148-B146-B145-B144\"\n\"+B155-B153\"\n\"SUM(D9:J9)\"\n\"B9-B10\"\n\"SUM(D14:D18)\"\n\"B11-B19\"\n\"B21-B23-B25\"\n\"B26-B28\"\n\"D26+D23\"\n\"+F40-F38\"\n\"B101\"\n\"B101\"\n\"B101\"\n\"B101\"\n\"+K117-K119-K121\"\n\"SUM(D14:J14)\"\n\"SUM(C25:J25)\"\n\"B42\"\n\"B42\"\n\"B42\"\n\"B42\"\n\"G4\"\n\"58+430+437\"\n\"64+354+299\"\n\"75+400+294\"\n\"44+369+223\"\n\"47+402+234\"\n\"91+474+221\"\n\"SUM(C8:C12)\"\n\"SUM(C13:C19)\"\n\"SUM(C24:C27)\"\n\"822+269\"\n\"818+257\"\n\"754+246\"\n\"759+276\"\n\"388+333\"\n\"SUM(C28:C32)\"\n\"SUM(D6:D28)\"\n\"SUM(D32:D37)\"\n\"SUM(E34:E37)\"\n\"SUM(D41:D50)\"\n\"SUM(D52:D53)\"\n\"D29\"\n\"D38\"\n\"+E58+E57\"\n\"SUM(C5:C7)\"\n\"SUM(C10:C16)\"\n\"SUM(C28:C29)\"\n\"C30+C26+C17+C8\"\n\"SUM(B9:B25)\"\n\"SUM(B26:B28)\"\n\"SUM(B30:B38)\"\n\"SUM(B40:B45)\"\n\"SUM(E2:E13)\"\n\"SUM(B2:B15)\"\n\"SUM(E21:E33)\"\n\"SUM(H45:H52)\"\n\"SUM(E45:E55)\"\n\"SUM(B65:B79)\"\n\"SUM(E65:E80)\"\n\"SUM(E103)/COUNTIF(E90:E101,\"\">0\"\")\"\n\"SUM(B2:B9)\"\n\"SUM(H2:H10)\"\n\"SUM(E2:E11)\"\n\"SUM(B46:B60)\"\n\"SUM(E47:E62)\"\n\"SUM(E72:E83)\"\n\"SUM(E85)/COUNTIF(E72:E83,\"\">0\"\")\"\n\"C15-C17\"\n\"C9/C13\"\n\"IF(C34<1.5,F$23,F$25)\"\n\"(C22+C24-10000)/C9\"\n\"IF(C35>0.1,F$23,F$25)\"\n\"C15/C17\"\n\"IF(C36>1.5,F$23,F$25)\"\n\"C19/C7\"\n\"IF(C37>=4,F$23,F$25)\"\n\"C13/C7\"\n\"IF(C38>=6,F$23,F$25)\"\n\"(C13-C7)/1000\"\n\"IF(C39>=10,F$23,F$25)\"\n\"C28/C7\"\n\"C24+C47+C53+C57-C49-C55\"\n\"C19/C26\"\n\"C45/C26\"\n\"C47/C26\"\n\"C13/C9\"\n\"C51/C26\"\n\"(1.2*C61)+(1.4*C63)+(3.3*C65)+(0.6*C67)+C69\"\n\"(0.717*C61)+(0.847*C63)+(3.107*C65)+(0.42*C67)+C69\"\n\"C13-C7\"\n\"IF(C82>=10000,F$23,F$25)\"\n\"C47/C49\"\n\"IF(C83>=2,F$23,F$25)\"\n\"C59/C9\"\n\"IF(C84>=0.2,F$23,F$25)\"\n\"C73\"\n\"IF(C85>=2.9,F$23,F$25)\"\n\"C76\"\n\"NOW()\"\n\"(J18/J8)\"\n\"(J19/J8)\"\n\"(J20/J8)\"\n\"(J21/J8)\"\n\"(J22/J8)\"\n\"(J23/J8)\"\n\"(J24/J8)\"\n\"(J25/J8)\"\n\"SUM(I18:I25)\"\n\"(J29/J8)\"\n\"0.2*J26\"\n\"(J32/J8)\"\n\"SUM(I26,I29,I32)\"\n\"(I34*G35)*0.01\"\n\"(J34*G35)*0.01\"\n\"SUM(I15*K15)\"\n\"SUM(I15*L15)\"\n\"SUM(I18:K18)\"\n\"SUM(I18:L18)\"\n\"SUM(M15:M21)\"\n\"SUM(N26:N29)\"\n\"(I35*M35)*0.01\"\n\"SUM(N43:N47)\"\n\"SUM(N53:N55)\"\n\"6000\"\n\"SUM(B5:E5)\"\n\"B7-B6\"\n\"B5-B6+B8\"\n\"C5-C6+C8+B9\"\n\"E9-B15+B14+B17-B19\"\n\"B18-C15+C14+C17-C19\"\n\"C18-D15+D17+D14\"\n\"D18-E15+E17\"\n\"E18-B24+B26-B28\"\n\"B27-C24+C26-C28\"\n\"B26*0.32\"\n\"SUM(B4:E4)\"\n\"SUM(B8:B9)\"\n\"B4/2*1\"\n\"(B4*3)\"\n\"50000/4\"\n\"(56.25/2)*6*8\"\n\"SUM(B19:B22)\"\n\"35\"\n\"300\"\n\"339\"\n\"5000/4\"\n\"5000\"\n\"B17+B13+B11+B7+B25+B27\"\n\"-SUM(F7:F28)\"\n\"B4*60\"\n\"B31\"\n\"B33-B29\"\n\"SUM(F29,F33)\"\n\"SUM(B4:E4)\"\n\"SUM(B8:B8)\"\n\"7*B4\"\n\"B4*3\"\n\"SUM(B13:B17)\"\n\"70000/4\"\n\"(56.25/2)*6*8\"\n\"(56.25)*9*8\"\n\"15*120\"\n\"SUM(B23:B23)\"\n\"10000/4\"\n\"B26+B19+B12+B10+B7+B28\"\n\"-SUM(F7:F29)\"\n\"B4*70\"\n\"B32\"\n\"B34-B30\"\n\"F34+F30\"\n\"SUM(B4:E4)\"\n\"SUM(B8:B8)\"\n\"7*B4\"\n\"B4*3\"\n\"SUM(B13:B17)\"\n\"130000/4\"\n\"(56.25/2)*7*8\"\n\"(56.25)*10*8\"\n\"SUM(B20:B22)\"\n\"20000/4\"\n\"B24+B19+B12+B10+B7+B28\"\n\"-SUM(F7:F29)\"\n\"B4*70\"\n\"B32\"\n\"B34-B30\"\n\"F34+F30\"\n\"Demographics!B8\"\n\"Demographics!B10\"\n\"Demographics!F12\"\n\"Demographics!B23\"\n\"Demographics!F21\"\n\"Demographics!B21\"\n\"Demographics!B21\"\n\"Demographics!B21\"\n\"Demographics!F25\"\n\"Demographics!B25\"\n\"Demographics!B25\"\n\"Demographics!B8\"\n\"Demographics!B27\"\n\"Demographics!B12\"\n\"Demographics!F12\"\n\"Demographics!B10\"\n\"Demographics!F21\"\n\"Demographics!F21\"\n\"Demographics!B23\"\n\"Demographics!F25\"\n\"Demographics!F8\"\n\"Demographics!F8\"\n\"SUM(C20+D20+E20)\"\n\"SUM(G20+H20+I20)\"\n\"SUM(K20+L20+M20)\"\n\"SUM(B21:B40)\"\n\"Demographics!B8\"\n\"Demographics!B12\"\n\"Demographics!F12\"\n\"Demographics!B23\"\n\"Demographics!F21\"\n\"Demographics!B25\"\n\"Demographics!B25\"\n\"SUM(C15:C34)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B27\"\n\"SUM(C15:C33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B27\"\n\"SUM(C15:C33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B27\"\n\"SUM(C15:C33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C33:D33)\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"Demographics!B8\"\n\"Demographics!F21\"\n\"SUM(C10:C12)\"\n\"SUM(C15:C20)\"\n\"C13-C21\"\n\"C22/C13\"\n\"C22+C25+C26+C27\"\n\"C28-C29\"\n\"C30/C32\"\n\"SUM(C35:C38)\"\n\"SUM(C56:C57)\"\n\"C67/C56\"\n\"A88+1\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+$E25*E12\"\n\"SUM(E25:E28)\"\n\"+F29*12\"\n\"+F30\"\n\"+G30+F31\"\n\"+F29/$E$29\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+$E25*E12\"\n\"SUM(E25:E28)\"\n\"+F29*12\"\n\"+F30\"\n\"+G30+F31\"\n\"+F29/$E$29\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+E14+E13\"\n\"+E17-E18\"\n\"+E19+E15\"\n\"SUM(E24:E37)\"\n\"E38\"\n\"+'Att M4a-Fully Insured Prem_DPPO'!E25\"\n\"+'Att M1-Finan Proposal'!A2\"\n\"+E14-E15\"\n\"+E16+E12\"\n\"+E18+E17\"\n\"SUM(E21:E34)\"\n\"E35\"\n\"'Att M4b-Fully Insured Prem_DHMO'!E25\"\n\"+X11-T11\"\n\"SUM(T11:T13)\"\n\"+'Back Page'!J36\"\n\"+'Back Page'!N36\"\n\"+'Back Page'!N42\"\n\"+'Back Page'!N54\"\n\"SUM(T19:T33)\"\n\"+T15-T35\"\n\"+T35+T37\"\n\"+'Front Page'!X46\"\n\"SUM(H7:H10)\"\n\"SUM(H17:H34)\"\n\"SUM(H6:H34)\"\n\"SUM(L39:L41)\"\n\"SUM(L45:L53)\"\n\"B7-B9\"\n\"B11\"\n\"B11\"\n\"B15\"\n\"E11+E17+E19+E25\"\n\"G15+G17+G19+G25-G27\"\n\"I11+I17+I19+I25-I27-I29+I31-I33\"\n\"(B39+B41+B43+B45)/2\"\n\"(B50+B52)/2\"\n\"B31\"\n\"B64/2\"\n\"(B75+B77-B79-B81)/2\"\n\"E47-E61-E89+E96\"\n\"G54-G61-G72+G83-G89+G96\"\n\"I47-I61-I66-I89+I96\"\n\"E35/E99*100\"\n\"SUM(C10:C15)\"\n\"F68\"\n\"F68\"\n\"SUM(F10:G22)\"\n\"SUM(F10:G22)\"\n\"SUM(F23:K23)\"\n\"SUM(F23:K23)\"\n\"SUM(C16+C28+J24)\"\n\"SUM(C16+C28+J24)\"\n\"C77\"\n\"SUM(C19:C27)\"\n\"SUM(H5+J25+J28-C41)\"\n\"SUM(H5+J25+J28-C41)\"\n\"SUM(H5+J25+J28-C41)\"\n\"SUM(H5+J25+J28-C41)\"\n\"SUM(C41)\"\n\"SUM(C41)\"\n\"SUM(J24)\"\n\"SUM(J24)\"\n\"SUM(C28)\"\n\"SUM(C28)\"\n\"SUM(C39)\"\n\"SUM(C39)\"\n\"C95\"\n\"SUM(J32)-SUM(J33:J35)\"\n\"SUM(J32)-SUM(J33:J35)\"\n\"SUM(C46:C59)\"\n\"SUM(F46:G67)\"\n\"SUM(F46:G67)\"\n\"SUM(C79:C94)\"\n\"B3/C3\"\n\"IF(B3>0,LN(D3),)\"\n\"AVERAGE(C3:C12)\"\n\"AVERAGE(D3:D12)\"\n\"STDEV(E3:E12)\"\n\"G13/C13\"\n\"H13/C13\"\n\"I13/C13\"\n\"J13/C13\"\n\"MAX(G3:G12)/$C$13\"\n\"0.375^(0.5)\"\n\"F19\"\n\"F27\"\n\"F24\"\n\"F21^2\"\n\"F31-F30\"\n\"F25\"\n\"(LN(C34/C35)+(G34-G36+(G35/2))*C36)/(((G35)^(0.5))*(C36^0.5))\"\n\"(LN(C34/C38)+(G34-G36+(G35/2))*C36)/(((G35)^(0.5))*(C36^0.5))\"\n\"NORMSDIST(C41)\"\n\"C41-((G35^0.5)*(C36^(0.5)))\"\n\"F41-((G35^0.5)*(C36^(0.5)))\"\n\"(((EXP((0-G36)*C36))*C34*C42-C35*(EXP((0-G34)*C36))*C45)-((EXP((0-G36)*C36))*C34*F42-C38*(EXP((0-G34)*C36))*F45))*C37/G37\"\n\"SUM(E10:E29)\"\n\"+E5\"\n\"SUM(E53:E59)+SUM(E34:E47)\"\n\"+E30-E60\"\n\"SUM(D65:D69)\"\n\"+E70+E62\"\n\"+(+E62+E70)-E80\"\n\"SUM(D14:D302)\"\n\"$B$4\"\n\"SUM(C12:C313)\"\n\"SUM(C6+C450+C618+C657)\"\n\"SUM(C7+C70+C133+C175+C196+C348+C362+C374+C391+C418+C440)\"\n\"SUM(+C8+C11+C14+C17+C20+C23+C27+C30+C33+C38+C43+C46+C49+C53+C56+C59+C62+C65+C66)\"\n\"SUM(C9)\"\n\"SUM(C24:C25)\"\n\"SUM(C34:C36)\"\n\"SUM(C109:C129)+C71+C74+C77+C81+C84+C87+C88+C91+C94+C97+C101+C105\"\n\"SUM(C92:C92)\"\n\"SUM(C165:C171)+C134+C140+C146+C150+C155+C158+C161\"\n\"SUM(C135:C138)\"\n\"SUM(C176:C192)\"\n\"SUM(C263:C344)+C197+C200+C203+C206+C209+C212+C215+C218+C221+C224+C229+C232+C235+C238+C241+C246+C251+C255+C258\"\n\"SUM(C355:C358)+C349+C352\"\n\"SUM(C363, C366, C367, C368, C369, C370)\"\n\"SUM(C375:C387)\"\n\" SUM(C405:C414)+C392+C395+C398+C402\"\n\"SUM(C419+C422+C425+C428+C431+C434)\"\n\"SUM(C441+C444)\"\n\"SUM(C556:C614)+C452+C453+C457+C462+C468+C471+C478+C481+C484+C488+C491+C494+C497+C501+C504+C507+C512+C515+C518+C521+C524+C527+C530+C533+C536+C539+C542+C545+C552+C549\"\n\"SUM(C472:C476)\"\n\"SUM(C626:C653)+C619+C623\"\n\"SUM(+C658+C661+C662+C663)\"\n\"(D4-C4)/C4*100\"\n\"SUM(J14:J29)\"\n\"SUM(J35:J46)\"\n\"SUM(J50:J57)\"\n\"SUM(J47+J58)\"\n\"SUM(C16:D16)\"\n\"SUM(C16:C22)\"\n\"SUM(C27:C31)\"\n\"SUM(C43:C62)\"\n\"SUM(C66:C71)\"\n\"SUM(C75:C84)\"\n\"SUM(C97:C99)\"\n\"SUM(C109:C110)\"\n\"SUM(C114:C117)\"\n\"C32+C40+C63+C72+C85+C94+C100+C106+C111+C118+C120\"\n\"C122-C23\"\n\"SUM(C16:E16)\"\n\"SUM(C16:C22)\"\n\"SUM(C28:C32)\"\n\"SUM(C44:C63)\"\n\"SUM(C67:C72)\"\n\"SUM(C76:C85)\"\n\"SUM(C98:C100)\"\n\"SUM(C110:C111)\"\n\"C33+C41+C64+C73+C86+C95+C101+C107+C112+C120+C122\"\n\"C124-C23\"\n\"SUM(I14:I28)\"\n\"SUM(I35:I45)\"\n\"SUM(I50:I56)\"\n\"I47+I58\"\n\"SUM(C16:D16)\"\n\"SUM(C16:C22)\"\n\"SUM(C27:C31)\"\n\"SUM(C43:C62)\"\n\"SUM(C66:C71)\"\n\"SUM(C75:C84)\"\n\"SUM(C97:C99)\"\n\"SUM(C109:C110)\"\n\"SUM(C114:C117)\"\n\"C32+C40+C63+C72+C85+C94+C100+C106+C111+C118+C120\"\n\"C122-C23\"\n\"SUM(D14:D44)\"\n\"SUM(D51:D60)\"\n\"SUM(B7:B17)\"\n\"SUM(B19+B34+B49)\"\n\"'Annex B- Eligible Costs'!B4\"\n\"'Annex B- Eligible Costs'!B4\"\n\"SUM(B13-B14-B15)\"\n\"SUM(B19:B24)\"\n\"SUM(B17-B26)\"\n\"'Annex B- Eligible Costs'!B4\"\n\"'Annex B- Eligible Costs'!B4\"\n\"SUM(B11+B12-B13)\"\n\"B14\"\n\"SUM(C14--C15)\"\n\"SUM(C17:C25)\"\n\"SUM(D17:D26)\"\n\"'Annex B- Eligible Costs'!B4\"\n\"'Annex B- Eligible Costs'!B4\"\n\"'Annex B- Eligible Costs'!B4\"\n\"'Annex C - Trading Results'!E28\"\n\"'Annex C - Trading Results'!F28\"\n\"'Annex C - Trading Results'!E22\"\n\"'Annex C - Trading Results'!F22\"\n\"SUM(B9:B17)\"\n\"B18-'Annex D - App. of Funds'!$C$27\"\n\"D18-'Annex D - App. of Funds'!$D$27\"\n\"E18-'Annex D - App. of Funds'!$E$27\"\n\"IF(H9=0,TRUE)\"\n\"IF(B43=\"\"x\"\",\"\"Need date\"\",\"\"\"\")\"\n\"IF(B45<>\"\"\"\",\"\"You must enter a Documentation Due Date.\"\",\"\"\"\")\"\n\"IF((L60=\"\"\"\"),\"\"\"\",IF(L60=\"\"n\"\",\"\"Need Date\"\",\"\"N/A\"\"))\"\n\"SUM(H10:H11)\"\n\"25255.18-2411.04\"\n\"580+1240\"\n\"SUM(A9:A20)\"\n\"SUM(I9:I19)\"\n\"+J21-I19\"\n\"+G248\"\n\"+G255\"\n\"+G270\"\n\"+F305\"\n\"SUM(A27:A32)\"\n\"SUM(I27:I31)\"\n\"+J33-I30\"\n\"+A21-A33\"\n\"+K35-12531.78\"\n\"+F186\"\n\"+F198\"\n\"+G211\"\n\"23128.25+202.95-43.36+3561.96\"\n\"SUM(A49:A55)\"\n\"SUM(I49:I54)\"\n\"+J56-I53-I52\"\n\"+I59\"\n\"+A56+A59\"\n\"+J61-I52-I53\"\n\"10044.76+126.26\"\n\"3375+4511.4+1990.51\"\n\"7500-10025+7000\"\n\"SUM(I66:I72)\"\n\"+J73-126.26\"\n\"+K73+K75\"\n\"+A75\"\n\"+A104\"\n\"+J35\"\n\"+K35\"\n\"+A99+A103\"\n\"SUM(K99:K103)\"\n\"SUM(F184:F185)\"\n\"3792.37+5919.4\"\n\"145.77+5751.45\"\n\"2058.22+3482.21\"\n\"6253.2+12267.64\"\n\"+D217-E217-F217\"\n\"SUM(G229:G232)\"\n\"6470.94*0.3\"\n\"44796.13*0.3\"\n\"+G293/2\"\n\"SUM(G237:G247)\"\n\"SUM(G252:G254)\"\n\"6470.94*0.7\"\n\"44796.13*0.7\"\n\"+G293/2\"\n\"2441.59+4074.75\"\n\"SUM(G257:G269)\"\n\"1117.15+664.54+289.18\"\n\"+E299-F299\"\n\"+D299+G299\"\n\"+G211\"\n\"+H305-H312\"\n\"C11/$C$15\"\n\"G11/$G$15\"\n\"(324594+2820575+3289176)/1000\"\n\"540.1-0.3\"\n\"SUM(C11:C14)\"\n\"C34/C37\"\n\"C35/C37\"\n\"7690.7+9409.5+7467.9+195.2\"\n\"SUM(C34:C35)\"\n\"SUM(G34:G36)\"\n\"IF(SUM(G44:G45)=SUM(G34:G35),SUM(G44:G45),#VALUE!)\"\n\"SUM(K90:K108)\"\n\"SUM(M90:N108)\"\n\"SUM(M90:N108)\"\n\"SUM(K110:N110)\"\n\"SUM(K179:M186)\"\n\"SUM(K179:M186)\"\n\"SUM(K179:M186)\"\n\"SUM(B10:B14)\"\n\"B15+B16\"\n\"SUM(B10:F10)\"\n\"G10+H10\"\n\"B10+B11\"\n\"'Page 3'!B10\"\n\"'Page 3'!B18\"\n\"'Page 3'!B32\"\n\"'Page 3'!D29\"\n\"'Page 3'!D31\"\n\"B12-B15\"\n\"SUM(B5:B8)\"\n\"SUM(B11:B16)\"\n\"SUM(D5:D16)\"\n\"SUM(D20:D27)\"\n\"SUM(B10,B18,B32,D18,D29)\"\n\"SUM(B20:B30)\"\n\"SUM(B3:M3)\"\n\"SUM(B3:M3)\"\n\"((B3*$B$33)+(C3*$C$33)+(D3*$D$33)+(E3*$E$33)+(F3*$F$33)+(G3*$G$33)+(H3*$H$33)+(I3*$I$33)+(J3*$J$33)+(K3*$K$33)+(L3*$L$33)+(M3*$M$33))\"\n\"(P3*12.5%)+P3\"\n\"N4+O3\"\n\"SUM(B3:B31)\"\n\"B32-B34\"\n\"B34*B33\"\n\"SUM(P3:P31)\"\n\"D37-D48\"\n\"D48-'Financial Activity'!I67\"\n\"F67-#REF!\"\n\"G67-(#REF!-#REF!-#REF!-#REF!)\"\n\"I67-(#REF!)-#REF!-#REF!\"\n\"G63-#REF!-#REF!-#REF!-#REF!-#REF!\"\n\"CELL(\"\"WIDTH\"\",A55)\"\n\"SUM(A55:J55)\"\n\"A8+B8-C8\"\n\"CELL(\"\"WIDTH\"\",E53)\"\n\"-(+D9+E9-G9)\"\n\"SUM(D9:D35)\"\n\"CELL(\"\"WIDTH\"\",B59)\"\n\"A11+1\"\n\"A21+4\"\n\"C21+1\"\n\"SUM(D11:D41)\"\n\"+D46+D43\"\n\"+E43\"\n\"CELL(\"\"WIDTH\"\",A63)\"\n\"SUM(A63:M63)\"\n\"A11+1\"\n\"A21+4\"\n\"C21+1\"\n\"SUM(D11:D41)\"\n\"+D46+D43\"\n\"+E43\"\n\"CELL(\"\"WIDTH\"\",A63)\"\n\"SUM(A63:M63)\"\n\"B10-C10\"\n\"E10+F10\"\n\"SUM(B10:B33)\"\n\"CELL(\"\"WIDTH\"\",A56)\"\n\"+E14-F14\"\n\"A14+1\"\n\"A24+4\"\n\"+C24+1\"\n\"+E28\"\n\"+G30+G28\"\n\"CELL(\"\"WIDTH\"\",A69)\"\n\"+B9+1\"\n\"+B19+4\"\n\"+D19+1\"\n\"SUM(E8:E33)\"\n\"CELL(\"\"WIDTH\"\",A69)\"\n\"D19-F19\"\n\"IF(F25<>0,D22-F22,D22-F22-F26)\"\n\"CELL(\"\"WIDTH\"\",A73)\"\n\"SUM(J8:J20)\"\n\"SUM(M10:M32)\"\n\"+G9-H9-I9-J9+L9+M9+N9\"\n\"SUM(G9:G21)\"\n\"SUM(D8:D11)\"\n\"+D12+D17+D22+D27\"\n\"SUM(E7:E17)\"\n\"SUM(D23:D26)\"\n\"-(+D10+E10-G10)\"\n\"SUM(D9:D25)\"\n\"CELL(\"\"WIDTH\"\",B57)\"\n\"+F7+F8+F9+F10-F11-F12-F13-F14-F15-F16-F17-F18\"\n\"+F19+F20+F21-F22-F23+F24+F25+F26-F27-F28+F29-F30+F31+F32+F33+F34-SUM(F14:F18)\"\n\"+F39+F35+F36+F37+F38-F40\"\n\"CELL(\"\"WIDTH\"\",A77)\"\n\"SUM(A77:H77)\"\n\"CELL(\"\"WIDTH\"\",A63)\"\n\"SUM(A63:I63)\"\n\"+D9+E9+F9+G9-H9\"\n\"IF(J9<>0,\"\"CROSSFOOTING ERROR\"\",\"\" \"\")\"\n\"+D34+E34+G34-H34\"\n\"-(+D45+E45-H45)\"\n\"+D9+D11+D13+D15+D17+D20+D22+D24+D26+D28+D30+D34+D36+D38+D40+D42+D44\"\n\"+F9+F11+F13+F15+F17+F20+F22+F24+F26+F28+F30\"\n\"IF(F47<>0,\"\"Transfers must net to zero\"\",\"\" \"\")\"\n\"CELL(\"\"WIDTH\"\",A61)\"\n\"+D9+E9+F9+G9-H9\"\n\"IF(J9<>0,\"\"CROSSFOOTING ERROR\"\",\"\" \"\")\"\n\"+D34+E34+G34-H34\"\n\"-(+D45+E45-H45)\"\n\"+D9+D11+D13+D15+D17+D20+D22+D24+D26+D28+D30+D34+D36+D38+D40+D42+D44\"\n\"+F9+F11+F13+F15+F17+F20+F22+F24+F26+F28+F30\"\n\"IF(F47<>0,\"\"Transfers must net to zero\"\",\"\" \"\")\"\n\"CELL(\"\"WIDTH\"\",A61)\"\n\"SUM(D18:D35)\"\n\"NOW()\"\n\"NOW()\"\n\"SUM(B8:B13)\"\n\"SUM(B22:B28)\"\n\"SUM(B10:D10)\"\n\"SUM(B10:B14)\"\n\"SUM(C9:C20)\"\n\"SUM(C21:C26)\"\n\"SUM(C31:C46)\"\n\"C58/C61\"\n\"+Data!C4\"\n\"(C11/C10)*100\"\n\"+Data!C7\"\n\"+Data!L4\"\n\"(C11/C10)*100\"\n\"+Data!L7\"\n\"615053-11798.534-229.836-313.954-58.332\"\n\"629235-13109.178-246.101-112.102-48.081\"\n\"635073450/1000-13962.235-346.394-386.213-47.105\"\n\"625430260/1000-13731.362-576.231-276.326-81.131\"\n\"663451378/1000-13729.436-486.293-282.408\"\n\"727836971/1000-14575.485-493.186-307.888-78.687\"\n\"759845.146-14372.137\"\n\"780033.257-13663.934-387.992-326.15-52.704\"\n\"771445.222-14120.452-453.387-304.538-49.581\"\n\"757276.055-13676.556-437.342-354.399-0\"\n\"((N5-L5)/2)+L5\"\n\"776118.025-13382.292-357.252-302.583-55.137\"\n\"906434.485-15743.853-459.739-302.09-86.779\"\n\"SUM(P10:P62)\"\n\"721836-27642-200-703-70\"\n\"689812-25096-281-402-59\"\n\"685505-25739-298-552-53\"\n\"672692-29542-436-679-67\"\n\"676650-26244-350-693\"\n\"687436-26394-354-679-97\"\n\"697304-26515\"\n\"714440-27706-226-958-53\"\n\"711906-24908-320-1054-57\"\n\"700805-25673-302-972-0\"\n\"691115-20778-259-886-39\"\n\"745864-23662-344-873-74\"\n\"SUM(B10:B25)\"\n\"(B6/B5)*100\"\n\"ROUND(11582,0)\"\n\"ROUND(11743,0)\"\n\"ROUND(12455,0)\"\n\"ROUND(11901029/1000,0)\"\n\"ROUND(11523340/1000,0)\"\n\"ROUND(12008448/1000,0)\"\n\"ROUND(12421842/1000,0)\"\n\"ROUND(12594.009,0)\"\n\"ROUND(12641.341,0)\"\n\"ROUND(13842,0)\"\n\"ROUND(17363,0)\"\n\"ROUND(13181,0)\"\n\"ROUND(12618,0)\"\n\"ROUND(12501,0)\"\n\"ROUND(12842,0)\"\n\"ROUND(12491,0)\"\n\"ROUND(11438,0)\"\n\"ROUND(11111,0)\"\n\"ROUND(6832,0)\"\n\"ROUND(6192,0)\"\n\"ROUND(6483,0)\"\n\"ROUND(7136194/1000,0)\"\n\"ROUND(6638354/1000,0)\"\n\"ROUND(7555623/1000,0)\"\n\"ROUND(7945535/1000,0)\"\n\"ROUND(8579.038,0)\"\n\"ROUND(8108.248,0)\"\n\"ROUND(8534,0)\"\n\"ROUND(9166,0)\"\n\"ROUND(8039,0)\"\n\"ROUND(8642,0)\"\n\"ROUND(7664,0)\"\n\"ROUND(9882,0)\"\n\"ROUND(7835,0)\"\n\"ROUND(8171,0)\"\n\"ROUND(7498,0)\"\n\"ROUND(917200/1000,0)\"\n\"ROUND(18000,0)\"\n\"ROUND(17564,0)\"\n\"ROUND(17763,0)\"\n\"ROUND(17591686/1000,0)\"\n\"ROUND(18374731/1000,0)\"\n\"ROUND(18960001/1000,0)\"\n\"ROUND(20803921/1000,0)\"\n\"ROUND(22133.524,0)\"\n\"ROUND(23932.337,0)\"\n\"ROUND(19742,0)\"\n\"ROUND(25930,0)\"\n\"ROUND(19478,0)\"\n\"ROUND(19382,0)\"\n\"ROUND(20166,0)\"\n\"ROUND(19945,0)\"\n\"ROUND(20467,0)\"\n\"ROUND(21197,0)\"\n\"ROUND(23718,0)\"\n\"ROUND(12092,0)\"\n\"ROUND(12579,0)\"\n\"ROUND(11168,0)\"\n\"ROUND(11016688/1000,0)\"\n\"ROUND(10461248/1000,0)\"\n\"ROUND(11183348/1000,0)\"\n\"ROUND(13940787/1000,0)\"\n\"ROUND(12614.893,0)\"\n\"ROUND(13833.226,0)\"\n\"ROUND(14275,0)\"\n\"ROUND(18482,0)\"\n\"ROUND(12714,0)\"\n\"ROUND(12302,0)\"\n\"ROUND(11859,0)\"\n\"ROUND(11885,0)\"\n\"ROUND(12817,0)\"\n\"ROUND(11857,0)\"\n\"ROUND(13397,0)\"\n\"ROUND(12683,0)\"\n\"ROUND(9570,0)\"\n\"ROUND(13200,0)\"\n\"ROUND(13565624/1000,0)\"\n\"ROUND(12656566/1000,0)\"\n\"ROUND(13177338/1000,0)\"\n\"ROUND(14446618/1000,0)\"\n\"ROUND(15850.843,0)\"\n\"ROUND(15756.095,0)\"\n\"ROUND(12780,0)\"\n\"ROUND(14153,0)\"\n\"ROUND(12362,0)\"\n\"ROUND(12132,0)\"\n\"ROUND(11436,0)\"\n\"ROUND(11615,0)\"\n\"ROUND(11705,0)\"\n\"ROUND(11786,0)\"\n\"ROUND(11495,0)\"\n\"ROUND(11579,0)\"\n\"ROUND(11402,0)\"\n\"ROUND(11772,0)\"\n\"ROUND(11889474/1000,0)\"\n\"ROUND(11470249/1000,0)\"\n\"ROUND(11691202/1000,0)\"\n\"ROUND(12452118/1000,0)\"\n\"ROUND(12521.847,0)\"\n\"ROUND(12374.082,0)\"\n\"ROUND(14819,0)\"\n\"ROUND(16770,0)\"\n\"ROUND(12410,0)\"\n\"ROUND(11950,0)\"\n\"ROUND(12164,0)\"\n\"ROUND(12388,0)\"\n\"ROUND(12851,0)\"\n\"ROUND(12156,0)\"\n\"ROUND(12178,0)\"\n\"ROUND(9729,0)\"\n\"ROUND(9090,0)\"\n\"ROUND(9416,0)\"\n\"ROUND(9579558/1000,0)\"\n\"ROUND(9133110/1000,0)\"\n\"ROUND(9570060/1000,0)\"\n\"ROUND(9952149/1000,0)\"\n\"ROUND(11526.896,0)\"\n\"ROUND(10951.895,0)\"\n\"ROUND(9516,0)\"\n\"ROUND(13449,0)\"\n\"ROUND(8866,0)\"\n\"ROUND(8844,0)\"\n\"ROUND(8452,0)\"\n\"ROUND(8689,0)\"\n\"ROUND(9049,0)\"\n\"ROUND(9513,0)\"\n\"ROUND(9058,0)\"\n\"ROUND(9583,0)\"\n\"ROUND(10151,0)\"\n\"ROUND(10176886/1000,0)\"\n\"ROUND(9489848/1000,0)\"\n\"ROUND(7355280/1000,0)\"\n\"ROUND(10398372/1000,0)\"\n\"ROUND(10227.472,0)\"\n\"ROUND(10436.024,0)\"\n\"ROUND(11674,0)\"\n\"ROUND(14189,0)\"\n\"ROUND(12338,0)\"\n\"ROUND(11792,0)\"\n\"ROUND(12055,0)\"\n\"ROUND(9752,0)\"\n\"ROUND(12130,0)\"\n\"ROUND(11370,0)\"\n\"ROUND(10946,0)\"\n\"ROUND(14086,0)\"\n\"ROUND(14953,0)\"\n\"ROUND(13892,0)\"\n\"ROUND(13999764/1000,0)\"\n\"ROUND(13856140/1000,0)\"\n\"ROUND(14444637/1000,0)\"\n\"ROUND(15773366/1000,0)\"\n\"ROUND(16149.586,0)\"\n\"ROUND(16262.902,0)\"\n\"ROUND(21575,0)\"\n\"ROUND(22144,0)\"\n\"ROUND(18632,0)\"\n\"ROUND(18360,0)\"\n\"ROUND(18126,0)\"\n\"ROUND(18629,0)\"\n\"ROUND(18334,0)\"\n\"ROUND(17811,0)\"\n\"ROUND(18403,0)\"\n\"ROUND(7159,0)\"\n\"ROUND(7125,0)\"\n\"ROUND(7735,0)\"\n\"ROUND(7440855/1000,0)\"\n\"ROUND(7635561/1000,0)\"\n\"ROUND(8206435/1000,0)\"\n\"ROUND(9394915/1000,0)\"\n\"ROUND(9535.751,0)\"\n\"ROUND(9439.853,0)\"\n\"ROUND(9039,0)\"\n\"ROUND(10552,0)\"\n\"ROUND(9002,0)\"\n\"ROUND(9221,0)\"\n\"ROUND(9223,0)\"\n\"ROUND(9573,0)\"\n\"ROUND(9717,0)\"\n\"ROUND(9133,0)\"\n\"ROUND(8987,0)\"\n\"ROUND(8477,0)\"\n\"ROUND(8702,0)\"\n\"ROUND(9037,0)\"\n\"ROUND(9107676/1000,0)\"\n\"ROUND(8509675/1000,0)\"\n\"ROUND(8229645/1000,0)\"\n\"ROUND(9289161/1000,0)\"\n\"ROUND(9230.368,0)\"\n\"ROUND(9902.765,0)\"\n\"ROUND(10375,0)\"\n\"ROUND(12882,0)\"\n\"ROUND(10516,0)\"\n\"ROUND(10577,0)\"\n\"ROUND(9875,0)\"\n\"ROUND(9236,0)\"\n\"ROUND(9077,0)\"\n\"ROUND(9649,0)\"\n\"ROUND(9495,0)\"\n\"ROUND(10984,0)\"\n\"ROUND(11069,0)\"\n\"ROUND(10557,0)\"\n\"ROUND(10791783/1000,0)\"\n\"ROUND(10079957/1000,0)\"\n\"ROUND(11255562/1000,0)\"\n\"ROUND(12340677/1000,0)\"\n\"ROUND(12669.762,0)\"\n\"ROUND(12670.33,0)\"\n\"ROUND(14743,0)\"\n\"ROUND(16386,0)\"\n\"ROUND(13080,0)\"\n\"ROUND(13845,0)\"\n\"ROUND(14037,0)\"\n\"ROUND(14773,0)\"\n\"ROUND(13091,0)\"\n\"ROUND(12405,0)\"\n\"ROUND(12957,0)\"\n\"ROUND(32018,0)\"\n\"ROUND(32652,0)\"\n\"ROUND(33557,0)\"\n\"ROUND(33680411/1000,0)\"\n\"ROUND(32558128/1000,0)\"\n\"ROUND(32476520/1000,0)\"\n\"ROUND(36538198/1000,0)\"\n\"ROUND(40352.026,0)\"\n\"ROUND(40922.506,0)\"\n\"ROUND(31102,0)\"\n\"ROUND(48257,0)\"\n\"ROUND(30901,0)\"\n\"ROUND(31071,0)\"\n\"ROUND(30702,0)\"\n\"ROUND(29468,0)\"\n\"ROUND(31663,0)\"\n\"ROUND(33465,0)\"\n\"ROUND(32480,0)\"\n\"ROUND(12013,0)\"\n\"ROUND(11780,0)\"\n\"ROUND(11924,0)\"\n\"ROUND(12232154/1000,0)\"\n\"ROUND(12180527/1000,0)\"\n\"ROUND(12918224/1000,0)\"\n\"ROUND(13841318/1000,0)\"\n\"ROUND(13829.926,0)\"\n\"ROUND(14521.548,0)\"\n\"ROUND(14394,0)\"\n\"ROUND(17434,0)\"\n\"ROUND(13957,0)\"\n\"ROUND(13998,0)\"\n\"ROUND(13503,0)\"\n\"ROUND(14007,0)\"\n\"ROUND(14493,0)\"\n\"ROUND(13771,0)\"\n\"ROUND(14570,0)\"\n\"ROUND(5082,0)\"\n\"ROUND(4894,0)\"\n\"ROUND(5154,0)\"\n\"ROUND(5180922/1000,0)\"\n\"ROUND(4975184/1000,0)\"\n\"ROUND(5624523/1000,0)\"\n\"ROUND(6089210/1000,0)\"\n\"ROUND(6234.818,0)\"\n\"ROUND(6155.873,0)\"\n\"ROUND(7552,0)\"\n\"ROUND(7249,0)\"\n\"ROUND(7114,0)\"\n\"ROUND(7283,0)\"\n\"ROUND(7254,0)\"\n\"ROUND(7599,0)\"\n\"ROUND(7207,0)\"\n\"ROUND(6800,0)\"\n\"ROUND(6595,0)\"\n\"('College Work-Study'!B5*1000)/'College Work-Study'!S5\"\n\"596468-4546.112-0-0-0\"\n\"763476-5255.437-0-0-13.775\"\n\"805190858/1000-5655.703-0-0-6.8\"\n\"873730951/1000-4940.864-0-0-7.925\"\n\"902521206/1000-5200.3-0-0\"\n\"870399633/1000-4171.764-0-0-56.384\"\n\"867800.439-4010.32\"\n\"891681.168-4562.456-0-0-25.05\"\n\"918661.831-6671.68-0-0-8\"\n\"970957.367-6172.395-0-0-0\"\n\"((N5-L5)/2)+L5\"\n\"1021752.644-5014.071-0-0-21.99\"\n\"1062047.252-5325.064-0-0-0\"\n\"SUM(P10:P62)\"\n\"674195-8735-0-0-0\"\n\"715779-10345-0-0-52\"\n\"673549-9757-0-0-19\"\n\"692064-11751-0-0-18\"\n\"695909-8870-0-0\"\n\"660218-8064-0-0-53\"\n\"654214-8396\"\n\"668771-9685-0-0-19\"\n\"684730-11568-0-0-4\"\n\"663347-10415-0-0-0\"\n\"674169-8896-0-0-13\"\n\"679102-9622-0-0-0\"\n\"SUM(B10:B25)\"\n\"(B6/B5)*100\"\n\"ROUND(8537,0)\"\n\"ROUND(2793,0)\"\n\"ROUND(9260,0)\"\n\"ROUND(8847247/1000,0)\"\n\"ROUND(10148310/1000,0)\"\n\"ROUND(10393996/1000,0)\"\n\"ROUND(8992207/1000,0)\"\n\"ROUND(8817.687,0)\"\n\"ROUND(9101.687,0)\"\n\"ROUND(10054.447,0)\"\n\"ROUND(10440,0)\"\n\"ROUND(11136,0)\"\n\"ROUND(8671,0)\"\n\"ROUND(6908,0)\"\n\"ROUND(7444,0)\"\n\"ROUND(7241,0)\"\n\"ROUND(6382,0)\"\n\"ROUND(6242,0)\"\n\"ROUND(6074,0)\"\n\"ROUND(5065,0)\"\n\"ROUND(1585,0)\"\n\"ROUND(5365,0)\"\n\"ROUND(6613708/1000,0)\"\n\"ROUND(6138296/1000,0)\"\n\"ROUND(6490392/1000,0)\"\n\"ROUND(6557223/1000,0)\"\n\"ROUND(5462.928,0)\"\n\"ROUND(6214.386,0)\"\n\"ROUND(6423.465,0)\"\n\"ROUND(6428,0)\"\n\"ROUND(5985,0)\"\n\"ROUND(5582,0)\"\n\"ROUND(5989,0)\"\n\"ROUND(5548,0)\"\n\"ROUND(7131,0)\"\n\"ROUND(5002,0)\"\n\"ROUND(4580,0)\"\n\"ROUND(4322,0)\"\n\"ROUND(15004,0)\"\n\"ROUND(5328,0)\"\n\"ROUND(19823,0)\"\n\"ROUND(17765617/1000,0)\"\n\"ROUND(20885612/1000,0)\"\n\"ROUND(21333332/1000,0)\"\n\"ROUND(18383226/1000,0)\"\n\"ROUND(20120.816,0)\"\n\"ROUND(21984.574,0)\"\n\"ROUND(15665,0)\"\n\"ROUND(18051,0)\"\n\"ROUND(18340,0)\"\n\"ROUND(14883,0)\"\n\"ROUND(17040,0)\"\n\"ROUND(16690,0)\"\n\"ROUND(14425,0)\"\n\"ROUND(14827,0)\"\n\"ROUND(17421,0)\"\n\"ROUND(8451,0)\"\n\"ROUND(3174,0)\"\n\"ROUND(11470,0)\"\n\"ROUND(11051778/1000,0)\"\n\"ROUND(13243251/1000,0)\"\n\"ROUND(13375814/1000,0)\"\n\"ROUND(14968435/1000,0)\"\n\"ROUND(12830.834,0)\"\n\"ROUND(12341.872,0)\"\n\"ROUND(11246,0)\"\n\"ROUND(14247,0)\"\n\"ROUND(10820,0)\"\n\"ROUND(9616,0)\"\n\"ROUND(10224,0)\"\n\"ROUND(10633,0)\"\n\"ROUND(10285,0)\"\n\"ROUND(8775,0)\"\n\"ROUND(8061,0)\"\n\"ROUND(8186,0)\"\n\"ROUND(2656,0)\"\n\"ROUND(9489,0)\"\n\"ROUND(9595404/1000,0)\"\n\"ROUND(11033217/1000,0)\"\n\"ROUND(12029348/1000,0)\"\n\"ROUND(10261577/1000,0)\"\n\"ROUND(10798.45,0)\"\n\"ROUND(10812.692,0)\"\n\"ROUND(11576,0)\"\n\"ROUND(12236,0)\"\n\"ROUND(10087,0)\"\n\"ROUND(9292,0)\"\n\"ROUND(10390,0)\"\n\"ROUND(10859,0)\"\n\"ROUND(9537,0)\"\n\"ROUND(9149,0)\"\n\"ROUND(8594,0)\"\n\"ROUND(9052,0)\"\n\"ROUND(3137,0)\"\n\"ROUND(9647,0)\"\n\"ROUND(10070038/1000,0)\"\n\"ROUND(12503589/1000,0)\"\n\"ROUND(10688464/1000,0)\"\n\"ROUND(11175086/1000,0)\"\n\"ROUND(10007.414,0)\"\n\"ROUND(11705.083,0)\"\n\"ROUND(10423,0)\"\n\"ROUND(12490,0)\"\n\"ROUND(8244,0)\"\n\"ROUND(8155,0)\"\n\"ROUND(8857,0)\"\n\"ROUND(7884,0)\"\n\"ROUND(7716,0)\"\n\"ROUND(6578,0)\"\n\"ROUND(7213,0)\"\n\"ROUND(7842,0)\"\n\"ROUND(2873,0)\"\n\"ROUND(10109,0)\"\n\"ROUND(10718818/1000,0)\"\n\"ROUND(11849533/1000,0)\"\n\"ROUND(12925444/1000,0)\"\n\"ROUND(13083490/1000,0)\"\n\"ROUND(13769.546,0)\"\n\"ROUND(13297.102,0)\"\n\"ROUND(9112,0)\"\n\"ROUND(7779,0)\"\n\"ROUND(9208,0)\"\n\"ROUND(8583,0)\"\n\"ROUND(8199,0)\"\n\"ROUND(9002,0)\"\n\"ROUND(8917,0)\"\n\"ROUND(9448,0)\"\n\"ROUND(8826,0)\"\n\"ROUND(5805,0)\"\n\"ROUND(2124,0)\"\n\"ROUND(6575,0)\"\n\"ROUND(7030758/1000,0)\"\n\"ROUND(9316573/1000,0)\"\n\"ROUND(9688651/1000,0)\"\n\"ROUND(8481717/1000,0)\"\n\"ROUND(7705.724,0)\"\n\"ROUND(8201.081,0)\"\n\"ROUND(7942,0)\"\n\"ROUND(7862,0)\"\n\"ROUND(5714,0)\"\n\"ROUND(5887,0)\"\n\"ROUND(6760,0)\"\n\"ROUND(6893,0)\"\n\"ROUND(5926,0)\"\n\"ROUND(4988,0)\"\n\"ROUND(4992,0)\"\n\"ROUND(13339,0)\"\n\"ROUND(4384,0)\"\n\"ROUND(18523,0)\"\n\"ROUND(19769611/1000,0)\"\n\"ROUND(20277656/1000,0)\"\n\"ROUND(21427674/1000,0)\"\n\"ROUND(18977552/1000,0)\"\n\"ROUND(19819.805,0)\"\n\"ROUND(19653.282,0)\"\n\"ROUND(15867,0)\"\n\"ROUND(19525,0)\"\n\"ROUND(16159,0)\"\n\"ROUND(15109,0)\"\n\"ROUND(15253,0)\"\n\"ROUND(15106,0)\"\n\"ROUND(13238,0)\"\n\"ROUND(13796,0)\"\n\"ROUND(13089,0)\"\n\"ROUND(8770,0)\"\n\"ROUND(2896,0)\"\n\"ROUND(10043,0)\"\n\"ROUND(10450971/1000,0)\"\n\"ROUND(11705066/1000,0)\"\n\"ROUND(11774458/1000,0)\"\n\"ROUND(11589726/1000,0)\"\n\"ROUND(11813.635,0)\"\n\"ROUND(11468.278,0)\"\n\"ROUND(9645,0)\"\n\"ROUND(11553,0)\"\n\"ROUND(9753,0)\"\n\"ROUND(9374,0)\"\n\"ROUND(9165,0)\"\n\"ROUND(9356,0)\"\n\"ROUND(8369,0)\"\n\"ROUND(8415,0)\"\n\"ROUND(8001,0)\"\n\"ROUND(5451,0)\"\n\"ROUND(1967,0)\"\n\"ROUND(6314,0)\"\n\"ROUND(7133117/1000,0)\"\n\"ROUND(8136479/1000,0)\"\n\"ROUND(9041728/1000,0)\"\n\"ROUND(8580021/1000,0)\"\n\"ROUND(7222.879,0)\"\n\"ROUND(8464.115,0)\"\n\"ROUND(7513,0)\"\n\"ROUND(8265,0)\"\n\"ROUND(6264,0)\"\n\"ROUND(5692,0)\"\n\"ROUND(6281,0)\"\n\"ROUND(6669,0)\"\n\"ROUND(6079,0)\"\n\"ROUND(5224,0)\"\n\"ROUND(5706,0)\"\n\"ROUND(10401,0)\"\n\"ROUND(3438,0)\"\n\"ROUND(13485,0)\"\n\"ROUND(13406862/1000,0)\"\n\"ROUND(13293524/1000,0)\"\n\"ROUND(16958018/1000,0)\"\n\"ROUND(15425042/1000,0)\"\n\"ROUND(14767.201,0)\"\n\"ROUND(14877.053,0)\"\n\"ROUND(11943,0)\"\n\"ROUND(15689,0)\"\n\"ROUND(11393,0)\"\n\"ROUND(10156,0)\"\n\"ROUND(9892,0)\"\n\"ROUND(11344,0)\"\n\"ROUND(10167,0)\"\n\"ROUND(10013,0)\"\n\"ROUND(9772,0)\"\n\"ROUND(20007,0)\"\n\"ROUND(9927,0)\"\n\"ROUND(24218,0)\"\n\"ROUND(24679275/1000,0)\"\n\"ROUND(27365702/1000,0)\"\n\"ROUND(27743155/1000,0)\"\n\"ROUND(26148159/1000,0)\"\n\"ROUND(28061.642,0)\"\n\"ROUND(29373.207,0)\"\n\"ROUND(19478,0)\"\n\"ROUND(26299,0)\"\n\"ROUND(20339,0)\"\n\"ROUND(18515,0)\"\n\"ROUND(18956,0)\"\n\"ROUND(19972,0)\"\n\"ROUND(17963,0)\"\n\"ROUND(19243,0)\"\n\"ROUND(19265,0)\"\n\"ROUND(9931,0)\"\n\"ROUND(3794,0)\"\n\"ROUND(12787,0)\"\n\"ROUND(14707547/1000,0)\"\n\"ROUND(16663677/1000,0)\"\n\"ROUND(16873711/1000,0)\"\n\"ROUND(16086523/1000,0)\"\n\"ROUND(16130.111,0)\"\n\"ROUND(17316.14,0)\"\n\"ROUND(10566,0)\"\n\"ROUND(15893,0)\"\n\"ROUND(12311,0)\"\n\"ROUND(12323,0)\"\n\"ROUND(12856,0)\"\n\"ROUND(11812,0)\"\n\"ROUND(12091,0)\"\n\"ROUND(11983,0)\"\n\"ROUND(12548,0)\"\n\"ROUND(1728,0)\"\n\"ROUND(6424,0)\"\n\"ROUND(6385847/1000,0)\"\n\"ROUND(6925163/1000,0)\"\n\"ROUND(6826206/1000,0)\"\n\"ROUND(6862685/1000,0)\"\n\"ROUND(6613.61,0)\"\n\"ROUND(7097.85,0)\"\n\"ROUND(7254,0)\"\n\"ROUND(6544,0)\"\n\"ROUND(6866,0)\"\n\"ROUND(6349,0)\"\n\"ROUND(6784,0)\"\n\"ROUND(6136,0)\"\n\"ROUND(5978,0)\"\n\"ROUND(5702,0)\"\n\"ROUND(6039,0)\"\n\"('Perkins Loans'!B5*1000)/'Perkins Loans'!S5\"\n\"342920-5849.831-39.075-24.846-15.411\"\n\"399540-6315.615-26.433-11.472-25.677\"\n\"418878832/1000-6627.354-107.206-69.217-18.825\"\n\"422470200/1000-6232.798-115.019-191.332-29.232\"\n\"466140784/1000-7316.89-100.201-101.839\"\n\"503140238/1000-7486.074-113.768-77.132-33.8\"\n\"586319.963-10049.143\"\n\"651315.928-10495.04-67.248-149.026-31.603\"\n\"752656.889-11804.346-85.675-135.167-46.777\"\n\"755023.839-10789.416-52.151-188.594-0\"\n\"((N5-L5)/2)+L5\"\n\"762049.27-11887.653-102.565-243.073-54.391\"\n\"811234.899-12675.227-135.55-192.48-64.112\"\n\"SUM(P10:P60)\"\n\"641901-21373-187-79-40\"\n\"631226-21422-153-56-97\"\n\"635326-21659-588-329-49\"\n\"678847-26618-425-333-68\"\n\"727566-26291-383-198\"\n\"761276-25919-434-227-41\"\n\"881344-32375\"\n\"976385-35255-255-549-27\"\n\"1068102-40084-340-421-34\"\n\"1056560-34007-223-637-0\"\n\"1086430-34555-418-827-27\"\n\"1115696-34394-483-885-36\"\n\"SUM(B10:B25)\"\n\"(B6/B5)*100\"\n\"ROUND(5519,0)\"\n\"ROUND(6478,0)\"\n\"ROUND(6183,0)\"\n\"ROUND(6572210/1000,0)\"\n\"ROUND(6760403/1000,0)\"\n\"ROUND(7078313/1000,0)\"\n\"ROUND(7340673/1000,0)\"\n\"ROUND(8564.05,0)\"\n\"ROUND(8942.886,0)\"\n\"ROUND(10588,0)\"\n\"ROUND(10435,0)\"\n\"ROUND(10350,0)\"\n\"ROUND(10700,0)\"\n\"ROUND(10758,0)\"\n\"ROUND(11433,0)\"\n\"ROUND(11165,0)\"\n\"ROUND(13004,0)\"\n\"ROUND(13233,0)\"\n\"ROUND(2163,0)\"\n\"ROUND(2717,0)\"\n\"ROUND(2432,0)\"\n\"ROUND(2597660/1000,0)\"\n\"ROUND(2604794/1000,0)\"\n\"ROUND(2902468/1000,0)\"\n\"ROUND(3138365/1000,0)\"\n\"ROUND(3819.066,0)\"\n\"ROUND(4096.694,0)\"\n\"ROUND(5298,0)\"\n\"ROUND(4353,0)\"\n\"ROUND(5697,0)\"\n\"ROUND(5949,0)\"\n\"ROUND(5829,0)\"\n\"ROUND(8554,0)\"\n\"ROUND(6311,0)\"\n\"ROUND(7504,0)\"\n\"ROUND(7982,0)\"\n\"ROUND(10069,0)\"\n\"ROUND(11653,0)\"\n\"ROUND(11417,0)\"\n\"ROUND(11640694/1000,0)\"\n\"ROUND(12028814/1000,0)\"\n\"ROUND(13521108/1000,0)\"\n\"ROUND(15009896/1000,0)\"\n\"ROUND(18911.235,0)\"\n\"ROUND(28599.794,0)\"\n\"ROUND(17495,0)\"\n\"ROUND(18262,0)\"\n\"ROUND(17531,0)\"\n\"ROUND(17074,0)\"\n\"ROUND(17655,0)\"\n\"ROUND(19689,0)\"\n\"ROUND(23268,0)\"\n\"ROUND(30579,0)\"\n\"ROUND(39374,0)\"\n\"ROUND(5576,0)\"\n\"ROUND(6552,0)\"\n\"ROUND(6693,0)\"\n\"ROUND(7096104/1000,0)\"\n\"ROUND(6865691/1000,0)\"\n\"ROUND(7791914/1000,0)\"\n\"ROUND(8924343/1000,0)\"\n\"ROUND(9749.662,0)\"\n\"ROUND(11329.09,0)\"\n\"ROUND(11691,0)\"\n\"ROUND(10342,0)\"\n\"ROUND(11531,0)\"\n\"ROUND(11614,0)\"\n\"ROUND(12027,0)\"\n\"ROUND(12845,0)\"\n\"ROUND(13743,0)\"\n\"ROUND(15924,0)\"\n\"ROUND(17748,0)\"\n\"ROUND(3265,0)\"\n\"ROUND(4380,0)\"\n\"ROUND(3998,0)\"\n\"ROUND(4112876/1000,0)\"\n\"ROUND(4244557/1000,0)\"\n\"ROUND(4790502/1000,0)\"\n\"ROUND(5418203/1000,0)\"\n\"ROUND(5991.033,0)\"\n\"ROUND(6533.456,0)\"\n\"ROUND(8035,0)\"\n\"ROUND(7034,0)\"\n\"ROUND(8763,0)\"\n\"ROUND(8658,0)\"\n\"ROUND(8800,0)\"\n\"ROUND(9717,0)\"\n\"ROUND(10635,0)\"\n\"ROUND(11649,0)\"\n\"ROUND(12505,0)\"\n\"ROUND(4550,0)\"\n\"ROUND(4928,0)\"\n\"ROUND(5045,0)\"\n\"ROUND(4678095/1000,0)\"\n\"ROUND(5050126/1000,0)\"\n\"ROUND(5622995/1000,0)\"\n\"ROUND(6122261/1000,0)\"\n\"ROUND(7596.981,0)\"\n\"ROUND(9989.527,0)\"\n\"ROUND(10731,0)\"\n\"ROUND(7886,0)\"\n\"ROUND(11106,0)\"\n\"ROUND(10921,0)\"\n\"ROUND(11621,0)\"\n\"ROUND(12255,0)\"\n\"ROUND(12284,0)\"\n\"ROUND(12999,0)\"\n\"ROUND(14916,0)\"\n\"ROUND(5338,0)\"\n\"ROUND(6428,0)\"\n\"ROUND(6438,0)\"\n\"ROUND(6726196/1000,0)\"\n\"ROUND(6739685/1000,0)\"\n\"ROUND(7180420/1000,0)\"\n\"ROUND(7424818/1000,0)\"\n\"ROUND(8569.172,0)\"\n\"ROUND(9195.358,0)\"\n\"ROUND(10507,0)\"\n\"ROUND(10264,0)\"\n\"ROUND(9252,0)\"\n\"ROUND(9587,0)\"\n\"ROUND(10137,0)\"\n\"ROUND(11053,0)\"\n\"ROUND(10953,0)\"\n\"ROUND(13346,0)\"\n\"ROUND(14801,0)\"\n\"ROUND(4621,0)\"\n\"ROUND(5073,0)\"\n\"ROUND(4932,0)\"\n\"ROUND(5208570/1000,0)\"\n\"ROUND(5535892/1000,0)\"\n\"ROUND(5776719/1000,0)\"\n\"ROUND(6127072/1000,0)\"\n\"ROUND(7013.073,0)\"\n\"ROUND(7210.711,0)\"\n\"ROUND(9495,0)\"\n\"ROUND(8155,0)\"\n\"ROUND(8973,0)\"\n\"ROUND(8401,0)\"\n\"ROUND(10856,0)\"\n\"ROUND(10272,0)\"\n\"ROUND(10612,0)\"\n\"ROUND(10852,0)\"\n\"ROUND(12170,0)\"\n\"ROUND(8808,0)\"\n\"ROUND(9771,0)\"\n\"ROUND(9283,0)\"\n\"ROUND(10612088/1000,0)\"\n\"ROUND(10357365/1000,0)\"\n\"ROUND(11320788/1000,0)\"\n\"ROUND(12090504/1000,0)\"\n\"ROUND(13939.342,0)\"\n\"ROUND(13819.899,0)\"\n\"ROUND(14979,0)\"\n\"ROUND(15752,0)\"\n\"ROUND(13753,0)\"\n\"ROUND(13988,0)\"\n\"ROUND(14243,0)\"\n\"ROUND(15756,0)\"\n\"ROUND(16899,0)\"\n\"ROUND(18803,0)\"\n\"ROUND(20864,0)\"\n\"ROUND(3531,0)\"\n\"ROUND(4428,0)\"\n\"ROUND(4210,0)\"\n\"ROUND(4514347/1000,0)\"\n\"ROUND(4467882/1000,0)\"\n\"ROUND(4970986/1000,0)\"\n\"ROUND(5644763/1000,0)\"\n\"ROUND(6734.212,0)\"\n\"ROUND(7384.251,0)\"\n\"ROUND(9162,0)\"\n\"ROUND(7135,0)\"\n\"ROUND(9887,0)\"\n\"ROUND(10124,0)\"\n\"ROUND(9856,0)\"\n\"ROUND(10797,0)\"\n\"ROUND(11445,0)\"\n\"ROUND(13045,0)\"\n\"ROUND(13226,0)\"\n\"ROUND(4152,0)\"\n\"ROUND(4871,0)\"\n\"ROUND(4801,0)\"\n\"ROUND(5086587/1000,0)\"\n\"ROUND(5044491/1000,0)\"\n\"ROUND(5462951/1000,0)\"\n\"ROUND(5948837/1000,0)\"\n\"ROUND(5701.406,0)\"\n\"ROUND(7014.704,0)\"\n\"ROUND(8681,0)\"\n\"ROUND(7614,0)\"\n\"ROUND(9120,0)\"\n\"ROUND(9132,0)\"\n\"ROUND(8923,0)\"\n\"ROUND(9888,0)\"\n\"ROUND(10667,0)\"\n\"ROUND(10218,0)\"\n\"ROUND(11384,0)\"\n\"ROUND(5970,0)\"\n\"ROUND(6872,0)\"\n\"ROUND(6825,0)\"\n\"ROUND(6978780/1000,0)\"\n\"ROUND(7276333/1000,0)\"\n\"ROUND(7912894/1000,0)\"\n\"ROUND(8835721/1000,0)\"\n\"ROUND(10498.841,0)\"\n\"ROUND(12061.549,0)\"\n\"ROUND(11411,0)\"\n\"ROUND(11057,0)\"\n\"ROUND(10718,0)\"\n\"ROUND(11276,0)\"\n\"ROUND(12455,0)\"\n\"ROUND(13688,0)\"\n\"ROUND(14904,0)\"\n\"ROUND(17628,0)\"\n\"ROUND(18487,0)\"\n\"ROUND(16697,0)\"\n\"ROUND(19767,0)\"\n\"ROUND(19080,0)\"\n\"ROUND(19073031/1000,0)\"\n\"ROUND(20224083/1000,0)\"\n\"ROUND(21672753/1000,0)\"\n\"ROUND(23552449/1000,0)\"\n\"ROUND(26420.098,0)\"\n\"ROUND(29369.886,0)\"\n\"ROUND(32949,0)\"\n\"ROUND(31629,0)\"\n\"ROUND(30726,0)\"\n\"ROUND(32792,0)\"\n\"ROUND(31806,0)\"\n\"ROUND(34638,0)\"\n\"ROUND(36726,0)\"\n\"ROUND(41679,0)\"\n\"ROUND(46813,0)\"\n\"ROUND(6315,0)\"\n\"ROUND(7635,0)\"\n\"ROUND(7667,0)\"\n\"ROUND(8115258/1000,0)\"\n\"ROUND(8044214/1000,0)\"\n\"ROUND(8855019/1000,0)\"\n\"ROUND(9610523/1000,0)\"\n\"ROUND(11471.454,0)\"\n\"ROUND(13287.396,0)\"\n\"ROUND(11194,0)\"\n\"ROUND(12263,0)\"\n\"ROUND(10815,0)\"\n\"ROUND(11104,0)\"\n\"ROUND(10828,0)\"\n\"ROUND(12400,0)\"\n\"ROUND(12970,0)\"\n\"ROUND(16458,0)\"\n\"ROUND(20547,0)\"\n\"ROUND(2565,0)\"\n\"ROUND(3010,0)\"\n\"ROUND(2925,0)\"\n\"ROUND(3085872/1000,0)\"\n\"ROUND(3321741/1000,0)\"\n\"ROUND(3420803/1000,0)\"\n\"ROUND(3835281/1000,0)\"\n\"ROUND(4580.482,0)\"\n\"ROUND(5103.65,0)\"\n\"ROUND(5157,0)\"\n\"ROUND(4854,0)\"\n\"ROUND(5090,0)\"\n\"ROUND(4462,0)\"\n\"ROUND(4723,0)\"\n\"ROUND(4653,0)\"\n\"ROUND(4940,0)\"\n\"ROUND(5957,0)\"\n\"ROUND(7199,0)\"\n\"(SEOG!B5*1000)/SEOG!S5\"\n\"'College Work-Study'!R5\"\n\"(('College Work-Study'!R5-'College Work-Study'!M5)/'College Work-Study'!M5)*100\"\n\"'Perkins Loans'!R5\"\n\"(('Perkins Loans'!R5-'Perkins Loans'!M5)/'Perkins Loans'!M5)*100\"\n\"SEOG!R5\"\n\"((SEOG!R5-SEOG!M5)/SEOG!M5)*100\"\n\"'CWS per-recipient'!R3\"\n\"(('CWS per-recipient'!R3-'CWS per-recipient'!M3)/'CWS per-recipient'!M3)*100\"\n\"'Perkins per-recipient'!R3\"\n\"(('Perkins per-recipient'!R3-'Perkins per-recipient'!M3)/'Perkins per-recipient'!M3)*100\"\n\"'SEOG per-recipient'!R3\"\n\"(('SEOG per-recipient'!R3-'SEOG per-recipient'!M3)/'SEOG per-recipient'!M3)*100\"\n\"ROUND(SEOG!R6,0)\"\n\"(C14/C13)*100\"\n\"+C6\"\n\"+C6\"\n\"+F6\"\n\"+H6\"\n\"+B23\"\n\"E14-D14\"\n\"SUM(F12:J12)\"\n\"SUM(B9:B17)\"\n\"G11/G10\"\n\"G13/G10\"\n\"G15/G13\"\n\"G17/G13\"\n\"G19/G13\"\n\"G21/G13\"\n\"SUM(E3*F3)\"\n\"SUM(G3:G502)\"\n\"SUM(E3*F3)\"\n\"SUM(G3:G502)\"\n\"234.2/B6\"\n\"73.3%+3.7%\"\n\"112.8/D6\"\n\"(60.8+3.7)/100\"\n\"170.9/F6\"\n\"0.903+0.048\"\n\"66.8/B6\"\n\"54.8/D6\"\n\"12.4/F6\"\n\"B6/350\"\n\"C6/242.9\"\n\"6.07+0.2\"\n\"1.7+5.1\"\n\"13.4/341\"\n\"10.4/281.2\"\n\"14+6.1\"\n\"6+4\"\n\"84.73-B21\"\n\"(B21+B22)/341\"\n\"(C21+C22)/281.2\"\n\"25.9-5.7\"\n\"B30/341\"\n\"C30/320.9\"\n\"D30/249.2\"\n\"B38+C38\"\n\"SUM(E38:F38)\"\n\"B38/($D$38+$D$41)\"\n\"E38/23.2\"\n\"108/1000\"\n\"60.9/B52\"\n\"70.1/B52\"\n\"B52/341\"\n\"B11+B12\"\n\"B10/$B$32\"\n\"D10/$D$32\"\n\"F10/$F$32\"\n\"H10/$H$32\"\n\"J10/$J$32\"\n\"L10/$L$32\"\n\"N10/$N$32\"\n\"SUM(B17:B19)+B15\"\n\"5513\"\n\"7571\"\n\"11098\"\n\"11734\"\n\"B24\"\n\"J24+J26\"\n\"1011+5171\"\n\"1133+6760\"\n\"B28+B23+B14+B10\"\n\"J28+J23+J14+J10+J21\"\n\"100*L32/318346\"\n\"100*N32/341386\"\n\"SUM(B13:B24)\"\n\"(B12/$B$38)\"\n\"(D12/$D$38)\"\n\"(F12/$F$38)\"\n\"(H12/$H$38)\"\n\"(J12/$J$38)\"\n\"(L12/$L$38)\"\n\"SUM(B27:B31)\"\n\"SUM(L27:L30)\"\n\"SUM(B34:B36)\"\n\"(B33+B26+B12)\"\n\"(B51/$B$77)\"\n\"(D51/$D$77)\"\n\"(F51/$F$77)\"\n\"(H51/$H$77)\"\n\"(J51/$J$77)\"\n\"(L51/$L$77)\"\n\"(B90/$B$116)\"\n\"(D90/$D$116)\"\n\"(F90/$F$116)\"\n\"(H90/$H$116)\"\n\"(J90/$J$116)\"\n\"(L90/$L$116)\"\n\"SUM(G21:G25)\"\n\"SUM(G28:G37)\"\n\"SUM(G41:G50)+G38+G26\"\n\"(+G51*8%)\"\n\"SUM(G51:G52)\"\n\"'Table G.2'!$B9\"\n\"'Table G.2'!$B13\"\n\"SUM(B7:B11)\"\n\"SUM(B14:B19)\"\n\"SUM(B5,B12,B20)\"\n\"SUM(D12,D20)\"\n\"SUM(C7:V7)\"\n\"SUMIF('Table G.4'!$C$5:$C$142,C4,'Table G.4'!$N$5:$N$142)\"\n\"SUMIF('Table G.4'!$C$5:$C$142,C4,'Table G.4'!$O$5:$O$142)\"\n\"SUM(C7:C8)\"\n\"SUMIF('Table G.5.a'!$C$6:$C$40,C4,'Table G.5.a'!$H$6:$H$40)\"\n\"SUMIF('Table G.5.b'!$C$6:$C$40,C4,'Table G.5.b'!$K$6:$K$40)\"\n\"SUMIF('Table G.5.c'!$C$6:$C$40,C4,'Table G.5.c'!$I$6:$I$40)\"\n\"SUM(C10:C12)\"\n\"SUMIF('Table G.6'!$C$5:$C$39,C4,'Table G.6'!$H$5:$H$39)\"\n\"SUMIF('Table G.7'!$C$5:$C$39,C4,'Table G.7'!$H$5:$H$39)\"\n\"SUM(B9,B13,B14,B16)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$I$5:$I$54)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$J$5:$J$54)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$K$5:$K$54)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$L$5:$L$54)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$M$5:$M$54)\"\n\"SUMIF('Table G.8'!$C$5:$C$54,C$4,'Table G.8'!$N$5:$N$54)\"\n\"SUM(B19:B24)\"\n\"SUM(B17,B25)\"\n\"SUM(P5:P142)\"\n\"N5+O5\"\n\"SUM(H6:H40)\"\n\"E6*G6\"\n\"SUM(K6:K40)\"\n\"IF(G6>=10000,G6/60*F6,G6/36*F6)\"\n\"I6*J6\"\n\"SUM(I6:I40)\"\n\"SUM(F6*G6)*H6\"\n\"SUM(H5:H39)\"\n\"F5*G5\"\n\"SUM(H5:H39)\"\n\"F5*G5\"\n\"SUM(H5:H54)\"\n\"SUMIF($E5,$I$4,$H5)\"\n\"SUMIF($E5,$J$4,$H5)\"\n\"SUMIF($E5,$K$4,$H5)\"\n\"SUMIF($E5,$L$4,$H5)\"\n\"SUMIF($E5,$M$4,$H5)\"\n\"SUMIF($E5,$N$4,$H5)\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!C16\"\n\"ROUND(+D12/$D$19,4)\"\n\"ROUND(+G12/$G$19,4)\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E16\"\n\"ROUND(+J12/$J$19,4)\"\n\"2661466\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!C22\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!E23\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C42\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!E42\"\n\"11842+1138\"\n\"ROUND(+G18/$G$19,4)-0.0001\"\n\"SUM(D12:D18)\"\n\"SUM(K12:K18)-0.0001\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!C59\"\n\"ROUND(+D22/$D$35,4)\"\n\"ROUND(+G22/$G$35,4)-0.0001\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!E59\"\n\"ROUND(+J22/$J$35,4)\"\n\"1419602-512452\"\n\"452067+69000\"\n\"278701-213376+0.3\"\n\"210734-69000\"\n\"SUM(D21:D26)\"\n\"SUM(E22:E26)\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!C78\"\n\"ROUND(+G29/$G$35,4)\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E78\"\n\"SUM(D29:D30)\"\n\"SUM(H29:H30)+0.0004\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C105\"\n\"+G33/$G$35\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!E105\"\n\"D27+D31+D33\"\n\"E27+E31+E33-0.0001\"\n\"H27+H31+H33+0.0001\"\n\"D35-D19\"\n\"+D39+D41\"\n\"+D37+D43\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C121\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C145\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C169\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C178\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C188-0.4\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E188\"\n\"SUM(D10:D14)\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C232-0.4\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E232\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C241\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C248\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C257\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C266\"\n\"'[1]Page 20 to 33 (NOTE 3 to 40'!C281\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E281\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C288\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C296\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C303\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C313\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C321-0.4\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E321\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C328\"\n\"SUM(D18:D29)\"\n\"D30+D15\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C201\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C215\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C223\"\n\"SUM(D35:D37)\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C336\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C352\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C360\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!E359\"\n\"D38+D44\"\n\"D32-D46\"\n\"-D52+D48\"\n\"+'[1]Page 20 to 33 (NOTE 3 to 40'!C373\"\n\"SUM(D51:D52)\"\n\"-2447668-347968+85749\"\n\"SUM(D10:D15)\"\n\"3893474+48040\"\n\"3723789\"\n\"880767+137694\"\n\"495930+69000\"\n\"215258-69000\"\n\"1988+347968-137694\"\n\"+D24+D16\"\n\"-195764-85749\"\n\"SUM(D29:D39)\"\n\"SUM(D40:D46)\"\n\"SUM(D50:D51)\"\n\"SUM(D55)\"\n\"+D56+D52+D47+D25\"\n\"SUM(F58:F59)-0.5\"\n\"C24\"\n\"SUM(C12:I12)\"\n\"'[1]OP1 page 7'!D37\"\n\"+'[1]OP1 page 7'!D43\"\n\"SUM(C12:C16)\"\n\"'[1]OP1 page 7'!J37\"\n\"M4/M$10*100\"\n\"SUM(L4:L6)\"\n\"L9+L7\"\n\"L11+L7\"\n\"C6/C4*100\"\n\"SUM(B4:B8)\"\n\"SUM(B16:B19)\"\n\"E11/E5\"\n\"E11/E5/365\"\n\"66*40000\"\n\"E44*E7*12\"\n\"A49+1\"\n\"E31*C49\"\n\"E31*D49\"\n\"E31*E49\"\n\"E31*C50\"\n\"D50*E31\"\n\"E31*E50\"\n\"E31*C51\"\n\"D51*E31\"\n\"E31*E51\"\n\"C52*E31\"\n\"D52*E31\"\n\"E52*E31\"\n\"C53*E31\"\n\"E31*D53\"\n\"E53*E31\"\n\"E31\"\n\"E31*5\"\n\"-SUM(E54:E58)*E17\"\n\"E31\"\n\"(((SUM(E54:E58)*0.75)*C113)+((SUM(D54:D58)*C114))+((SUM(C54:C58)*C115)))*12\"\n\"E31\"\n\"E68\"\n\"E31\"\n\"E69-((SUM(C54:C58)*C115*12))*(3*E38)\"\n\"E31\"\n\"E70-(((SUM(D54:D58)*C114*12)*(4*E40)))\"\n\"SUM(C67:C71)\"\n\"SUM(E68:E71)\"\n\"(E46*5)+'Infrastructure Cost Analysis'!F42\"\n\"C74\"\n\"C72*E34\"\n\"C72*E34\"\n\"C72*(E17+E19)\"\n\"D72*0.94\"\n\"D72*E23\"\n\"5*E36\"\n\"E36*2\"\n\"(C54)-(C54*(E38*E26))\"\n\"(C55)-(C55*(E38*E26))\"\n\"(D54)-(D54*(E40*E29))\"\n\"((SUM(C54:C58)+(SUM(D54:D58)))*0.75)\"\n\"D92*0.94\"\n\"D92*E23\"\n\"-((C67*E49)+(C68*E50)+(C69*E51)+(C70*E52)+(C71*E53))*0.25\"\n\"'Infrastructure Cost Analysis'!J30+'Infrastructure Cost Analysis'!L43\"\n\"SUM(C72:C101)\"\n\"SUM(E72:E101)-E67\"\n\"(E103/C103)-1\"\n\"(E103/D103)-1\"\n\"E103/E5/(365*5)\"\n\"E110/E15\"\n\"B6*B5\"\n\"'Financial Overview'!E9*'Financial Overview'!E7\"\n\"'Financial Overview'!E5\"\n\"D8*B4\"\n\"F8*B4\"\n\"J8*0.01899\"\n\"M8/30/B7\"\n\"D9*B4\"\n\"F9*B4\"\n\"M9/30/B7\"\n\"D10*B4\"\n\"F10*B4\"\n\"M10/30/B7\"\n\"(B6/5)*F11\"\n\"J11*0.01667\"\n\"M11/30/B7\"\n\"(B6/5)*F12\"\n\"M12/30/B7\"\n\"D13*B4\"\n\"D14*B4\"\n\"D15*B4\"\n\"D17*B4\"\n\"B4*50\"\n\"D18\"\n\"D19*B4\"\n\"D20*B6\"\n\"SUM(H8:H27)\"\n\"-(H28-J28)\"\n\"J30/H28\"\n\"'Financial Overview'!E7\"\n\"'Financial Overview'!E5\"\n\"B33*D36\"\n\"F36*0.01899\"\n\"D38*B33\"\n\"J38*B33\"\n\"F36-(F38+(L38*60))\"\n\"-(F36/L39+1)\"\n\"D42*B33\"\n\"J42*B33\"\n\"-(F36/L43+1)\"\n\"D46*B33\"\n\"F36-F46\"\n\"-(F36/L47+1)\"\n\"IF(E16>0,\"\"BOP\"\",\"\"EOP\"\")\"\n\"IF(E16=0,0,\"\"\"\")\"\n\"E13\"\n\"E9*E10\"\n\"E11\"\n\"J11\"\n\"E15\"\n\"E12\"\n\"G9\"\n\"G10+I10\"\n\"NPV(E21,G55:G64)+G54\"\n\"IF(G54=0,0,IRR(G54:G64,0.1))\"\n\"SUM(D33:D33)\"\n\"H8\"\n\"PV($H$52/$G$7,I9,H9,,0)\"\n\"PV($H$52/$G$7,0,,H37,0)\"\n\"SUM(I37:I51)+I36\"\n\"IF(OR(ISERROR(L37),$H$52>7),\"\"error\"\",\"\"no error\"\")\"\n\"PV($H$52/$G$7,SUM($I$9:I9),,H38,0)\"\n\"IF(E8=0,0,IF(E8>0,ROUND(-PMT(E9/E6,E7*E6,E8,0,0),2),IF(E8<0,ROUND(PMT(E9/E6,E7*E6,E8,0,0),2))))\"\n\"IF(I15<10,0,1)\"\n\"IF(E8<0,E8*-1,E8)\"\n\"IF($E$9=0,0,ROUND(C15*($E$9/$E$6),2))\"\n\"IF(C15<10,0,$E$10-E15)\"\n\"IF(C15-G15<10,0,C15-G15)\"\n\"IF(I15<10,0,(A15+1))\"\n\"I15\"\n\"'(6)Amortization Schedule'!E6\"\n\"E10*E6\"\n\"IF('(6)Amortization Schedule'!E8<0,'(6)Amortization Schedule'!E8*-1,'(6)Amortization Schedule'!E8)\"\n\"IF(I15<10,0,1)\"\n\"E8\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E15:E26),IF($E$6=2,SUM('(6)Amortization Schedule'!E15:E16),IF($E$6=4,SUM('(6)Amortization Schedule'!E15:E18),IF($E$6=1,'(6)Amortization Schedule'!E15,0))))\"\n\"IF(C15<10,0,($E$10*$E$6)-E15)\"\n\"ROUND(IF(C15-G15<10,0,C15-G15),2)\"\n\"IF(I15<10,0,(A15+1))\"\n\"I15\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E27:E38),IF($E$6=2,SUM('(6)Amortization Schedule'!E17:E18),IF($E$6=4,SUM('(6)Amortization Schedule'!E19:E22),IF($E$6=1,'(6)Amortization Schedule'!E16,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E39:E50),IF($E$6=2,SUM('(6)Amortization Schedule'!E19:E20),IF($E$6=4,SUM('(6)Amortization Schedule'!E23:E26),IF($E$6=1,'(6)Amortization Schedule'!E17,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E51:E62),IF($E$6=2,SUM('(6)Amortization Schedule'!E21:E22),IF($E$6=4,SUM('(6)Amortization Schedule'!E27:E30),IF($E$6=1,'(6)Amortization Schedule'!E18,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E63:E74),IF($E$6=2,SUM('(6)Amortization Schedule'!E23:E24),IF($E$6=4,SUM('(6)Amortization Schedule'!E31:E34),IF($E$6=1,'(6)Amortization Schedule'!E19,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E75:E86),IF($E$6=2,SUM('(6)Amortization Schedule'!E25:E26),IF($E$6=4,SUM('(6)Amortization Schedule'!E35:E38),IF($E$6=1,'(6)Amortization Schedule'!E20,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E87:E98),IF($E$6=2,SUM('(6)Amortization Schedule'!E27:E28),IF($E$6=4,SUM('(6)Amortization Schedule'!E39:E42),IF($E$6=1,'(6)Amortization Schedule'!E21,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E99:E110),IF($E$6=2,SUM('(6)Amortization Schedule'!E29:E30),IF($E$6=4,SUM('(6)Amortization Schedule'!E43:E46),IF($E$6=1,'(6)Amortization Schedule'!E22,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E111:E122),IF($E$6=2,SUM('(6)Amortization Schedule'!E31:E32),IF($E$6=4,SUM('(6)Amortization Schedule'!E47:E50),IF($E$6=1,'(6)Amortization Schedule'!E23,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E123:E134),IF($E$6=2,SUM('(6)Amortization Schedule'!E33:E34),IF($E$6=4,SUM('(6)Amortization Schedule'!E51:E54),IF($E$6=1,'(6)Amortization Schedule'!E24,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E135:E146),IF($E$6=2,SUM('(6)Amortization Schedule'!E35:E36),IF($E$6=4,SUM('(6)Amortization Schedule'!E55:E58),IF($E$6=1,'(6)Amortization Schedule'!E25,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E147:E158),IF($E$6=2,SUM('(6)Amortization Schedule'!E37:E38),IF($E$6=4,SUM('(6)Amortization Schedule'!E59:E62),IF($E$6=1,'(6)Amortization Schedule'!E26,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E159:E170),IF($E$6=2,SUM('(6)Amortization Schedule'!E39:E40),IF($E$6=4,SUM('(6)Amortization Schedule'!E63:E66),IF($E$6=1,'(6)Amortization Schedule'!E27,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E171:E182),IF($E$6=2,SUM('(6)Amortization Schedule'!E41:E42),IF($E$6=4,SUM('(6)Amortization Schedule'!E67:E70),IF($E$6=1,'(6)Amortization Schedule'!E28,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E183:E194),IF($E$6=2,SUM('(6)Amortization Schedule'!E43:E44),IF($E$6=4,SUM('(6)Amortization Schedule'!E71:E74),IF($E$6=1,'(6)Amortization Schedule'!E29,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E195:E206),IF($E$6=2,SUM('(6)Amortization Schedule'!E45:E46),IF($E$6=4,SUM('(6)Amortization Schedule'!E75:E78),IF($E$6=1,'(6)Amortization Schedule'!E30,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E207:E218),IF($E$6=2,SUM('(6)Amortization Schedule'!E47:E48),IF($E$6=4,SUM('(6)Amortization Schedule'!E79:E82),IF($E$6=1,'(6)Amortization Schedule'!E31,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E219:E230),IF($E$6=2,SUM('(6)Amortization Schedule'!E49:E50),IF($E$6=4,SUM('(6)Amortization Schedule'!E83:E86),IF($E$6=1,'(6)Amortization Schedule'!E32,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E231:E242),IF($E$6=2,SUM('(6)Amortization Schedule'!E51:E52),IF($E$6=4,SUM('(6)Amortization Schedule'!E87:E90),IF($E$6=1,'(6)Amortization Schedule'!E33,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E243:E254),IF($E$6=2,SUM('(6)Amortization Schedule'!E53:E54),IF($E$6=4,SUM('(6)Amortization Schedule'!E91:E94),IF($E$6=1,'(6)Amortization Schedule'!E34,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E255:E266),IF($E$6=2,SUM('(6)Amortization Schedule'!E55:E56),IF($E$6=4,SUM('(6)Amortization Schedule'!E95:E98),IF($E$6=1,'(6)Amortization Schedule'!E35,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E267:E278),IF($E$6=2,SUM('(6)Amortization Schedule'!E57:E58),IF($E$6=4,SUM('(6)Amortization Schedule'!E99:E102),IF($E$6=1,'(6)Amortization Schedule'!E36,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E279:E290),IF($E$6=2,SUM('(6)Amortization Schedule'!E59:E60),IF($E$6=4,SUM('(6)Amortization Schedule'!E103:E106),IF($E$6=1,'(6)Amortization Schedule'!E37,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E291:E302),IF($E$6=2,SUM('(6)Amortization Schedule'!E61:E62),IF($E$6=4,SUM('(6)Amortization Schedule'!E107:E110),IF($E$6=1,'(6)Amortization Schedule'!E38,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E303:E314),IF($E$6=2,SUM('(6)Amortization Schedule'!E63:E64),IF($E$6=4,SUM('(6)Amortization Schedule'!E111:E114),IF($E$6=1,'(6)Amortization Schedule'!E39,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E315:E326),IF($E$6=2,SUM('(6)Amortization Schedule'!E65:E66),IF($E$6=4,SUM('(6)Amortization Schedule'!E115:E118),IF($E$6=1,'(6)Amortization Schedule'!E40,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E327:E338),IF($E$6=2,SUM('(6)Amortization Schedule'!E67:E68),IF($E$6=4,SUM('(6)Amortization Schedule'!E119:E122),IF($E$6=1,'(6)Amortization Schedule'!E41,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E339:E350),IF($E$6=2,SUM('(6)Amortization Schedule'!E69:E70),IF($E$6=4,SUM('(6)Amortization Schedule'!E123:E126),IF($E$6=1,'(6)Amortization Schedule'!E42,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E351:E362),IF($E$6=2,SUM('(6)Amortization Schedule'!E71:E72),IF($E$6=4,SUM('(6)Amortization Schedule'!E127:E130),IF($E$6=1,'(6)Amortization Schedule'!E43,0))))\"\n\"IF($E$6=12,SUM('(6)Amortization Schedule'!E363:E374),IF($E$6=2,SUM('(6)Amortization Schedule'!E73:E74),IF($E$6=4,SUM('(6)Amortization Schedule'!E131:E134),IF($E$6=1,'(6)Amortization Schedule'!E44,0))))\"\n\"B4+1\"\n\"D7+1\"\n\"D7\"\n\"IF(SUM(D9:D11),SUM(D9:D11),\"\"\"\")\"\n\"IF(OR(D13<>0,SUM(D12)),SUM(D12:D13),\"\"\"\")\"\n\"IF(OR(D18<>0,D17),D17+D18,\"\"\"\")\"\n\"IF(SUM(D19,D20),D19+D20,\"\"\"\")\"\n\"IF(OR(SUM(D14)<>0,SUM(D21)),SUM(D14)-SUM(D21),\"\"\"\")\"\n\"IF(SUM(D14,D21),SUM(D21:D22),\"\"\"\")\"\n\"IF(OR(D26<>0,D27),D26-D27,\"\"\"\")\"\n\"IF(OR(SUM(D28)<>0,D29),D28-D29,\"\"\"\")\"\n\"IF(SUM(D19),SUM(D12)/SUM(D19),\"\"\"\")\"\n\"IF(SUM(D14),SUM(D21)/SUM(D14),\"\"\"\")\"\n\"IF(SUM(D22),SUM(D21)/(D22),\"\"\"\")\"\n\"IF(SUM(D26),SUM(D10)/(SUM(D26)/(340+25)),\"\"\"\")\"\n\"IF(SUM(D11),SUM(D26)/SUM(D11),\"\"\"\")\"\n\"IF(SUM(D14),SUM(D26)/SUM(D14),\"\"\"\")\"\n\"IF(SUM(D26),SUM(D28)/SUM(D26),\"\"\"\")\"\n\"IF(SUM(D26),SUM(D30)/SUM(D26),\"\"\"\")\"\n\"IF(SUM(D22),SUM(D32)/SUM(D22),\"\"\"\")\"\n\"+L49-J49-I49-H49\"\n\"SUM(B7:E7)\"\n\"3846994+297201+70572\"\n\"3683311+316666+64425\"\n\"381583+3579763+61986\"\n\"226311+3814639+58967\"\n\"3655270+197613\"\n\"168603+3730363+58230\"\n\"139890+3931259+53259\"\n\"101339+4142824+53027\"\n\"7366421-142050-4662-34791-36398-61107-99183+70572\"\n\"7209187-98390-4881-34791-36577-60639-122312+64425\"\n\"6630701-132745-5662-34791-32175-61508-132873+61986\"\n\"6850064-115155-5864-34791-38481-62646-121552+58967\"\n\"7125394-149911-11129-34791-41181-64339-106224+57956\"\n\"7085972-132463-12127-34791-35673-64892-179874+58230\"\n\"7565181-145454-13149-34791-38183-66256-138140+53259\"\n\"7851070-124939-13417-34791-38680-68078-209539+53027\"\n\"34791+4662-B11\"\n\"34791+4881-C11\"\n\"34791+5662-D11\"\n\"34791+5864-E11\"\n\"34791+11129-F11\"\n\"34791+12127-G11\"\n\"34791+13149-H11\"\n\"34791+13417-I11\"\n\"165966+15925\"\n\"127401+15925\"\n\"258036+3925\"\n\"304794+28925\"\n\"307464+33925\"\n\"321722+33925\"\n\"323376+34000\"\n\"328989+57500\"\n\"4001429-B11\"\n\"3929057-C11\"\n\"4024544-D11\"\n\"3809112-E11\"\n\"3832437-F11\"\n\"3978001-G11\"\n\"4211728-H11\"\n\"4339760-I11\"\n\"34288+1326352\"\n\"1034220+29511\"\n\"27424+377888\"\n\"29359+188377\"\n\"154915+44627\"\n\"76415+231915\"\n\"377684+81769\"\n\"420078+71204\"\n\"54017+1150020+2999\"\n\"38616+1161792+47731\"\n\"130058+1231294+42194\"\n\"125713+1739325+46381\"\n\"163588+1557476+46248\"\n\"332587+1333987+49929\"\n\"504562+1109628+34439\"\n\"515926+802774+35161\"\n\"SUM(B10:B14)\"\n\"75689+813-812\"\n\"77483+720-719\"\n\"74198-4+1055-1054\"\n\"99872-297+298\"\n\"114289-330+331\"\n\"86878-1074+1075\"\n\"94173-942+943\"\n\"327220-B19-B18\"\n\"347439-C19-C18\"\n\"345032-D19-D18\"\n\"358839-E19-E18\"\n\"395486-F18-F19\"\n\"415079-G19-G18\"\n\"364446-H18-H19\"\n\"358477-I19-I18\"\n\"SUM(B15:B20)\"\n\"1410160-F27\"\n\"107565+15925\"\n\"142006+5621\"\n\"292915+28650\"\n\"304919+32675\"\n\"316816+33925\"\n\"322260+33944\"\n\"326685+41240\"\n\"329352+53000\"\n\"659838-812\"\n\"623722-1054\"\n\"798391-B33\"\n\"816124-C33\"\n\"766383-D33\"\n\"759384-E33\"\n\"773548-F33\"\n\"770379-G33\"\n\"758337-H33\"\n\"767249-I33\"\n\"SUM(B31:B34)\"\n\"+B36+B35\"\n\"(+B10-F10)/F10\"\n\"(+B21-F21)/F21\"\n\"(+B26+B28+B33-F26-F33-F28)/(F26+F28+F33)\"\n\"(+B36-F36)/F36\"\n\"SUM(B7:B8)\"\n\"65290+1\"\n\"+B9-B10\"\n\"83753+277+24663\"\n\"20474+31+6399\"\n\"24327+4+7015\"\n\"18477+150+7871\"\n\"20474+92+3377\"\n\"40372+35277+1461+11762-427\"\n\"21536-6-19\"\n\"24078-48-119\"\n\"25406-4041-167\"\n\"30104-123-8141\"\n\"39938+15481\"\n\"9488+2971\"\n\"10275+4184\"\n\"9744+3911\"\n\"56314-Q15-Q16\"\n\"14273-R15-R16\"\n\"16950-S15-S16\"\n\"15113-T15-T16\"\n\"9978-U15-U16\"\n\"45331-V15-V16\"\n\"14051-W15-W16\"\n\"10380-510\"\n\"53443-2074-7690\"\n\"19005-339-7690\"\n\"11712-974\"\n\"11825-412\"\n\"10496+56\"\n\"48597-2964-2484\"\n\"13004-389-706\"\n\"405-56\"\n\"-43392\"\n\"SUM(B13:B17)\"\n\"-5396+500\"\n\"-B8\"\n\"SUM(B18:B20)\"\n\"7834-K7\"\n\"6929-K8\"\n\"649-K9\"\n\"687\"\n\"1320-K10\"\n\"52926-44763\"\n\"13106-11125\"\n\"16661-14603\"\n\"10731-8792\"\n\"12428-10243\"\n\"39533-31719\"\n\"9787-8053\"\n\"753+869+311-1\"\n\"1371+1923+854-K11\"\n\"12182-K13\"\n\"290-K15\"\n\"-1749-K17\"\n\"15641-B16-9829\"\n\"3986-C16-2982\"\n\"1525+2833-1-2833\"\n\"3723+1073+499-3723\"\n\"321+290+142-290\"\n\"97+399+16\"\n\"740+669+357-740\"\n\"1000+106\"\n\"9022-4763\"\n\"2413-1307\"\n\"2130-1011\"\n\"2259-1217\"\n\"2219-1228\"\n\"1737-818-97\"\n\"2168-186-847\"\n\"SUM(B7:B19)\"\n\"+B20/6752464\"\n\"+C20/'STATEMENTS OF CONDITION'!B21*365/92\"\n\"+E20/'STATEMENTS OF CONDITION'!D21*365/91\"\n\"+F20/'STATEMENTS OF CONDITION'!E21*4.05555555555556\"\n\"+G20/6652774\"\n\"+H20/'STATEMENTS OF CONDITION'!F21*365/92\"\n\"+J20/'STATEMENTS OF CONDITION'!H21*365/90\"\n\"5149+2315\"\n\"5242+1566\"\n\"5074+1441\"\n\"1397+1\"\n\"1220-K23\"\n\"998-K24\"\n\"1661-1\"\n\"3241-K25\"\n\"11057-4373+1578+1304+1125+1281+2648+648-1\"\n\"2615-1294+151+693+363+288+320+457\"\n\"SUM(B9:B27)\"\n\"+B28/6752464\"\n\"C28/'STATEMENTS OF CONDITION'!B21*365/92\"\n\"E28/'STATEMENTS OF CONDITION'!H21*4.05555555555556\"\n\"G28/6652777\"\n\"H28/'STATEMENTS OF CONDITION'!F21*365/92\"\n\"+I28/'STATEMENTS OF CONDITION'!G21*365/92\"\n\"J28/'STATEMENTS OF CONDITION'!H21*4.05555555555556\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/'STATEMENTS OF CONDITION'!#REF!*365/92\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/'STATEMENTS OF CONDITION'!#REF!*365/91\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/'STATEMENTS OF CONDITION'!#REF!*365/90\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/6426252\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/6930250*365/92\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/6522928*365/92\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/6303931*365/91\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/5935957*365/90\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/5484056\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/5679505*365/92\"\n\"B28/('CONDENSED CONSOLIDATED STATEMEN'!B7+'ANALYSIS OF NONINTEREST'!B20)\"\n\"+C28/('CONDENSED CONSOLIDATED STATEMEN'!C7+'ANALYSIS OF NONINTEREST'!C20)\"\n\"+E28/('CONDENSED CONSOLIDATED STATEMEN'!D7+'ANALYSIS OF NONINTEREST'!D20)\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/('CONDENSED CONSOLIDATED STATEMEN'!W7+'CONDENSED CONSOLIDATED STATEMEN'!W14+'CONDENSED CONSOLIDATED STATEMEN'!W15+'CONDENSED CONSOLIDATED STATEMEN'!W16)\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/535262\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/146138\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/134828\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/130654\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/123643\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/470747\"\n\"+'ANALYSIS OF NONINTEREST'!#REF!/123451\"\n\"+D13/C13*365/92\"\n\"SUM(C13:C15)\"\n\"11500+3917\"\n\"729+288\"\n\"SUM(C18:C25)\"\n\"57560+979\"\n\"+C28+C26+C16\"\n\"+D30/C30*365/91\"\n\"+C32+C30\"\n\"IF(ISERROR(+D42/C42*365/91),\"\"          N/A\"\",+D42/C42*365/91)\"\n\"SUM(C38:C42)\"\n\"-D43+D30\"\n\"+D43/C30*365/92\"\n\"+D56/C30*365/92\"\n\"+D13/C13*365/365\"\n\"+G13/F13*366/366\"\n\"SUM(C13:C15)\"\n\"9178+623\"\n\"66354+16849\"\n\"1822+759\"\n\"SUM(C18:C25)\"\n\"370668+4702\"\n\"+(C28+C26+C16)\"\n\"+D28+D26+D16\"\n\"+C32+C30\"\n\"SUM(G30:G32)\"\n\"40542-1\"\n\"SUM(C38:C42)\"\n\"-D43+D30\"\n\"-G43+G34\"\n\"+D43/C30*365/365\"\n\"+G43/F30*366/366\"\n\"(+D56/C30*365/365)\"\n\"+G56/F30*366/366\"\n\"+J56/I30*365/365\"\n\"-D8+B8\"\n\"SUM(B8:B10)\"\n\"1819+30\"\n\"4531+250\"\n\"2914+172\"\n\"4296+278\"\n\"3924+191\"\n\"3929+227\"\n\"SUM(B13:B16)\"\n\"-B17+B11\"\n\"-C17+C11\"\n\"+C10/B10\"\n\"+F10/E10*365/92\"\n\"1395696-29304\"\n\"1285139-275-1\"\n\"+L10/K10*365/91\"\n\"+O10/N10*365/90\"\n\"SUM(B10:B16)\"\n\"1008373+277739-B20\"\n\"75088-C20\"\n\"1084220+286560-1-E20\"\n\"18787-F20\"\n\"1306477-H20\"\n\"18891-I20\"\n\"1374074-K20\"\n\"19610-L20\"\n\"1089805-N20\"\n\"17800-O20\"\n\"SUM(B19:B20)\"\n\"SUM(B23:B25)\"\n\"+B26+B21+B17\"\n\"+C10/B10\"\n\"+F10/E10*365/92\"\n\"42714-O10\"\n\"+L10/K10*365/91\"\n\"+O10/N10*365/90\"\n\"1928-O11\"\n\"3102-O12\"\n\"360-O13\"\n\"599949+1\"\n\"12118-O14\"\n\"9840-O15\"\n\"4384+1\"\n\"76-O16\"\n\"SUM(B10:B16)\"\n\"1074170-B20\"\n\"75538-C20\"\n\"1029240-E20\"\n\"17477-F20\"\n\"1009939-H20\"\n\"1116159-K20\"\n\"40283-O21-L20\"\n\"1143295\"\n\"20238-O20\"\n\"177-L20-O20\"\n\"127-O20\"\n\"SUM(B19:B20)\"\n\"392393\"\n\"29500-O23\"\n\"4071-O24\"\n\"9264-O25\"\n\"SUM(B23:B25)\"\n\"+B26+B21+B17\"\n\"+C10/B10\"\n\"+F10/E10*365/92\"\n\"60464-31427\"\n\"+L10/K10*365/91\"\n\"+O10/N10*365/90\"\n\"3689-1918\"\n\"3537-1774\"\n\"788-458\"\n\"22174-12260\"\n\"17558-9562\"\n\"288-204\"\n\"SUM(B10:B16)\"\n\"975618-N20-N21\"\n\"18331-O20-O21\"\n\"SUM(B19:B21)\"\n\"34548-17409\"\n\"7296-3850\"\n\"3849+1\"\n\"8776-4452\"\n\"+B27+B22+B17\"\n\"+C10/B10\"\n\"+F10/E10*366/92\"\n\"+L10/K10*366/91\"\n\"SUM(B10:B16)\"\n\"984565-B20-B21\"\n\"982315-E20-E21\"\n\"18357-L20-L21\"\n\"SUM(B19:B21)\"\n\"+B27+B22+B17\"\n\"1488811-37000\"\n\"1451872-37000-1\"\n\"1327046-25000\"\n\"1024704+100543+1\"\n\"13952\"\n\"4699+1\"\n\"8517+9476+6576\"\n\"SUM(B8:B14)\"\n\"1163906+297201-B18\"\n\"1350699-C18-C19\"\n\"1311946-D18\"\n\"1354978-E18\"\n\"1058597-F18\"\n\"1011729-G18\"\n\"1007506-H18\"\n\"1114674-I18\"\n\"1168306-J18-J19\"\n\"1099487-K19-K18\"\n\"1106939-29484-14870\"\n\"1029999-M18-M19\"\n\"934437-N18-N19\"\n\"SUM(B17:B19)\"\n\"SUM(I17:I18)\"\n\"5555+492547-1\"\n\"+B25+B20+B15\"\n\"49023-1448\"\n\"52176-H13-H14\"\n\"51892-I13-I14\"\n\"49238-J13-J14\"\n\"15014+1\"\n\"SUM(B9:B16)\"\n\"SUM(B17:B19)\"\n\"16585+1358\"\n\"+B23+B26\"\n\"+B23/B44\"\n\"+B27/B44\"\n\"+W27/3682329\"\n\"+X27/3678342\"\n\"+Y27/3594193\"\n\"+Z27/3626228\"\n\"+(B19+B9+B10+B12)/B41\"\n\"+(B16+B13)/B42\"\n\"(+B14+B13+B12)/B43\"\n\"+P14/P43\"\n\"+B20/B44\"\n\"+'PERIOD-END LOAN PORFOLIO ANALYS'!B15\"\n\"+'PERIOD-END LOAN PORFOLIO ANALYS'!B25\"\n\"+'PERIOD-END LOAN PORFOLIO ANALYS'!B20\"\n\"+C23\"\n\"11421-I10\"\n\"9703-4073\"\n\"23285-I12\"\n\"26918-15818\"\n\"SUM(B10:B13)\"\n\"2306-I16\"\n\"2252-1440\"\n\"8-I17\"\n\"4372-I18\"\n\"3728-1750\"\n\"-B20+B14\"\n\"30345-13145\"\n\"+B8-B21+B22\"\n\"+B21/'STATEMENTS OF CONDITION'!B10*365/92\"\n\"+D21/'STATEMENTS OF CONDITION'!D10*365/91\"\n\"+E21/'STATEMENTS OF CONDITION'!E10*365/90\"\n\"+J21/'STATEMENTS OF CONDITION'!#REF!*365/92\"\n\"+L21/'STATEMENTS OF CONDITION'!#REF!*365/91\"\n\"+M21/'STATEMENTS OF CONDITION'!#REF!*365/90\"\n\"+B22/'STATEMENTS OF CONDITION'!B10*365/92\"\n\"+D22/'STATEMENTS OF CONDITION'!D10*365/91\"\n\"+E22/'STATEMENTS OF CONDITION'!E10*365/90\"\n\"+B23/'COMPONENTS OF NONPERFORMING '!B44\"\n\"237489-I7\"\n\"7508-I8\"\n\"146049+88955-I9\"\n\"78384-4942\"\n\"65647-5196\"\n\"78073-18037\"\n\"75001482.47/38122651\"\n\"+I11-F11\"\n\"749+83\"\n\"1138+196\"\n\"SUM(F14:F15)\"\n\"F12/F14\"\n\"F14-(F12/I21)\"\n\"F12/F15\"\n\"F15-(F12/I22)\"\n\"F14/F15\"\n\"F15-(F14/I23)\"\n\"F15/F14\"\n\"F15-(F14*I24)\"\n\"+'[2]Operating History'!N9+9094000\"\n\"+F12\"\n\"+D32/E32\"\n\"147110940*1.05\"\n\"J32*F12\"\n\"+'[2]Operating History'!N10\"\n\"+E32\"\n\"6554555*1.05\"\n\"J33*F12\"\n\"+'[2]Operating History'!N14\"\n\"(50414907-G46)*1.05\"\n\"10551096*1.05\"\n\"20647342*1.05\"\n\"SUM(D36:D38)\"\n\"+F14\"\n\"J39*F14\"\n\"+E32\"\n\"66628035*1.05\"\n\"J43*F12\"\n\"+F11\"\n\"51476151*1.05\"\n\"J44*F11\"\n\"+E39\"\n\"12582332*1.05\"\n\"J45*F14\"\n\"+E39\"\n\"9905026*1.05\"\n\"J46*F14\"\n\"+'[2]Operating History'!N24-9094000\"\n\"+F16\"\n\"17780421*1.05\"\n\"+E39\"\n\"SUM(D43:D48)\"\n\"+D49+D39+D34\"\n\"+E32\"\n\"104642138*1.05\"\n\"J56*F12\"\n\"+E32\"\n\"73375801*1.05\"\n\"J57*F12\"\n\"+'[2]Operating History'!N35\"\n\"+E39\"\n\"J60*F14\"\n\"+'[2]Operating History'!N36\"\n\"+E39\"\n\"36933071*1.05\"\n\"J62*F14\"\n\"SUM(D56:D62)\"\n\"+'[3]Operating History'!N41+'[3]Operating History'!N42\"\n\"+E44\"\n\"31427338*1.05\"\n\"J66*F11\"\n\"+'[2]Operating History'!N43\"\n\"13623388*1.05\"\n\"J67*F11\"\n\"+F16\"\n\"22058261*1.05\"\n\"J68*F15\"\n\"20972283*1.05\"\n\"+I18\"\n\"J69*F18\"\n\"+E32\"\n\"17627843*1.05\"\n\"J70*F12\"\n\"+E44\"\n\"47484951*1.05\"\n\"J71*F11\"\n\"5266274*1.05\"\n\"+D73+D63\"\n\"+E32/E44\"\n\"+E56/E60\"\n\"+E66/E60\"\n\"+(E68-E60)/E56\"\n\"(H68-H60)/H56\"\n\"(E68-E62)/E66\"\n\"(H68-H60)/H66\"\n\"+E69/F12\"\n\"+F86-I86\"\n\"+J86*F12\"\n\"ROUND(+E69/I86,-1)\"\n\"ROUND(L87/(F12/F11),-2)\"\n\"+E69/E66\"\n\"+E69/E60\"\n\"+H69/H62\"\n\"+E69/E68\"\n\"+E69/F16\"\n\"+J95*F16\"\n\"+C8+D8\"\n\"+E8-J8\"\n\"+(B17)*4\"\n\"+(B17)*4\"\n\"(G17)*4\"\n\"SUM(B8:B34)\"\n\"B6-D6\"\n\"SUM(B6:B27)\"\n\"SUM(C8:E8)\"\n\"+F8-L8\"\n\"+(B17)*3\"\n\"+(B17)*3\"\n\"+(B17)*3\"\n\"(H17)*3\"\n\"H17*3\"\n\"+B18*3\"\n\"+B19*3\"\n\"B19*3\"\n\"B21*3\"\n\"+I21+K21\"\n\"SUM(B8:B34)\"\n\"0.01*(G16+G17)\"\n\"G9\"\n\"SUM(C5:C11)\"\n\"C44\"\n\"D44+C18\"\n\"0-C44\"\n\"C19-D44\"\n\"F19-G44+F20\"\n\"C43\"\n\"D43+C20\"\n\"IF(C21<>C12,C12-C21,\"\" \"\")\"\n\"C5/(C16+C17)\"\n\"SUM(C27:C29)\"\n\"SUM(C32:C37)\"\n\"C30-C38\"\n\"C39+C40\"\n\"C41-C42\"\n\"C30*0.1\"\n\"4*(C27/(C5))\"\n\"4*(D27/((D5+C5)/2))\"\n\"4*(C28/(C8))\"\n\"4*(D28/((D8+C8)/2))\"\n\"(C43/(C12))*4\"\n\"(D43/((D12+C12)/2))*4\"\n\"4*(C42/(C16))\"\n\"4*(D42/(D16+D17))\"\n\"(C42/(C12))*4\"\n\"(D42/((D12+C12)/2))*4\"\n\"(C12-(C14+C15))/(C16+C17)\"\n\"SUM(C18:C20)/C12\"\n\"(D16-C16)/C16\"\n\"(D25-C25)/C25\"\n\"C16/C25\"\n\"SUM(H9+A8)\"\n\"SUM(H9:H63)\"\n\"IF(G$33=0,0,(D11/G$33))\"\n\"F11*G$37\"\n\"SUM(D12:D13)\"\n\"SUM(D23+D20+D19+D18+D17+D14+D11)\"\n\"SUM(D24:D26)\"\n\"IF(E34=0,0,(F34/E34))\"\n\"F28\"\n\"F36-F38\"\n\"E34+E35-E37\"\n\"E38*G38\"\n\"SUM(D8:D31)\"\n\"D32-G32\"\n\"SUM(D34:D36)\"\n\"SUM(B6:B10)\"\n\"C11\"\n\"SUM(B17:C17)\"\n\"SUM(B16:B18)\"\n\"+D21-D17\"\n\"+D23-D17\"\n\"+D23-D21\"\n\"SUM(E13:I13)\"\n\"SUM(J13:J16)\"\n\"SUM(J19:J25)\"\n\"SUM(J33:J34)\"\n\"J17+J26+J28+J35\"\n\"+B19+B18\"\n\"+B19+B18\"\n\"+B20-B22\"\n\"+B20-B22\"\n\"G15\"\n\"1+B6\"\n\"1+C7\"\n\"IF($B$13=\"\"Yes\"\",$B$11,0)\"\n\"SUM(B20:B30)\"\n\"SUM(G20:G31)\"\n\"($B$9*B32)\"\n\"SUM(B32:B33)\"\n\"SUM(B34,G34)\"\n\"SUM(G41:G54)\"\n\"SUM(B41:B55)\"\n\"SUM(B60,G58)\"\n\"SUM(G64:G89)\"\n\"B95+G93\"\n\"SUM(G97:G104)\"\n\"B110+G109\"\n\"SUM(B34,B60,B95,B112)\"\n\"SUM(G34,G58,G93,G109)+B117\"\n\"B14*C14\"\n\"SUM(D14:D20)\"\n\"-PMT($D$11,$D$9,J22,0)\"\n\"-PMT($D$11,$D$10,D22,0)\"\n\"SUM(D25,J24)\"\n\"D10*D25\"\n\"A29*D25\"\n\"A32*D25\"\n\"A35*D25\"\n\"-PMT($D$40,$D$39,D44,0)\"\n\"D45*D39\"\n\"'Equipment Expense'!$D$44\"\n\"'Equipment Expense'!J44\"\n\"'Equipment Expense'!$D$39\"\n\"'Equipment Expense'!$D$40\"\n\"-PMT(0,H4,E3)\"\n\"'Equipment Expense'!$D$45\"\n\"'Equipment Expense'!J45\"\n\"E3\"\n\"D11*$E$5\"\n\"$E$6-E11\"\n\"D11-F11\"\n\"F11+N11\"\n\"E11+M11\"\n\"G11+O11\"\n\"$H$5\"\n\"G11\"\n\"M3\"\n\"L23*$M$5\"\n\"$M$6-M23\"\n\"$H$5+$P$5\"\n\"$P$5\"\n\"SUM(B6:B10)\"\n\"A17*$B$11\"\n\"E17*$F$11\"\n\"SUM(B17:B24)\"\n\"SUM(B29:B32)\"\n\"SUM(B37:B43)\"\n\"SUM(B25,B33,B44)\"\n\"'Pipeline assumptions'!$A$16+('Pipeline assumptions'!$A$17*Pipeline!C7)\"\n\"IF(B7=\"\"Closed\"\",'Pipeline assumptions'!$A$18*Pipeline!C7,\"\"-\"\")\"\n\"IF($B7=\"\"Closed\"\",$E7*(1-$F7),IF($B7=\"\"Contract\"\",(('Pipeline assumptions'!$A$16+'Pipeline assumptions'!$A$17*Pipeline!$C7)*'Pipeline assumptions'!$D$8),IF($B7=\"\"Eval\"\",(('Pipeline assumptions'!$A$16+'Pipeline assumptions'!$A$17*Pipeline!$C7)*'Pipeline assumptions'!$D$9),IF($B7=\"\"Proposal\"\",(('Pipeline assumptions'!$A$16+'Pipeline assumptions'!$A$17*Pipeline!$C7)*'Pipeline assumptions'!$D$10),IF($B7=\"\"Require\"\",(('Pipeline assumptions'!$A$16+'Pipeline assumptions'!$A$17*Pipeline!$C7)*'Pipeline assumptions'!$D$11),IF($B7=\"\"Response\"\",(('Pipeline assumptions'!$A$16+'Pipeline assumptions'!$A$17*Pipeline!$C7)*'Pipeline assumptions'!$D$12),0))))))\"\n\"IF($B7=\"\"Closed\"\",G7*3,IF($B7=\"\"Contract\"\",((E7-H7)*'Pipeline assumptions'!$E$8),IF($B7=\"\"Eval\"\",((E7-H7)*'Pipeline assumptions'!$E$9),IF($B7=\"\"Proposal\"\",((E7-H7)*'Pipeline assumptions'!$E$10),IF($B7=\"\"Require\"\",((E7-H7)*'Pipeline assumptions'!$E$11),IF($B7=\"\"Response\"\",((E7-H7)*'Pipeline assumptions'!$E$12),0))))))\"\n\"SUM(H7:H31)\"\n\"'Pipeline assumptions'!$A$16+('Pipeline assumptions'!$A$17*C8)\"\n\"C8*'Pipeline assumptions'!$A$18\"\n\"E8*(1-F8)\"\n\"3*G8\"\n\"IF($D8=\"\"Sales Assoc1\"\",$E8,\"\"-\"\")\"\n\"IF($D8=\"\"Sales Assoc2\"\",$E8,\"\"-\"\")\"\n\"IF(D9=\"\"Sales Assoc1\"\",E9,\"\"-\"\")\"\n\"SUM(H8:H9)\"\n\"SUM(H13:H15)\"\n\"SUM(H25:H29)\"\n\"SUM(H10,H16,H21)\"\n\"Pipeline!A7\"\n\"$B$9*'Closed Sales'!$H10\"\n\"$B$9*'Closed Sales'!$H16\"\n\"$B$9*'Closed Sales'!$H21\"\n\"$B$9*'Closed Sales'!$H30\"\n\"IF('Closed Sales'!$H10>Quota!$B$7,$B$10*'Closed Sales'!$H10,\"\"-\"\")\"\n\"IF('Closed Sales'!$H16>Quota!$B$7,$B$10*('Closed Sales'!$H16-$B$7),\"\"-\"\")\"\n\"IF('Closed Sales'!$H21>Quota!$B$7,$B$10*('Closed Sales'!$H21-$B$7),\"\"-\"\")\"\n\"$B$15*'Closed Sales'!$M10\"\n\"$B$15*'Closed Sales'!$M16\"\n\"$B$15*'Closed Sales'!$M21\"\n\"$B$15*'Closed Sales'!$M30\"\n\"IF('Closed Sales'!$M10>Quota!$B$14,$B$16*('Closed Sales'!$M10-$B$14),\"\"-\"\")\"\n\"IF('Closed Sales'!$M16>Quota!$B$14,$B$16*('Closed Sales'!$M16-$B$14),\"\"-\"\")\"\n\"IF('Closed Sales'!$H$10>Quota!$B$7,$B$17,\"\"-\"\")\"\n\"IF('Closed Sales'!$H$16>Quota!$B$7,$B$17,\"\"-\"\")\"\n\"IF('Closed Sales'!$H$21>Quota!$B$7,$B$17,\"\"-\"\")\"\n\"$B$15*'Closed Sales'!$N10\"\n\"$B$15*'Closed Sales'!$N16\"\n\"$B$15*'Closed Sales'!$N21\"\n\"$B$15*'Closed Sales'!$N30\"\n\"IF('Closed Sales'!$N10>Quota!$B$14,$B$16*('Closed Sales'!$M10-$B$14),\"\"-\"\")\"\n\"IF('Closed Sales'!$N16>Quota!$B$14,$B$16*('Closed Sales'!$N16-$B$14),\"\"-\"\")\"\n\"'Closed Sales'!$H$10*$B$20\"\n\"'Closed Sales'!$H$16*$B$20\"\n\"'Closed Sales'!$H$21*$B$20\"\n\"SUM(B25:B51)\"\n\"'Closed Sales'!E8+'Closed Sales'!E9\"\n\"'Closed Sales'!H16+SUM('Closed Sales'!I8:I9)\"\n\"'Closed Sales'!H21+SUM('Closed Sales'!I8:I15)\"\n\"'Closed Sales'!H30+SUM('Closed Sales'!I8:I29)\"\n\"SUM(F14:I14)\"\n\"Pipeline!H34+SUM('Closed Sales'!I8:I29)\"\n\"Revenue!K14*(1+D6)\"\n\"Revenue!L14*(1+D6)\"\n\"Revenue!M14*(1+D6)\"\n\"20000\"\n\"H14*D5\"\n\"I14*D5\"\n\"K14*$D$5\"\n\"SUM(F14:F15)\"\n\"$F14*0.2\"\n\"$F14*0.3\"\n\"$F14*0.5\"\n\"$G14*0.2\"\n\"$G14*0.3\"\n\"$G14*0.5\"\n\"$H14*0.2\"\n\"$H14*0.3\"\n\"$H14*0.5\"\n\"$I14*0.2\"\n\"$I14*0.3\"\n\"$I14*0.5\"\n\"$K14*0.2\"\n\"$K14*0.3\"\n\"$K14*0.5\"\n\"$L14*0.2\"\n\"$L14*0.3\"\n\"$L14*0.5\"\n\"$M14*0.2\"\n\"$M14*0.3\"\n\"$M14*0.5\"\n\"$N14*0.2\"\n\"$N14*0.3\"\n\"$N14*0.5\"\n\"Revenue!F23\"\n\"Revenue!F32\"\n\"SUM(D6:D7)\"\n\"1%*D6\"\n\"Employees!$B$110\"\n\"Employees!$G$110\"\n\"D8-D13\"\n\"((Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$B$53/3)*0.5\"\n\"((Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$B$53/3)*0.75\"\n\"(Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$B$53/3\"\n\"(Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$C$53/3\"\n\"(Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$D$53/3\"\n\"(Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+Quota!$E$53/3\"\n\"(Employees!$B$60+'Service Expense'!$B$25+'Equipment Expense'!$D$29)+P6*0.05\"\n\"(Employees!$G$60+'Equipment Expense'!$J$29+'Service Expense'!$F$25)+T6*0.05\"\n\"((Employees!$B$95+'Equipment Expense'!$D$32+'Service Expense'!$B$33))*0.5\"\n\"((Employees!$B$95+'Equipment Expense'!$D$32+'Service Expense'!$B$33))*0.75\"\n\"(Employees!$B$95+'Equipment Expense'!$D$32+'Service Expense'!$B$33)\"\n\"Employees!$G$95+'Equipment Expense'!$J$25+'Service Expense'!$F$33\"\n\"((Employees!$B$34+'Equipment Expense'!$D$35+'Service Expense'!$B$44))*0.5\"\n\"(Employees!$B$34+'Equipment Expense'!$D$35+'Service Expense'!$B$44)*0.75\"\n\"(Employees!$B$34+'Equipment Expense'!$D$35+'Service Expense'!$B$44)\"\n\"Employees!$G$36+'Equipment Expense'!$J$35+'Service Expense'!$F$44\"\n\"'Cap Lease'!U11\"\n\"'Cap Lease'!U12\"\n\"'Cap Lease'!U13\"\n\"'Cap Lease'!U14\"\n\"'Cap Lease'!U15\"\n\"'Cap Lease'!U16\"\n\"'Cap Lease'!U17\"\n\"'Cap Lease'!U18\"\n\"'Cap Lease'!U19\"\n\"'Cap Lease'!U20\"\n\"'Cap Lease'!U21\"\n\"'Cap Lease'!U22\"\n\"'Cap Lease'!U23\"\n\"'Cap Lease'!U24\"\n\"'Cap Lease'!U25\"\n\"'Cap Lease'!U26\"\n\"'Cap Lease'!U27\"\n\"'Cap Lease'!U28\"\n\"'Cap Lease'!U29\"\n\"'Cap Lease'!U30\"\n\"'Cap Lease'!U31\"\n\"'Cap Lease'!U32\"\n\"'Cap Lease'!U33\"\n\"'Cap Lease'!U34\"\n\"SUM(D18:D21)\"\n\"D15-D22\"\n\"(3000000*0.0025)-'Cap Lease'!S11\"\n\"('Balance Sheet'!E6*0.0025)-'Cap Lease'!$S$12\"\n\"('Balance Sheet'!F6*0.0025)-'Cap Lease'!$S$13\"\n\"('Balance Sheet'!G6*0.0025)-'Cap Lease'!$S$14\"\n\"('Balance Sheet'!H6*0.0025)-'Cap Lease'!$S$15\"\n\"('Balance Sheet'!I6*0.0025)-'Cap Lease'!$S$16\"\n\"('Balance Sheet'!J6*0.0025)-'Cap Lease'!$S$17\"\n\"('Balance Sheet'!K6*0.0025)-'Cap Lease'!$S$18\"\n\"('Balance Sheet'!L6*0.0025)-'Cap Lease'!$S$19\"\n\"('Balance Sheet'!M6*0.0025)-'Cap Lease'!$S$20\"\n\"('Balance Sheet'!N6*0.0025)-'Cap Lease'!$S$21\"\n\"('Balance Sheet'!O6*0.0025)-'Cap Lease'!$S$22\"\n\"D23+D24\"\n\"D25\"\n\"SUM('Monthly P&L'!D6:F6)\"\n\"SUM('Monthly P&L'!G6:I6)\"\n\"SUM('Monthly P&L'!J6:L6)\"\n\"SUM('Monthly P&L'!M6:O6)\"\n\"SUM(D6:G6)\"\n\"SUM('Monthly P&L'!S6:U6)\"\n\"SUM('Monthly P&L'!V6:X6)\"\n\"SUM('Monthly P&L'!Y6:AA6)\"\n\"SUM(D6:D7)\"\n\"D8-D13\"\n\"'Quarterly P&L'!H3\"\n\"'Quarterly P&L'!N3:N27\"\n\"'Quarterly P&L'!N4\"\n\"F6*(1+$O$5)\"\n\"H6*(1+$Q$5)\"\n\"F7*(1+$O$6)\"\n\"H7*(1+$Q$6)\"\n\"SUM(H6:H7)\"\n\"H8*$O$9\"\n\"J8*$Q$9\"\n\"H8*$O$10\"\n\"J8*$Q$10\"\n\"H8-H13\"\n\"H8*O11\"\n\"J8*$Q$11\"\n\"H8*O12\"\n\"J8*$Q$12\"\n\"H8*O13\"\n\"J8*$Q$13\"\n\"SUM(H18:H21)\"\n\"H15-H22\"\n\"H23+H24\"\n\"H25*(O14)\"\n\"J25*($Q$14)\"\n\"H25-H26\"\n\"'Stmt of CF'!E29\"\n\"0.2*'Monthly P&L'!D$8\"\n\"E8\"\n\"SUM(D6:D8)\"\n\"'Cap Lease'!E3\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I11\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I12\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I13\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I14\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I15\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I16\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I17\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I18\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I19\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I20\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I21\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I22\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I23\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I24\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I25\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I26\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I27\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I28\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I29\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I30\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I31\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I32\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I33\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I34\"\n\"SUM(D11:D12)\"\n\"E11-E12\"\n\"SUM(D9,D13)\"\n\"0.15*'Monthly P&L'!D$8\"\n\"0.025*'Monthly P&L'!D8\"\n\"'Cap Lease'!$R$11\"\n\"'Cap Lease'!$R$12\"\n\"'Cap Lease'!$R$13\"\n\"'Cap Lease'!$R$14\"\n\"'Cap Lease'!$R$15\"\n\"'Cap Lease'!$R$16\"\n\"'Cap Lease'!$R$17\"\n\"'Cap Lease'!$R$18\"\n\"'Cap Lease'!$R$19\"\n\"'Cap Lease'!$R$20\"\n\"'Cap Lease'!$R$21\"\n\"'Cap Lease'!$R$22\"\n\"'Cap Lease'!$R$23\"\n\"'Cap Lease'!$R$24\"\n\"'Cap Lease'!$R$25\"\n\"'Cap Lease'!$R$26\"\n\"'Cap Lease'!$R$27\"\n\"'Cap Lease'!$R$28\"\n\"'Cap Lease'!$R$29\"\n\"'Cap Lease'!$R$30\"\n\"'Cap Lease'!$R$31\"\n\"'Cap Lease'!$R$32\"\n\"'Cap Lease'!$R$33\"\n\"'Cap Lease'!$R$34\"\n\"SUM(D18:D21)\"\n\"'Cap Lease'!T11\"\n\"'Cap Lease'!$T$12\"\n\"'Cap Lease'!$T$13\"\n\"'Cap Lease'!$T$14\"\n\"'Cap Lease'!$T$15\"\n\"'Cap Lease'!$T$16\"\n\"'Cap Lease'!$T$17\"\n\"'Cap Lease'!$T$18\"\n\"'Cap Lease'!$T$19\"\n\"'Cap Lease'!$T$20\"\n\"'Cap Lease'!$T$21\"\n\"'Cap Lease'!$T$22\"\n\"'Cap Lease'!$T$23\"\n\"'Cap Lease'!$T$24\"\n\"'Cap Lease'!$T$25\"\n\"'Cap Lease'!$T$26\"\n\"'Cap Lease'!$T$27\"\n\"'Cap Lease'!$T$28\"\n\"'Cap Lease'!$T$29\"\n\"'Cap Lease'!$T$30\"\n\"'Cap Lease'!$T$31\"\n\"'Cap Lease'!$T$32\"\n\"'Cap Lease'!$T$33\"\n\"'Cap Lease'!$T$34\"\n\"'Cap Lease'!$T$35\"\n\"D25\"\n\"D26+D22\"\n\"(E14-(E27+E33+E31))\"\n\"(Q14-(Q27+Q33+Q32+Q31))\"\n\"SUM(D31:D35)\"\n\"SUM(D27+D36)\"\n\"'Monthly P&L'!D27\"\n\"'Monthly P&L'!D21\"\n\"'Balance Sheet'!D20\"\n\"'Balance Sheet'!D7-'Balance Sheet'!E7\"\n\"-(('Balance Sheet'!D18+'Balance Sheet'!D19)-('Balance Sheet'!E18+'Balance Sheet'!E19))\"\n\"SUM(D6:D13)\"\n\"'Balance Sheet'!E21\"\n\"E18\"\n\"E23\"\n\"E14-E19+E24\"\n\"D29\"\n\"SUM(D27:D28)\"\n\"C3/C4\"\n\"D5\"\n\"C12/$C$17\"\n\"E12/$E$17\"\n\"E5\"\n\"SUM(C12:C15)\"\n\"SUM(E12:E16)\"\n\"D4*C17\"\n\"E17*E4\"\n\"'Stmt of CF'!E29\"\n\"0.2*'Monthly P&L'!D$8\"\n\"E8\"\n\"SUM(D6:D8)\"\n\"'Cap Lease'!E3\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I11\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I12\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I13\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I14\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I15\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I16\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I17\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I18\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I19\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I20\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I21\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I22\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I23\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I24\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I25\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I26\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I27\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I28\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I29\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I30\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I31\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I32\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I33\"\n\"'Cap Lease'!$H$5*'Cap Lease'!$I34\"\n\"SUM(D11:D12)\"\n\"E11-E12\"\n\"SUM(D9,D13)\"\n\"0.15*'Monthly P&L'!D$8\"\n\"0.025*'Monthly P&L'!D8\"\n\"'Cap Lease'!$R$11\"\n\"'Cap Lease'!$R$12\"\n\"'Cap Lease'!$R$13\"\n\"'Cap Lease'!$R$14\"\n\"'Cap Lease'!$R$15\"\n\"'Cap Lease'!$R$16\"\n\"'Cap Lease'!$R$17\"\n\"'Cap Lease'!$R$18\"\n\"'Cap Lease'!$R$19\"\n\"'Cap Lease'!$R$20\"\n\"'Cap Lease'!$R$21\"\n\"'Cap Lease'!$R$22\"\n\"'Cap Lease'!$R$23\"\n\"'Cap Lease'!$R$24\"\n\"'Cap Lease'!$R$25\"\n\"'Cap Lease'!$R$26\"\n\"'Cap Lease'!$R$27\"\n\"'Cap Lease'!$R$28\"\n\"'Cap Lease'!$R$29\"\n\"'Cap Lease'!$R$30\"\n\"'Cap Lease'!$R$31\"\n\"'Cap Lease'!$R$32\"\n\"'Cap Lease'!$R$33\"\n\"'Cap Lease'!$R$34\"\n\"SUM(D18:D21)\"\n\"'Cap Lease'!T11\"\n\"'Cap Lease'!$T$12\"\n\"'Cap Lease'!$T$13\"\n\"'Cap Lease'!$T$14\"\n\"'Cap Lease'!$T$15\"\n\"'Cap Lease'!$T$16\"\n\"'Cap Lease'!$T$17\"\n\"'Cap Lease'!$T$18\"\n\"'Cap Lease'!$T$19\"\n\"'Cap Lease'!$T$20\"\n\"'Cap Lease'!$T$21\"\n\"'Cap Lease'!$T$22\"\n\"'Cap Lease'!$T$23\"\n\"'Cap Lease'!$T$24\"\n\"'Cap Lease'!$T$25\"\n\"'Cap Lease'!$T$26\"\n\"'Cap Lease'!$T$27\"\n\"'Cap Lease'!$T$28\"\n\"'Cap Lease'!$T$29\"\n\"'Cap Lease'!$T$30\"\n\"'Cap Lease'!$T$31\"\n\"'Cap Lease'!$T$32\"\n\"'Cap Lease'!$T$33\"\n\"'Cap Lease'!$T$34\"\n\"'Cap Lease'!$T$35\"\n\"D25\"\n\"D26+D22\"\n\"(E14-(E27+E32+E30))\"\n\"(Q14-(Q27+Q32+Q31+Q30))\"\n\"SUM(D30:D34)\"\n\"SUM(D27+D35)\"\n\"SUM(K7:K9)\"\n\"K19\"\n\"SUM(K10:K13)\"\n\"SUM(K17:K18)\"\n\"SUM(H31:H32)\"\n\"H53\"\n\"J53+1.1\"\n\"SUM(K12:K13)\"\n\"K33+K29\"\n\"SUM(K34:K36)\"\n\"SUM(K44:K49)\"\n\"SUM(I7:M7)\"\n\"SUM(I7:I12)\"\n\"O19+O17+O13\"\n\"SUM(O27:O30)\"\n\"SUM(O31:O32)\"\n\"O19\"\n\"O13\"\n\"SUM(C18:C19)\"\n\"C20+C21+C24\"\n\"+C27\"\n\"SUM(C39:C41)\"\n\"SUM(C43:C47)\"\n\"+C48+C42\"\n\"SUM(C19:C20)\"\n\"C21+C22+C25\"\n\"+C28\"\n\"SUM(C40:C42)\"\n\"SUM(C44:C48)\"\n\"+C49+C43\"\n\"8.2+6.1+6.6\"\n\"7.3+6+4.4\"\n\"-1.2-0.2-1.1\"\n\"SUM(C19:C20)\"\n\"17.9+0.6+1-0.1\"\n\"0.2-6.8-4.6\"\n\"-0.6+1.2\"\n\"C21+C22+C25\"\n\"-7.3+0.2-0.1\"\n\"+C28\"\n\"4.8+10.5\"\n\"88.3-54.3\"\n\"8.5+0.4\"\n\"SUM(C40:C42)\"\n\"-25.8+4.1+(11.2)-0.5\"\n\"SUM(C44:C48)\"\n\"+C49+C43\"\n\"16.8+11.2+1.9\"\n\"111.8+2.2+0.1-0.1\"\n\"5.5-0.1\"\n\"SUM(J10:M10)\"\n\"37-0.2\"\n\"-22.7+0.1\"\n\"SUM(J9:J16)\"\n\"14.9+21.1+0.1\"\n\"SUM(I8:I12)\"\n\"SUM(M9:M12)\"\n\"SUM(I42:I43)\"\n\"J12\"\n\"22-10.3\"\n\"SUM(H10:H11)\"\n\"J27\"\n\"J34+J37+J39\"\n\"SUM(L34:L39)\"\n\"J40/H34*100\"\n\"L40/H34*100\"\n\"H34\"\n\"L46\"\n\"SUM(H44:H46)\"\n\"100*Q48/O48\"\n\"100*S48/O48\"\n\"SUM(K7:K16)\"\n\"SUM(K20:K41)\"\n\"SUM(K45:K46)\"\n\"K47+K42+K17\"\n\"SUM(K12:K14)\"\n\"SUM(K32:K41)\"\n\"K45+K42\"\n\"SUM(K53:K59)\"\n\"-0.1-0.2\"\n\"0.7-0.1\"\n\"SUM(L11:L16)\"\n\"SUM(F27:L27)\"\n\"SUM(F27:F28)\"\n\"SUM(F29:F32)\"\n\"+N51\"\n\"J29\"\n\"+J30\"\n\"SUM(L43:L47)\"\n\"L33+H33\"\n\"+L50+L42\"\n\"N50+N42\"\n\"-5.4-0.3\"\n\"SUM(E19:M19)\"\n\"SUM(M50:M51)\"\n\"D1\"\n\"E3+31\"\n\"$D$1+B6*31\"\n\"IF(E$3>=$C6,$D6/12,0)\"\n\"SUM(D6:D32)\"\n\"COUNTIF(E6:E32, \"\">0\"\")\"\n\"SUM(D37:D43)\"\n\"COUNTIF(E37:E43, \"\">0\"\")\"\n\"SUM(D59:D66)\"\n\"COUNTIF(E59:E66, \"\">0\"\")\"\n\"SUM(D67+D55+D44+D33)\"\n\"SUM(E71:G71)\"\n\"Payroll!D1\"\n\"E1\"\n\"E3+31\"\n\"SUM(D5)/B5\"\n\"SUM(E5:AN5)\"\n\"2*$B$5\"\n\"1*$B$5\"\n\"3*$B$6\"\n\"8*$B$6\"\n\"3*$B$7\"\n\"SUM(D6:D17)\"\n\"SUM(F6:F18)\"\n\"SUM(D23:D25)\"\n\"SUM(F23:F26)\"\n\"SUM(E19+E27)\"\n\"Payroll!E72\"\n\"SUM(E27:G27)\"\n\"Payroll!D1\"\n\"C1\"\n\"D3+31\"\n\"SUM(D4:AM4)\"\n\"$B5\"\n\"$B$20\"\n\"SUM(C4:C26)\"\n\"SUM(D4:D10)\"\n\"SUM(D4:D26)\"\n\"Payroll!E72\"\n\"SUM(D29:F29)\"\n\"Payroll!D1\"\n\"C1\"\n\"D3+31\"\n\"B6/B5\"\n\"SUM(M9:M12)\"\n\"M14*$B$7\"\n\"C15/$B$6\"\n\"$B$18\"\n\"M15*M18\"\n\"B6*B18*12\"\n\"IF(C9>0,C19/C9, 0)\"\n\"N19/COUNTIF(N9:N13,\"\">0\"\")*12\"\n\"M30*$B28\"\n\"M31/#REF!\"\n\"M31/$B27\"\n\"$B35\"\n\"M31*M35\"\n\"B27*B35*12\"\n\"B28*B35*12\"\n\"M36/M30*12\"\n\"M48/$B44\"\n\"B44*B51*12\"\n\"B45*B51*12\"\n\"M52/M47*12\"\n\"M64/Payroll!N72\"\n\"O19/Payroll!P72\"\n\"IF(M62>0,('Capital Exp'!N29+Expenses!M29)/M62,0)\"\n\"M15+M31+M48\"\n\"M62/($B$6+$B$27+$B$44)\"\n\"SUM(C5:C62)\"\n\"D19+D36+D52\"\n\"D64\"\n\"Payroll!E72\"\n\"SUM(D66:F66)\"\n\"F70+I70+L70+O70\"\n\"'Rev-projections'!F70\"\n\"'Rev-projections'!I70\"\n\"'Rev-projections'!L80\"\n\"'Rev-projections'!O70\"\n\"'Rev-projections'!R70\"\n\"'Rev-projections'!U70\"\n\"'Rev-projections'!X70\"\n\"'Rev-projections'!AA70\"\n\"'Rev-projections'!AD70\"\n\"'Rev-projections'!AG70\"\n\"'Rev-projections'!AJ70\"\n\"'Rev-projections'!AM70\"\n\"Payroll!G75\"\n\"'Capital Exp'!G33\"\n\"SUM(Expenses!F33)\"\n\"SUM(C3:E3)\"\n\"Payroll!J75\"\n\"'Capital Exp'!J33\"\n\"SUM(Expenses!I33)\"\n\"SUM(Payroll!M75)\"\n\"'Capital Exp'!M33\"\n\"SUM(Expenses!L33)\"\n\"SUM(Payroll!P75)\"\n\"'Capital Exp'!S33\"\n\"SUM(Expenses!O33)\"\n\"SUM(F3:F6)\"\n\"SUM(Payroll!S75)\"\n\"'Capital Exp'!S33\"\n\"SUM(Expenses!R33)\"\n\"SUM(Payroll!V75)\"\n\"'Capital Exp'!V33\"\n\"SUM(Expenses!U33)\"\n\"Payroll!Y75\"\n\"'Capital Exp'!Y33\"\n\"SUM(Expenses!X33)\"\n\"SUM(Payroll!AB75)\"\n\"'Capital Exp'!AB33\"\n\"SUM(Expenses!AA33)\"\n\"SUM(Payroll!AE75)\"\n\"'Capital Exp'!AE33\"\n\"SUM(Expenses!AD33)\"\n\"SUM(Payroll!AH75)\"\n\"'Capital Exp'!AH33\"\n\"SUM(Expenses!AG33)\"\n\"SUM(Payroll!AK75)\"\n\"'Capital Exp'!AK33\"\n\"SUM(Expenses!AJ33)\"\n\"SUM(Payroll!AN75)\"\n\"'Capital Exp'!AN33\"\n\"SUM(Expenses!AM33)\"\n\"'Cost-Quarterly'!F3\"\n\"'Rev-Quarterly'!C3\"\n\"D3-C3\"\n\"SUM(D3:D6)\"\n\"SUM(G3:G6)\"\n\"SUM(E9:E50)\"\n\"SUM(J9:J51)\"\n\"SUM(D8:D18)\"\n\"SUM(H9:H18)\"\n\"SUM(C8:C22)\"\n\"SUM(C23-C24)\"\n\"SUM(C25:C28)\"\n\"SUM(C39:C52)\"\n\"SUM(E13:E75)\"\n\"SUM(J13:J74)\"\n\"B15-B17\"\n\"SUM(B20:K20)\"\n\"-1*A20/(0.1*SUM(B20:K20))\"\n\"NPV(C25, A20, B20:K20)\"\n\"NPV(C25,B15:K15)/((-1*A20)+NPV(C25,B17:K17))\"\n\"IRR(A20:K20, 50%)\"\n\"IF(C28>=C29,\"\"yes\"\",\"\"no\"\")\"\n\"157130-39952+93665-25907+313\"\n\"SUM(C9:C15)\"\n\"22767+37-C23\"\n\"SUM(C22:C25)\"\n\"+'Income Statement'!C40\"\n\"+'Income Statement'!D40\"\n\"+'Income Statement'!E40\"\n\"+C33+C26\"\n\"+'Actusl vs Budget'!F10+'Actusl vs Budget'!F11-E11\"\n\"SUM(C11:E11)\"\n\"+Convention!F10\"\n\"+Convention!F14+'Actusl vs Budget'!F14\"\n\"+'Actusl vs Budget'!F23\"\n\"+'Actusl vs Budget'!F25\"\n\"+'Actusl vs Budget'!F15\"\n\"+'Actusl vs Budget'!F22\"\n\"+'Actusl vs Budget'!F20+'Actusl vs Budget'!F24\"\n\"+'Actusl vs Budget'!F13+'Actusl vs Budget'!F16+'Actusl vs Budget'!F17+'Actusl vs Budget'!F18+'Actusl vs Budget'!F19+'Actusl vs Budget'!F27+Convention!F12+Convention!F11+'Actusl vs Budget'!F26+Convention!F13\"\n\"SUM(C11:C20)\"\n\"+C24+C22\"\n\"+'Actusl vs Budget'!F65\"\n\"+Convention!F34\"\n\"SUM(C31:C33)\"\n\"+C27-C34\"\n\"+C36+C38\"\n\"+C10-D10\"\n\"243930+1000\"\n\"111+157+91\"\n\"668+1156+1+104\"\n\"2144+1199\"\n\"7462+6012\"\n\"514+2938\"\n\"+Convention!C36\"\n\"SUM(C10:C28)\"\n\"-2+1690+671\"\n\"4563+4991\"\n\"31\"\n\"SUM(C31:C64)\"\n\"+C29-C65\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+'Actusl vs Budget'!A4:H4\"\n\"+C10-D10\"\n\"SUM(C10:C14)\"\n\"SUM(C17:C33)\"\n\"+C15-C34\"\n\"3877455.22+1416950+180000+10000+20000+50000\"\n\"1263712.51+72462+(5299077-72462-180000-10000-20000-50000-1416950)\"\n\"29329460\"\n\"+C25+C16+C17\"\n\"+C29+C21+C22\"\n\"65000+180622+291842-10109.24+1062884+190397\"\n\"SUM(C8:C35)\"\n\"+B5\"\n\"7440070+8590364+718191+612968+124318+3592053+3913652+8298945+382271-393290.77\"\n\"482986+814703+1144506+2486601+1828619\"\n\"3788795\"\n\"100997\"\n\"SUM(C45:C77)\"\n\"44219043+100997+2617173\"\n\"+C37-C79\"\n\"+B42\"\n\"10702296+634685.97\"\n\"7592562-634685.97\"\n\"10878707+8099543\"\n\"399214+9992234+17693263\"\n\"SUM(C92:C123)\"\n\"11508792+651974\"\n\"SUM(C130:C145)\"\n\"SUM(C152:C159)\"\n\"+C161+C147\"\n\"+B88\"\n\"8298945+382271\"\n\"G9/F9\"\n\"SUM(C9:C16)\"\n\"2830+63+38+35+48+34+48\"\n\"2808+63+38+35+48+34+48\"\n\"SUM(C24:C27)\"\n\"+(1365257+120000+150000)+4194522.27\"\n\"509243+1361801.29+(3501909.2-1874500-120000-150000)\"\n\"1075505+52413+141931+365710-282.67\"\n\"SUM(D8:D35)\"\n\"+B5\"\n\"(7993315+7100868+4845760+1167963+8072207+519145+2909120+436518+607220)-975549\"\n\"1893661+350417+872471+949456+2475988\"\n\"SUM(D45:D75)\"\n\"+D37-D77\"\n\"+B42\"\n\"10213978\"\n\"19541401-10213978\"\n\"651974+17036648\"\n\"SUM(C124:C139)\"\n\"SUM(C147:C152)\"\n\"SUM(D146:D153)\"\n\"+C155+C141\"\n\"+B86\"\n\"8072207+519145\"\n\"+'Grant Info'!B5\"\n\"+'Grant Info'!B4\"\n\"+'Grant Info'!B8\"\n\"+B6-C6\"\n\"+D38+F6\"\n\"+E6-F7\"\n\"SUM(B10:B15)\"\n\"+B16+B24+SUM(B25:B34)\"\n\"SUM(B35:B36)\"\n\"+C6-C37\"\n\"+F7-F37\"\n\"SUM(E7:E8)\"\n\"SUM(B21:B43)\"\n\"+B44-C44\"\n\"+D44/B44\"\n\"SUM(B49:B52)\"\n\"SUM(B59:B63)\"\n\"SUM(B69:B77)\"\n\"SUM(B103:B105)\"\n\"+E9\"\n\"SUM(B44+B53+B64+B78+B89+B98+B106)\"\n\"+C7-C11\"\n\"SUM(C17:C23)\"\n\"+D13-D25\"\n\"+C34\"\n\"SUM(C10:N10)\"\n\"SUM(C10:C13)\"\n\"+D10*0.5\"\n\"SUM(C19:C31)\"\n\"SUM(O21:O31)\"\n\"+C6+C14-C32\"\n\"SUM(G7:G8)\"\n\"SUM(B7:B17)\"\n\"SUM(G7:G15)\"\n\"SUM(B4:B12)\"\n\"+I11/$I$11\"\n\"+E11-'2nd QTR 02'!E11\"\n\"+J11-'2nd QTR 02'!J11\"\n\"+D11-'2nd QTR 02'!D11\"\n\"+P11/'2nd QTR 02'!$D11\"\n\"+I11-'2nd QTR 02'!I11\"\n\"+T11/'2nd QTR 02'!$I11\"\n\"+I11/$I$11\"\n\"+E11-'2nd QTR 02'!E11\"\n\"+J11-'2nd QTR 02'!J11\"\n\"+D11-'2nd QTR 02'!D11\"\n\"+P11/'2nd QTR 02'!$D11\"\n\"+I11-'2nd QTR 02'!I11\"\n\"+T11/'2nd QTR 02'!$I11\"\n\"+I11/$I$11\"\n\"+I11/$I$11\"\n\"SUM(D10:D15)\"\n\"C34-D34\"\n\"E34/D34\"\n\"SUM(D11:D17)\"\n\"D18/D19\"\n\"SUM(D27:D31)\"\n\"L43-L44\"\n\"L55/L56\"\n\"L55/L48\"\n\"L57/L45\"\n\"L43/L44\"\n\"L50/L51\"\n\"L43-L44/L45\"\n\"L46/L45\"\n\"L47/L45\"\n\"SUM(E16:E19)\"\n\"SUM(E22:E24)\"\n\"SUM(F22,F24)\"\n\"C15*C18*C19\"\n\"C17*'Detailed calculations'!B29/'Detailed calculations'!B30*0.47\"\n\"CONCATENATE(\"\"* Scrap price estimation based on LME at \"\",'Detailed calculations'!B29,\"\" $/ton and exchange rate of \"\",'Detailed calculations'!B30,\"\" $/Euro\"\")\"\n\"'Detailed calculations'!B11\"\n\"CONCATENATE(\"\"NET PRESENT VALUE assuming a discount rate of \"\",C22*100,\"\"%\"\")\"\n\"+'Detailed calculations'!B23\"\n\"12*(1-'Detailed calculations'!C17/'Detailed calculations'!D16)\"\n\"CONCATENATE(\"\"            \"\",-C16)\"\n\"IF(SIGN(C29)=1,CONCATENATE(\"\"                       +\"\",INT(C29+0.5)),CONCATENATE(\"\"                       \"\",INT(C29+0.5)))\"\n\"B1+1\"\n\"-'Economic Model'!C16\"\n\"'Economic Model'!C24\"\n\"C4\"\n\"C4+'Economic Model'!C25\"\n\"B4\"\n\"B5+C4\"\n\"SIGN(B5)\"\n\"((-C6*B6)+1)/2\"\n\"SUM(C8:L8)\"\n\"(C7*C1)-1*C7\"\n\"-B5/(C5-B5)*12*C7\"\n\"B8*12+B9\"\n\"L5\"\n\"'Economic Model'!C22\"\n\"B4\"\n\"C4/(1+'Economic Model'!$C$22)^C1\"\n\"(C19*C1)-1*C19\"\n\"NPV(D15,C4:L4)+B4\"\n\"1535\"\n\"D14*D15\"\n\"$D$16\"\n\"D20*F20\"\n\"I20-I21\"\n\"I21\"\n\"$K$13\"\n\"D26*I26*K26\"\n\"$K$16\"\n\"SUM(L26:L32)\"\n\"D40*I40\"\n\"SUM(L37:L40)\"\n\"SUM(E44:H44)\"\n\"I44*J44*K44\"\n\"$K$14\"\n\"$K$15\"\n\"SUM(L44:L46)\"\n\"I51*K51\"\n\"$K$17\"\n\"SUM(L59:L60)\"\n\"L33+L41-L47-L55-L61\"\n\"L33+L41-L61\"\n\"+SUM(G4:G8)\"\n\"+B10-B11\"\n\"+G12-SUM(G14:G17)+G18\"\n\"27+475-181\"\n\"+G19+G20\"\n\"C9-F9\"\n\"33.9+20\"\n\"+C12\"\n\"SUM(C8:C14)\"\n\"+C18-F18\"\n\"SUM(C17:C22)\"\n\"C15-C23\"\n\"C25\"\n\"+C31\"\n\"SUM(C28:C32)\"\n\"C33-C40\"\n\"B8-E8\"\n\"B8\"\n\"+B13\"\n\"+B14\"\n\"SUM(B7:B16)\"\n\"SUM(D6:D16)\"\n\"SUM(B19:B26)\"\n\"B17-B27\"\n\"SUM(D31:D39)\"\n\"+B37\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"(C4)\"\n\"'FR finances'!N15\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!C5:F5\"\n\"'Cover sheet'!I5\"\n\"D19+D29+D39+D49+D59\"\n\"IF((E9=0),\"\"\"\",IF((D9=0),\"\"\"\",((E9*100)/D9)))\"\n\"ROUND(H19,2)+ROUND(H29,2)+ROUND(H39,2)+ROUND(H49,2)+ROUND(H59,2)\"\n\"D9-G9-H9\"\n\"SUM(D9:D15)\"\n\"G19+H19\"\n\"'FR investments'!E16\"\n\"SUM(ROUND(H19,2)+ROUND(H20,2)+ROUND(H21,2)+ROUND(H22,2)+ROUND(H23,2)+ROUND(H24,2)+ROUND(H25,2))\"\n\"'FR investments'!E25\"\n\"'FR investments'!E34\"\n\"'FR investments'!E43\"\n\"'FR investments'!E52\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!I5\"\n\"'Cover sheet'!I5\"\n\"'FR expenditures'!H16\"\n\"IF((E12=0),\"\"\"\",IF((D12=0),\"\"\"\",((E12*100)/D12)))\"\n\"D12-E12-G12\"\n\"ROUND(D12*(J12/100),2)\"\n\"ROUND(E12*(J12/100),2)\"\n\"ROUND((G12*(J12/100)),2)\"\n\"G15-G13-G12\"\n\"SUM(D12:D14)\"\n\"+'FR expenditures'!H16\"\n\"IF(K15=0,0,K15/D15*100)\"\n\"SUM(D18:D26)\"\n\"D27+D15\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"'Cover sheet'!C3:I3\"\n\"('Cover sheet'!C5:F5)\"\n\"'Cover sheet'!I5\"\n\"SUM(ROUND(E8,2)+ROUND(E9,2)+ROUND(E10,2)+ROUND(E11,2)+ROUND(E12,2)+ROUND(E13,2)+ROUND(E14,2)+ROUND(E15,2))\"\n\"E52+E43+E34+E25+E16\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C3\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!C5\"\n\"'Cover sheet'!I5\"\n\"'Cover sheet'!I5\"\n\"'FR finances'!D18\"\n\"SUM(D9:D21)\"\n\"1500*10*12\"\n\"150*175\"\n\"4500*2\"\n\"1750*12*2\"\n\"SUM(F15:F24)\"\n\"SUM(G16:G24)\"\n\"SUM(F38:F41)\"\n\"+G42\"\n\"+G26\"\n\"+F46+F48-F50\"\n\"+'Financial Schedule II - RM'!B25\"\n\"+'Financial Schedule II - RM'!C27\"\n\"+'Financial Schedule II - RM'!B30*40\"\n\"+'Financial Schedule II - RM'!B31*40\"\n\"100*15\"\n\"110*15\"\n\"SUM(B7:B15)\"\n\"+'Supporting Schedule'!D12\"\n\"+'Supporting Schedule'!D17\"\n\"+'Supporting Schedule'!D21\"\n\"+'Supporting Schedule'!D40\"\n\"+'Supporting Schedule'!D54\"\n\"+'Supporting Schedule'!D36\"\n\"+'Supporting Schedule'!D49\"\n\"+'Supporting Schedule'!D59\"\n\"SUM(B19:B26)\"\n\"B16-B27\"\n\"76*10\"\n\"SUM(B8:B11)\"\n\"+'Supporting Schedule'!C12\"\n\"+'Supporting Schedule'!C17\"\n\"+'Supporting Schedule'!C21\"\n\"SUM(B15:B17)\"\n\"B12-B18\"\n\"25*B30\"\n\"25*B31\"\n\"C9-B9\"\n\"65*C30\"\n\"65*C31\"\n\"65*D30\"\n\"65*D31\"\n\"65*E30\"\n\"65*E31\"\n\"B9+B12+B15+B18\"\n\"B20+B23\"\n\"B20+B23\"\n\"C25\"\n\"+C8+B8\"\n\"SUM(D8:D11)\"\n\"SUM(B15:B16)\"\n\"+B21+B17+B12\"\n\"SUM(B31:B35)\"\n\"SUM(B43:B48)\"\n\"+D59+D54+D49+D40+D36+D23\"\n\"SUM(C7:I7)\"\n\"4581392+1432027\"\n\"2062469-1432027\"\n\"SUM(C7+C8+C9+C10+C12+C13+C14+C15+C17+C18)\"\n\"C19+C20\"\n\"SUM(C7:J7)\"\n\"4581392+1432027\"\n\"2062469-1432027\"\n\"SUM(C7:C18)\"\n\"SUM(C20:I20)\"\n\"C19+C20\"\n\"TODAY()\"\n\"SUM(C13:C19)\"\n\"G13+I13\"\n\"C13-C26\"\n\"IF(H74,\"\"All ok.\"\",\"\"FAILED!!\"\")\"\n\"SUM(H21:H73)\"\n\"ACCRINT(DATE(1998,2,28),DATE(1998,8,31),DATE(1998,5,1),0.1,1000,2,0)\"\n\"ACCRINT(DATE(1998,2,28),DATE(1998,8,31),DATE(1998,5,1),0.1,1000,2,3)\"\n\"ACCRINT(DATE(1998,2,28),DATE(1998,8,31),DATE(1998,5,1),0.13,2000,2,2)\"\n\"IF(((ABS(B21-C21)<$C$4) +(ABS(D21-E21)<$C$4) + (ABS(F21-G21)<$C$4)=3),1,0)\"\n\"IF(H21,\"\"Ok.\"\",\"\"FAILED!!\"\")\"\n\"ACCRINTM(DATE(1998,4,1),DATE(1998,6,15),0.12,1000,3)\"\n\"ACCRINTM(DATE(1998,4,1),DATE(1998,6,15),0.1,1000,0)\"\n\"ACCRINTM(DATE(1998,4,1),DATE(1998,6,15),0.14,1000,2)\"\n\"AMORDEGRC(2400,DATE(1998,8,19),DATE(1998,12,30),300,1,0.14,1)\"\n\"AMORDEGRC(2400,DATE(1998,8,19),DATE(1998,12,30),300,2,0.14,1)\"\n\"AMORDEGRC(2400,DATE(1998,8,19),DATE(1998,12,30),300,3,0.14,1)\"\n\"AMORLINC(2400,DATE(1998,8,19),DATE(1998,12,31),300,1,0.15,1)\"\n\"AMORLINC(2400,DATE(1998,8,19),DATE(1998,8,31),100,2,0.5,4)\"\n\"AMORLINC(2400,DATE(1998,8,19),DATE(1998,12,31),300,1,0.13,1)\"\n\"COUPDAYBS(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPDAYBS(DATE(1998,1,25),DATE(1999,11,15),4,4)\"\n\"COUPDAYBS(DATE(1998,1,25),DATE(1999,11,15),1,2)\"\n\"COUPDAYS(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPDAYS(DATE(1998,1,25),DATE(1999,11,15),2,4)\"\n\"COUPDAYS(DATE(1998,1,25),DATE(1999,11,15),4,2)\"\n\"COUPDAYSNC(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPDAYSNC(DATE(1998,1,25),DATE(1999,11,15),4,2)\"\n\"COUPDAYSNC(DATE(1998,1,25),DATE(1999,11,15),1,3)\"\n\"COUPNCD(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPNCD(DATE(1998,1,25),DATE(1999,11,15),4,2)\"\n\"COUPNCD(DATE(1998,1,25),DATE(1999,11,15),1,0)\"\n\"COUPNUM(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPNUM(DATE(1998,1,25),DATE(1999,11,15),4,1)\"\n\"COUPNUM(DATE(1998,1,25),DATE(1999,11,15),1,3)\"\n\"COUPPCD(DATE(1998,1,25),DATE(1999,11,15),2,1)\"\n\"COUPPCD(DATE(1998,1,25),DATE(1999,11,16),1,0)\"\n\"COUPPCD(DATE(1998,1,25),DATE(1999,11,15),2,0)\"\n\"CUMIPMT(0.0075,360,125000,13,24,0)\"\n\"CUMIPMT(0.0075,360,125000,13,24,1)\"\n\"CUMIPMT(0.0075,360,125000,12,24,0)\"\n\"CUMPRINC(0.0075,360,125000,13,24,0)\"\n\"CUMPRINC(0.0075,360,125000,13,24,1)\"\n\"CUMPRINC(0.0075,365,125000,12,24,1)\"\n\"DB(1000000,100000,6,1,7)\"\n\"DB(1000000,100000,6,2,7)\"\n\"DB(1000000,100000,5,1,4)\"\n\"DDB(2400,300,3650,1)\"\n\"DDB(2500,350,3600,2)\"\n\"DDB(2500,350,360,32)\"\n\"DISC(DATE(1998,2,15),DATE(1998,10,6),97.975,100,2)\"\n\"DISC(DATE(1998,2,15),DATE(1998,10,6),97.975,100,1)\"\n\"DISC(DATE(1998,2,15),DATE(1998,10,6),97.95,100,2)\"\n\"DOLLARDE(1.02,16)\"\n\"DOLLARDE(1.1,6)\"\n\"DOLLARDE(1.4,28)\"\n\"DOLLARFR(1.125,16)\"\n\"DOLLARFR(1.125,6)\"\n\"DOLLARFR(1.12,3)\"\n\"DURATION(DATE(1998,1,1),DATE(2006,1,1),0.08,0.09,2,1)\"\n\"DURATION(DATE(1998,1,1),DATE(2006,1,1),0.08,0.09,1,0)\"\n\"DURATION(DATE(1998,1,1),DATE(2006,1,1),0.18,0.09,2,1)\"\n\"EFFECT(5.258,4)\"\n\"EFFECT(5.8,5)\"\n\"EFFECT(5.58,5)\"\n\"FV(0.5%,10,-20,-500,1)\"\n\"FV(0.5%,10,-20,-500,0)\"\n\"FV(0.5%,3,-20,-500,1)\"\n\"FVSCHEDULE(1,{0.09;0.11;0.1})\"\n\"FVSCHEDULE(2,{0.09;0.11;0.1})\"\n\"FVSCHEDULE(1,{0.07;0.11;0.16})\"\n\"INTRATE(DATE(1999,2,15),DATE(1999,5,15),1000000,1014420,2)\"\n\"INTRATE(DATE(1999,2,15),DATE(1999,5,15),1000000,1014420,1)\"\n\"INTRATE(DATE(1999,2,15),DATE(1999,5,15),100000,1014420,2)\"\n\"IPMT(0.1,1,36,8000)\"\n\"IPMT(0.1,3,36,8000)\"\n\"IPMT(0.1,3,6,8000)\"\n\"IRR(A11:A16)\"\n\"IRR(A11:A15)\"\n\"IRR(A11:A16,4)\"\n\"ISPMT(0.1,1,36,8000000)\"\n\"ISPMT(0.1,2,36,8000000)\"\n\"ISPMT(0.1,1,6,800000)\"\n\"MDURATION(DATE(1999,1,1),DATE(2007,1,1),0.08,0.09,2,1)\"\n\"MDURATION(DATE(1999,1,1),DATE(2007,1,1),0.18,0.09,2,2)\"\n\"MDURATION(DATE(1999,1,1),DATE(2007,1,1),0.08,0.09,4,1)\"\n\"MIRR(A11:A16,0.1,0.12)\"\n\"MIRR(A11:A16,0.2,0.13)\"\n\"MIRR(A11:A16,0.12,0.15)\"\n\"NOMINAL(5.323%,4)\"\n\"NOMINAL(5.23%,7)\"\n\"NOMINAL(5.323%,1)\"\n\"NPER(12%,-100,-1000,10000,1)\"\n\"NPER(12%,-100,-1000,10000,0)\"\n\"NPER(12%,-100,-1100,10000,1)\"\n\"NPV(8%,A11:A16)\"\n\"NPV(8%,A11:A16,-4000)\"\n\"NPV(8%,A11:A16,-2000)\"\n\"ODDFPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,2,1)\"\n\"ODDFPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,2,0)\"\n\"ODDFPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,4,1)\"\n\"ODDFYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,2,1)\"\n\"ODDFYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,2,0)\"\n\"ODDFYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),DATE(2000,3,1),0.0785,0.0625,100,4,0)\"\n\"ODDLPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,100,2,0)\"\n\"ODDLPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,100,2,1)\"\n\"ODDLPRICE(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,200,4,0)\"\n\"ODDLYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,100,2,0)\"\n\"ODDLYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,100,2,1)\"\n\"ODDLYIELD(DATE(1999,11,11),DATE(2012,3,1),DATE(1999,10,15),0.0785,0.0625,200,4,0)\"\n\"PMT(6%,5,3)\"\n\"PMT(6%,5,3,4)\"\n\"PMT(6%,7,3)\"\n\"PPMT(6%,1,24,2000)\"\n\"PPMT(6%,2,24,2000)\"\n\"PPMT(6%,2,14,2000)\"\n\"PRICE(DATE(1999,2,15),DATE(2007,11,15),0.0575,0.065,100,2,0)\"\n\"PRICE(DATE(1999,2,15),DATE(2007,11,15),0.0575,0.065,100,2,1)\"\n\"PRICE(DATE(1999,2,15),DATE(2007,11,15),0.0575,0.065,100,4,1)\"\n\"PRICEDISC(DATE(1999,2,15),DATE(1999,11,15),0.0575,100,2)\"\n\"PRICEDISC(DATE(1999,2,15),DATE(1999,11,15),0.0575,100,1)\"\n\"PRICEDISC(DATE(1999,2,15),DATE(1999,11,15),0.0575,200,2)\"\n\"PRICEMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.0575,100,2)\"\n\"PRICEMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.0575,100,1)\"\n\"PRICEMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.0575,200,2)\"\n\"PV(0.08,12*20,500,2,0)\"\n\"PV(0.08,12*20,500,2,1)\"\n\"PV(0.08,12*20,100,1,0)\"\n\"RATE(48,-200,8000)\"\n\"RATE(8,-200,8000)\"\n\"RATE(48,-100,8000)\"\n\"RECEIVED(DATE(1999,2,15),DATE(1999,4,15),100000,0.0575,2)\"\n\"RECEIVED(DATE(1999,2,15),DATE(1999,4,15),100000,0.0575,1)\"\n\"RECEIVED(DATE(1999,2,15),DATE(1999,4,15),100000,0.055,2)\"\n\"SLN(30000,7500,10)\"\n\"SLN(30000,7500,7)\"\n\"SLN(30000,1500,10)\"\n\"SYD(30000,7500,10,1)\"\n\"SYD(30000,7500,10,2)\"\n\"SYD(30000,7500,9,1)\"\n\"TBILLEQ(DATE(1999,3,31),DATE(1999,6,6),0.0234)\"\n\"TBILLEQ(DATE(1999,3,31),DATE(1999,6,6),0.06534)\"\n\"TBILLEQ(DATE(1999,3,31),DATE(1999,7,6),0.2234)\"\n\"TBILLPRICE(DATE(1999,3,31),DATE(1999,6,1),0.09)\"\n\"TBILLPRICE(DATE(1999,3,31),DATE(1999,6,1),0.19)\"\n\"TBILLPRICE(DATE(1999,3,31),DATE(1999,7,1),0.09)\"\n\"TBILLYIELD(DATE(1999,3,31),DATE(1999,6,1),0.09)\"\n\"TBILLYIELD(DATE(1999,3,31),DATE(1999,6,1),0.19)\"\n\"TBILLYIELD(DATE(1999,3,31),DATE(1999,7,1),0.09)\"\n\"VDB(2400,300,10,0,0.3234,1.5)\"\n\"VDB(2400,300,10,0,0.3234,1.7)\"\n\"VDB(2400,300,10,0,0.3234,2.5)\"\n\"XIRR({-10000;2750;4250;3250;2742},{\"\"1998/1/1\"\";\"\"1998/1/3\"\";\"\"1998/10/30\"\";\"\"1999/2/15\"\";\"\"1999/1/4\"\"},0.1)\"\n\"XIRR({-10000;2750;4250;3250;2742},{\"\"1998/1/1\"\";\"\"1998/1/3\"\";\"\"1998/10/30\"\";\"\"1999/2/15\"\";\"\"1999/2/4\"\"},0.01)\"\n\"XIRR({-10000;2750;4290;3250;2742},{\"\"1998/1/1\"\";\"\"1998/1/3\"\";\"\"1998/10/30\"\";\"\"1999/2/15\"\";\"\"1999/2/4\"\"},0.01)\"\n\"XNPV(0.09,{-10000;2750;4250;3250;2750},{35794;35855;36098;36206;36251})\"\n\"XNPV(0.03,{-10000;2750;4250;3250;2750},{35794;35855;36098;36206;36251})\"\n\"XNPV(0.09,{-10000;2720;4250;3250;2750},{35794;35855;36098;36206;36251})\"\n\"YIELD(DATE(1999,2,15),DATE(2007,11,15),0.0575,95.0423,100,2,0)\"\n\"YIELD(DATE(1999,2,15),DATE(2007,11,15),0.0575,95.0423,100,4,1)\"\n\"YIELD(DATE(1999,2,15),DATE(2007,11,15),0.0575,95.0423,200,2,0)\"\n\"YIELDDISC(DATE(1999,2,15),DATE(2007,11,15),0.0575,100,2)\"\n\"YIELDDISC(DATE(1999,2,15),DATE(2007,11,15),0.0575,100,1)\"\n\"YIELDDISC(DATE(1999,2,15),DATE(2007,11,15),0.0575,200,2)\"\n\"YIELDMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.0575,100,2)\"\n\"YIELDMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.0575,200,0)\"\n\"YIELDMAT(DATE(1999,2,15),DATE(1999,11,15),DATE(1998,11,11),0.1575,100,2)\"\n\"B8=SUM(H21:H73)\"\n\"IF(H74,1,0)\"\n\"SUM(B9:C9)\"\n\"D9+E9\"\n\"E10+D10\"\n\"SUM(B9:B16)\"\n\"SUM(B19:B24)\"\n\"B17-B25\"\n\"SUM(B26 +C26+E26)\"\n\"SUM(B28:B30)\"\n\"+B26+B31\"\n\"F26+F31\"\n\"B33\"\n\"B33+B34+B35\"\n\"B32+B36\"\n\"E38+E39\"\n\"SUM(D11:O11)\"\n\"SUM(D11:D14)\"\n\"SUM(+E10-D12)\"\n\"SUM(D17:D37)\"\n\"+E14-E39\"\n\"E41+E43\"\n\"IF(E45>0,E45*10%,0)\"\n\"IF(E45+G45>0,G45+E45)*10%\"\n\"(I45)*10%\"\n\"K45*10%\"\n\"E45-E47\"\n\"G41-G47\"\n\"SUM(D13:D16)\"\n\"SUM(D21:D24)\"\n\"SUM(D27:D31)\"\n\"SUM(D25-D32)\"\n\"+D18+D34\"\n\"SUM(D43:D47)\"\n\"SUM(D11:O11)\"\n\"SUM(D11:D14)\"\n\"SUM(+E10-D12)\"\n\"SUM(D17:D37)\"\n\"+E14-E39\"\n\"E41+E43\"\n\"IF(E45>0,E45*10%,0)\"\n\"IF(E45+G45>0,G45+E45)*10%\"\n\"(I45)*10%\"\n\"K45*10%\"\n\"E45-E47\"\n\"G41-G47\"\n\"SUM(D13:D16)\"\n\"SUM(D21:D24)\"\n\"SUM(D27:D31)\"\n\"SUM(D25-D32)\"\n\"+D18+D34\"\n\"SUM(D43:D47)\"\n\"C9-D9\"\n\"SUM(C9)\"\n\"SUM(C23:C26)\"\n\"SUM(C31:C37)\"\n\"C10+C14+C19+C27+C38+C41+C42\"\n\"C12-D12\"\n\"SUM(C12:C30)\"\n\"C31\"\n\"SUM(C40:C47)\"\n\"SUM(C52:C55)\"\n\"C48+C56\"\n\"D59-C34\"\n\"D59-C34\"\n\"-(F56+F48+F31)\"\n\"C9-D9\"\n\"SUM(C9)\"\n\"SUM(C23:C26)\"\n\"SUM(C31:C37)\"\n\"C10+C14+C19+C27+C38+C41+C42\"\n\"C12-D12\"\n\"SUM(C12:C30)\"\n\"C31\"\n\"SUM(C40:C47)\"\n\"SUM(C52:C55)\"\n\"C48+C56\"\n\"D59-C34\"\n\"D59-C34\"\n\"-(F56+F48+F31)\"\n\"C9-D9\"\n\"SUM(E9)\"\n\"SUM(C23:C26)\"\n\"SUM(C31:C37)\"\n\"C10+C14+C19+C27+C38+C40+C41\"\n\"C12-D12\"\n\"SUM(C12:C31)\"\n\"C32\"\n\"SUM(C41:C49)\"\n\"SUM(C55:C58)\"\n\"C50+C59\"\n\"D61-C35\"\n\"D61-C35\"\n\"-(F59+F50+F32)\"\n\"C9-D9\"\n\"SUM(E9)\"\n\"SUM(C23:C26)\"\n\"SUM(C31:C37)\"\n\"C10+C14+C19+C27+C38+C40+C41\"\n\"C12-D12\"\n\"SUM(C12:C31)\"\n\"C32\"\n\"SUM(C41:C49)\"\n\"SUM(C55:C58)\"\n\"C50+C59\"\n\"D61-C35\"\n\"D61-C35\"\n\"-(F59+F50+F32)\"\n\"35683900+5411829+540729451\"\n\"19883352+2181653+505419783\"\n\"53003318+1718956+465479053\"\n\"SUM(B8:B12)\"\n\"SUM(B16:B24)\"\n\"57080796+1679782+1120389-1\"\n\"54372890-115000-11075\"\n\"SUM(B28:B39)\"\n\"24425+19789864\"\n\"SUM(C16:J16)\"\n\"SUM(C16:C31)\"\n\"SUM(C38:C47)\"\n\"C49+C62\"\n\"SUM(E8:E27)\"\n\"SUM(E31:E45)\"\n\"SUM(E50:E53)\"\n\"E28-E46+E54\"\n\"E57+E59\"\n\"F8+H8\"\n\"SUM(F8:F16)\"\n\"SUM(J7:J16)\"\n\"SUM(F22:F29)\"\n\"SUM(F31:F33)\"\n\"SUM(F38:F39)\"\n\"+F35+F41\"\n\"F18-F43+(SUM(F45:F47))\"\n\"SUM(B12:B16)\"\n\"SUM(B21:B43)\"\n\"SUM(B12:B74)\"\n\"35683900+5411829+540729451\"\n\"19883352+2181653+505419783\"\n\"53003318+1718956+465479053\"\n\"SUM(B8:B12)\"\n\"SUM(B16:B24)\"\n\"57080796+1679782+1120389-1\"\n\"54372890-115000-11075\"\n\"SUM(B28:B39)\"\n\"24425+19789864\"\n\"SUM(C16:J16)\"\n\"SUM(C16:C31)\"\n\"SUM(C38:C47)\"\n\"C49+C62\"\n\"SUM(E8:E27)\"\n\"SUM(E31:E45)\"\n\"SUM(E50:E53)\"\n\"E28-E46+E54\"\n\"E57+E59\"\n\"F8+H8\"\n\"SUM(F8:F16)\"\n\"SUM(J7:J16)\"\n\"SUM(F22:F29)\"\n\"SUM(F31:F33)\"\n\"SUM(F38:F39)\"\n\"+F35+F41\"\n\"F18-F43+(SUM(F45:F47))\"\n\"SUM(B12:B16)\"\n\"SUM(B21:B43)\"\n\"SUM(B12:B74)\"\n\"714891941\"\n\"35683900+5411829+540729451\"\n\"19883352+2181653+505419783\"\n\"SUM(B8:B12)\"\n\"SUM(B18:B26)\"\n\"57080796+1679782+1120389-1\"\n\"SUM(B32:B44)\"\n\"24425+19789864\"\n\"184145705\"\n\"296677696\"\n\"27182147+538570800+74394811+75563484+38837817+96797998\"\n\"175631679+11989446\"\n\"35441913+3388136\"\n\"SUM(C11:H11)\"\n\"SUM(C10:C25)\"\n\"176965456-1333777\"\n\"151447301+314892\"\n\"SUM(C34:C42)\"\n\"39832244+3388136\"\n\"SUM(C47:C56)\"\n\"C44+C57\"\n\"197168523+10918041+61321357+19568999-872419\"\n\"10418618+3388136\"\n\"SUM(B12:B28)\"\n\"SUM(C10:C29)\"\n\"SUM(B35:B49)\"\n\"-16962448\"\n\"SUM(B56:B59)\"\n\"B30-B50+B60\"\n\"B64+B66\"\n\"B11+D11\"\n\"18696580+872419\"\n\"SUM(B11:B20)\"\n\"SUM(F10:F20)\"\n\"SUM(B28:B36)\"\n\"SUM(B37:B43)\"\n\"F37+F42\"\n\"SUM(H36:H42)\"\n\"SUM(B49:B51)\"\n\"SUM(F49:F50)\"\n\"B44+B52\"\n\"+H52+H44\"\n\"B21-B54+(SUM(B58:B62))\"\n\"B63\"\n\"SUM(B71:B75)\"\n\"SUM(B11:B19)\"\n\"SUM(B24:B40)\"\n\"TRUNC(NOW())\"\n\"C13+D13-E13\"\n\"SUM(B11:B83)\"\n\"714891941\"\n\"35683900+5411829+540729451\"\n\"19883352+2181653+505419783\"\n\"SUM(B8:B12)\"\n\"SUM(B18:B26)\"\n\"57080796+1679782+1120389-1\"\n\"SUM(B32:B44)\"\n\"24425+19789864\"\n\"184145705\"\n\"296677696\"\n\"27182147+538570800+74394811+75563484+38837817+96797998\"\n\"175631679+11989446\"\n\"35441913+3388136\"\n\"SUM(C11:H11)\"\n\"SUM(C10:C25)\"\n\"176965456-1333777\"\n\"151447301+314892\"\n\"SUM(C34:C42)\"\n\"39832244+3388136\"\n\"SUM(C47:C56)\"\n\"C44+C57\"\n\"197168523+10918041+61321357+19568999-872419\"\n\"10418618+3388136\"\n\"SUM(B12:B28)\"\n\"SUM(C10:C29)\"\n\"SUM(B35:B49)\"\n\"-16962448\"\n\"SUM(B56:B59)\"\n\"B30-B50+B60\"\n\"B64+B66\"\n\"B11+D11\"\n\"18696580+872419\"\n\"SUM(B11:B20)\"\n\"SUM(F10:F20)\"\n\"SUM(B28:B36)\"\n\"SUM(B37:B43)\"\n\"F37+F42\"\n\"SUM(H36:H42)\"\n\"SUM(B49:B51)\"\n\"SUM(F49:F50)\"\n\"B44+B52\"\n\"+H52+H44\"\n\"B21-B54+(SUM(B58:B62))\"\n\"B63\"\n\"SUM(B71:B75)\"\n\"SUM(B11:B19)\"\n\"SUM(B24:B40)\"\n\"TRUNC(NOW())\"\n\"C13+D13-E13\"\n\"SUM(B11:B83)\"\n\"SUM(C12:C24)\"\n\"SUM(C25:E25)\"\n\"SUM(G26:G27)\"\n\"'Annual Leave'!F20\"\n\"((C12+C36)*0.156/1.156)-C14\"\n\"SUM(C34:C43)\"\n\"SUM(C44:E44)\"\n\"G29\"\n\"SUM(G44:G45)\"\n\"ROUND(B4/173.33,2)\"\n\"C4*D4*E4\"\n\"SUM(F4:F18)\"\n\"SUM(C12:C24)\"\n\"SUM(C25:E25)\"\n\"SUM(G26:G27)\"\n\"'Annual Leave'!F20\"\n\"((C12+C36)*0.156/1.156)-C14\"\n\"SUM(C34:C43)\"\n\"SUM(C44:E44)\"\n\"G29\"\n\"SUM(G44:G45)\"\n\"ROUND(B4/173.33,2)\"\n\"C4*D4*E4\"\n\"SUM(F4:F18)\"\n\"SUM(D9:D10)\"\n\"SUM(D11:D16)\"\n\"SUM(D17:D20)\"\n\"SUM(D21:D24)\"\n\"F29\"\n\"F34\"\n\"+D18\"\n\"-2537-257\"\n\"SUM(D50:D55)\"\n\"SUM(C10:C12)\"\n\"SUM(C15:C19)\"\n\"C13+C20+C22+C23\"\n\"SUM(C28:C31)\"\n\"C32+C34+C35+C40+C42+C43\"\n\"+C18+C19\"\n\"+C37\"\n\"+C55-C56\"\n\"SUM(D9:D19)\"\n\"SUM(D23:D25)\"\n\"SUM(D28:D32)\"\n\"D35+D33+D26+D20\"\n\"+D37+D39\"\n\"SUM(D40:D41)\"\n\"SUM(D9:D10)\"\n\"SUM(D11:D16)\"\n\"SUM(D17:D20)\"\n\"SUM(D21:D24)\"\n\"F29\"\n\"F34\"\n\"+D18\"\n\"-2537-257\"\n\"SUM(D50:D55)\"\n\"SUM(C10:C12)\"\n\"SUM(C15:C19)\"\n\"C13+C20+C22+C23\"\n\"SUM(C28:C31)\"\n\"C32+C34+C35+C40+C42+C43\"\n\"+C18+C19\"\n\"+C37\"\n\"+C55-C56\"\n\"SUM(D9:D19)\"\n\"SUM(D23:D25)\"\n\"SUM(D28:D32)\"\n\"D35+D33+D26+D20\"\n\"+D37+D39\"\n\"SUM(D40:D41)\"\n\"D7*(1+I7)\"\n\"C7/B7-1\"\n\"E25*E26\"\n\"B7/B$7\"\n\"E7*N8\"\n\"B7-B8\"\n\"E7*N10\"\n\"E7*N11\"\n\"CF!B8\"\n\"B9-B11-B12-B10\"\n\"Ratios!D34*BS!D29\"\n\"Ratios!B35*IS!B15\"\n\"D19+(BS!E33-BS!D33)/E27\"\n\"B17/B19\"\n\"B21/B19\"\n\"G7/C25\"\n\"B27/B20\"\n\"((B22*(1+B29))/B27)+B29-B24\"\n\"CF!B29\"\n\"C10/B10-1\"\n\"B10/B$13\"\n\"IS!E7/Ratios!E10\"\n\"D12*(1+IS!I7)\"\n\"SUM(B10:B12)\"\n\"B13/B$20\"\n\"IS!E7/Ratios!E12\"\n\"B16/Ratios!B33\"\n\"C16/Ratios!C33+B17\"\n\"B16-B17\"\n\"B18+B13\"\n\"N25*E27\"\n\"B25/B27\"\n\"N26*E27\"\n\"B26/B27\"\n\"SUM(B25:B26)\"\n\"(E11+E12)/Ratios!E19\"\n\"B27/B$36\"\n\"B29+B27\"\n\"B32+IS!C17-IS!C21\"\n\"B34+B30\"\n\"IS!B9/IS!B7\"\n\"IS!B17/IS!B7\"\n\"IS!B7/BS!B11\"\n\"IS!B7/BS!B20\"\n\"IS!B7/BS!B16\"\n\"IS!B7/BS!B12\"\n\"IS!B7/BS!B26\"\n\"-CF!B18/CF!B8\"\n\"BS!B13/BS!B27\"\n\"(BS!B11+BS!B12)/BS!B27\"\n\"BS!B29/BS!B20\"\n\"(BS!B10+BS!B12)/BS!B27\"\n\"IS!B13/IS!B7\"\n\"IS!B7/BS!B20\"\n\"IS!B15/IS!B13\"\n\"IS!B17/IS!B15\"\n\"BS!B20/BS!B34\"\n\"B26*B27*B28*B29*B30\"\n\"IS!B14/BS!B29\"\n\"IS!C17\"\n\"BS!C17-BS!B17\"\n\"-(BS!C11-BS!B11)\"\n\"BS!C25-BS!B25\"\n\"SUM(B7:B13)\"\n\"-(BS!C16-BS!B16)\"\n\"BS!C29-BS!B29\"\n\"BS!C33-BS!B33\"\n\"-IS!C21\"\n\"SUM(B22:B24)\"\n\"BS!B10\"\n\"B29\"\n\"B25+B18+B14\"\n\"B27+B28\"\n\"SUM(C15:N15)\"\n\"SUM(C15:C17)\"\n\"SUM(C21:C37)\"\n\"SUM(C18-C38)\"\n\"SUM(C42+D40)\"\n\"SUM(B15:M15)\"\n\"SUM(B15:B17)\"\n\"SUM(B21:B37)\"\n\"SUM(D21:D36)\"\n\"B18-B38\"\n\"B18-B38\"\n\"B42+C18-C38\"\n\"E9/12\"\n\"SplineFit(G6:H13,E9/12)\"\n\"E5+E7-E6\"\n\"APR(E5,E6,E7,E8,E9)\"\n\"(E10+(E9*(-PMT(E8/12,E9,E10)+PMT(K7/12,E9,E10))))/(E5-E6)\"\n\"(E10+(E9*(-PMT(E8/12,E9,E10)+PMT(K20/12,E9,E10))))/(E5-E6)\"\n\"10000*(E13-K7)\"\n\"10000*(E13-K20)\"\n\"E9/12\"\n\"SplineFit(G19:H26,E9/12)\"\n\"HYPERLINK(\"\"http://www.federalreserve.gov/Releases/H15/update/\"\",\"\"1. Click to access current information on treasuries and swap rates\"\")\"\n\"HYPERLINK(\"\"http://www.treas.gov/offices/domestic-finance/debt-management/interest-rate/ltcompositeindex.html\"\",\"\"2. Click to access factor to convert >25 t-bill rate to 30-year t-bill rate\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(E10,\"\"00\"\"),K10,\"\" percentile, meaning that \"\", TEXT(F10,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term swap rate)\"\")\"\n\"224*H36+I36\"\n\"'Data Entry'!E9/12\"\n\"'Data Entry'!E15\"\n\"A10*$I$5+$I$6\"\n\"(B10-C10)\"\n\"ROUND(100*(1-NORMDIST(D10,0,I7*A10,TRUE)),0)\"\n\"100-E10\"\n\"CHOOSE(MOD(E10,10)+1,\"\"th\"\",\"\"st\"\",\"\"nd\"\",\"\"rd\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\")\"\n\"'Data Entry'!E9/12\"\n\"'Data Entry'!E14\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"'Data Entry'!E9/12\"\n\"'Data Entry'!E14\"\n\"A24*$I$20+$I$21\"\n\"ROUND(100*(1-NORMDIST(D24,0,I22*A24,TRUE)),0)\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(data!E24,\"\"00\"\"),K25,\"\" percentile, meaning that \"\", TEXT(F24,\"\"00\"\"), \"\"% of projects with this term have a better financing value ratio (indexed to like-term Treasuries)\"\")\"\n\"CHOOSE(MOD(E24,10)+1,\"\"th\"\",\"\"st\"\",\"\"nd\"\",\"\"rd\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\")\"\n\"SLOPE(A33:A34,B33:B34)\"\n\"INTERCEPT(A33:A34,B33:B34)\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O54,\"\"00\"\"),K42,\"\" percentile, meaning that \"\", TEXT(P54,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term swap rate)\"\")\"\n\"CHOOSE(MOD(O54,10)+1,\"\"th\"\",\"\"st\"\",\"\"nd\"\",\"\"rd\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CONCATENATE(\"\"Your project is in the \"\",TEXT(O59,\"\"00\"\"),K49,\"\" percentile, meaning that \"\", TEXT(P59,\"\"00\"\"), \"\"% of projects have a better APR difference (indexed to like-term Treasuries)\"\")\"\n\"CHOOSE(MOD(O59,10)+1,\"\"th\"\",\"\"st\"\",\"\"nd\"\",\"\"rd\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\",\"\"th\"\")\"\n\"N55\"\n\"M55\"\n\"ROUND(100*M54,0)\"\n\"M55\"\n\"IF('Data Entry'!E17>data!G90,0,IF('Data Entry'!E17<data!G33,1,'Data Entry'!E17*VLOOKUP('Data Entry'!E17,data!G33:I89,2)+VLOOKUP('Data Entry'!E17,data!G33:I89,3)))\"\n\"'Data Entry'!E17\"\n\"IF('Data Entry'!E16>data!B121,0,IF('Data Entry'!E16<data!B33,1,'Data Entry'!E16*VLOOKUP('Data Entry'!E16,data!B33:D121,2)+VLOOKUP('Data Entry'!E16,data!B33:D121,3)))\"\n\"'Data Entry'!E16\"\n\"0.15*169990\"\n\"0.15*160366\"\n\"0.177*124496\"\n\"0.143*89149\"\n\"0.137*88914\"\n\"0.143*82919\"\n\"0.165*65359\"\n\"169990*0.27\"\n\"160366*0.28\"\n\"0.329*124496\"\n\"0.347*89149\"\n\"0.361*88914\"\n\"0.368*82919\"\n\"0.39*65359\"\n\"169990*0.08\"\n\"0.09*160366\"\n\"0.063*124496\"\n\"0.06*89149\"\n\"0.058*88914\"\n\"0.09*82919\"\n\"0.069*65359\"\n\"0.1*169990\"\n\"0.1*160366\"\n\"0.084*124496\"\n\"0.092*89149\"\n\"0.088*88914\"\n\"0.07*82919\"\n\"0.061*65359\"\n\"0.07*169990\"\n\"0.06*160366\"\n\"0.046*124496\"\n\"0.051*89149\"\n\"0.053*88914\"\n\"0.056*82919\"\n\"0.066*65359\"\n\"0.3*169990\"\n\"0.29*160366\"\n\"0.236*124496\"\n\"0.202*89149\"\n\"0.189*88914\"\n\"0.194*82919\"\n\"0.166*65359\"\n\"0.03*169990\"\n\"0.03*160366\"\n\"0.065*124496\"\n\"0.105*89149\"\n\"0.114*88914\"\n\"0.079*82919\"\n\"0.083*65359\"\n\"SUM(B6:B12)\"\n\"+B13+B15\"\n\"45+31\"\n\"215+77\"\n\"94251*0.19\"\n\"97136*0.21\"\n\"+H$29*0.247\"\n\"0.247*79960\"\n\"0.216*61753\"\n\"0.236*67779\"\n\"0.226*62404\"\n\"0.216*59468\"\n\"94361-B26-B27-B28-B24-B22-B23-B21\"\n\"47495-C21-C23-C24-C26-C27\"\n\"10698-3536\"\n\"4621-E23-E21\"\n\"5018-F23-F21\"\n\"5387-G23-G21\"\n\"+H29-H28-H27-H26-H24-H23-H22-H21\"\n\"94251*0.02\"\n\"97136*0.02\"\n\"+H29*0.036\"\n\"0.027*79960\"\n\"0.032*61753\"\n\"0.06*67779\"\n\"0.06*62404\"\n\"0.058*59468\"\n\"97136*0.17\"\n\"+H29*0.196\"\n\"0.197*79960\"\n\"0.199*61753\"\n\"0.145*67779\"\n\"0.149*62404\"\n\"0.15*59468\"\n\"SUM(B21:B28)\"\n\"288+80608\"\n\"1253+69084\"\n\"+B17-B29\"\n\"+B31-B33+B34\"\n\"+E31-E33\"\n\"SUM(F31:F33)\"\n\"+B35-B36\"\n\"+B38+B37\"\n\"+C49\"\n\"+H49-H47-H45\"\n\"32891+210000\"\n\"210000+21999\"\n\"210000+12522\"\n\"210000+3794\"\n\"+B39\"\n\"-8400-12495\"\n\"-5250-8064\"\n\"SUM(B44:B47)\"\n\"SUM(I44:I48)\"\n\"+C54\"\n\"SUM(B54:B56)\"\n\"SUM(B60:B61)\"\n\"20797-B68-B69\"\n\"4042-790\"\n\"2402-790\"\n\"2295-790\"\n\"8293-2532\"\n\"7124-3333+17\"\n\"3936-2268+658+1117\"\n\"4+4060+731+645\"\n\"900+741+2340+275\"\n\"SUM(B65:B73)\"\n\"+B74+B62+B57\"\n\"1929+1458\"\n\"2885+2019\"\n\"3158+1602\"\n\"3200+1761\"\n\"2018+1689\"\n\"SUM(B80:B85)\"\n\"SUM(D80:D83)\"\n\"14247+5953\"\n\"7533+15830\"\n\"11063+1955\"\n\"5962-1502\"\n\"12587-504\"\n\"SUM(B90:B95)\"\n\"+B97+B86+B99\"\n\"-62+125051\"\n\"89260+386\"\n\"35014+11918\"\n\"9291+20\"\n\"18143.7+470.4+26\"\n\"21541+142\"\n\"20900+112\"\n\"20745+83\"\n\"18592+354\"\n\"19500+138\"\n\"12750+346\"\n\"8536+684\"\n\"10013+1016\"\n\"+B110-B116\"\n\"2992+50\"\n\"+B125-B130\"\n\"152050+1000\"\n\"10000+67860\"\n\"+B145+B132+B118\"\n\"+C149\"\n\"SUM(B6:B11)\"\n\"+B14+B12\"\n\"SUM(B21:B29)\"\n\"+B16-B31\"\n\"+B33-B34\"\n\"+C49\"\n\"+B35\"\n\"-775-768\"\n\"-934-893\"\n\"-926-838\"\n\"-(1867+976)\"\n\"SUM(B42:B47)\"\n\"+D54\"\n\"SUM(B54:B56)\"\n\"SUM(B60:B63)\"\n\"1350-202\"\n\"1534-276\"\n\"SUM(B67:B75)\"\n\"SUM(G68:G75)\"\n\"+B76+B64+B57\"\n\"281+3958\"\n\"237+4175\"\n\"2753+497\"\n\"551+997\"\n\"+B96+B87\"\n\"SUM(B105:B106)\"\n\"1358+25\"\n\"786-332\"\n\"2240+398\"\n\"1816+2\"\n\"223+2922\"\n\"+B107-B113\"\n\"+B120-B125\"\n\"30450+56550\"\n\"+B132-B139\"\n\"+B141+B127+B115\"\n\"+C145\"\n\"4279-D11\"\n\"3690-E11\"\n\"3701-F11\"\n\"3762-G11\"\n\"3502-H11\"\n\"2764-I11\"\n\"SUM(B6:B12)\"\n\"SUM(H6:H13)\"\n\"55+876\"\n\"SUM(B16:B17)\"\n\"+B14+B18\"\n\"35017-32027\"\n\"3181+1+7\"\n\"2855+3+5\"\n\"2645+64\"\n\"1034+1259\"\n\"2228+1037\"\n\"3769-31\"\n\"SUM(B25:B35)\"\n\"+B20-B37\"\n\"+B39-B41\"\n\"SUM(F39:F41)\"\n\"+G43-12238\"\n\"+H43-9412\"\n\"+I43-8053\"\n\"+J43-6743\"\n\"+B43-B44\"\n\"+C61\"\n\"+B46\"\n\"SUM(B54:B56)\"\n\"+B51+B57+B59\"\n\"+C68\"\n\"21721-366+C56\"\n\"SUM(B68:B72)\"\n\"SUM(B76:B77)\"\n\"SUM(B82:B90)\"\n\"+B91+B79+B73\"\n\"19526-2781\"\n\"19994-2035\"\n\"20925-2290\"\n\"22616-1359\"\n\"21634-650\"\n\"112+1629\"\n\"1015+71\"\n\"1087+88\"\n\"118+1451\"\n\"SUM(B99:B106)\"\n\"SUM(B112:B121)\"\n\"+B122+B108\"\n\"SUM(B150:B153)\"\n\"+B147-B154\"\n\"+B161-B164\"\n\"35520+45\"\n\"+B171-B177\"\n\"+B179+B166+B156\"\n\"+C183\"\n\"(+D5-C5)/C5*100\"\n\"SUM(C5:C11)\"\n\"+C12-C24\"\n\"SUM(C34:C36)\"\n\"SUM(C39:C42)\"\n\"SUM(C45:C46)\"\n\"+C47+C43\"\n\"D111\"\n\"SUM(G66:G75)\"\n\"H137\"\n\"D142\"\n\"G79-G80\"\n\"C62\"\n\"C62\"\n\"C34\"\n\"C34\"\n\"SUM(E111:H111)\"\n\"D151\"\n\"D169\"\n\"D197\"\n\"D215\"\n\"SUM(D111:D122)\"\n\"C34\"\n\"H34\"\n\"SUM(E130:F130)\"\n\"D142\"\n\"SUM(E130:E141)\"\n\"H133*100/H132\"\n\"SUM(F130:F141)\"\n\"H134*100/H132\"\n\"SUM(H138:H139)\"\n\"D142\"\n\"D123\"\n\"C34\"\n\"H34\"\n\"SUM(E151:I151)\"\n\"C34\"\n\"H34\"\n\"C34\"\n\"H34\"\n\"C34\"\n\"H34\"\n\"A7+1\"\n\"SUM(C12-D12)/D12\"\n\"SUM(C7:C148)\"\n\"SUM(((C149-C148-C146-C145-C139-C137-C136-C130-C128-C127-C126-C124-C122-C118-C116-C114-C110-C108-C105-C103-C96-C95-C91-C75-C65-C64-C63-C61-C57-C54-C53-C52-C51-C50-C48-C47-C46-C38-C26-C24-C16)-D149)/D149)\"\n\"1000+8468\"\n\"10+4500-19+100+1600\"\n\"6000+3300+250\"\n\"1200+2500-500+200+1200+490+3500+4000+100\"\n\"K61+K62+K63-K64-K65\"\n\"K66+K68-K69\"\n\"291588+1301-7682\"\n\"26609+7853+21209+7117+543\"\n\"SUM(K73:K74)\"\n\"K88-K89\"\n\"K90+K92\"\n\"K94+K95\"\n\"SUM(C10:D10)\"\n\"SUM(C12:C13)\"\n\"(C10+C20)/2\"\n\"SUM(C58:C67)\"\n\"IF(OR(C87>50000,C87=\"\" \"\"),\"\" \"\",\"\"Significant remodeling defined to be over $50,000\"\")\"\n\"IF(OR(C89<25,C89=\"\" \"\"),\"\" \"\",\"\"Please check value\"\")\"\n\"IF(OR(C96>500,C96=\"\" \"\"),\"\" \"\",\"\"Convenience stores should be over 500 sq. ft.\"\")\"\n\"SUM(C8:C10)\"\n\"E11+E17-E19-E21\"\n\"E27/$C$11\"\n\"SUM(E27:E49)\"\n\"SUM(E55:E65)\"\n\"E23-E50+E66\"\n\"SUM(E86:E90)\"\n\"SUM(E96:E99)\"\n\"E71-E78+E91-E100\"\n\"C115/$D$135\"\n\"SUM(C115:C117)\"\n\"D118/$D$135\"\n\"IF(C128<0,\"\"Please enter value as a positive figure\"\",\"\"  \"\")\"\n\"SUM(C125:C128)\"\n\"SUM(D118:D133)\"\n\"SUM(D143:D154)\"\n\"IF(D135=D156,\"\" \"\",\"\"Should match Total Assets above\"\")\"\n\"SUM(C10:C12)\"\n\"SUM(C41:C45)\"\n\"SUM(D75:D78)\"\n\"D79/C79\"\n\"E79\"\n\"SUM(E9:E14)\"\n\"E15+E24\"\n\"SUM(E50:E57)\"\n\"E38+E47+E58\"\n\"SUM(E64:E66)\"\n\"B2/C2\"\n\"IF(B2>0,LN(D2),)\"\n\"AVERAGE(D2:D11)\"\n\"STDEV(E2:E11)\"\n\"F19\"\n\"F27\"\n\"F24\"\n\"F21^2\"\n\"F31-F30\"\n\"F25\"\n\"(LN(C34/C35)+(G34-G36+(G35/2))*C36)/(((G35)^(0.5))*(C36^0.5))\"\n\"(LN(C34/C38)+(G34-G36+(G35/2))*C36)/(((G35)^(0.5))*(C36^0.5))\"\n\"NORMSDIST(C41)\"\n\"C41-((G35^0.5)*(C36^(0.5)))\"\n\"F41-((G35^0.5)*(C36^(0.5)))\"\n\"(((EXP((0-G36)*C36))*C34*C42-C35*(EXP((0-G34)*C36))*C45)-((EXP((0-G36)*C36))*C34*F42-C38*(EXP((0-G34)*C36))*F45))*C37/G37\"\n\"NOW()\"\n\"SUM(L21:L25)\"\n\"SUM(L21:L25)\"\n\"SUM(L21:L25)\"\n\"'Financial Statement Pg1'!D12\"\n\"'Financial Statement Pg1'!D12\"\n\"'Financial Statement Pg1'!D12\"\n\"'Financial Statement Pg1'!D13\"\n\"'Financial Statement Pg1'!D13\"\n\"'Financial Statement Pg1'!D13\"\n\"'Financial Statement Pg1'!D13\"\n\"'Financial Statement Pg1'!D13\"\n\"SUM(D3:D5)+SUM(I3:I5)\"\n\"SUM(O8:O14)\"\n\"SUM(M21:M28)\"\n\"SUM(M21:M28)\"\n\"SUM(D3:O3)\"\n\"+D3*0.5\"\n\"+H3*0.5+30000\"\n\"+D3-D4\"\n\"+D5+D8\"\n\"+D9\"\n\"+D10+E9\"\n\"SUM(E9:P9)\"\n\"SUM(E9-E10)\"\n\"SUM(E11+E14)\"\n\"SUM(E11+E14)\"\n\"SUM(E16+F15)\"\n\"G21+L21-Q21\"\n\"G21+L21-Q21\"\n\"G21+L21-Q21\"\n\"G21+L21-Q21\"\n\"SUM(G21:K26)\"\n\"SUM(G21:K26)\"\n\"SUM(G21:K26)\"\n\"SUM(G21:K26)\"\n\"SUM(G21:K26)\"\n\"SUM(Q21:T26)\"\n\"SUM(Q21:T26)\"\n\"SUM(Q21:T26)\"\n\"SUM(Q21:T26)\"\n\"F29/I29\"\n\"F29/I29\"\n\"D29-J29\"\n\"L50\"\n\"L50\"\n\"J31-D31\"\n\"SUM(D29:E37)\"\n\"SUM(D29:E37)\"\n\"SUM(L29:L37)\"\n\"H44*J44\"\n\"SUM(L44:L49)\"\n\"F29/I29\"\n\"F29/I29\"\n\"D29-J29\"\n\"L50\"\n\"L50\"\n\"SUM(D29:E37)\"\n\"SUM(D29:E37)\"\n\"SUM(L29:L37)\"\n\"H44*J44\"\n\"SUM(L44:L49)\"\n\"IF(C3=\"\"\"\",\"\"Input RUS Designation\"\",\"\"Input Completed\"\")\"\n\"IF(C3=\"\"\"\",\"\"Input RUS Designation\"\",\"\"Input Completed\"\")\"\n\"IF(C4=\"\"\"\",\"\"Input Borrower's Legal Name\"\",\"\"Input Completed\"\")\"\n\"IF(C4=\"\"\"\",\"\"Input Borrower's Legal Name\"\",\"\"Input Completed\"\")\"\n\"IF(C5=\"\"\"\",\"\"Input Mailing Address\"\",\"\"Input Completed\"\")\"\n\"IF(C5=\"\"\"\",\"\"Input Mailing Address\"\",\"\"Input Completed\"\")\"\n\"IF(C6=\"\"\"\",\"\"Input City for Mailing\"\",\"\"Input Completed\"\")\"\n\"IF(C6=\"\"\"\",\"\"Input City for Mailing\"\",\"\"Input Completed\"\")\"\n\"IF(C7=\"\"\"\",\"\"Input State for Mailing\"\",\"\"Input Completed\"\")\"\n\"IF(C7=\"\"\"\",\"\"Input State for Mailing\"\",\"\"Input Completed\"\")\"\n\"IF(C8=\"\"\"\",\"\"Input Zip Code\"\",\"\"Input Completed\"\")\"\n\"IF(C8=\"\"\"\",\"\"Input Zip Code\"\",\"\"Input Completed\"\")\"\n\"IF(C9=\"\"\"\",\"\"Input One Number Bigger than Last FRS Number\"\",\"\"Input Completed\"\")\"\n\"IF(C9=\"\"\"\",\"\"Input One Number Bigger than Last FRS Number\"\",\"\"Input Completed\"\")\"\n\"IF(C10=NOW(),\"\"Input is NOT Required!\"\",\"\"Thank You For Your Input\"\")\"\n\"IF(C10=NOW(),\"\"Input is NOT Required!\"\",\"\"Thank You For Your Input\"\")\"\n\"IF(C11=\"\"\"\",\"\"Input Last Date Books are Closed Through\"\",\"\"Input Completed\"\")\"\n\"IF(C11=\"\"\"\",\"\"Input Last Date Books are Closed Through\"\",\"\"Input Completed\"\")\"\n\"IF(C12=\"\"\"\",\"\"Input Bank Name For Advance Transfer\"\",\"\"Input Completed\"\")\"\n\"IF(C12=\"\"\"\",\"\"Input Bank Name For Advance Transfer\"\",\"\"Input Completed\"\")\"\n\"IF(C13=\"\"\"\",\"\"Input 'TITLE' of Person Authorized to Sign FRS\"\",\"\"Input Completed\"\")\"\n\"IF(C13=\"\"\"\",\"\"Input 'TITLE' of Person Authorized to Sign FRS\"\",\"\"Input Completed\"\")\"\n\"CONCATENATE(\"\"To ENTER Data for FRS Number \"\",C9,\"\" Press Either the Regular or Continuation Sheet Button\"\")\"\n\"CONCATENATE(\"\"To ENTER Data for FRS Number \"\",C9,\"\" Press Either the Regular or Continuation Sheet Button\"\")\"\n\"CONCATENATE(\"\"To Print FRS Number \"\",C9,\"\" \"\")\"\n\"CONCATENATE(\"\"To Print FRS Number \"\",C9,\"\" \"\")\"\n\"COUNTA('Supplemental Sheet Copy 1'!B15:C48,'Supplemental Sheet Copy 1'!B50:C62)\"\n\"COUNT('Supplemental Sheet Copy 1'!E50:H62,'Supplemental Sheet Copy 1'!E15:H48,'Supplemental Sheet Copy 1'!K15:K48,'Supplemental Sheet Copy 1'!K50:K62)\"\n\"IF(SUM(B29:B30)<1,1,2)\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"SUM(E17:E37)+SUM('Supplemental Sheet Copy 1'!E15:E48,'Supplemental Sheet Copy 1'!E50:E62)\"\n\"SUM(G17:G37)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(G17:G37)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(E38:E42)\"\n\"SUM(G38:G42)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"IF(+K43+K44+K45=F43,0,IF(K43+K44+K45<F43,F43-(K43+K44+K45),IF(K43+K44+K45>F43,(K43+K44+K45)-F43)))\"\n\"IF(+K43+K44+K45=F43,0,IF(K43+K44+K45<F43,F43-(K43+K44+K45),IF(K43+K44+K45>F43,(K43+K44+K45)-F43)))\"\n\"SUM(C46:C48)\"\n\"'Start Here'!C12\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!D17\"\n\"SUM(D14:D34)\"\n\"SUM(E14:E34)+SUM('Supplemental Sheet Copy 1'!E15:E48,'Supplemental Sheet Copy 1'!E50:E62)\"\n\"SUM(G14:G34)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(G14:G34)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(D35:D39)\"\n\"SUM(G35:H39)\"\n\"SUM(G35:H39)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"'Copy 1'!K46\"\n\"'Start Here'!C12\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!D17\"\n\"SUM(D14:D34)\"\n\"SUM(E14:E34)+SUM('Supplemental Sheet Copy 1'!E15:E48,'Supplemental Sheet Copy 1'!E50:E62)\"\n\"SUM(G14:G34)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(G14:G34)+SUM('Supplemental Sheet Copy 1'!G15:H48,'Supplemental Sheet Copy 1'!G50:H62)\"\n\"SUM(D35:D39)\"\n\"SUM(G35:H39)\"\n\"SUM(G35:H39)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"'Copy 1'!K46\"\n\"'Start Here'!C12\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER('Start Here'!C4)\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"UPPER(CONCATENATE('Start Here'!C6,\"\",   \"\",'Start Here'!C7,\"\"   \"\",'Start Here'!C8))\"\n\"IF('Copy 1'!D43>0.01,'Copy 1'!D43,\"\" \"\")\"\n\"IF('Copy 1'!D43>0.01,'Copy 1'!D43,\"\" \"\")\"\n\"IF('Copy 1'!E43>0.01,'Copy 1'!E43,\"\" \"\")\"\n\"IF('Copy 1'!E43>0.01,'Copy 1'!E43,\"\" \"\")\"\n\"IF('Copy 1'!E43>0.01,'Copy 1'!E43,\"\" \"\")\"\n\"IF('Copy 1'!F43>0.01,'Copy 1'!F43,\"\" \"\")\"\n\"IF('Copy 1'!F43>0.01,'Copy 1'!F43,\"\" \"\")\"\n\"IF('Copy 1'!G43>0.01,'Copy 1'!G43,\"\" \"\")\"\n\"IF('Copy 1'!G43>0.01,'Copy 1'!G43,\"\" \"\")\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C12\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"CONCATENATE(\"\"PAGE _1_ OF _\"\",'Start Here'!B31,\"\"_ PAGES \"\")\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!B17:C17\"\n\"'Copy 1'!C25\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"CONCATENATE(\"\"18. Adv. Not Deposited FRS \"\",'Start Here'!C9-1)\"\n\"'Start Here'!C12\"\n\"'Start Here'!C11\"\n\"'Start Here'!C11\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"'Start Here'!C13\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"'Supplemental Sheet Copy 1'!B15:C15\"\n\"'Supplemental Sheet Copy 1'!B15:C15\"\n\"'Supplemental Sheet Copy 1'!E15:F48\"\n\"'Supplemental Sheet Copy 1'!K15:K62\"\n\"'Supplemental Sheet Copy 1'!E50:F62\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"UPPER(LEFT('Start Here'!C3,6))\"\n\"'Start Here'!C9\"\n\"'Start Here'!C9\"\n\"'Start Here'!C10\"\n\"'Start Here'!C10\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C4)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"  \"\",'Start Here'!C6,\"\",       \"\",'Start Here'!C7,\"\"  \"\",'Start Here'!C8)\"\n\"CONCATENATE(\"\"OF  \"\",UPPER(TEXT('Start Here'!C11,\"\"MMM-YY\"\")))\"\n\"'Supplemental Sheet Copy 1'!B15:C15\"\n\"'Supplemental Sheet Copy 1'!B15:C15\"\n\"'Supplemental Sheet Copy 1'!E15:F48\"\n\"'Supplemental Sheet Copy 1'!K15:K62\"\n\"'Supplemental Sheet Copy 1'!E50:F62\"\n\"SUM(J23:J28)\"\n\"SUM(J71:J78)\"\n\"SUM(J79+J68+J64+J62+J57+J56+J42+J36+J29)\"\n\"SUM(E91:E100)\"\n\"SUM(E129:E171)\"\n\"SUM(E175:E178)\"\n\"SUM(E179+E172+E126+E117+E101)\"\n\"SUM(+E179+E172+E126+E117+I101)\"\n\"SUM(G179+G172+G126+G117+G206)\"\n\"SUM(I179+I172+I126+I117+I101)\"\n\"SUM(I189-I191)\"\n\"B21\"\n\"SUM(B21:D21)\"\n\"SUM(G21:L21)\"\n\"B20+B21\"\n\"B25-B24\"\n\"E26\"\n\"E28-F28\"\n\"SUM(B14,B15,B16,B17)\"\n\"SUM(B36,B37,B38,B39,B40)\"\n\"SUM(G29:G40)\"\n\"C$49\"\n\"A$8+1\"\n\"A$13+1\"\n\"A$15+1\"\n\"A$16+1\"\n\"A$17+1\"\n\"A$18+1\"\n\"A$19+1\"\n\"A$21+1\"\n\"A$22+1\"\n\"A$23+1\"\n\"A$24+1\"\n\"A$25+1\"\n\"SUM(C13:C25)\"\n\"A$27+1\"\n\"A$32+1\"\n\"A$33+1\"\n\"SUM(C32:C33)\"\n\"A$34+1\"\n\"A$36+1\"\n\"A$37+1\"\n\"A$38+1\"\n\"A$39+1\"\n\"A$40+1\"\n\"A$42+1\"\n\"A$43+1\"\n\"A$44+1\"\n\"SUM(C36:C44)\"\n\"A$46+1\"\n\"C$8+C$27-C$46\"\n\"2026092-8265\"\n\"SUM(B11:J11)\"\n\"416599+37+6000+110979+44\"\n\"SUM(B11:B19)\"\n\"3486+7+132-42+251+30+17+214+1091+1278181+2395+119956+1092361+33832+25+7+4279+100\"\n\"29461+5997\"\n\"9630+147890\"\n\"SUM(B23:B35)\"\n\"SUM(D24:D35)\"\n\"398314+419013-368341\"\n\"64995+1\"\n\"1455157-H39\"\n\"9735667-53289\"\n\"3077969-8112\"\n\"SUM(B37:B46)\"\n\"SUM(D39:D46)\"\n\"B47+B36\"\n\"+F16+F17\"\n\"335381+4714082\"\n\"+F44+F43\"\n\"+SUM(H9:H45)\"\n\"SUM(B14:J14)\"\n\"1525677+48063\"\n\"320477+3148157\"\n\"499218\"\n\"431668+4965\"\n\"9824+85+76388+4314\"\n\"SUM(B14:B28)\"\n\"11809536+2\"\n\"14038711+1\"\n\"SUM(B33:B37)\"\n\"SUM(J33:J40)\"\n\"B29-B41\"\n\"14468+18162+407054\"\n\"4848+224600\"\n\"263031+693804+663934+10000\"\n\"-263031-187908\"\n\"SUM(B47:B48)\"\n\"SUM(J47:J49)\"\n\"B50+B44\"\n\"B52+B54\"\n\"SUM(L52:L55)\"\n\"12257662-50000\"\n\"SUM(C13:AL13)\"\n\"SUM(C12:C21)\"\n\"SUM(AG13:AG21)\"\n\"2181598+11313\"\n\"400+5660\"\n\"SUM(C25:C37)\"\n\"SUM(C39:C45)\"\n\"C46+C38\"\n\"SUM(AM46+AM38)\"\n\"C48+G48+E48+I48+K48+M48+O48+Q48+S48+U48+W48+Y48+AA48+AC48+AE48+AG48+AI48+AK48-AM48\"\n\"SUM(B14:AJ14)\"\n\"SUM(B14:B27)\"\n\"4770659-2000\"\n\"SUM(B32:B36)\"\n\"SUM(J32:J39)\"\n\"B28-B40\"\n\"SUM(B46:B47)\"\n\"SUM(J46:J48)\"\n\"B49+B43\"\n\"B51+B54\"\n\"SUM(AL51:AL55)\"\n\"B56+F56+D56+H56+J56+L56+P56+R56+T56+V56+X56+Z56+AB56+AD56+AH56+AJ56-AL56\"\n\"'Govt Funds-RE'!L52\"\n\"84789+209544+3066514+17252\"\n\"-270948-694668-1534560\"\n\"+H21+H22\"\n\"-(31161+85363+13335+9667)+10602\"\n\"73436+182289+256456-(182289+405767+209984+129630+139880-439+773408)\"\n\"SUM(L9:L50)\"\n\"448429+1050127+1681054+3794735\"\n\"10000+1300000+1919275+4339015\"\n\"SUM(B6:B11)\"\n\"SUM(B12:B13)\"\n\"SUM(B16:B23)\"\n\"E24-E26\"\n\"B24-B25\"\n\"D26+1157000+5175000+((D26/D24)*18000000)\"\n\"SUM(B28:B30)+B24\"\n\"B14-B31-B34-B35\"\n\"+D21+D22+D23\"\n\"+D24+D27+D28+D29\"\n\"SUM(D12:D13)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"-80+40\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"-80+40\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+((D9-F9)/F9)*100\"\n\"SUM(D9:D12)\"\n\"+L16+N16+P16+R16\"\n\"838348.7\"\n\"370093+1596579\"\n\"SUM(G16:G18)\"\n\"+J19-SUM(T19:U19)\"\n\"+N32+P32+R32\"\n\"90849*1.47\"\n\"+G49-H49\"\n\"SUM(D19,D27,D35,D43,D51)\"\n\"SUM(H14:H16)\"\n\"+H17-K17-L17\"\n\"128500\"\n\"140000\"\n\"SUM(E17,E23,E29,E35,E41,E47,E53,E59,E65,E71)\"\n\"+EU!J53+Agencies!H73\"\n\"+EU!T53+Agencies!K73\"\n\"+G86-K86-L86\"\n\"+G13-K13-L13\"\n\"+Agencies!G86+CERN!G13+CERN!G14+G16+G17\"\n\"+L16+N16+P16+R16\"\n\"838348.7\"\n\"370093+1596579\"\n\"SUM(G16:G18)\"\n\"+J19-SUM(T19:U19)\"\n\"+N32+P32+R32\"\n\"90849*1.47\"\n\"+G49-H49\"\n\"SUM(D19,D27,D35,D43,D51)\"\n\"SUM(H14:H16)\"\n\"+H17-K17-L17\"\n\"128500\"\n\"140000\"\n\"SUM(E17,E23,E29,E35,E41,E47,E53,E59,E65,E71)\"\n\"+EU!J53+Agencies!H73\"\n\"+EU!T53+Agencies!K73\"\n\"+G86-K86-L86\"\n\"+G13-K13-L13\"\n\"+Agencies!G86+CERN!G13+CERN!G14+G16+G17\"\n\"SUM(F2:F25)\"\n\"SUM(G3:G25)\"\n\"F26*2\"\n\"SUM(F27:F28)\"\n\"SUM(F2:F25)\"\n\"SUM(G3:G25)\"\n\"F26*2\"\n\"SUM(F27:F28)\"\n\"C4-C5\"\n\"IF(C$4=0,\"\"-  \"\",C6/C$4)\"\n\"C6-C8\"\n\"SUM(C12:C14)\"\n\"C9+C15\"\n\"C16-SUM(C18:C19)\"\n\"SUM(C20:C21)\"\n\"SUM(C6:C10)\"\n\"SUM(C25:C28)\"\n\"SUM(C29:C30,C37)\"\n\"SUM(D5,D7:D16)\"\n\"SUM(D19:D24)\"\n\"SUM(D27:D31)\"\n\"SUM(D17,D25,D32:D33)\"\n\"SUM(D34:D35)\"\n\"D17+D25\"\n\"SUM(D5:D7)\"\n\"SUM(C17,C22)\"\n\"IF(C5=0,\"\"\"\",C6/C5)\"\n\"SUM(C5,C12,C19,C26)\"\n\"IF(E5=0,\"\"\"\",E6/E5)\"\n\"SUM(E5,E10,E15,E20,E25)\"\n\"SUM(E5:E6)\"\n\"SUM(E32:E34)\"\n\"E30+E35\"\n\"SUM(C9:C11)\"\n\"C15\"\n\"C17-C18\"\n\"IF(C$17=0,\"\"-  \"\",C19/C$17)\"\n\"C19-C21\"\n\"C22+C28\"\n\"C29-SUM(C31:C32)\"\n\"SUM(C33:C34)\"\n\"SUM(C40,C45)\"\n\"IF(C9=0,\"\"\"\",C10/C9)\"\n\"SUM(C9,C16,C23,C30)\"\n\"SUM(C9:C11)\"\n\"C15\"\n\"C17-C18\"\n\"IF(C$17=0,\"\"-  \"\",C19/C$17)\"\n\"C19-C21\"\n\"C22+C28\"\n\"C29-SUM(C31:C32)\"\n\"SUM(C33:C34)\"\n\"SUM(C40,C45)\"\n\"IF(C9=0,\"\"\"\",C10/C9)\"\n\"SUM(C9,C16,C23,C30)\"\n\"+(D5-E5)/E5\"\n\"SUM(D5:D7)\"\n\"+D13/D5\"\n\"+D15/D6\"\n\"+D17/D7\"\n\"+D13+D15+D17\"\n\"+D19/D8\"\n\"SUM(D24:D27)\"\n\"+D28/D8\"\n\"+D31/D8\"\n\"+D35/D8\"\n\"SUM(C5:C7)\"\n\"+C13/C5\"\n\"+C15/C6\"\n\"+C17/C7\"\n\"+C13+C15+C17\"\n\"+C19/C8\"\n\"+C26/C8\"\n\"+C19-C26\"\n\"+C29/C8\"\n\"+C33/C8\"\n\"16218\"\n\"15446.9\"\n\"AD20\"\n\"32182+9224\"\n\"70859+1614\"\n\"78585.3+1851\"\n\"91998+2046\"\n\"120480+1356\"\n\"158318+772\"\n\"189422+536\"\n\"221219+423\"\n\"254361+323\"\n\"282199+268\"\n\"728122+300+22475\"\n\"22030\"\n\"20745\"\n\"20949\"\n\"23284\"\n\"19439\"\n\"16718\"\n\"15108\"\n\"12783\"\n\"11373\"\n\"12499\"\n\"11690\"\n\"11345\"\n\"11873\"\n\"12156\"\n\"12085\"\n\"13400\"\n\"14107\"\n\"25164\"\n\"SUM(C20:C22)\"\n\"107756.4\"\n\"113875\"\n\"0.0994\"\n\"124314.8\"\n\"133112.9\"\n\"24753\"\n\"23252.9\"\n\"140851\"\n\"153615\"\n\"174852\"\n\"160182\"\n\"163139730/1000\"\n\"179391.452\"\n\"185282\"\n\"339597.738\"\n\"91187\"\n\"99806.2\"\n\"266493\"\n\"278049.8\"\n\"286018\"\n\"316105\"\n\"337727222/1000\"\n\"345884.499\"\n\"362753\"\n\"532500.625\"\n\"435\"\n\"632\"\n\"-865\"\n\"-1182\"\n\"-1083\"\n\"-579\"\n\"-869\"\n\"-970\"\n\"-396\"\n\"-416\"\n\"12064-81\"\n\"116735\"\n\"123691\"\n\"460291\"\n\"0.0904\"\n\"0.0881\"\n\"0.063294\"\n\"0.062599\"\n\"0.061025\"\n\"0.061\"\n\"0.060629\"\n\"0.060526\"\n\"0.061342\"\n\"0.061798\"\n\"47\"\n\"50\"\n\"57\"\n\"55\"\n\"58\"\n\"62\"\n\"70\"\n\"72\"\n\"2991.2\"\n\"3941\"\n\"14185\"\n\"14852.1\"\n\"15453\"\n\"16134\"\n\"16581\"\n\"17055\"\n\"17629\"\n\"18024-802\"\n\"17875.5\"\n\"18371+266\"\n\"18791+253\"\n\"19687+184\"\n\"20827.2\"\n\"3454\"\n\"4480.3\"\n\"956\"\n\"953\"\n\"1025.9\"\n\"1024.6\"\n\"1025.4\"\n\"1025\"\n\"1026.9\"\n\"1023.1\"\n\"1020.6\"\n\"1019.4\"\n\"3.13\"\n\"4.14\"\n\"12.85\"\n\"13.37\"\n\"13.95\"\n\"14.59\"\n\"14.94\"\n\"15.44\"\n\"16.02\"\n\"AL20\"\n\"SUM(AK24:AL24)\"\n\"AK25\"\n\"C4-C5\"\n\"IF(C$4=0,\"\"-  \"\",C6/C$4)\"\n\"C6-C8\"\n\"SUM(C12:C14)\"\n\"C9+C15\"\n\"C16-SUM(C18:C19)\"\n\"SUM(C20:C21)\"\n\"SUM(C6:C10)\"\n\"SUM(C25:C28)\"\n\"SUM(C29:C30,C37)\"\n\"SUM(D5,D7:D16)\"\n\"SUM(D19:D24)\"\n\"SUM(D27:D31)\"\n\"SUM(D17,D25,D32:D33)\"\n\"SUM(D34:D35)\"\n\"D17+D25\"\n\"SUM(D5:D7)\"\n\"SUM(C17,C22)\"\n\"IF(C5=0,\"\"\"\",C6/C5)\"\n\"SUM(C5,C12,C19,C26)\"\n\"IF(E5=0,\"\"\"\",E6/E5)\"\n\"SUM(E5,E10,E15,E20,E25)\"\n\"SUM(E5:E6)\"\n\"SUM(E32:E34)\"\n\"E30+E35\"\n\"(BRADLEY!C3+BUTLER!C3+KENT!C3+LANDMARK!C3+MEMORIAL!C3+MIRIAM!C3+NEWPORT!C3+RIH!C3+RWMC!C3+S.COUNTY!C3+ST.JOE!C3+WESTERLY!C3+'W&I'!C3)/$F$29\"\n\"(BUTLER!C3+KENT!C3+'W&I'!C3)/ALL!$F$29\"\n\"(BRADLEY!C3+MIRIAM!C3+NEWPORT!C3+RIH!C3)/ALL!$F$29\"\n\"C15-C13\"\n\"18094+3707\"\n\"18426+3915\"\n\"21544+4241\"\n\"23899+5182\"\n\"47295+454\"\n\"40727+1120\"\n\"1775+342\"\n\"3779+750\"\n\"5128+748\"\n\"9796+782\"\n\"10725-6111\"\n\"2775+1230\"\n\"C15-C13\"\n\"27418+4302\"\n\"28912+5024\"\n\"26355.4+5425.7\"\n\"26698.6+5635.5\"\n\"44210+518\"\n\"44014+344\"\n\"1172-36\"\n\"2273-4\"\n\"2345-47\"\n\"29780-8336\"\n\"31891-8948\"\n\"36916-9465\"\n\"C15-C13\"\n\"68436+12853\"\n\"70983.1+13699.6\"\n\"77259.3+16802.1\"\n\"86011.6+18949.3\"\n\"1795.5+8332.6\"\n\"3345+12796\"\n\"4968.2+8510\"\n\"2983.3+7059\"\n\"16128.8-3653.5\"\n\"17627-8280\"\n\"13136.6-6556.4\"\n\"11679.7-5335.4\"\n\"C15-C13\"\n\"42264\"\n\"79228.5-11.1-286.4\"\n\"95116.2+1968.1-113.4-232.7\"\n\"91204-8\"\n\"93475.1+23.9\"\n\"C15-C20\"\n\"C21+C22\"\n\"7482-2\"\n\"2387-40\"\n\"3204.6-61.4\"\n\"1822.8-77.8\"\n\"8332.6+8181.9+3804.9+251.4+220.2\"\n\"12796.4+3486.5+261.8+252.6\"\n\"8510+2745.8+270.9+278.5\"\n\"7059+3602.9+150+307.8\"\n\"7758+741\"\n\"7054+543\"\n\"6349+335\"\n\"C15-C13\"\n\"62445.1+13558\"\n\"64338.4+14353.1\"\n\"66848.2+15318.1\"\n\"71132.6+17212.7\"\n\"123191+33204\"\n\"55971+33204\"\n\"C15-C13\"\n\"60820+12073\"\n\"61873+13119\"\n\"69649+14360\"\n\"82076+18225\"\n\"13633+32860\"\n\"34566+15475\"\n\"31627+18746\"\n\"135261+84335\"\n\"91579+84335\"\n\"C15-C13\"\n\"25711+3244\"\n\"26065.7+3167.4\"\n\"28902.5+3731.6\"\n\"31185.4+4958.8\"\n\"76610+77107\"\n\"58608+85041\"\n\"51832+80176\"\n\"767054+30214\"\n\"432724+30214\"\n\"C15-C13\"\n\"189697+39358\"\n\"193225+43465\"\n\"207851+46959\"\n\"232712+52484\"\n\"355520+29266\"\n\"348902+32485\"\n\"285028+31184\"\n\"6568+5147\"\n\"1865+4963\"\n\"557+1270\"\n\"309+1188\"\n\"C15-C13\"\n\"2773+7594\"\n\"2395+7841\"\n\"450+5255\"\n\"731+5486\"\n\"C15-C13\"\n\"1202+437\"\n\"1084+352\"\n\"6063+5428\"\n\"6726+4637\"\n\"6396+3623\"\n\"11135+2634\"\n\"1589+21281\"\n\"C15-C13\"\n\"60572+13427\"\n\"5428+18405+127\"\n\"4638+14500+122\"\n\"3624+11412+443\"\n\"C15-C13\"\n\"38590-2989\"\n\"1632+984\"\n\"1261+409\"\n\"13060+74\"\n\"C15-C13\"\n\"87809.7+18363.9\"\n\"91240.8+18821.2\"\n\"98711.6+22014.3\"\n\"106891.5+26099.5\"\n\"54153+4989\"\n\"50504+4235\"\n\"5771+602\"\n\"8127+538\"\n\"9783+661\"\n\"+B7+B8\"\n\"+B11*B9\"\n\"+B9+B12\"\n\"B4*B14\"\n\"+B15*(1+B19)\"\n\"+B21/B4\"\n\"+B21/12\"\n\"PMT(B28,B27,-1*B26,0,0)\"\n\"+B19*B15/B4\"\n\"+B30-B29\"\n\"+C5*35\"\n\"+C5/C8\"\n\"$C12/$C$5\"\n\"$C12*(1+$F12)/$C$5\"\n\"$C12/$C$8\"\n\"$C12*(1+$F12)/$C$8\"\n\"$J12/12\"\n\"$K12/12\"\n\"+SUM(H12:H27)\"\n\"SUM(C12:C35)*0.9\"\n\"C37+SUMPRODUCT(C12:C35,F12:F35)\"\n\"+H29+SUM(H31:H35)\"\n\"SUM(C43:C55)\"\n\"$F59/$C$5\"\n\"$F59/$C$8\"\n\"$C$57\"\n\"H$57\"\n\"+K74/12\"\n\"$F$59\"\n\"I$59\"\n\"F74-F75\"\n\"C$37\"\n\"H$37\"\n\"($F$37+$F$39)*$C$67\"\n\"(I$37+I$39)*$C$67\"\n\"F79-F78\"\n\"PMT($C$69,$C$65,-1*F$76,0,0)\"\n\"NPV($C$69,IF($C$65<1,0,F$80),IF($C$65<2,0,F$80),IF($C$65<3,0,F$80),IF($C$65<4,0,F$80),IF($C$65<5,0,F$80),IF($C$65<6,0,F$80),IF($C$65<7,0,F$80),IF($C$65<8,0,F$80),IF($C$65<9,0,F$80),IF($C$65<10,0,F$80),IF($C$65<11,0,$F$80))-$F$76\"\n\"(F$90+F$91)/$C$67\"\n\"(F$92-F39)/F$91-1\"\n\"AC6\"\n\"AE6\"\n\"IF(ISBLANK(M9),0,IF(ISTEXT(M9),IF(K9=450,1,IF(K9=451,2,3))))\"\n\"IF(K9=450,AE9*(1/3),IF(K9=451,AE9*(2/3),AE9))\"\n\"IF(M9=\"\"A\"\",12,IF(M9=\"\"A-\"\",11.01,IF(M9=\"\"B+\"\",9.99,IF(M9=\"\"B\"\",9,IF(M9=\"\"B-\"\",8.01,IF(M9=\"\"C+\"\",6.99,IF(M9=\"\"C\"\",6,IF(M9=\"\"C-\"\",5.01,0))))))))\"\n\"IF(ISBLANK(M52),0,IF(ISTEXT(M52),IF(H52=1,1,IF(H52=2,2,3))))\"\n\"IF(H52=1,AE52*(1/3),IF(H52=2,AE52*(2/3),AE52))\"\n\"AC61\"\n\"AE61\"\n\"SUM(AC6:AC61)\"\n\"AD62/AC62\"\n\"+Financial!A1\"\n\"(C8/B8)\"\n\"+C9/B9\"\n\"SUM(B8:B10)\"\n\"(C18-B18)\"\n\"SUM(B16:B22)\"\n\"+B11-B23\"\n\"+B29\"\n\"C29+C30\"\n\"29+1120\"\n\"+B33\"\n\"+B38+B34\"\n\"SUM(C4:C7)\"\n\"123000/9\"\n\"D3*0.249\"\n\"SUM(C13:C17)\"\n\"SUM(C19:C24)\"\n\"SUM(B3:B29)\"\n\"SUM(B30:B31)\"\n\"+C8-C9\"\n\"SUM(E9:E16)\"\n\"SUM(C21:C51)\"\n\"SUM(E18:E50)\"\n\"+C52\"\n\"1195873.58+37485.6\"\n\"SUM(C54:C94)\"\n\"+E54-E94\"\n\"138365731.16-420\"\n\"SUM(C10:C13)\"\n\"+E7-E13\"\n\"11458516.95+10494921.83+123893690.24+68161656.87-2500764.62-10387693.92-123444706.67-175776.95-20300-74116.6+11668143.92-283801684.41+2678789.56+183826772.13\"\n\"313162.09-1838244.33+183707550.18+139191.88+4400+31272.9+6111+1500+57.83+13077.2-10529.6-99572.9+110102.5-20746.03+415001.33+3837166.81-235726.95\"\n\"SUM(C11:C12)\"\n\"SUM(E7:E14)\"\n\"100000+360000+100000+100\"\n\"30024636.31+410486.83+2058400-560100\"\n\"SUM(D10:D17)\"\n\"128839270.88+29173723.33+15379769.06\"\n\"224765.17+2488574.29+1490180.46+7335130.64+1097997.69+2710135.92\"\n\"SUM(D21:D26)\"\n\"+F18-F27\"\n\"5462233.13+1131548.05+5827984.23+1119812.33\"\n\"+F29-F31\"\n\"SUM(C6:C16)\"\n\"SUM(C6:C15)\"\n\"B4*52/12\"\n\"SUM(B4:B29)\"\n\"B4*52/12\"\n\"SUM(B4:B17)\"\n\"B4*52/12\"\n\"SUM(B4:B19)\"\n\"B4*52/12\"\n\"SUM(C4:C44)\"\n\"B4*52/12\"\n\"SUM(B4:B29)\"\n\"Income!$C$30\"\n\"B7*52/12\"\n\"Priorities!$C$18\"\n\"Formal!$C$20\"\n\"Everyday!$C$45\"\n\"Occasional!$C$30\"\n\"SUM(B7:B11)\"\n\"SUM(C8:C11)\"\n\"B5-B12\"\n\"Secured!A17\"\n\"Unsecured!A16\"\n\"Income!$C$4\"\n\"Income!$C$5\"\n\"Income!$C$15\"\n\"Income!$C$7\"\n\"Income!$C$8+Income!C9+Income!C10+Income!C12+Income!C13+Income!C18+Income!C19\"\n\"Income!$C$21+Income!C22+Income!C24+Income!C25+Income!C27+Income!C28+Income!C17\"\n\"SUM(C7:C12)\"\n\"Priorities!$C$4\"\n\"Priorities!$C$7\"\n\"Priorities!$C$6\"\n\"Secured!B7\"\n\"Secured!C7\"\n\"Priorities!$C$5\"\n\"Formal!$C$8\"\n\"Formal!$C$6+Formal!$C$7\"\n\"Priorities!$C$16\"\n\"Priorities!$C$9\"\n\"Priorities!$C$13\"\n\"Priorities!$C$12\"\n\"Priorities!$C$10\"\n\"Formal!$C$12+Formal!$C$13\"\n\"Unsecured!B6\"\n\"Unsecured!C6\"\n\"Everyday!$C$4+Everyday!$C$5+Everyday!$C$6+Everyday!$C$7+Everyday!C20+Everyday!C21+Everyday!C22+Everyday!C23+Everyday!C24+Everyday!C26+Everyday!C27+Everyday!C39+Everyday!C40+Everyday!C43\"\n\"Everyday!$C$9+Everyday!$C$10+Everyday!$C$11+Everyday!$C$12+Everyday!$C$13+Everyday!$C$14+Everyday!$C$15+Everyday!$C$16\"\n\"Everyday!$C$18\"\n\"Formal!$C$15+Everyday!C30+Everyday!C31\"\n\"Formal!$C$9+Formal!$C$10+Everyday!C28+Occasional!C19+Occasional!C20+Occasional!C21\"\n\"Occasional!$C$12+Occasional!C13+Occasional!C14\"\n\"Occasional!$C$22\"\n\"Everyday!$C$32+Everyday!C33+Everyday!C34+Everyday!C35+Everyday!C41\"\n\"Occasional!$C$24+Occasional!C27+Occasional!C28\"\n\"SUM(G18:G35)\"\n\"Formal!$C$16+Formal!$C$17\"\n\"Occasional!$C$4+Occasional!C5+Occasional!C6+Occasional!C8+Occasional!C16+Occasional!C10+Occasional!C9+Occasional!C18+Occasional!C24+Occasional!C25\"\n\"Everyday!$C$37\"\n\"SUM(C16:C39)\"\n\"C13-C40\"\n\"Income!$E$4\"\n\"Income!$E$5\"\n\"Income!$E$15\"\n\"Income!$E$7\"\n\"Income!$E$8+Income!E9+Income!E10+Income!E12+Income!E13+Income!E18+Income!E19\"\n\"Income!$E$21+Income!E22+Income!E24+Income!E25+Income!E27+Income!E28\"\n\"SUM(C7:C12)\"\n\"Priorities!$E$4\"\n\"Priorities!$E$7\"\n\"Priorities!$E$6\"\n\"Secured!B7\"\n\"Secured!E7\"\n\"Priorities!$E$5\"\n\"Formal!$E$8\"\n\"Formal!$E$6+Formal!$E$7\"\n\"Priorities!$E$16\"\n\"Priorities!$E$9\"\n\"Priorities!$E$13\"\n\"Priorities!$E$12\"\n\"Priorities!$E$10\"\n\"Formal!$E$12++Formal!$E$13\"\n\"Unsecured!B6\"\n\"Unsecured!E6\"\n\"Everyday!$E$4+Everyday!$E$5+Everyday!$E$6+Everyday!$E$7+Everyday!E20+Everyday!E21+Everyday!E22+Everyday!E23+Everyday!E24+Everyday!E26+Everyday!E27+Everyday!E39+Everyday!E40+Everyday!E43\"\n\"Everyday!$E$9+Everyday!$E$10+Everyday!$E$11+Everyday!$E$12+Everyday!$E$13+Everyday!$E$14+Everyday!$E$15+Everyday!$E$16\"\n\"Everyday!$E$18\"\n\"Formal!$E$15+Everyday!E30+Everyday!E31\"\n\"Formal!$E$9+Formal!$C$10+Everyday!E28+Occasional!E19+Occasional!EE20+Occasional!E21\"\n\"Occasional!$E$12+Occasional!E13+Occasional!E14\"\n\"Occasional!$E$22\"\n\"Everyday!$E$32+Everyday!E33+Everyday!E34+Everyday!E35+Everyday!E41\"\n\"Occasional!$E$24+Occasional!E25+Occasional!E27+Occasional!E28\"\n\"SUM(G18:G35)\"\n\"Formal!$E$16+Formal!$E$17\"\n\"Occasional!$E$4+Occasional!E5+Occasional!E6+Occasional!E8+Occasional!E16+Occasional!E10+Occasional!E9+Occasional!E18+Occasional!E24+Occasional!E25\"\n\"Everyday!$E$37\"\n\"SUM(C16:C39)\"\n\"C13-C40\"\n\"SUM(G14:G20)\"\n\"+G37+G29+G21\"\n\"SUM(B6:B121)\"\n\"'Table G.2'!B6\"\n\"IF(B7>0,C7/B7,0)\"\n\"SUM(B7:B11)\"\n\"SUM(B14:B19)\"\n\"SUM(B5,B12,B20)\"\n\"SUM(C12,C20)\"\n\"SUM(C6:V6)\"\n\"SUM(B6,B7,B8,B10)\"\n\"SUM(B13:B18)\"\n\"SUM(B11,B19)\"\n\"44394.3+6741.4\"\n\"40348.1+6741.4\"\n\"+B16-B17\"\n\"+B18/B16\"\n\"+B18/B17\"\n\"SUM(B6:B11)\"\n\"SUM(B8:B9)\"\n\"SUM(B10:B14)\"\n\"SUM(B15:B29)\"\n\"SUM(B30:B33)\"\n\"B6\"\n\"B8/B$36*100\"\n\"F10-I10\"\n\"128310.72+158872.09\"\n\"F50+F52-I50\"\n\"SUM(F176:F181)\"\n\"F191+F193\"\n\"SUM(F211:F213)\"\n\"F250+F249-I249\"\n\"F273-H273\"\n\"F283-I280\"\n\"F304-I299\"\n\"SUM(F299:F303)\"\n\"F367-H357\"\n\"SUM(F357:F366)\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"IF(OR((H21=\"\"Failed\"\"),(H108=\"\"Failed\"\"),(H120=\"\"Failed\"\"),(H126=\"\"Failed\"\"),(H157=\"\"Failed\"\"),(H158=\"\"Failed\"\"),(H208=\"\"Failed\"\"),(H244=\"\"Failed\"\"),(H253=\"\"Failed\"\"),(I369=\"\"Failed\"\"),([1]st!N23=\"\"Failed\"\"),([1]st!N52=\"\"Failed\"\")),\"\"Validation failed - see message(s) below\"\",\"\"Validation passed\"\")\"\n\"B68\"\n\"B77\"\n\"B83\"\n\"B90\"\n\"B92\"\n\"SUM(B11:B15)\"\n\"SUM(B19:B22)\"\n\"B16-B23+B25\"\n\"SUM(B27:B31)\"\n\"B33\"\n\"E11\"\n\"P7+P8*B10/(E11-B10)+P9*(B10/(E11-B10))^2\"\n\"E11-B10\"\n\"B12/E12\"\n\"P12+P13*B10/(E11-B10)+P14*(B10/(E11-B10))^2\"\n\"C15*$B$8\"\n\"$P$7+$P$8*O18+$P$9*(O18)^2\"\n\"$P$12+$P$13*O18+$P$14*(O18)^2\"\n\"P18*(1-$B$5)*U18+Q18*V18\"\n\"$R$3-T18\"\n\"$R$3\"\n\"S18/$T$18\"\n\"T18/$R$3\"\n\"C15*$B$7\"\n\"$R$3/(1+O19)\"\n\"$B$6\"\n\"C18-C19-C20\"\n\"$B$10*$B$11\"\n\"C21-C22\"\n\"$B$5*C23\"\n\"C25/$B$13\"\n\"C25/$B$12\"\n\"S18\"\n\"(($C$38-P32*P18)*(1-$B$5))/Q18\"\n\"P32+Q32\"\n\"T18/E$12\"\n\"Q32/$E$12-S32\"\n\"(T32*$E$12)\"\n\"C15*($B$8-$B$7)/(C21)\"\n\"C21/C23\"\n\"C33*C34\"\n\"B6/(B8-B7)\"\n\"(C20+C22*(1-$B$5))/($B$8-$B$7)\"\n\"C21*C16+E21*E16+G21*G16\"\n\"(C25*C16+E25*E16+G25*G16)\"\n\"(C31*C16+E31*E16+G31*G16)\"\n\"((C25-C39)^2*C16+(E25-C39)^2*E16+(G25-C39)^2*G16)^0.5\"\n\"C41/C39\"\n\"((C31-C40)^2*C16+(E31-C40)^2*E16+(G31-C40)^2*G16)^0.5\"\n\"NORMDIST(0,C40,C42,TRUE)\"\n\"C39/$F$13\"\n\"B10\"\n\"D46+B49\"\n\"$B$11*(1-B5)\"\n\"B49/B50\"\n\"$F$13\"\n\"D46/B50\"\n\"B54*C54+D54*E54\"\n\"1-A7\"\n\"A7/B7\"\n\"E31\"\n\"A7*E7*(1-$B$14)+F7*B7\"\n\"C7\"\n\"$B$26*(1+(1-$B$14)*A31)\"\n\"C31+B31*(D31)\"\n\"C31\"\n\"C7\"\n\"E7\"\n\"G40\"\n\"G8/G9\"\n\"-G37\"\n\"G40\"\n\"G14/G15\"\n\"SUM(G22:G28)\"\n\"G29-G40\"\n\"G29\"\n\"A15+1\"\n\"+H17+G17\"\n\"+I17+K17+L17\"\n\"+D17-N17\"\n\"SUM(D17:D22)\"\n\"SUM(D27:D29)\"\n\"+N28+N27\"\n\"SUM(D9:D12)\"\n\"+D19+F19+H19+J19\"\n\"+M19-N19\"\n\"SUM(D19:D30)\"\n\"SUM(G8:G19)\"\n\"SUM(G23:G37)\"\n\"SUM(G5+G20-G38)\"\n\"SUM(E2:E25)\"\n\"SUM(D2:D24)\"\n\"B31-C31-D31\"\n\"B31+F31\"\n\"C31+D31+G31+H31\"\n\"E31+I31\"\n\"B31+B34+B37+B40+B44\"\n\"F14+F13\"\n\"F19+F18+F17\"\n\"I10+I11-I12-I13-I14-I15\"\n\"I22+I23-I24\"\n\"F12-F16-F20-F21+F23+F24+F25+F26\"\n\"F29-F31-F32\"\n\"C38+D38+E38\"\n\"SUM(H34:H39)\"\n\"IF(F54>0,(F54+F55)/F54,0)\"\n\"IF((F52+F53)>0,F50/(F52+F53),0)\"\n\"IF((F52+F53+F54)>0,F50/(F52+F53+F54),0)\"\n\"IF(F12>0,F21/F12,0)\"\n\"SUM(C38:C49)\"\n\"IF(F12>0,F20/F12,0)\"\n\"IF(F12>0,F16/F12,0)\"\n\"IF(F8>0,F12/F8,0)\"\n\"C50-C52-C53-C54\"\n\"(SUM(AF13:AF40)+SUM(AL11:AL40))-AF11\"\n\"((SUM(AR13:AR40)+SUM(BA11:BA40))-BA20)-AR11\"\n\"SUM(C13:C40)+SUM(K11:K40)-(C11)\"\n\"SUM(S13:S40)+SUM(Z11:Z40)-S11\"\n\"ROUND(SUM(F5:Q5),0)\"\n\"ROUND($E5*F5,0)\"\n\"SUM(S5:AD5)\"\n\"ROUND(SUMIF($D5:$D25,1,F5:F25),0)\"\n\"SUMIF($D5:$D25,1,S5:S25)\"\n\"ROUND(SUMIF($D5:$D25,2,F5:F25),0)\"\n\"SUMIF($D5:$D25,2,S5:S25)\"\n\"SUM(F27:F28)\"\n\"ROUND(SUM(G6:R6),0)\"\n\"ROUND(SUM(G6:G11),0)\"\n\"ROUND(SUM(G16:G39),0)\"\n\"G12+G40+G50\"\n\"ROUND(SUM(F4:Q4),0)\"\n\"ROUND(SUM(F4:F29),0)\"\n\"ROUND(SUM(F4:Q4),0)\"\n\"ROUND(SUM(F4:F29),0)\"\n\"ROUND(SUM(G4:R4),0)\"\n\"ROUND(SUM(G4:G29),0)\"\n\"ROUND(SUM(G4:R4),0)\"\n\"ROUND(SUM(G4:G29),0)\"\n\"ROUND(SUM(E4:P4),0)\"\n\"ROUND(SUM(E4:E29),0)\"\n\"Grants!S27\"\n\"SUM(B8:B9)\"\n\"Eq!G12\"\n\"Eq!G40\"\n\"Eq!G50\"\n\"SUM(B13:B15)\"\n\"Mat!F30\"\n\"ODC!F30\"\n\"'Tr-out'!G30\"\n\"'Tr-inside'!G30\"\n\"'Sub-Contr'!E30\"\n\"B16+B18+B20+B25+B27\"\n\"B10+B29\"\n\"SUM(B31:M31)\"\n\"ROUND(B31*$B$3/100/2,0)*2\"\n\"B31+B33\"\n\"SUM('Total-1'!$B8:'Total-1'!B8)\"\n\"SUM('Total-1'!$B9:'Total-1'!B9)\"\n\"D6+D9\"\n\"SUM('Total-1'!$B10:'Total-1'!B10)\"\n\"SUM('Total-1'!$B16:'Total-1'!B16)\"\n\"SUM('Total-1'!$B20:'Total-1'!B20)\"\n\"SUM('Total-1'!$B24:'Total-1'!B24)\"\n\"SUM('Total-1'!$B25:'Total-1'!B25)\"\n\"SUM('Total-1'!$B27:'Total-1'!B27)\"\n\"D15+D18+D21+D31+D34\"\n\"SUM('Total-1'!$B29:'Total-1'!B29)\"\n\"D12+D37\"\n\"SUM('Total-1'!$B31:'Total-1'!B31)\"\n\"SUM('Total-1'!$B33:'Total-1'!B33)\"\n\"SUM('Total-1'!$B35:'Total-1'!B35)\"\n\"INDEX('Total-2'!C13:O13,1,D4)\"\n\"INDEX('Total-2'!D38:O38,1,D4)\"\n\"SUM(D6:D8)\"\n\"SUM(D14:D21)\"\n\"D22+D33\"\n\"D11+D35\"\n\"D9+D37\"\n\"D39-D40\"\n\"SUM(D44:D53)\"\n\"D41-D54\"\n\"(G4-B4)/G4*100\"\n\"(C4-B4)/C4*100\"\n\"(E4-D4)/D4*100\"\n\"(G6-B6)/B6*100\"\n\"(L15-B15)/L15*100\"\n\"(M15-C15)/C15*100\"\n\"(F6-B6)/B6*100\"\n\"(C6-B6)/B6*100\"\n\"(D6-C6)/D6*100\"\n\"(F8-B8)/F8*100\"\n\"(G53-B53)/B53*100\"\n\"SUM(D14:D31)\"\n\"SUM(D14:D30)\"\n\"SUM(D14:D31)\"\n\"SUM(D14:D30)\"\n\"SUM(D5:D21)\"\n\"SUM(D5:D20)\"\n\"$E10/$E$36* 100\"\n\"$F10^ 2\"\n\"SUM($D$10:$D$33)\"\n\"SUM($E$10:$E$33)\"\n\"SUM($F$10:$F$33)\"\n\"SUM($G$10:$G$33)\"\n\"1 * $E10\"\n\"$F10/$F$36* 100\"\n\"$G10^ 2\"\n\"0.5 *$E18\"\n\"SUM($D$10:$D$33)\"\n\"SUM($E$10:$E$33)\"\n\"SUM($F$10:$F$33)\"\n\"SUM($G$10:$G$33)\"\n\"SUM($H$10:$H$33)\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H8\"\n\"$B$4-1\"\n\"$B$4-2\"\n\"$B$4-3\"\n\"$B$4-4\"\n\"$B$4-5\"\n\"$B$4-6\"\n\"SUM(B9:B15)\"\n\"SUM(B16:B24)\"\n\"SUM(B39:B43)\"\n\"SUM(B38:B43)\"\n\"SUM(B47:B54)\"\n\"B45+B55\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"B6+B7\"\n\"B8+SUM(B9:B17)\"\n\"B22+SUM(B23:B25)\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Balance Sheet'!A7\"\n\"IF('Data Balance Sheet'!B$25=0,\"\"\"\",'Data Balance Sheet'!B9/'Data Balance Sheet'!B$25*100)\"\n\"IF('Data Balance Sheet'!G$25=0,\"\"\"\",'Data Balance Sheet'!G19/'Data Balance Sheet'!G$25*-100)\"\n\"IF('Data Balance Sheet'!B$56=0,\"\"\"\",'Data Balance Sheet'!B29/'Data Balance Sheet'!B$56*100)\"\n\"'Data Balance Sheet'!A6\"\n\"B4\"\n\"B59-1\"\n\"'Data Balance Sheet'!A8\"\n\"IF(INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B9/INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B10/INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B11/INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B12/INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B13/INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B14/INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B15/INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B16/INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B17/INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B18/INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B19/INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B20/INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B21/INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B22/INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B23/INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B24/INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B25/INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B29/INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B30/INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(31,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B31/INDIRECT(ADDRESS(31,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B32/INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(33,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B33/INDIRECT(ADDRESS(33,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(34,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B34/INDIRECT(ADDRESS(34,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(35,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B35/INDIRECT(ADDRESS(35,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(36,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B36/INDIRECT(ADDRESS(36,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(37,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B37/INDIRECT(ADDRESS(37,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(38,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B38/INDIRECT(ADDRESS(38,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(39,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B39/INDIRECT(ADDRESS(39,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(40,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B40/INDIRECT(ADDRESS(40,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(41,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B41/INDIRECT(ADDRESS(41,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(42,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B42/INDIRECT(ADDRESS(42,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(43,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B43/INDIRECT(ADDRESS(43,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(44,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B44/INDIRECT(ADDRESS(44,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(45,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B45/INDIRECT(ADDRESS(45,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(46,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B46/INDIRECT(ADDRESS(46,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(47,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B47/INDIRECT(ADDRESS(47,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(48,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B48/INDIRECT(ADDRESS(48,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(49,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B49/INDIRECT(ADDRESS(49,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(50,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B50/INDIRECT(ADDRESS(50,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(51,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B51/INDIRECT(ADDRESS(51,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(52,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B52/INDIRECT(ADDRESS(52,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(53,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B53/INDIRECT(ADDRESS(53,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(55,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B55/INDIRECT(ADDRESS(55,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(56,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B56/INDIRECT(ADDRESS(56,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Income Statement'!A6\"\n\"IF('Data Income Statement'!B$6=0,\"\"\"\",'Data Income Statement'!B6/'Data Income Statement'!B$6*100)\"\n\"B4\"\n\"B36-1\"\n\"'Data Income Statement'!A6\"\n\"IF(INDIRECT(ADDRESS(6,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B6/INDIRECT(ADDRESS(6,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(7,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B7/INDIRECT(ADDRESS(7,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(8,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B8/INDIRECT(ADDRESS(8,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B9/INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B10/INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B11/INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B12/INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B13/INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B14/INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B15/INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B16/INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B17/INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B18/INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B19/INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B20/INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B21/INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B22/INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B23/INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B24/INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B25/INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(26,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B26/INDIRECT(ADDRESS(26,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(27,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B27/INDIRECT(ADDRESS(27,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(28,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B28/INDIRECT(ADDRESS(28,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B29/INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B30/INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B32/INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",'Data Balance Sheet'!B16/'Data Balance Sheet'!B38)\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",('Data Balance Sheet'!B9+'Data Balance Sheet'!B10+'Data Balance Sheet'!B11)/'Data Balance Sheet'!B38)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6/365=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B11+'Data Balance Sheet'!B11)/2)/('Data Income Statement'!B6/365),(('Data Balance Sheet'!B11+'Data Balance Sheet'!C11)/2)/('Data Income Statement'!B6/365)))\"\n\"IF('Data Income Statement'!C6/365=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C11+'Data Balance Sheet'!C11)/2)/('Data Income Statement'!C6/365),(('Data Balance Sheet'!C11+'Data Balance Sheet'!D11)/2)/('Data Income Statement'!C6/365)))\"\n\"IF('Data Income Statement'!D6/365=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D11+'Data Balance Sheet'!D11)/2)/('Data Income Statement'!D6/365),(('Data Balance Sheet'!D11+'Data Balance Sheet'!E11)/2)/('Data Income Statement'!D6/365)))\"\n\"IF('Data Income Statement'!E6/365=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E11+'Data Balance Sheet'!E11)/2)/('Data Income Statement'!E6/365),(('Data Balance Sheet'!E11+'Data Balance Sheet'!F11)/2)/('Data Income Statement'!E6/365)))\"\n\"IF('Data Income Statement'!F6/365=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F11+'Data Balance Sheet'!F11)/2)/('Data Income Statement'!F6/365),(('Data Balance Sheet'!F11+'Data Balance Sheet'!G11)/2)/('Data Income Statement'!F6/365)))\"\n\"IF('Data Income Statement'!G6/365=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G11+'Data Balance Sheet'!G11)/2)/('Data Income Statement'!G6/365),(('Data Balance Sheet'!G11+'Data Balance Sheet'!H11)/2)/('Data Income Statement'!G6/365)))\"\n\"IF('Data Income Statement'!H6/365=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H11+'Data Balance Sheet'!H11)/2)/('Data Income Statement'!H6/365),(('Data Balance Sheet'!H11+'Data Balance Sheet'!I11)/2)/('Data Income Statement'!H6/365)))\"\n\"IF('Data Income Statement'!B7/365=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B12+'Data Balance Sheet'!B12)/2)/(-'Data Income Statement'!B7/365),(('Data Balance Sheet'!B12+'Data Balance Sheet'!C12)/2)/(-'Data Income Statement'!B7/365)))\"\n\"IF('Data Income Statement'!C7/365=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C12+'Data Balance Sheet'!C12)/2)/(-'Data Income Statement'!C7/365),(('Data Balance Sheet'!C12+'Data Balance Sheet'!D12)/2)/(-'Data Income Statement'!C7/365)))\"\n\"IF('Data Income Statement'!D7/365=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D12+'Data Balance Sheet'!D12)/2)/(-'Data Income Statement'!D7/365),(('Data Balance Sheet'!D12+'Data Balance Sheet'!E12)/2)/(-'Data Income Statement'!D7/365)))\"\n\"IF('Data Income Statement'!E7/365=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E12+'Data Balance Sheet'!E12)/2)/(-'Data Income Statement'!E7/365),(('Data Balance Sheet'!E12+'Data Balance Sheet'!F12)/2)/(-'Data Income Statement'!E7/365)))\"\n\"IF('Data Income Statement'!F7/365=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F12+'Data Balance Sheet'!F12)/2)/(-'Data Income Statement'!F7/365),(('Data Balance Sheet'!F12+'Data Balance Sheet'!G12)/2)/(-'Data Income Statement'!F7/365)))\"\n\"IF('Data Income Statement'!G7/365=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G12+'Data Balance Sheet'!G12)/2)/(-'Data Income Statement'!G7/365),(('Data Balance Sheet'!G12+'Data Balance Sheet'!H12)/2)/(-'Data Income Statement'!G7/365)))\"\n\"IF('Data Income Statement'!H7/365=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H12+'Data Balance Sheet'!H12)/2)/(-'Data Income Statement'!H7/365),(('Data Balance Sheet'!H12+'Data Balance Sheet'!I12)/2)/(-'Data Income Statement'!H7/365)))\"\n\"IF(ISERROR(B27+B28),\"\"\"\",B27+B28)\"\n\"'Data Balance Sheet'!H4\"\n\"H27+H28\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B55=0,\"\"\"\",'Data Balance Sheet'!B44/'Data Balance Sheet'!B55)\"\n\"IF('Data Balance Sheet'!B56=0,\"\"\"\",('Data Balance Sheet'!B44)/'Data Balance Sheet'!B56)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B19=0,\"\"\"\",'Data Income Statement'!B18/-'Data Income Statement'!B19)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B19=0,\"\"\"\",('Data Income Statement'!B19-'Data Income Statement'!B32)/'Data Income Statement'!B19)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B25=0,\"\"\"\",'Data Balance Sheet'!B55/'Data Balance Sheet'!B25)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B25=0,\"\"\"\",'Data Balance Sheet'!B45/'Data Balance Sheet'!B25)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",'Data Income Statement'!B32/'Data Balance Sheet'!B38)\"\n\"'Data Balance Sheet'!B4\"\n\"IF((('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)=0,\"\"\"\",('Data Income Statement'!B22-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/((IF(Instructions!$H$7=1,('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2,('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2))))\"\n\"IF((('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)=0,\"\"\"\",('Data Income Statement'!C22-('Data Income Statement'!C19*(1+'Data Income Statement'!C21/'Data Income Statement'!C20)))/((IF(Instructions!$H$7=2,('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2,('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2))))\"\n\"IF((('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)=0,\"\"\"\",('Data Income Statement'!D22-('Data Income Statement'!D19*(1+'Data Income Statement'!D21/'Data Income Statement'!D20)))/((IF(Instructions!$H$7=3,('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2,('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2))))\"\n\"IF((('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)=0,\"\"\"\",('Data Income Statement'!E22-('Data Income Statement'!E19*(1+'Data Income Statement'!E21/'Data Income Statement'!E20)))/((IF(Instructions!$H$7=4,('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2,('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2))))\"\n\"IF((('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)=0,\"\"\"\",('Data Income Statement'!F22-('Data Income Statement'!F19*(1+'Data Income Statement'!F21/'Data Income Statement'!F20)))/((IF(Instructions!$H$7=5,('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2,('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2))))\"\n\"IF((('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)=0,\"\"\"\",('Data Income Statement'!G22-('Data Income Statement'!G19*(1+'Data Income Statement'!G21/'Data Income Statement'!G20)))/((IF(Instructions!$H$7=6,('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2,('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2))))\"\n\"IF((('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2)=0,\"\"\"\",('Data Income Statement'!H22-('Data Income Statement'!H19*(1+'Data Income Statement'!H21/'Data Income Statement'!H20)))/((IF(Instructions!$H$7=7,('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2,('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2))))\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",('Data Income Statement'!B22-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/('Data Income Statement'!B6))\"\n\"IF('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B28/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!B55-'Data Balance Sheet'!B49)/2),'Data Income Statement'!B28/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2)))\"\n\"IF('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C28/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2),'Data Income Statement'!C28/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2)))\"\n\"IF('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D28/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2),'Data Income Statement'!D28/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2)))\"\n\"IF('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E28/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2),'Data Income Statement'!E28/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2)))\"\n\"IF('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F28/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2),'Data Income Statement'!F28/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2)))\"\n\"IF('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G28/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2),'Data Income Statement'!G28/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2)))\"\n\"IF('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H28/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2),'Data Income Statement'!H28/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49)/2)))\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B8/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B18/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B20/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B22/'Data Income Statement'!B6)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B11+'Data Balance Sheet'!C11=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B11+'Data Balance Sheet'!B11)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B11+'Data Balance Sheet'!C11)/2)))\"\n\"IF('Data Balance Sheet'!C11+'Data Balance Sheet'!D11=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C11+'Data Balance Sheet'!C11)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C11+'Data Balance Sheet'!D11)/2)))\"\n\"IF('Data Balance Sheet'!D11+'Data Balance Sheet'!E11=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D11+'Data Balance Sheet'!D11)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D11+'Data Balance Sheet'!E11)/2)))\"\n\"IF('Data Balance Sheet'!E11+'Data Balance Sheet'!F11=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E11+'Data Balance Sheet'!E11)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E11+'Data Balance Sheet'!F11)/2)))\"\n\"IF('Data Balance Sheet'!F11+'Data Balance Sheet'!G11=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F11+'Data Balance Sheet'!F11)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F11+'Data Balance Sheet'!G11)/2)))\"\n\"IF('Data Balance Sheet'!G11+'Data Balance Sheet'!H11=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G11+'Data Balance Sheet'!G11)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G11+'Data Balance Sheet'!H11)/2)))\"\n\"IF('Data Balance Sheet'!H11+'Data Balance Sheet'!I11=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H11+'Data Balance Sheet'!H11)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H11+'Data Balance Sheet'!I11)/2)))\"\n\"IF('Data Balance Sheet'!B12+'Data Balance Sheet'!C12=0,\"\"\"\",IF(Instructions!$H$7=1,-'Data Income Statement'!B7/(('Data Balance Sheet'!B12+'Data Balance Sheet'!B12)/2),-'Data Income Statement'!B7/(('Data Balance Sheet'!B12+'Data Balance Sheet'!C12)/2)))\"\n\"IF('Data Balance Sheet'!C12+'Data Balance Sheet'!D12=0,\"\"\"\",IF(Instructions!$H$7=2,-'Data Income Statement'!C7/(('Data Balance Sheet'!C12+'Data Balance Sheet'!C12)/2),-'Data Income Statement'!C7/(('Data Balance Sheet'!C12+'Data Balance Sheet'!D12)/2)))\"\n\"IF('Data Balance Sheet'!D12+'Data Balance Sheet'!E12=0,\"\"\"\",IF(Instructions!$H$7=3,-'Data Income Statement'!D7/(('Data Balance Sheet'!D12+'Data Balance Sheet'!D12)/2),-'Data Income Statement'!D7/(('Data Balance Sheet'!D12+'Data Balance Sheet'!E12)/2)))\"\n\"IF('Data Balance Sheet'!E12+'Data Balance Sheet'!F12=0,\"\"\"\",IF(Instructions!$H$7=4,-'Data Income Statement'!E7/(('Data Balance Sheet'!E12+'Data Balance Sheet'!E12)/2),-'Data Income Statement'!E7/(('Data Balance Sheet'!E12+'Data Balance Sheet'!F12)/2)))\"\n\"IF('Data Balance Sheet'!F12+'Data Balance Sheet'!G12=0,\"\"\"\",IF(Instructions!$H$7=5,-'Data Income Statement'!F7/(('Data Balance Sheet'!F12+'Data Balance Sheet'!F12)/2),-'Data Income Statement'!F7/(('Data Balance Sheet'!F12+'Data Balance Sheet'!G12)/2)))\"\n\"IF('Data Balance Sheet'!G12+'Data Balance Sheet'!H12=0,\"\"\"\",IF(Instructions!$H$7=6,-'Data Income Statement'!G7/(('Data Balance Sheet'!G12+'Data Balance Sheet'!G12)/2),-'Data Income Statement'!G7/(('Data Balance Sheet'!G12+'Data Balance Sheet'!H12)/2)))\"\n\"IF('Data Balance Sheet'!H12+'Data Balance Sheet'!I12=0,\"\"\"\",IF(Instructions!$H$7=7,-'Data Income Statement'!H7/(('Data Balance Sheet'!H12+'Data Balance Sheet'!H12)/2),-'Data Income Statement'!H7/(('Data Balance Sheet'!H12+'Data Balance Sheet'!I12)/2)))\"\n\"IF(SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/((SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24))/2),'Data Income Statement'!B6/((SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/((SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24))/2),'Data Income Statement'!C6/((SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/((SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24))/2),'Data Income Statement'!D6/((SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/((SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24))/2),'Data Income Statement'!E6/((SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/((SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24))/2),'Data Income Statement'!F6/((SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/((SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24))/2),'Data Income Statement'!G6/((SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!I17:'Data Balance Sheet'!I24)=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/((SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24))/2),'Data Income Statement'!H6/((SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!I17:'Data Balance Sheet'!I24))/2)))\"\n\"IF('Data Balance Sheet'!B25+'Data Balance Sheet'!C25=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)))\"\n\"IF('Data Balance Sheet'!C25+'Data Balance Sheet'!D25=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)))\"\n\"IF('Data Balance Sheet'!D25+'Data Balance Sheet'!E25=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)))\"\n\"IF('Data Balance Sheet'!E25+'Data Balance Sheet'!F25=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)))\"\n\"IF('Data Balance Sheet'!F25+'Data Balance Sheet'!G25=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)))\"\n\"IF('Data Balance Sheet'!G25+'Data Balance Sheet'!H25=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)))\"\n\"IF('Data Balance Sheet'!H25+'Data Balance Sheet'!I25=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)))\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B20=0,\"\"\"\",IF('Data Income Statement'!B6=0,\"\"\"\",('Data Income Statement'!B26-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/'Data Income Statement'!B6))\"\n\"IF('Data Balance Sheet'!B25+'Data Balance Sheet'!C25=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)))\"\n\"IF('Data Balance Sheet'!C25+'Data Balance Sheet'!D25=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)))\"\n\"IF('Data Balance Sheet'!D25+'Data Balance Sheet'!E25=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)))\"\n\"IF('Data Balance Sheet'!E25+'Data Balance Sheet'!F25=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)))\"\n\"IF('Data Balance Sheet'!F25+'Data Balance Sheet'!G25=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)))\"\n\"IF('Data Balance Sheet'!G25+'Data Balance Sheet'!H25=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)))\"\n\"IF('Data Balance Sheet'!H25+'Data Balance Sheet'!I25=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)))\"\n\"IF(ISERR(B298*B301),\"\"\"\",B298*B301)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B28/'Data Income Statement'!B6)\"\n\"B301\"\n\"IF('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2)/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!B55-'Data Balance Sheet'!B49)/2),(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2)))\"\n\"IF('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2)/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2),(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2)))\"\n\"IF('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2)/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2),(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2)))\"\n\"IF('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2)/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2),(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2)))\"\n\"IF('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2)/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2),(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2)))\"\n\"IF('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2)/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2),(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2)))\"\n\"IF('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2)/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2),(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49)/2)))\"\n\"IF(ISERR(B307*B310*B313),\"\"\"\",B307*B310*B313)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Share Info'!B7=0,\"\"\"\",'Data Share Info'!B7/'Data Share Info'!B8)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Share Info'!B9=0,\"\"\"\",'Data Share Info'!B7/('Data Balance Sheet'!B55/'Data Share Info'!B9))\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Share Info'!B7*('Data Share Info'!B9-'Data Share Info'!B10)\"\n\"SUM(C7:C10)\"\n\"B18+B19+B20\"\n\"C20+C21\"\n\"E11-E21\"\n\"SUM(B10:B12)\"\n\"SUM(B20:B26)\"\n\"B13-B27\"\n\"SUM(C22:C23)\"\n\"C22\"\n\"SUM(G2:G67)\"\n\"SUM(D5:D14)\"\n\" D15/E15-1\"\n\"D5/E5-1\"\n\"SUM(D5:D14)\"\n\"D5/E5-1\"\n\"SUM(D4:D14)\"\n\"D5/E5-1\"\n\"SUM(D5:D14)\"\n\"D5/E5-1\"\n\"SUM(D5:D9)\"\n\"D5/E5-1\"\n\"SUM(D5:D9)\"\n\"[1]bcserv!D4\"\n\"D5/E5-1\"\n\"SUM(D5:D9)\"\n\"SUM(D6:D18)\"\n\"SUM(D19:D21)\"\n\"SUM(D23:D29)\"\n\"SUM(D31:D39)\"\n\"D40-D41\"\n\"SUM(D43:D46)\"\n\"D22+D30+D42+D47\"\n\"SUM(D49:D79)\"\n\"SUM(D82:D91)\"\n\"D80+D92\"\n\"D93+SUM(D94:D101)\"\n\"ProjectName\"\n\"ProjectID\"\n\"CurrentFY\"\n\"SUM(D6:D16)\"\n\"SUM(D18:D22)\"\n\"D17-D23\"\n\"SUM(D25:D30)\"\n\"SUM(D32:D35)\"\n\"D24+D31+D36\"\n\"SUM(D39:D53)\"\n\"SUM(D73:D79)\"\n\"D54+D60+D72+D80\"\n\"D37-D81\"\n\"D81+D88+D89+D90\"\n\"D37-D91\"\n\"D92-D93-D94\"\n\"D95-D103\"\n\"A27-B27-C27\"\n\"A27+E27\"\n\"B27+C27+F27+G27\"\n\"I27-J27\"\n\"SUM(C7:C8)\"\n\"+C9+C13+C17+C21+C25+C29+C33\"\n\"SUM(C25:C26)\"\n\"+C19+C22+C27\"\n\"+C20+C22+C27\"\n\"+C11/C$17\"\n\"SUM(C11:C16)\"\n\"+C19/C$27\"\n\"SUM(C19:C26)\"\n\"+C29/C$36\"\n\"SUM(C29:C35)\"\n\"+C38/C$45\"\n\"+C47/C$53\"\n\"+C55/C$62\"\n\"+C64/C$70\"\n\"+C72/C$82\"\n\"SUM(C72:C81)\"\n\"+C84/C$91\"\n\"+C93/C$101\"\n\"+C103/C$112\"\n\"SUM(C103:C111)\"\n\"+C114/C$122\"\n\"SUM(B6:B7)\"\n\"B8-B11\"\n\"B12-B13\"\n\"B14-B15-B16\"\n\"B18-B19\"\n\"SUM(B20:B24)\"\n\"SUM(B29:B31)\"\n\"SUM(B44:B49)\"\n\"SUM(B51:B58)\"\n\"SUM(B7:B8)\"\n\"B9-B12\"\n\"B13-B14\"\n\"B15-B16-B17\"\n\"B20-B21\"\n\"B24+B25\"\n\"SUM(B27:B30)\"\n\"SUM(B38:B40)\"\n\"SUM(B3:B5)\"\n\"SUM(B6:B16)\"\n\"SUM(B20:B23)\"\n\"SUM(B27:B38)\"\n\"B17+B24+B39\"\n\"C44\"\n\"SUM(B41:B42)\"\n\"SUM(D10:D11)\"\n\"B16*C16\"\n\"SUM(D16:D19)\"\n\"SUM(D32:D38)\"\n\"SUM(D39+D48)\"\n\"SUM(D57:D62)\"\n\"D67+D63+D55+D49+D29+D25+D20\"\n\"B8/$B$34*100\"\n\"D8/$D$34*100\"\n\"F8/$F$34*100\"\n\"B8/$B$34*100\"\n\"D8/$D$34*100\"\n\"F8/$F$34*100\"\n\"H8/$H$17*100\"\n\"H18/$H$34*100\"\n\"F8/$F$37*100\"\n\"B25/(B25+B37)*100\"\n\"B37/(B37+B25)*100\"\n\"J34+J48\"\n\"B8/$B$34*100\"\n\"D8/$D$34*100\"\n\"F8/$F$34*100\"\n\"B8/$B$34*100\"\n\"D8/$D$34*100\"\n\"F8/$F$34*100\"\n\"F8/$F$37*100\"\n\"B25/(B25+B38)*100\"\n\"B38/(B38+B25)*100\"\n\"C44/(C31+C44)*100\"\n\"J34+J48\"\n\"C7/B7*100\"\n\"C7/F7*100\"\n\"SUM(B7:B21)-1\"\n\"SUM(C7:C21)+1\"\n\"SUM(E7:E21)\"\n\"SUM(B25:B35)\"\n\"SUM(C25:C35)-1\"\n\"+B23+B37\"\n\"C23+C37\"\n\"SUM(B41:B49)-1\"\n\"SUM(C41:C49)\"\n\"+B39+B51\"\n\"SUM(C9:C22)\"\n\"SUM(H9:H16)\"\n\"SUM(C23:C28)\"\n\"SUM(C31:C37)\"\n\"SUM(H31:H38)\"\n\"SUM(C41:C48)\"\n\"SUM(H41:H51)\"\n\"C58-C57\"\n\"ProfitLoss!A2\"\n\"'Notes 2'!C5\"\n\"B6+1\"\n\"'Financial Summary'!B7\"\n\"'Financial Summary'!B15+'Financial Summary'!B16\"\n\"'Financial Summary'!B17+'Financial Summary'!B18\"\n\"BS!B44\"\n\"B88\"\n\"BS!B53\"\n\"B6\"\n\"'Financial Summary'!A26\"\n\"SUM(B21:B38)\"\n\"B20\"\n\"SUM(B46:B56)\"\n\"B57/B88\"\n\"'Financial Summary'!A64\"\n\"SUM(B60:B65)\"\n\"B66/B88\"\n\"'Financial Summary'!A72\"\n\"SUM(B69:B72)\"\n\"B73/B88\"\n\"'Financial Summary'!A78\"\n\"B80/B88\"\n\"'Financial Summary'!B83\"\n\"B82/B88\"\n\"B84/B88\"\n\"'Financial Summary'!B85\"\n\"B86/B88\"\n\"B57+B66+B73+B80+B82+B84+B86\"\n\"SUM(B95:D95)/'Financial Summary'!B92\"\n\"Notes!F52\"\n\"ProfitLoss!A2\"\n\"'Notes 2'!C5\"\n\"B6+1\"\n\"'Notes 2'!$C$7*B9\"\n\"'Notes 2'!$D$7*C9\"\n\"'Notes 2'!$E$7*D9\"\n\"B9*'Notes 2'!$C$8\"\n\"C9*'Notes 2'!$D$8\"\n\"D9*'Notes 2'!$E$8\"\n\"B44\"\n\"ProfitLoss!B50\"\n\"CFS!B12\"\n\"CFS!B32\"\n\"BS!B29\"\n\"BS!B26\"\n\"BS!B30\"\n\"BS!B23\"\n\"BS!B37\"\n\"BS!B49+BS!B51\"\n\"BS!B44\"\n\"B86\"\n\"BS!B53\"\n\"B6\"\n\"SUM(B26:B43)\"\n\"B25\"\n\"SUM(B51:B61)\"\n\"SUM(B64:B69)\"\n\"SUM(B72:B75)\"\n\"B62+B70+B76+B82+B83+B84+B85\"\n\"C93-1\"\n\"'Notes 2'!C5-1\"\n\"Notes!F52\"\n\"'Notes 2'!C5\"\n\"Notes!G7\"\n\"Notes!G10\"\n\"Notes!G13\"\n\"Notes!G16\"\n\"Notes!G22\"\n\"Notes!G25\"\n\"Notes!G31\"\n\"Notes!G34\"\n\"Notes!G40\"\n\"Notes!G43\"\n\"Notes!G46\"\n\"Notes!G49\"\n\"'Notes 2'!C4\"\n\"'Notes 2'!C5\"\n\"B5+1\"\n\"'Financial Summary'!B44\"\n\"B8-B10\"\n\"'Financial Summary'!B62+'Financial Summary'!B83+'Financial Summary'!B84+'Financial Summary'!B85\"\n\"SUM(B15:B27)\"\n\"SUM(B30:B40)\"\n\"'Notes 2'!D87+'Notes 2'!D95+'Notes 2'!D103\"\n\"B12-B28-B41+B42\"\n\"BS!B10\"\n\"'Notes 2'!D51\"\n\"B43-B44-B45\"\n\"CFS!B23*'Notes 2'!$C$12*('Notes 2'!$C$15/12)\"\n\"(SUM(CFS!B23:C23)+CFS!B24)*'Notes 2'!$D$12\"\n\"(SUM(CFS!B23:D23)+SUM(CFS!B24:C24))*'Notes 2'!$E$12\"\n\"B47-B48\"\n\"B50-B51\"\n\"B59\"\n\"B57+B58\"\n\"ProfitLoss!A2\"\n\"'Notes 2'!C5\"\n\"B5+1\"\n\"B11\"\n\"'Financial Summary'!B70+'Financial Summary'!B76+'Financial Summary'!B82\"\n\"SUM(B8:B9)*'Notes 2'!$C$14*('Notes 2'!$C$15/12)\"\n\"SUM(C8:C9)*'Notes 2'!$C$14\"\n\"SUM(B8:B9)-B10\"\n\"-CFS!B15\"\n\"B13-CFS!C15\"\n\"'Notes 2'!B21\"\n\"'Notes 2'!D65\"\n\"SUM(B15:B22)\"\n\"ProfitLoss!B8-CFS!B9\"\n\"ProfitLoss!C8*('Notes 2'!$C$9/12)\"\n\"CFS!B32\"\n\"SUM(B25:B29)\"\n\"(ProfitLoss!B28+ProfitLoss!B41-ProfitLoss!B23-ProfitLoss!B20-ProfitLoss!B33)*('Notes 2'!$C$11/12)\"\n\"ProfitLoss!B10*('Notes 2'!$C$10/12)\"\n\"B30-B37\"\n\"B11+B23+B39+B13\"\n\"CFS!B20\"\n\"B44+CFS!C20\"\n\"ProfitLoss!B59\"\n\"SUM(B44:B46)\"\n\"'Notes 2'!D88+'Notes 2'!D96+'Notes 2'!D104\"\n\"CFS!B23+CFS!B24\"\n\"SUM(CFS!B23:C23)+SUM(CFS!B24:C24)\"\n\"SUM(CFS!B23:D23)+SUM(CFS!B24:D24)\"\n\"SUM(B47:B51)\"\n\"B40-B53\"\n\"ProfitLoss!A2\"\n\"'Notes 2'!C5\"\n\"B5+1\"\n\"ProfitLoss!B8*(('Notes 2'!$C$15-'Notes 2'!$C$9)/'Notes 2'!$C$15)\"\n\"ProfitLoss!C8*((12-'Notes 2'!$C$9)/12)+ProfitLoss!B8*('Notes 2'!$C$9/'Notes 2'!$C$15)\"\n\"ProfitLoss!D8*((12-'Notes 2'!$C$9)/12)+ProfitLoss!C8*('Notes 2'!$C$9/12)\"\n\"-ProfitLoss!B10*((12-'Notes 2'!$C$10)/12)\"\n\"-ProfitLoss!C10*((12-'Notes 2'!$C$10)/12)-ProfitLoss!B10*('Notes 2'!$C$10/12)\"\n\"-(ProfitLoss!B28+ProfitLoss!B41-ProfitLoss!B23-ProfitLoss!B20-ProfitLoss!B33)*((12-'Notes 2'!$C$11)/12)-ProfitLoss!B20-ProfitLoss!B33\"\n\"-(ProfitLoss!C28+ProfitLoss!C41-ProfitLoss!C23-ProfitLoss!C20-ProfitLoss!C33)*((12-'Notes 2'!$C$11)/12)-(ProfitLoss!B28+ProfitLoss!B41-ProfitLoss!B23-ProfitLoss!B20-ProfitLoss!B33)*('Notes 2'!$C$11/12)-ProfitLoss!C20-ProfitLoss!C33\"\n\"SUM(B7:B11)\"\n\"-'Notes 2'!D29\"\n\"-'Financial Summary'!B86\"\n\"-ProfitLoss!B48\"\n\"SUM(B19:B26)\"\n\"SUM(B12+B18+B27)\"\n\"B32\"\n\"B29+B31\"\n\"Instructions!B14\"\n\"C5+1\"\n\"SUM(C7:C8)\"\n\"C5\"\n\"SUM(D21:D28)\"\n\"B21\"\n\"D32+E21\"\n\"B21\"\n\"D32*$C43*($C$15/12)\"\n\"E32*$C43\"\n\"B21\"\n\"B21\"\n\"D32-D54\"\n\"D18\"\n\"D88\"\n\"CFS!B25\"\n\"SUM(D84:D85)\"\n\"D86/$D$83\"\n\"IF(D88>0,(D85/$D$83),0)\"\n\"IF(E88>0,(D85/$D$83),0)\"\n\"D86-D87\"\n\"CFS!C25\"\n\"D94/$D$91\"\n\"(E93/$D$91)\"\n\"IF(E96>0,(E93/$D$91),0)\"\n\"IF(F96>0,(E93/$D$91),0)\"\n\"IF(G96>0,(E93/$D$91),0)\"\n\"CFS!D25\"\n\"(E101/$D$83)\"\n\"(F101/$D$99)\"\n\"IF(F104>0,(F101/$D$99),0)\"\n\"IF(G104>0,(F101/$D$99),0)\"\n\"ProfitLoss!A2\"\n\"ProfitLoss!B2\"\n\"'Notes 2'!C5\"\n\"G4+1\"\n\"ProfitLoss!B12/ProfitLoss!B8\"\n\"ProfitLoss!B50/ProfitLoss!B8\"\n\"ProfitLoss!B43/BS!B40\"\n\"ProfitLoss!B8/BS!B40\"\n\"BS!B30/BS!B37\"\n\"(BS!B30-BS!B29)/BS!B37\"\n\"(BS!B36+BS!B49+BS!B51)/BS!B47\"\n\"ProfitLoss!B47/ProfitLoss!B48\"\n\"ProfitLoss!B54/BS!B44\"\n\"ProfitLoss!B54/BS!B47\"\n\"ProfitLoss!B54/ProfitLoss!B55\"\n\"ProfitLoss!B43/BS!B53\"\n\"SUM(G52:I52)\"\n\"'Financial Summary'!B9\"\n\"'Financial Summary'!B20\"\n\"F53/F52\"\n\"SUM(ProfitLoss!B50:D50)/0.28\"\n\"SUM(G56:I56)/3\"\n\"ProfitLoss!B28+ProfitLoss!B41\"\n\"-CFS!B16+'Financial Summary'!B70+'Financial Summary'!B76+'Financial Summary'!B81\"\n\"'Financial Summary'!B8\"\n\"[1]!'SGJ200,LA'\"\n\"SUM(D5:E5)/2\"\n\"C5\"\n\"F9-50\"\n\"F9+50\"\n\"F5+440\"\n\"C8\"\n\"F10-60\"\n\"F10+60\"\n\"F6+452\"\n\"F11-70\"\n\"F11+70\"\n\"F7+545\"\n\"C8\"\n\"F12-80\"\n\"F12+80\"\n\"F8+636\"\n\"F13-100\"\n\"F13+100\"\n\"F12+522\"\n\"[1]!'SGJ211,LA'\"\n\"F16-40\"\n\"F16+40\"\n\"F15+100\"\n\"[1]!'SGJ212,LA'\"\n\"[1]!'SGJ213,LA'\"\n\"C21+200\"\n\"[1]!'SGJ210,LA'\"\n\"[1]!'SGJ300,LA'\"\n\"[1]!'SGJ400,LA'\"\n\"[1]!'SGJ150,LA'\"\n\"[1]!'SGKR,LA'/100\"\n\"C36+52.56\"\n\"C37+115.95\"\n\"C38+181.48\"\n\"[1]!'SGABI,LA'/100\"\n\"F40-0.4\"\n\"F40+0.4\"\n\"C40+1.3\"\n\"F41-0.5\"\n\"F41+0.5\"\n\"C41+2.97\"\n\"[1]!'SGABL,LA'/100\"\n\"C43+0.01\"\n\"C44+0.33\"\n\"[1]!'SGAEG,LA'/100\"\n\"C46+0.14\"\n\"C46+0.31\"\n\"[1]!'SGAFB,LA'/100\"\n\"C49+0.18\"\n\"C50-0.48\"\n\"[1]!'SGAFI,LA'/100\"\n\"C52+0.29\"\n\"C53+0.65\"\n\"[1]!'SGAFL,LA'/100\"\n\"F55-0.3\"\n\"F55+0.3\"\n\"C55+0.05\"\n\"C56+0.1\"\n\"[1]!'SGAFR,LA'/100\"\n\"C58+0.12\"\n\"C59+0.27\"\n\"[1]!'SGAFX,LA'/100\"\n\"C61+0.35\"\n\"C62+0.79\"\n\"[1]!'SGAGL,LA'/100\"\n\"C67+2.72\"\n\"C68+5.19\"\n\"[1]!'SGAHH,LA'/100\"\n\"C70+0.26\"\n\"C71+0.59\"\n\"[1]!'SGAIN,LA'/100\"\n\"C73+0.8\"\n\"C74+1.86\"\n\"[1]!'SGALT,LA'/100\"\n\"C76+0.56\"\n\"C77+1.29\"\n\"[1]!'SGAMS,LA'/100\"\n\"C79+4.99\"\n\"C80+10.55\"\n\"[1]!'SGANG,LA'/100\"\n\"C82+4.82\"\n\"C83+8.69\"\n\"[1]!'SGAPA,LA'/100\"\n\"C85\"\n\"[1]!'SGAPB,LA'/100\"\n\"[1]!'SGAPL,LA'/100\"\n\"C91+0.15\"\n\"C92+0.32\"\n\"[1]!'SGAPN,LA'/100\"\n\"C94+0.23\"\n\"C95+0.53\"\n\"F97-0.2\"\n\"F97+0.2\"\n\"[1]!'SGASA,LA'/100\"\n\"C100+0.85\"\n\"C101+1.07\"\n\"[1]!'SGAVG,LA'/100\"\n\"C104+0.41\"\n\"[1]!'SGAVI,LA'/100\"\n\"C107+0.72\"\n\"[1]!'SGBAW,LA'/100\"\n\"C109+1.21\"\n\"C110+2.77\"\n\"[1]!'SGBDE,LA'/100\"\n\"C112+0.7\"\n\"C113+1.6\"\n\"[1]!'SGBDEO,LA'/100\"\n\"[1]!'SGBEL,LA'/100\"\n\"C118+0.13\"\n\"C119+0.31\"\n\"[1]!'SGBIL,LA'/100\"\n\"C121+0.38\"\n\"C122+1.83\"\n\"[1]!'SGBPL,LA'/100\"\n\"C124+0.03\"\n\"C125+0.07\"\n\"[1]!'SGBVT,LA'/100\"\n\"C127+0.95\"\n\"C128+2.16\"\n\"[1]!'SGCML,LA'/100\"\n\"C132+0.08\"\n\"[1]!'SGCPT,LA'/100\"\n\"C135+0.21\"\n\"C136+0.47\"\n\"[1]!'SGCPX,LA'/100\"\n\"C139+0.19\"\n\"[1]!'SGDDT,LA'/100\"\n\"C142+0.17\"\n\"C144+0.71\"\n\"C145+1.62\"\n\"[1]!'SGDSY,LA'/100\"\n\"[1]!'SGDTC,LA'/100\"\n\"C151+0.62\"\n\"[1]!'SGDUR,LA'/100\"\n\"C153+0.4\"\n\"C154+0.9\"\n\"[1]!'SGECO,LA'/100\"\n\"C156+2.57\"\n\"C157+5.9\"\n\"[1]!'SGELH,LA'/100\"\n\"C159+0.6\"\n\"C160+1.36\"\n\"[1]!'SGFOS,LA'/100\"\n\"C162+0.37\"\n\"C163+0.61\"\n\"[1]!'SGFSR,LA'/100\"\n\"C167+0.46\"\n\"[1]!'SGGFI,LA'/100\"\n\"C169+1.53\"\n\"C170+3.1\"\n\"[1]!'SGGMB,LA'/100\"\n\"[1]!'SGGMF,LA'/100\"\n\"F175-0.01\"\n\"F175+0.01\"\n\"F176-0.02\"\n\"F176+0.02\"\n\"C176+0\"\n\"[1]!'SGGND,LA'/100\"\n\"C178+0.39\"\n\"C179+0.87\"\n\"[1]!'SGHAR,LA'/100\"\n\"C181+1.76\"\n\"C182+3.69\"\n\"[1]!'SGHVL,LA'/100\"\n\"[1]!'SGINLP,LA'/100\"\n\"C187+1.99\"\n\"[1]!'SGILA,LA'/100\"\n\"C190+0.11\"\n\"C191+0.24\"\n\"[1]!'SGILV,LA'/100\"\n\"[1]!'SGIMP,LA'/100\"\n\"C197+9.27\"\n\"C198+7.43\"\n\"[1]!'SGINL,LA'/100\"\n\"C200+2.26\"\n\"[1]!'SGINP,LA'/100\"\n\"C203+2.28\"\n\"C204+1.65\"\n\"[1]!'SGIPL,LA'/100\"\n\"C206+1.2\"\n\"C207+2.78\"\n\"[1]!'SGISC,LA'/100\"\n\"C210+1.5\"\n\"[1]!'SGIVT,LA'/100\"\n\"C212+0.16\"\n\"[1]!'SGJCD,LA'/100\"\n\"F216-0.03\"\n\"F216+0.03\"\n\"[1]!'SGJDG,LA'/100\"\n\"C218-0.1\"\n\"[1]!'SGJNC,LA'/100\"\n\"C221+0.3\"\n\"C222+0.68\"\n\"[1]!'SGKER,LA'/100\"\n\"C224+0.66\"\n\"C225+1.52\"\n\"[1]!'SGKMB,LA'/100\"\n\"C227+0.76\"\n\"C228+1.26\"\n\"[1]!'SGLBH,LA'/100\"\n\"C230+2.42\"\n\"C231+5.61\"\n\"[1]!'SGLBT,LA'/100\"\n\"C234+1.94\"\n\"[1]!'SGLGL,LA'/100\"\n\"C237+2.14\"\n\"C240+5.56\"\n\"[1]!'SGMDC,LA'/100\"\n\"C245+0.2\"\n\"[1]!'SGMES,LA'/100\"\n\"C248+1.1\"\n\"C249+2.55\"\n\"[1]!'SGMET,LA'/100\"\n\"[1]!'SGMNS,LA'/100\"\n\"[1]!'SGMPC,LA'/100\"\n\"[1]!'SGMPL,LA'/100\"\n\"C262+0.06\"\n\"[1]!'SGMSM,LA'/100\"\n\"[1]!'SGMTC,LA'/100\"\n\"C268+0.04\"\n\"C269+0.09\"\n\"[1]!'SGMTN,LA'/100\"\n\"C272+1.37\"\n\"F273-0.6\"\n\"F273+0.6\"\n\"F274-0.7\"\n\"F274+0.7\"\n\"C274+3\"\n\"F275-0.8\"\n\"F275+0.8\"\n\"C275+3.6\"\n\"[1]!'SGMUR,LA'/100\"\n\"[1]!'SGMVL,LA'/100\"\n\"C281+1.08\"\n\"[1]!'SGNBKP,LA'/100\"\n\"[1]!'SGNCL,LA'/100\"\n\"[1]!'SGNED,LA'/100\"\n\"C289+0.97\"\n\"C290+2.66\"\n\"C291+4.16\"\n\"C292+4\"\n\"C293+4.5\"\n\"[1]!'SGNHM,LA'/100\"\n\"C296+0.43\"\n\"[1]!'SGNPK,LA'/100\"\n\"[1]!'SGNPN,LA'/100\"\n\"C302+1.56\"\n\"[1]!'SGNTC,LA'/100\"\n\"[1]!'SGOML,LA'/100\"\n\"C307-0.19\"\n\"C308-0.21\"\n\"[1]!'SGOMN,LA'/100\"\n\"C311+0.48\"\n\"C312+1.11\"\n\"[1]!'SGPAP,LA'/100\"\n\"C314-0.08\"\n\"[1]!'SGPGR,LA'/100\"\n\"[1]!'SGPIK,LA'/100\"\n\"C321-0.02\"\n\"C322+0.75\"\n\"[1]!'SGPPC,LA'/100\"\n\"C327+2.34\"\n\"C328+5.4\"\n\"[1]!'SGRBW,LA'/100\"\n\"[1]!'SGRCH,LA'/100\"\n\"[1]!'SGRDF,LA'/100\"\n\"[1]!'SGREM,LA'/100\"\n\"C343+2.99\"\n\"[1]!'SGRLO,LA'/100\"\n\"C345+0.45\"\n\"C346+1.03\"\n\"[1]!'SGRMH,LA'/100\"\n\"[1]!'SGRNG,LA'/100\"\n\"C351+0.44\"\n\"C352+1\"\n\"[1]!'SGSAB,LA'/100\"\n\"C354+1.32\"\n\"C355+1.57\"\n\"[1]!'SGSAP,LA'/100\"\n\"C358+3.62\"\n\"C359+5.67\"\n\"[1]!'SGSBK,LA'/100\"\n\"C362+1.33\"\n\"[1]!'SGSCE,LA'/100\"\n\"C365+0.02\"\n\"[1]!'SGSGG,LA'/100\"\n\"[1]!'SGSHF,LA'/100\"\n\"[1]!'SGSHP,LA'/100\"\n\"C375+0.42\"\n\"[1]!'SGSLM,LA'/100\"\n\"C380-0.24\"\n\"C381-0.03\"\n\"[1]!'SGSNT,LA'/100\"\n\"C384+0.82\"\n\"C385+1.89\"\n\"[1]!'SGSOL,LA'/100\"\n\"C387+0.67\"\n\"C388+4.07\"\n\"[1]!'SGSPG,LA'/100\"\n\"[1]!'SGTBS,LA'/100\"\n\"C395+1.54\"\n\"C396+3.57\"\n\"[1]!'SGTKG,LA'/100\"\n\"C398+1.42\"\n\"C399+3.27\"\n\"[1]!'SGTNT,LA'/100\"\n\"C401+0.83\"\n\"C402+1.12\"\n\"[1]!'SGTRU,LA'/100\"\n\"[1]!'SGUSV,LA'/100\"\n\"C407+0.63\"\n\"C408+1.46\"\n\"[1]!'SGVNF,LA'/100\"\n\"[1]!'SGWAR,LA'/100\"\n\"C413+0.58\"\n\"C414+1.35\"\n\"[1]!'SGWHL,LA'/100\"\n\"G1\"\n\"G1\"\n\"100-C465\"\n\"F458-0.05\"\n\"F458+0.05\"\n\"C458+3.495\"\n\"100-C465\"\n\"C459+3.715\"\n\"100-C465\"\n\"C460+3.585\"\n\"100-C465\"\n\"F469\"\n\"F471+0.01\"\n\"F471-0.01\"\n\"F493-0.06\"\n\"F493+0.06\"\n\"E3*(1+$D$3)\"\n\"0.08/12\"\n\"E4*(1+$D$4)\"\n\"E3*$D$5\"\n\"E3*$D$6\"\n\"E7*(1+$D$7)\"\n\"$D$10*E3*E4\"\n\"1-D10\"\n\"E3*$D$11*E4\"\n\"SUM(E10:E10)\"\n\"E12*12\"\n\"E6*E7\"\n\"E8*E5\"\n\"SUM(E15:E16)\"\n\"E12-E17\"\n\"E22\"\n\"$D$24\"\n\"F25\"\n\"E22*0.25\"\n\"SUM(E22:E28)\"\n\"Depreciation!E7\"\n\"E19-E29-E31\"\n\"Income!B1\"\n\"Income!E2\"\n\"Cashflow!D13\"\n\"E6+Cashflow!E13\"\n\"E7\"\n\"D14\"\n\"Depreciation!E7\"\n\"E9+Depreciation!F7\"\n\"E6+E7+E10\"\n\"D14+Cashflow!E9\"\n\"SUM(E14:E14)\"\n\"Income!E33\"\n\"Income!F33+E19\"\n\"SUM(E17:E19)\"\n\"E15+E20\"\n\"Income!B1\"\n\"Income!E2\"\n\"Income!E33\"\n\"Depreciation!E7\"\n\"'Balance Sheet'!E18\"\n\"SUM(D6:D12)\"\n\"Income!B1\"\n\"Income!E2\"\n\"'Balance Sheet'!B8\"\n\"'Balance Sheet'!C8\"\n\"'Balance Sheet'!D8\"\n\"D6\"\n\"IF(E8>0, E8,0)\"\n\"IF(E6>0,$D$6/$D$7,0)\"\n\"E6-E7\"\n\"E7\"\n\"E11+F7\"\n\"Income!B1\"\n\"E4\"\n\"SUM(E4:E4)\"\n\"SUM(E7:E8)\"\n\"E5-E9\"\n\"E11-E13\"\n\"E15*12\"\n\"Income!B1\"\n\"1655508\"\n\"11066.97+37179.62+6303.15+1281.61-15977.89\"\n\"11066.97+37179.62+6303.15+1281.61-15711.13\"\n\"77332.91+10891.93-62570.75\"\n\"77332.91+10891.93-62058.31\"\n\"SUM(E20:E20)\"\n\"B18+B19\"\n\"852303.4\"\n\"B20\"\n\"E19\"\n\"E24+E25\"\n\"1383.89+3.4\"\n\"2503.76+1285.3\"\n\"383305.74+27641.32-900\"\n\"6249.48+13412.42-900\"\n\"408694.97+2816.65\"\n\"E24\"\n\"SUM(B23:B27)\"\n\"E23+E26\"\n\"B31\"\n\"E17+E21+E29\"\n\"970173.67\"\n\"SUM(B33:B35)\"\n\"5016.8\"\n\"B30+B32\"\n\"455.97\"\n\"781.03\"\n\"19551.67+2348.87+185\"\n\"2348.87+426.67\"\n\"SUM(B38:B38)\"\n\"SUM(E32:E38)\"\n\"B28+B36+B39\"\n\"B21+B40\"\n\"E40+E30\"\n\"F30+F40\"\n\"SUM(Sheet1:Sheet20!I29)\"\n\"SUM(I7:I27)\"\n\"SUM(D29:D31)\"\n\"SUM(Sheet21:Sheet25!I29)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(Sheet14:Sheet18!I29)\"\n\"SUM(I7:I27)\"\n\"SUM(Sheet19!D31)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(I7:I27)\"\n\"SUM(C7:C25)\"\n\"Sheet1!$C$29\"\n\"SUM(C26)\"\n\"SUM(J26:J28)\"\n\"VLOOKUP(coverpage,look1,3,FALSE)\"\n\"VLOOKUP(coverpage,look1,6,FALSE)\"\n\"'2-Cover Page'!C8\"\n\"coverpage\"\n\"'2-Cover Page'!C5\"\n\"SUM(C4:I4)\"\n\"C4+C5\"\n\"D4+D5+D6\"\n\"SUM(C10:C14)\"\n\"SUM(C17:C23)\"\n\"SUM(C33:C38)\"\n\"C15+C24+C31+C39+C41-C38\"\n\"indirect_cost\"\n\"ROUND(C42*C43,0)\"\n\"SUM(C44:I44)-SUMIF(C45:I45,\"\">=0\"\",C44:I44)\"\n\"IF(AND(C45<C44,C45>=0,ISNUMBER(C45)=TRUE),C38+C42+C45+C46,C38+C42+C44+C46)\"\n\"IF(C47<C8,\"\"is under\"\",IF(C47>C8,\"\"is over\"\",\"\"matches\"\"))\"\n\"C8\"\n\"IF(C47<>C8,\"\"by\"\",\"\" \"\")\"\n\"C49-C47\"\n\"Y33/1000000\"\n\"B3-C3\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$2/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$2/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$2/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$3/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$3/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$3/1000000\"\n\"B3\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$4/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$4/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$4/1000000\"\n\"C3\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$5/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$5/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$5/1000000\"\n\"D3\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$6/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$6/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$6/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$7/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$7/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$7/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$8/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$8/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$8/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$9/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$9/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$9/1000000\"\n\"B4\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$10/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$10/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$10/1000000\"\n\"C4\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$11/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$11/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$11/1000000\"\n\"D4\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$12/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$12/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$12/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$13/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$13/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$13/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$14/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$14/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$14/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$15/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$15/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$15/1000000\"\n\"B5\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$16/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$16/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$16/1000000\"\n\"C5\"\n\"SUM(B3:B17)\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$17/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$17/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$17/1000000\"\n\"D5\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$18/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$18/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$18/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$19/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$19/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$19/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$G$20/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$H$20/1000000\"\n\"'[1]Prog-Req-Com-Disb-NDB-Outside-1'!$I$20/1000000\"\n\"SUM(H3:H21)\"\n\"B6\"\n\"C6\"\n\"D6\"\n\"B7\"\n\"C7\"\n\"D7\"\n\"B8\"\n\"C8\"\n\"D8\"\n\"B9\"\n\"C9\"\n\"D9\"\n\"B10\"\n\"C10\"\n\"D10\"\n\"B11\"\n\"C11\"\n\"D11\"\n\"B12\"\n\"C12\"\n\"D12\"\n\"B13\"\n\"C13\"\n\"D13\"\n\"B14\"\n\"C14\"\n\"D14\"\n\"B15\"\n\"C15\"\n\"D15\"\n\"'Sub-NDP'!A2\"\n\"'Sub-NDP'!B2\"\n\"'Sub-NDP'!C2/1000000\"\n\"SUM(B6:B13)\"\n\"SUM(D6:D10)\"\n\"'Sub-NDP'!A7\"\n\"B5\"\n\"'Sub-NDP'!B7\"\n\"'Sub-NDP'!C7/1000000\"\n\"SUM(B20:B30)\"\n\"'Sub-NDP'!A18\"\n\"B5\"\n\"'Sub-NDP'!B18\"\n\"'Sub-NDP'!C18/1000000\"\n\"'Sub-NDP'!A24\"\n\"B5\"\n\"'Sub-NDP'!B24\"\n\"'Sub-NDP'!C24/1000000\"\n\"'Sub-NDP'!A30\"\n\"B5\"\n\"'Sub-NDP'!B30\"\n\"'Sub-NDP'!C30/1000000\"\n\"SUM(B67:B71)\"\n\"'Sub-NDP'!A33\"\n\"B5\"\n\"'Sub-NDP'!B33\"\n\"'Sub-NDP'!C33/1000000\"\n\"'Sub-NDP'!A36\"\n\"B5\"\n\"'Sub-NDP'!B36\"\n\"'Sub-NDP'!C36/1000000\"\n\"'Sub-NDP'!A39\"\n\"B5\"\n\"'Sub-NDP'!B39\"\n\"'Sub-NDP'!C39/1000000\"\n\"SUM(B100:B110)\"\n\"'Sub-NDP'!A48\"\n\"B5\"\n\"'Sub-NDP'!B48\"\n\"'Sub-NDP'!C48/1000000\"\n\"SUM(B117:B122)\"\n\"'Sub-NDP'!A52\"\n\"B5\"\n\"'Sub-NDP'!B52\"\n\"'Sub-NDP'!C52/1000000\"\n\"SUM(B129:B132)\"\n\"'Sub-NDP'!A54\"\n\"B5\"\n\"'Sub-NDP'!B54\"\n\"'Sub-NDP'!C54/1000000\"\n\"'Sub-NDP'!A57\"\n\"B5\"\n\"'Sub-NDP'!B57\"\n\"'Sub-NDP'!C57/1000000\"\n\"SUM(B150:B158)\"\n\"'Sub-NDP'!A64\"\n\"B5\"\n\"'Sub-NDP'!B64\"\n\"'Sub-NDP'!C64/1000000\"\n\"SUM(B165:B176)\"\n\"'Sub-NDP'!A75\"\n\"B5\"\n\"'Sub-NDP'!B75\"\n\"'Sub-NDP'!C75/1000000\"\n\"'[1]FT - résultats 01-09-01'!N16\"\n\"'[1]FT - résultats 31-08-00'!N16\"\n\"K15-K17\"\n\"SUM(K20:K22)\"\n\"K18-K23\"\n\"'[1]FT - résultats 01-09-01'!N30\"\n\"'[1]FT - résultats 31-08-00'!N30\"\n\"+K27-K28\"\n\"[0]!__ANCOUR\"\n\"[0]!__ANPREC\"\n\"K55-K56\"\n\"+K57-K62\"\n\"SUM(K66:K67)\"\n\"+K64-K68\"\n\"SUM(C4:C6)\"\n\"C6-B6\"\n\"SUM(B6:B17)\"\n\"SUM(B18:B25)\"\n\"SUM(C18:C24)\"\n\"SUM(E4:E7)\"\n\"SUM(E9:E14)\"\n\"SUM(E21:E37)\"\n\"SUM(E39)\"\n\"SUM(E43:E44)\"\n\"SUM(F4:F45)\"\n\"SUM(C4:C12)\"\n\"SUM(C16:C30)\"\n\"SUM(C34:C43)\"\n\"SUM(C46:C47)\"\n\"SUM(D4:D48)\"\n\"C6-C5\"\n\"IF(H10=$J$8,D10,0)\"\n\"IF(H10=$K$8,D10,0)\"\n\"IF(H10=$L$8,D10,0)\"\n\"IF(H10=$M$8,D10,0)\"\n\"IF(H10=$N$8,D10,0)\"\n\"IF(H10=$O$8,D10,0)\"\n\"IF(H10=$P$8,D10,0)\"\n\"IF(H10=$Q$8,D10,0)\"\n\"IF(H10=$R$8,D10,0)\"\n\"IF(H10=$S$8,D10,0)\"\n\"IF(H10=$T$8,D10,0)\"\n\"IF(H10=$U$8,D10,0)\"\n\"IF(H10=$W$8,D10,0)\"\n\"IF(H160=$I$8,D160,0)\"\n\"SUM(A14:A159)\"\n\"SUM(D10:D160)\"\n\"SUM(J163:W163)\"\n\"SUM(J14:J160)\"\n\"SUM(W10:W160)\"\n\"IF(H10=$I$8,D10,0)\"\n\"IF(H10=$J$8,D10,0)\"\n\"IF(H10=$K$8,D10,0)\"\n\"IF(H10=$L$8,D10,0)\"\n\"IF(H10=$M$8,D10,0)\"\n\"IF(H10=$N$8,D10,0)\"\n\"IF(H10=$O$8,D10,0)\"\n\"IF(H10=$P$8,D10,0)\"\n\"IF(H10=$Q$8,D10,0)\"\n\"IF(H10=$R$8,D10,0)\"\n\"IF(H10=$S$8,D10,0)\"\n\"IF(H10=$T$8,D10,0)\"\n\"D14\"\n\"SUM(A10:A66)\"\n\"SUM(D10:D89)\"\n\"SUM(I91:U91)\"\n\"SUM(C3:C22)\"\n\"SUM(C3:C72)\"\n\"SUM(F74:R74)\"\n\"SUM(F3:F73)\"\n\"F74-F3\"\n\"SUM(C8:C40)\"\n\"SUM(C52:C96)\"\n\"SUM(C4:C10)\"\n\"B15-C15+D15\"\n\"+B4\"\n\"Cover!A25\"\n\"E11*1000000/L11\"\n\"Cover!A25\"\n\"SUM(B7:B12)\"\n\"SUM(C7:C11)\"\n\"+B31+B32+B33+B34-B35+B36\"\n\"SUM(H9:H11)\"\n\"SUM(H19:H22)\"\n\"SUM(H32:H35)\"\n\"SUM(H48:H49)\"\n\"SUM(I14:I18)\"\n\"SUM(I25:I28)\"\n\"SUM(I47:I49)\"\n\"SUM(I10:I13)\"\n\"SUM(I16:I18)\"\n\"SUM(I14,I20)\"\n\"SUM(I34:I36)\"\n\"SUM(F12:N12)\"\n\"SUM(F12:F17)\"\n\"SUM(J12:J19)\"\n\"SUM(F23:F24)\"\n\"SUM(H23:H25)\"\n\"SUM(J15:J17)\"\n\"SUM(J12,J18)\"\n\"SUM(J27:J29)\"\n\"SUM(J47:J50)\"\n\"SUM(I9:I14)\"\n\"SUM(I23:I27)\"\n\"SUM(I31:I33)\"\n\"SUM(I28,I34)\"\n\"SUM(I36-I37)\"\n\"SUM(I11:I14)\"\n\"SUM(I15:I18)\"\n\"SUM(I23:I25)\"\n\"SUM(F15:M15)\"\n\"SUM(F15:F26)\"\n\"SUM(F12:F15)\"\n\"SUM(F42:F47)\"\n\"SUM(L42:L48)\"\n\"SUM(I13:I15)\"\n\"SUM(K22:K23)\"\n\"SUM(G51:G54)\"\n\"SUM(I13:I15)\"\n\"SUM(I19:I20)\"\n\"SUM(I16,I21,I23)\"\n\"SUM(I28,I32)\"\n\"SUM(I42:I46)\"\n\"SUM(E11:I11)\"\n\"SUM(E11:E13)\"\n\"SUM(F59:F61)\"\n\"234917+6349+54\"\n\"+F68-H68\"\n\"F68+F69+F70+F71+F72\"\n\"SUM(F76:F81)\"\n\"+F73+F82\"\n\"2058\"\n\"SUM(F107:H107)\"\n\"SUM(F107:F108)\"\n\"SUM(F109+F115)\"\n\"SUM(F126+F133)\"\n\"SUM(F117+F135)\"\n\"SUM(F168:F175)\"\n\"SUM(E12:E21)\"\n\"SUM(C12:C21)\"\n\"D23-E22\"\n\"D23-H22\"\n\"D23-K22\"\n\"H10*H11\"\n\"SUM(B10:B13)\"\n\"B14+B16\"\n\"H12-H14-H15-H17-H18\"\n\"SUM(G25:G28)\"\n\"SUM(D5:D16)\"\n\"D17+D23\"\n\"SUM(D10:D17)\"\n\"SUM(($D$18+$E$18+$F$18)+$D$20)\"\n\"E32+F32\"\n\"$D$22+$B$32\"\n\"I18+I32\"\n\"I35-H18\"\n\"$G$32/$B$32\"\n\"(($D$35-$D$20)/$C$54)\"\n\"(D35)/C54\"\n\"(D35/C53)\"\n\"C54+C55-C56\"\n\"UPPER(\"\"Diocese of Winona\"\")\"\n\"SUM(F9:F13)\"\n\"SUM(M8:M18)\"\n\"SUM(F17:F20)\"\n\"SUM(M22:M23)\"\n\"SUM(F24:F38)\"\n\"F14+F21+F39\"\n\"SUM(F44:F55)\"\n\"M19+M24+M29+M34+M39+M50+M55\"\n\"SUM(F59:F76)\"\n\"F41+F56+F77\"\n\"M57+M78\"\n\"F79\"\n\"M80*-1\"\n\"SUM(M82:M84)\"\n\"SUM(B8:B22)\"\n\"B28-B24\"\n\"I83\"\n\"I164\"\n\"I12\"\n\"I11-I14\"\n\"IF(H18<0,I16*0.75,(IF(H18=\"\"X\"\",0,I16*0.75)))\"\n\"D57*G57\"\n\"E57*G57\"\n\"SUM(D57:D67)\"\n\"SUM(H57:H68)\"\n\"SUM(E72,E73)\"\n\"SUM(H69:I81)\"\n\"SUM(K69:K81)\"\n\"SUM(I92:I94,I96:I97)\"\n\"SUM(I100:I101,I103:I104)\"\n\"SUM(I110:I113,I107:I108 )\"\n\"SUM(K110:L113,K107:L108 )\"\n\"SUM(I123:I125,I127:I129)\"\n\"SUM(I132:I139,I141:I143,I145:I146)\"\n\"I98+I105+I114+I130+I147\"\n\"SUM(I155:I159,I161:I162)\"\n\"I148+I163\"\n\"SUM(I200:I201)\"\n\"SUM(I206,I208)\"\n\"SUM(I211:I219)\"\n\"SUM(I222:I225)\"\n\"K201+K203+K208+K219+K225+K228\"\n\"K83\"\n\"K164\"\n\"I164\"\n\"IF(K235>K236,K235-K236,\"\"n/a\"\")\"\n\"K229\"\n\"IF(K235>K236,K236+K238,K235+K238)\"\n\"K234-K239\"\n\"I18\"\n\"IF(K241=0,\"\"XXX\"\",(IF(K234-(IF(K235<K236,K235,K236))>K241,\"\"XXX\"\",\"\"---\"\")))\"\n\"IF(K241=0,\"\"---\"\",(IF(K234-(IF(K235<K236,K235,K236))<K241,\"\"XXX\"\",\"\"---\"\")))\"\n\"IF(B243=\"\"XXX\"\",0.15*K240,0)\"\n\"IF(B243=\"\"---\"\",(K241-K238)*0.15,\"\"---\"\")\"\n\"IF(B263=\"\"X\"\",-0.25*K245,0)\"\n\"IF(B264=\"\"X\"\",-0.5*K245,0)\"\n\"IF(B265=\"\"X\"\",-1*K245,0)\"\n\"K245+I263+I264+I265\"\n\"IF(B243=\"\"XXX\"\",K240-K267,\"\"---\"\")\"\n\"IF(B243=\"\"---\"\",K241-K238-K267,\"\"---\"\")\"\n\"SUM(E11:E20)\"\n\"SUM(M9:M20)\"\n\"SUM(G29:G31)\"\n\"SUM(E29:E30)\"\n\"SUM(G32+I32)\"\n\"SUM(E33:M33)\"\n\"SUM(E42)\"\n\"SUM(I41:I42)\"\n\"M42\"\n\"SUM(G53:G63)\"\n\"SUM(K53:K63)\"\n\"'STEP 1 OF 2'!E22\"\n\"M18/H6\"\n\"H8/H6\"\n\"'STEP 1 OF 2'!M35\"\n\"H8/H6\"\n\"'STEP 1 OF 2'!M45\"\n\"H12/H6\"\n\"'STEP 1 OF 2'!M65\"\n\"H14/H6\"\n\"'STEP 1 OF 2'!G22\"\n\"H16/H6\"\n\"H6-H8-H10-H12-H14\"\n\"H32/H6\"\n\"SUM(M7:M17)\"\n\"M28/H6\"\n\"SUM(M21:M27)\"\n\"M40/H6\"\n\"SUM(H19:H31)\"\n\"H43/H6\"\n\"SUM(M31:M39)\"\n\"SUM(H35:H42)\"\n\"H32+H43+H50+M18+M28+M40\"\n\"H50/H6\"\n\"H16\"\n\"M45-M43\"\n\"SUM(H46:H49)\"\n\"SUM(G25:H25)\"\n\"SUM(G12:H12)\"\n\"200000*1.5702\"\n\"1500000*1.5702\"\n\"31500000*1.5702\"\n\"1225000*1.5702\"\n\"1605000*1.5702\"\n\"17592*1.5702\"\n\"52217*1.5702\"\n\"825000*1.5702\"\n\"24747*1.5702\"\n\"1230000*1.5702\"\n\"1692972*1.5702\"\n\"437220*1.5702\"\n\"6000*1.5702\"\n\"1100000*1.5702\"\n\"401000*1.5702\"\n\"42166*1.5702\"\n\"4716709*1.5702\"\n\"900000*1.5702\"\n\"81700*1.5702\"\n\"635840*1.5702\"\n\"244163*1.5702\"\n\"112954*1.5702\"\n\"608000*1.5702\"\n\"357000*1.5702\"\n\"63000*1.5702\"\n\"374000*1.5702\"\n\"573139*1.5702\"\n\"12045*1.5702\"\n\"1403*1.5702\"\n\"942564*1.5702\"\n\"3025000*1.5702\"\n\"8294679*1.5702\"\n\"77023*1.5702\"\n\"700637*1.5702\"\n\"165308*1.5702\"\n\"1555064*1.5702\"\n\"812500*1.5702\"\n\"476000*1.5702\"\n\"52778*1.5702\"\n\"2937000*1.5702\"\n\"SUM(336515*1.5702)\"\n\"SUM(I5:I104)\"\n\"SUM(I105)/80\"\n\"SUM(I27:I93)/67\"\n\"SUM(I94:I104)/11\"\n\"E70\"\n\"E70\"\n\"E70\"\n\"E70\"\n\"C9*C5\"\n\"C10*C5\"\n\"C11*C5\"\n\"C12*C5\"\n\"C9*0.5+C10*1+C11*0.5+C12*1\"\n\"C13*C5\"\n\"C14*C5\"\n\"C15*C5\"\n\"(C9+C10+(C9*0.5)+(C10*1))*0.5\"\n\"SUM(C9:C15)\"\n\"G15*C5\"\n\"C17*C5\"\n\"C16-C17\"\n\"C18*C5\"\n\"D15\"\n\"C27*0.05\"\n\"D9+C28\"\n\"SUM(D7:D17)\"\n\"D6\"\n\"-2180+9\"\n\"3.25*0.2\"\n\"+G505*45747\"\n\"SUM(J675:K675)\"\n\"SUM(D675:D677)\"\n\"C10+C11\"\n\"SUM(C13:C14)\"\n\"5580690+3719120+2134246+1423\"\n\"5158926+4296684+2029977+1041\"\n\"C21\"\n\"9184744+41396994+8777049\"\n\"9607008+48115484+8668816\"\n\"49877748+3729695\"\n\"51155238+4026582\"\n\"F3\"\n\"D5+1\"\n\"SUM(D8:D11)\"\n\"D13-D10\"\n\"SUM(D17:D31)\"\n\"3347433-1292663\"\n\"3048594.05+1292663/2\"\n\"SUM(D51:G51)\"\n\"SUM(L51:N51)*4/3\"\n\"SUM(M51:O51)*4/2\"\n\"SUM(N51:P51)*4/1\"\n\"0.02*D69\"\n\"#REF!\"\n\"D66\"\n\"D74+D73\"\n\"D69-D76\"\n\"D78/D69\"\n\"'Year-by-Year Data'!D5\"\n\"D5-3\"\n\"D1-1\"\n\"SUM('Year-by-Year Data'!D8:G8)\"\n\"0.02*H15\"\n\"H62\"\n\"H12\"\n\"SUM(H19:H20)\"\n\"H15-H22\"\n\"H23/H15\"\n\"'Year-by-Year Data'!C17\"\n\"SUM('Year-by-Year Data'!D17:G17)\"\n\"C29\"\n\"IF(H29-H$17<0.01,0,H29-H$17)\"\n\"SUM(H46:H60)\"\n\"+K14-O14\"\n\"SUM(K14:K16)\"\n\"499+48\"\n\"376+117\"\n\"248+23\"\n\"SUM(K20:K26)\"\n\"+K17-K27\"\n\"+H29+H35\"\n\"+K37+K39\"\n\"SUM(K42:K45)\"\n\"+K69+0.01\"\n\"+N69\"\n\"+N71\"\n\"+K70\"\n\"+N61-M61\"\n\"114835741-2081898\"\n\"-341150932\"\n\"-9598671+961769+2081898\"\n\"9598671-8636902\"\n\"+K61/K66\"\n\"+K62/K66\"\n\"K63/K66\"\n\"K64/K66\"\n\"1079-679\"\n\"+L11+N11\"\n\"+D11+F11\"\n\"SUM(D11:D12)\"\n\"42-21\"\n\"124+298\"\n\"342+400\"\n\"475+145\"\n\"507-2-20\"\n\"32-16\"\n\"+D13+D17+D21\"\n\"174-83+5\"\n\"13-6\"\n\"15+2\"\n\"33-16\"\n\"115+275\"\n\"314+372\"\n\"439+133\"\n\"462-13\"\n\"887-449-3\"\n\"26-14\"\n\"SUM(D29:D33)\"\n\"179+20\"\n\"7-4\"\n\"3+2\"\n\"4-1\"\n\"2-1\"\n\"63-3\"\n\"61-3-3\"\n\"49-5\"\n\"90-9-2+4\"\n\"88-3\"\n\"25-12\"\n\"14+1-3-7\"\n\"4+2\"\n\"8+5-2\"\n\"9+1-1\"\n\"20-9+2\"\n\"26+1\"\n\"71-32\"\n\"7-3\"\n\"34-20\"\n\"9-5\"\n\"7-2\"\n\"-3+2\"\n\"3+1+3\"\n\"SUM(D45:D62)\"\n\"12-2-5+5-1-2-2\"\n\"3+17\"\n\"24+15\"\n\"15+29\"\n\"11-3-2\"\n\"6-3-1\"\n\"6-3-2\"\n\"SUM(D63:D69)\"\n\"9+2\"\n\"20+28\"\n\"40+17\"\n\"59+5\"\n\"22+1\"\n\"D23-D34-D42-D70-D79-D81\"\n\"8\"\n\"29-23\"\n\"-154-5+2+3\"\n\"-560+414\"\n\"-283+140\"\n\"+N91+L91\"\n\"106-35\"\n\"104-71-35\"\n\"-1-14-1\"\n\"SUM(D95:D102)\"\n\"+D83+D87+D91+D103\"\n\"+D106+D109\"\n\"+D112+D116+D117\"\n\"+D13-D29-D63-D72-D75-D78\"\n\"+F13-F29-F63-F72\"\n\"+H13-H29-H63-H72-H78\"\n\"+D15-D31-D65-D73-D76\"\n\"+F15-F31-F65\"\n\"+J15-J31-J65-J73\"\n\"+D20-D67\"\n\"+D19-D33-D68\"\n\"-D69\"\n\"SUM(D121:D126)\"\n\"422-2-12\"\n\"118+20\"\n\"117+16\"\n\"SUM(D15:D18)\"\n\"6043-4\"\n\"163-20\"\n\"SUM(D19:D27)\"\n\"122+4-2\"\n\"236+2\"\n\"SUM(D34:D39)\"\n\"5634\"\n\"5979+188\"\n\"SUM(D40:D50)\"\n\"+'P&L Crib'!I5\"\n\"+'P&L Crib'!I5\"\n\"+'P&L Crib'!I5\"\n\"+'P&L Crib'!I5\"\n\"+'P&L Crib'!I5\"\n\"+'P&L Crib'!I5\"\n\"913+2\"\n\"400-400\"\n\"32+15\"\n\"34+15\"\n\"52-37-15\"\n\"2+6\"\n\"6+1\"\n\"1+8\"\n\"SUM(D12:D20)\"\n\"SUM(F11:F20)\"\n\"79+2\"\n\"112+17-2\"\n\"24-17\"\n\"329+225\"\n\"185+155\"\n\"115+360+2-12\"\n\"277-12\"\n\"SUM(D24:D28)\"\n\"34-21\"\n\"4+110\"\n\"4+42\"\n\"68+27\"\n\"2\"\n\"10-4\"\n\"4+4\"\n\"SUM(D32:D47)\"\n\"+D8+D21+D29+D48\"\n\"14-4\"\n\"95-12\"\n\"94-11\"\n\"93-11\"\n\"10-10\"\n\"SUM(F53:F58)\"\n\"37+15\"\n\"15+39\"\n\"16+41\"\n\"15+2\"\n\"SUM(D61:D63)\"\n\"26-5\"\n\"153-26\"\n\"131+4\"\n\"26-2\"\n\"121-49\"\n\"49-3\"\n\"131-5\"\n\"131-15\"\n\"SUM(D66:D78)\"\n\"2+3\"\n\"SUM(D82:D85)\"\n\"13+2\"\n\"11+2\"\n\"9+2\"\n\"8+1\"\n\"72\"\n\"1+1\"\n\"2+1\"\n\"1+4\"\n\"27-17\"\n\"7+2+1-2+21\"\n\"29-21\"\n\"SUM(D86:D97)\"\n\"SUM(F88:F97)+F86\"\n\"D50+D59+D98+D79\"\n\"F50+F59+F98+F79+F64\"\n\"A4\"\n\"A4\"\n\"A4\"\n\"560-132-97\"\n\"694-447\"\n\"492-244\"\n\"259+5+2\"\n\"186+308\"\n\"132+97\"\n\"447-3\"\n\"SUM(D105:D106)\"\n\"SUM(D109:D115)\"\n\"152+27+5\"\n\"156-8-1\"\n\"122+4-2\"\n\"76-2\"\n\"142\"\n\"124-16-3\"\n\"104+4\"\n\"40+16\"\n\"9-3\"\n\"7-6\"\n\"4+17\"\n\"18+2-1+8-1\"\n\"7+1\"\n\"7+1+1-1\"\n\"2+2+2\"\n\"2+4\"\n\"SUM(D128:D147)\"\n\"+D107+D116+D120+D118+D126+D148\"\n\"297-121\"\n\"4\"\n\"3+1+1\"\n\"1264\"\n\"906+16+3\"\n\"14+1\"\n\"11+2+1\"\n\"10+1\"\n\"114\"\n\"90\"\n\"91\"\n\"88+2\"\n\"30+3\"\n\"29+3\"\n\"28+3\"\n\"32-8\"\n\"19-3\"\n\"16+6\"\n\"16+9\"\n\"10\"\n\"43-1\"\n\"8+33\"\n\"35+8\"\n\"D150+D169+D176+D178+D197\"\n\"-214-8-35+1+2\"\n\"SUM(D199:D201)\"\n\"+D203-D100\"\n\"+D11+E11\"\n\"SUM(D11:D13)\"\n\"SUM(H11:H12)\"\n\"208-1\"\n\"-6+1+2\"\n\"-1-8\"\n\"SUM(D14:D33)\"\n\"5-10\"\n\"SUM(D38:D48)\"\n\"SUM(H37:H48)\"\n\"SUM(D52:D53)\"\n\"+D34+D49+D54+D56+D58\"\n\"+D60+D62\"\n\"109+101\"\n\"754+20\"\n\"580+20\"\n\"SUM(F7:F8)\"\n\"12615-5000\"\n\"SUM(F12:F17)\"\n\"F9-F18\"\n\"SUM(F20:F24)\"\n\"F27-F30\"\n\"+F33/F37\"\n\"F33/F40\"\n\"-1526\"\n\"+F44/32703\"\n\"+J44/32761\"\n\"-0.05\"\n\"SUM(G7:G12)\"\n\"SUM(I7:I11)\"\n\"SUM(G13:G20)\"\n\"SUM(G27:G30)\"\n\"SUM(G31:G37)\"\n\"317745-7942-53102\"\n\"290705-141-47529\"\n\"893867-20595-141271-1\"\n\"462699+E9-39810-35325\"\n\"1115677-2+486+6744-1063-425214-268403-56169-2625-140101+437-6526-48834-39056\"\n\"152966-114-17295+18601-46674+232+633\"\n\"(1510767-25042)+1520-3521+6744-1063-425214-268403-56169-2625-140101+437-9178-130517-104314-1\"\n\"228084+E11-39520+1236+342-57756+23279+376-676\"\n\"48859+39056+749\"\n\"75144-19-364\"\n\"142031+104314+2220\"\n\"136079+E12-342-376\"\n\"576\"\n\"627\"\n\"2048+1\"\n\"2191+E13\"\n\"3752\"\n\"25439-3619-4000-50-749-2551+2019-122\"\n\"19782-1833-3+19-691-832+132\"\n\"64017-3619-4000-50-1620-8094-364-2220+1\"\n\"35840+E14-736-677-697-1713+456\"\n\"-6744+3619+4000+53-437+6695+425214+268403+56169+3549+4500+2625\"\n\"446-25805-633\"\n\"3521-30938-23211-6744+3619+4000+53-437+6695+425214+268403+56169+3549+4500+2625\"\n\"-87056+E15\"\n\"13155-122349+1345-900+2230+607+17995-633\"\n\"SUM(C11:C15)\"\n\"+C9-C16\"\n\"1143-38194+4439-4444+3+2194+38-2844\"\n\"-34616+1587+604-1360+627-650\"\n\"3401-106897+13115-14164+3+6119+41-8223\"\n\"-68825+E18-55+641-635+210-42+1+619-6-607+174-396\"\n\"-14744-4039-579+6695+4500+3549+70-14\"\n\"25281-18+2-25805-1221-4-7\"\n\"-16437-12204+51815+6695-30938-23211+3549+4500+20-12+1\"\n\"359+E19-825+4-60-5\"\n\"SUM(C17:C19)\"\n\"130996-1741+(1063*0.28)\"\n\"18685-176+369\"\n\"200806-3952+(1063*0.28)\"\n\"-26037+E21+206\"\n\"35803-6373-44\"\n\"2952+1571-1063+1063-140101-1741+(1063*0.28)\"\n\"-1318+369+587-176\"\n\"1063-1063-140101+10850+2235-3952+(1063*0.28)\"\n\"-9479+E23+772-1635+206+176\"\n\"-4020-6373+628-44-1\"\n\"C20-C21+C23+C22\"\n\"-185933\"\n\"SUM(C24:C25)\"\n\"C24/(C36/1000)\"\n\"C25/(C36/1000)\"\n\"C26/(C36/1000)\"\n\"C24/(C37/1000)\"\n\"C25/(C37/1000)\"\n\"C26/(C37/1000)\"\n\"93507-4231-2427\"\n\"110909-3613-5166\"\n\"258760-33979-8270\"\n\"254177-3-19287\"\n\"44430+38960-914-34-2766-940\"\n\"51488+48468+3-175-306-1331-226\"\n\"14795\"\n\"4231+33979+914+34+605+336+35113+100000+2427+8270+2766+940+78+317\"\n\"3613+3+175+306+237+171041+9024+5166+19287+1331+226+660+670+29358\"\n\"SUM(F8:F12)\"\n\"583688+106326\"\n\"841350+76722\"\n\"6+399574+207456+1151759+21146-336-317\"\n\"5300+418472+202767+1624670+22544+8488-237-670\"\n\"215291-29358\"\n\"4792+13492+9344+12488+26+6926+6+19148-605-78-1\"\n\"4114+21373+13894+183592+43+8443+7+19650-9024-660\"\n\"250000+430000+13395-2522+18777\"\n\"585484-340000+12240+9933-20500-726-2\"\n\"15800+2522+5441+11+16653+2522+12+4149+9605\"\n\"20500+3678+5543+23+5072+726+2+5607+473+12914+1194\"\n\"73068+187260-5441-16653-4149-9605\"\n\"76859+226127-3678-5543-5607-12914\"\n\"13918-11\"\n\"16944-23-473\"\n\"SUM(F21:F24)\"\n\"1709821-143750+1760+90221-2522\"\n\"1704571-141000+41683+340000\"\n\"1+55635-12\"\n\"25355-1194\"\n\"78575\"\n\"78575-5072\"\n\"143750-1760\"\n\"141000\"\n\"85818\"\n\"163588\"\n\"-1170722\"\n\"106130-7268+1\"\n\"-1-33619\"\n\"+F29+F40+F32+F33\"\n\"IS!C26\"\n\"IS!E26\"\n\"IS!I26\"\n\"IS!C12\"\n\"IS!E12\"\n\"IS!I12\"\n\"914491\"\n\"1101790-1366\"\n\"15251-128270\"\n\"31243-128270\"\n\"-2416\"\n\"-3613-5166\"\n\"16989\"\n\"-3192\"\n\"724+1061+1034+2700-2278\"\n\"132-1720-27501+2851-26668-27688\"\n\"1274+1694+1061+2404+4537-966-46741\"\n\"256-2587+7301+12245-93416-31230-1\"\n\"294+492+8548+14522-39090-35631\"\n\"SUM(D10:D17)\"\n\"-35847\"\n\"-155945\"\n\"-170817\"\n\"-13447\"\n\"-29234+16+91\"\n\"-53654\"\n\"-83866-41219-29234+3+80+14+16+91-275\"\n\"54262-239623+80+14+16+3+91+22+116\"\n\"-23512\"\n\"-5357-16-91\"\n\"-62958\"\n\"-11205-16243-5357-3-91-14-80-16+275\"\n\"-54262-80-14-16-3-91-22-116\"\n\"-5563\"\n\"-14768\"\n\"89-9683\"\n\"-18828\"\n\"-19485\"\n\"SUM(D20:D25)\"\n\"-54926\"\n\"62029\"\n\"0\"\n\"8098\"\n\"816+4986\"\n\"816\"\n\"+D18+D26+D36+D37\"\n\"113596\"\n\"+D38+D39\"\n\"+E6\"\n\"SUM(F9:F11)\"\n\"SUM(F15:F20)\"\n\"F12-F21\"\n\"F31+F29\"\n\"F33/F38\"\n\"+E6\"\n\"4101+3052\"\n\"39828-I45\"\n\"9260-O45\"\n\"SUM(I43:I49)\"\n\"6777+375\"\n\"5641-375\"\n\"SUM(I53:I56)\"\n\"D15-174979\"\n\"H15-160830\"\n\"D16-464939\"\n\"H16-403075\"\n\"D17-92082\"\n\"H17-66694\"\n\"SUM(D8:D10)\"\n\"H26-366860\"\n\"J26-316647\"\n\"430012+81946\"\n\"196665+98573+110816+44438\"\n\"H27-83326\"\n\"J27-71094\"\n\"H28-39100\"\n\"J28-39945\"\n\"35621+202+1684+487+12359\"\n\"17139+2830+28737+1065+3071\"\n\"H30-242714\"\n\"J30-202913\"\n\"SUM(D29:D30)\"\n\"H34-86679\"\n\"J34-58415\"\n\"H35-99489\"\n\"J35-113029\"\n\"H36-269173\"\n\"J36-221785\"\n\"H37-33945\"\n\"J37-33721-736\"\n\"46754+1065\"\n\"SUM(D34:D37)\"\n\"H41-46346\"\n\"J41-5190\"\n\"H42-100583\"\n\"J42-88672\"\n\"H43-27753\"\n\"J43-35131\"\n\"H44-50688\"\n\"J44-63109\"\n\"H45-95\"\n\"J45-10063\"\n\"SUM(D41:D45)\"\n\"H47-16337\"\n\"H48-912\"\n\"J48-748\"\n\"121+698+403\"\n\"-5570+96575+352\"\n\"-33261+102630+685\"\n\"2207+292544+1533\"\n\"6880+265245+2355\"\n\"17802+43+17061\"\n\"29272-149+19590\"\n\"95430-1347+68476\"\n\"94285-405+65427\"\n\"6074+2248\"\n\"6329+1704\"\n\"20881+8970\"\n\"6436+3007\"\n\"14217+4885\"\n\"19780+4428\"\n\"65949+20183\"\n\"61880+17499\"\n\"-4402+1786\"\n\"-5240+9615\"\n\"-24186+23170\"\n\"-3866+28761\"\n\"4867+2603\"\n\"13752+2621\"\n\"36776+10412\"\n\"47830+10480\"\n\"-183+157\"\n\"-830+1199\"\n\"-1849+331\"\n\"-3108+5583\"\n\"-1265+5381\"\n\"4080+5381\"\n\"-1463+1\"\n\"-4668+11+11+1\"\n\"-7567+15+14-1\"\n\"-15292+44+44+9\"\n\"48004+838\"\n\"178136+3058\"\n\"70856-7737\"\n\"84063-39070\"\n\"212887-39780\"\n\"195401-39070\"\n\"-268403\"\n\"-20821-11000-15000-8165-1183\"\n\"-4500-6695-3549\"\n\"407-359-5229\"\n\"-2230-13155-607+1\"\n\"-2625+6744-3619-4000-53+437+D111-3521\"\n\"-19535+634\"\n\"D112\"\n\"SUM(D105:D113)\"\n\"2531+115549+986-6499-8663\"\n\"-39991-408\"\n\"-161205+654\"\n\"-1724-230-4\"\n\"3-3588\"\n\"-3079-9487+8507+3+2053-19\"\n\"-1691-5872\"\n\"-20327-491+17996+9-53-27-2\"\n\"-258609+43455\"\n\"154777-39228+2531+986-6499-8663\"\n\"-204099-H145-H146-H147\"\n\"SUM(D145:D150)\"\n\"-50000-140101\"\n\"193-484\"\n\"709-74\"\n\"-3759-186\"\n\"-6373-44\"\n\"7768+12877+192\"\n\"33990+178\"\n\"69594+48\"\n\"97849+330\"\n\"267699+293\"\n\"91845\"\n\"77366+354\"\n\"5710+25818\"\n\"-F193+D193\"\n\"51616-2\"\n\"726+20500+2\"\n\"SUM(F210:L210)\"\n\"158905\"\n\"2082+6-6+38\"\n\"9772+49+59+33+44+3\"\n\"29697+2+99+5+255+910\"\n\"17364+391+7+143+34+221+31+275\"\n\"881+35+14+44+33\"\n\"2016+31+413+1+50\"\n\"2341+296+135+397+135+434\"\n\"4816+3+206+979+24+138\"\n\"234+59+7\"\n\"5583+3\"\n\"SUM(D21-F21)\"\n\"SUM(D21:D29)\"\n\"SUM(D8:D10)\"\n\"SUM(D13:D14)\"\n\"D11+D15\"\n\"SUM(D16:D24)\"\n\"SUM(D29:D34)\"\n\"SUM(D46,D42,D35)\"\n\"D35*0.35\"\n\"D42*0.084\"\n\"SUM(D51,D47)\"\n\"E58*0.93\"\n\"SUM(D25-D61)\"\n\"D65\"\n\"D65\"\n\"D65\"\n\"K65\"\n\"SUM(Detail!D8:D10)\"\n\"-Detail!D15\"\n\"SUM(D8:D9)\"\n\"SUM(Detail!F10:F17)\"\n\"Detail!D17\"\n\"SUM(D10:D18)\"\n\"SUM(Detail!D29:D34)\"\n\"SUM(Detail!D37:D41)\"\n\"SUM(Detail!D44:D45)\"\n\"SUM(Detail!D49:D50)\"\n\"Detail!D53\"\n\"SUM(D22:D33)\"\n\"SUM(D19-D34)\"\n\"D38\"\n\"D38\"\n\"D38\"\n\"K38\"\n\"SUM(Detail!D8:D10)\"\n\"SUM(D8:I8)\"\n\"-SUM(Detail!D13:D14)\"\n\"SUM(D8:D9)\"\n\"Detail!D17\"\n\"Detail!D23\"\n\"SUM(D10:D20)\"\n\"SUM(Detail!D29:D34)\"\n\"SUM(Detail!D37:D41)\"\n\"SUM(Detail!D44:D45)\"\n\"SUM(Detail!D49:D50)\"\n\"H24*0.35+H25*0.084\"\n\"Detail!D53\"\n\"SUM(D24:D35)\"\n\"SUM(D21-D36)\"\n\"(B12)\"\n\"SUM(E12:H12)\"\n\"SUM(J12:N12)\"\n\"SUM(N12/I12)\"\n\"D12+N12\"\n\"C12-Q12\"\n\"Q12/C12\"\n\"SUM(J13:M13)\"\n\"D13+J13+K13+L13+M13\"\n\"SUM(B12:B18)\"\n\"SUM(B22:B25)\"\n\"SUM(B29:B31)\"\n\"SUM(B35:B36)\"\n\"SUM(B40:B44)\"\n\"SUM(D56)\"\n\"SUM(R59)\"\n\"SUM(B11:B64)-(B62+B58+B53+B50+B45+B37+B32+B26+B19)\"\n\"SUM(B73:H73)\"\n\"SUM(C30:I30)\"\n\"SUM(C30:C36)\"\n\"330.4-254.4\"\n\"SUM(C118:C125)\"\n\"SUM(C3)/E3\"\n\"SUM(C3)+C10\"\n\"SUM(C4)/C3\"\n\"SUM(C5)/C3\"\n\"C3-C5\"\n\"C3-C7\"\n\"SUM(I4:I6)\"\n\"SUM(C8)/C5\"\n\"SUM(B7:B8)\"\n\"SUM(C10)/E3\"\n\"SUM(C5+C12)\"\n\"SUM(G14:G15)\"\n\"SUM(C7+C14)\"\n\"SUM(F14)/F13\"\n\"C8+C15\"\n\"SUM(F15)/F13\"\n\"C18/E3\"\n\"SUM(G18)/G20\"\n\"C7\"\n\"C19/E3\"\n\"SUM(G19)/G20\"\n\"C14\"\n\"SUM(C21)/C3\"\n\"C3-C22\"\n\"C22/C3\"\n\"SUM(C26)/C10\"\n\"C10-C27\"\n\"SUM(C27)/C10\"\n\"(D4+E4)/$F$7\"\n\"SUM(D4:E4)\"\n\"SUM(D4:D6)\"\n\"D7+E7\"\n\"(D10+E10)/$F$13\"\n\"(D16+E16)/$F$23\"\n\"SUM(B16:B22)\"\n\"SUM(B28)/B26\"\n\"(D5/B5)\"\n\"(D10/D17)*100\"\n\"(M10/M16)*100\"\n\"(M11/M16)*100\"\n\"(M12/M16)*100\"\n\"(M13/M16)*100\"\n\"(M14/M16)*100\"\n\"(M15/M16)*100\"\n\"(M16/M16)*100\"\n\"M17/K17\"\n\"SUM(M10+M11+M12+M13+M15+M16)\"\n\"SUM(Q17)/O17\"\n\"(M20+Q20)/($M$23+$Q$23)\"\n\"SUM(D33:D35)\"\n\"(D33+H33)/($D$36+$H$36)\"\n\"SUM(C46)/C49\"\n\"SUM(D33+H33+M20+Q20)\"\n\"SUM(C47)/C49\"\n\"SUM(C48)/C49\"\n\"SUM(C3)/E3\"\n\"SUM(C3)+C10\"\n\"SUM(C4)/C3\"\n\"SUM(C5)/C3\"\n\"C3-C5\"\n\"C3-C7\"\n\"SUM(I4:I6)\"\n\"SUM(C8)/C5\"\n\"SUM(B7:B8)\"\n\"SUM(C10)/E3\"\n\"SUM(C5+C12)\"\n\"SUM(G14:G15)\"\n\"SUM(C7+C14)\"\n\"SUM(F14)/F13\"\n\"C8+C15\"\n\"SUM(F15)/F13\"\n\"C18/E3\"\n\"C3\"\n\"SUM(G18)/G20\"\n\"C7\"\n\"C19/E3\"\n\"C10\"\n\"SUM(G19)/G20\"\n\"C14\"\n\"SUM(C21)/C3\"\n\"C3-C22\"\n\"C22/C3\"\n\"C5\"\n\"C7\"\n\"SUM(C26)/C10\"\n\"C10-C27\"\n\"SUM(C27)/C10\"\n\"C14\"\n\"C33/$C$36\"\n\"'SAO Report Graphs Data'!E4\"\n\"G33/$G$36\"\n\"'SAO Report Graphs Data'!D4\"\n\"SUM(C33:C34)\"\n\"C39/$C$42\"\n\"G39/$G$42\"\n\"(D4+E4)/$F$7\"\n\"SUM(D4:E4)\"\n\"SUM(D4:D6)\"\n\"D7+E7\"\n\"(D10+E10)/$F$13\"\n\"D10/$D$13\"\n\"(D16+E16)/$F$23\"\n\"SUM(B16:B22)\"\n\"'Profile Graphs Data'!E3\"\n\"'Profile Graphs Data'!F13\"\n\"SUM(B28)/B26\"\n\"'Profile Graphs Data'!F13\"\n\"(D5/B5)\"\n\"(D10/D17)*100\"\n\"(M10/$M$17)*100\"\n\"(Q10/$Q$17)*100\"\n\"(D11/D17)*100\"\n\"(D12/D17)*100\"\n\"(D13/D17)*100\"\n\"(D14/D17)*100\"\n\"(D15/D17)*100\"\n\"(D16/D17)*100\"\n\"D10+D11+D12+D13+D15+D16\"\n\"(D17/D17)*100\"\n\"M17/K17\"\n\"(N10+N11+N12+N13+N15+N16)/100\"\n\"SUM(Q17)/O17\"\n\"B17\"\n\"SUM(D20:D22)\"\n\"(M26+Q26)/(Q29+M29)\"\n\"(M27+Q27)/(Q29+M29)\"\n\"(M28+Q28)/(Q29+M29)\"\n\"B17\"\n\"B20\"\n\"(M20+Q20)/($M$23+$Q$23)\"\n\"(D33+H33)/($D$36+$H$36)\"\n\"SUM(C46)/C49\"\n\"SUM(D33+H33+M20+Q20)\"\n\"(D26+H26)/($D$29+$H$29)\"\n\"SUM(C47)/C49\"\n\"SUM(C48)/C49\"\n\"NOW()\"\n\"'BM Spreadsheet per Court Order'!U11\"\n\"G32+G34\"\n\"'Data Entry Sheet'!G18\"\n\"'Data Entry Sheet'!G20\"\n\"'Data Entry Sheet'!G22\"\n\"'Data Entry Sheet'!G24\"\n\"'Data Entry Sheet'!G26\"\n\"ROUND(B11/(C11+D11+E11+F11),4)\"\n\"B11/(C11+D11+F11)\"\n\"H11-G11\"\n\"I11*C11\"\n\"E11*G11\"\n\"'Data Entry Sheet'!G28\"\n\"K11-L11\"\n\"IF(MIN(J11,M11)<0,0,MIN(J11,M11))\"\n\"C11/(C11+E11+F11)\"\n\"VLOOKUP(O11,'[1]Note 1 Automation'!$A$1:$B$21,2)\"\n\"G11*C11\"\n\"N11*P11\"\n\"Q11+R11\"\n\"(S11/Q11)*G11\"\n\"T11-G11\"\n\"B12/(C12+D12+E12+F12)\"\n\"NOW()\"\n\"D17\"\n\"SUM(D29:D32)\"\n\"SUM(D33:D35)\"\n\"SUM(D46,D47,D50)\"\n\"D$17\"\n\"D56-D57-D58\"\n\"D59-D60\"\n\"D61-D63+D62\"\n\"D84*D19\"\n\"D33-(D39+D41)\"\n\"D74+D34\"\n\"D61*(1-D20)\"\n\"D68+D60\"\n\"D76+D60\"\n\"D76-(D75-E75)\"\n\"D68/D19\"\n\"D50/D19\"\n\"D77/D19\"\n\"D79/D19\"\n\"D33/D42\"\n\"D56/D31\"\n\"D30/(D56/365)\"\n\"D56/D34\"\n\"D56/D36\"\n\"D46/D36\"\n\"D61/D63\"\n\"(D59+D22)/(D63+D22+D23)\"\n\"D68/D56\"\n\"D61/D36\"\n\"D68/D36\"\n\"D68/D50\"\n\"D18/D83\"\n\"D18/D86\"\n\"D18/D85\"\n\"D160\"\n\"C161\"\n\"C159\"\n\"C161\"\n\"D159*E159*F159\"\n\"D106\"\n\"D100\"\n\"D36/D50\"\n\"E106\"\n\"E100\"\n\"E36/E50\"\n\"I106\"\n\"I100\"\n\"1/(1-I102)\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(M20:P21)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R22:U33)\"\n\"SUM(R41:R54)\"\n\"SUM(R41:R54)\"\n\"SUM(R41:R54)\"\n\"SUM(R41:R54)\"\n\"R16+R35-R55\"\n\"R16+R35-R55\"\n\"R16+R35-R55\"\n\"R16+R35-R55\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"R7+R8-R9\"\n\"SUM(R16:U19)\"\n\"SUM(R16:U19)\"\n\"SUM(R16:U19)\"\n\"SUM(R16:U19)\"\n\"SUM(J8:J20)\"\n\"C6*G6\"\n\"SUM(H5:H12)\"\n\"SUM(H16:H17)\"\n\"SUM(H21:H24)\"\n\"SUM(H35:H41)\"\n\"SUM(H44:H46)\"\n\"H53+H47+H42+H32+H25+H18+H13\"\n\"H56+H55\"\n\"+X11-T11\"\n\"SUM(T11:T13)\"\n\"+'Back Page'!J36\"\n\"+'Back Page'!N36\"\n\"+'Back Page'!N43\"\n\"+'Back Page'!N55\"\n\"SUM(T19:T33)\"\n\"+T15-T35\"\n\"+T35+T37\"\n\"+'Front Page'!X46\"\n\"+H7\"\n\"SUM(H9:H12)\"\n\"SUM(H14:H21)\"\n\"SUM(H23:H34)\"\n\"SUM(H7:H34)\"\n\"SUM(L39:L42)\"\n\"SUM(L46:L54)\"\n\"SUM(C4:C6)\"\n\"C9+C10+C11\"\n\"C7-C12\"\n\"C12/C7*100\"\n\"C14/C7*100\"\n\"C20-C26\"\n\"C24-C25-C26\"\n\"C27-C28\"\n\"C27\"\n\"C26\"\n\"C43+C44\"\n\"C31\"\n\"C39\"\n\"C41\"\n\"C55+C56-C57-C58\"\n\"C59/C14\"\n\"C31\"\n\"C41\"\n\"C42\"\n\"+C30\"\n\"69810-15000\"\n\"109271-25000\"\n\"C79-C80-C82+C83+C84\"\n\"178601-15000\"\n\"176312-25000\"\n\"C85/C86\"\n\"C79\"\n\"C93-C94-C96+C97\"\n\"D93-D94-D96+D97-15000\"\n\"E93-E94-E96+E97-25000\"\n\"C86-C44\"\n\"C98-C99-C100-C101-C102\"\n\"C20\"\n\"C100\"\n\"C48\"\n\"SUM(C108:C112)\"\n\"C113/2000\"\n\"C114/128.5\"\n\"C114/43\"\n\"C20\"\n\"C97\"\n\"C111\"\n\"SUM(C122:C125)\"\n\"C4/C9\"\n\"C4-C9\"\n\"C12/C7\"\n\"C14/C7\"\n\"C185\"\n\"C31\"\n\"C87\"\n\"C103\"\n\"C24/C7\"\n\"C25/C24\"\n\"C30/C24\"\n\"C26/C24\"\n\"1-C156-C157-C158\"\n\"C4\"\n\"C9\"\n\"C24\"\n\"(C164-C165)/C167\"\n\"C7\"\n\"C12\"\n\"C174/C173\"\n\"C31\"\n\"C44\"\n\"C180+C181-C182\"\n\"C24\"\n\"C123\"\n\"C191\"\n\"C31\"\n\"C24\"\n\"C222*C223\"\n\"SUM(C226:C234)\"\n\"C235\"\n\"C224-C235\"\n\"D190\"\n\"C182\"\n\"'Sheet2 (4)'!B39\"\n\"C264/2000\"\n\"$C266+C243\"\n\"C268/C222\"\n\"C126\"\n\"C276\"\n\"C276\"\n\"C14\"\n\"$A294*C$293\"\n\"'Sheet2 (3)'!D73\"\n\"'Sheet2 (4)'!C72\"\n\"'Sheet2 (5)'!D74\"\n\"'Sheet2 (3)'!B76\"\n\"'Sheet2 (4)'!B75\"\n\"'Sheet2 (5)'!B77\"\n\"'Sheet2 (3)'!C76\"\n\"'Sheet2 (4)'!C75\"\n\"'Sheet2 (5)'!C77\"\n\"C295\"\n\"C307/C303\"\n\"(1-C$308)*C304\"\n\"C309/128.5\"\n\"C303-C307\"\n\"Sheet1!C223\"\n\"B4*B5\"\n\"SUM(B9:B20)\"\n\"IF(B21>0,(B6-B21),0)\"\n\"SUM(B53:H53)\"\n\"SUM(B27:B35)\"\n\"0.06*Sheet1!C14\"\n\"SUM(B36:B39)\"\n\"B40/B26\"\n\"B3\"\n\"IF(B21>0,(B21+$B42),0)\"\n\"IF(B45>0,(B45/B4),0)\"\n\"A2\"\n\"B44\"\n\"B21\"\n\"IF(B53>0,(B21/B4),0)\"\n\"IF(B55>0,(B53*B55),0)\"\n\"SUM(B59:H59)\"\n\"B40\"\n\"Sheet1!C276\"\n\"B39\"\n\"Sheet1!C125\"\n\"B38\"\n\"B68\"\n\"Sheet1!C41\"\n\"C65-C66-C67+C68-C69+C70\"\n\"C71/B26\"\n\"C62+C71\"\n\"B52\"\n\"IF(B59>0,($C72+B55),0)\"\n\"IF(B76>0,(B76/B4),0)\"\n\"C71\"\n\"B35\"\n\"B27\"\n\"Sheet1!C46\"\n\"Sheet1!C48\"\n\"C82-C83-C84+C85+C86\"\n\"C87/B26\"\n\"C62+C87\"\n\"B75\"\n\"IF(B78>0,(B55+$C89),0)\"\n\"IF(B94>0,(B94/B4),0)\"\n\"A2\"\n\"B52\"\n\"A48\"\n\"A78\"\n\"A96\"\n\"Sheet1!C223\"\n\"B4*B5\"\n\"SUM(B9:B20)\"\n\"IF(B21>0,(B6-B21),0)\"\n\"SUM(B52:H52)\"\n\"Sheet1!D190\"\n\"SUM(B27:B35)\"\n\"Sheet1!D182\"\n\"(0.06*Sheet1!D14)\"\n\"SUM(B36:B39)\"\n\"B40/B26\"\n\"B3\"\n\"IF(B21>0,(B21+$B42),0)\"\n\"IF(B45>0,(B45/B4),0)\"\n\"A2\"\n\"B44\"\n\"B21\"\n\"IF(B52>0,(B21/B4),0)\"\n\"IF(B54>0,(B52*B54),0)\"\n\"SUM(B58:H58)\"\n\"B40\"\n\"Sheet1!D276\"\n\"B39\"\n\"Sheet1!D42\"\n\"B38\"\n\"B67\"\n\"Sheet1!D41\"\n\"C64-C65-C66+C67-C68+C69\"\n\"C70/B26\"\n\"C61+C70\"\n\"B51\"\n\"IF(B58>0,($C71+B54),0)\"\n\"IF(B75>0,(B75/B4),0)\"\n\"C70\"\n\"B35\"\n\"B27\"\n\"Sheet1!D46\"\n\"Sheet1!D48\"\n\"C81-C82-C83+C84+C85\"\n\"C86/B26\"\n\"C61+C86\"\n\"B74\"\n\"IF(B77>0,(B54+$C88),0)\"\n\"IF(B93>0,(B93/B4),0)\"\n\"A2\"\n\"B51\"\n\"A47\"\n\"A77\"\n\"A95\"\n\"Sheet1!D223\"\n\"B4*B5\"\n\"SUM(B9:B20)\"\n\"IF(B21>0,(B6-B21),0)\"\n\"SUM(B54:H54)\"\n\"Sheet1!E44\"\n\"SUM(B27:B35)\"\n\"Sheet1!E182\"\n\"0.06*Sheet1!E14\"\n\"SUM(B36:B39)\"\n\"B40/B26\"\n\"B3\"\n\"IF(B21>0,(B21+$B42),0)\"\n\"IF(B46>0,(B46/B4),0)\"\n\"A2\"\n\"B45\"\n\"B21\"\n\"IF(B54>0,(B21/B4),0)\"\n\"IF(B56>0,(B54*B56),0)\"\n\"SUM(B60:H60)\"\n\"B40\"\n\"Sheet1!E276\"\n\"B39\"\n\"Sheet1!E125\"\n\"B38\"\n\"B69\"\n\"Sheet1!E111\"\n\"C66-C67-C68+C69-C70+C71\"\n\"C72/B26\"\n\"C63+C72\"\n\"B53\"\n\"IF(B60>0,($C73+B56),0)\"\n\"IF(B77>0,(B77/B4),0)\"\n\"C72\"\n\"B35\"\n\"B27\"\n\"Sheet1!E46\"\n\"Sheet1!E48\"\n\"C83-C84-C85+C86+C87\"\n\"C88/B26\"\n\"C63+C88\"\n\"B76\"\n\"IF(B79>0,(B56+$C90),0)\"\n\"IF(B95>0,(B95/B4),0)\"\n\"A2\"\n\"B53\"\n\"A49\"\n\"A79\"\n\"A97\"\n\"IF(AND(B16<>\"\"\"\",C16<>\"\"\"\"),(B16/C16)-1,\"\"\"\")\"\n\"IF(AND(B18<>\"\"\"\",C18<>\"\"\"\"),IF(AND(C18>0, B18>0),(B18/C18)-1,\"\"N/A\"\"),\"\"\"\")\"\n\"IF(AND(B24<>\"\"\"\",C24<>\"\"\"\"), IF(AND(B24=0, C24=0), \"\"No Debt\"\", IF(C24=0, \"\"Initiated Debt\"\", (B24/C24)-1)), \"\"\"\")\"\n\"IF(AND(F16<>\"\"\"\",F17<>\"\"\"\",F18<>\"\"\"\",F22<>\"\"\"\",F23<>\"\"\"\",F24<>\"\"\"\",F25<>\"\"\"\",F26<>\"\"\"\"), 1,0)\"\n\"IF(AND(B16<>\"\"\"\",B17<>\"\"\"\"), (B16-B17)/B16, \"\"\"\")\"\n\"IF(AND(B33<>\"\"\"\",C33<>\"\"\"\"), (B33-C33)*100, \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, (SUM(F33:H33))/(SUM(F31:H31)), \"\"\"\")\"\n\"IF(AND(B18<>\"\"\"\",B16<>\"\"\"\"), B18/B16, \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, (SUM(F34:H34))/(SUM(F31:H31)), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B24<>\"\"\"\",B26<>\"\"\"\"), IF((B24+B26)>0,(B22/(B24+B26)),\"\"No Debt!\"\"), \"\"\"\")\"\n\"IF(AND(B35<>\"\"\"\",C35<>\"\"\"\"), IF(C35<>\"\"No Debt!\"\", IF(B35<>\"\"No Debt!\"\", ((B35/C35)-1), \"\"Eliminated Debt!\"\"), IF(B35<>\"\"No Debt!\"\", \"\"Initiated Debt\"\", \"\"No Debt!\"\")), \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, IF((F24+G24+H24+F26+G26+H26)>0, ((F22+G22+H22)/(F24+G24+H24+F26+G26+H26)), \"\"No Debt!\"\"), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B24<>\"\"\"\",B26<>\"\"\"\"), B22-(B24+B26), \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, (SUM(F36:H36))/(SUM(F31:H31)), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B23<>\"\"\"\",B25<>\"\"\"\",B24<>\"\"\"\"), (B23-B22)/(B25-B24), \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, (SUM(F37:H37))/(SUM(F31:H31)), \"\"\"\")\"\n\"IF(AND(B29<>\"\"\"\",B30<>\"\"\"\"), (B29-B30)/B16, \"\"\"\")\"\n\"IF(SUM(F31:H31)>0, (SUM(F38:H38))/(SUM(F31:H31)), \"\"\"\")\"\n\"IF(OR(B46=0,B46=1,B46=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"IF(D16<>\"\"\"\", IF(D16>=15%,3,IF(D16>=10%,2,IF(D16>=5%,1,0))), \"\"\"\")\"\n\"IF(D33<>\"\"\"\", IF(D33>0,3,IF(D33>(-1),2,IF(D33>=(-3),1,0))), \"\"\"\")\"\n\"IF(D19<>\"\"\"\", IF(D19<0,3,IF(D19<4%,2,IF(D19<=6%,1,0))), \"\"\"\")\"\n\"IF(AND(B35<>\"\"\"\",D35<>\"\"\"\"), IF(B35=\"\"No Debt!\"\", 3, IF(D35>0, 2, IF(AND(D35=\"\"Initiated Debt\"\", B35>=1.5), 2, IF(D35>(-10%), 1, IF(AND(D35=\"\"Initiated Debt\"\", B35<1.5), 1,0))))), \"\"\"\")\"\n\"IF(D37<>\"\"\"\", IF(D37<(-10%), 3, IF(D37<(-5%), 2, IF(D37<=0,1,0))), \"\"\"\")\"\n\"IF(OR(G52=0,G52=1,G52=2,G52=3,G52=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"SUM(B46:B52)\"\n\"IF(OR(B56=0,B56=1,B56=2,B56=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"IF(AND(B33<>\"\"\"\",I33<>\"\"\"\"), IF(((B33-I33)*100)>=5, 4, IF(((B33-I33)*100)>=0, 2, 0)), \"\"\"\")\"\n\"IF(B33<>\"\"\"\", IF(B33>60%,2,IF(B33>=40%,1,0)), \"\"\"\")\"\n\"IF(B34<>\"\"\"\", IF(B34>10%,2,IF(B34>=7%,1,0)), \"\"\"\")\"\n\"IF(AND(B35<>\"\"\"\", I35<>\"\"\"\", B36<>\"\"\"\", I36<>\"\"\"\"), IF(AND(B36>0,I36>0), IF((B36/I36)>=5, 4, IF((B36/I36)>=2, 2, 0)), IF(AND(B35<>\"\"No Debt!\"\", I35<>\"\"No Debt!\"\"), IF((B35/I35)>=1.25, 4, IF(B35>=I35, 2, 0)), IF(B35=\"\"No Debt!\"\", 4, 0))), \"\"\"\")\"\n\"IF(B35<>\"\"\"\", IF(B35=\"\"No Debt!\"\", 2, IF(B35>=1.5,2,IF(B35>=1,1,0))), \"\"\"\")\"\n\"IF(AND(B37<>\"\"\"\",I37<>\"\"\"\"), IF((B37/I37)-1<=(-0.25), 4, IF((B37/I37)-1<=0, 2, 0)), \"\"\"\")\"\n\"IF(B37<>\"\"\"\", IF(B37<1,2,IF(B37<=1.25,1,0)), \"\"\"\")\"\n\"IF(OR(G60=0,G60=2,G60=4,G60=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"SUM(G56:G60)\"\n\"SUM(B56:B61)\"\n\"(B53+B62 +G53+G61+G63)\"\n\"IF(AND(B46<>\"\"\"\",B47<>\"\"\"\",B48<>\"\"\"\",B49<>\"\"\"\",B50<>\"\"\"\",B51<>\"\"\"\",B52<>\"\"\"\",B56<>\"\"\"\",B57<>\"\"\"\",B58<>\"\"\"\",B59<>\"\"\"\",B60<>\"\"\"\",B61<>\"\"\"\",G46<>\"\"\"\",G47<>\"\"\"\",G48<>\"\"\"\",G49<>\"\"\"\",G50<>\"\"\"\",G51<>\"\"\"\",G52<>\"\"\"\",G56<>\"\"\"\",G57<>\"\"\"\",G58<>\"\"\"\",G59<>\"\"\"\",G60<>\"\"\"\",G63<>\"\"\"\"), IF(C65>=50, \"\"Top Tier!\"\", IF(C65>=40, \"\"Second Tier\"\", IF(C65>=30, \"\"Third Tier\"\", \"\"Fourth Tier\"\"))), \"\"\"\")\"\n\"IF(AND(B16<>\"\"\"\",C16<>\"\"\"\"),(B16/C16)-1,\"\"\"\")\"\n\"IF(AND(B18<>\"\"\"\",C18<>\"\"\"\"),IF(AND(C18>0, B18>0),(B18/C18)-1,\"\"N/A\"\"),\"\"\"\")\"\n\"IF(AND(B24<>\"\"\"\",C24<>\"\"\"\"), IF(AND(B24=0, C24=0), \"\"No Debt\"\", IF(C24=0, \"\"Initiated Debt\"\", (B24/C24)-1)), \"\"\"\")\"\n\"IF(AND(F16<>\"\"\"\",F17<>\"\"\"\",F18<>\"\"\"\",F22<>\"\"\"\",F23<>\"\"\"\",F24<>\"\"\"\",F25<>\"\"\"\",F26<>\"\"\"\"), 1,0)\"\n\"IF(AND(B16<>\"\"\"\",B17<>\"\"\"\"), (B16-B17)/B16, \"\"\"\")\"\n\"IF(AND(B29<>\"\"\"\",C29<>\"\"\"\"), (B29-C29)*100, \"\"\"\")\"\n\"IF(SUM(F27:H27)>0, (SUM(F29:H29))/(SUM(F27:H27)), \"\"\"\")\"\n\"IF(AND(B18<>\"\"\"\",B16<>\"\"\"\"), B18/B16, \"\"\"\")\"\n\"IF(SUM(F27:H27)>0, (SUM(F30:H30))/(SUM(F27:H27)), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B24<>\"\"\"\",B26<>\"\"\"\"), IF((B24+B26)>0,(B22/(B24+B26)),\"\"No Debt!\"\"), \"\"\"\")\"\n\"IF(AND(B31<>\"\"\"\",C31<>\"\"\"\"), IF(C31<>\"\"No Debt!\"\", IF(B31<>\"\"No Debt!\"\", ((B31/C31)-1), \"\"Eliminated Debt!\"\"), IF(B31<>\"\"No Debt!\"\", \"\"Initiated Debt\"\", \"\"No Debt!\"\")), \"\"\"\")\"\n\"IF(SUM(F27:H27)>0, IF((F24+G24+H24+F26+G26+H26)>0, ((F22+G22+H22)/(F24+G24+H24+F26+G26+H26)), \"\"No Debt!\"\"), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B24<>\"\"\"\",B26<>\"\"\"\"), B22-(B24+B26), \"\"\"\")\"\n\"IF(SUM(F27:H27)>0, (SUM(F32:H32))/(SUM(F27:H27)), \"\"\"\")\"\n\"IF(AND(B22<>\"\"\"\",B23<>\"\"\"\",B25<>\"\"\"\",B24<>\"\"\"\"), (B23-B22)/(B25-B24), \"\"\"\")\"\n\"IF(SUM(F27:H27)>0, (SUM(F33:H33))/(SUM(F27:H27)), \"\"\"\")\"\n\"IF(OR(B41=0,B41=1,B41=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"IF(D16<>\"\"\"\", IF(D16>=15%,3,IF(D16>=10%,2,IF(D16>=5%,1,0))), \"\"\"\")\"\n\"IF(D29<>\"\"\"\", IF(D29>0,3,IF(D29>(-1),2,IF(D29>=(-3),1,0))), \"\"\"\")\"\n\"IF(D19<>\"\"\"\", IF(D19<0,3,IF(D19<4%,2,IF(D19<=6%,1,0))), \"\"\"\")\"\n\"IF(AND(B31<>\"\"\"\",D31<>\"\"\"\"), IF(B31=\"\"No Debt!\"\", 3, IF(D31>0, 2, IF(AND(D31=\"\"Initiated Debt\"\", B31>=1.5), 2, IF(D31>(-10%), 1, IF(AND(D31=\"\"Initiated Debt\"\", B31<1.5), 1,0))))), \"\"\"\")\"\n\"IF(D33<>\"\"\"\", IF(D33<(-10%), 3, IF(D33<(-5%), 2, IF(D33<=0,1,0))), \"\"\"\")\"\n\"IF(OR(G47=0,G47=1,G47=2,G47=3,G47=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"SUM(B41:B47)\"\n\"IF(OR(B51=0,B51=1,B51=2,B51=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"IF(AND(B29<>\"\"\"\",I29<>\"\"\"\"), IF(((B29-I29)*100)>=5, 4, IF(((B29-I29)*100)>=0, 2, 0)), \"\"\"\")\"\n\"IF(B29<>\"\"\"\", IF(B29>60%,2,IF(B29>=40%,1,0)), \"\"\"\")\"\n\"IF(B30<>\"\"\"\", IF(B30>10%,2,IF(B30>=7%,1,0)), \"\"\"\")\"\n\"IF(AND(B31<>\"\"\"\", I31<>\"\"\"\", B32<>\"\"\"\", I32<>\"\"\"\"), IF(AND(B32>0,I32>0), IF((B32/I32)>=5, 4, IF((B32/I32)>=2, 2, 0)), IF(AND(B31<>\"\"No Debt!\"\", I31<>\"\"No Debt!\"\"), IF((B31/I31)>=1.25, 4, IF(B31>=I31, 2, 0)), IF(B31=\"\"No Debt!\"\", 4, 0))), \"\"\"\")\"\n\"IF(B31<>\"\"\"\", IF(B31=\"\"No Debt!\"\", 2, IF(B31>=1.5,2,IF(B31>=1,1,0))), \"\"\"\")\"\n\"IF(AND(B33<>\"\"\"\",I33<>\"\"\"\"), IF((B33/I33)-1<=(-0.25), 4, IF((B33/I33)-1<=0, 2, 0)), \"\"\"\")\"\n\"IF(B33<>\"\"\"\", IF(B33<1,2,IF(B33<=1.25,1,0)), \"\"\"\")\"\n\"IF(OR(G55=0,G55=2,G55=4,G55=\"\"\"\"), \"\"\"\", \"\"Invalid\"\")\"\n\"SUM(G51:G55)\"\n\"SUM(B51:B56)\"\n\"(B48+B57 +G48+G56+G58)\"\n\"IF(AND(B41<>\"\"\"\",B42<>\"\"\"\",B43<>\"\"\"\",B44<>\"\"\"\",B45<>\"\"\"\",B46<>\"\"\"\",B47<>\"\"\"\",B51<>\"\"\"\",B52<>\"\"\"\",B53<>\"\"\"\",B54<>\"\"\"\",B55<>\"\"\"\",B56<>\"\"\"\",G41<>\"\"\"\",G42<>\"\"\"\",G43<>\"\"\"\",G44<>\"\"\"\",G45<>\"\"\"\",G46<>\"\"\"\",G47<>\"\"\"\",G51<>\"\"\"\",G52<>\"\"\"\",G53<>\"\"\"\",G54<>\"\"\"\",G55<>\"\"\"\",G58<>\"\"\"\"), IF(C60>=50, \"\"TopTier!\"\", IF(C60>=40, \"\"Second Tier\"\", IF(C60>=30, \"\"Third Tier\"\", \"\"Fourth Tier\"\"))), \"\"\"\")\"\n\"+D51\"\n\"+F61+1\"\n\"SUM(F62:I62)\"\n\"SUM(E62:E74)\"\n\"+D96-1\"\n\"+F61\"\n\"+F61\"\n\"SUM(C100:C101)\"\n\"+C98-C102\"\n\"+C104/C98\"\n\"SUM(C107:C112)\"\n\"+C104-C113\"\n\"+C115-C118-C119\"\n\"+C120/C98\"\n\"+F61\"\n\"SUM(E163:E166)\"\n\"+E167-E174\"\n\"+E176\"\n\"+F176-F178\"\n\"IF(F179-F183<>0,\"\"Error\"\",\"\"\"\")\"\n\"+F187\"\n\"+F187-F190\"\n\"+F61\"\n\"+F75\"\n\"SUM(E233:E235)\"\n\"+F179\"\n\"SUM(E236:E256)+E230\"\n\"+F61\"\n\"+F120\"\n\"+F111\"\n\"+F191\"\n\"SUM(F267:F290)\"\n\"-F257\"\n\"+F296\"\n\"+F297\"\n\"+D7\"\n\"+F17+1\"\n\"SUM(F18:I18)\"\n\"SUM(E18:E30)\"\n\"+D7-1\"\n\"+'App1'!F17\"\n\"+'App1'!F17\"\n\"SUM(C11:C12)\"\n\"+C9-C13\"\n\"+C15/C9\"\n\"SUM(C18:C23)\"\n\"+C15-C24\"\n\"+C26-C29-C30\"\n\"+C31/C9\"\n\"+F5-1\"\n\"+'App1'!F17\"\n\"SUM(E9:E12)\"\n\"+E13-E20\"\n\"+E22\"\n\"+F22-F24\"\n\"SUM(F27:F28)\"\n\"IF(F25-F29<>0,\"\"Error\"\",\"\"\"\")\"\n\"+F33\"\n\"+F33-F36\"\n\"+'App1'!F17\"\n\"SUM(D7:G7)\"\n\"+'App1'!F31\"\n\"SUM(C10:C12)\"\n\"+'App 3'!F25\"\n\"SUM(C13:C33)+C7\"\n\"+'App1'!F17\"\n\"SUM(F8:I8)\"\n\"+'App 2'!F31\"\n\"+'App 2'!F22\"\n\"+'App 3'!F37\"\n\"SUM(F8:F31)\"\n\"-'App 4a'!D34\"\n\"SUM(F32:F33)\"\n\"+F37\"\n\"SUM(F34:F36)\"\n\"+F38\"\n\"IF(H3=\"\"\"\",\"\"\"\",SUM(J15:J22))\"\n\"IF(H3=\"\"\"\",\"\"\"\",SUM(K15:K22))\"\n\"IF(G30=\"\"\"\",\"\"\"\",(((IF((sd-G30)>184,0,IF((sd-G30)>1,d,ROUND((ed-G30)/30.41667,0))))*#REF!)/#REF!)*I30)\"\n\"IF(F41=\"\"\"\",\"\"\"\",(((IF((sd-F41)>184,0,IF((sd-F41)>1,d,ROUND((ed-F41)/30.41667,0))))*G41)/H41)*I41)\"\n\"IF(H56=\"\"\"\",\"\"\"\",(((IF((sd-H56)>184,0,IF((sd-H56)>1,d,ROUND((ed-H56)/30.41667,0))))*#REF!)/#REF!)*I56)\"\n\"IF(A10=\"\"\"\",\"\"\"\",B10+D10+F10+H10+J10+L10)\"\n\"IF(SUM(B10:B52)=0,\"\"\"\",SUM(B10:B52))\"\n\"IF(B54=\"\"\"\",\"\"\"\",B54+D54+F54+H54+J54+L54)\"\n\"A2\"\n\"A2+1\"\n\"C6+1\"\n\"B6\"\n\"C7+7\"\n\"C7+6\"\n\"+C10\"\n\"C10\"\n\"B10\"\n\"SUM(C12:R12)\"\n\"T12/16\"\n\"W12/16\"\n\"T12-W12\"\n\"+B12\"\n\"SUM(C10,C12:C24)\"\n\"SUM(D12:D24)\"\n\"C10+SUM(T12:T24)\"\n\"B6\"\n\"B6\"\n\"W31-T31\"\n\"B48\"\n\"SUM(C31:C66)\"\n\"SUM(C25-C67)\"\n\"T25-T67\"\n\"T69/17\"\n\"C25-C67\"\n\"SUM(C70+D69)\"\n\"E70+F69\"\n\"B6\"\n\"B1\"\n\"SUM(C11:C19)\"\n\"SUM(E11:F19)\"\n\"SUM(E11:F19)\"\n\"SUM(C11:C19)\"\n\"SUM(E11:F19)\"\n\"SUM(E11:F19)\"\n\"3000*0.13\"\n\"8*110\"\n\"2000*0.2\"\n\"SUM(C11:C19)\"\n\"SUM(E11:F19)\"\n\"SUM(E11:F19)\"\n\"Supplies!D20\"\n\"Supplies!$E$20:$F$20\"\n\"Supplies!$G$20\"\n\"Salaries!D20\"\n\"Salaries!$E$20:$F$20\"\n\"Salaries!$G$20\"\n\"Services!D20\"\n\"Services!$E$20:$F$20\"\n\"Services!$G$20\"\n\"SUM(D9:D14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"SUM(I7:I8)\"\n\"+J6-I6\"\n\"+K6/I6\"\n\"553130+(7604*2)+5821.53+2805\"\n\"I7-33100\"\n\"(841+553+575+603+483+11+21+24+32+12)*2.4+289\"\n\"I11+500\"\n\"(221+465+135+197+363+485+109+67+37+28)*2.4\"\n\"+I16\"\n\"64008*2.4+971\"\n\"SUM(I20:I23)\"\n\"I20\"\n\"7526*2.4\"\n\"+I19+I15+I10+I6\"\n\"SUM(I30:I38)\"\n\"50466+32464+34879\"\n\"51475+33113+35577\"\n\"2657+8116+6380\"\n\"2710+8278+6508\"\n\"1275\"\n\"1301\"\n\"16621\"\n\"6233\"\n\"3116\"\n\"SUM(I41:I48)\"\n\"24730+21795+18360+26944\"\n\"112851+1868\"\n\"97384+1535\"\n\"77170-293+1307\"\n\"65399+1065\"\n\"SUM(I58:I62)\"\n\"(44153*2.3636)+(4348*0.309)\"\n\"46250+32643+29784+607\"\n\"13405*2.3636+(2963*0.309)\"\n\"7022+21933+657+186\"\n\"2525*2.3636\"\n\"1499+5872\"\n\"780+1943\"\n\"SUM(I69:I78)\"\n\"I69*1.03\"\n\"778+250+117\"\n\"SUM(I86:I91)\"\n\"SUM(J86:J91)+1\"\n\"316*2.4\"\n\"(73*12)*0.85*1.03\"\n\"37*2.4\"\n\"(73*12)*0.1*1.03\"\n\"19*2.4\"\n\"(73*12)*0.05*1.03\"\n\"13770-490\"\n\"13468*0.85\"\n\"1295+12000\"\n\"13468*0.1\"\n\"13468*0.05\"\n\"7571*0.85\"\n\"7571*0.15\"\n\"2919-1943\"\n\"I98*1.05\"\n\"71+128\"\n\"3724+858\"\n\"I101*1.05-(35*12*0.6)\"\n\"29.6+23.4\"\n\"261+1133\"\n\"I105*1.05-(35*12*0.4)\"\n\"3427+42\"\n\"I111*1.05-((275+90)*12/7)\"\n\"1142+14\"\n\"I116*1.03-(675*12*0.6)-2946\"\n\"I117*1.03-(675*12*0.4)+2946\"\n\"1500+1215\"\n\"SUM(I140:I155)\"\n\"(52.97+27.12+27.12+285+356.22+189.52+27.52+42.15)*2.4+70.44\"\n\"(24.38+3.18+3.18+45.69+7.71+4.19)*2.4+77.3+107.45\"\n\"(1.6+1.6+12.37+1.47+2.48)*2.4\"\n\"340+90+43\"\n\"121.42+17\"\n\"350+72.92+550\"\n\"135*2.4\"\n\"10+98+52\"\n\"I29+I40+I50+I57+I64+I68+I79+I85+I93+I97+I110+I115+I127+I132+I139\"\n\"+I26-I158\"\n\"4711\"\n\"((J29+J40+J50)*0.0125)*0.75\"\n\"1570\"\n\"((J29+J40+J50)*0.0125)*0.25\"\n\"I160-I162\"\n\"SUM('1003:1856'!D6)\"\n\"'1003'!D25\"\n\"+'1003'!I25\"\n\"'1043'!D25\"\n\"+'1043'!I25\"\n\"'1166'!D25\"\n\"+'1166'!I25\"\n\"'1198'!D25\"\n\"+'1198'!I25\"\n\"'1856'!D25\"\n\"+'1856'!I25\"\n\" SUM(D9:D13)\"\n\"SUM('1003:1856'!D28)\"\n\"SUM(D17:D23)\"\n\"+D24+D14+D6\"\n\"SUM(D30:D41)\"\n\"SUM(D45:D60)\"\n\"+D26-D61\"\n\"+E6+D72-D25-D35\"\n\"G6+G25+G35-G53\"\n\"SUM(D9:D24)\"\n\"SUM(D28:D34)\"\n\"+D35+D25+D6\"\n\"SUM(D41:D52)\"\n\"+D37-D72\"\n\"+E6+D72-D25-D35\"\n\"G6+G25+G35-G53\"\n\"SUM(D9:D24)\"\n\"SUM(D28:D34)\"\n\"+D35+D25+D6\"\n\"SUM(D41:D52)\"\n\"+D37-D72\"\n\"+E6+D72-D25-D35\"\n\"G6+G25+G35-G53\"\n\"SUM(D9:D24)\"\n\"SUM(D28:D34)\"\n\"+D35+D25+D6\"\n\"SUM(D41:D52)\"\n\"+D37-D72\"\n\"+E6+D72-D25-D35\"\n\"G6+G25+G35-G53\"\n\"SUM(D9:D24)\"\n\"SUM(D28:D34)\"\n\"+D35+D25+D6\"\n\"SUM(D41:D52)\"\n\"+D37-D72\"\n\"+E6+D72-D25-D35\"\n\"G6+G25+G35-G53\"\n\"SUM(D9:D24)\"\n\"SUM(D28:D34)\"\n\"+D35+D25+D6\"\n\"SUM(D41:D52)\"\n\"+D37-D72\"\n\"SUM(J9:J21)\"\n\"SUM(J26:J28)\"\n\"SUM(J33:J43)\"\n\"SUM(L33:L44)\"\n\"SUM(J49:J55)\"\n\"SUM(J61:J67)\"\n\"SUM(J21:J33)\"\n\"SUM(J40:J48)\"\n\"SUM(J51:J51)\"\n\"J49+J52\"\n\"SUM(J7:J9)\"\n\"SUM(J11:J12)\"\n\"J10+J13\"\n\"SUM(J14:J19)\"\n\"J20-J29\"\n\"SUM(J35:J40)\"\n\"J32-J42\"\n\"J45-J47-J49\"\n\"J51-J54\"\n\"J57+J60\"\n\"L57-L60\"\n\"SUM(K9:M9)\"\n\"SUM(K9:K13)\"\n\"IF(SUM(K17:M17)=SUM(O9:O15), SUM(O9:O15),\"\"off\"\")\"\n\"IF(SUM(K21:M21)=SUM(O17:O19), SUM(O17:O19),\"\"off\"\")\"\n\"SUM(J9:J32)\"\n\"SUM(J37:J42)\"\n\"SUM(L37:L44)\"\n\"SUM(J48:J51)\"\n\"J54+J45+J34\"\n\"SUM(J56:J57)\"\n\"K21+M21+I21\"\n\"SUM(G24:G31)\"\n\"SUM(G37:G55)\"\n\"A4\"\n\"3016+6\"\n\"223660+6\"\n\"SUM(G61:G126)\"\n\"323066-1089\"\n\"341634-1087-2\"\n\"SUM(G132:G144)\"\n\"3318156+167520\"\n\"8989567+134424\"\n\"-19139450+29941372\"\n\"3119262+29941372\"\n\"SUM(G150:G155)\"\n\"G21+G33+G57+G128+G146+G157\"\n\"G159+G161\"\n\"A1+1\"\n\"G15+G21+G25\"\n\"SUM(G29:G38)\"\n\"G39-G51\"\n\"IF(G39+G51=0,0,H26+H52)\"\n\"G57+G63+G64\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"IF(H54=H65,\"\" \"\",\"\"PLEASE REVIEW YOUR ENTRIES.  TOTAL 3 MUST EQUAL TOTAL 4\"\")\"\n\"SUM(F9:F13)\"\n\"SUM(F17:F19)\"\n\"SUM(F23:F24)\"\n\"F14+F20+F25\"\n\"F26\"\n\"-G26\"\n\"SUM(G38:G41)\"\n\"SUM(B9:B12)\"\n\"222.6+0.7\"\n\"SUM(B13:B15)\"\n\"B32+B30+B28\"\n\"B16-B34\"\n\"A2\"\n\"A2+1\"\n\"C6+1\"\n\"B6\"\n\"C7+7\"\n\"C7+6\"\n\"R8+6\"\n\"+C10\"\n\"D10\"\n\"B10\"\n\"SUM(C12:S12)\"\n\"U12/17\"\n\"X12/17\"\n\"U12-X12\"\n\"+B12\"\n\"SUM(C10,C12:C24)\"\n\"SUM(D12:D24)\"\n\"C10+SUM(U12:U24)\"\n\"B6\"\n\"B6\"\n\"X31-U31\"\n\"X36/17\"\n\"U41/17\"\n\"B48\"\n\"SUM(C31:C66)\"\n\"SUM(C25-C67)\"\n\"U25-U67\"\n\"C25-C67\"\n\"SUM(C70+D69)\"\n\"E70+F69\"\n\"B6\"\n\"B1\"\n\"SUM(B11-D11)\"\n\"SUM(B11:B16)\"\n\"SUM(C23+C25)\"\n\"D18\"\n\"SUM(C28-C30)\"\n\"SUM(P17:P27)\"\n\"SUM(P34:P49)\"\n\"+P50+P29\"\n\"SUM(P58:P67)\"\n\"SUM(P73:P78)\"\n\"SUM(P69,P80)\"\n\"+P29-P69\"\n\"+P52-P82\"\n\"+P90/P52\"\n\"2543-13-3\"\n\"SUM(F10:F16)+1\"\n\"SUM(H10:H16)\"\n\"SUM(F24:F28)\"\n\"SUM(F33:F35)\"\n\"SUM(F29+F36)\"\n\"SUM(F42:F46)\"\n\"+F38+F48\"\n\"IF(ISERROR((D4-C4)/C4*100),\"\"\"\",(D4-C4)/C4*100)\"\n\"E16/M16\"\n\"G16/M16\"\n\"I16/M16\"\n\"K16/M16\"\n\"SUM(B4:B21)\"\n\"SUM(F16:F21,E4:F15)\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!C6\"\n\"InterimStatusReport!F6\"\n\"InterimStatusReport!F6\"\n\"SUM(I17+I18)\"\n\"SUM(I17+I18)\"\n\"SUM(H33+H34+H35+H36)\"\n\"SUM(H33+H34+H35+H36)\"\n\"SUM(H39+H40+H41)\"\n\"SUM(H39+H40+H41)\"\n\"SUM(J21:K47)\"\n\"SUM(J21:K47)\"\n\"+L19-L48\"\n\"+L19-L48\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!C6\"\n\"InterimStatusReport!F6\"\n\"InterimStatusReport!F6\"\n\"SUM(I18+I19)\"\n\"SUM(I18+I19)\"\n\"SUM(H34+H35+H36+H37)\"\n\"SUM(H34+H35+H36+H37)\"\n\"SUM(H40+H41+H42)\"\n\"SUM(H40+H41+H42)\"\n\"SUM(J22:K43)\"\n\"SUM(J22:K43)\"\n\"+L20-L44\"\n\"+L20-L44\"\n\"SUM(J48:K56)\"\n\"SUM(J48:K56)\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!A6\"\n\"InterimStatusReport!C6\"\n\"InterimStatusReport!F6\"\n\"InterimStatusReport!F6\"\n\"+G17+E17+C17\"\n\"+C18+C17\"\n\"SUM(C22:C32)\"\n\"+C19-C33\"\n\"IF(F8>0,(F9/F8),0)\"\n\"F11-F12-F13-F14\"\n\"IF(F9>0,(F20/F9),0)\"\n\"SUM(F16:F18)\"\n\"SUM(F20:F23)\"\n\"SUM(I11:I26)\"\n\"F25-F26-F27\"\n\"SUM(C40:C47)\"\n\"SUM(I34:I48)\"\n\"IF(D40+E40+F40<>0,(D40/(D40+E40+F40)),0)\"\n\"IF(C40>0,E40/C40,0)\"\n\"IF(C40>0,F40/C40,0)\"\n\"IF(I58>I60,I58,I60)\"\n\"I62*0.15\"\n\"I28-I49\"\n\"IF(I63>3000,I63,3000)\"\n\"I65-I67\"\n\"IF(I62>0,I65/I62,0)\"\n\"G9+G10\"\n\"G5+G8+G7\"\n\"F6+F7+F8\"\n\"SUM(G6,G8,G7)\"\n\"SUM(D19:D29)\"\n\"SUM(D21:D29)\"\n\"SUM(D34:D36)\"\n\"SUM(E41:E42)\"\n\"(C11/C$21)*100\"\n\"SUM(B11:B20)\"\n\"SUM(H11:H19)\"\n\"SUM(B11,B13)\"\n\"+B12\"\n\"B14+B15\"\n\"SUM(D14,D15)\"\n\"B16+B17\"\n\"SUM(D16:D17)\"\n\"SUM(B18,B19)\"\n\"SUM(B23:B27)\"\n\"SUM(B11,B12,B14,B16,B18)\"\n\"SUM(B13,B15,B17,B19)\"\n\"H13+H15+H17+H19\"\n\"SUM(B31,B32)\"\n\"B39-B37\"\n\"(C37/C39)*100\"\n\"B34\"\n\"'[5]Page 1'!$D$12+'[5]Page 1'!$D$15\"\n\"'[5]Page 1'!$F$12+'[5]Page 1'!$F$15\"\n\"'[5]Page 1'!$D$18\"\n\"'[5]Page 1'!$F$18\"\n\"SUM(C120:C122)\"\n\"'[5]Page 1'!$D$26\"\n\"'[5]Page 1'!$F$26\"\n\"'[5]Page 1'!$D$30\"\n\"'[5]Page 1'!$F$30\"\n\"'[5]Page 1'!$D$35\"\n\"'[5]Page 1'!$F$35\"\n\"'[4]Page 2'!$F$13\"\n\"'[5]Page 2'!$H$10\"\n\"'[4]Page 2'!$D$17\"\n\"'[5]Page 2'!$H$16\"\n\"'[5]Page 2'!$D$17\"\n\"'[5]Page 2'!$H$17\"\n\"'[4]Page 2'!$D$20\"\n\"SUM(B151:B153)\"\n\"'[5]Page 2'!$H$18\"\n\"'[4]Page 2'!$F$25\"\n\"'[5]Page 2'!$F$22\"\n\"'[5]Page 2'!$H$22\"\n\"SUM(C153:C155)\"\n\"C148+C156\"\n\"'[5]Page 2'!$F$30\"\n\"'[5]Page 2'!$H$30\"\n\"'[5]Page 2'!$F$32\"\n\"'[5]Page 2'!$H$32\"\n\"SUM(C158:C162)\"\n\"'[5]Page 2'!$F$40\"\n\"'[5]Page 2'!$H$40\"\n\"'[5]Page 2'!$F$41\"\n\"'[5]Page 2'!$H$41\"\n\"'[5]Page 2'!$F$42\"\n\"'[5]Page 2'!$H$42\"\n\"'[5]Page 2'!$F$43\"\n\"'[5]Page 2'!$H$43\"\n\"'[4]Page 3'!$D$9\"\n\"'[5]Page 3'!$F$9\"\n\"'[4]Page 3'!$D$11\"\n\"'[5]Page 3'!$F$11\"\n\"'[4]Page 3'!$D$13\"\n\"'[5]Page 3'!$F$13\"\n\"'[4]Page 3'!$D$15\"\n\"'[5]Page 3'!$F$15\"\n\"'[4]Page 3'!$D$19\"\n\"'[5]Page 3'!$F$19\"\n\"SUM(C180:C185)\"\n\"[6]TAC03!$D$21\"\n\"SUM(C186:C189)\"\n\"'[5]Page 4'!$G$10\"\n\"'[5]Page 4'!$I$10\"\n\"'[5]Page 4'!$E$15\"\n\"'[5]Page 4'!$I$15\"\n\"'[5]Page 4'!$E$22\"\n\"'[5]Page 4'!$I$22\"\n\"'[5]Page 4'!$E$23\"\n\"'[5]Page 4'!$E$38\"\n\"'[5]Page 4'!$G$27\"\n\"'[5]Page 4'!$I$27\"\n\"'[5]Page 4'!$I$40+'[5]Page 4'!$I$39\"\n\"SUM(C200:C207)\"\n\"SUM(B223:I223)\"\n\"SUM(B223:B232)\"\n\"'[5]Page 14'!$D$47\"\n\"'[5]Page 14'!$F$47\"\n\"'[5]Page 14'!$D$49\"\n\"'[5]Page 14'!$F$49\"\n\"C254/C255\"\n\"'[5]Page 15'!$B$16\"\n\"'[5]Page 15'!$D$16\"\n\"'[5]Page 15'!$B$17\"\n\"'[5]Page 15'!$D$17\"\n\"B274/B273\"\n\"'[5]Page 14'!$B$11\"\n\"'[5]Page 14'!$D$11\"\n\"'[5]Page 14'!$B$12\"\n\"'[5]Page 14'!$D$12\"\n\"'[5]Page 14'!$B$13\"\n\"'[5]Page 14'!$D$13\"\n\"'[5]Page 14'!$B$14\"\n\"'[5]Page 14'!$D$14\"\n\"'[5]Page 14'!$B$15\"\n\"'[5]Page 14'!$D$15\"\n\"'[5]Page 14'!$B$26\"\n\"'[5]Page 14'!$D$26\"\n\"'[5]Page 14'!$B$27\"\n\"'[5]Page 14'!$D$27\"\n\"'[5]Page 14'!$B$28\"\n\"'[5]Page 14'!$D$28\"\n\"'[5]Page 14'!$B$29\"\n\"'[5]Page 14'!$D$29\"\n\"'[5]Page 14'!$B$30\"\n\"'[5]Page 14'!$D$30\"\n\"'[5]Page 14'!$B$31\"\n\"'[5]Page 14'!$D$31\"\n\"'[5]Page 14'!$B$32\"\n\"'[5]Page 14'!$D$32\"\n\"'[5]Page 14'!$B$33\"\n\"'[5]Page 14'!$D$33\"\n\"SUM(C296:C304)\"\n\"[3]TAC20!$D$12\"\n\"[3]TAC20!$E$12\"\n\"[3]TAC20!$G$12\"\n\"'[5]Page 22'!$J$15\"\n\"'[5]Page 22'!$L$15\"\n\"[3]TAC20!$D$13\"\n\"[3]TAC20!$E$13\"\n\"[3]TAC20!$G$13\"\n\"'[5]Page 22'!$J$16\"\n\"'[5]Page 22'!$L$16\"\n\"[3]TAC20!$F$15\"\n\"[3]TAC20!$G$15\"\n\"'[4]Page 25'!$J$17\"\n\"[3]TAC20!$D$16\"\n\"[3]TAC20!$E$16\"\n\"[3]TAC20!$F$16\"\n\"[3]TAC20!$G$16\"\n\"'[4]Page 25'!$J$18\"\n\"[3]TAC20!$D$17\"\n\"[3]TAC20!$E$17\"\n\"'[4]Page 25'!$J$20\"\n\"[3]TAC20!$D$19\"\n\"[3]TAC20!$E$19\"\n\"[3]TAC20!$F$19\"\n\"'[4]Page 25'!$J$22\"\n\"'[5]Page 22'!$L$18\"\n\"[3]TAC20!$D$20\"\n\"[3]TAC20!$E$20\"\n\"[3]TAC20!$F$20\"\n\"[3]TAC20!$G$20\"\n\"'[4]Page 25'!$J$24\"\n\"'[5]Page 22'!$L$19\"\n\"[3]TAC20!$D$21\"\n\"[3]TAC20!$E$21\"\n\"[3]TAC20!$F$21\"\n\"[3]TAC20!$G$21\"\n\"'[4]Page 25'!$J$25\"\n\"'[5]Page 22'!$L$20\"\n\"[3]TAC20!$D$26\"\n\"[3]TAC20!$E$26\"\n\"[3]TAC20!$F$26\"\n\"[3]TAC20!$G$26\"\n\"'[5]Page 22'!$J$24\"\n\"'[5]Page 22'!$L$24\"\n\"[3]TAC20!$D$27\"\n\"[3]TAC20!$E$27\"\n\"[3]TAC20!$F$27\"\n\"[3]TAC20!$G$27\"\n\"'[5]Page 22'!$J$25\"\n\"'[5]Page 22'!$L$25\"\n\"SUM(D17:D18)\"\n\"+SUM(D12:D14)+D19+SUM(D21:D22)\"\n\"+D40+D38+D30+D29+D28\"\n\"+D58+D50+D41\"\n\"+D67/D63/D65\"\n\"+SUM('Qtr Summary'!F12:G12)\"\n\"+SUM('Qtr Summary'!K12:L12)\"\n\"+SUM('Qtr Summary'!P12:Q12)\"\n\"+SUM('Qtr Summary'!I12:L12)\"\n\"+SUM('Qtr Summary'!N12:Q12)\"\n\"+SUM('Qtr Summary'!N18:Q18)+0.1\"\n\"+SUM('Qtr Summary'!N19:Q19)-0.1\"\n\"+D18/D16\"\n\"+D19/D16\"\n\"+D20/D16\"\n\"SUM(D25:D27)-0.0005\"\n\"SUM(E25:E27)+0.0005\"\n\"SUM(H25:H27)+0.001\"\n\"SUM(I25:I27)\"\n\"+SUM('Qtr Summary'!I39:L39)+0.1\"\n\"+SUM('Qtr Summary'!K43:L43)-0.05\"\n\"+I39/I37-0.001\"\n\"+'Qtr Summary'!Q29\"\n\"+'Qtr Summary'!P29\"\n\"+'Qtr Summary'!O29\"\n\"+'Qtr Summary'!N29\"\n\"+'Qtr Summary'!L29\"\n\"+'Qtr Summary'!K29\"\n\"+'Qtr Summary'!J29\"\n\"+'Qtr Summary'!I29\"\n\"+'Qtr Summary'!G29\"\n\"+'Qtr Summary'!F29\"\n\"+'Qtr Summary'!E29\"\n\"+'Qtr Summary'!D29\"\n\"+B117\"\n\"+B117\"\n\"+'Qtr Summary'!Q50\"\n\"+'Qtr Summary'!P50\"\n\"+'Qtr Summary'!O50\"\n\"+'Qtr Summary'!N50\"\n\"+'Qtr Summary'!L50\"\n\"+'Qtr Summary'!K50\"\n\"+'Qtr Summary'!J50\"\n\"+'Qtr Summary'!I50\"\n\"+'Qtr Summary'!G50\"\n\"+'Qtr Summary'!F50\"\n\"+'Qtr Summary'!E50\"\n\"+'Qtr Summary'!D50\"\n\"SUM(D15:D18)\"\n\"SUM(D19:D20)\"\n\"+SUM('Qtr Annuity'!F15:G15)\"\n\"+SUM('Qtr Annuity'!K15:L15)\"\n\"+SUM('Qtr Annuity'!P15:Q15)\"\n\"+SUM('Qtr Annuity'!I15:L15)\"\n\"+SUM('Qtr Annuity'!N15:Q15)\"\n\"+SUM('Qtr Summary'!D12:G12)\"\n\"+SUM('Qtr Summary'!I12:L12)\"\n\"+SUM('Qtr Summary'!I12:L12)\"\n\"+SUM('Qtr Summary'!N12:Q12)\"\n\"+SUM('Qtr Summary'!N19:Q19)-0.1\"\n\"+D18/D16\"\n\"+D19/D16\"\n\"+E19/E16+0.0001\"\n\"+D20/D16\"\n\"SUM(D25:D27)\"\n\"SUM(H25:H27)+0.001\"\n\"+SUM('Qtr Summary'!I39:L39)+0.1\"\n\"+SUM('Qtr Summary'!I39:L39)+0.1\"\n\"+SUM('Qtr Summary'!D43:G43)+0.1\"\n\"+I39/I37-0.001\"\n\"231.985+61.97\"\n\"375.834+107.388\"\n\"144.615+21.393\"\n\"154.786+26.805\"\n\"12.354+38.928\"\n\"+D14-D16-D17-D18\"\n\"+F14-F16-F17-F18+0.1\"\n\"ROUND(+D16/D14,3)\"\n\"ROUND(+F16/F14,3)-0.001\"\n\"ROUND(+D17/D14,3)\"\n\"ROUND(+D18/D14,3)\"\n\"+D23+D24+D25\"\n\"175.047+50.135\"\n\"396.473+71.096\"\n\"116.2+18.9\"\n\"124.339+25.06\"\n\"-14.568+47.059\"\n\"ROUND(+E35/E33,3)+0.0005\"\n\"ROUND(+D36/D33,3)-0.0007\"\n\"758.738-17\"\n\"858.66\"\n\"2252.8-17\"\n\"11.336+29.7\"\n\"1512.3+29.7\"\n\"255.095+51.85\"\n\"321.613+93.192\"\n\"55.068+9.037\"\n\"+'Qtr Summary'!L29\"\n\"+'Qtr Summary'!K29\"\n\"+'Qtr Summary'!J29\"\n\"+'Qtr Summary'!I29\"\n\"+'Qtr Summary'!G29\"\n\"+'Qtr Summary'!F29\"\n\"+'Qtr Summary'!E29\"\n\"+'Qtr Summary'!D29\"\n\"+B122\"\n\"+B122\"\n\"+'Qtr Summary'!L50\"\n\"+'Qtr Summary'!K50\"\n\"+'Qtr Summary'!J50\"\n\"+'Qtr Summary'!I50\"\n\"+'Qtr Summary'!G50\"\n\"+'Qtr Summary'!F50\"\n\"+'Qtr Summary'!E50\"\n\"+'Qtr Summary'!D50\"\n\"IF('Cover Sheet'!$D$7=\"\"\"\",\"\"\"\",'Cover Sheet'!$D$7)\"\n\"SUM(E16:G16)\"\n\"SUM(E16:E18)\"\n\"E19+E20\"\n\"SUM(E23:E35)\"\n\"E21+E36\"\n\"SUM(H42:H48)\"\n\"IF('Cover Sheet'!$D$7=\"\"\"\",\"\"\"\",'Cover Sheet'!$D$7)\"\n\"SUM(F11:F25)\"\n\"IF('Cover Sheet'!$D$7=\"\"\"\",\"\"\"\",'Cover Sheet'!$D$7)\"\n\"SUM(D6:D9)\"\n\"SUM(D8:ER37)\"\n\"IF('Cover Sheet'!$D$7=\"\"\"\",\"\"\"\",'Cover Sheet'!$D$7)\"\n\"SUM(G7:G12)\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(K12>0,(K10)/K12,\"\"N/A\"\")\"\n\"IF(O12>0,(O10)/O12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K12), ISNUMBER(K14)),K14-K12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O12), ISNUMBER(O14)),O14-O12,\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(K16),IF(ISNUMBER(K17),K17,K16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(O16),IF(ISNUMBER(O17),O17,O16),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(K14>0,IF(ISNUMBER(K19),K19/K14,IF(ISNUMBER(K18),K18/K14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(O14>0,IF(ISNUMBER(O19),O19/O14,IF(ISNUMBER(O18),O18/O14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K14),ISNUMBER(K15)),(K15/K14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O14),ISNUMBER(O15)),(O15/O14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K13),ISNUMBER(K22)),K22/K13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O13),ISNUMBER(O22)),O22/O13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K29),ISNUMBER(K31)),(K29*1000)/K31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O29),ISNUMBER(O31)),(O29*1000)/O31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K25),ISNUMBER(K31)),(K25)/K31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O25),ISNUMBER(O31)),(O25)/O31,\"\"N/A\"\")\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(G12>0,(G10)/G12,\"\"N/A\"\")\"\n\"IF(K12>0,(K10)/K12,\"\"N/A\"\")\"\n\"IF(O12>0,(O10)/O12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G12), ISNUMBER(G14)),G14-G12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K12), ISNUMBER(K14)),K14-K12,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O12), ISNUMBER(O14)),O14-O12,\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(G16),IF(ISNUMBER(G17),G17,G16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(K16),IF(ISNUMBER(K17),K17,K16),\"\"N/A\"\")\"\n\"IF(ISNUMBER(O16),IF(ISNUMBER(O17),O17,O16),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(G14>0,IF(ISNUMBER(G19),G19/G14,IF(ISNUMBER(G18),G18/G14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(K14>0,IF(ISNUMBER(K19),K19/K14,IF(ISNUMBER(K18),K18/K14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(O14>0,IF(ISNUMBER(O19),O19/O14,IF(ISNUMBER(O18),O18/O14,\"\"N/A\"\")),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G14),ISNUMBER(G15)),(G15/G14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K14),ISNUMBER(K15)),(K15/K14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O14),ISNUMBER(O15)),(O15/O14),\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G13),ISNUMBER(G22)),G22/G13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K13),ISNUMBER(K22)),K22/K13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O13),ISNUMBER(O22)),O22/O13,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G29),ISNUMBER(G31)),(G29*1000)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K29),ISNUMBER(K31)),(K29*1000)/K31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O29),ISNUMBER(O31)),(O29*1000)/O31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(G25),ISNUMBER(G31)),(G25)/G31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(K25),ISNUMBER(K31)),(K25)/K31,\"\"N/A\"\")\"\n\"IF(AND(ISNUMBER(O25),ISNUMBER(O31)),(O25)/O31,\"\"N/A\"\")\"\n\"D9+D10\"\n\"D11+D12+D13\"\n\"SUM(D17:D19)\"\n\"D14-D23\"\n\"D24+D26-D27\"\n\"D28-D29+D30\"\n\"'Income Statement'!A1\"\n\"D12+D13\"\n\"SUM(D9:D11)+SUM(D14:D16)\"\n\"SUM(D19:D22)\"\n\"D27+D26\"\n\"F27+F26\"\n\"SUM(D25:D29)\"\n\"D23+D30\"\n\"D15\"\n\"F15\"\n\"D17\"\n\"F17\"\n\"D23\"\n\"F23\"\n\"D30\"\n\"F30\"\n\"(D34+D15)/2\"\n\"(D35+D17)/2\"\n\"(D36+D23)/2\"\n\"(D37+D30)/2\"\n\"('Portfolio Quality'!D17+'Portfolio Quality'!D18)/2\"\n\"'Income Statement'!A1\"\n\"D9\"\n\"F9\"\n\"'Balance Sheet'!D12\"\n\"(D8+D9)/2\"\n\"D9/D12\"\n\"SUM(D54:D56)\"\n\"D38/D9\"\n\"D40/D9\"\n\"D12\"\n\"SUM(D44:D48)\"\n\"D9\"\n\"D52/D$57\"\n\"SUM(D60:D64)\"\n\"'Income Statement'!A1\"\n\"'Income Statement'!A1\"\n\"'Income Statement'!D14/'Income Statement'!D23\"\n\"'Income Statement'!D41/'Income Statement'!D50\"\n\"('Balance Sheet'!D43-'Balance Sheet'!D40)*'Macroeconomic Indicators'!D10\"\n\"(('Balance Sheet'!D19+'Balance Sheet'!D20+'Balance Sheet'!D21)*(IF('Macroeconomic Indicators'!D9>'Macroeconomic Indicators'!D10,'Macroeconomic Indicators'!D9,'Macroeconomic Indicators'!D10)))-('Income Statement'!D17+'Income Statement'!D18)\"\n\"(('Balance Sheet'!H19+'Balance Sheet'!H20+'Balance Sheet'!H21)*(IF('Macroeconomic Indicators'!H9>'Macroeconomic Indicators'!H10,'Macroeconomic Indicators'!H9,'Macroeconomic Indicators'!H10)))-('Income Statement'!D44+'Income Statement'!D45)\"\n\"'Income Statement'!D23+'Financial Performance Ratios'!D9+'Financial Performance Ratios'!D10\"\n\"'Income Statement'!D50+'Financial Performance Ratios'!H9+'Financial Performance Ratios'!H10\"\n\"'Income Statement'!D14-'Financial Performance Ratios'!D11\"\n\"'Income Statement'!D41-'Financial Performance Ratios'!H11\"\n\"'Income Statement'!D14/'Financial Performance Ratios'!D11\"\n\"'Income Statement'!D41/'Financial Performance Ratios'!H11\"\n\"'Income Statement'!D24/'Balance Sheet'!D43\"\n\"'Income Statement'!D51/'Balance Sheet'!H43\"\n\"'Income Statement'!D24/'Balance Sheet'!D41\"\n\"'Income Statement'!D51/'Balance Sheet'!H41\"\n\"D12/'Balance Sheet'!D43\"\n\"D12/'Balance Sheet'!D41\"\n\"'Income Statement'!D11/'Portfolio Quality'!D10\"\n\"'Income Statement'!D38/'Portfolio Quality'!H10\"\n\"('Income Statement'!D17+'Income Statement'!D18)/'Portfolio Quality'!D10\"\n\"('Income Statement'!D44+'Income Statement'!D45)/'Portfolio Quality'!H10\"\n\"('Income Statement'!D17+'Income Statement'!D18)/'Balance Sheet'!D42\"\n\"('Income Statement'!D44+'Income Statement'!D45)/'Balance Sheet'!H42\"\n\"'Balance Sheet'!D14/'Balance Sheet'!D17\"\n\"('Balance Sheet'!D10+'Balance Sheet'!D11)/'Balance Sheet'!D17\"\n\"'Balance Sheet'!D15/'Balance Sheet'!D17\"\n\"('Balance Sheet'!D26+'Balance Sheet'!D27)/'Balance Sheet'!D17\"\n\"'Balance Sheet'!D23/'Balance Sheet'!D30\"\n\"'Balance Sheet'!D30/'Balance Sheet'!D17\"\n\"('Balance Sheet'!D10+'Balance Sheet'!D11+'Balance Sheet'!D14)/'Balance Sheet'!D17\"\n\"'Income Statement'!D23/'Portfolio Quality'!D10\"\n\"'Income Statement'!D50/'Portfolio Quality'!H10\"\n\"'Portfolio Quality'!D33/'Portfolio Quality'!D32\"\n\"'Portfolio Quality'!D18/'Portfolio Quality'!D33\"\n\"'Portfolio Quality'!D18/'Portfolio Quality'!D32\"\n\"'Income Statement'!D23/'Balance Sheet'!D44\"\n\"'Income Statement'!D50/'Balance Sheet'!H44\"\n\"'Income Statement'!D23/'Portfolio Quality'!D13\"\n\"'Income Statement'!D50/'Portfolio Quality'!H13\"\n\"'Portfolio Quality'!D18/('Portfolio Quality'!D17+'Portfolio Quality'!D15)\"\n\"'Portfolio Quality'!D13/'Portfolio Quality'!D14\"\n\"('Balance Sheet'!D30-'Balance Sheet'!D37)/'Balance Sheet'!D37\"\n\"('Balance Sheet'!D17-'Balance Sheet'!D35)/'Balance Sheet'!D35\"\n\"('Balance Sheet'!D12-'Portfolio Quality'!D8)/'Portfolio Quality'!D8\"\n\"('Portfolio Quality'!D12-'Portfolio Quality'!D11)/'Portfolio Quality'!D11\"\n\"('Portfolio Quality'!D18-'Portfolio Quality'!D17)/'Portfolio Quality'!D17\"\n\"('Portfolio Quality'!D21-'Portfolio Quality'!D20)/'Portfolio Quality'!D20\"\n\"('Portfolio Quality'!D24-'Portfolio Quality'!D23)/'Portfolio Quality'!D23\"\n\"SUM(F2:F431)\"\n\"SUM(E13:E18)\"\n\"SUM(E29:E41)\"\n\"+E19+E27+E42+E43\"\n\"SUM(E60:E70)\"\n\"SUM(E73:E79)\"\n\"+E71+E80\"\n\"+E44\"\n\"+E81\"\n\"+E83-E84\"\n\"+I49\"\n\"+E85+E87+E88\"\n\"+I85\"\n\"+E92\"\n\"+E92\"\n\"+E90+E89+E91\"\n\"AVERAGE(B20:M20)\"\n\"(C35-C34)/C34\"\n\"AVERAGE(D35:D46)\"\n\"1880000-B9\"\n\"+FORM!G20\"\n\"+FORM!E51\"\n\"+FORM!F51\"\n\"+FORM!G51\"\n\"+C7-C8\"\n\"+C9\"\n\"+C9\"\n\"+C10\"\n\"E11\"\n\"E11\"\n\"+C12\"\n\"C16\"\n\"C16\"\n\"188*0.33\"\n\"+E9+E11+E12+E15\"\n\"+F10+F11+F12-F16+F15\"\n\"+G9+G11-G17+G18+G12+G15-G19-G16\"\n\"+(C22+C23+C24+C25)/2\"\n\"+(C27+C28)/2\"\n\"+C33/2\"\n\"+E26-E32-E45+E48\"\n\"+F29-F32-F37+F42-F45+F48\"\n\"+G26-G32-G34-G45+G48\"\n\"E20/E49\"\n\"H9+H11+H13+H21+H23+H25\"\n\"G14+G15+G18+G19-G16-G17\"\n\"H29+H39+H41+H43+H47+H49+H51\"\n\"G30+G31+G34+G36+G37-G32-G33-G35\"\n\"G44+G45\"\n\"2249682+381582061+231400527\"\n\"6983514+677142527+519313417\"\n\"692416+230708111\"\n\"1930748+517382669\"\n\"G7+G27\"\n\"SUM(G63:G77)\"\n\"SUM(G81:G91)\"\n\"G95+G99+G101+G103-G105+G107\"\n\"G96-G97\"\n\"G61+G79+G93\"\n\"NETWORKDAYS(C4,F4)\"\n\"VLOOKUP(C5,R7:T136,3,FALSE)\"\n\"F13+H13\"\n\"IF(I$39>0,I13/I$39,0)\"\n\"SUM(F13:F14)\"\n\"SUM(F17:F29)\"\n\"SUM(F32:F36)\"\n\"F15+F30+F37\"\n\"IF($I39>0,F39/$I39,0)\"\n\"Introduction!E5\"\n\"WORKDAY(C3,10,12/25)\"\n\"WORKDAY(C18,6,H14)\"\n\"WORKDAY(C18,6)\"\n\"WORKDAY(C19,3)\"\n\"WORKDAY(C25,1)\"\n\"WORKDAY(C29,2)\"\n\"WORKDAY(C30,1)\"\n\"WORKDAY(C30,1)\"\n\"WORKDAY(C33,10)\"\n\"WORKDAY(C36,2)\"\n\"WORKDAY(C39,1)\"\n\"WORKDAY(C55,1)\"\n\"WORKDAY(C70,4)\"\n\"WORKDAY(C73,6)\"\n\"WORKDAY(C73,4)\"\n\"WORKDAY(C85,3)\"\n\"WORKDAY(C87,4)\"\n\"WORKDAY(C18,-10)\"\n\"WORKDAY(C19,-6)\"\n\"WORKDAY(C25,-3)\"\n\"WORKDAY(C25,-3)\"\n\"WORKDAY(C29,-1)\"\n\"WORKDAY(C30,-2)\"\n\"WORKDAY(C32,-1)\"\n\"WORKDAY(C36,-1)\"\n\"WORKDAY(C33,10)\"\n\"WORKDAY(C39,-2)\"\n\"WORKDAY(C39,-2)\"\n\"WORKDAY(C44,-1)\"\n\"WORKDAY(C55,-1)\"\n\"WORKDAY(C68,-10)\"\n\"WORKDAY(C71,-4)\"\n\"WORKDAY(C74,-6)\"\n\"WORKDAY(C84,-1)\"\n\"WORKDAY(C85,-3)\"\n\"WORKDAY(C87,-4)\"\n\"Introduction!E11\"\n\"SUM('Mid-Atlantic'!D8+'New England'!D8+SouthEast!D8+NorthWest!D8+Midwest!D8+'San Diego'!D8+Chesapeake!D8+'Bay Area'!D8)\"\n\"SUM(D8:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D7:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D114)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D7:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D8:D27)\"\n\"15500+5650\"\n\"(500*70)+(500*6)+(75*8)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"36436.59\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"27075.44+8128.08+185.53+2945.25+877.95\"\n\"131.59+200+156.52\"\n\"1714.85+400+27.24\"\n\"SUM(D108:D114)\"\n\"SUM(D119:D124)\"\n\"119+103+119+119+137.5\"\n\"SUM(D137:D143)\"\n\"15.9+1.8\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D8:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D8:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D8:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(F61-F62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D7:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D115)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"SUM(D8:D27)\"\n\"SUM(D31:D33)\"\n\"SUM(D49:D52)\"\n\"SUM(D56:D57)\"\n\"SUM(D61-D62)\"\n\"SUM(D28+D34+D40+D46+D53+D58+D63+D69)\"\n\"SUM(D76:D84)\"\n\"SUM(D88:D98)\"\n\"SUM(D108:D113)\"\n\"SUM(D119:D124)\"\n\"SUM(D137:D143)\"\n\"SUM(D85+D99+D105+D116+D125+D134+D144+D149)\"\n\"SUM(D71-D151)\"\n\"D66\"\n\"SUM(D165+D170)\"\n\"SUM($F$71)\"\n\"SUM($F$172)\"\n\"SUM($F$151)\"\n\"926567+540+59959+30702\"\n\"SUM(B7:B15)\"\n\"1263117+50000\"\n\"15882+133594+94202+12560+227126+5030+5582+8896+138163+10608\"\n\"137623+11758\"\n\"SUM(B20:B34)\"\n\"B16\"\n\"B35\"\n\"B37-B35\"\n\"'TRR Instructions'!C13\"\n\"'TRR Instructions'!C14\"\n\"'TRR Instructions'!C15\"\n\"'TRR Instructions'!C16\"\n\"'TRR Instructions'!C17\"\n\"'TRR Instructions'!C18\"\n\"'TRR Instructions'!C19\"\n\"'TRR Instructions'!C20\"\n\"'TRR Instructions'!C21\"\n\"'TRR Instructions'!C22\"\n\"TODAY()\"\n\"SUM(E10:E13)\"\n\"SUM(E18:E19)\"\n\"E14+E20\"\n\"+E29+E33+E37\"\n\"SUM(E46:E53)\"\n\"+E44+E54\"\n\"E58/E60\"\n\"+D6\"\n\"+D6\"\n\"+G6\"\n\"G10-229.02\"\n\"H10-244.35\"\n\"[1]Final!$H$562/100\"\n\"[1]Final!$J$562/100\"\n\"G11-6.31\"\n\"+H11-6.47\"\n\"[1]Final!$H$580/100\"\n\"[1]Final!$J$580/100\"\n\"+S11-162.07\"\n\"+T11-177.39\"\n\"'[2]Segment P&L'!$G$27/100\"\n\"G12-15.63-0.1\"\n\"+H12-4.5194\"\n\"+([1]Final!H607+[1]Final!H616)/100\"\n\"+([1]Final!J616+[1]Final!J607)/100\"\n\"+S12-80.33\"\n\"+T12-78.86\"\n\"'[2]Segment P&L'!$L$27/100\"\n\"17.38+0.08\"\n\"2.96+0.82\"\n\"+S13-7.07\"\n\"+T13-5.43\"\n\"'[2]Segment P&L'!$X$27/-100\"\n\"+G14--0.34\"\n\"+H14--2.3984\"\n\"+[1]Final!H671/100\"\n\"+[1]Final!J671/100\"\n\"SUM(Q11:Q12)-Q13\"\n\"G15-128.72\"\n\"+H15-153.0692\"\n\"+[1]Final!H652/100\"\n\"+[1]Final!J652/100\"\n\"+AG11+AG12+AG13-AG14\"\n\"G16-30.92\"\n\"+H16-26.93\"\n\"+[1]Final!H98/100\"\n\"+[1]Final!J98/100\"\n\"G17-(44.64+14.04)\"\n\"+H17-55.7682-0.01\"\n\"+([1]Final!H100+[1]Final!H102)/100+0.0045\"\n\"+([1]Final!J100+[1]Final!J102)/100\"\n\"+S17-16.77\"\n\"+T17-11.9\"\n\"'[2]Segment P&L'!$G$81/100\"\n\"72.72+16.01\"\n\"67.79+11.22\"\n\"G18-0.22\"\n\"+H18-0.34\"\n\"+[1]Final!H106/100\"\n\"+[1]Final!J106/100\"\n\"+S18-4.66\"\n\"+T18-6.8\"\n\"'[2]Segment P&L'!$L$81/100\"\n\"G19-4.24\"\n\"+H19-5.18\"\n\"+[1]Final!H104/100\"\n\"+[1]Final!J104/100\"\n\"+S19-0.22\"\n\"+T19-0.34\"\n\"+G18-0.005\"\n\"+H18\"\n\"+S19-S20\"\n\"D10+D11+D12-D14-D15-D16-D17-D18-D19\"\n\"+E10+E11+E12-E14-E15-E16-E17-E18-E19-0.01\"\n\"+G10+G11+G12-G14-G15-G16-G17-G18-G19\"\n\"+S20-4.51\"\n\"+T20--4.81\"\n\"+[1]Final!H127/100-SUM('Unaudited Dec 03'!S17:S18)+S19-0.005\"\n\"+[1]Final!J127/100-SUM('Unaudited Dec 03'!T17:T18)+T19\"\n\"G21--2.9\"\n\"+H21--2.9\"\n\"+[1]Final!H116/100\"\n\"+[1]Final!J116/100\"\n\"+Q17+Q18-Q19+Q20\"\n\"SUM(D20+D21)\"\n\"+E20+E21\"\n\"G23-5.6\"\n\"+H23-5.8\"\n\"-[1]Final!H131/100\"\n\"-[1]Final!J131/100\"\n\"+S23\"\n\"'[2]Cap Empl'!$G$130/100\"\n\"+AG18+AG19+AG20-AG21+AG22\"\n\"G24--1\"\n\"+H24--1.55\"\n\"'[2]Cap Empl'!$L$130/100\"\n\"+D22-D23-D24\"\n\"('[2]Cap Empl'!$V$130-700)/100\"\n\"+(36895.87-700)/100-T23-T24\"\n\"SUM(Q23:Q25)\"\n\"+Y25-Y26\"\n\"22.123-4.994\"\n\"16.65-5.27\"\n\"+[1]Final!D161\"\n\"+[1]Final!F161\"\n\"+[1]Final!J161\"\n\"+J25/(J29/10000000)\"\n\"SUM(AG25:AG28)\"\n\"+(Y27-0.08)/(Y31/10000000)\"\n\"+Y35/Y31\"\n\"+C9/$C$35\"\n\"SUM(B12:B19)\"\n\"SUM(B25:B28)\"\n\"SUM(B9:B34)-B24-B11\"\n\"+C7/$C$13\"\n\"SUM(B7:B11)\"\n\"+C9/$C$46\"\n\"SUM(B9:B45)\"\n\"+C7/$C$13\"\n\"SUM(B7:B11)\"\n\"(+C12+C17+C22+C26+C30+C33)/C50\"\n\"+C12+C17+C22+C26+C30+C33\"\n\"+C12/$C$50\"\n\"+B10+B36\"\n\"315/321\"\n\"164/171\"\n\"479/492\"\n\"314/321\"\n\"480/492\"\n\"SUM(B13:B20)\"\n\"SUM(B25:B28)\"\n\"SUM(B7:B11)\"\n\"SUM(B15:B20)\"\n\"SUM(B33:B37)\"\n\"SUM(B7:B11)\"\n\"SUM(C11:C20)\"\n\"SUM(C22:C31)\"\n\"SUM(C36:C52)\"\n\"SUM(C58:C65)\"\n\"C66/C70\"\n\"SUM(C10:C21)\"\n\"SUM(C23:C30)\"\n\"SUM(C35:C53)\"\n\"SUM(C58:C64)\"\n\"SUM(C68:C72)\"\n\"SUM(C74,C66)\"\n\"C76/C78\"\n\"SUM(Q9:Q24)\"\n\"SUM(AK9:AK25)\"\n\"184017-57375\"\n\"SUM(E10:G10)\"\n\"SUM(K10:N10)\"\n\"E10+K10+T10\"\n\"Z10+AB10\"\n\"-50+50\"\n\"130582+597+1\"\n\"50-50\"\n\"3639\"\n\"45679+118\"\n\"205+303\"\n\"SUM(E10:E17)\"\n\"SUM(V10:V18)\"\n\"122146\"\n\"32676+1\"\n\"6317-510\"\n\"-41+510\"\n\"9930+234\"\n\"5314\"\n\"4746-1\"\n\"SUM(E23:E32)\"\n\"SUM(O23:O33)\"\n\"E19-E34\"\n\"13136-167-1\"\n\"16325+1268+7611+290+93-301+1\"\n\"4587-79\"\n\"7-1\"\n\"117-3+1\"\n\"310-6\"\n\"-6937-76-1\"\n\"1178-957\"\n\"30+20+11599-77-101-484-1547-10-57\"\n\"1-7\"\n\"SUM(E40:E43)\"\n\"SUM(I40:I44)\"\n\"E37+E45\"\n\"43540+8868\"\n\"30005+4506+3977-8868\"\n\"110146-1298+13300+1515+7998-5257\"\n\"E48+E55\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"SUM(D8:I8)\"\n\"+A8+1\"\n\"SUM(D8:D9)\"\n\"SUM(D11:D25)\"\n\"+D10+D26\"\n\"'Exhibit A - Page 2'!D32\"\n\"+D27-D28\"\n\"+A29+1\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"+'Exhibit A - Page 1'!D6\"\n\"SUM(D8:I8)\"\n\"+A8+1\"\n\"+A19+1\"\n\"SUM(D8:D31)\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"SUM(J8:J15)\"\n\"SUM(J23:J33)\"\n\"SUM(J41:J47)\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\",'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"CONCATENATE(\"\"Village of \"\", 'Cover Page'!A17,\"\", Nebraska\"\")\"\n\"SUM(B10:B13)\"\n\"SUM(B14,B20)\"\n\"SUM(B10:B13)\"\n\"SUM(B14,B20)\"\n\"SUM(B10:B13)\"\n\"SUM(B14,B20)\"\n\"'VMRF CHECKLIST'!F6\"\n\"+'VMRF CHECKLIST'!AE6\"\n\"B8+B9+B10\"\n\"B7+D7+F7\"\n\"B20+B45\"\n\"C7\"\n\"B32\"\n\"C7\"\n\"B14\"\n\"C7\"\n\"C7\"\n\"E7\"\n\"D14/D16\"\n\"IF(H15<>0,H14/H15,\"\"\"\")\"\n\"IF((B15+D15) <>0,((B15*B17)+(D15*D17))/(B15+D15),\"\"\"\")\"\n\"B18\"\n\"C7\"\n\"C7\"\n\"B20/B21\"\n\"C7\"\n\"C7\"\n\"C7\"\n\"B40\"\n\"C7\"\n\"C7\"\n\"C7\"\n\"IF(B60+D60<>0,((B62*B60)+(D62*D60))/(B60+D60),\"\"\"\")\"\n\"C7\"\n\"C7\"\n\"C7\"\n\"D68\"\n\"C7+E7+G7\"\n\"G10\"\n\"IF(I14<>0,I13/I14,\"\"\"\")\"\n\"IF((C14+E14) <>0,((C14*C16)+(E14*E16))/(C14+E14),\"\"\"\")\"\n\"C17\"\n\"IF(C2+E20<>0,((C20*C22)+(E20*E22))/(C20+E20),\"\"\"\")\"\n\"IF(C32+E32<>0,((C32*C34)+(E32*E34))/(C32+E32),\"\"\"\")\"\n\"IF(C59+E59<>0,((C61*C59)+(E61*E59))/(C59+E59),\"\"\"\")\"\n\"E67\"\n\"+K10-F10\"\n\"+E9/E13*100\"\n\"+E11/E13*100\"\n\"+Financial!A1\"\n\"(C8-B8)/C8\"\n\"SUM(B8:B10)\"\n\"SUM(B16:B22)\"\n\"+B11-B23\"\n\"+B29\"\n\"2635-631\"\n\"+B33\"\n\"+B38+B34\"\n\"C33\"\n\"SUM(C6:C13)\"\n\"8238.33\"\n\"8821.24-118.52\"\n\"SUM(C19:C25)\"\n\"C15-C27\"\n\"C4+C30\"\n\"C33\"\n\"C33-SUM(C35:C37)\"\n\"'Financial summary'!K35\"\n\"E4+E5\"\n\"ROUND(E2+E6,5)\"\n\"G12+G13\"\n\"'Financial summary'!I30\"\n\"'Financial summary'!K30\"\n\"ROUND(SUM(E10:E13),5)\"\n\"ROUND(E9+E14,5)\"\n\"SUM(C6:C54)\"\n\"SUM(D8:D54)\"\n\"H45+H44+H33\"\n\"C55\"\n\"'Stork - 2002 Receipts'!C43\"\n\"D59-D60\"\n\"SUM(C6:C42)\"\n\"D4+D5+D24+(F15-F14)-(D15-D14)\"\n\"D7+D8+(F17-D17)\"\n\"D4+D9-(D7+D8)+(F18-D18)\"\n\"D29-D30-D31\"\n\"IF('Input Information'!F19=0,\"\"Must input data\"\",(('Input Information'!D32+'Input Information'!D30-'Input Information'!D26)/'Input Information'!F19))\"\n\"IF(F4<=0,\"\"Input Benchmark\"\",IF(D4>F4, \"\"strong\"\",\"\"weak\"\"))\"\n\"IF('Input Information'!F21=0,\"\"Must input data\"\",(('Input Information'!D32-'Input Information'!D26)/'Input Information'!F21))\"\n\"IF('Input Information'!D29=0,\"\"Must input data\"\",(('Input Information'!D32+'Input Information'!D30-'Input Information'!D26)/'Input Information'!D29))\"\n\"IF('Input Information'!F16=0,\"\"Not applicable\"\",('Input Information'!F15/'Input Information'!F16))\"\n\"IF('Input Information'!F19=0,\"\"Must input data\"\",('Input Information'!F20/'Input Information'!F19))\"\n\"IF(F12<=0,\"\"Input Benchmark\"\",IF(D12<F12, \"\"strong\"\",\"\"weak\"\"))\"\n\"IF('Input Information'!F19=0,\"\"Must input data\"\",('Input Information'!D29/'Input Information'!F19))\"\n\"IF('Input Information'!D25=0,\"\"Must input data\"\",('Input Information'!D29/'Input Information'!D25))\"\n\"IF('Input Information'!D29=0,\"\"Must input data\"\",(('Input Information'!D31-'Input Information'!D6)/'Input Information'!D29))\"\n\"IF('Input Information'!D29=0,\"\"Must input data\"\",('Input Information'!D6/'Input Information'!D29))\"\n\"IF('Input Information'!D29=0,\"\"Must input data\"\",('Input Information'!D30/'Input Information'!D29))\"\n\"IF('Input Information'!D29=0,\"\"Must input data\"\",('Input Information'!D32/'Input Information'!D29))\"\n\"'Input Information'!F15\"\n\"IF(D5=0,\"\"Not Applicable\"\",(D4/D5))\"\n\"'Input Information'!F15\"\n\"D4-D5\"\n\"'Input Information'!D32\"\n\"+'Input Information'!D7\"\n\"'Input Information'!D6\"\n\"'Input Information'!D26\"\n\"D14+D15+D16-D17\"\n\"D18-D19\"\n\"+D14\"\n\"D20-D21\"\n\"IF(D38=0,\"\"Must input data\"\",(D37/(1-(1+D37)^-D38)))\"\n\"IF(D39=\"\"Must input data\"\",\"\"Must input data\"\",(D36/D39))\"\n\"'Input Information'!D29\"\n\"'Input Information'!D30+'Input Information'!D26+'Input Information'!D6\"\n\"'Input Information'!D31-'Input Information'!D6\"\n\"C5-C6-C8\"\n\"'Input Information'!F19\"\n\"'Input Information'!F21\"\n\"'Input Information'!D30\"\n\"IF(C5=0,\"\"Must input data\"\",((C10+C13)/C5))\"\n\"IF(C11=0,\"\"Must input data\"\",(C5/C11))\"\n\"C17*C18\"\n\"IF(C11=0,\"\"Must input data\"\",(C13/C11))\"\n\"IF(C12=0,\"\"Must input data\"\",(C11/C12))\"\n\"((C19-C20)*C21)\"\n\"SUM(AF8:AQ8)\"\n\"SUM(D9:D14)\"\n\"D18\"\n\"O18\"\n\"SUM(D18:D37)\"\n\"SUM(D42:D52)\"\n\"Personnel!D20\"\n\"SUM(D56:D82)\"\n\"D15+D38-D53-D83\"\n\"D85\"\n\"D87+E85\"\n\"P87+R85\"\n\"D87-D89\"\n\"D91+E85-E89\"\n\"P91+R85-R89\"\n\"P91+AD85-AD89\"\n\"D7\"\n\"SUM(D7:O7)\"\n\"O7\"\n\"SUM(D7:D14)\"\n\"D15*D17\"\n\"D15+D18\"\n\"'Cash Flows'!C2\"\n\"SUM(D9:O9)\"\n\"SUM(D9:D19)\"\n\"D23\"\n\"O24\"\n\"SUM(D23:D46)\"\n\"'Cash Flows'!C2\"\n\"'In-Kind Contributions'!P20\"\n\"'In-Kind Contributions'!AD20\"\n\"'In-Kind Contributions'!AR20\"\n\"'In-Kind Contributions'!P47\"\n\"'In-Kind Contributions'!AD47\"\n\"'In-Kind Contributions'!AR47\"\n\"SUM(C9:C10)\"\n\"'Cash Flows'!P15\"\n\"'Cash Flows'!AD15\"\n\"'Cash Flows'!AR15\"\n\"'Cash Flows'!P38\"\n\"'Cash Flows'!AD38\"\n\"'Cash Flows'!AR38\"\n\"'Cash Flows'!P53\"\n\"'Cash Flows'!AD53\"\n\"'Cash Flows'!AR53\"\n\"'Cash Flows'!P83\"\n\"'Cash Flows'!AD83\"\n\"'Cash Flows'!AR83\"\n\"C19-C24\"\n\"'Cash Flows'!P89\"\n\"'Cash Flows'!AD89\"\n\"'Cash Flows'!AR89\"\n\"C26-C28\"\n\"C30+D26-D28\"\n\"SUM(Income!B16)\"\n\"SUM(Income!B21)\"\n\"SUM(Income!B33)\"\n\"SUM(Income!B40)\"\n\"SUM(Income!B42)*0.75\"\n\"SUM(Income!C42)\"\n\"SUM(Income!B49)*0.75\"\n\"SUM(Income!C49)\"\n\"SUM(B14:B19)\"\n\"SUM(Expenses!C14)\"\n\"SUM(Expenses!C31)\"\n\"SUM(Expenses!C52)\"\n\"SUM(Expenses!C58)\"\n\"SUM(Expenses!C63)\"\n\"SUM(Expenses!C76)\"\n\"SUM(B20-B29)\"\n\"SUM(B29/500)\"\n\"SUM(B9:B14)\"\n\"SUM(B19:B20)\"\n\"SUM(B23:B32)\"\n\"SUM(B35:B39)\"\n\"SUM(B45:B48)\"\n\"SUM(B16+B21+B33+B40+B49)\"\n\"SUM(C12:C13)\"\n\"SUM(C17:C27)\"\n\"SUM(C34:C48)\"\n\"SUM(C66:C75)\"\n\"SUM(Summary!B29)\"\n\"SUM(C79/400)\"\n\"SUM(Income!B16)\"\n\"SUM(Income!B21)\"\n\"SUM(Income!B33)\"\n\"SUM(Income!B40)\"\n\"SUM(Income!B42)\"\n\"SUM(Income!B49)\"\n\"SUM(B16:B21)\"\n\"SUM(Expenses!C14)\"\n\"SUM(Expenses!C31)\"\n\"SUM(Expenses!C53)\"\n\"SUM(Expenses!C59)\"\n\"SUM(Expenses!C64)\"\n\"SUM(Expenses!C77)\"\n\"SUM(B22-B31)\"\n\"SUM(B31/230)\"\n\"40*90\"\n\"10*90\"\n\"15*45\"\n\"125*45\"\n\"10*20\"\n\"15*130\"\n\"SUM(B9:B14)\"\n\"SUM(B19:B20)\"\n\"SUM(B23:B32)\"\n\"SUM(B35:B39)\"\n\"100*20\"\n\"SUM(B45:B48)\"\n\"SUM(B16+B21+B33+B40+B49)\"\n\"SUM(C12:C13)\"\n\"SUM(C17:C27)\"\n\"165*10.31\"\n\"165*3\"\n\"165*17.5\"\n\"165*5\"\n\"220*26.25\"\n\"220*10.31\"\n\"220*3\"\n\"220*17.5\"\n\"50*5\"\n\"55*10.31\"\n\"SUM(C34:C49)\"\n\"250*7\"\n\"3*400\"\n\"SUM(C67:C76)\"\n\"SUM(Summary!B31)\"\n\"SUM(C80/230)\"\n\"ROUND((3426058/3163101-1)*100,6)\"\n\"ROUND((3715252/3426058-1)*100,6)\"\n\"ROUND((3854784/3715252-1)*100,6)\"\n\"ROUND((4507180/3854784-1)*100,6)\"\n\"ROUND((4492072/4507180-1)*100,6)\"\n\"ROUND((5025860/4492072-1)*100,6)\"\n\"ROUND((5491589/5025860-1)*100,6)\"\n\"ROUND((6552832/5491589-1)*100,6)\"\n\"ROUND((5731003/5123636-1)*100,6)\"\n\"ROUND((5546135/5219315-1)*100,6)\"\n\"+M30\"\n\"ROUND((5518237/5244735-1)*100,6)\"\n\"ROUND((5543200/5219819-1)*100,6)\"\n\"ROUND((5610040/5152767-1)*100,6)\"\n\"ROUND((5794903/5293835-1)*100,6)\"\n\"ROUND((5835679/5159651-1)*100,6)\"\n\"ROUND((5990599/5240644-1)*100,6)\"\n\"ROUND((6080781/5163009-1)*100,6)\"\n\"ROUND((6151848/5182333-1)*100,6)\"\n\"ROUND((6223615/5259086-1)*100,6)\"\n\"ROUND((6762005/5731003-1)*100,6)\"\n\"(1172242+366390+10328675)/10\"\n\"(1396040+400458+11465007)/10\"\n\"(1540830+368013+12067502)/10\"\n\"(1726555+368757+12490088)/10\"\n\"(2063150+384455+12861492)/10\"\n\"(2134732+460515+12350485)/10\"\n\"(1934899+476744+12196001)/10\"\n\"(1944921+436102+12770953)/10\"\n\"(2023635+476843+12068682)/10\"\n\"(2025319+462763+12026554)/10\"\n\"(2020570+448776+11995908)/10\"\n\"(2032913+445027+12027653)/10\"\n\"(1997169+431780+12085368)/10\"\n\"(1993851+447692+12272109)/10\"\n\"(1964293+452003+12206288)/10\"\n\"(1910370+449863+12286129)/10\"\n\"(1951913+449989+12345969)/10\"\n\"(1894580+438547+12378067)/10\"\n\"(1923493+432098+12491627)/10\"\n\"(2056868+445112+12826097)/10\"\n\"+C9/$C$15\"\n\"9432730+111410104\"\n\"141577402+1\"\n\"SUM(B9:B14)\"\n\"+C9/$C$19\"\n\"SUM(B9:B18)\"\n\"+C9/$C$15\"\n\"SUM(B9:B14)\"\n\"+B9/$B$25\"\n\"3684419+1\"\n\"SUM(B9:B23)\"\n\"+B11/24\"\n\"+C11/H11\"\n\"+E11/600\"\n\"+F11/H11\"\n\"+C11+F11\"\n\"+H11/$H$27\"\n\"+H11/$H$27\"\n\"SUM(B11:B26)\"\n\"SUM(E11:E26)+1\"\n\"+C10/$C$16\"\n\"9595817+116896967\"\n\"147577404-1\"\n\"579467+2102504+3320377+14252767\"\n\"SUM(B10:B15)\"\n\"+C10/$C$20\"\n\"SUM(B10:B19)\"\n\"ROUND((C10/$C$16),4)\"\n\"ROUND((+C11/$C$16),4)\"\n\"ROUND((C12/$C$16),4)-0.0001\"\n\"SUM(B10:B15)\"\n\"+B10/$B$26\"\n\"12027969\"\n\"SUM(B10:B24)\"\n\"+B12/24\"\n\"+E12/600\"\n\"+F12/H12\"\n\"+C12+F12+0.01\"\n\"+H12/$H$28\"\n\"+H12/$H$28\"\n\"+C14+F14\"\n\"+H20/$H$28-0.000001\"\n\"+H20/$H$28-0.000001\"\n\"+C25/H25\"\n\"SUM(B12:B27)\"\n\"SUM(C12:C27)+0.02\"\n\"SUM(F12:F27)+0.03\"\n\"SUM(H12:H27)-0.02\"\n\"SUM(I12:I27)+0.000002\"\n\"G11+G12+G13+G14\"\n\"E20+E21\"\n\"E23+E24+E25\"\n\"E31+E32+E34+E35+E36+E37\"\n\"G21+G25+G27+G29+G37+G42\"\n\"G16+G44\"\n\"G46\"\n\"E54+E57+E58+E59+E60+E61+E63+E62\"\n\"G72+G71+G70\"\n\"G64+G65+G66+G67+G68+G73\"\n\"G49-G74\"\n\"SUM(A2:A22)\"\n\"SUM(A23:H23)\"\n\"SUM(J1:J35)\"\n\"J36-K36\"\n\"SUM(J2:J35)\"\n\"E9*$E$5\"\n\"G9*$G$5\"\n\"I9*$I$5\"\n\"ROUND(F9+H9+J9,1)\"\n\"IF(K9>=$K$2,$J$2, IF(K9<=$L$4,$J$4,$J$3))\"\n\"(A2+C3)/12\"\n\"C2/60\"\n\"IF(A3<C3,1,IF(A3=C3,2,3))\"\n\"IF($F$3<3,A3,C3)\"\n\"IF($F$3<3,MAX(C3-A3,0.01),MAX(A3-C3,0.01))\"\n\"1-A4-C4\"\n\"FORECAST(A12,B1:B11,A1:A11)\"\n\"FORECAST(A11,B1:B10,A1:A10)\"\n\"FORECAST(B12,A1:A11,B1:B11)\"\n\"(A5*A5)*0.000136111111111-0.101777777777*A5+33.1111111112\"\n\"0.00395348987176*POWER(A22,LOG(3,2))+0.00313644438459*A22-230.784433648\"\n\"0.00484094013519*A39*LOG(A39,2)+0.0233199941077*A39-9.37219096593\"\n\"POWER(A2,A2)*$G$2\"\n\"A2*FACT(A2)*$G$3\"\n\"SUM(F12:F16)/3\"\n\"SUM(K12:K16)/4\"\n\"IF($A$12=12,(SUM(G25:G27)+SUM(D25:D27)+SUM(J25:J27)+SUM(M25:M27))/3,0)\"\n\"IF($A$12=9,(D27+G27+J27+M27+D28+G28+J28+M28+D29+G29+J29+M29+0.5*(D30+G30+J30+M30))/3,0)\"\n\"IF($A$12=12,(SUM(G28:G30)+SUM(D28:D30)+SUM(J28:J30)+SUM(M28:M30))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G31:G33)+SUM(D31:D33)+SUM(J31:J33)+SUM(M31:M33))/3,0)\"\n\"IF($A$12=9,(0.5*(D33+G33+J33+M33)+D34+G34+J34+M34+D35+G35+J35+M35+(D36+G36+J36+M36))/3,0)\"\n\"IF($A$12=12,(SUM(G34:G36)+SUM(D34:D36)+SUM(J34:J36)+SUM(M34:M379))/3,0)\"\n\"TODAY()\"\n\"IF($L$14>0,$L$14*E$24,$L$11*E$24)\"\n\"SUM(N23+K23+H23+E23)\"\n\"SUM(D25:D36)/$A$12\"\n\"IF($A25>=$A$14,IF($L$14>0,IF($L$14*D25/$A$12=C25,0,($L$14*D25/$A$12)),IF($L$11*D25/$A$12=C25,0,($L$11*D25/$A$12))),IF(AND(D25=0,C25=0),0,IF($L$14>0,(($L$14*D25/$A$12)-C25),(($L$11*D25/$A$12)-C25))))\"\n\"IF($A25>=$A$14,IF($L$14*G25/$A$12=F25,0,IF($L$11*G25/$A$12=F25,0,IF($L$14>0,($L$14*G25/$A$12),($L$11*G25/$A$12)))),IF(AND(G25=0,F25=0),0,IF($L$14>0,(($L$14*G25/$A$12)-F25),(($L$11*G25/$A$12)-F25))))\"\n\"IF($A25>=$A$14,C25+E25+H25+K25+N25,C25+E25+F25+H25+I25+K25+L25+N25)\"\n\"SUM(C25:C36)\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!H2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"SUM(K12:K16)/4\"\n\"IF(fall!L14=0,fall!L11,fall!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF(fall!L14=0,fall!L11,fall!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!E23\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!P23\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<fall!$A$14,fall!C25+fall!E25,IF(fall!$L$14>0,fall!$L$14*fall!D25/fall!$A$12,fall!$L$11*fall!D25/fall!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!H2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"+'c'!K11\"\n\"SUM(K12:K16)/4\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+'c'!E24\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!N23\"\n\"+'c'!P24\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<'c'!$A$14,'c'!C26+'c'!E26,IF('c'!$L$14>0,'c'!$L$14*'c'!D26/'c'!$A$12,'c'!$L$11*'c'!D26/'c'!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"+d!B2\"\n\"+d!B2\"\n\"+d!B2\"\n\"+d!B2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"+'c'!K11\"\n\"SUM(K12:K16)/4\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+'c'!E24\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!N23\"\n\"+'c'!P24\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<'c'!$A$14,'c'!C26+'c'!E26,IF('c'!$L$14>0,'c'!$L$14*'c'!D26/'c'!$A$12,'c'!$L$11*'c'!D26/'c'!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"SUM(M1,N1)\"\n\"CONCATENATE(B1,\"\" \"\",C1,\"\" \"\",A1)\"\n\"ROUND(G11/$G$39,2)\"\n\"ROUND(G11/$G$39,2)\"\n\"ROUND(G11/$G$39,2)\"\n\"ROUND(G11/$G$39,2)\"\n\"SUM(G11:G38)\"\n\"SUM(G11:G38)\"\n\"SUM(G5:K5,O5:U5)\"\n\"V5*32.56%\"\n\"SUM(V5:W5)\"\n\"SUM(X5:X6)\"\n\"SUM(X7:X34)\"\n\"V37*43.38%\"\n\"SUM(X36:X40)\"\n\"SUM(X41)\"\n\"SUM(G42:K42)\"\n\"SUM(M5:M41)\"\n\"M42-N42\"\n\"SUM(V42:W42)\"\n\"SUM(G71:U71)\"\n\"I7*H7\"\n\"SUM(J7:J30)\"\n\"I32*H32*0.25\"\n\"SUM(J32)\"\n\"SUM(J6:J34)\"\n\"SUM(K31:K33)\"\n\"SUM(J50:J51)\"\n\"SUM(K44:K63)\"\n\"SUM(J74:J76)\"\n\"(I78*H78)*0.25\"\n\"J78+J79\"\n\"SUM(K81,K79)\"\n\"SUM(K77:K80)\"\n\"SUM(K87,K85,K52,K49)\"\n\"SUM(J112,J105,J99)\"\n\"SUM(J113:J117)\"\n\"SUM(J113:J123)\"\n\"SUM(K8:K124)\"\n\"COUNT(B3:B39)\"\n\"U39*250\"\n\"COUNT(B40:B42)\"\n\"COUNT(B43:B49)\"\n\"COUNT(B50:B68)\"\n\"COUNT(B71:B93)\"\n\"COUNT(B95:B108)\"\n\"COUNT(B113:B128)\"\n\"SUM(V3:V143)\"\n\"COUNT(B3:B143)\"\n\"SUM(U3:U143)\"\n\"COUNT(B3:B39)\"\n\"U39*250\"\n\"COUNT(B40:B55)\"\n\"COUNT(B56:B62)\"\n\"COUNT(B63:B81)\"\n\"COUNT(B85:B108)\"\n\"SUM(V1:V142)\"\n\"COUNT(B3:B142)\"\n\"SUM(U3:U144)\"\n\"U145-U146\"\n\"U39\"\n\"250*F149\"\n\"U62\"\n\"U125\"\n\"U108\"\n\"SUM(F149:F152)\"\n\"N162*M162\"\n\"SUM(M162:M170)\"\n\"N171*M171\"\n\"SUM(O162:O171)\"\n\"SUM(T171)\"\n\"F13*0.28\"\n\"H13*0.25\"\n\"H13*0.25\"\n\"H13*0.5\"\n\"SUM(I13:L13)\"\n\"SUM(M13:M32)\"\n\"SUM(M33:M45)\"\n\"B2*+B2/C2\"\n\"C2*D2\"\n\"B3+1\"\n\"AVERAGE(C3:C13)\"\n\"A14\"\n\"AVERAGE(C14:C23)\"\n\"_xll.ARRAY(#REF!,,)\"\n\"B3+1\"\n\"AVERAGE(C3:C13)\"\n\"A14\"\n\"AVERAGE(C14:C23)\"\n\"B4+1\"\n\"AVERAGE(C4:C13)\"\n\"STDEVP(C4:C13)\"\n\"SUM(C13:C15)/3\"\n\"SUM(F12:F16)/3\"\n\"SUM(K12:K16)/4\"\n\"IF($A$12=12,(SUM(G25:G27)+SUM(D25:D27)+SUM(J25:J27)+SUM(M25:M27))/3,0)\"\n\"IF($A$12=9,(D27+G27+J27+M27+D28+G28+J28+M28+D29+G29+J29+M29+0.5*(D30+G30+J30+M30))/3,0)\"\n\"IF($A$12=12,(SUM(G28:G30)+SUM(D28:D30)+SUM(J28:J30)+SUM(M28:M30))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G31:G33)+SUM(D31:D33)+SUM(J31:J33)+SUM(M31:M33))/3,0)\"\n\"IF($A$12=9,(0.5*(D33+G33+J33+M33)+D34+G34+J34+M34+D35+G35+J35+M35+(D36+G36+J36+M36))/3,0)\"\n\"IF($A$12=12,(SUM(G34:G36)+SUM(D34:D36)+SUM(J34:J36)+SUM(M34:M379))/3,0)\"\n\"TODAY()\"\n\"IF($L$14>0,$L$14*E$24,$L$11*E$24)\"\n\"C23+F23\"\n\"SUM(N23+K23+H23+E23)\"\n\"SUM(D25:D36)/$A$12\"\n\"SUM(G27:G30)/A12\"\n\"IF($A25>=$A$14,IF($L$14>0,IF($L$14*D25/$A$12=C25,0,($L$14*D25/$A$12)),IF($L$11*D25/$A$12=C25,0,($L$11*D25/$A$12))),IF(AND(D25=0,C25=0),0,IF($L$14>0,(($L$14*D25/$A$12)-C25),(($L$11*D25/$A$12)-C25))))\"\n\"IF($A25>=$A$14,IF($L$14*G25/$A$12=F25,0,IF($L$11*G25/$A$12=F25,0,IF($L$14>0,($L$14*G25/$A$12),($L$11*G25/$A$12)))),IF(AND(G25=0,F25=0),0,IF($L$14>0,(($L$14*G25/$A$12)-F25),(($L$11*G25/$A$12)-F25))))\"\n\"IF($A25>=$A$14,C25+E25+H25+K25+N25,C25+E25+F25+H25+I25+K25+L25+N25)\"\n\"C27+F27+K27\"\n\"3414.75/($L$14/$A$12)\"\n\"1138.25/($L$14/$A$12)\"\n\"2276.5/($L$14/$A$12)\"\n\"SUM(C25:C36)\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!B2:E2\"\n\"+fall!H2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"SUM(K12:K16)/4\"\n\"IF(fall!L14=0,fall!L11,fall!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF(fall!L14=0,fall!L11,fall!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!E23\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!P23\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<fall!$A$14,fall!C25+fall!E25,IF(fall!$L$14>0,fall!$L$14*fall!D25/fall!$A$12,fall!$L$11*fall!D25/fall!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!B2:E2\"\n\"+'c'!H2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"+'c'!K11\"\n\"SUM(K12:K16)/4\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+'c'!E24\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!N23\"\n\"+'c'!P24\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<'c'!$A$14,'c'!C26+'c'!E26,IF('c'!$L$14>0,'c'!$L$14*'c'!D26/'c'!$A$12,'c'!$L$11*'c'!D26/'c'!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"+d!B2\"\n\"+d!B2\"\n\"+d!B2\"\n\"+d!B2\"\n\"+fall!F11\"\n\"SUM(F12:F16)/3\"\n\"+'c'!K11\"\n\"SUM(K12:K16)/4\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=12,(SUM(G26:G28)+SUM(D26:D28)+SUM(J26:J28)+SUM(M26:M28))/3,0)\"\n\"IF('c'!L14=0,'c'!L11,'c'!L14)\"\n\"IF($A$12=9,(0.5*(D28+G28+J28+M28)+D29+G29+J29+M29+D30+G30+J30+M30+0.5*(D31+G31+J31+M31))/3,0)\"\n\"IF($A$12=12,(SUM(G29:G31)+SUM(D29:D31)+SUM(J29:J31)+SUM(M29:M31))/3,0)\"\n\"IF($A$12=9,((0.5*(D31+G31+J31+M31)+D33+G33+J33+M33+0.5*(D34+G34+J34+M34)+D32+G32+J32+M32)/3),0)\"\n\"IF($A$12=12,(SUM(G32:G34)+SUM(D32:D34)+SUM(J32:J34)+SUM(M32:M34))/3,0)\"\n\"IF($A$12=9,(0.5*(D34+G34+J34+M34)+D35+G35+J35+M35+D36+G36+J36+M36+0.5*(D37+G37+J37+M37))/3,0)\"\n\"IF($A$12=12,(SUM(G35:G37)+SUM(D35:D37)+SUM(J35:J37)+SUM(M35:M371))/3,0)\"\n\"TODAY()\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+fall!C18\"\n\"+'c'!E24\"\n\"IF($L$14>0,$L$14*E$25,$L$11*E$25)\"\n\"+fall!N23\"\n\"+'c'!P24\"\n\"SUM(N24+K24+H24+E24)\"\n\"SUM(D26:D37)/$A$12\"\n\"IF($A26<'c'!$A$14,'c'!C26+'c'!E26,IF('c'!$L$14>0,'c'!$L$14*'c'!D26/'c'!$A$12,'c'!$L$11*'c'!D26/'c'!$A$12))\"\n\"IF($A26>=$A$14,IF($L$14>0,IF($L$14*D26/$A$12=C26,0,($L$14*D26/$A$12)),IF($L$11*D26/$A$12=C26,0,($L$11*D26/$A$12))),IF(AND(D26=0,C26=0),0,IF($L$14>0,(($L$14*D26/$A$12)-C26),(($L$11*D26/$A$12)-C26))))\"\n\"IF($A26>=$A$14,C26+E26+H26+K26+N26,C26+E26+F26+H26+I26+K26+L26+N26)\"\n\"SUM(C26:C37)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((F3+G3+H3+I3+J3-MIN(F3:J3) )/4,1)\"\n\"ROUND(L3/99*100,2)\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F3:J3)-MIN(F3:J3))/4,1)\"\n\"L20/99*100\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((0.2*M6+0.1*N6+0.3*S6)/0.6,2)\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"IF(NOT(W21=\"\"F\"\"),IF(V21>=91.5,\"\"A\"\",IF(V21>=88.5,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"ROUND(L2/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,1)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"ROUND(L3/99*100,2)\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"IF(NOT(W23=F),IF(V23>=92,\"\"A\"\",IF(V23>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"IF(NOT(W23=F),IF(V23>=92,\"\"A\"\",IF(V23>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"IF(NOT(W23=F),IF(V23>=92,\"\"A\"\",IF(V23>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(O2>0, O2+2, O2)\"\n\"ROUND(((M2+N2+P2)-MIN(M2,N2,P2)) /2,1)\"\n\"ROUND(R2/146*100, 2)\"\n\"ROUND((2*Q2+S2)/3,2)\"\n\"IF(OR(K2<59,T2<59),\"\"F\"\", \"\" \"\")\"\n\"ROUND(K2*0.4+Q2*0.4+S2*0.2,2)\"\n\"IF(NOT(W2=\"\"F\"\"),IF(V2>=92,\"\"A\"\",IF(V2>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\"),IF($V2>=86,\"\"B+\"\",IF($V2>=82,\"\"B\"\",IF($V2>=79,\"\"B-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\"),IF($V2>=76,\"\"C+\"\",IF($V2>=72,\"\"C\"\",IF($V2>=69,\"\"C-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(AND($W2=\"\"\"\",$X2=\"\"\"\",$Y2=\"\"\"\",$Z2=\"\"\"\"),IF($V2>=66,\"\"D+\"\",IF($V2>=62,\"\"D\"\",IF($V2>=59,\"\"D-\"\",\"\"\"\"))),\"\"\"\")\"\n\"IF(V2<59,\"\"F\"\",\"\"\"\")\"\n\"IF(NOT(W23=F),IF(V23>=92,\"\"A\"\",IF(V23>=89,\"\"A-\"\",\"\"\"\")),\"\"\"\")\"\n\"ROUND((0.06*G2+0.17*H2+0.17*I2)/0.4+J2,2)\"\n\"ROUND((K2+L2+M2 +N2)/3,2)\"\n\"ROUND(0.4*O2+0.6*P2,0)\"\n\"ROUND((F3+G3+H3+I3+J3-MIN(F3:I3))/3,2)\"\n\"ROUND((0.1*K14+0.25*L14+0.25*M14)/0.6,2)\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"ROUND((0.4*O2+0.15*P2)/0.55,2)\"\n\"ROUND(0.45*K2+0.4*O2+0.15*P2,2)\"\n\"ROUND((F3+G3+J3)/3,2)\"\n\"ROUND((SUM(F4:J4)-MIN(F4:J4))/4,2)\"\n\"ROUND((SUM(F2:J2)-MIN(F2:J2))/4,2)\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"ROUND((0.4*O2+0.15*P2)/0.55,2)\"\n\"ROUND(0.45*K2+0.4*O2+0.15*P2,2)\"\n\"(0.4*O19+0.15*P19)/0.55\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"SUM(F13:J13)/3\"\n\"86.67\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"99.42*0.4+69*0.2+55*0.2+65.7*0.2\"\n\"(SUM(F2:J2)-MIN(F2:J2))/4\"\n\"((L2+M2+N2)-MIN(L2:N2) )/2\"\n\"(0.4*O2+0.15*P2)/0.55\"\n\"0.45*K2+0.4*O2+0.15*P2\"\n\"B5+B8\"\n\"SUM(B11:B21)\"\n\"SUM(D22:D24)\"\n\"300+D25\"\n\"B6\"\n\"B40+B54+B73+B80+B86+B92+B98+B104\"\n\"B31+B32\"\n\"SUM(B38:B39)\"\n\"SUM(B45:B50)\"\n\"3299.34-D45\"\n\"D46\"\n\"B53+B54\"\n\"SUM(B56:B70)\"\n\"B45\"\n\"SUM(B75:B77)\"\n\"B46\"\n\"B47\"\n\"B48\"\n\"B49\"\n\"B50\"\n\"A!B33\"\n\"B7+B24+B44+B60+B66+B72+B78+B84\"\n\"B2+B3\"\n\"SUM(C9:C10)\"\n\"SUM(B14:B20)\"\n\"B2+B7-D14\"\n\"D15\"\n\"B23+B24\"\n\"SUM(B26:B41)\"\n\"SUM(D30:D37)\"\n\"B14\"\n\"SUM(B46:B57)\"\n\"B15\"\n\"B63\"\n\"B16\"\n\"B17\"\n\"B18\"\n\"B19\"\n\"SUM(B9:B405)\"\n\"B2+B3\"\n\"B11+A11\"\n\"C11\"\n\"Computations!F11\"\n\"Computations!A12\"\n\"IF(ISTEXT(C12),\"\"\"\",Computations!B12)\"\n\"IF(Computations!F12=\"\"closed\"\",Computations!F11+Computations!C12,Computations!F12)\"\n\"IF(ISTEXT(A12),\"\"\"\",Computations!G12)\"\n\"Computations!L12\"\n\"IF(ISTEXT(Computations!N12),\"\"\"\",Computations!D12)\"\n\"IF(Computations!$O12=1,Computations!N12,\"\"\"\")\"\n\"IF(ISTEXT($I12),\"\"\"\",$I12+Computations!$E12)\"\n\"IF(F12=\"\"renege\"\",G12-C12,\"\"\"\")\"\n\"IF(F12=\"\"renege\"\",\"\"\"\",Computations!K12)\"\n\"IF(ISTEXT($L12),\"\"\"\",Computations!$E12+L12)\"\n\"Data!H4/1440\"\n\"start_time\"\n\"IF(ISTEXT(F12),\"\"closed\"\",1)\"\n\"VLOOKUP(RAND(),arrival,3)\"\n\"B12/1440\"\n\"VLOOKUP(RAND(),service,3)\"\n\"IF(ISTEXT(F11),\"\"\"\",IF(F11+ C12>=close_time,\"\"closed\"\",F11+C12))\"\n\"QSSNumGreater(N$11:$N11,F12)+QSSNumGreater(M$11:M11,F12)\"\n\"IF(G12>=balk_num,\"\"balk\"\",\"\"\"\")\"\n\"IF(OR(H12=\"\"balk\"\",ISTEXT(F12)),\"\"\"\",MAX(Simulation!J$11:J11,start_time,$F12))\"\n\"IF(ISTEXT(I12),\"\"\"\",MIN(I12:I12))\"\n\"IF(ISTEXT(I12),\"\"\"\",J12-F12)\"\n\"IF(ISTEXT(I12),\"\"\"\",IF(K12>renege_time,\"\"renege\"\",\"\"\"\"))\"\n\"IF(L12=\"\"renege\"\",F12+renege_time,\"\"\"\")\"\n\"IF(OR(L12=\"\"renege\"\",ISTEXT(I12)),\"\"\"\",J12)\"\n\"IF(ISTEXT(N12),\"\"\"\",MATCH(N12,I12:I12,0))\"\n\"IF(ISTEXT(F13),\"\"closed\"\",A12+1)\"\n\"D18/D20\"\n\"(D13*1000)+(D15*1200)+(D17*1600)+(D19*2000)+(D23*2000)+(D27*2000)+(D31*2000)\"\n\"#REF!\"\n\"B6*('Conversion Factors'!#REF!)\"\n\"B6*'Conversion Factors'!#REF!\"\n\"(C6-D6)*'Conversion Factors'!#REF!\"\n\"+E6/101\"\n\"B13*'Conversion Factors'!#REF!\"\n\"SUM(C6:C18)\"\n\"B19+B28\"\n\"C19\"\n\"'Energy Savings from Recyc _OLD'!C30\"\n\"'Energy Savings from Recyc _OLD'!D30\"\n\"'Energy Savings from Recyc _OLD'!E30\"\n\"B7\"\n\"#REF!\"\n\"SUM(B16:C16)\"\n\"SUM(F16:I16)\"\n\"SUM(L16:P16)\"\n\"SUM(B16:B30)\"\n\"SUM(B34:B46)\"\n\"(F94+E94)/2\"\n\"SUM(B94:B96)\"\n\"SUM(B97:B98)\"\n\"(B113+C113+D113+E113+F113)/5\"\n\"#REF!\"\n\"SUM(B3:B5)\"\n\"SUM(#REF!)/1000\"\n\"(#REF!)/1000\"\n\"(SUM(#REF!)+SUM(#REF!))/1000\"\n\"SUM(B8:B13)\"\n\"#REF!/#REF!\"\n\"(#REF!)\"\n\"#REF!/1000000*(-1)\"\n\"[1]Sheet1!B10\"\n\"[1]Sheet1!B9\"\n\"[1]Sheet1!B17\"\n\"'Energy Savings from Recyc _OLD'!D111\"\n\"'Energy Savings from Recyc _OLD'!C111\"\n\"'Energy Savings from Recyc _OLD'!E111\"\n\"B35/1000000\"\n\"#REF!/1000000\"\n\"B37\"\n\"#REF!*1000000\"\n\"#REF!*(-1000000)\"\n\"#REF!-#REF!\"\n\"(#REF!-#REF!)*(-1)\"\n\"#REF!*(-1)\"\n\"#REF!*#REF!/1000000\"\n\"SUM(C18:C22)\"\n\"IF(B2<3,0,IF(B2=3,10%,10%+(B2-3)*5%))\"\n\"IF(A2=\"\"F\"\",B2,0)\"\n\"VLOOKUP($E2,Grades!$B$1:$C$104,2,FALSE)\"\n\"B2\"\n\"YEAR(A5)+60\"\n\"ROUND((D5-A5+0.5)/365.25,3)\"\n\"FLOOR((D5-C5+1)/365.25,0.25)\"\n\"F5-CEILING((100-H5)/100*G5-I5,0.25)\"\n\"N2\"\n\"F5-CEILING(I5,0.25)\"\n\"VLOOKUP(B5,Fillon!$A$2:$D$19,2)\"\n\"IF(K$6>J6,K$6-J6,0)\"\n\"VLOOKUP(B5,Fillon!$A$2:$D$19,4)\"\n\"MIN(J5,37.5)\"\n\"MIN(F8+D2,40)\"\n\"MIN(G8*2%*(1+C2),100%)\"\n\"VLOOKUP(B5,Fillon!$A$2:$E$19,5)\"\n\"MAX(F$2*Paramètres!B$2/1200*H8,VLOOKUP(G8,Paramètres!B8:F33,3,TRUE))\"\n\"MIN(J6,K6)\"\n\"MIN(F9+D3,K6+2.5)\"\n\"MIN(G9*M6*(1+C2),100%)\"\n\"VLOOKUP(B5,Fillon!$A$2:$D$19,3)\"\n\"IF(E5>I8,3%,0%)\"\n\"MAX(F$2*Paramètres!B$2/1200*H9,VLOOKUP(G9,Paramètres!B8:F33,5,TRUE))\"\n\"H9*(1-I10)*(1+J10)\"\n\"IF(E5<I8,I9*MIN(L6,I8-E5),0)\"\n\"IF(J6-K6<0,0,MIN((J6-K6),5)*J9)\"\n\"MAX(F$2*Paramètres!B$2/1200*H10,VLOOKUP(G9,Paramètres!B8:F33,5,TRUE))\"\n\"H10-H8\"\n\"H11/H8\"\n\"B8*4%\"\n\"D$18*C8\"\n\"F$33*E8\"\n\"E8+2.533%\"\n\"B$2/1200*D$5\"\n\"C$18\"\n\"E23+0.5%\"\n\"B$2/1200*F$5\"\n\"75%/B2\"\n\"C14\"\n\"C1\"\n\"'[1]Data Entry'!$C$1\"\n\"'[1]Data Entry'!$C$2\"\n\"NOW()\"\n\"'[1]Data Entry'!$D$15\"\n\"'[1]Data Entry'!$G$15\"\n\"'[1]Data Entry'!$D$16\"\n\"'[1]Data Entry'!$G$16\"\n\"'[1]Data Entry'!$D$17\"\n\"'[1]Data Entry'!$D$18\"\n\"'[1]Data Entry'!$D$27\"\n\"'[1]Data Entry'!$G$52\"\n\"G27\"\n\"'[1]Data Entry'!$D$29\"\n\"IF(G28>=G27,G27,IF(((G27-G28)/G27)<0.0399999,G27,(1-(((G27-G28)/G27)-0.04))*G27))\"\n\"'[1]Data Entry'!$D$30\"\n\"IF(G32<12,(G29-(G46/0.015)),G29)\"\n\"'[1]Data Entry'!$D$31\"\n\"'[1]Data Entry'!$G$53\"\n\"'[1]Data Entry'!$D$32\"\n\"'[1]Data Entry'!$D$33\"\n\"'[1]Data Entry'!$G$33\"\n\"'[1]Data Entry'!$D$34\"\n\"'[1]Data Entry'!$G$34\"\n\"'[1]Data Entry'!$D$35\"\n\"'[1]Data Entry'!$G$35\"\n\"'[1]Data Entry'!$D$36\"\n\"'[1]Data Entry'!$G$36\"\n\"'[1]Data Entry'!$D$37\"\n\"'[1]Data Entry'!$G$37\"\n\"'[1]Data Entry'!$D$38\"\n\"'[1]Data Entry'!$G$38\"\n\"'[1]Data Entry'!$D$39\"\n\"'[1]Data Entry'!$G$39\"\n\"'[1]Data Entry'!$D$40\"\n\"'[1]Data Entry'!$G$40\"\n\"'[1]Data Entry'!$D$41\"\n\"'[1]Data Entry'!$G$41\"\n\"'[1]Data Entry'!$D$42\"\n\"'[1]Data Entry'!$G$42\"\n\"'[1]Data Entry'!$D$43\"\n\"'[1]Data Entry'!$G$43\"\n\"'[1]Data Entry'!$D$44\"\n\"'[1]Data Entry'!$G$44\"\n\"'[1]Data Entry'!$D$45\"\n\"'[1]Data Entry'!$D$46\"\n\"'[1]Data Entry'!$G$46\"\n\"'[1]Data Entry'!$D$47\"\n\"'[1]Data Entry'!$G$47\"\n\"'[1]Data Entry'!$D$49\"\n\"ROUND(IF((G27*0.0086)+'SOF0001'!G65>='SOF0001'!G36,'SOF0001'!G36-'SOF0001'!G65,G27*0.0086),0)\"\n\"ROUND(IF((G27*0.0086)+'SOF0001'!G65>='SOF0001'!H36,'SOF0001'!H36-'SOF0001'!G65,G27*0.0086),0)\"\n\"ROUND(IF(G30=G27,G238,IF((G30*0.0086)+'SOF0001'!G65>='SOF0001'!G36,'SOF0001'!G36-'SOF0001'!G65,G30*0.0086)),0)\"\n\"ROUND(IF(G30=G27,G238,IF((G30*0.0086)+'SOF0001'!G65>='SOF0001'!H36,'SOF0001'!H36-'SOF0001'!G65,G30*0.0086)),0)\"\n\"ROUND(IF(G29*0.0086=G238,G238,IF((G29*0.0086)+'SOF0001'!G65>='SOF0001'!G36,'SOF0001'!G36-'SOF0001'!G65,G29*0.0086)),0)\"\n\"ROUND(IF(G29=G238,G27,IF((G29*0.0086)+'SOF0001'!G65>='SOF0001'!H36,'SOF0001'!H36-'SOF0001'!G65,G29*0.0086)),0)\"\n\"IF(D45>(D27*0.05),D27*0.05,D45)\"\n\"ROUND(0.64*('SOF0001'!H9/100),0)\"\n\"IF(AND(D27<2000,#REF!>1600),'SOF0001'!H46*(1+((2000-D27)*0.00014)),'SOF0001'!H46)\"\n\"IF(OR('Calc Data'!D6>129.999,G32<12),0,IF(OR(D15>89.5,D27>89.5),130,IF(AND(OR(D283<89.5,D27<89.5),G34>29.5),130,0)))\"\n\"IF(OR('Calc Data'!D6>129.999,G32<8),0,IF(OR(D15>49.5,D27>49.5),75,IF(AND(OR(D15<49.5,D27<49.5),G34>29.5),75,0)))\"\n\"IF(OR('Calc Data'!D6>129.999,G32<6),0,IF(OR(D15>39.5,D27>39.5),60,IF(AND(OR(D15<39.5,D27<39.5),G34>29.5),60,0)))\"\n\"SUM('Data Entry'!D29:D37)+'Data Entry'!D39\"\n\"TaxCompress!F32\"\n\"SUM('Data Entry'!D29:D37)+'Data Entry'!D39\"\n\"TaxCompress!F32\"\n\"SUM('Data Entry'!D29:D37)+'Data Entry'!D39\"\n\"ROUND(IF((('Data Entry'!D16+'Data Entry'!D61)/'Data Entry'!D18)<0.015,(('Data Entry'!D16+'Data Entry'!D61)/'Data Entry'!D18)*'Data Entry'!G29,(0.015*'Data Entry'!G27)+'Data Entry'!D61),0)\"\n\"('Data Entry'!D29*5)+('Data Entry'!D30*3)+('Data Entry'!D31*5)+('Data Entry'!D32*3)+('Data Entry'!D33*3)+('Data Entry'!D34*3)+('Data Entry'!D35*2.7)+('Data Entry'!D36*2.3)\"\n\"ROUND((('SOF0001'!G36-'SOF0001'!G34-'SOF0001'!G33-'SOF0001'!G30)-(((D9-2537)*0.5)/D9)*('SOF0001'!G36-'SOF0001'!G34-'SOF0001'!G33-'SOF0001'!G30))/2537,4)\"\n\"('Data Entry'!D29*5)+('Data Entry'!D30*3)+('Data Entry'!D31*5)+('Data Entry'!D32*3)+('Data Entry'!D33*3)+('Data Entry'!D34*3)+('Data Entry'!D35*2.7)+('Data Entry'!D36*2.3)\"\n\"ROUND((('SOF0001'!H36-'SOF0001'!H34-'SOF0001'!H33)-(((H9-2396)*0.5)/H9)*('SOF0001'!H36-'SOF0001'!H34-'SOF0001'!H33))/2396,4)\"\n\"('Data Entry'!D29*5)+('Data Entry'!D30*3)+('Data Entry'!D31*5)+('Data Entry'!D32*3)+('Data Entry'!D33*3)+('Data Entry'!D34*3)+('Data Entry'!D35*2.7)+('Data Entry'!D36*2.3)\"\n\"ROUND((('SOF0001'!J36-'SOF0001'!J34-'SOF0001'!J33)-(((H9-2396)*0.5)/H9)*('SOF0001'!J36-'SOF0001'!J34-'SOF0001'!J33))/2396,4)\"\n\"'Data Entry'!D27-D4-'Data Entry'!D41\"\n\"('Data Entry'!G31-IFA!H57)/('Data Entry'!G30/100)\"\n\"'Data Entry'!D27-D4-'Data Entry'!D41\"\n\"'Data Entry'!G31/('Data Entry'!G30/100)\"\n\"'Data Entry'!D27-D4-'Data Entry'!D41\"\n\"'Data Entry'!G31/('Data Entry'!G29/100)\"\n\"IF(D6>129.999,0,IF(OR('Data Entry'!D275>'Data Entry'!D276,'Data Entry'!D275>'Data Entry'!D277),'Data Entry'!D275,IF('Data Entry'!D276>'Data Entry'!D277,'Data Entry'!D276,'Data Entry'!D277)))\"\n\"(('Data Entry'!G31-IFA!H57)/('Data Entry'!G30/100))-0.86\"\n\"IF(H6>129.999,0,IF(OR('Data Entry'!D275>'Data Entry'!D276,'Data Entry'!D275>'Data Entry'!D277),'Data Entry'!D275,IF('Data Entry'!D276>'Data Entry'!D277,'Data Entry'!D276,'Data Entry'!D277)))\"\n\"('Data Entry'!G31/('Data Entry'!G30/100))-0.86\"\n\"IF(H6>129.999,0,IF(OR('Data Entry'!D275>'Data Entry'!D276,'Data Entry'!D275>'Data Entry'!D277),'Data Entry'!D275,IF('Data Entry'!D276>'Data Entry'!D277,'Data Entry'!D276,'Data Entry'!D277)))\"\n\"(K4/('Data Entry'!G29/100))-0.86\"\n\"IF('Data Entry'!G33>300,0.0004,0.00025)\"\n\"ROUND(IF((IF('Data Entry'!G31-IFA!H57>G4,G4-'SOF0001'!G37,'Data Entry'!G31-IFA!H57-'SOF0001'!G37))/('Data Entry'!G30/100)<0,0,(IF('Data Entry'!G31-IFA!H57>G4,G4-'SOF0001'!G37,'Data Entry'!G31-IFA!H57-'SOF0001'!G37))/('Data Entry'!G30/100)),6)\"\n\"IF('Data Entry'!G33>300,0.0004,0.00025)\"\n\"TaxCompress!F24\"\n\"IF('Data Entry'!G33>300,0.0004,0.00025)\"\n\"ROUND(IF((IF(K4-'Data Entry'!D61>K4,K4-'SOF0001'!J37,K4-'Data Entry'!D61-'SOF0001'!J37))/('Data Entry'!G29/100)<0,0,(IF(K4-'Data Entry'!D61>K4,K4-'SOF0001'!J37,K4-'Data Entry'!D61-'SOF0001'!J37))/('Data Entry'!G29/100)),6)\"\n\"ROUND(2537*((('Data Entry'!G35-1)*0.71)+1),0)\"\n\"ROUND(IF(G8>0.64,0.64*('Data Entry'!G30/100),G8*('Data Entry'!G30/100)),0)\"\n\"ROUND(2396*((('Data Entry'!G35-1)*0.71)+1),0)\"\n\"ROUND(IF(I8>0.64,0.64*('Data Entry'!G30/100),I8*('Data Entry'!G30/100)),0)\"\n\"ROUND(2396*((('Data Entry'!G35-1)*0.71)+1),0)\"\n\"ROUND(IF(K8>0.64,0.64*('Data Entry'!G29/100),K8*('Data Entry'!G29/100)),0)\"\n\"ROUND(IF(D6>1600,D9,(1+(1600-IF(D6>D7,D6,D7))*D8)*D9),0)\"\n\"ROUND(IF('Data Entry'!G45=\"\"Y\"\",0,IF(OR(D6>4999.999,'Data Entry'!G32<12),0,(1+((5000-D6)*0.000025))*D9)),0)\"\n\"'Data Entry'!G31-IFA!H57\"\n\"ROUND(IF('Data Entry'!G45=\"\"Y\"\",0,IF(OR(H6>4999.999,'Data Entry'!G32<12),0,(1+((5000-H6)*0.00002))*H9)),0)\"\n\"ROUND(IF('Data Entry'!G45=\"\"Y\"\",0,IF(OR(J6>4999.999,'Data Entry'!G32<12),0,(1+((5000-J6)*0.000015))*J9)),0)\"\n\"IF(AND(D11>D10,D11>D9),D11,IF(AND(D10>D9,D10>D11),D10,D9))\"\n\"'Data Entry'!C1\"\n\"'Data Entry'!D27\"\n\"'Calc Data'!D4\"\n\"'Data Entry'!D41\"\n\"'Data Entry'!G27\"\n\"'Data Entry'!G30\"\n\"'Data Entry'!G35\"\n\"'Data Entry'!G31\"\n\"ROUND(ROUND('Calc Data'!D12,0)*IF('Calc Data'!D7>'Calc Data'!D6,'Calc Data'!D7,'Calc Data'!D6),0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*IF('Calc Data'!H7>'Calc Data'!H6,'Calc Data'!H7,'Calc Data'!H6),0)\"\n\"ROUND('Calc Data'!D5*ROUND('Calc Data'!D12,0),0)\"\n\"ROUND('Calc Data'!H5*ROUND('Calc Data'!H12,0),0)\"\n\"ROUND('Data Entry'!D40*1.1*ROUND('Calc Data'!D12,0),0)\"\n\"ROUND('Data Entry'!D40*1.1*ROUND('Calc Data'!H12,0),0)\"\n\"ROUND('Data Entry'!D40*1.1*ROUND('Calc Data'!J12,0),0)\"\n\"ROUND((+'Data Entry'!D39*4)*ROUND('Calc Data'!D12,0),0)\"\n\"ROUND(('Data Entry'!D39*4)*ROUND('Calc Data'!H12,0),0)\"\n\"ROUND(('Data Entry'!D39*4)*ROUND('Calc Data'!J12,0),0)\"\n\"ROUND((+'Data Entry'!D37*2.8)*ROUND('Calc Data'!D12,0),0)\"\n\"ROUND(('Data Entry'!D37*2.8)*ROUND('Calc Data'!H12,0),0)\"\n\"ROUND(('Data Entry'!D37*2.8)*ROUND('Calc Data'!J12,0),0)\"\n\"ROUND(('Data Entry'!D38*1.7)*ROUND('Calc Data'!D12,0),0)\"\n\"ROUND(('Data Entry'!D38*1.7)*ROUND('Calc Data'!H12,0),0)\"\n\"ROUND(('Data Entry'!D38*1.7)*ROUND('Calc Data'!J12,0),0)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D41*1.37,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D41*1.37,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D41*1.37,0)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D269*0.12,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D269*0.12,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D269*0.12,0)\"\n\"IF('Data Entry'!G43<0,'Data Entry'!G43,'Data Entry'!G43*-1)\"\n\"IF('Data Entry'!G43<0,'Data Entry'!G43,'Data Entry'!G43*-1)\"\n\"IF('Data Entry'!G43<0,'Data Entry'!G43,'Data Entry'!G43*-1)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D42*0.2,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D42*0.2,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D42*0.2,0)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D43*2.41,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D43*2.41,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D43*2.41,0)\"\n\"IF('Data Entry'!G44<0,'Data Entry'!G44,'Data Entry'!G44*-1)\"\n\"IF('Data Entry'!G44<0,'Data Entry'!G44,'Data Entry'!G44*-1)\"\n\"IF('Data Entry'!G44<0,'Data Entry'!G44,'Data Entry'!G44*-1)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D44*0.1,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D44*0.1,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D44*0.1,0)\"\n\"ROUND(ROUND('Calc Data'!D12,0)*'Data Entry'!D46*0.1,0)\"\n\"ROUND(ROUND('Calc Data'!H12,0)*'Data Entry'!D46*0.1,0)\"\n\"ROUND(ROUND('Calc Data'!J12,0)*'Data Entry'!D46*0.1,0)\"\n\"'Data Entry'!D47*250\"\n\"'Data Entry'!D47*250\"\n\"'Data Entry'!G36\"\n\"'Data Entry'!G36\"\n\"'Data Entry'!G36\"\n\"SUM(G18:G34)\"\n\"IF(AND('Data Entry'!G240<='Data Entry'!G239,'Data Entry'!G240<='Data Entry'!G238),'Data Entry'!G240,IF(AND('Data Entry'!G239<='Data Entry'!G238,'Data Entry'!G239<='Data Entry'!G240),'Data Entry'!G239,'Data Entry'!G238))\"\n\"IF(AND('Data Entry'!H240<='Data Entry'!H239,'Data Entry'!H240<='Data Entry'!H238),'Data Entry'!H240,IF(AND('Data Entry'!H239<='Data Entry'!H238,'Data Entry'!H239<='Data Entry'!H240),'Data Entry'!H239,'Data Entry'!H238))\"\n\"G36-G37\"\n\"ROUND(IF((24.7*'Calc Data'!G5*IF('Calc Data'!G8>=0.64,0.64,'Calc Data'!G8)*100)<'Calc Data'!G9,0,(24.7*'Calc Data'!G5*IF('Calc Data'!G8>=0.64,0.64,'Calc Data'!G8)*100)-'Calc Data'!G9),0)\"\n\"ROUND(IF((23.1*'Calc Data'!I5*IF('Calc Data'!I8>=0.64,0.64,'Calc Data'!I8)*100)<'Calc Data'!I9,0,(23.1*'Calc Data'!I5*IF('Calc Data'!I8>=0.64,0.64,'Calc Data'!I8)*100)-'Calc Data'!I9),0)\"\n\"ROUND(IF((24.7*'Calc Data'!G5*IF('Calc Data'!I8>=0.64,0.64,'Calc Data'!I8)*100)<'Calc Data'!I9,0,(24.7*'Calc Data'!G5*IF('Calc Data'!I8>=0.64,0.64,'Calc Data'!I8)*100)-'Calc Data'!I9),0)\"\n\"ROUND(IF((21*'Calc Data'!K5*IF('Calc Data'!K8>=0.64,0.64,'Calc Data'!K8)*100)<'Calc Data'!K9,0,(21*'Calc Data'!K5*IF('Calc Data'!K8>=0.64,0.64,'Calc Data'!K8)*100)-'Calc Data'!K9),0)\"\n\"'Existing Debt'!G57\"\n\"IFA!F53+IFA!H53\"\n\"'Data Entry'!D27*30\"\n\"IF('[1]Data Entry'!$F$61=0,'Additional Aid'!G22,'[2]Savings Due to $295,000'!$G$30)\"\n\"IF('[1]Data Entry'!$F$61=0,'[1]Additional Aid'!$G$26,'[2]Savings Due to $295,000'!$G$37)\"\n\"'Data Entry'!G37\"\n\"-ROUND(('Data Entry'!G40/'Data Entry'!D15)*'Data Entry'!G38,0)\"\n\"-ROUND(('Data Entry'!G40/'Data Entry'!D15)*'Data Entry'!G39,0)\"\n\"IF('Data Entry'!G41<0,'Data Entry'!G41,'Data Entry'!G41*-1)\"\n\"SUM(G48:G54)\"\n\"G38+G40+G42+G44+G46+G55\"\n\"C1\"\n\"NOW()\"\n\"ROUND('Data Entry'!D15*280,0)\"\n\"G46\"\n\"ROUND(G57-G65-G66-G42-G44,0)\"\n\"G42\"\n\"G44\"\n\"SUM(G65:G69)\"\n\"G65+G66+G67\"\n\"'Data Entry'!G31\"\n\"SUM(E75:E76)\"\n\"'Existing Debt'!G26-'Existing Debt'!G28\"\n\"'Existing Debt'!G38\"\n\"'Existing Debt'!G53\"\n\"'Existing Debt'!G57\"\n\"IFA!F18+IFA!F22+IFA!F26+IFA!F30+IFA!F34\"\n\"IFA!F43\"\n\"IFA!F57\"\n\"IFA!F53\"\n\"G83+G89\"\n\"G86+G92\"\n\"G85+G91\"\n\"G38\"\n\"G40\"\n\"IF('Data Entry'!G31>'Calc Data'!G4,'Calc Data'!G4,'Data Entry'!G31)\"\n\"F103+F104+F105\"\n\"'Calc Data'!G5\"\n\"F106/F107\"\n\"G67\"\n\"F108\"\n\"(('Data Entry'!D16-'Existing Debt'!G22-'Existing Debt'!G70)/'Data Entry'!D18)*100\"\n\"F6-0.86\"\n\"IF(F6>1.5,F6-1.5,0)\"\n\"IF('Data Entry'!G30/10000/'Calc Data'!G5>=21,0,IF(F6>=1.5,(0.64*21*100*'Calc Data'!G5)-0.64*('Data Entry'!G30/100),((F6-0.86)*21*100*'Calc Data'!G5)-(F6-0.86)*('Data Entry'!G30/100)))\"\n\"F7*('Data Entry'!G30/100)\"\n\"F10+F11\"\n\"'Data Entry'!D17-'Existing Debt'!G22\"\n\"F12-F14\"\n\"MIN(0.64,F16/23.1/('Calc Data'!G5)/100)\"\n\"IF(F19>=0.64,0.64*23.1*100*'Calc Data'!G5,F19*23.1*100*'Calc Data'!G5)\"\n\"F16-F20\"\n\"F21/('Data Entry'!G30/100)\"\n\"IF(F19+F22>0.64,0.64,F19+F22)\"\n\"IF(F24>=0.64,0.015*'Data Entry'!G30,(F24+0.86)*('Data Entry'!G30/100))\"\n\"'SOF0001'!G38\"\n\"'SOF0001'!I40\"\n\"G8+G9\"\n\"'SOF0001'!H38\"\n\"'SOF0001'!H40\"\n\"G10-G15\"\n\"G17*0.8\"\n\"'Data Entry'!D49*3000\"\n\"IF(G21<=G20,0,G21-G20)\"\n\"G17*0.2\"\n\"'Data Entry'!G15\"\n\"IF(G24>G25,0,G25-G24)\"\n\"'Data Entry'!C1\"\n\"'Data Entry'!G16\"\n\"'Data Entry'!D17\"\n\"IF(ISNA('EDA2'!G22),0,'EDA2'!G22)\"\n\"'Data Entry'!G47\"\n\"IFA!F81\"\n\"'Data Entry'!G29\"\n\"IF(MAX(G66,G67)<G68,MAX(G66,G67),G68)\"\n\"G38/G30/35/100\"\n\"IF(G44>0.29,0.29,G44)\"\n\"G30*G46*35*100\"\n\"G46*(G32/100)\"\n\"IF(G53>=G51,0,G51-G53)\"\n\"IF(G18-G22-G24<0,0,G18-G22-G24)\"\n\"G20-G22\"\n\"IF(G26-G28<0,0,G26-G28)\"\n\"IF(ISNA('EDA2'!I22),0,'EDA2'!I22)\"\n\"'Data Entry'!C1\"\n\"'Data Entry'!G16\"\n\"'Data Entry'!D17\"\n\"VLOOKUP(D2,'99IFAshares'!A1:D224,4,FALSE)\"\n\"VLOOKUP(D2,'99IFAshares'!A1:E224,5,FALSE)\"\n\"VLOOKUP(D2,'99IFAshares'!A1:D224,3,FALSE)\"\n\"'Data Entry'!G47\"\n\"IFA!F81\"\n\"'Data Entry'!G29\"\n\"IF(MAX(G64,G65)<G66,MAX(G64,G65),G66)\"\n\"G38/G30/35/100\"\n\"IF(G44>0.12,0.12,G44)\"\n\"G30*G46*35*100\"\n\"G46*(G32/100)\"\n\"IF(G53>=G51,0,G51-G53)\"\n\"IF(G18-G22-G24<0,0,G18-G22-G24)\"\n\"G20-G22\"\n\"IF(G26-G28<0,0,G26-G28)\"\n\"'Data Entry'!C1\"\n\"IF(ISNA('IFA2'!D16),0,'IFA2'!D16)\"\n\"IF(F17<F18,F17,F18)\"\n\"IF('Data Entry'!D27<400,400,'Data Entry'!D27)\"\n\"IF('Data Entry'!D27<400,400,'Data Entry'!D27)\"\n\"'Data Entry'!G29\"\n\"'Data Entry'!G29\"\n\"F19+F23+F27+F31+F35\"\n\"F39/10000\"\n\"F45/F37\"\n\"IF(F47>35,0,35-F47)\"\n\"IF(F49=0,0,F49/35)\"\n\"F51*F43\"\n\"F43-F53\"\n\"(F43/35/F37/100)\"\n\"IF(D16=1,F19,0)\"\n\"IF(D20=1,F23,0)\"\n\"IF(D24=1,F27,0)\"\n\"IF(D28=1,F31,0)\"\n\"IF(D32=1,F35,0)\"\n\"SUM(F76:F80)\"\n\"'Data Entry'!C1\"\n\"VLOOKUP(D2,'Award#1'!A1:G272,4,FALSE)\"\n\"IF(VLOOKUP(D2,'Award#1'!A1:G272,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#1'!A1:G272,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#1'!A1:G272,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#1'!A1:G272,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#1'!A1:G272,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#1'!A1:G272,7,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#1'!A1:G272,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#1'!A1:G271,7,FALSE))\"\n\"IF(F17<F18,F17,F18)\"\n\"VLOOKUP(D2,'Award#2'!A1:G58,4,FALSE)\"\n\"IF(VLOOKUP(D2,'Award#2'!A1:G58,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#2'!A1:G58,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#2'!A1:G58,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#2'!A1:G58,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#2'!A1:G58,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#2'!A1:G58,7,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#2'!A1:G58,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#2'!A1:G58,7,FALSE))\"\n\"VLOOKUP(D2,'Award#3'!A1:G8,4,FALSE)\"\n\"IF(VLOOKUP(D2,'Award#3'!A1:G8,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#3'!A1:G8,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#3'!A1:G8,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#3'!A1:G8,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#3'!A1:G8,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#3'!A1:G8,7,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#3'!A1:G8,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#3'!A1:G8,7,FALSE))\"\n\"VLOOKUP(D2,'Award#4'!A1:G2,4,FALSE)\"\n\"IF(VLOOKUP(D2,'Award#4'!A1:G2,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#4'!A1:G2,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#4'!A1:G2,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#4'!A1:G2,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#4'!A1:G2,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#4'!A1:G2,7,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#4'!A1:G2,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#4'!A1:G2,7,FALSE))\"\n\"VLOOKUP(D2,'Award#5'!A1:G1,4,FALSE)\"\n\"IF(VLOOKUP(D2,'Award#5'!A1:G1,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#5'!A1:G1,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#5'!A1:G1,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#5'!A1:G1,6,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#5'!A1:G1,5,FALSE)=\"\"LP\"\",0,VLOOKUP(D2,'Award#5'!A1:G1,7,FALSE))\"\n\"IF(VLOOKUP(D2,'Award#5'!A1:G1,5,FALSE)=\"\"B\"\",0,VLOOKUP(D2,'Award#5'!A1:G1,7,FALSE))\"\n\"IF('Data Entry'!D27<400,400,'Data Entry'!D27)\"\n\"IF('Data Entry'!D27<400,400,'Data Entry'!D27)\"\n\"'Data Entry'!G29\"\n\"'Data Entry'!G29\"\n\"F19+F23+F27+F31+F35\"\n\"F39/10000\"\n\"F45/F37\"\n\"IF(F47>35,0,35-F47)\"\n\"IF(F49=0,0,F49/35)\"\n\"F51*F43\"\n\"F43-F53\"\n\"(F43/35/F37/100)\"\n\"IF(D16=1,F19,0)\"\n\"IF(D20=1,F23,0)\"\n\"IF(D24=1,F27,0)\"\n\"IF(D28=1,F31,0)\"\n\"IF(D32=1,F35,0)\"\n\"SUM(F72:F76)\"\n\"'Data Entry'!D16-'Data Entry'!D17\"\n\"(D14/'Data Entry'!D18)*100\"\n\"'Calc Data'!G4\"\n\"(L14/'Data Entry'!G30)*100\"\n\"'Data Entry'!D17\"\n\"(D15/'Data Entry'!D18)*100\"\n\"L30+L29+L31\"\n\"(L15/'Data Entry'!G30)*100\"\n\"D14+D15\"\n\"(F16/100)*'Data Entry'!G29\"\n\"(H16/'Data Entry'!G29)*100\"\n\"J18\"\n\"'Calc Data'!K8\"\n\"'Calc Data'!G8\"\n\"'Calc Data'!K4\"\n\"'Calc Data'!G4\"\n\"'SOF0001'!J38\"\n\"'SOF0001'!G38\"\n\"'SOF0001'!J40\"\n\"'SOF0001'!G40\"\n\"H16+H25\"\n\"'Data Entry'!G47-IFA!F53\"\n\"IFA!F57+IFA!H57\"\n\"'Existing Debt'!G53\"\n\"'Data Entry'!G47-IFA!F81-'Existing Debt'!G38\"\n\"H27-H28-H29-H30\"\n\"L27-L28-L29-L31-L30\"\n\"'Additional Aid'!G21\"\n\"H32-H33\"\n\"L34-H34\"\n\"IFA!F53\"\n\"IFA!F53\"\n\"'Existing Debt'!G57\"\n\"Homework!$J$3:$J$8\"\n\"Labs!$H$3:$H$8\"\n\"SUM(B3:G3)\"\n\"H3*100/700\"\n\"IF(I3>=89,\"\"A\"\",IF(I3>=79,\"\"B\"\",IF(I3>=69,\"\"C\"\",IF(I3>=59,\"\"D\"\",\"\"F\"\"))))\"\n\"AVERAGE(B3:H3)\"\n\"I3*60/10\"\n\"SUM(B3:F3)\"\n\"G3*140/105\"\n\"SUM(C2:D2)\"\n\"+D2+C2\"\n\"SUM(B2:N2)\"\n\"IF(O2>359,4,IF(O2>343,3.5,IF(O2>319,3,IF(O2>303,2.5,IF(O2>279,2,IF(O2>263,1.5,IF(O2>239,1)))))))\"\n\"SUM(C3:N3)\"\n\"  0.7*X3 + 0.3*Q3\"\n\"IF(R3>=95,\"\"A\"\",IF(R3>=90,\"\"A-\"\",IF(R3>=85,\"\"B+\"\",IF(R3>=80,\"\"B\"\",IF(R3>=75,\"\"B-\"\",IF(R3>=70,\"\"C+\"\",IF(R3>=65,\"\"C\"\",\"\"??\"\")))))))\"\n\"O3 - SMALL(C3:N3,1) - SMALL(C3:N3,2)\"\n\"SUM(B2:AC2)+SUM(AG2:AU2)+SUM(AY2:AZ2)+SUM(BB2)\"\n\"$A$1\"\n\"$F$1\"\n\"SUM(B16:AC16)+SUM(AG16:AU16)+SUM(AY16:AZ16)\"\n\" $AG$3\"\n\" $AH$3\"\n\" $AI$3\"\n\" $AJ$3\"\n\" $AK$3\"\n\" $AL$3\"\n\" $AM$3\"\n\" $AN$3\"\n\" $AO$3\"\n\" $AP$3\"\n\" $AQ$3\"\n\" $AR$3\"\n\" $AS$3\"\n\" $AT$3\"\n\" $AU$3\"\n\" $AV$3\"\n\" $AW$3\"\n\"SUM(F22:F28)\"\n\"SUM($F$7:$F$13)\"\n\"SUM($N$7:$N$13)\"\n\"SUM($F$19:$F$25)\"\n\"SUM($N$19:$N$25)\"\n\"SUM($V$19:$V$25)\"\n\"SUM($F$31:$F$37)\"\n\"SUM($N$31:$N$37)\"\n\"SUM($V$31:$V$37)\"\n\"SUM($F$43:$F$49)\"\n\"SUM($N$43:$N$49)\"\n\"SUM($V$43:$V$49)\"\n\"SUM($F$55:$F$61)\"\n\"SUM($N$55:$N$61)\"\n\"SUM($V$55:$V$61)\"\n\"SUM($F$67:$F$73)\"\n\"IF(G6=\"\"\"\",0,F6)\"\n\"SUM($F$6:$F$12)\"\n\"SUM(I6:I12)\"\n\"SUM($O$6:$O$12)\"\n\"Calcs!$J$76\"\n\"Calcs!$E$148\"\n\"SUM($F$18:$F$24)\"\n\"SUM($O$18:$O$24)\"\n\"SUM($F$30:$F$36)\"\n\"SUM($O$30:$O$36)\"\n\"SUM($F$42:$F$48)\"\n\"SUM($O$42:$O$48)\"\n\"Calcs!$K$156\"\n\"Calcs!$M$156/Calcs!$K$156\"\n\"SUM($F$54:$F$60)\"\n\"SUM($O$54:$O$60)\"\n\"SUM(G98,P86,G86,P74,G74,G62,P62,P50,G50,G38,P38,P26,G26,G14,P14)\"\n\"SUM(G98,P86,G86,P74,G74,G62,P62,P50,G50,G38,P38,P26,G26,G14,P14)\"\n\"SUM(G98,P86,G86,P74,G74,G62,P62,P50,G50,G38,P38,P26,G26,G14,P14)\"\n\"Calcs!$M$153/Calcs!$K$153\"\n\"SUM($F$66:$F$72)\"\n\"SUM($O$66:$O$72)\"\n\"SUM(F14,O14,F26,O26,F38,O38,F50,O50,F62,O62,F74,O74,F86,O86,F98)\"\n\"SUM(F14,O14,F26,O26,F38,O38,F50,O50,F62,O62,F74,O74,F86,O86,F98)\"\n\"SUM(F14,O14,F26,O26,F38,O38,F50,O50,F62,O62,F74,O74,F86,O86,F98)\"\n\"SUM($F$78:$F$84)\"\n\"SUM($O$78:$O$84)\"\n\"SUM($F$90:$F$96)\"\n\"IF(OR(B7=\"\"AP\"\",B7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$6,0)\"\n\"IF(B8=0,0,I3)\"\n\"IF('My 4-Year Plan with GPA'!$G$6=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$6)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$7=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$7)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$8=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$8)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$9=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$9)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$10=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$10)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$11=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$11)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$12=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$12)))))))\"\n\"IF(OR(C7=\"\"AP\"\",C7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$7,0)\"\n\"IF(C8=0,0,I4)\"\n\"IF(AND(B7=\"\"A\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"AP\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"M\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"GE\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"TE\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"W\"\",B6<>0),B6)\"\n\"IF(AND(B7=\"\"O\"\",B6<>0),B6)\"\n\"IF(B7=\"\"A\"\",B8)\"\n\"IF(B7=\"\"AP\"\",B8)\"\n\"IF(B7=\"\"M\"\",B8)\"\n\"IF(B7=\"\"GE\"\",B8)\"\n\"IF(B7=\"\"TE\"\",B8)\"\n\"IF(B7=\"\"W\"\",B8)\"\n\"IF(B7=\"\"O\"\",B8)\"\n\"IF('My 4-Year Plan with GPA'!$G$6=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$6,IF('My 4-Year Plan with GPA'!$G$6=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$7=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$7,IF('My 4-Year Plan with GPA'!$G$7=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$8=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$8,IF('My 4-Year Plan with GPA'!$G$8=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$9=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$9,IF('My 4-Year Plan with GPA'!$G$9=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$10=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$10,IF('My 4-Year Plan with GPA'!$G$10=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$11=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$11,IF('My 4-Year Plan with GPA'!$G$11=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$12=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$12,IF('My 4-Year Plan with GPA'!$G$12=\"\"e\"\",0,)))))\"\n\"IF(OR(D7=\"\"AP\"\",D7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$8,0)\"\n\"IF(D8=0,0,I5)\"\n\"IF(AND(C7=\"\"A\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"AP\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"M\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"GE\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"TE\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"W\"\",C6<>0),C6)\"\n\"IF(AND(C7=\"\"O\"\",C6<>0),C6)\"\n\"IF(C7=\"\"A\"\",C8)\"\n\"IF(C7=\"\"AP\"\",C8)\"\n\"IF(C7=\"\"M\"\",C8)\"\n\"IF(C7=\"\"GE\"\",C8)\"\n\"IF(C7=\"\"TE\"\",C8)\"\n\"IF(C7=\"\"W\"\",C8)\"\n\"IF(C7=\"\"O\"\",C8)\"\n\"SUM(B4:B5)\"\n\"IF(OR(E7=\"\"AP\"\",E7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$9,0)\"\n\"IF(E8=0,0,I6)\"\n\"IF(AND(D7=\"\"A\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"AP\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"M\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"GE\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"TE\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"W\"\",D6<>0),D6)\"\n\"IF(AND(D7=\"\"O\"\",D6<>0),D6)\"\n\"IF(D7=\"\"A\"\",D8)\"\n\"IF(D7=\"\"AP\"\",D8)\"\n\"IF(D7=\"\"M\"\",D8)\"\n\"IF(D7=\"\"GE\"\",D8)\"\n\"IF(D7=\"\"TE\"\",D8)\"\n\"IF(D7=\"\"W\"\",D8)\"\n\"IF(D7=\"\"O\"\",D8)\"\n\"'My 4-Year Plan with GPA'!$E$6\"\n\"'My 4-Year Plan with GPA'!$E$7\"\n\"'My 4-Year Plan with GPA'!$E$8\"\n\"'My 4-Year Plan with GPA'!$E$9\"\n\"'My 4-Year Plan with GPA'!$E$10\"\n\"'My 4-Year Plan with GPA'!$E$11\"\n\"'My 4-Year Plan with GPA'!$E$12\"\n\"IF(OR(F7=\"\"AP\"\",F7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$10,0)\"\n\"IF(F8=0,0,I7)\"\n\"IF(AND(E7=\"\"A\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"AP\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"M\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"GE\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"TE\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"W\"\",E6<>0),E6)\"\n\"IF(AND(E7=\"\"O\"\",E6<>0),E6)\"\n\"IF(E7=\"\"A\"\",E8)\"\n\"IF(E7=\"\"AP\"\",E8)\"\n\"IF(E7=\"\"M\"\",E8)\"\n\"IF(E7=\"\"GE\"\",E8)\"\n\"IF(E7=\"\"TE\"\",E8)\"\n\"IF(E7=\"\"W\"\",E8)\"\n\"IF(E7=\"\"O\"\",E8)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$6=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$6=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$6=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$6)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$7=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$7=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$7=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$7)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$8=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$8=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$8=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$8)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$9=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$9=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$9=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$9)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$10=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$10=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$10=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$10)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$11=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$11=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$11=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$11)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$12=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$12=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$12=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$12)\"\n\"IF(OR(G7=\"\"AP\"\",G7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$11,0)\"\n\"IF(G8=0,0,I8)\"\n\"IF(AND(F7=\"\"A\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"AP\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"M\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"GE\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"TE\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"W\"\",F6<>0),F6)\"\n\"IF(AND(F7=\"\"O\"\",F6<>0),F6)\"\n\"IF(F7=\"\"A\"\",F8)\"\n\"IF(F7=\"\"AP\"\",F8)\"\n\"IF(F7=\"\"M\"\",F8)\"\n\"IF(F7=\"\"GE\"\",F8)\"\n\"IF(F7=\"\"TE\"\",F8)\"\n\"IF(F7=\"\"W\"\",F8)\"\n\"IF(F7=\"\"O\"\",F8)\"\n\"SUM(B6:H6)\"\n\"IF(OR(H7=\"\"AP\"\",H7=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$12,0)\"\n\"IF(H8=0,0,I9)\"\n\"IF(AND(G7=\"\"A\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"AP\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"M\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"GE\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"TE\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"W\"\",G6<>0),G6)\"\n\"IF(AND(G7=\"\"O\"\",G6<>0),G6)\"\n\"IF(G7=\"\"A\"\",G8)\"\n\"IF(G7=\"\"AP\"\",G8)\"\n\"IF(G7=\"\"M\"\",G8)\"\n\"IF(G7=\"\"GE\"\",G8)\"\n\"IF(G7=\"\"TE\"\",G8)\"\n\"IF(G7=\"\"W\"\",G8)\"\n\"IF(G7=\"\"O\"\",G8)\"\n\"SUM(B8:H8)\"\n\"H9/G10\"\n\"IF(AND(H7=\"\"A\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"AP\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"M\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"GE\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"TE\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"W\"\",H6<>0),H6)\"\n\"IF(AND(H7=\"\"O\"\",H6<>0),H6)\"\n\"IF(H7=\"\"A\"\",H8)\"\n\"IF(H7=\"\"AP\"\",H8)\"\n\"IF(H7=\"\"M\"\",H8)\"\n\"IF(H7=\"\"GE\"\",H8)\"\n\"IF(H7=\"\"TE\"\",H8)\"\n\"IF(H7=\"\"W\"\",H8)\"\n\"IF(H7=\"\"O\"\",H8)\"\n\"IF(OR(B16=\"\"AP\"\",B16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$6,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$6=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$6)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$7=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$7)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$8=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$8)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$9=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$9)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$10=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$10)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$11=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$11)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$12=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$12)))))))\"\n\"IF(OR(C16=\"\"AP\"\",C16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$7,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$6=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$6,IF('My 4-Year Plan with GPA'!$P$6=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$7=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$7,IF('My 4-Year Plan with GPA'!$P$7=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$8=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$8,IF('My 4-Year Plan with GPA'!$P$8=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$9=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$9,IF('My 4-Year Plan with GPA'!$P$9=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$10=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$10,IF('My 4-Year Plan with GPA'!$P$10=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$11=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$11,IF('My 4-Year Plan with GPA'!$P$11=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$12=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$12,IF('My 4-Year Plan with GPA'!$P$12=\"\"e\"\",0,)))))\"\n\"IF(OR(D16=\"\"AP\"\",D16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$8,0)\"\n\"IF(OR(E16=\"\"AP\"\",E16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$9,0)\"\n\"'My 4-Year Plan with GPA'!$N$6\"\n\"'My 4-Year Plan with GPA'!$N$7\"\n\"'My 4-Year Plan with GPA'!$N$8\"\n\"'My 4-Year Plan with GPA'!$N$9\"\n\"'My 4-Year Plan with GPA'!$N$10\"\n\"'My 4-Year Plan with GPA'!$N$11\"\n\"'My 4-Year Plan with GPA'!$N$12\"\n\"IF(OR(F16=\"\"AP\"\",F16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$10,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$6=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$6=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$6=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$6)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$7=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$7=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$7=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$7)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$8=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$8=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$8=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$8)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$9=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$9=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$9=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$9)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$10=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$10=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$10=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$10)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$11=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$11=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$11=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$11)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$12=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$12=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$12=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$12)\"\n\"IF(OR(G16=\"\"AP\"\",G16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$11,0)\"\n\"IF(OR(H16=\"\"AP\"\",H16=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$12,0)\"\n\"IF(OR(B25=\"\"AP\"\",B25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$18,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$18=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$18)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$19=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$19)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$20=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$20)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$21=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$21)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$22=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$22)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$23=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$23)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$24=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$24)))))))\"\n\"IF(OR(C25=\"\"AP\"\",C25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$19,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$18=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$18,IF('My 4-Year Plan with GPA'!$G$18=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$19=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$19,IF('My 4-Year Plan with GPA'!$G$19=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$20=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$20,IF('My 4-Year Plan with GPA'!$G$20=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$21=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$21,IF('My 4-Year Plan with GPA'!$G$21=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$22=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$22,IF('My 4-Year Plan with GPA'!$G$22=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$23=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$23,IF('My 4-Year Plan with GPA'!$G$23=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$24=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$24,IF('My 4-Year Plan with GPA'!$G$24=\"\"e\"\",0,)))))\"\n\"IF(OR(D25=\"\"AP\"\",D25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$20,0)\"\n\"IF(OR(E25=\"\"AP\"\",E25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$21,0)\"\n\"'My 4-Year Plan with GPA'!$E$18\"\n\"'My 4-Year Plan with GPA'!$E$19\"\n\"'My 4-Year Plan with GPA'!$E$20\"\n\"'My 4-Year Plan with GPA'!$E$21\"\n\"'My 4-Year Plan with GPA'!$E$22\"\n\"'My 4-Year Plan with GPA'!$E$23\"\n\"'My 4-Year Plan with GPA'!$E$24\"\n\"IF(OR(F25=\"\"AP\"\",F25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$22,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$18=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$18=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$18=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$18)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$19=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$19=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$19=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$19)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$20=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$20=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$20=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$20)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$21=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$21=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$21=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$21)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$22=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$22=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$22=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$22)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$23=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$23=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$23=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$23)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$24=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$24=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$24=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$24)\"\n\"IF(OR(G25=\"\"AP\"\",G25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$23,0)\"\n\"IF(OR(H25=\"\"AP\"\",H25=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$24,0)\"\n\"IF(OR(B34=\"\"AP\"\",B34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$18,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$18=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$18)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$19=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$19)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$20=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$20)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$21=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$21)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$22=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$22,IF('My 4-Year Plan with GPA'!$P$22=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$22)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$23=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$23)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$24=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$24)))))))\"\n\"IF(OR(C34=\"\"AP\"\",C34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$19,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$18=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$18,IF('My 4-Year Plan with GPA'!$P$18=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$19=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$19,IF('My 4-Year Plan with GPA'!$P$19=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$20=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$20,IF('My 4-Year Plan with GPA'!$P$20=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$21=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$21,IF('My 4-Year Plan with GPA'!$P$21=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$23=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$23,IF('My 4-Year Plan with GPA'!$P$23=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$24=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$24,IF('My 4-Year Plan with GPA'!$P$24=\"\"e\"\",0,)))))\"\n\"IF(OR(D34=\"\"AP\"\",D34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$20,0)\"\n\"IF(OR(E34=\"\"AP\"\",E34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$21,0)\"\n\"'My 4-Year Plan with GPA'!$N$18\"\n\"'My 4-Year Plan with GPA'!$N$19\"\n\"'My 4-Year Plan with GPA'!$N$20\"\n\"'My 4-Year Plan with GPA'!$N$21\"\n\"'My 4-Year Plan with GPA'!$N$22\"\n\"'My 4-Year Plan with GPA'!$N$23\"\n\"'My 4-Year Plan with GPA'!$N$24\"\n\"IF(OR(F34=\"\"AP\"\",F34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$22,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$18=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$18=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$18=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$18)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$19=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$19=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$19=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$19)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$20=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$20=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$20=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$20)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$21=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$21=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$21=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$21)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$22=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$22=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$22=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$22)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$23=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$23=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$23=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$23)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$24=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$24=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$24=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$24)\"\n\"IF(OR(G34=\"\"AP\"\",G34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$23,0)\"\n\"IF(OR(H34=\"\"AP\"\",H34=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$24,0)\"\n\"IF(OR(B43=\"\"AP\"\",B43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$30,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$30=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$30)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$31=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$31)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$32=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$32)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$33=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$33)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$34=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$34)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$35=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$35)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$36=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$36)))))))\"\n\"IF(OR(C43=\"\"AP\"\",C43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$31,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$30=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$30,IF('My 4-Year Plan with GPA'!$G$30=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$31=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$31,IF('My 4-Year Plan with GPA'!$G$31=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$32=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$32,IF('My 4-Year Plan with GPA'!$G$32=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$33=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$33,IF('My 4-Year Plan with GPA'!$G$33=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$34=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$34,IF('My 4-Year Plan with GPA'!$G$34=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$35=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$35,IF('My 4-Year Plan with GPA'!$G$35=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$36=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$36,IF('My 4-Year Plan with GPA'!$G$36=\"\"e\"\",0,)))))\"\n\"IF(OR(D43=\"\"AP\"\",D43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$32,0)\"\n\"IF(OR(E43=\"\"AP\"\",E43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$33,0)\"\n\"'My 4-Year Plan with GPA'!$E$30\"\n\"'My 4-Year Plan with GPA'!$E$31\"\n\"'My 4-Year Plan with GPA'!$E$32\"\n\"'My 4-Year Plan with GPA'!$E$33\"\n\"'My 4-Year Plan with GPA'!$E$34\"\n\"'My 4-Year Plan with GPA'!$E$35\"\n\"'My 4-Year Plan with GPA'!$E$36\"\n\"IF(OR(F43=\"\"AP\"\",F43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$34,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$30=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$30=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$30=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$30)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$31=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$31=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$31=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$31)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$32=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$32=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$32=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$32)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$33=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$33=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$33=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$33)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$34=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$34=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$34=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$34)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$35=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$35=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$35=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$35)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$36=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$36=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$36=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$36)\"\n\"IF(OR(G43=\"\"AP\"\",G43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$35,0)\"\n\"IF(OR(H43=\"\"AP\"\",H43=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$36,0)\"\n\"IF(OR(B52=\"\"AP\"\",B52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$30,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$30=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$30)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$31=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$31)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$32=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$32)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$33=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$33)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$34=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$34)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$35=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$35)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$36=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$36)))))))\"\n\"IF(OR(C52=\"\"AP\"\",C52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$31,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$30=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$30,IF('My 4-Year Plan with GPA'!$P$30=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$31=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$31,IF('My 4-Year Plan with GPA'!$P$31=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$32=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$32,IF('My 4-Year Plan with GPA'!$P$32=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$33=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$33,IF('My 4-Year Plan with GPA'!$P$33=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$34=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$34,IF('My 4-Year Plan with GPA'!$P$34=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$35=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$35,IF('My 4-Year Plan with GPA'!$P$35=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$36=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$36,IF('My 4-Year Plan with GPA'!$P$36=\"\"e\"\",0,)))))\"\n\"IF(OR(D52=\"\"AP\"\",D52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$32,0)\"\n\"IF(OR(E52=\"\"AP\"\",E52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$33,0)\"\n\"'My 4-Year Plan with GPA'!$N$30\"\n\"'My 4-Year Plan with GPA'!$N$31\"\n\"'My 4-Year Plan with GPA'!$N$32\"\n\"'My 4-Year Plan with GPA'!$N$33\"\n\"'My 4-Year Plan with GPA'!$N$34\"\n\"'My 4-Year Plan with GPA'!$N$35\"\n\"'My 4-Year Plan with GPA'!$N$36\"\n\"IF(OR(F52=\"\"AP\"\",F52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$34,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$30=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$30=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$30=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$30)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$31=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$31=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$31=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$31)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$32=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$32=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$32=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$32)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$33=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$33=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$33=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$33)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$34=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$34=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$34=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$34)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$35=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$35=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$35=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$35)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$36=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$36=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$36=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$36)\"\n\"IF(OR(G52=\"\"AP\"\",G52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$35,0)\"\n\"IF(OR(H52=\"\"AP\"\",H52=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$36,0)\"\n\"IF(OR(B62=\"\"AP\"\",B62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$42,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$42=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$42)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$43=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$43)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$44=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$44)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$45=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$45)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$46=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$46)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$47=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$47)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$48=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$48)))))))\"\n\"IF(OR(C62=\"\"AP\"\",C62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$43,0)\"\n\"IF('My 4-Year Plan with GPA'!$G$42=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$42,IF('My 4-Year Plan with GPA'!$G$42=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$43=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$43,IF('My 4-Year Plan with GPA'!$G$43=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$44=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$44,IF('My 4-Year Plan with GPA'!$G$44=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$45=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$45,IF('My 4-Year Plan with GPA'!$G$45=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$46=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$46,IF('My 4-Year Plan with GPA'!$G$46=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$47=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$47,IF('My 4-Year Plan with GPA'!$G$47=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$48=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$48,IF('My 4-Year Plan with GPA'!$G$48=\"\"e\"\",0,)))))\"\n\"IF(OR(D62=\"\"AP\"\",D62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$44,0)\"\n\"IF(OR(E62=\"\"AP\"\",E62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$45,0)\"\n\"'My 4-Year Plan with GPA'!$E$42\"\n\"'My 4-Year Plan with GPA'!$E$43\"\n\"'My 4-Year Plan with GPA'!$E$44\"\n\"'My 4-Year Plan with GPA'!$E$45\"\n\"'My 4-Year Plan with GPA'!$E$46\"\n\"'My 4-Year Plan with GPA'!$E$47\"\n\"'My 4-Year Plan with GPA'!$E$48\"\n\"IF(OR(F62=\"\"AP\"\",F62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$46,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$42=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$42=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$42=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$42)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$43=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$43=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$43=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$43)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$44=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$44=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$44=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$44)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$45=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$45=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$45=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$45)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$46=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$46=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$46=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$46)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$47=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$47=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$47=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$47)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$48=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$48=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$48=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$48)\"\n\"IF(OR(G62=\"\"AP\"\",G62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$47,0)\"\n\"IF(OR(H62=\"\"AP\"\",H62=\"\"A\"\"),'My 4-Year Plan with GPA'!$F$48,0)\"\n\"IF(OR(B72=\"\"AP\"\",B72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$42,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$42=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$42)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$43=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$43)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$44=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$44)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$45=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$45)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$46=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$46)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$47=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$47)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$48=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$48)))))))\"\n\"IF(OR(C72=\"\"AP\"\",C72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$43,0)\"\n\"IF('My 4-Year Plan with GPA'!$P$42=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$42,IF('My 4-Year Plan with GPA'!$P$42=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$43=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$43,IF('My 4-Year Plan with GPA'!$P$43=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$44=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$44,IF('My 4-Year Plan with GPA'!$P$44=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$45=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$45,IF('My 4-Year Plan with GPA'!$P$45=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$46=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$46,IF('My 4-Year Plan with GPA'!$P$46=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$47=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$47,IF('My 4-Year Plan with GPA'!$P$47=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$48=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$48,IF('My 4-Year Plan with GPA'!$P$48=\"\"e\"\",0,)))))\"\n\"IF(OR(D72=\"\"AP\"\",D72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$44,0)\"\n\"IF(OR(E72=\"\"AP\"\",E72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$45,0)\"\n\"'My 4-Year Plan with GPA'!$N$42\"\n\"'My 4-Year Plan with GPA'!$N$43\"\n\"'My 4-Year Plan with GPA'!$N$44\"\n\"'My 4-Year Plan with GPA'!$N$45\"\n\"'My 4-Year Plan with GPA'!$N$46\"\n\"'My 4-Year Plan with GPA'!$N$47\"\n\"'My 4-Year Plan with GPA'!$N$48\"\n\"IF(OR(F72=\"\"AP\"\",F72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$46,0)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$42=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$42=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$42=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$42)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$43=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$43=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$43=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$43)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$44=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$44=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$44=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$44)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$45=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$45=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$45=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$45)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$46=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$46=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$46=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$46)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$47=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$47=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$47=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$47)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$48=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$48=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$48=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$48)\"\n\"IF(OR(G72=\"\"AP\"\",G72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$47,0)\"\n\"IF(OR(H72=\"\"AP\"\",H72=\"\"A\"\"),'My 4-Year Plan with GPA'!$O$48,0)\"\n\"SUM(I3:I74)\"\n\"IF('My 4-Year Plan with GPA'!$G$54=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$54)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$55=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$55)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$56=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$56)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$57=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$57)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$58=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$58)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$59=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$59)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$60=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$60)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$54=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$54,IF('My 4-Year Plan with GPA'!$G$54=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$55=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$55,IF('My 4-Year Plan with GPA'!$G$55=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$56=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$56,IF('My 4-Year Plan with GPA'!$G$56=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$57=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$57,IF('My 4-Year Plan with GPA'!$G$57=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$58=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$58,IF('My 4-Year Plan with GPA'!$G$58=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$59=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$59,IF('My 4-Year Plan with GPA'!$G$59=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$60=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$60,IF('My 4-Year Plan with GPA'!$G$60=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$E$54\"\n\"'My 4-Year Plan with GPA'!$E$55\"\n\"'My 4-Year Plan with GPA'!$E$56\"\n\"'My 4-Year Plan with GPA'!$E$57\"\n\"'My 4-Year Plan with GPA'!$E$58\"\n\"'My 4-Year Plan with GPA'!$E$59\"\n\"'My 4-Year Plan with GPA'!$E$60\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$54=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$54=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$54=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$54)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$55=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$55=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$55=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$55)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$56=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$56=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$56=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$56)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$57=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$57=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$57=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$57)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$58=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$58=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$58=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$58)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$59=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$59=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$59=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$59)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$60=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$60=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$60=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$60)\"\n\"IF('My 4-Year Plan with GPA'!$P$54=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$54)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$55=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$55)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$56=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$56)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$57=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$57)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$58=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$58)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$59=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$59)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$60=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$60)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$54=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$54,IF('My 4-Year Plan with GPA'!$P$54=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$55=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$55,IF('My 4-Year Plan with GPA'!$P$55=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$56=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$56,IF('My 4-Year Plan with GPA'!$P$56=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$57=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$57,IF('My 4-Year Plan with GPA'!$P$57=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$58=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$58,IF('My 4-Year Plan with GPA'!$P$58=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$59=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$59,IF('My 4-Year Plan with GPA'!$P$59=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$60=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$60,IF('My 4-Year Plan with GPA'!$P$60=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$N$54\"\n\"'My 4-Year Plan with GPA'!$N$55\"\n\"'My 4-Year Plan with GPA'!$N$56\"\n\"'My 4-Year Plan with GPA'!$N$57\"\n\"'My 4-Year Plan with GPA'!$N$58\"\n\"'My 4-Year Plan with GPA'!$N$59\"\n\"'My 4-Year Plan with GPA'!$N$60\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$54=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$54=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$54=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$54)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$55=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$55=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$55=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$55)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$56=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$56=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$56=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$56)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$57=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$57=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$57=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$57)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$58=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$58=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$58=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$58)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$59=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$59=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$59=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$59)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$60=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$60=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$60=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$60)\"\n\"IF('My 4-Year Plan with GPA'!$G$66=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$66)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$67=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$67)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$68=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$68)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$69=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$69)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$70=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$70)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$71=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$71)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$72=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$72)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$66=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$G$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$G$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"d\"\",1*'My 4-Year Plan with GPA'!$G$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$G$66,IF('My 4-Year Plan with GPA'!$G$66=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$67=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$67,IF('My 4-Year Plan with GPA'!$G$67=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$68=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$68,IF('My 4-Year Plan with GPA'!$G$68=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$69=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$69,IF('My 4-Year Plan with GPA'!$G$69=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$70=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$70,IF('My 4-Year Plan with GPA'!$G$70=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$71=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$71,IF('My 4-Year Plan with GPA'!$G$71=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$72=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$72,IF('My 4-Year Plan with GPA'!$G$72=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$E$66\"\n\"'My 4-Year Plan with GPA'!$E$67\"\n\"'My 4-Year Plan with GPA'!$E$68\"\n\"'My 4-Year Plan with GPA'!$E$69\"\n\"'My 4-Year Plan with GPA'!$E$70\"\n\"'My 4-Year Plan with GPA'!$E$71\"\n\"'My 4-Year Plan with GPA'!$E$72\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$66=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$66=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$66=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$66)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$67=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$67=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$67=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$67)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$68=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$68=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$68=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$68)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$69=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$69=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$69=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$69)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$70=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$70=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$70=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$70)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$71=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$71=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$71=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$71)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$72=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$72=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$72=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$72)\"\n\"IF('My 4-Year Plan with GPA'!$P$66=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$66)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$67=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$67)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$68=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$68)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$69=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$69)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$70=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$70)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$71=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$71)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$72=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$72)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$66=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$66,IF('My 4-Year Plan with GPA'!$P$66=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$67=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$67,IF('My 4-Year Plan with GPA'!$P$67=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$68=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$68,IF('My 4-Year Plan with GPA'!$P$68=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$69=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$69,IF('My 4-Year Plan with GPA'!$P$69=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$70=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$70,IF('My 4-Year Plan with GPA'!$P$70=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$71=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$71,IF('My 4-Year Plan with GPA'!$P$71=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$72=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$72,IF('My 4-Year Plan with GPA'!$P$72=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$N$66\"\n\"'My 4-Year Plan with GPA'!$N$67\"\n\"'My 4-Year Plan with GPA'!$N$68\"\n\"'My 4-Year Plan with GPA'!$N$69\"\n\"'My 4-Year Plan with GPA'!$N$70\"\n\"'My 4-Year Plan with GPA'!$N$71\"\n\"'My 4-Year Plan with GPA'!$N$72\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$66=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$66=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$66=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$66)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$67=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$67=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$67=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$67)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$68=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$68=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$68=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$68)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$69=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$69=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$69=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$69)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$70=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$70=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$70=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$70)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$71=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$71=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$71=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$71)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$72=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$72=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$72=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$72)\"\n\"IF('My 4-Year Plan with GPA'!$G$78=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$78)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$79=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$79)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$80=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$80)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$81=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$81)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$82=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$82)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$83=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$83)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$84=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$84)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$78=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$78,IF('My 4-Year Plan with GPA'!$G$78=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$79=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$79,IF('My 4-Year Plan with GPA'!$G$79=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$80=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$80,IF('My 4-Year Plan with GPA'!$G$80=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$81=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$81,IF('My 4-Year Plan with GPA'!$G$81=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$82=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$82,IF('My 4-Year Plan with GPA'!$G$82=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$83=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$83,IF('My 4-Year Plan with GPA'!$G$83=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$84=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$84,IF('My 4-Year Plan with GPA'!$G$84=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$E$78\"\n\"'My 4-Year Plan with GPA'!$E$79\"\n\"'My 4-Year Plan with GPA'!$E$80\"\n\"'My 4-Year Plan with GPA'!$E$81\"\n\"'My 4-Year Plan with GPA'!$E$82\"\n\"'My 4-Year Plan with GPA'!$E$83\"\n\"'My 4-Year Plan with GPA'!$E$84\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$78=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$78=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$78=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$78)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$79=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$79=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$79=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$79)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$80=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$80=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$80=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$80)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$81=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$81=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$81=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$81)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$82=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$82=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$82=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$82)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$83=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$83=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$83=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$83)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$84=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$84=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$84=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$84)\"\n\"IF('My 4-Year Plan with GPA'!$P$78=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$78)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$79=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$79)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$80=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$80)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$81=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$81)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$82=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$82)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$83=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$83)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$84=\"\"a\"\",4*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"b\"\",3*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"c\"\",2*'My 4-Year Plan with GPA'!$O$84)))))))\"\n\"IF('My 4-Year Plan with GPA'!$P$78=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$78,IF('My 4-Year Plan with GPA'!$P$78=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$79=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$79,IF('My 4-Year Plan with GPA'!$P$79=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$80=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$80,IF('My 4-Year Plan with GPA'!$P$80=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$81=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$81,IF('My 4-Year Plan with GPA'!$P$81=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$82=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$82,IF('My 4-Year Plan with GPA'!$P$82=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$83=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$83,IF('My 4-Year Plan with GPA'!$P$83=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$P$84=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"d\"\",1*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$O$84,IF('My 4-Year Plan with GPA'!$P$84=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$N$78\"\n\"'My 4-Year Plan with GPA'!$N$79\"\n\"'My 4-Year Plan with GPA'!$N$80\"\n\"'My 4-Year Plan with GPA'!$N$81\"\n\"'My 4-Year Plan with GPA'!$N$82\"\n\"'My 4-Year Plan with GPA'!$N$83\"\n\"'My 4-Year Plan with GPA'!$N$84\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$78=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$78=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$78=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$78)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$79=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$79=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$79=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$79)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$80=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$80=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$80=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$80)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$81=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$81=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$81=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$81)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$82=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$82=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$82=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$82)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$83=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$83=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$83=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$83)\"\n\"IF(OR('My 4-Year Plan with GPA'!$P$84=\"\"CR\"\", 'My 4-Year Plan with GPA'!$P$84=\"\"TR\"\", 'My 4-Year Plan with GPA'!$P$84=\"\"\"\"),0,'My 4-Year Plan with GPA'!$O$84)\"\n\"IF('My 4-Year Plan with GPA'!$G$90=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$90)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$91=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$91)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$92=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$92)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$93=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$93)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$94=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$94)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$95=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$95)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$96=\"\"a\"\",4*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"a-\"\",3.7*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"b+\"\",3.3*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"b\"\",3*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"b-\"\",2.7*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"C+\"\",2.3*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"c\"\",2*'My 4-Year Plan with GPA'!$F$96)))))))\"\n\"IF('My 4-Year Plan with GPA'!$G$90=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$90,IF('My 4-Year Plan with GPA'!$G$90=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$91=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$91,IF('My 4-Year Plan with GPA'!$G$91=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$92=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$92,IF('My 4-Year Plan with GPA'!$G$92=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$93=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$93,IF('My 4-Year Plan with GPA'!$G$93=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$94=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$94,IF('My 4-Year Plan with GPA'!$G$94=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$95=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$95,IF('My 4-Year Plan with GPA'!$G$95=\"\"e\"\",0,)))))\"\n\"IF('My 4-Year Plan with GPA'!$G$96=\"\"c-\"\",1.7*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"d+\"\",1.3*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"d\"\",1*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"d-\"\",0.7*'My 4-Year Plan with GPA'!$F$96,IF('My 4-Year Plan with GPA'!$G$96=\"\"e\"\",0,)))))\"\n\"'My 4-Year Plan with GPA'!$E$90\"\n\"'My 4-Year Plan with GPA'!$E$91\"\n\"'My 4-Year Plan with GPA'!$E$92\"\n\"'My 4-Year Plan with GPA'!$E$93\"\n\"'My 4-Year Plan with GPA'!$E$94\"\n\"'My 4-Year Plan with GPA'!$E$95\"\n\"'My 4-Year Plan with GPA'!$E$96\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$90=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$90=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$90=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$90)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$91=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$91=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$91=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$91)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$92=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$92=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$92=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$92)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$93=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$93=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$93=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$93)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$94=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$94=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$94=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$94)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$95=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$95=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$95=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$95)\"\n\"IF(OR('My 4-Year Plan with GPA'!$G$96=\"\"CR\"\", 'My 4-Year Plan with GPA'!$G$96=\"\"TR\"\", 'My 4-Year Plan with GPA'!$G$96=\"\"\"\"),0,'My 4-Year Plan with GPA'!$F$96)\"\n\"S147\"\n\"S147+T147\"\n\"K147\"\n\"SUM(K4:K143)\"\n\"A150/A147\"\n\"K147+L147\"\n\"T147\"\n\"SUM(E146,E154,E162)\"\n\"L147\"\n\"(K147+M147+O147)/(S147+U147+W147)\"\n\"A150/A147\"\n\"SUM(E146,E154,E158,E162,E166,E170)\"\n\"SUM(E147,E155,E159,E163,E167,E171)\"\n\"U147\"\n\"M147\"\n\"E155/E154\"\n\"(K147+M147+N147+O147+P147+Q147)/(S147+U147+V147+W147+X147+Y147)\"\n\"SUM(E146,E154,E162)\"\n\"SUM(E147,E155,E163)\"\n\"V147\"\n\"N147\"\n\"W147\"\n\"O147\"\n\"X147\"\n\"P147\"\n\"Y147\"\n\"Q147\"\n\"MEDIAN(B6:B35)\"\n\"IF((CO11+CO12+CO13)>0,(ROUND(((CO11*AL60)+(CO12*BK60)+(CO13*CI64))/(CO11+CO12+CO13),0)),\"\"\"\")\"\n\"+IF((CO11+CO12+CO13)<1,\"\"\"\",IF((CO11+CO12+CO13)<100,\"\"*\"\",\"\"\"\"))\"\n\"SUM(U18:U22)\"\n\"SUM(BS18:BS22)\"\n\"SUM(BZ18:BZ23)\"\n\"IF(\"\"YES\"\"=AE26,\"\"\"\",\"\"Enter counts (including zero, if applicable) in the blue boxes above.\"\")\"\n\"IF(COUNT(U18:U22,V18:V22,X18:X22,Y18:Y22,AE18:AE22,AG18:AG34)<29.5,\"\"NO\"\",\"\"YES\"\")\"\n\"IF(COUNT(BS18:BS22,BT18:BT22,BV18:BV22,BW18:BW22,BZ18:BZ23,CB18:CB23,CC18:CC23,CH18:CH19,CI18:CI19)<41.5,\"\"NO\"\",\"\"YES\"\")\"\n\"U18/U$23\"\n\"O32*U32\"\n\"V18/V$23\"\n\"O32*X32\"\n\"X18/X$23\"\n\"O32*AA32\"\n\"Y18/Y$23\"\n\"O32*AD32\"\n\"+AO32*AT32\"\n\"+AO32*AW32\"\n\"+AO32*AZ32\"\n\"+AO32*BC32\"\n\"BS18/BS$24\"\n\"BT18/BT$24\"\n\"BV18/BV$24\"\n\"IF(BW24=0,0,BW18/BW$24)\"\n\"IF(BW24=0,0,BW19/BW$24)\"\n\"IF(BW24=0,0,BW20/BW$24)\"\n\"IF(BW24=0,0,BW21/BW$24)\"\n\"+O36*AD36\"\n\"IF(BW24=0,0,BW22/BW$24)\"\n\"+V38*V39\"\n\"AE18/AE$23\"\n\"O32*AD51\"\n\"AG18/AG$23\"\n\"O32*AG51\"\n\"AO32*BC51\"\n\"AO32*BF51\"\n\"BZ18/BZ$24\"\n\"BN51*BS51\"\n\"CB18/CB$24\"\n\"BN51*BV51\"\n\"IF(CC24=0,0,CC18/CC$24)\"\n\"BN51*BY51\"\n\"IF(CH24=0,0,CH18/CH$24)\"\n\"CC51*CE51\"\n\"IF(CI24=0,0,CI18/CI$24)\"\n\"IF(CC24=0,0,CC19/CC$24)\"\n\"IF(CH24=0,0,CH19/CH$24)\"\n\"IF(CI24=0,0,CI19/CH$24)\"\n\"IF(CC24=0,0,CC20/CC$24)\"\n\"IF(CC24=0,0,CC21/CC$24)\"\n\"+O36*AD55\"\n\"+AO36*BC55\"\n\"IF(CC24=0,0,CC22/CC$24)\"\n\"IF(CC24=0,0,CC23/CC$24)\"\n\"SUM(AE51:AE55)\"\n\"SUM(BT51:BT56)\"\n\"IF(\"\"YES\"\"=AE26,(+V40+Y40+AB40+AE40+AE60+AH60+AJ60),0)\"\n\"IF(MAX(U23,V23,X23,Y23,AE23,AG23)<1,\"\"\"\",IF(MAX(U23,V23,X23,Y23,AE23,AG23)<100,\"\"*\"\",\"\"\"\"))\"\n\"CF66+CF64\"\n\"IF(MAX(BS24,BT24,BV24,BW24,BY24,BZ24,CB24,CC24,CH24,CI24)<1,\"\"\"\",IF(MAX(BS24,BT24,BV24,BW24,BY24,BZ24,CB24,CC24,CH24,CI24)<100,\"\"*\"\",\"\"\"\"))\"\n\"IF(CC40+CH52+CI52=0,CI66/0.65,IF(CC40=0,CI66/0.8,IF(CH52+CI52=0,CI66/0.85,CI66)))\"\n\"IF(\"\"YES\"\"=CF26,(+BT40+BW40+BZ40+CC40+BT60+BW60+BZ60+CF60+CI60),0)\"\n\"C6/C9\"\n\"C7/C9\"\n\"C8/C9\"\n\"E6/E9\"\n\"E7/E9\"\n\"E8/E9\"\n\"B5+C5+D5+E5\"\n\"(F5/$F$5)*100\"\n\"(L5/$L$5)*100\"\n\"N5+O5\"\n\"(P5/$P$5)*100\"\n\"(T5/$T$5)*100\"\n\"(V5/$V$5)*100\"\n\"SUM(G5+M5+Q5+U5+W5)\"\n\"BE6\"\n\"(Z5/$Z$5)*100\"\n\"SUM(AG6:BD6)\"\n\"BE7\"\n\"Z7+BG7\"\n\"(BH7/980)*100\"\n\"AVERAGE(AG7:AG17)\"\n\"AVERAGE(B7:B17)\"\n\"(B19/$C$5)*100\"\n\"(D19/$D$5)*100\"\n\"(F19/$F$5)*100\"\n\"(G19/$G$5)*100\"\n\"(H19/$H$5)*100\"\n\"(I19/$I$5)*100\"\n\"(J19/$J$5)*100\"\n\"(K19/$K$5)*100\"\n\"(L19/$L$5)*100\"\n\"(M19/$M$5)*100\"\n\"(N19/$N$5)*100\"\n\"(O19/$O$5)*100\"\n\"(P19/$P$5)*100\"\n\"(Q19/$Q$5)*100\"\n\"(R19/$R$5)*100\"\n\"(S19/$S$5)*100\"\n\"(T19/$T$5)*100\"\n\"(U19/$U$5)*100\"\n\"(V19/$V$5)*100\"\n\"(W19/$W$5)*100\"\n\"(X19/$X$5)*100\"\n\"(Y19/$Y$5)*100\"\n\"(Z19/$Z$5)*100\"\n\"(AA19/$AA$5)*100\"\n\"((C35)*0.01)*980\"\n\"D35-E35\"\n\"980-Z5\"\n\"(F35/G35)*100\"\n\"480-Y5\"\n\"F35-J35\"\n\"500-X5\"\n\"F35-M35\"\n\"AVERAGE(A5:A39)\"\n\"AVERAGE(#REF!)\"\n\"H2+I2\"\n\"(B2+C2+D2+E2+F2)*30/100/5+G2*15/100+J2*55/100\"\n\"IF(ROUND(J2,0)>=56,ROUND(MIN(100,K2),0),IF(H2=0,\"\"\"\",ROUND(J2,0)))\"\n\"I2\"\n\"(B23+C23+D23+E23+F23)*30/100/5+J23*70/100\"\n\"AVERAGE(B2:B23)\"\n\"(SUM(B4:F4)+SUM(G4:M4)+N4)/(COUNT(B4:F4)*100+COUNT(G4:J4)*15+COUNT(K4:M4)*30+COUNT(N4)*150)*100\"\n\"IF(O4<59.4,\"\"F\"\",IF(O4<69.4,\"\"D\"\",IF(O4<79.4,\"\"C\"\",IF(O4<89.4,\"\"B\"\",\"\"A\"\"))))\"\n\"AVERAGE(B4:B46)\"\n\"STDEV(B4:B46)\"\n\"COUNTIF(B$4:B$46,\"\">=90\"\")\"\n\"COUNTIF(N$4:N$46,\"\">=135\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<90\"\")-COUNTIF(B$4:B$46,\"\"<80\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<135\"\")-COUNTIF(N$4:N$46,\"\"<120\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<80\"\")-COUNTIF(B$4:B$46,\"\"<70\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<120\"\")-COUNTIF(N$4:N$46,\"\"<105\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<70\"\")-COUNTIF(B$4:B$46,\"\"<60\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<105\"\")-COUNTIF(N$4:N$46,\"\"<90\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<60\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<90\"\")\"\n\"E2*H2\"\n\"SUM(B5:AD5)\"\n\"+(AE7/$AH$5)*100\"\n\"47+35\"\n\"A11\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 13'!$D22\"\n\"'Environment Activities, p. 13'!#REF!\"\n\"'Environment Activities, p. 13'!$D27\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"F4/50\"\n\"G4+(50-F4)*4/7/100\"\n\"G4+(50-F4)*4/7/100\"\n\"(B4+C4+D4+E4)/40\"\n\"(B4+C4+D4+E4)/40*1/10+H4*9/10\"\n\"Calc!$N$74\"\n\"SUM(B31:B37)\"\n\"Setup!B19\"\n\"SUM(F6:O6)\"\n\"INDEX('Lab Scores'!$B$9:$B$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"INDEX('Lab Scores'!$AG$9:$AG$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"INDEX('Lab Scores'!$AF$9:$AF$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"R6/S6\"\n\"HLOOKUP(Q6,Calc!$A$4:$E$9,5,FALSE)*T6-HLOOKUP(Q6,Calc!$A$4:$E$9,6,FALSE)\"\n\"U6*S6\"\n\"INDEX('Lab Scores'!$C$9:$C$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"(V6/V$10*Setup!$B$31)+(AC6/AC$10*Setup!$B$32)+(Z6/Z$10*Setup!$B$33)+(AA6/AA$10*Setup!$B$34)+(AB6/AB$10*Setup!$B$35)+(P6/P$10*Setup!$B$36)+(D6/D$10*Setup!$B$37)\"\n\"AD6+(Y6*Setup!B$39+X6*Setup!B$41+W6*Setup!B$40)*($AD$15/3)\"\n\"LOOKUP(AE6,Calc!$A$20:$B$31)\"\n\"IF(C6=\"\"PN\"\",IF(AE6<Calc!$B$18,\"\"NP\"\",\"\"P\"\"),AF6)\"\n\"T10\"\n\"COUNT(D7:D9)\"\n\"AVERAGE(D7:D9)\"\n\"STDEVP(D7:D9)\"\n\"MAX(D7:D9)\"\n\"MIN(D7:D9)\"\n\"B4+1\"\n\"DCOUNT(Grades!$Q$5:$T$9,\"\"mean lab\"\",B3:B4)\"\n\"DCOUNT(Grades!$Q$5:$T$9,\"\"mean lab\"\",C$3:C$4)\"\n\"DAVERAGE(Grades!$Q$5:$T$9,\"\"mean lab\"\",B$3:B$4)\"\n\"DSTDEVP(Grades!$Q$5:$T$9,\"\"mean lab\"\",B$3:B$4)\"\n\"HLOOKUP(Setup!$B$35,$A$4:$E$7,4,FALSE)/B7\"\n\"HLOOKUP(Setup!$B$35,$A$4:$K$7,4,FALSE)/C7\"\n\"B8*B6-HLOOKUP(Setup!$B$35,$A$4:$K$7,3,FALSE)\"\n\"DAVERAGE(Grades!$Q$5:$U$9,\"\"adj mean lab\"\",B$3:B$4)\"\n\"DSTDEVP(Grades!$Q$5:$U$9,\"\"adj mean lab\"\",B$3:B$4)\"\n\"Grades!AE14\"\n\"Grades!AE15/3\"\n\"VLOOKUP(Setup!B22,B21:D31,3,FALSE)\"\n\"VLOOKUP(Setup!B24,B21:D31,3,FALSE)\"\n\"$B$14+($B$16-0.5-B17)*$B$15\"\n\"Calc!B71\"\n\"$B$14+($B$16-0.5-D21)*$B$15\"\n\"Calc!C71\"\n\"Calc!D71\"\n\"Calc!E71\"\n\"Calc!F71\"\n\"Calc!G71\"\n\"Calc!H71\"\n\"Calc!I71\"\n\"Calc!J71\"\n\"Calc!K71\"\n\"Calc!L71\"\n\"Calc!M71\"\n\"SUM(C20:C31)\"\n\"B39\"\n\"B40+$B38\"\n\"DCOUNTA(Grades!$D$5:$AF$9,\"\"Final\"\",B39:B40)\"\n\"DCOUNTA(Grades!$AF$5:$AF$9,\"\"Grade\"\",B69:B70)\"\n\"SUM(B71:M71)\"\n\"DCOUNTA(Grades!$AG$5:$AG$9,\"\"Grade\"\",B69:B70)\"\n\"B73*B71\"\n\"SUM(B74:M74)/N71\"\n\"B73*B72\"\n\"COUNT(D10:AE10)\"\n\"SUM(D10:AE10)\"\n\"MIN(D10:AE10)\"\n\"SUM(D6:F6)\"\n\"SUM(D6:I6)\"\n\"SUM(D6:F6)\"\n\"SUM(D6:G6)\"\n\"SUM(D30:G30)\"\n\"SUM(F16:F25)\"\n\"SUM(F5:F14)\"\n\"#REF!\"\n\"F5\"\n\"F5\"\n\"F6\"\n\"F6\"\n\"F7\"\n\"F7\"\n\"F8\"\n\"F8\"\n\"F9\"\n\"F9\"\n\"F10\"\n\"F10\"\n\"F11\"\n\"F11\"\n\"F12\"\n\"F12\"\n\"F13\"\n\"F13\"\n\"F14\"\n\"F14\"\n\"SUM(A30:S30)\"\n\"SUM(A30:S30)\"\n\"SUM('Record Grades'!E7:E31)/$F$24\"\n\"IF(A31<>\"\"\"\",HLOOKUP(A31,'Set-Up Your Grade Book'!$B$20:$L$21,2),\"\"\"\")\"\n\"(S31+Q31+O31+M31+K31+I31+G31+E31+C31+A31)/$F$25\"\n\"'Set-Up Your Grade Book'!C5\"\n\"'Set-Up Your Grade Book'!C5\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F7\"\n\"'Set-Up Your Grade Book'!F8\"\n\"'Set-Up Your Grade Book'!F9\"\n\"'Set-Up Your Grade Book'!F10\"\n\"'Set-Up Your Grade Book'!F11\"\n\"'Set-Up Your Grade Book'!F12\"\n\"'Set-Up Your Grade Book'!F13\"\n\"'Set-Up Your Grade Book'!F14\"\n\"VLOOKUP(D6,'Set-Up Your Grade Book'!$E$33:$F$44,2,1)\"\n\" (E6*'Set-Up Your Grade Book'!$F$5)+(G6*'Set-Up Your Grade Book'!$F$6)+(I6*'Set-Up Your Grade Book'!$F$7)+(K6*'Set-Up Your Grade Book'!$F$8)+(M6*'Set-Up Your Grade Book'!$F$9)+(O6*'Set-Up Your Grade Book'!$F$10)+(Q6*'Set-Up Your Grade Book'!$F$11)+(S6*'Set-Up Your Grade Book'!$F$12)+(U6*'Set-Up Your Grade Book'!$F$13)+(W6*'Set-Up Your Grade Book'!$F$14)\"\n\"IF(X6<>\"\"\"\",HLOOKUP(X6,'Set-Up Your Grade Book'!$B$20:$L$21,2),\"\"\"\")\"\n\"SUM(F23:F32)\"\n\"SUM(F40:F54)\"\n\"SUM(F5:F14)\"\n\"SUM(M5:M19)\"\n\"E5\"\n\"E5\"\n\"C6\"\n\"C6\"\n\"C7\"\n\"C7\"\n\"C8\"\n\"C8\"\n\"C9\"\n\"C9\"\n\"C10\"\n\"C10\"\n\"C11\"\n\"C11\"\n\"C12\"\n\"C12\"\n\"C13\"\n\"C13\"\n\"C14\"\n\"C14\"\n\"F5\"\n\"F5\"\n\"F6\"\n\"F7\"\n\"F8\"\n\"F9\"\n\"F10\"\n\"F11\"\n\"F12\"\n\"F13\"\n\"F14\"\n\"SUM(A35:S35)\"\n\"SUM(A35:S35)\"\n\"SUM('Record Grades'!E7:E31)/$F$29\"\n\"IF(A36<>\"\"\"\",HLOOKUP(A36,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"(S36+Q36+O36+M36+K36+I36+G36+E36+C36+A36)/$F$30\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F7\"\n\"'Set-Up Your Grade Book'!F8\"\n\"'Set-Up Your Grade Book'!F9\"\n\"'Set-Up Your Grade Book'!F10\"\n\"'Set-Up Your Grade Book'!F11\"\n\"'Set-Up Your Grade Book'!F12\"\n\"'Set-Up Your Grade Book'!F13\"\n\"'Set-Up Your Grade Book'!F14\"\n\"'Record Notebook or Quiz Grades'!U7\"\n\"VLOOKUP(D6,'Set-Up Your Grade Book'!$E$38:$F$49,2,1)\"\n\" (E6*'Set-Up Your Grade Book'!$F$5)+(G6*'Set-Up Your Grade Book'!$F$6)+(I6*'Set-Up Your Grade Book'!$F$7)+(K6*'Set-Up Your Grade Book'!$F$8)+(M6*'Set-Up Your Grade Book'!$F$9)+(O6*'Set-Up Your Grade Book'!$F$10)+(Q6*'Set-Up Your Grade Book'!$F$11)+(S6*'Set-Up Your Grade Book'!$F$12)+(U6*'Set-Up Your Grade Book'!$F$13)+(W6*'Set-Up Your Grade Book'!$F$14)\"\n\"IF(X6<>\"\"\"\",HLOOKUP(X6,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Set-Up Your Grade Book'!J5\"\n\"'Set-Up Your Grade Book'!J6\"\n\"'Set-Up Your Grade Book'!J7\"\n\"'Set-Up Your Grade Book'!J8\"\n\"'Set-Up Your Grade Book'!J9\"\n\"'Set-Up Your Grade Book'!J10\"\n\"'Set-Up Your Grade Book'!J11\"\n\"'Set-Up Your Grade Book'!J12\"\n\"'Set-Up Your Grade Book'!J13\"\n\"'Set-Up Your Grade Book'!J14\"\n\"'Set-Up Your Grade Book'!J15\"\n\"'Set-Up Your Grade Book'!J16\"\n\"'Set-Up Your Grade Book'!J17\"\n\"'Set-Up Your Grade Book'!J18\"\n\"'Set-Up Your Grade Book'!J19\"\n\"'Set-Up Your Grade Book'!M5\"\n\"'Set-Up Your Grade Book'!M6\"\n\"'Set-Up Your Grade Book'!M7\"\n\"'Set-Up Your Grade Book'!M8\"\n\"'Set-Up Your Grade Book'!M9\"\n\"'Set-Up Your Grade Book'!M10\"\n\"'Set-Up Your Grade Book'!M11\"\n\"'Set-Up Your Grade Book'!M12\"\n\"'Set-Up Your Grade Book'!M13\"\n\"'Set-Up Your Grade Book'!M14\"\n\"'Set-Up Your Grade Book'!M15\"\n\"'Set-Up Your Grade Book'!M16\"\n\"'Set-Up Your Grade Book'!M17\"\n\"'Set-Up Your Grade Book'!M18\"\n\"'Set-Up Your Grade Book'!M19\"\n\"'Set-Up Your Grade Book'!M20\"\n\"SUM(D7:R7)\"\n\"S7/$S$6*4\"\n\"IF(T7<>\"\"\"\",HLOOKUP(T7,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Record Grades'!B7\"\n\"'Set-Up Your Grade Book'!F5\"\n\"SUM(B14:B16)\"\n\"132/$B$31\"\n\"44/$C$31\"\n\"660/$D$31\"\n\"($B$14*B21)+($B$15*C21)+($B$16*D21)\"\n\"105/$B$31\"\n\"67/$C$31\"\n\"483/$D$31\"\n\"121/$B$31\"\n\"35/$C$31\"\n\"632/$D$31\"\n\"166/$B$31\"\n\"84/$C$31\"\n\"757/$D$31\"\n\"165/$B$31\"\n\"70/$C$31\"\n\"719/$D$31\"\n\"98/$B$31\"\n\"25/$C$31\"\n\"611/$D$31\"\n\"176/$B$31\"\n\"82/$C$31\"\n\"748/$D$31\"\n\"H26^2\"\n\"101/$B$31\"\n\"45/$C$31\"\n\"627/$D$31\"\n\"156/$B$31\"\n\"50/$C$31\"\n\"603/$D$31\"\n\"163/$B$31\"\n\"56/$C$31\"\n\"693/$D$31\"\n\"SUM(B21:B30)/10\"\n\"AVERAGE(B21:B30)\"\n\"B48/C48\"\n\"D6+E6+F6\"\n\"G6/H6\"\n\"A6+1\"\n\"N6/7\"\n\"L6/3\"\n\"D6+E6+F6+G6+H6+I6+J6+K6\"\n\"A6+1\"\n\"N10/8\"\n\"((D6*5)+(E6*10)+(F6*10)+(G6*25)+(H6*15)+(I6*10)+(J6*25))/100\"\n\"A6+1\"\n\"SUM(D6:D46)/41\"\n\"SUM(H6:H46)/40\"\n\"(L5+L$85)*3.33333\"\n\"(L44+L$85)*3.333333\"\n\"SUM(L4:L40)+SUM(L44:L79)\"\n\"COUNT(L4:L40)+COUNT(L44:L79)\"\n\"L81/L82\"\n\"L84-L83\"\n\"(L4+L$81)*3.333333\"\n\"SUM(L4:L37)+SUM(L41:L75)\"\n\"COUNT(L4:L37)+COUNT(L41:L75)\"\n\"L77/L78\"\n\"L80-L79\"\n\"(L4+L$84)*3.3333333\"\n\"(L41+L$84)*3.333333\"\n\"SUM(L4:L37) + SUM(L41:L77)\"\n\"COUNT(L4:L37) + COUNT(L41:L77)\"\n\"L79/L80\"\n\"L83-L82\"\n\"(L82+L84)*3.3333333\"\n\"SUM(C6:I6)\"\n\"(J6-K6)/5\"\n\"N6+P6+R6+T6+U6+V6\"\n\"(W6-X6)/3\"\n\"Y6*0.75+L6*0.25\"\n\"C5*3.33+C$40\"\n\"22+1\"\n\"(E5*3.333)+E$40\"\n\"(G5*3.33)+G$40\"\n\"D5+F5+H5\"\n\"+MIN(D5,F5,H5)\"\n\"(I5-J5)/2\"\n\"SUM(M5:S5)\"\n\"(T5-U5)/5\"\n\"B5*B$2+K5*K$2+L5*L$2+V5*V$2+W5*W$2\"\n\"A5+1\"\n\"20+3\"\n\"15+4\"\n\"18+3\"\n\"23+2\"\n\"21+1\"\n\"26+1\"\n\"20+2\"\n\"84+4\"\n\"B16*B$2+K16*K$2+L16*L$2+V16*V$2+W16*W$2+5\"\n\"19+1\"\n\"18+2\"\n\"24+2\"\n\"18+1\"\n\"23+1\"\n\"25+1\"\n\"24+1\"\n\"SUM(C5:C33)\"\n\"COUNT(C5:C33)\"\n\"C36/C37\"\n\"C38*3.33+1\"\n\"E38*3.33\"\n\"L100\"\n\"IF(ISNUMBER(K100/D100),(K100/D100),IF(ISERROR(K100/D100),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",\"\"4\"\", IF(C2=\"\"B\"\",\"\"3\"\", IF(C2=\"\"C\"\",\"\"2\"\", IF(C2=\"\"D\"\",\"\"1\"\", IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"IF(ISNUMBER(M2),M2,IF(ISERROR(M2),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",D2, IF(C2=\"\"B\"\",D2, IF(C2=\"\"C\"\",D2, IF(C2=\"\"D\"\",D2, IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"J2*D2\"\n\"SUM(D2:D99)\"\n\"SUM(L1:L99)\"\n\"L100\"\n\"IF(ISNUMBER(K100/D100),(K100/D100),IF(ISERROR(K100/D100),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",\"\"4\"\", IF(C2=\"\"B\"\",\"\"3\"\", IF(C2=\"\"C\"\",\"\"2\"\", IF(C2=\"\"D\"\",\"\"1\"\", IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"IF(ISNUMBER(M2),M2,IF(ISERROR(M2),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",D2, IF(C2=\"\"B\"\",D2, IF(C2=\"\"C\"\",D2, IF(C2=\"\"D\"\",D2, IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"J2*D2\"\n\"SUM(D2:D99)\"\n\"SUM(L1:L99)\"\n\"L100\"\n\"IF(ISNUMBER(K100/D100),(K100/D100),IF(ISERROR(K100/D100),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",\"\"4\"\", IF(C2=\"\"B\"\",\"\"3\"\", IF(C2=\"\"C\"\",\"\"2\"\", IF(C2=\"\"D\"\",\"\"1\"\", IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"IF(ISNUMBER(M2),M2,IF(ISERROR(M2),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",D2, IF(C2=\"\"B\"\",D2, IF(C2=\"\"C\"\",D2, IF(C2=\"\"D\"\",D2, IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"J2*D2\"\n\"IF(C22=\"\"A\"\",\"\"4\"\", IF(C22=\"\"B\"\",\"\"3\"\", IF(C22=\"\"C\"\",\"\"2\"\", IF(C22=\"\"D\"\",\"\"1\"\", IF(C22=\"\"F\"\",\"\"0\"\", IF(C22=FALSE,\"\" \"\"))))))\"\n\"IF(C22=\"\"A\"\",D22, IF(C22=\"\"B\"\",D22, IF(C22=\"\"C\"\",D22, IF(C22=\"\"D\"\",D22, IF(C22=\"\"F\"\",\"\"0\"\", IF(C22=FALSE,\"\" \"\"))))))\"\n\"J23*D22\"\n\"SUM(D2:D99)\"\n\"SUM(L1:L99)\"\n\"L100\"\n\"IF(ISNUMBER(K100/D100),(K100/D100),IF(ISERROR(K100/D100),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",\"\"4\"\", IF(C2=\"\"B\"\",\"\"3\"\", IF(C2=\"\"C\"\",\"\"2\"\", IF(C2=\"\"D\"\",\"\"1\"\", IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"IF(ISNUMBER(M2),M2,IF(ISERROR(M2),\"\" \"\",\"\"\"\"))\"\n\"IF(C2=\"\"A\"\",D2, IF(C2=\"\"B\"\",D2, IF(C2=\"\"C\"\",D2, IF(C2=\"\"D\"\",D2, IF(C2=\"\"F\"\",\"\"0\"\", IF(C2=FALSE,\"\" \"\"))))))\"\n\"J2*D2\"\n\"SUM(D2:D99)\"\n\"SUM(L1:L99)\"\n\"SUM(B4:I4)\"\n\"J4/$J$27*100\"\n\"SUM(L4:AD4)\"\n\"AE4/$AE$27*100\"\n\"AN4*100/60\"\n\"IF(AH4>0,(AG4+AH4)/($AG$27+$AH$27)*100,AG4/$AG$27*100)\"\n\"AF4*0.2+K4*0.15+IF(AI4>0,AI4*0.4,40)+IF(AJ4>0,AJ4/$AJ$27*25,AI4*0.25)\"\n\"VLOOKUP(AK4,$AO$5:$AP$15,2)\"\n\"AO8-4\"\n\"SUM(B27:I27)-30\"\n\"AVERAGEA(B4:B25)\"\n\"STDEVPA(B4:B25)\"\n\"MAX(B4:B25)\"\n\"SUM(E4:F4)\"\n\"SUM(R4:AX4)\"\n\"AVERAGE(B5:C5)\"\n\"G5/100*100\"\n\"LOOKUP(H5,$E$58:$E$197,$F$58:$F$197)\"\n\"(SUM(J5:O5)-(MIN(J5:O5)))/(COUNT(J5:O5)-1)\"\n\"AY5/$AY$4*100\"\n\"(D5*0.3)+(I5*0.15)+(Q5*0.1)+(BB5*0.15)+(BC5*0.2)+(BA5*0.1)\"\n\"A5\"\n\"G6/$G$4*100\"\n\"AVERAGE(J43:O43)\"\n\"(D43*0.55)+(I43*0.175)+(#REF!*0.175)+(BA43*0.1)\"\n\"#REF!/#REF!*100\"\n\"E59+1\"\n\"F119+0.1\"\n\"SUM(D2:D12)\"\n\"SUM(D16:D21)\"\n\"SUM(D2:D155)\"\n\"SUM(C2:C16)\"\n\"IF(E7>=90,\"\"A\"\", IF(E7>=80, \"\"B\"\", IF(E7 >= 70,\"\"C\"\", IF(E7>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"0.45*I7+0.3*J7+0.25*H7\"\n\"AVERAGE(L7:O7)\"\n\"10*AVERAGE(R7:AP7)\"\n\"AVERAGE(E7:E8)\"\n\"AVERAGE(N6:N8)\"\n\"(SUM(B2:L2)-MIN(B2:L2))\"\n\"(SUM(M2:S2)-MIN(M2:S2))*100/60\"\n\"Y2/35*100\"\n\"T2*15/30+U2*20/30+V2*20/30+W2*8/100+X2*7/100+Y2*30/35\"\n\"(F3+G3)*60/200\"\n\"(M107+N107)*40/14\"\n\"J3+K3\"\n\"(M152+N152)*40/20\"\n\"AVERAGE(F107:L107)\"\n\"SUM(F152:L152)/7\"\n\"COUNT(D10:EJ10)/$C$43\"\n\"SUM(D43:EJ43)\"\n\"IF(SUM(D10:D42)>0,1,\"\"\"\")\"\n\"SUM(C5:AB5)\"\n\"T2+S2+R2+O2+C2\"\n\"Attendance!AC4\"\n\"(C4*$C$2)+(O4*$O$2)+(R4*$R$2)+(S4*$S$2)+(T4*$T$2)+U4\"\n\"IF(V4>='Grading Standards'!$B$7,\"\"A\"\",IF(V4>='Grading Standards'!$B$8,\"\"A-\"\",IF(V4>='Grading Standards'!$B$9,\"\"B+\"\",IF(V4>='Grading Standards'!$B$10,\"\"B\"\",IF(V4>='Grading Standards'!$B$11,\"\"B-\"\",\"\"other\"\")))))\"\n\"IF(V4>='Grading Standards'!$B$11,\"\"other\"\",IF(V4>='Grading Standards'!$B$12,\"\"C+\"\",IF(V4>='Grading Standards'!$B$13,\"\"C\"\",IF(V4>='Grading Standards'!$B$14,\"\"C-\"\",IF(V4>='Grading Standards'!$B$15,\"\"D\"\",IF(V4>='Grading Standards'!$B$16,\"\"F\"\",\"\"other\"\"))))))\"\n\"((M5+L5+K5+J5+I5+H5+G5+F5+E5+D5)-N5)/9\"\n\"P5+Q5\"\n\"LARGE(D6:M6,10)\"\n\"AVERAGE(R5:R43)\"\n\"(B8/48)*15\"\n\"(D8/34)*30\"\n\"(F8/62)*15\"\n\"(H8/41)*30\"\n\"(J8/52)*15\"\n\"(L8/51)*30\"\n\"(P8/39)*30\"\n\"(R8/66)*15\"\n\"(T8/56)*30\"\n\"(V8/59)*15\"\n\"(X8/64)*30\"\n\"(Z8/33)*15\"\n\"SUM(C8+E8+G8+I8+K8+M8+O8+Q8+S8+U8+W8+Y8+AA8+AC8)\"\n\"AZ9\"\n\"AD8+AE8\"\n\"(AF8/$AF$8)*100\"\n\"SUM(AP9:AY9)\"\n\"AZ10\"\n\"AVERAGE(B10:B25)\"\n\"(B27/$B$8)*100\"\n\"(C27/$C$8)*100\"\n\"(D27/$D$8)*100\"\n\"(E27/$E$8)*100\"\n\"(AD27/$AD$8)*100\"\n\"(AE27/$AE$8)*100\"\n\"(AF27/$AF$8)*100\"\n\"(AG27/$AG$8)*100\"\n\"(AP27/AP9)*100\"\n\"((C43)*0.01)*515\"\n\"D43-E43\"\n\"525-AF8\"\n\"(F43/G43)*100\"\n\"210-AZ9\"\n\"(F43-J43)\"\n\"315-AD8\"\n\"F43-M43\"\n\"AVERAGE(A5:A39)\"\n\"AVERAGE(#REF!)\"\n\"AVERAGE(B5:E5)\"\n\"AVERAGE(B5:B16)\"\n\"D4+E4\"\n\"MAX(B4:B238)\"\n\"MIN(B4:B238)\"\n\"AVERAGE(B4:B238)\"\n\"STDEV(B4:B238)\"\n\"(SUM(B4:B11)+SUM(E4:E11))/COUNT(B4:B11)*0.5+SUM(C4:C11)/COUNT(C4:C11)*0.25+SUM(D4:D11)/COUNT(D4:D11)*0.25\"\n\"IF(E13<70,IF(E13<60,\"\"Failing!\"\",\"\"Danger\"\"),\"\"\"\")\"\n\"AVERAGE(C4:C32)\"\n\"MEDIAN(C4:C32)\"\n\"STDEV(C4:C32)\"\n\"AVERAGE(D2:D22)\"\n\"AVERAGE(E2:E24)\"\n\"STDEV(D2:D22)\"\n\"STDEV(E2:E24)\"\n\"MEDIAN(D2:D22)\"\n\"MEDIAN(E2:E24)\"\n\"AVERAGE(B5:B15)\"\n\"AVERAGE(B18:B29)\"\n\"AVERAGE(B31:B39)\"\n\"AVERAGE(B42:B51)\"\n\"AVERAGE(B149:B153)\"\n\"AVERAGE(B156:B158)\"\n\"AVERAGE(B187:B199)\"\n\"AVERAGE(B261:B268)\"\n\"AVERAGE(B271:B276)\"\n\"AVERAGE(B357:B360)\"\n\"AVERAGE(B396:B397)\"\n\"AVERAGE(B406:B407)\"\n\"AVERAGE(B451:B451)\"\n\"AVERAGE(B5:B14)\"\n\"AVERAGE(B17:B27)\"\n\"AVERAGE(B30:B37)\"\n\"AVERAGE(B39:B44)\"\n\"AVERAGE(B55:B61)\"\n\"AVERAGE(B75:B83)\"\n\"AVERAGE(B104:B108)\"\n\"AVERAGE(B123:B126)\"\n\"AVERAGE(B197:B208)\"\n\"AVERAGE(B354:B356)\"\n\"AVERAGE(B369:B370)\"\n\"ROUND((100*SUM(P10:R10)/SUM($P$8:$R$8))+(S10/25)*2.5,0)\"\n\"MIN(ROUND(100*SUM($W10:$BB10)/(SUM($W$8:$BB$8)),0),100)\"\n\"ROUND(100*SUM(U10)/SUM($U$8),0)\"\n\"ROUND((G10*$G$2+I10*$I$2)*(10/7.5),0)\"\n\"IF(K10>=$G$4,\"\"A\"\",IF(AND(K10>=$H$4,K10<$G$4), \"\"B\"\",IF(AND(K10>=$I$4,K10<$H$4),\"\"C\"\",IF(AND(K10>=$J$4,K10<$I$4),\"\"D\"\", IF(K10<$J$4, \"\"E\"\")))))\"\n\"ROUND((G10*$G$2+I10*$I$2+J10*$J$2),0)\"\n\"RIGHT(B45,4)\"\n\"COUNT(D10:D47)\"\n\"AVERAGE(P10:P44)\"\n\"AVERAGE(Q10:Q47)\"\n\"MEDIAN(P10:P44)\"\n\"MEDIAN(Q10:Q47)\"\n\"SUM(P10:P44)\"\n\"SUM(Q10:Q47)\"\n\"COUNT(P10:P44)\"\n\"COUNT(Q10:Q47)\"\n\"FREQUENCY(P10:P47,P59:P60)\"\n\"FREQUENCY(P10:P47,P60:P61)\"\n\"FREQUENCY(P10:P47,P61:P62)\"\n\"FREQUENCY(P10:P47,P62:P63)\"\n\"FREQUENCY(P10:P47,P63:P64)\"\n\"1*P$8\"\n\"0.899*P$8\"\n\"0.799*P$8\"\n\"0.699*P$8\"\n\"0.599*P$8\"\n\"F4/$F$24*100\"\n\"H4/$H$24*100\"\n\"J4/$J$24*100\"\n\"L4/$L$24*100\"\n\"R4/$R$24*100\"\n\"T4/$T$24*100\"\n\"P5/$P$24*100\"\n\"N8/$N$24*100\"\n\"SUM(F4:F23)\"\n\"SUM(F25:F31)\"\n\"SUM(F4:F32) - (F24 + F32)\"\n\"SUM(F33:F34)\"\n\"F39/$F$59*100\"\n\"H39/$H$59*100\"\n\"J39/$J$59*100\"\n\"L39/$L$59*100\"\n\"N39/$N$59*100\"\n\"P39/$P$59*100\"\n\"R39/$R$59*100\"\n\"T39/$T$59*100\"\n\"Grades!AB4\"\n\"FREQUENCY(B3:B9,C3:C5)\"\n\"FREQUENCY(A3:A21,E3:E15)\"\n\"SUM(B4:Z4)\"\n\"SUM(B6:AA6)\"\n\"SUM(100-(E6+G6+I6+K6+M6))\"\n\"Q26+Q22+Q18+Q14+Q10+Q6\"\n\"Q27+Q23+Q19+Q11+Q7\"\n\"SUM(F9,H9)\"\n\"SUM(B9:B13)\"\n\"SUM(B15:B17)\"\n\"SUM(B14,B18)\"\n\"SUM(H18,H14)\"\n\"SUM(D42:D43)\"\n\"SUM(D47,D44)\"\n\"SUM(F44,F47)\"\n\"'[1]97 Evals'!B11/'[1]97 Evals'!$G11\"\n\"'[1]97 Evals'!B65/'[1]97 Evals'!$H$65\"\n\"'[1]97 Evals'!B66/'[1]97 Evals'!$G66\"\n\"'[1]97 Evals'!B105/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B106/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B107/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B108/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B109/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B110/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B111/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B112/'[1]97 Evals'!$G114\"\n\"'[1]97 Evals'!B113/'[1]97 Evals'!$G114\"\n\"SUM(B7:B21)\"\n\"183629+79+838\"\n\"SUM(C7:C21)\"\n\"SUM(C7:F7)+11\"\n\"142+253+189+108\"\n\"SUM(C8:F8)+297\"\n\"2418+2630+2692+1345\"\n\"SUM(C9:F9)+289\"\n\"2533+2692+2850+1321\"\n\"SUM(C10:F10)+243\"\n\"2631+2766+2926+1321\"\n\"SUM(C11:F11)+242\"\n\"2627+2555+2820+1315\"\n\"SUM(C12:F12)+273\"\n\"2428+2559+2917+1283\"\n\"SUM(C13:F13)+251\"\n\"2534+2479+2779+1307\"\n\"SUM(C14:F14)+198\"\n\"2458+2408+2885+1299\"\n\"SUM(C15:F15)+160\"\n\"2270+2239+2485+1097\"\n\"SUM(C16:F16)+172\"\n\"2085+2062+2422+1146\"\n\"SUM(C17:F17)+233\"\n\"2534+2300+2865+1310\"\n\"SUM(C18:F18)+181\"\n\"2124+2008+2247+1129\"\n\"SUM(C19:F19)+154\"\n\"1929+1970+1951+1104\"\n\"SUM(C20:F20)+122\"\n\"1791+1714+1519+988\"\n\"SUM(C21:F21)+130+37+47+10+41+74\"\n\"2915+3367+4314+2303\"\n\"LEN(A7)\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"LEN(A5)\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"LEN(A5)\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"LEN(A4)\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"LEN(A5)\"\n\"SUM(F10:F13)\"\n\"SUM(H10:J13)\"\n\"SUM(H10:J13)\"\n\"SUM(H10:J13)\"\n\"SUM(H9:I9)\"\n\"IF(J9>0,O9/J9,\"\"\"\")\"\n\"SUM(F9:F27)\"\n\"SUM(J34:J37)\"\n\"F5*G5\"\n\"SUM(H5:H10)\"\n\"D16-D17\"\n\"IF(D19>0,D18/D19,\"\"\"\")\"\n\"IF(D19>0,PRODUCT(D20,1.25),\"\"\"\")\"\n\"SUM(G18:G29)\"\n\"H16-H30\"\n\"SUM(C23:C33)\"\n\"D18-D34\"\n\"SUM(D3:D7)\"\n\"SUM(E3:E6)\"\n\"SUM(B3:B14)\"\n\"SUM(C5:C32)\"\n\"SUM(F5:F33)\"\n\"C33 + F34\"\n\"SUM(C28:C40)\"\n\"SUM(D4:D34)\"\n\"SUM(D11:I11)\"\n\"SUM(D11:D37)\"\n\"SUM(J38:J39)\"\n\"SUM(K14:K34)\"\n\"SUM(D11:I11)\"\n\"SUM(D11:D34)\"\n\"SUM(J35:J36)\"\n\"SUM(K14:K34)\"\n\"SUM(D11:I11)\"\n\"SUM(D11:D34)\"\n\"SUM(J35:J36)\"\n\"SUM(K14:K34)\"\n\"SUM(D11:I11)\"\n\"SUM(D11:D34)\"\n\"SUM(J35:J36)\"\n\"SUM(K14:K34)\"\n\"SUM(C8:C20)\"\n\"SUM(C15:C17)\"\n\"SUM(C48:C60)\"\n\"SUM(C18+C61)\"\n\"SUM(C18+C61+C89)\"\n\"C13/D13\"\n\"$F13/C13\"\n\"SUM(C13:C30)/SUM(D13:D30)\"\n\"AVERAGE(G13:G30)\"\n\"C14/D14\"\n\"$G14/C14\"\n\"D14/C14\"\n\"$F14/C14\"\n\"D24/D24\"\n\"SUM(C14:C31)/SUM(D14:D31)\"\n\"AVERAGE(G14:G31)\"\n\"C14/D14\"\n\"$G14/C14\"\n\"SUM([2]Section3A:formulas!B11)\"\n\"SUM(B11:F11)\"\n\"+B11/$G11\"\n\"SUM([2]Section3A:formulas!B36)\"\n\"SUM(#REF!)\"\n\"+B35/$G36\"\n\"SUM(B35:F35)\"\n\"+C58/$H58\"\n\"+B82/233\"\n\"+B83/248\"\n\"+B87/$G89\"\n\"SUM([1]Section2a:Section14g!G161)\"\n\"SUM([1]Section2a:Section14g!B175)\"\n\"COUNTIF(C$8:C$55,$H5)\"\n\"COUNTIF(F$8:F$55,$H5)\"\n\"SUM(I5:J5)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!T337,2,FALSE)\"\n\"Spring2004!T337\"\n\"VLOOKUP(B6,Spring2004!$S$1:'Spring2004'!$T$9, 2)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,5,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,6,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,7,FALSE)\"\n\"Spring2004!W337\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,9,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,10,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,11,FALSE)\"\n\"Spring2004!AA337\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,13,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,14,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,12,FALSE)\"\n\"Spring2004!AD337\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,13,FALSE)\"\n\"Spring2004!AG337\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,14,FALSE)\"\n\"Spring2004!AH337\"\n\"VLOOKUP($B$3,Spring2004!$S$25:'Spring2004'!AH337,3,FALSE)\"\n\"Spring2004!U337\"\n\"0.58*AD3\"\n\"0.68*AD3\"\n\"0.76*AD3\"\n\"0.8*AD3\"\n\"0.82*AD3\"\n\"0.86*AD3\"\n\"0.9*AD3\"\n\"0.93*AD3\"\n\" SUM(U25, Y25, AC25, AF25, AG25, AH25)\"\n\"SUM(A25:R25)\"\n\"(V25+2.5)*6000\"\n\"W25+X25\"\n\"(Z25+2)*6000\"\n\"SUM(AA25:AB25)\"\n\"(V65+3.5)*6000\"\n\"AVERAGE(A25:A336)\"\n\"SUM(U337, Y337, AC337)\"\n\"SUM(Q2:R2)\"\n\"SUM(T2,X2,AB2)\"\n\"SUM(B2:P2)\"\n\"SUM(AG2,AH2)\"\n\"AI2/1000\"\n\"AVERAGE(Q27:Q50)\"\n\"SUM(D31:D38)\"\n\"SUM(D43:D45)\"\n\"D39+H39+M44+D46+H46+D58+H58+M63+D65+H65+D82+H82+M87+D89+H89+D101+H101+M106+D108+D126+H126+M131+D133+H133\"\n\"D39+H39+M44+D46+H46+D58+H58+M63+D65+H65+D82+H82+M87+D89+H89+D101+H101+M106+D108+D126+H126+M131+D133+H133\"\n\"SUM(D9:D16)\"\n\"C4\"\n\"C4\"\n\"100*F4/94\"\n\"AVERAGE(C4:D57)\"\n\"E9-B9\"\n\"E9-D9\"\n\"RANK(F9,F$9:F$42,0)\"\n\"F9-C9\"\n\"F9-E9\"\n\"RANK(H9,H$9:H$42,0)\"\n\"F9-C9\"\n\"F9-E9\"\n\"E9-B9\"\n\"E9-D9\"\n\"RANK(F9,F$9:F$42,1)\"\n\"F9-C9\"\n\"F9-E9\"\n\"RANK(H9,H$9:H$42,1)\"\n\"F9-C9\"\n\"F9-E9\"\n\"H3+2\"\n\"K3+3\"\n\"(D10/C10)*100\"\n\"(F10/C10)*100\"\n\"(H10/C10)*100\"\n\"(J10/C10)*100\"\n\"(L10/C10)*100\"\n\"(C11/B11)*100\"\n\"(E11/B11)*100\"\n\"(G11/B11)*100\"\n\"(I11/B11)*100\"\n\"(K11/B11)*100\"\n\"SUM(B4:B5)\"\n\"SUM(B7:B12)\"\n\"+B16+B15+B14+B13+B6\"\n\"+(B21+B22)/B20\"\n\"45784.6+22432.2+12929.4+5593\"\n\"18143.36+4850.84\"\n\"SUM(B3:J3)\"\n\"18319.4+5712.1\"\n\"55642.8+10010+25444.8+16754.4\"\n\"24048.2+1657.1\"\n\"+'[1]1999-2000'!$AA$92\"\n\"+'[1]1999-2000'!$AF$92\"\n\"+#REF!\"\n\"23494.8+38303+7650+42659.5\"\n\"23871.876+37974.01+6976.06+44143.25\"\n\"SUM(B12:J12)-220.289\"\n\"24480.393+12604.32+24902.7+7129.96+44675.75\"\n\"546139.446-500445.54-6\"\n\"SUM(C6:F6)\"\n\"C6+H6\"\n\"AE6+W6\"\n\"SUM(AI6:AI14)\"\n\"SUM(AI36:AI43)\"\n\"SUM(AI45:AI51)\"\n\"44762024+2009667\"\n\"6179061+352427\"\n\"53720988+807225\"\n\"6478500+101700\"\n\"36494065+3034096\"\n\"3332810+1360963\"\n\"38795986+1217827\"\n\"4295068+692239\"\n\"AI15+AI25+AI35+AI44+AI52+AI62+AI72+AI82+AI92+AI102+AI112+AI122+AI132\"\n\"B3+C3+D3\"\n\"E3/$E$33\"\n\"J3/$J$33\"\n\"O3/$O$33\"\n\"B3+C3+D3+G3+H3+I3+L3+M3+N3+Q3\"\n\"R3/$R$33\"\n\"SUM(T3:W3)\"\n\"X3/$X$33\"\n\"Z3/$Z$33\"\n\"AB3/$AB$33\"\n\"AD3/$AD$33\"\n\"Z3+AB3+AD3\"\n\"AF3/$AF$33\"\n\"R3+X3+AF3\"\n\"AI3/$AI$33\"\n\"SUM(Z33:AD33)\"\n\"AVERAGE(B3:B32)\"\n\"MEDIAN(B3:B32)\"\n\"B4\"\n\"ROUND(D4/18*20,1)\"\n\"ROUND(SUM(B6:E6)/4,1)\"\n\"LARGE($B9:$I9,COLUMN()-1)\"\n\"ROUND(SUM(B11:F11)/5,1)\"\n\"ROUND(SUM(B11:F11)*0.4,1)\"\n\"LARGE($B16:$F16,COLUMN()-1)\"\n\"ROUND(SUM(B18:F18)/5,1)\"\n\"ROUND(SUM(B23:C23)/2,1)\"\n\"B23+C23\"\n\"VLOOKUP(D27,$G$28:$H$39,2)\"\n\"D13+D20+D25\"\n\"SUM(C3:N3)\"\n\"0.75*(0.7*X3 + 0.3*Q3) + P3\"\n\"IF(R3>=95,\"\"A\"\",IF(R3>=90,\"\"A-\"\",IF(R3>=85,\"\"B+\"\",IF(R3>=80,\"\"B\"\",IF(R3>=75,\"\"B-\"\",IF(R3>=70,\"\"C+\"\",IF(R3>=65,\"\"C\"\",\"\"??\"\")))))))\"\n\"O3 - SMALL(C3:N3,1) - SMALL(C3:N3,2)\"\n\"SUM(I5:J5)\"\n\"K5/$K$10\"\n\"SUM(I5:I9)\"\n\"AVERAGE(A2:A34)\"\n\"STDEVP(A2:A33)\"\n\"SUM(B2:P2)\"\n\"Q2/$Q$36\"\n\"Q9/($Q$36-10)\"\n\"Q12/($Q$36-30-50-100)\"\n\"Q26/($Q$36-50)\"\n\"AVERAGE(B2:B34)\"\n\"SUM(B2:P2)\"\n\"$Q$22-10\"\n\"Q2/R2\"\n\"$Q$22\"\n\"$Q$22-50\"\n\"AVERAGE(B3:B20)\"\n\"(F10/$F$9)*100\"\n\"(B11/$B$10)*100\"\n\"(B19/$B$18)*100\"\n\"(F22/$F$21)*100\"\n\"(F31/$F$30)*100\"\n\"(B32/$B$31)*100\"\n\"(F42/$F$42)*100\"\n\"(B43/$B$42)*100\"\n\"(B47/$B$46)*100\"\n\"(B52/$B$51)*100\"\n\"(B55/$B$54)*100\"\n\"(B61/$B$60)*100\"\n\"(B65/$B$64)*100\"\n\"(B9/$B$9)*100\"\n\"(F9/$F$9)*100\"\n\"(B18/$B$18)*100\"\n\"(B23/$B$23)*100\"\n\"(B27/$B$27)*100\"\n\"(F33/$F$33)*100\"\n\"(B37/$B$37)*100\"\n\"(B8/$B$8)*100\"\n\"(F9/$F$9)*100\"\n\"(F14/$F$14)*100\"\n\"(B42/$B$42)*100\"\n\"(F51/F$51)*100\"\n\"J2+6\"\n\"AVERAGE(B5:B21)\"\n\"AVERAGE(B5:B22)\"\n\"VLOOKUP(O4,$D$9:$E$20,2)\"\n\"VLOOKUP(C4,$C$9:$E$20,3)\"\n\"VLOOKUP(C4,$C$9:$F$20,4)\"\n\"VLOOKUP($I4,$G$9:$H$20,2)\"\n\"VLOOKUP($K4,$G$9:$H$20,2)\"\n\"(Z4*0.1)+(E4*0.25)+(H4*0.3)+(J4*0.15)+(L4*0.2)\"\n\"M4+N4\"\n\"SUM(P4:W4)*100/80\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,2,FALSE)\"\n\"Spring2004!U402\"\n\"VLOOKUP(B6,Spring2004!$T$1:'Spring2004'!$U$9, 2)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,5,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,6,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,7,FALSE)\"\n\"Spring2004!X402\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,9,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,10,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,11,FALSE)\"\n\"Spring2004!AB402\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,15,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,14,FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,12,FALSE)\"\n\"Spring2004!AE402\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,13,FALSE)\"\n\"Spring2004!AH402\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,14,FALSE)\"\n\"Spring2004!AI402\"\n\"VLOOKUP($B$3,Spring2004!$T$25:'Spring2004'!AI402,3,FALSE)\"\n\"Spring2004!V402\"\n\"0.58*AE3\"\n\"0.68*AE3\"\n\"0.76*AE3\"\n\"0.8*AE3\"\n\"0.82*AE3\"\n\"0.86*AE3\"\n\"0.9*AE3\"\n\"0.93*AE3\"\n\" SUM(V25, Z25, AD25, AG25, AH25, AI25)\"\n\"SUM(A25:S25)\"\n\"AA25+18000\"\n\"SUM(AB25:AC25)\"\n\"(AB25+18000)\"\n\"W26+3*6000\"\n\"AVERAGE(A25:A401)\"\n\"SUM(V402, Z402, AD402)\"\n\"VLOOKUP(N3,$G$7:$H$18,2,TRUE())\"\n\"VLOOKUP($C3,$J$7:$K$19,2,TRUE())\"\n\"VLOOKUP($E3,$J$7:$K$19,2,TRUE())\"\n\"VLOOKUP($G3,$J$7:$K$19,2,TRUE())\"\n\"VLOOKUP($I3,$J$7:$K$19,2,TRUE())\"\n\"VLOOKUP($K3,$J$7:$K$19,2,TRUE())\"\n\"(D3*0.15+F3*0.15+H3*0.15+J3*0.2+L3*0.2+Z3*0.15)+M3\"\n\"SUM(O3:W3)/90*100\"\n\"VLOOKUP(X3,$F$7:$H$18,3,TRUE())\"\n\"VLOOKUP($X3,$F$7:$I$18,4,TRUE())\"\n\"SUM(O4:W4)\"\n\"MONTH(A11)\"\n\"DAY(A11)\"\n\"A11+2\"\n\"B11+1\"\n\"A12+3\"\n\"SUM(B3:M3)\"\n\"N3/$N$3\"\n\"SUM(P3:AL3)\"\n\"AM3-MIN(P3:AL3)-SMALL(P3:AL3,2)-SMALL(P3:AL3,3)-SMALL(P3:AL3,4)-SMALL(P3:AL3,5)\"\n\"AN3/AN$3\"\n\"AP3+AQ3+AR3\"\n\"(AV3+AW3+AX3)/100\"\n\"0.5*(AZ3+BA3)/100\"\n\"( 0.16 * (O3 + AO3) + 0.18 * (AT3+AU3)+0.14*BB3 +0.22*AY3) -0.04*MIN(O3,AO3,AT3,AU3,BB3,AY3)/ 1\"\n\"IF(BC4>=0.915,\"\"A\"\",IF(BC4>=0.895,\"\"A-\"\",IF(BC4>=0.875,\"\"B+\"\",IF(BC4>0.815,\"\"B\"\",IF(BC4>=0.795,\"\"B-\"\",IF(BC4>=0.775,\"\"C+\"\",IF(BC4>0.715,\"\"C\"\",IF(BC4>=0.695,\"\"C-\"\",\"\"D\"\"))))))))\"\n\"SUM(B4:O4)\"\n\"P4/$P$4\"\n\"SUM(R4:AO4)\"\n\"AP4-MIN(R4:AO4)-SMALL(R4:AO4,2)-SMALL(R4:AO4,3)-SMALL(R4:AO4,4)-SMALL(R4:AO4,5)\"\n\"AQ4/AQ$4\"\n\"100*AR4\"\n\"AV4+AW4+AX4\"\n\"0.005*(AZ4+BA4)\"\n\"0.17*(Q4+AR4+AT4+AU4) + 0.15*BB4 +0.22*AY4-0.05*MIN(Q4,AR4,AT4,AU4,BB4,AY4)\"\n\"IF(BC5>=0.92,\"\"A\"\",IF(BC5>=0.9,\"\"A-\"\",IF(BC5>=0.87,\"\"B+\"\",IF(BC5>0.8,\"\"B\"\",IF(BC5>=0.75,\"\"B-\"\",IF(BC5>=0.7,\"\"C+\"\",IF(BC5>0.6,\"\"C\"\",IF(BC5>=0.5,\"\"C-\"\",\"\"D\"\"))))))))\"\n\"-7.068+1.01*0-0.55*3+0.87*10\"\n\"6.786+0.629*8-0.336*5-0.42*8+0.628-0.2041-0.21*10\"\n\"C52/B52\"\n\"SUM(B11:B143)\"\n\"SUM(F11:F142)\"\n\"AVERAGE(B5:B72)\"\n\"AVERAGE(C7:I7)\"\n\"HLOOKUP(J7,$C$36:$AH$37,2,TRUE)\"\n\"AVERAGE(M7:S7)\"\n\"AVERAGE((W7*0.75)+(X7*0.25))\"\n\"HLOOKUP(Y7,$N$31:$R$32,2,TRUE)\"\n\"Y7\"\n\"J7\"\n\"X7\"\n\"J7\"\n\"X7\"\n\"AVERAGE(C7:I7)\"\n\"HLOOKUP(J7,$C$37:$AH$38,2,TRUE)\"\n\"AVERAGE(M7:S7)\"\n\"AVERAGE((W7*0.75)+(X7*0.25))\"\n\"HLOOKUP(Y7,$N$32:$R$33,2,TRUE)\"\n\"Y7\"\n\"J7\"\n\"X7\"\n\"J7\"\n\"X7\"\n\"AVERAGE(C7:I7)\"\n\"HLOOKUP(J7,$C$48:$AH$49,2,TRUE)\"\n\"AVERAGE(M7:S7)\"\n\"AVERAGE((W7*0.25)+(X7*0.75))\"\n\"HLOOKUP(Y7,$N$43:$R$44,2,TRUE)\"\n\"Y7\"\n\"J7\"\n\"X7\"\n\"J7\"\n\"X7\"\n\"AVERAGE(C7:I7)\"\n\"HLOOKUP(J7,$C$45:$AH$46,2,TRUE)\"\n\"AVERAGE(M7:S7)\"\n\"AVERAGE((W7*0.25)+(X7*0.75))\"\n\"HLOOKUP(Y7,$N$40:$R$41,2,TRUE)\"\n\"Y7\"\n\"J7\"\n\"X7\"\n\"J7\"\n\"X7\"\n\"'MP1'!Y7\"\n\"'MP2'!Y7\"\n\"'MP3'!Y7\"\n\"'MP4'!Y7\"\n\"AVERAGE(C7:F7)\"\n\"SUM(B9:B29)\"\n\"SUM(D9:D30)\"\n\"SUM(B8:B29)\"\n\"SUM(B8:B29)\"\n\"SUM(B44:B63)\"\n\"SUM(N44:N64)\"\n\"SUM('University Total'!B8:L8)\"\n\"SUM('University Total'!B43:L43)\"\n\"SUM(A1:B1)\"\n\"+C1/+C24\"\n\"+C2/+C24\"\n\"+C3/+C24\"\n\"+C4/+C24\"\n\"+C5/+C24\"\n\"+C6/+C24\"\n\"+C7/+C24\"\n\"+C8/+C24\"\n\"+C9/+C24\"\n\"+C10/+C24\"\n\"+C11/+C24\"\n\"+C12/+C24\"\n\"+C13/+C24\"\n\"+C14/+C24\"\n\"+C15/+C24\"\n\"+C16/+C24\"\n\"+C17/+C24\"\n\"+C18/+C24\"\n\"+C19/+C24\"\n\"+C20/+C24\"\n\"+C21/+C24\"\n\"+C22/+C24\"\n\"SUM(A1:A23)\"\n\"SUM(F8,H8)\"\n\"SUM(B8:B12)\"\n\"SUM(B14:B16)\"\n\"SUM(B13,B17)\"\n\"SUM(H17,H13)\"\n\"SUM(C38:C39)\"\n\"SUM(C43,C40)\"\n\"SUM(E40,E43)\"\n\"+(SUM(C4,E4,G4,I4,K4,M4,O4) - MIN(C4,E4,G4,I4,K4,M4,O4))/6\"\n\"AVERAGE(D4,F4,H4,J4,L4,N4,P4)\"\n\"0.4*S4+0.3*R4+0.3*Q4\"\n\"+B4+1\"\n\"AVERAGE(C4:C22)\"\n\"QUARTILE(C4:C22,3)\"\n\"QUARTILE(C4:C22,1)\"\n\"QUARTILE(C4:C22,0)\"\n\"QUARTILE(C4:C22,4)\"\n\"MEDIAN(C4:C22)\"\n\"B13*C13\"\n\"SUM(D18:D18)\"\n\"SUM(E3:G3)/3\"\n\"SUM(E3:J3)/6\"\n\"SUM(E4:J4)\"\n\"SUM(E5:N5)\"\n\"B5/202\"\n\"B10/198\"\n\"B15/89\"\n\"B31/194\"\n\"SUM(B31:B39)\"\n\"#REF!\"\n\"6/D3\"\n\"12/E3\"\n\"5/G3\"\n\"8/H3\"\n\"6/D3\"\n\"9/F3\"\n\"3/H3\"\n\"8/J3\"\n\"8/G3\"\n\"5/H3\"\n\"3/K3\"\n\"6/D3\"\n\"10/E3\"\n\"8/G3\"\n\"9/H3\"\n\"12/I3\"\n\"SUM(B5:B8)\"\n\"3/D3\"\n\"8/E3\"\n\"5/H3\"\n\"5/F3\"\n\"10/G3\"\n\"15/I3\"\n\"9/K3\"\n\"3/E3\"\n\"8/F3\"\n\"5/J3\"\n\"10/K3\"\n\"3/H3\"\n\"5/J3\"\n\"6/D3\"\n\"7/E3\"\n\"3/F3\"\n\"10/G3\"\n\"5/H3\"\n\"14/J3\"\n\"6/D3\"\n\"8/E3\"\n\"11/G3\"\n\"15/H3\"\n\"13/I3\"\n\"5/F3\"\n\"2/H3\"\n\"2/F3\"\n\"5/H3\"\n\"10/K3\"\n\"4/E3\"\n\"8/H3\"\n\"3/K3\"\n\"6/D3\"\n\"4/E3\"\n\"10/F3\"\n\"9/I3\"\n\"5/J3\"\n\"12/K3\"\n\"SUM(B20:B21)\"\n\"11/D3\"\n\"12/E3\"\n\"10/F3\"\n\"16/H3\"\n\"7/I3\"\n\"8/J3\"\n\"14/D3\"\n\"16/F3\"\n\"32/G3\"\n\"21/H3\"\n\"33/I3\"\n\"31/J3\"\n\"17/K3\"\n\"11/D3\"\n\"15/E3\"\n\"26/F3\"\n\"14/G3\"\n\"20/H3\"\n\"22/J3\"\n\"25/K3\"\n\"3/D3\"\n\"13/E3\"\n\"8/F3\"\n\"9/H3\"\n\"11/I3\"\n\"4/J3\"\n\"2/E3\"\n\"4/G3\"\n\"7/H3\"\n\"9/I3\"\n\"10/J3\"\n\"23/K3\"\n\"2/D37\"\n\"1/F37\"\n\"1/D37\"\n\"1/D37\"\n\"2/H37\"\n\"1/D37\"\n\"1/F37\"\n\"2/D37\"\n\"3/F37\"\n\"2.5/G37\"\n\"2/D37\"\n\"1.5/G37\"\n\"0.5/H37\"\n\"1/J37\"\n\"1/D37\"\n\"1.5/I37\"\n\"2/E37\"\n\"1/F37\"\n\"3/I37\"\n\"SUM(J4:J10)\"\n\"J11/J35\"\n\"SUM(J14:J16)\"\n\"J17/J35\"\n\"SUM(J20:J23)\"\n\"J24/J35\"\n\"SUM(J27:J31)\"\n\"J32/J35\"\n\"J11+J17+J24+J32\"\n\"(J35-(J21+J31))/J35\"\n\"(J21+J31)/J35\"\n\"1616750+8287+2081+365+6465+61681+20103+14219+12587\"\n\"D8-E8\"\n\"8285+89681+60114+6619+97727-2200+9160+15362+78540+4243\"\n\"SUM(D8:D9)\"\n\"D8-E10\"\n\"F10/D8\"\n\"7+5.5\"\n\"301305+25119\"\n\"21119+63241-3835+39912+2734+38841+9622+64315+4043+48681+49418+19777+58274\"\n\"685122+23678+58764+3407+8517\"\n\"271+271+36054+1146+30499+116956+45780+11885+50913+1864+40829+5000+30493\"\n\"79059+1723+20515\"\n\"83844\"\n\"49707+18665\"\n\"4542+15570+18555+11465\"\n\"SUM(C7:C27)\"\n\"SUM(D7:D27)/2\"\n\"E10+E14+E18+E22+E26\"\n\"F28/D28\"\n\"1903728+11049+2428+426+7543+71961+23454+16588+14685\"\n\"D8-E8\"\n\"14500+98569+71814+7722+113504-2200+9856+36091+84612+4243\"\n\"SUM(D8:D9)\"\n\"D8-E10\"\n\"F10/D8\"\n\"7+5.5\"\n\"351529+29306\"\n\"21119+79712-3835+46447+2734+68278+11846+79680+17504+4043+56409+58264+36379+69494\"\n\"799305+27625+68559+3975+9937\"\n\"2229+1007+38708+4717+30499+127206+48381+8775+40939+1864+40829+266+5534+1790+33603\"\n\"92236+2010+23934\"\n\"110805\"\n\"57992+21775\"\n\"5229+18172+23968+13229\"\n\"SUM(C7:C27)\"\n\"SUM(D7:D27)/2\"\n\"E10+E14+E18+E22+E26\"\n\"F28/D28\"\n\"SUM(I28-E28)\"\n\"D9-E9\"\n\"SUM(D9:D10)\"\n\"F11/D9\"\n\"F11-H11\"\n\"7+5.5\"\n\"243846+157896\"\n\"114715+94602\"\n\"417152-1101+137664+89975\"\n\"913495\"\n\"60335+3\"\n\"24886\"\n\"59735+5916\"\n\"SUM(C8:C28)\"\n\"SUM(D8:D28)/2\"\n\"E11+E15+E19+E23+E27\"\n\"F29/D29\"\n\"2479033+16573+3122+548+9698+92521+30155+21328+18881\"\n\"D9-E9\"\n\"18540+111761+5593+95472+9928+145057-2200+9856+34122+25011+86988+3770+5859\"\n\"SUM(D9:D10)\"\n\"F11/D9\"\n\"F11-H11\"\n\"7+5.5\"\n\"274326+177637+37679\"\n\"139100+117616\"\n\"21119+107270-3835+65007+2734+135281+24788+101254+38406+4083+66817+56627+54509+83237+1732-25000\"\n\"1027678+35518+88147+5110+12776\"\n\"2557+2937+39319+5150+30499+147674+56670+20012+42586+1864+40829+3714+14830+2540+36106+25000\"\n\"118590+2584+30772\"\n\"145774\"\n\"67877+27997\"\n\"6774+23968+23376+17198\"\n\"SUM(C8:C28)\"\n\"SUM(D8:D28)/2\"\n\"E11+E15+E19+E23+E27\"\n\"F29/D29\"\n\"2757728+19336+3469+608+10776+102801+33506+23698+20979\"\n\"2443232\"\n\"D9-E9\"\n\"21958+119160+11186+107122+11031+169599-2200+9856+34122+25171+91884+3770+4243\"\n\"SUM(D9:D10)\"\n\"F11/D9\"\n\"F11-I11\"\n\"7+5.5\"\n\"304807+197376+41865\"\n\"157496+133464\"\n\"21119+117175+73447+2734+195640+24535+112534+34840+4083+74265+56627+61071+88237\"\n\"1141869+39464+97941+5678+14196\"\n\"2557+2937+39319+7061+30499+145167+59383+20012+48986+1864+40829+3714+19737+2540+36106\"\n\"131765+2872+34192\"\n\"68565\"\n\"162620\"\n\"75418+31108\"\n\"11882\"\n\"25978+23968+26422\"\n\"SUM(C8:C28)\"\n\"SUM(D8:D28)/2\"\n\"E11+E15+E19+E23+E27\"\n\"F29/D29\"\n\"Sheet1!H20\"\n\"Sheet1!E20\"\n\"F9-G9\"\n\"G9/8*12\"\n\"'TOTAL (2)'!K58\"\n\"L9-N9\"\n\"Sheet1!H79\"\n\"Sheet1!E79\"\n\"'TOTAL (2)'!K75\"\n\"SUM(C9:C10)\"\n\"H11/F9\"\n\"Sheet1!H18\"\n\"Sheet1!E18\"\n\"'TOTAL (2)'!K118\"\n\"Sheet1!E97+Sheet1!E110+Sheet1!E114\"\n\"'TOTAL (2)'!K131\"\n\"Sheet1!H19\"\n\"Sheet1!E19\"\n\"'TOTAL (2)'!K98\"\n\"Sheet1!E56+Sheet1!E124\"\n\"'TOTAL (2)'!K105\"\n\"Sheet1!H22\"\n\"Sheet1!E22\"\n\"'TOTAL (2)'!K7\"\n\"Sheet1!H103\"\n\"Sheet1!E103\"\n\"'TOTAL (2)'!K9\"\n\"Sheet1!H21\"\n\"Sheet1!E21\"\n\"Sheet1!E38\"\n\"'TOTAL (2)'!K16\"\n\"C27+C23+C19+C15+C11\"\n\"G11+G15+G19+G23+G27\"\n\"H29/F29\"\n\"1183291+5922356\"\n\"K31-K29\"\n\"J4+I4\"\n\"H4-K4\"\n\"1488*5\"\n\"K5*1.03225\"\n\"10642*5\"\n\"79048\"\n\"SUBTOTAL(9,H4:H6)\"\n\"99817+4700\"\n\"11216*5\"\n\"K8\"\n\"SUBTOTAL(9,H8:H8)\"\n\"2547*52/12*5\"\n\"SUBTOTAL(9,H10:H11)\"\n\"2708*5\"\n\"962*5\"\n\"5354*5\"\n\"69513-7934\"\n\"7933*3\"\n\"7933*4\"\n\"68963-7586\"\n\"7586*5\"\n\"7422*5\"\n\"116250*1.03225\"\n\"9915*5\"\n\"103883*1.03225\"\n\"72815-7614\"\n\"10306*5\"\n\"7588*5\"\n\"132974*1.05+3705\"\n\"11326*5\"\n\"78405*1.05+3705\"\n\"59509-7220\"\n\"7220*5\"\n\"72388-8752\"\n\"8752*5\"\n\"84722*1.04\"\n\"59909-7337\"\n\"7337*5\"\n\"78568*1.04\"\n\"56769-7987\"\n\"7987*5\"\n\"49518*1.04\"\n\"4176*5\"\n\"13735-4578\"\n\"4578*5\"\n\"51064+15138\"\n\"7136*5\"\n\"61184+12055\"\n\"8720*5\"\n\"7332*5\"\n\"4203*7\"\n\"4203*5\"\n\"7414*5\"\n\"7314*7\"\n\"7314*5\"\n\"7609*7\"\n\"7609*5\"\n\"84955*1.04\"\n\"7341*7\"\n\"7341*5\"\n\"2115*5\"\n\"1625*5\"\n\"98394*1.03225\"\n\"8748*7\"\n\"8748*5\"\n\"76773*1.03225\"\n\"6660.9*5\"\n\"9313*7\"\n\"9313*5\"\n\"8096*7\"\n\"8096*5\"\n\"8411*7\"\n\"10776*5\"\n\"4736*5\"\n\"4095*7\"\n\"4096*5\"\n\"97152*1.5*2\"\n\"SUBTOTAL(9,H17:H57)\"\n\"13728*2\"\n\"13728*9\"\n\"13728*5\"\n\"-L60/12*9\"\n\"12562*5\"\n\"89655+1022\"\n\"12653*5\"\n\"I64/7*5\"\n\"3588*5\"\n\"7702*5\"\n\"7702*12\"\n\"2397*7\"\n\"2397*5\"\n\"3230*5\"\n\"3230*12\"\n\"2911*5\"\n\"11700*5\"\n\"I71+J71\"\n\"1147*5\"\n\"SUBTOTAL(9,H59:H74)\"\n\"3591*5\"\n\"4266*5\"\n\"4613*5\"\n\"4547*5\"\n\"4828*5\"\n\"5109*5\"\n\"4660*5\"\n\"60292+2112\"\n\"32981+2112+3663\"\n\"4826*5\"\n\"32145+4513\"\n\"3096*5\"\n\"17648+15298\"\n\"2414*5\"\n\"2805*5\"\n\"J91/5*12\"\n\"42091+7179\"\n\"5671*5\"\n\"5110*5\"\n\"5127*7\"\n\"5127*5\"\n\"SUBTOTAL(9,H76:H97)\"\n\"26742-5008\"\n\"3609*5\"\n\"38899+16697\"\n\"10248*5\"\n\"SUBTOTAL(9,H99:H104)\"\n\"5506*5\"\n\"4699*5\"\n\"9056*5\"\n\"24278+53621\"\n\"6711*5\"\n\"8907*5\"\n\"36096+909\"\n\"4165*5\"\n\"5758*5\"\n\"4810*5\"\n\"37526+8489\"\n\"4290*5\"\n\"5436*5\"\n\"13506+28371\"\n\"4703*5\"\n\"SUBTOTAL(9,H106:H117)\"\n\"10248*7\"\n\"(10248*4)+(5000*8)\"\n\"7800*5\"\n\"93600-6000-3000\"\n\"17160*5\"\n\"I122*12\"\n\"4217*5\"\n\"(4217*4)+(5000*8)\"\n\"21652+28653\"\n\"12887*5\"\n\"9056*7\"\n\"9529*5\"\n\"9845*5\"\n\"SUBTOTAL(9,H4:H130)\"\n\"70*50*4.35\"\n\"41*4.35*46\"\n\"51*4.35*40\"\n\"49.95*4.35*40\"\n\"49*4.35*40\"\n\"SUM(E18:E22)\"\n\"MID(B31,9,4)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,3,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,4,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,5,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,6,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,7,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,8,0)\"\n\"VLOOKUP($B31,Sheet2!$B$4:$J$1501,9,0)\"\n\"SUM(D31:D32)\"\n\"SUM(D34:D37)\"\n\"F38/5/O21\"\n\"SUM(D39:D55)\"\n\"F56/5/O18\"\n\"SUM(D57:D78)\"\n\"F79/5/O17\"\n\"(F97+F110)/5/O19\"\n\"SUM(D98:D102)\"\n\"F103/5/O20\"\n\"SUM(D104:D109)\"\n\"SUM(D111:D113)\"\n\"SUM(D115:D123)\"\n\"D124+D114+D110+D103+D97+D79+D56+D38+D33\"\n\"Sheet2!D101\"\n\"D127-D125\"\n\"MID(B10,9,4)\"\n\"SUM(D11:D99)\"\n\"E10/D10\"\n\"SUM(D10:D16)\"\n\"SUM(D6:G6)\"\n\"I6/400\"\n\"IF(J6>=89.9%, \"\"A\"\", IF(J6>=79.9%, \"\"B\"\", IF(J6>=69.9%, \"\"C\"\", IF(J6>=59.9%, \"\"D\"\", \"\"F\"\"))))\"\n\"AVERAGE(D6:D25)\"\n\"I26/I3\"\n\"IF(J26>89.9%, \"\"A\"\", IF(J26>79.9%, \"\"B\"\", IF(J26>69.9%, \"\"C\"\", IF(J26>59.9%, \"\"D\"\", \"\"F\"\"))))\"\n\"NOW()\"\n\"SUM(C5:C9)\"\n\"SUM(E5:E7)\"\n\"(10+9+8)/3\"\n\"(10+8+7)/3\"\n\"(8+8+7)/3\"\n\"(7+7+6)/3\"\n\"(6+6+5)/3\"\n\"(4+5+5)/3\"\n\"(5+2+2)/3\"\n\"IF(C6=\"\"\"\", 0, VLOOKUP(C6, GCSE, 2, FALSE))\"\n\"13-(COUNTIF(C6:C18, \"\"\"\"))\"\n\"SUM(E6:E17)\"\n\"IF(C24=\"\"\"\", 0, VLOOKUP(C24, GCSE, 2, FALSE))*0.5\"\n\"(3-COUNTIF(C24:C26, \"\"\"\"))*0.5\"\n\"SUM(E24:E26)\"\n\"IF(C34=\"\"\"\", 0, VLOOKUP(C34, GNVQ, 2, FALSE))\"\n\"(3-COUNTIF(C34:C36, \"\"\"\"))*4\"\n\"IF(C43=\"\"\"\",  0, VLOOKUP(C43, GNVQ, 3, FALSE))\"\n\"(3-COUNTIF(C43:C45, \"\"\"\"))*2\"\n\"SUM(H47, H38, H28, H20)\"\n\"SUM(K48, K39, K29, K21)\"\n\"IF(E52= 0, 0, E52/C50)\"\n\"IF(E52= 0, 0, E52/C50)\"\n\"IF(H4<1000,B4,IF(H4<2000,C4,IF(H4<3000,D4,IF(H4<5000,E4,IF(H4<7500,F4,G4)))))\"\n\"H4*I4\"\n\"SUM(J4:J26)\"\n\"J28+J29\"\n\"SUM(K26:K36)\"\n\"SUM(B5:B15)\"\n\"SUM(B5:B8)\"\n\"SUM(B12:B14)\"\n\"SUM(C5:C14)\"\n\"(F7-E7)/E7\"\n\"SUM(B7:B51)\"\n\"SUM(B53:B61)\"\n\"SUM(B6:B50)\"\n\"B51/$B$51\"\n\"B60+B59+B58+B57+B56+B55+B54+B51\"\n\"G51\"\n\"B62/$B$62\"\n\"B52/$B52\"\n\"B52/$B52\"\n\"(F8-E8)/E8\"\n\"SUM(C29:E29)\"\n\"B29/$B29\"\n\"SUM(D8:F8)\"\n\"B8/B$8\"\n\"D8/$B8\"\n\"(F8-E8)/E8\"\n\"B19/$B19\"\n\"B8/$B8\"\n\"AVERAGE(B7:H7)\"\n\"AVERAGE(B7:B26)\"\n\"B2/C2\"\n\"B2/C2\"\n\"B2/C2\"\n\"(IF('Assignment 1'!$D2>'Assignment 2'!$D2,'Assignment 1'!B2,'Assignment 2'!B2))+'Assignment 3'!B2\"\n\"B2/C2\"\n\"B7*$B$4+C7*$C$4+D7*$D$4\"\n\"ROUND(_xll.RiskNormal($C$13,$C$14),0)\"\n\"ROUND(_xll.RiskNormal($F$13,$F$14),0)\"\n\"ROUND(_xll.RiskNormal($I$13,$I$14),0)\"\n\"ROUND(_xll.RiskNormal($L$13,$L$14),0)\"\n\"AVERAGE(L5:L6)\"\n\"AVERAGE(C5:C7)\"\n\"AVERAGE(F5:F9)\"\n\"_xll.RiskOutput()+0.3*ProjAvg+0.1*LabAvg+0.2*QuizAvg+0.4*ExamAvg\"\n\"POC!B4/POC!B44\"\n\"POC!B5/POC!B44\"\n\"POC!B6/POC!B44\"\n\"POC!B7/POC!B44\"\n\"POC!B8/POC!B44\"\n\"POC!B9/POC!B44\"\n\"POC!B10/POC!B44\"\n\"POC!B11/POC!B44\"\n\"POC!B12/POC!B44\"\n\"POC!B13/POC!B44\"\n\"POC!B14/POC!B44\"\n\"POC!B15/POC!B44\"\n\"POC!B16/POC!B44\"\n\"POC!B17/POC!B44\"\n\"POC!B18/POC!B44\"\n\"POC!B19/POC!B44\"\n\"POC!B20/POC!B44\"\n\"POC!B21/POC!B44\"\n\"POC!B22/POC!B44\"\n\"POC!B23/POC!B44\"\n\"POC!B24/POC!B44\"\n\"POC!B25/POC!B44\"\n\"POC!B26/POC!B44\"\n\"POC!B27/POC!B44\"\n\"POC!B28/POC!B44\"\n\"POC!B29/POC!B44\"\n\"POC!B30/POC!B44\"\n\"POC!B31/POC!B44\"\n\"POC!B32/POC!B44\"\n\"POC!B33/POC!B44\"\n\"POC!B34/POC!B44\"\n\"POC!B35/POC!B44\"\n\"POC!B36/POC!B44\"\n\"POC!B37/POC!B44\"\n\"POC!B38/POC!B44\"\n\"POC!B39/POC!B44\"\n\"POC!B40/POC!B44\"\n\"POC!B41/POC!B44\"\n\"POC!B42/POC!B44\"\n\"POC!B43/POC!B44\"\n\"Alpha!B3/Alpha!B15\"\n\"Alpha!B4/Alpha!B15\"\n\"Alpha!B5/Alpha!B15\"\n\"Alpha!B6/Alpha!B15\"\n\"Alpha!B7/Alpha!B15\"\n\"Alpha!B8/Alpha!B15\"\n\"Alpha!B9/Alpha!B15\"\n\"Alpha!B10/Alpha!B15\"\n\"Alpha!B11/Alpha!B15\"\n\"Alpha!B12/Alpha!B15\"\n\"Alpha!B13/Alpha!B15\"\n\"Alpha!B14/Alpha!B15\"\n\"Bravo!B3/Bravo!B16\"\n\"Bravo!B4/Bravo!B16\"\n\"Bravo!B5/Bravo!B16\"\n\"Bravo!B6/Bravo!B16\"\n\"Bravo!B7/Bravo!B16\"\n\"Bravo!B8/Bravo!B16\"\n\"Bravo!B9/Bravo!B16\"\n\"Bravo!B10/Bravo!B16\"\n\"Bravo!B11/Bravo!B16\"\n\"Bravo!B12/Bravo!B16\"\n\"Bravo!B13/Bravo!B16\"\n\"Bravo!B14/Bravo!B16\"\n\"Bravo!B15/Bravo!B16\"\n\"Charlie!B3/Charlie!B13\"\n\"Charlie!B4/Charlie!B13\"\n\"Charlie!B5/Charlie!B13\"\n\"Charlie!B6/Charlie!B13\"\n\"Charlie!B7/Charlie!B13\"\n\"Charlie!B8/Charlie!B13\"\n\"Charlie!B9/Charlie!B13\"\n\"Charlie!B10/Charlie!B13\"\n\"Charlie!B11/Charlie!B13\"\n\"Charlie!B12/Charlie!B13\"\n\"Delta!B3/Delta!B17\"\n\"Delta!B4/Delta!B17\"\n\"Delta!B5/Delta!B17\"\n\"Charlie!B12/Delta!B17\"\n\"Delta!B6/Delta!B17\"\n\"Delta!B6/Delta!B17\"\n\"Charlie!B12/Delta!B17\"\n\"Delta!B8/Delta!B17\"\n\"Delta!B8/Delta!B17\"\n\"Delta!B9/Delta!B17\"\n\"Delta!B10/Delta!B17\"\n\"Delta!B11/Delta!B17\"\n\"Delta!B12/Delta!B17\"\n\"Delta!B13/Delta!B17\"\n\"$D$4\"\n\"$D$5\"\n\"$D$7\"\n\"$D$3\"\n\"$D$8\"\n\"$D$21\"\n\"$D$9\"\n\"$D$10\"\n\"$D$24\"\n\"$D$25\"\n\"$D$11\"\n\"$D$26\"\n\"$D$12\"\n\"$D$27\"\n\"$D$28\"\n\"$D$14\"\n\"E59+E61+E63\"\n\"$D$15\"\n\"$D$16\"\n\"$D$17\"\n\"$D$32\"\n\"$D$33\"\n\"$D$34\"\n\"$D$19\"\n\"NOW()\"\n\"SUM(H78:H105)\"\n\"SUM(L79:L105)\"\n\"H107+H109\"\n\"IF(G5>=200, 50, IF(G5>=180, 40, IF(G5>=160, 35, IF(G5>=130, 30, IF(G5>=110, 25, 0)))))\"\n\"SUM(B5:I5)\"\n\"J5/700\"\n\"IF(K5>89.9%, \"\"A\"\", IF(K5>79.9%, \"\"B\"\", IF(K5>69.9%, \"\"C\"\", IF(K5>59.9%, \"\"D\"\", \"\"F\"\"))))\"\n\"J9/J7\"\n\"AVERAGE(B5:B36)\"\n\"((SUM(C3:F3)*(59/200))+(0.8*SUM(G3:J3))+((K3)*0.1736))\"\n\"(SUM(L6:L41)/36)\"\n\"(C16/37)*100\"\n\"E16+I16+M16+O16+Q16+S16+U16+W16+Y16+AA16+AJ16\"\n\"24+1\"\n\"32+1\"\n\"31+1\"\n\"35+1\"\n\"(C80/39)*100\"\n\"356-78-4365\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"IF(O12>'F Noon'!O$38*0.9,\"\"A\"\",IF(O12>'F Noon'!O$38*0.8,\"\"B\"\",IF(O12>'F Noon'!O$38*0.7,\"\"C\"\",IF(O12>'F Noon'!O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"352-74-6205\"\n\"323-82-3880\"\n\"319-78-6001\"\n\"331-76-4823\"\n\"333-84-6349\"\n\"AVERAGE(B6:B37)\"\n\"MAX(B6:B37)\"\n\"COUNT(B6:B37)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"361-82-5267\"\n\"320-84-4430\"\n\"AVERAGE(B6:B23)\"\n\"MAX(B6:B23)\"\n\"COUNT(B6:B23)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"351-80-2879\"\n\"353-72-7210\"\n\"AVERAGE(B6:B30)\"\n\"MAX(B6:B30)\"\n\"COUNT(B6:B30)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"AVERAGE(B7:B30)\"\n\"MAX(B7:B30)\"\n\"COUNT(B7:B30)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"319-80-587\"\n\"334-74-1777\"\n\"332-74-3856\"\n\"356-76-6295\"\n\"357-80-8283\"\n\"IF(O27>'M Noon'!O$38*0.9,\"\"A\"\",IF(O27>'M Noon'!O$38*0.8,\"\"B\"\",IF(O27>'M Noon'!O$38*0.7,\"\"C\"\",IF(O27>'M Noon'!O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"AVERAGE(B6:B29)\"\n\"MAX(B6:B37)\"\n\"COUNT(B6:B29)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"331-82-3785\"\n\"348-78-5277\"\n\"AVERAGE(B7:B32)\"\n\"MAX(B7:B32)\"\n\"COUNT(B7:B32)\"\n\"'M Noon'!D3\"\n\"SUM(B6:N6)\"\n\"IF(O6>O$38*0.9,\"\"A\"\",IF(O6>O$38*0.8,\"\"B\"\",IF(O6>O$38*0.7,\"\"C\"\",IF(O6>O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"IF(O7>'F Noon'!O$38*0.9,\"\"A\"\",IF(O7>'F Noon'!O$38*0.8,\"\"B\"\",IF(O7>'F Noon'!O$38*0.7,\"\"C\"\",IF(O7>'F Noon'!O$38*0.6,\"\"D\"\",\"\"F\"\"))))\"\n\"344-78-3145\"\n\"94-70-4929\"\n\"346-74-7769\"\n\"351-82-8745\"\n\"AVERAGE(B8:B34)\"\n\"MAX(B8:B34)\"\n\"COUNT(B8:B34)\"\n\"SUM(D99:D103)\"\n\"((2759*0.8)+(4093*0.89)+(5267*0.89))/(2759+4093+5267)\"\n\"((4244*0.81)+(8590*0.89)+(9917*0.91))/(4244+8590+9917)\"\n\"H2/22\"\n\"(G2+H2)/22\"\n\"[1]Draft!$I$71\"\n\"[1]Draft!$I$74\"\n\"[1]Draft!$I$75\"\n\"[1]Draft!$I$76\"\n\"[1]Draft!$I$77\"\n\"[1]Draft!$I$79\"\n\"[1]Draft!$I$56\"\n\"[1]Draft!$I$57\"\n\"[1]Draft!$I$58\"\n\"[1]Draft!$I$59\"\n\"[1]Draft!$I$60\"\n\"[1]Draft!$I$61\"\n\"[1]Draft!$I$62\"\n\"[1]Draft!$I$63\"\n\"[1]Draft!$I$64\"\n\"[1]Draft!$I$65\"\n\"[1]Draft!$I$67\"\n\"[1]Draft!$I$66\"\n\"[1]Draft!$I$44\"\n\"[1]Draft!$I$45\"\n\"[1]Draft!$I$46\"\n\"[1]Draft!$I$50\"\n\"[1]Draft!$I$47\"\n\"[1]Draft!$I$48\"\n\"[1]Draft!$I$49\"\n\"[1]Draft!$I$51\"\n\"[1]Draft!$I$29\"\n\"[1]Draft!$I$30\"\n\"[1]Draft!$I$31\"\n\"[1]Draft!$I$32\"\n\"[1]Draft!$I$38\"\n\"[1]Draft!$I$37\"\n\"[1]Draft!$I$33\"\n\"[1]Draft!$I$34\"\n\"[1]Draft!$I$35\"\n\"[1]Draft!$I$36\"\n\"[1]Draft!$I$39\"\n\"[1]Draft!$I$40\"\n\"[1]Draft!$I$82\"\n\"[1]Draft!$I$83\"\n\"[1]Draft!$I$85\"\n\"[1]Draft!$I$84\"\n\"[1]Draft!$I$86\"\n\"[1]Draft!$I$87\"\n\"[1]Draft!$I$88\"\n\"[1]Draft!$I$89\"\n\"C3/22\"\n\"(D3+E3)/22\"\n\"F3/22\"\n\"0.11+0.84\"\n\"0.11+0.75\"\n\"0.045+1.182+0.091\"\n\"0.045+0.523+0.005\"\n\"SUM(B5:B9)\"\n\"SUM(F5:F8)\"\n\"B5+B6\"\n\"0.047+0.575\"\n\"B5/22\"\n\"E14/E$22\"\n\"SUM(B14:B21)\"\n\"6+11\"\n\"E29/E$37\"\n\"ROUND(SUM(B4:C4)*0.25,1)\"\n\"ROUND(SUM(B10:C10),1)\"\n\"ROUND(B15*0.4,1)\"\n\"VLOOKUP(D19,$G$21:$H$33,2)\"\n\"D7+D12+D17\"\n\"F2-D2\"\n\"G2\"\n\"I2+G3\"\n\"F2-D2\"\n\"G2\"\n\"I2+G3\"\n\"F2-D2\"\n\"G2\"\n\"I2+G3\"\n\"F2-D2\"\n\"G2\"\n\"I2+G3\"\n\"M5/(E5*F5/43560)\"\n\"M5/(M5+O5+Q5+S5)\"\n\"(A5+C5)-1\"\n\"B5+1\"\n\"B11+1\"\n\"B20+1\"\n\"B28+1\"\n\"B44+1\"\n\"B46+1\"\n\"B57+1\"\n\"B87+1\"\n\"B142+1\"\n\"((75+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(92.8571428571429+(1/28*100))-(1/28*100)\"\n\"(50+(1/28*100))-(1/28*100)\"\n\"((85.7142857142857+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(75+(1/28*100))-(1/28*100)\"\n\"(78.5714285714286+(1/28*100))-(1/28*100)\"\n\"(64.2857142857143+(1/28*100))-(1/28*100)\"\n\"24/28*100\"\n\"(71.4285714285714+(1/28*100))-(1/28*100)\"\n\"((82.1428571428571+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(89.2857142857143+(1/28*100))-(1/28*100)\"\n\"(85.7142857142857+(1/28*100))-(1/28*100)\"\n\"27/28*100\"\n\"((96.4285714285714+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(53.5714285714286+(1/28*100))-(1/28*100)\"\n\"(60.7142857142857+(1/28*100))-(1/28*100)\"\n\"(57.1428571428571+(1/28*100))-(1/28*100)\"\n\"((64.2857142857143+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(82.1428571428571+(1/28*100))-(1/28*100)\"\n\"(42.8571428571429+(1/28*100))-(1/28*100)\"\n\"(67.8571428571429+(1/28*100))-(1/28*100)\"\n\"(((15+2)/28*100)+(1/28*100))-(1/28*100)\"\n\"((89.2857142857143+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"((71.4285714285714+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"((92.8571428571429+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"(96.4285714285714+(1/28*100))-(1/28*100)\"\n\"(((17+2)/28*100)+(1/28*100))-(1/28*100)\"\n\"((78.5714285714286+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"((100+(1/28*100))-(1/28*100))+(1/28*100)\"\n\"23/28*100\"\n\"(32.1428571428571+(1/28*100))-(1/28*100)\"\n\"100*(F13-C13)/C13\"\n\"D11-C11\"\n\"SUM(B4:B6)\"\n\"SUM(B4:B5)\"\n\"SUM(B5:B10)\"\n\"SUM(C4:C10)\"\n\"IF(E15=1,E16,0)\"\n\"SUM(E17:G17)\"\n\"E17\"\n\"E17+E19\"\n\"SUM(E17:E19)\"\n\"$C27*$D27\"\n\"E27*(1+$E$22)\"\n\"+F27*(1+$E$22)\"\n\"+G27*L27*(1+$E$22)\"\n\"C27\"\n\"IF(E15=1,10000,5000)\"\n\"$D28*($H17+$H19)\"\n\"D28\"\n\"ROUND(0.25+0.25*9/12,2)\"\n\"E29*(1+$E22)\"\n\"$C30*$D30*($E23*$E21*ES!$G7/ES!$G6+$F23*$F21*MS!$H7/MS!$H6+$G21*HS!$F7/HS!$F6)\"\n\"C30\"\n\"ROUND(SUM(E27:E31)*$C32,0)\"\n\"SUM(E27:E32)\"\n\"+$D36\"\n\"E33*$D39\"\n\"$D40\"\n\"E33*$D41\"\n\"$D42*(($E23*ES!$G4/ES!$G6*$E21)+($F23*MS!$H4/MS!$H6*$F21)+(HS!$F4/HS!$F6*$G21))\"\n\"SUM(E39:E42)\"\n\"ES!F22*$E$20+MS!G21*F20+HS!E21*G20\"\n\"(ESconsume!$H20*$E20+MSconsume!$H17*$F20+HSconsume!$H24*$G20)+(ES!F22*E18+MS!G21*F18+HS!E21*G18)\"\n\"ROUND(E45*D46,0)\"\n\"(E45-E46)+ESconsume!G20*E20+MSconsume!G18*F20+HSconsume!G24*G20\"\n\"(ESconsume!$G20*$E20+MSconsume!$G17*$F20+HSconsume!$G24*$G20)+(H45-H46)\"\n\"ROUND(H45*I45,0)\"\n\"ESconsume!$G$33*$E$20+MSconsume!$G27*$F20+HSconsume!$G23*$G20\"\n\"ESconsume!$H$33*$E$20+MSconsume!$G27*$F20+HSconsume!$G23*$G20\"\n\"$D48*(E46+E47)\"\n\"SUM(E46:E48)\"\n\"$D50*$H20*2\"\n\"(ES!$F34*$E21)+(MS!$G36*$F21)+(HS!$E30*$G21)+J51\"\n\"(ES!$F34*$E21+MS!$G36*$F21+HS!$E30*$G21)*(1+E22)\"\n\"(ES!$F34*$E21+MS!$G36*$F21+HS!$E30*$G21)*(1+E22)*(1+E22)\"\n\"(ES!$F34*$E21+MS!$G36*$F21+HS!$E30*$G21)*(1+E22)*(1+E22)*(1+E22)+J52*H21\"\n\"SUM(E50:E51)\"\n\"E49+E52\"\n\"E33+E36+E43+E53\"\n\"E55*$D56\"\n\"SUM(E57:H57)\"\n\"(E29+E30)*(1+$C32)+E51\"\n\"SUM(E66:H66)\"\n\"SUM(E66:H66)\"\n\"E66/E57*100\"\n\"I66/H58*100\"\n\"I66/H58*100\"\n\"IF(C6=1,7,6)\"\n\"ROUND(G4/G5,0)\"\n\"E11*D11\"\n\"ROUND(ES!G4/4,0)\"\n\"ROUND((ES!$G$4/$G$5/$G$6)+1,0)\"\n\"IF($C$6=1,ROUND((ES!$G$4/$G$5/$G$6)+1,0),0)\"\n\"SUM(F11:F21)\"\n\"Budget!D48\"\n\"E23*F22\"\n\"F22+F24\"\n\"Budget!D30\"\n\"G7\"\n\"E31*D31*B31\"\n\"ROUND(G7/G6*2,0)\"\n\"C34*E34\"\n\"+ES!G4\"\n\"F12*D12\"\n\"ROUND(H4/4,0)\"\n\"D19*F19\"\n\"E19*F19\"\n\"SUM(G12:G19)\"\n\"ROUND((ESconsume!$H$4/$H$5/$H$6)+1,0)\"\n\"F22*E22\"\n\"IF($C$5=1,ROUND((ESconsume!$H$4/$H$5/$H$6)+1,0),0)\"\n\"SUM(G22:G32)\"\n\"G20+G33\"\n\"Budget!D48\"\n\"Budget!D48\"\n\"D35*G34\"\n\"D35*H34\"\n\"G34+G35\"\n\"SUM(B6:E6)\"\n\"ROUND(H4/H5,0)\"\n\"F11*D11\"\n\"ROUND(MS!H4/4,0)\"\n\"IF($B6=1,ROUND((MS!$H$4/$H$5/$H$6)+1,0),0)\"\n\"ROUND((MS!$H$4/$H$5/$H$6)+1,0)\"\n\"IF($E6=1,ROUND((MS!$H$4/$H$5/$H$6)+1,0),0)\"\n\"SUM(G11:G20)\"\n\"Budget!D48\"\n\"G21*$F22\"\n\"SUM(G21:G22)\"\n\"Budget!D30\"\n\"H7\"\n\"E32*D32*B32\"\n\"ROUND(H7/H6,0)\"\n\"C36*F36\"\n\"MS!H4\"\n\"F12*D12\"\n\"IF($E6=1,1,0)\"\n\"ROUND(MSconsume!H4/4,0)\"\n\"D17*F17\"\n\"E17*F17\"\n\"SUM(G12:G17)\"\n\"IF(B6=1,ROUND((MSconsume!$H$4/$H$5/$H$6)+1,0),0)\"\n\"IF(B6=1,ROUND((MSconsume!$H$4/$H$5/$H$6)+1,0),0)\"\n\"F20*E20\"\n\"ROUND((MSconsume!$H$4/$H$5/$H$6)+1,0)\"\n\"ROUND((MSconsume!$H$4/$H$5/$H$6)*2+2,0)\"\n\"IF(E6=1,ROUND((MSconsume!$H$4/$H$5/$H$6)+1,0),0)\"\n\"IF(E6=1,ROUND((MSconsume!$H$4/$H$5/$H$6)+1,0),0)\"\n\"G18+G27\"\n\"Budget!D48\"\n\"F29*G28\"\n\"F29*H28\"\n\"SUM(G28:G29)\"\n\"IF(C5=1,4,3)\"\n\"ROUND(F4/F5,0)\"\n\"D11*C11\"\n\"ROUND([1]HS!F4/4,0)\"\n\"ROUND(F$7/F$6+1,0)\"\n\"SUM(E11:E18)\"\n\"[1]Budget!D35\"\n\"D20*E19\"\n\"E19+E20\"\n\"F7/F6\"\n\"B30*D30\"\n\"HS!F5\"\n\"F11*D11\"\n\"F11*E11\"\n\"ROUND(HSconsume!H5/4,0)\"\n\"D13*F13\"\n\"E13*F13\"\n\"SUM(G11:G13)\"\n\"ROUND(H$5/H$6/H$7,0)+1\"\n\"ROUND(H$5/H$6/H$7,0)+1\"\n\"SUM(G15:G22)\"\n\"G14+G23\"\n\"SUM(H11:H22)\"\n\"Budget!D48\"\n\"F28*G24\"\n\"F28*H24\"\n\"0.028*684850\"\n\"54585-C13\"\n\"57123-D13\"\n\"63245-E13\"\n\"66024-F13\"\n\"0.079*684850\"\n\"109000-B14\"\n\"155615-(C14+C13)\"\n\"147715-(D14+D13)\"\n\"162986-(E14+E13)\"\n\"165986-(F14+F13)\"\n\"0.166*684850\"\n\"263553-(B15+B14)\"\n\"296510-(C15+C14+C13)\"\n\"304513-(D15+D14+D13)\"\n\"325081-(E15+E14+E13)\"\n\"325148-(F15+F14+F13)\"\n\"0.22*684850\"\n\"B18-(B16+B15+B14)\"\n\"C18-(C16+C15+C14+C13)\"\n\"0.507*684850\"\n\"126916+107063+58849+26943+25525\"\n\"SUM(I13:I17)\"\n\"0.172*46691\"\n\"14965-C25\"\n\"14937-D25\"\n\"16472-E25\"\n\"16327-F25\"\n\"0.26*46691\"\n\"29175-B26\"\n\"26503-(C26+C25)\"\n\"28443-(D26+D25)\"\n\"30975-(E26+E25)\"\n\"29545-(F26+F25)\"\n\"0.245*46691\"\n\"44504-(B26+B27)\"\n\"39620-(C27+C26+C25)\"\n\"37377-(D27+D26+D25)\"\n\"39708-(E27+E26+E25)\"\n\"38795-(F27+F26+F25)\"\n\"0.203*46691\"\n\"0.12*46691\"\n\"3767+930+279+93+279\"\n\"0.037*1046711\"\n\"82443-C37\"\n\"99370-D37\"\n\"102917-E37\"\n\"105954-F37\"\n\"0.077*1046711\"\n\"131908-B38\"\n\"238358-(C37+C38)\"\n\"272969-(D38+D37)\"\n\"282177-(E38+E37)\"\n\"283636-(F38+F37)\"\n\"0.119*1046711\"\n\"271522-(B38+B39)\"\n\"399161-(C39+C38+C37)\"\n\"474594-(D39+D38+D37)\"\n\"490910-(E39+E38+E37)\"\n\"491813-(F39+F38+F37)\"\n\"0.264*1046711\"\n\"C42-(C39+C38+C37+C40)\"\n\"0.503*1046711\"\n\"213962+143324+77804+30712+18427\"\n\"0.158*46927\"\n\"0.263*46927\"\n\"0.257*46927\"\n\"0.208*46927\"\n\"0.114*46927\"\n\"3671+941+282+94+188\"\n\"0.026*420544\"\n\"0.103*420544\"\n\"0.151*420544\"\n\"0.235*420544\"\n\"0.485*420544\"\n\"85852+55066+32520+16477+13441\"\n\"18681+11951+7426+4294+4990\"\n\"SUM(B83:B88)\"\n\"IF(ISBLANK(B4),\"\"enter Y or N\"\",IF(AND(NOT(B4=\"\"Y\"\"),NOT(B4=\"\"N\"\")),\"\"enter Y or N\"\",\"\":-):-):-)\"\"))\"\n\"IF(IF(NOT(ISBLANK(B8)),1,0)+IF(NOT(ISBLANK(C8)),1,0)+IF(NOT(ISBLANK(D8)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(I8=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B8)),1,0)+IF(NOT(ISBLANK(C8)),2,0)+IF(NOT(ISBLANK(D8)),3,0))\"\n\"IF(IF(NOT(ISBLANK(B10)),1,0)+IF(NOT(ISBLANK(C10)),1,0)+IF(NOT(ISBLANK(D10)),1,0)+IF(NOT(ISBLANK(E10)),1,0)+IF(NOT(ISBLANK(F10)),1,0)+IF(NOT(ISBLANK(G10)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(I10=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B10)),0,0)+IF(NOT(ISBLANK(C10)),1,0)+IF(NOT(ISBLANK(D10)),2,0)+IF(NOT(ISBLANK(E10)),3,0)+IF(NOT(ISBLANK(F10)),4,0)+IF(NOT(ISBLANK(G10)),6,0))\"\n\"IF(IF(NOT(ISBLANK(B14)),1,0)+IF(NOT(ISBLANK(C14)),1,0)+IF(NOT(ISBLANK(D14)),1,0)+IF(NOT(ISBLANK(E14)),1,0)+IF(NOT(ISBLANK(F14)),1,0)+IF(NOT(ISBLANK(G14)),1,0)+IF(NOT(ISBLANK(H14)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(I14=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B14)),0,0)+IF(NOT(ISBLANK(C14)),1,0)+IF(NOT(ISBLANK(D14)),2,0)+IF(NOT(ISBLANK(E14)),3,0)+IF(NOT(ISBLANK(F14)),4,0)+IF(NOT(ISBLANK(G14)),5,0)+IF(NOT(ISBLANK(H14)),6,0))\"\n\"IF(OR(ISBLANK(B4),I8=\"\"No\"\",I10=\"\"No\"\",I12=\"\"No\"\",I14=\"\"No\"\"),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B17=\"\"No\"\",\"\"complete data\"\",IF(B4=\"\"Y\"\",\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(B18=\"\"No\"\",\"\" Applies to a selecting a chemical reagent.\"\",\"\" :-):-):-)\"\")\"\n\"IF(B17=\"\"No\"\",\"\"complete data\"\",VLOOKUP(IF(J8=1,J10,IF(J8=2,J12,J14)),A23:B29,2))\"\n\"IF(B17=\"\"No\"\",\"\"complete data\"\",VLOOKUP(ROUND(SUM(J10:J14)/3,0),A23:B29,2))\"\n\"SUM(B3:F3)\"\n\"SUM(I3:J3)\"\n\"SUM(M3:V3)\"\n\"(($AD$3+AD4)/$AD$3)*100\"\n\"AVERAGE(I4:I24)\"\n\"('Grade Sheet'!G3*1.88)\"\n\"('Grade Sheet'!K3*1)\"\n\"('Grade Sheet'!W3*0.75)\"\n\"SUM(B4:D4)\"\n\"[1]name!C$15\"\n\"[1]name!C$31\"\n\"[1]name!C$25\"\n\"[1]name!C$9\"\n\"[1]name!C$21\"\n\"[1]name!C$20\"\n\"[1]name!C$30\"\n\"[1]name!C$26\"\n\"[1]name!C$27\"\n\"[1]name!C$12\"\n\"[1]name!C$33\"\n\"[1]name!C$24\"\n\"[1]name!C$8\"\n\"[1]name!C$13\"\n\"[1]name!C$11\"\n\"[1]name!C$4\"\n\"[1]name!C$16\"\n\"[1]name!C$23\"\n\"[1]name!C$22\"\n\"[1]name!C$34\"\n\"[1]name!C$32\"\n\"[1]name!C$3\"\n\"[1]name!C$18\"\n\"[1]name!C$17\"\n\"[1]name!C$5\"\n\"[1]name!C$28\"\n\"[1]name!C$14\"\n\"[1]name!C$7\"\n\"[1]name!C$10\"\n\"[1]name!C$29\"\n\"[1]name!C$19\"\n\"[1]name!C$6\"\n\"SUM(E6:E16)\"\n\"SUM(E43:E48)\"\n\"SUM(E70:E79)\"\n\"SUM(E106:E112)\"\n\"ROUND((SUM(F2:M2)-MIN(F2:M2))/700*100,0)\"\n\"SUM(O2:X2)\"\n\"+B2+C2+D2+E2+N2+Z2+Y2\"\n\"AA2/700*100\"\n\"B2+C2+D2+E2+F2+(G2*0.35)+(H2*0.35)\"\n\"B3+C3+D3+E3+F3+(G3*0.35)+(H3*0.35)\"\n\"SUM(D2:D26)\"\n\"SUM(C3:C12)\"\n\"C13/D13*100\"\n\"SUM(C17:C29)\"\n\"SUM(C34:C35)\"\n\"(D14*0.5+D31*0.2+D37*0.1)/80\"\n\"H2+1\"\n\"1\"\n\"H28-1\"\n\"H38-3\"\n\"(SUM(X4:Y4)/25)*0.15\"\n\"(W4/150)*0.15\"\n\"(AA4/150)*0.2\"\n\"((SUM(C4:V4))/200)*0.15\"\n\"(Z4/250)*0.25\"\n\"(AB4/150)*0.1\"\n\"SUM(AC4:AH4)\"\n\"IF(AI4>90%,\"\"A\"\",IF(AI4>80%,\"\"B\"\",IF(AI4>70%,\"\"C\"\",IF(AI4>60%,\"\"D\"\", \"\"F\"\"))))\"\n\"SUM(C3:D3)/125\"\n\"SUM(C3:D3,F3:H3)\"\n\"I3/300\"\n\"SUM(C3:D3,F3:H3,K3)/300\"\n\"SUM(C2:D2)\"\n\"SUM(E2*2)\"\n\"A9+7\"\n\"C$35*C$36\"\n\"D3\"\n\"D3\"\n\"D3\"\n\"P6/$P$29\"\n\"SUM(P6:P8)\"\n\"SUM(P18:P19)\"\n\"P9+P15+P20\"\n\"P27+P22\"\n\"P32+P33\"\n\"IF($P$34=0,0,(P22/$P$34*2000))\"\n\"IF($P$34=0,0,(P27/$P$34*2000))\"\n\"IF($P$34=0,0,(P29/$P$34*2000))\"\n\"C12*B12/2000\"\n\"H3\"\n\"SUM(D3:I3)\"\n\"100-J3\"\n\"J3+K3\"\n\"L15+L16+L17+L18\"\n\"L19\"\n\"L11+L12\"\n\"SUM(N15:X15)\"\n\"SUM(N24:N34)\"\n\"SUM(N38:N48)\"\n\"SUM(N52:N61)\"\n\"SUM(N65:N72)\"\n\"SUM(N76:N101)\"\n\"D24/D$2*D$3+E24/E$2*E$3+F24/F$2*F$3+G24/G$2*G$3+H24/H$2*H$3+I24/I$2*I$3\"\n\"J24+K24/K$2*K$3\"\n\"IF($M24=\"\"W\"\", 1, 0)\"\n\"IF($M24=\"\"NP\"\", 1, 0)\"\n\"IF($M24=\"\"A\"\", 1, 0)\"\n\"IF($M24=\"\"A--\"\", 1, 0)\"\n\"IF($M24=\"\"B\"\", 1, 0)\"\n\"IF($M24=\"\"B--\"\", 1, 0)\"\n\"IF($M24=\"\"C\"\", 1, 0)\"\n\"IF($M24=\"\"C--\"\", 1, 0)\"\n\"IF($M24=\"\"D\"\", 1, 0)\"\n\"IF($M24=\"\"E\"\", 1, 0)\"\n\"IF($M24=\"\"F\"\", 1, 0)\"\n\"B24+1\"\n\"26+8\"\n\"6+10\"\n\"27+20\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"SUM(B2:J2)\"\n\"SUM(B3:R3)\"\n\"PRODUCT(PERCENTRANK(S$4:S$43,S3),100)\"\n\"[0]!Team37\"\n\"S3+V3\"\n\"[0]!Team23\"\n\"[0]!Team19\"\n\"30-1\"\n\"[0]!TEam8\"\n\"[0]!Team24\"\n\"[0]!Team35\"\n\"[0]!Team9\"\n\"[0]!Team22\"\n\"22-1\"\n\"[0]!Team36\"\n\"27.5-1\"\n\"29-1\"\n\"26.5-1\"\n\"28.75-1\"\n\"29.75-1\"\n\"29.5-1\"\n\"K3+L3\"\n\"SUM(B3:P3)\"\n\"AVERAGE(K3:K11)\"\n\"AVERAGE(L3:L11)\"\n\"MEDIAN(K3:K11)\"\n\"MEDIAN(L3:L11)\"\n\"IF(C20>=90,\"\"A\"\",IF(C20>=87,\"\"B+\"\",IF(C20>=80,\"\"B\"\",IF(C20>=77,\"\"C+\"\",IF(C20>=70,\"\"C\"\",IF(C20>=60,\"\"D\"\",IF(C20>=0,\"\"F\"\")))))))\"\n\"(SUM((35*C20)+(5*E20))/40)\"\n\"(75*S20+25*T20)/100\"\n\"(G20+M20)/2\"\n\"(70*X20+10*O20+10*Q20+5*U20)/95\"\n\"SUM(C18:Q18)\"\n\"R18/15\"\n\"(SUM((35*C19)+(5*E19))/40)\"\n\"(I19*70+J19*20)/90\"\n\"((U19+V19+W19+X19)/4)+0.12*Y19\"\n\"(G19+O19)/2\"\n\"(70*AB19+10*Q19+10*S19+10*Z19)/100\"\n\"((U20+V20+W20+X20)/4)+0.06*Y20\"\n\"SUM(E6:E10)\"\n\"SUM(E31:E37)\"\n\"SUM(F73:F76)\"\n\"SUM(B2:C2)\"\n\"SUM(F2:I2)\"\n\"J2*K2\"\n\"D2+L2\"\n\"(70/75)*15\"\n\"(72/75)*15\"\n\"AVERAGE(B3:K3)\"\n\"2*L3 + 0.2*M3 + 0.2*N3 + 0.4*O3\"\n\"IF(P3>=100,\"\"A+\"\",IF(P3>=90,\"\"A\"\",IF(P3>=80,\"\"B\"\",IF(P3>70,\"\"C\"\",\"\"NC\"\"))))\"\n\"F100\"\n\"AVERAGE(B3:B103)\"\n\"STDEV(B3:B102)\"\n\"SUM(U84)/R84\"\n\"SUM(U84)/R84\"\n\"SUM(F95:J95)\"\n\"SUM(I137,L137,N137,P137,R137,T137)\"\n\"SUM(I137,L137,N137,P137,R137,T137)\"\n\"SUM(C10:F10)\"\n\"SUM((H10-I10)/I10)\"\n\"SUM(K10-L10)/L10\"\n\"SUM(G10:G19)\"\n\"SUM(C2:L2)\"\n\"SUM(M2:P2)\"\n\"Q3/$Q$2\"\n\"AVERAGE(C3:C16)\"\n\"MEDIAN(C3:C16)\"\n\"MIN(C3:C16)\"\n\"MAX(C3:C16)\"\n\"AVERAGE(A3:A52)\"\n\"MEDIAN(A3:A52)\"\n\"MAX(A3:A52)\"\n\"MODE(A3:A52)\"\n\"MIN(A3:A52)\"\n\"VAR(A3:A52)\"\n\"STDEV(A3:A52)\"\n\"FREQUENCY(A3:A52,E19:E22)\"\n\"MAX(A2:A81)\"\n\"MIN(A2:A81)\"\n\"AVERAGE(A2:A81)\"\n\"MODE(A2:A81)\"\n\"MEDIAN(A2:A81)\"\n\"SUM(A2:A81)\"\n\"VAR(A2:A81)\"\n\"STDEV(A2:A81)\"\n\"SUM(C2:C46)\"\n\"SUM(B2:B11)\"\n\"(B2/80)*100\"\n\"SUM(B2:B11)\"\n\"SUM((Exercises 4, 5 and 6!$H$2:$H$11-Exercise 7!B2:B11)/Exercise 7!B2:B11)\"\n\"CHIDST(E3,9)\"\n\"CHIINV(0.05,9)\"\n\"NORMSDIST(64,75.25,10.37,TRUE)-NORMSDIST(60,75.25,10.37,TRUE)\"\n\"NORMSDIST(79,75.25,10.37,TRUE)-NORMSDIST(75,75.25,10.37,TRUE)\"\n\"NORMSDIST(86,75.25,10.37,TRUE)-NORMSDIST(83,75.25,10.37,TRUE)\"\n\"NORMSDIST(99,75.25,10.37,TRUE)-NORMSDIST(92,75.25,10.37,TRUE)\"\n\"'Exercise 1'!I2/SQRT(80)\"\n\"'Exercise 11,12,13 and 14'!D4-(TINV(0.1,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"'Exercise 11,12,13 and 14'!D4+(TINV(0.1,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"'Exercise 11,12,13 and 14'!D4-(TINV(0.05,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"'Exercise 11,12,13 and 14'!D4+(TINV(0.05,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"'Exercise 11,12,13 and 14'!D4-(TINV(0.01,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"'Exercise 11,12,13 and 14'!D4+(TINV(0.01,79)*'Exercise 11,12,13 and 14'!B1)\"\n\"-CONFIDENCE(0.1,10.37,80)\"\n\"CONFIDENCE(0.1,10.37,80)\"\n\"-CONFIDENCE(0.05,10.37,80)\"\n\"CONFIDENCE(0.05,10.37,80)\"\n\"-CONFIDENCE(0.01,10.37,80)\"\n\"CONFIDENCE(0.01,10.37,80)\"\n\"('Exercise 1'!D2-75)/B1\"\n\"TDIST(B14,79,2)\"\n\"TINV(0.05,79)\"\n\"('Exercise 1'!D2-50)/'Exercise 11,12,13 and 14'!B1\"\n\"TDIST(ABS(B17),79,2)\"\n\"SUM(A2:A41)\"\n\"AVERAGE(A2:A41)\"\n\"VAR(A2:A41)\"\n\"SQRT(D2)\"\n\"E2/SQRT(40)\"\n\"(H2/40)\"\n\"SUM(H2:H11)\"\n\"('Exercise 15'!C2-'Exercise 1'!D2)/SQRT('Exercise 15'!F2^2+'Exercise 11,12,13 and 14'!B1^2)\"\n\"TDIST(ABS(B4),118,2)\"\n\"TINV(0.05,118)\"\n\"AVERAGE(A2:A11)\"\n\"AVERAGE(A2:A11,B2:B11)\"\n\"STDEV(A2:A11)\"\n\"STDEV(A2:A11,B2:B11)\"\n\"AVERAGE(C2:C11)\"\n\"STDEV(C2:C11)\"\n\"LINEST(B2:B11,A2:A11,TRUE,TRUE)\"\n\"((C5+D5+E5)/150)*100*0.5\"\n\"((G5+H5)/100)*100*0.3\"\n\"(J5/50)*100*0.1\"\n\"(L5/10)*100*0.1\"\n\"F5+I5+K5+M5\"\n\"(B8+O8)/2\"\n\"(C8/$C$8)*100\"\n\"G9*100/G$9\"\n\"C13*100/C$8\"\n\"G34*100/G$34\"\n\"(G52/G52)*100\"\n\"(G53/G52)*100\"\n\"(G10/$G$9)*100\"\n\"(C15/C10)*100\"\n\"(C19/$C$18)*100\"\n\"(G22/$G$21)*100\"\n\"(G31/$G$30)*100\"\n\"(C32/$C$31)*100\"\n\"(G42/$G$42)*100\"\n\"(C47/$C$46)*100\"\n\"(C61/$C$60)*100\"\n\"(C65/$C$64)*100\"\n\"(C9/$C$9)*100\"\n\"(G9/$G$9)*100\"\n\"(C18/$C$18)*100\"\n\"(C23/$C$23)*100\"\n\"(C27/$C$27)*100\"\n\"(G33/$G$33)*100\"\n\"(C37/$C$37)*100\"\n\"(C8/$C$8)*100\"\n\"(G9/$G$9)*100\"\n\"(G14/$G$14)*100\"\n\"(C42/$C$42)*100\"\n\"(G51/G$51)*100\"\n\"SUM(I7:AF7)\"\n\"COUNTA(I6:AF6)\"\n\"SUM(I7:AF7)\"\n\"SUM(I12:AF12)\"\n\"SUM(E12/E6)\"\n\"IF(F12<>\"\"\"\",HLOOKUP(F12,GradeTable,2),\"\"\"\")\"\n\"IF(F12<>\"\"\"\",HLOOKUP(F12,GradeTable,3),\"\"\"\")\"\n\"SUM(E13/E6)\"\n\"SUM(K14:AF14)\"\n\"SUM(E14/(E6-45))\"\n\"SUM(E15/E6)\"\n\"SUM(E16/E6)\"\n\"SUM(E17/(E6))\"\n\"SUM(E18/E6)\"\n\"SUM(E19/E6)\"\n\"SUM(E20/E6)\"\n\"SUM(E21/E6)\"\n\"SUM(E22/E6)\"\n\"SUM(E23/E6)\"\n\"SUM(E24/E6)\"\n\"SUM(E25/E6)\"\n\"SUM(E26/E6)\"\n\"SUM(E27/E6)\"\n\"SUM(E28/E6)\"\n\"SUM(E29/E6)\"\n\"SUM(E30/E6)\"\n\"SUM(E31/E6)\"\n\"SUM(E32/E6)\"\n\"SUM(E33/E6)\"\n\"SUM(E34/E6)\"\n\"SUM(E35/E6)\"\n\"SUM(E36/E6)\"\n\"SUM(E37/E6)\"\n\"SUM(E38/E6)\"\n\"SUM(E39/E6)\"\n\"SUM(E40/E6)\"\n\"SUM(E41/E6)\"\n\"IF(OR(F11,F11>\"\"\"\"),F11,\"\"\"\")\"\n\"AVERAGE(F12:F41)\"\n\"IF(SUM(H12:H41),AVERAGE(H12:H41),\"\"\"\")\"\n\"IF(SUM(M13,M17:M19,M21:M28,M31,M35:M36,M37:M41),AVERAGE(M13,M17:M19,M21:M28,M31,M35:M36,M37:M41),\"\"\"\")\"\n\"IF(SUM(Q12,Q13,Q17:Q21,Q21,Q24,Q26,Q27,Q31,Q36,Q38,Q39),AVERAGE(Q12,Q13,Q17:Q21,Q21,Q24,Q26,Q27,Q31,Q36,Q38,Q39),\"\"\"\")\"\n\"IF(SUM(U12:U24,U26:U41),AVERAGE(U12:U24,U26:U41),\"\"\"\")\"\n\"IF(SUM(Y12:Y37,Y39:Y41),AVERAGE(Y12:Y37,Y39:Y41),\"\"\"\")\"\n\"IF(SUM(AC12:AC15,AC17:AC20,AC22:AC24,AC26:AC29,AC33,AC35:AC40,#REF!),AVERAGE(AC15,AC17:AC20,AC22:AC24,AC26:AC29,AC33,AC35:AC40,#REF!:#REF!),\"\"\"\")\"\n\"IF(SUM(F12:F41),MAX(F12:F41),\"\"\"\")\"\n\"IF(SUM(F12:F41),MIN(F12:F41),\"\"\"\")\"\n\"COUNTIF(Gradebook!G12:G41,\"\"A\"\")\"\n\"SUM(C3/C10)\"\n\"COUNTIF(Gradebook!G12:G41,\"\"B\"\")\"\n\"SUM(C4/C10)\"\n\"COUNTIF(Gradebook!G12:G41,\"\"C\"\")\"\n\"SUM(C5/C10)\"\n\"COUNTIF(Gradebook!G12:G41,\"\"D\"\")\"\n\"SUM(C6/C10)\"\n\"COUNTIF(Gradebook!G13:G41,\"\"F\"\")\"\n\"SUM(C7/C10)\"\n\"SUM(C8/C10)\"\n\"SUM(C9/C10)\"\n\"SUM(C3:C9)\"\n\"(Gradebook!F43)\"\n\"85.5+5\"\n\"B2+D2+F2*20/100+H2+J2+L2+N2+P2+Q2*30/100\"\n\"(B4+D4+F4*20/100+J4+L4+N4+Q4*30/100)*100/85\"\n\"(B13+D13+H13+J13+L13+N13+P13+Q13*30/100)*100/80\"\n\"MIN(F2:F43)\"\n\"AVERAGE(Q2:Q43)\"\n\"MAX(F2:F43)\"\n\"AVERAGE(F2:F43)\"\n\"STDEV(F2:F43)\"\n\"QUARTILE(F2:F43,1)\"\n\"QUARTILE(F2:F43,2)\"\n\"QUARTILE(F2:F43,3)\"\n\"3/20\"\n\"AVERAGE(E3:E52)\"\n\"STDEV(E3:E52)\"\n\"MIN(E3:E52)\"\n\"QUARTILE(E3:E52,1)\"\n\"MEDIAN(E3:E52)\"\n\"QUARTILE(E3:E52,3)\"\n\"MAX(E3:E52)\"\n\"SKEW(E3:E52)\"\n\"AVERAGE(E3:E27)\"\n\"STDEV(E3:E27)\"\n\"AVERAGE(E28:E52)\"\n\"STDEV(E28:E52)\"\n\"(J30-J34)/SQRT(((J31^2)/25)+((J35^2)/25))\"\n\"TINV(0.05,24)\"\n\" 0.9797 + (-0.0008*3.7) + (-0.3262*0.15)\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"SUM(G4:H4)\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",20, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"SUM(F4)\"\n\"SUM(H4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"SUM(G5,F6)\"\n\"SUM(H5)\"\n\"IF(K6=\"\"Y\"\",41, IF(K6=\"\"N\"\",0, IF(K6=\"\"\"\",\"\"\"\")))\"\n\"G13\"\n\"SUM(L4:L22)\"\n\"SUM(L4:L22)\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"SUM(G4:H4)\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",20, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"SUM(F4)\"\n\"SUM(H4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"SUM(G5,F6)\"\n\"SUM(H5)\"\n\"IF(K6=\"\"Y\"\",41, IF(K6=\"\"N\"\",0, IF(K6=\"\"\"\",\"\"\"\")))\"\n\"G15\"\n\"IF(K16=\"\"Y\"\",30, IF(K16=\"\"N\"\",0, IF(K16=\"\"\"\",\"\"\"\")))\"\n\"SUM(L4:L22)\"\n\"SUM(L4:L22)\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"SUM(G4:H4)\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",20, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"SUM(F4)\"\n\"SUM(H4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"SUM(G5,F6)\"\n\"SUM(H5)\"\n\"IF(K6=\"\"Y\"\",41, IF(K6=\"\"N\"\",0, IF(K6=\"\"\"\",\"\"\"\")))\"\n\"G17\"\n\"IF(K18=\"\"Y\"\",30, IF(K18=\"\"N\"\",0, IF(K18=\"\"\"\",\"\"\"\")))\"\n\"SUM(L4:L22)\"\n\"SUM(L4:L22)\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(B13=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",B13,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(B13))=FALSE,\"\"Err3\"\",IF(AND(INT(B13)>=1,INT(B13)<=100) = FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",B13,1))=FALSE,\"\"Err5\"\",\"\"\"\")))))\"\n\"IF(B13=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",B13,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(B13))=FALSE,\"\"Err3\"\",IF(AND(INT(B13)>=1,INT(B13)<=100) = FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",B13,1))=FALSE,\"\"Err5\"\",\"\"\"\")))))\"\n\"IF(B11=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",B11,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(B11))=FALSE,\"\"Err3\"\",IF(AND(INT(B11)>=1,INT(B11)<=100) = FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",B11,1))=FALSE,\"\"Err5\"\",\"\"\"\")))))\"\n\"IF(B15=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",B15,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(B15))=FALSE,\"\"Err3\"\",IF(AND(INT(B15)>=1,INT(B15)<=100)=FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",RIGHT(B15,2),1))=TRUE,\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(B12=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",B12,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(B12))=FALSE,\"\"Err3\"\",IF(AND(INT(B12)>=0,INT(B12)<=100) = FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",B12,1))=FALSE,\"\"Err5\"\",\"\"\"\")))))\"\n\"IF(C12=\"\"\"\",\"\"Err1\"\",IF(ISERROR(SEARCH(\"\"%\"\",C12,1))=FALSE,\"\"Err2\"\",IF(ISNUMBER(INT(C12))=FALSE,\"\"Err3\"\",IF(AND(INT(C12)>=0,INT(C12)<=100)=FALSE,\"\"Err4\"\",IF(ISERROR(SEARCH(\"\".\"\",RIGHT(C12,2),1))=TRUE,\"\"Err5\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B13,1))=FALSE,\"\"Err1\"\",IF(OR(B13=\"\"\"\",ISNUMBER(INT(B13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B13,1))=FALSE,\"\"Err3\"\",IF(OR(B13=\"\"\"\",AND(INT(B13)>=1,INT(B13)<=9999))=FALSE,\"\"Err4\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C13,1))=FALSE,\"\"Err1\"\",IF(OR(C13=\"\"\"\",ISNUMBER(INT(C13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C13,1))=FALSE,\"\"Err3\"\",IF(OR(C13=\"\"\"\",AND(INT(C13)>=0,INT(C13)<=100))=FALSE,\"\"Err5\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B16,1))=FALSE,\"\"Err1\"\",IF(OR(B16=\"\"\"\",ISNUMBER(INT(B16)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B16,1))=FALSE,\"\"Err3\"\",IF(OR(B16=\"\"\"\",AND(INT(B16)>=1,INT(B16)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B16)<>SUM(INT(B13)+INT(B14)+INT(B15)),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B20,1))=FALSE,\"\"Err1\"\",IF(OR(B20=\"\"\"\",ISNUMBER(INT(B20)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B20,1))=FALSE,\"\"Err3\"\",IF(OR(B20=\"\"\"\",AND(INT(B20)>=1,INT(B20)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B20)<>SUM(INT(B17)+INT(B18)+INT(B19)),\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B27,1))=FALSE,\"\"Err1\"\",IF(OR(B27=\"\"\"\",ISNUMBER(INT(B27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B27,1))=FALSE,\"\"Err3\"\",IF(OR(B27=\"\"\"\",AND(INT(B27)>=1,INT(B27)<=9999))=FALSE,\"\"Err4\"\",IF(B27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C27,1))=FALSE,\"\"Err1\"\",IF(OR(C27=\"\"\"\",ISNUMBER(INT(C27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C27,1))=FALSE,\"\"Err3\"\",IF(OR(C27=\"\"\"\",AND(INT(C27)>=0,INT(C27)<=100))=FALSE,\"\"Err5\"\",IF(C27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E27,1))=FALSE,\"\"Err1\"\",IF(OR(E27=\"\"\"\",ISNUMBER(INT(E27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E27,1))=FALSE,\"\"Err3\"\",IF(OR(E27=\"\"\"\",AND(INT(E27)>=0,INT(E27)<=100))=FALSE,\"\"Err5\"\",IF(E27=\"\"\"\",\"\"Err6\"\",IF(E27<>'LEA1'!C13,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D33,1))=FALSE,\"\"Err1\"\",IF(OR(D33=\"\"\"\",ISNUMBER(INT(D33)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D33,1))=FALSE,\"\"Err3\"\",IF(OR(D33=\"\"\"\",AND(INT(D33)>=1,INT(D33)<=9999))=FALSE,\"\"Err4\"\",IF(INT(D33)<>SUM(INT(D31)+INT(D32)+INT(D32)),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E44,1))=FALSE,\"\"Err1\"\",IF(OR(E44=\"\"\"\",ISNUMBER(INT(E44)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E44,1))=FALSE,\"\"Err3\"\",IF(OR(E44=\"\"\"\",AND(INT(E44)>=0,INT(E44)<=100))=FALSE,\"\"Err5\"\",IF(E44=\"\"\"\",\"\"Err6\"\",IF(E44<>'LEA1'!C16,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B13,1))=FALSE,\"\"Err1\"\",IF(OR(B13=\"\"\"\",ISNUMBER(INT(B13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B13,1))=FALSE,\"\"Err3\"\",IF(OR(B13=\"\"\"\",AND(INT(B13)>=1,INT(B13)<=9999))=FALSE,\"\"Err4\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C13,1))=FALSE,\"\"Err1\"\",IF(OR(C13=\"\"\"\",ISNUMBER(INT(C13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C13,1))=FALSE,\"\"Err3\"\",IF(OR(C13=\"\"\"\",AND(INT(C13)>=0,INT(C13)<=100))=FALSE,\"\"Err5\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B16,1))=FALSE,\"\"Err1\"\",IF(OR(B16=\"\"\"\",ISNUMBER(INT(B16)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B16,1))=FALSE,\"\"Err3\"\",IF(OR(B16=\"\"\"\",AND(INT(B16)>=1,INT(B16)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B16)<>SUM(INT(B13)+INT(B14)+INT(B15)),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B20,1))=FALSE,\"\"Err1\"\",IF(OR(B20=\"\"\"\",ISNUMBER(INT(B20)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B20,1))=FALSE,\"\"Err3\"\",IF(OR(B20=\"\"\"\",AND(INT(B20)>=1,INT(B20)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B20)<>SUM(INT(B17)+INT(B18)+INT(B19)),\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B27,1))=FALSE,\"\"Err1\"\",IF(OR(B27=\"\"\"\",ISNUMBER(INT(B27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B27,1))=FALSE,\"\"Err3\"\",IF(OR(B27=\"\"\"\",AND(INT(B27)>=1,INT(B27)<=9999))=FALSE,\"\"Err4\"\",IF(B27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C27,1))=FALSE,\"\"Err1\"\",IF(OR(C27=\"\"\"\",ISNUMBER(INT(C27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C27,1))=FALSE,\"\"Err3\"\",IF(OR(C27=\"\"\"\",AND(INT(C27)>=0,INT(C27)<=100))=FALSE,\"\"Err5\"\",IF(C27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E27,1))=FALSE,\"\"Err1\"\",IF(OR(E27=\"\"\"\",ISNUMBER(INT(E27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E27,1))=FALSE,\"\"Err3\"\",IF(OR(E27=\"\"\"\",AND(INT(E27)>=0,INT(E27)<=100))=FALSE,\"\"Err5\"\",IF(E27=\"\"\"\",\"\"Err6\"\",IF(E27<>'LEA2'!C13,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D33,1))=FALSE,\"\"Err1\"\",IF(OR(D33=\"\"\"\",ISNUMBER(INT(D33)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D33,1))=FALSE,\"\"Err3\"\",IF(OR(D33=\"\"\"\",AND(INT(D33)>=1,INT(D33)<=9999))=FALSE,\"\"Err4\"\",IF(D33<>SUM(D30,D31,D32),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E44,1))=FALSE,\"\"Err1\"\",IF(OR(E44=\"\"\"\",ISNUMBER(INT(E44)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E44,1))=FALSE,\"\"Err3\"\",IF(OR(E44=\"\"\"\",AND(INT(E44)>=0,INT(E44)<=100))=FALSE,\"\"Err5\"\",IF(E44=\"\"\"\",\"\"Err6\"\",IF(E44<>'LEA2'!C15,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E61,1))=FALSE,\"\"Err1\"\",IF(OR(E61=\"\"\"\",ISNUMBER(INT(E61)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E61,1))=FALSE,\"\"Err3\"\",IF(OR(E61=\"\"\"\",AND(INT(E61)>=0,INT(E61)<=100))=FALSE,\"\"Err5\"\",IF(E61=\"\"\"\",\"\"Err6\"\",IF(E61<>'LEA2'!C17,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B13,1))=FALSE,\"\"Err1\"\",IF(OR(B13=\"\"\"\",ISNUMBER(INT(B13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B13,1))=FALSE,\"\"Err3\"\",IF(OR(B13=\"\"\"\",AND(INT(B13)>=1,INT(B13)<=9999))=FALSE,\"\"Err4\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C13,1))=FALSE,\"\"Err1\"\",IF(OR(C13=\"\"\"\",ISNUMBER(INT(C13)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C13,1))=FALSE,\"\"Err3\"\",IF(OR(C13=\"\"\"\",AND(INT(C13)>=0,INT(C13)<=100))=FALSE,\"\"Err5\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B16,1))=FALSE,\"\"Err1\"\",IF(OR(B16=\"\"\"\",ISNUMBER(INT(B16)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B16,1))=FALSE,\"\"Err3\"\",IF(OR(B16=\"\"\"\",AND(INT(B16)>=1,INT(B16)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B16)<>SUM(INT(B13)+INT(B14)+INT(B15)),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B20,1))=FALSE,\"\"Err1\"\",IF(OR(B20=\"\"\"\",ISNUMBER(INT(B20)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B20,1))=FALSE,\"\"Err3\"\",IF(OR(B20=\"\"\"\",AND(INT(B20)>=1,INT(B20)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B20)<>SUM(INT(B17)+INT(B18)+INT(B19)),\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",B27,1))=FALSE,\"\"Err1\"\",IF(OR(B27=\"\"\"\",ISNUMBER(INT(B27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",B27,1))=FALSE,\"\"Err3\"\",IF(OR(B27=\"\"\"\",AND(INT(B27)>=1,INT(B27)<=9999))=FALSE,\"\"Err4\"\",IF(B27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",C27,1))=FALSE,\"\"Err1\"\",IF(OR(C27=\"\"\"\",ISNUMBER(INT(C27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",C27,1))=FALSE,\"\"Err3\"\",IF(OR(C27=\"\"\"\",AND(INT(C27)>=0,INT(C27)<=100))=FALSE,\"\"Err5\"\",IF(C27=\"\"\"\",\"\"Err6\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E27,1))=FALSE,\"\"Err1\"\",IF(OR(E27=\"\"\"\",ISNUMBER(INT(E27)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E27,1))=FALSE,\"\"Err3\"\",IF(OR(E27=\"\"\"\",AND(INT(E27)>=0,INT(E27)<=100))=FALSE,\"\"Err5\"\",IF(E27=\"\"\"\",\"\"Err6\"\",IF(E27<>'LEA3'!C11,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D30,1))=FALSE,\"\"Err1\"\",IF(OR(D930=\"\"\"\",ISNUMBER(INT(D30)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D30,1))=FALSE,\"\"Err3\"\",IF(OR(D30=\"\"\"\",AND(INT(D30)>=1,INT(D30)<=999))=FALSE,\"\"Err4\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D33,1))=FALSE,\"\"Err1\"\",IF(OR(D933=\"\"\"\",ISNUMBER(INT(D33)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D33,1))=FALSE,\"\"Err3\"\",IF(OR(D33=\"\"\"\",AND(INT(D33)>=1,INT(D33)<=999))=FALSE,\"\"Err4\"\",IF(INT(D33)<>SUM(INT(D30)+INT(D31)+INT(D32)),\"\"Err8\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D37,1))=FALSE,\"\"Err1\"\",IF(OR(D937=\"\"\"\",ISNUMBER(INT(D37)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D37,1))=FALSE,\"\"Err3\"\",IF(OR(D37=\"\"\"\",AND(INT(D37)>=1,INT(D37)<=999))=FALSE,\"\"Err4\"\",IF(INT(D37)<>SUM(INT(D34)+INT(D35)+INT(D36)),\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E44,1))=FALSE,\"\"Err1\"\",IF(OR(E44=\"\"\"\",ISNUMBER(INT(E44)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E44,1))=FALSE,\"\"Err3\"\",IF(OR(E44=\"\"\"\",AND(INT(E44)>=0,INT(E44)<=100))=FALSE,\"\"Err5\"\",IF(E44=\"\"\"\",\"\"Err6\"\",IF(E44<>'LEA3'!B13,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D54,1))=FALSE,\"\"Err1\"\",IF(OR(D54=\"\"\"\",ISNUMBER(INT(D54)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D54,1))=FALSE,\"\"Err3\"\",IF(OR(D54=\"\"\"\",AND(INT(D54)>=1,INT(D54)<=9999))=FALSE,\"\"Err4\"\",IF(INT(B20)<>SUM(INT(B17)+INT(B18)+INT(B19)),\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E61,1))=FALSE,\"\"Err1\"\",IF(OR(E61=\"\"\"\",ISNUMBER(INT(E61)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E61,1))=FALSE,\"\"Err3\"\",IF(OR(E61=\"\"\"\",AND(INT(E61)>=0,INT(E61)<=100))=FALSE,\"\"Err5\"\",IF(E61=\"\"\"\",\"\"Err6\"\",IF(E61<>'LEA3'!C15,\"\"Err7\"\",\"\"\"\"))))))\"\n\"IF(ISTEXT(C11)=FALSE,\"\"Err1\"\",\"\"\"\")\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D11,1))=FALSE,\"\"Err2\"\",IF(OR(D11=\"\"\"\",ISNUMBER(INT(D11)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",D11,1))=FALSE,\"\"Err4\"\",IF(OR(D11=\"\"\"\",AND(INT(D11)>=1,INT(D11)<=999))=FALSE,\"\"Err5\"\",IF(AND(D11<>\"\"\"\",E11=\"\"\"\",F11=\"\"\"\")=TRUE,\"\"Err7\"\",IF(AND(D11=\"\"\"\",OR(E11<>\"\"\"\",F11<>\"\"\"\"))=TRUE,\"\"Err8\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E11,1))=FALSE,\"\"Err2\"\",IF(OR(E11=\"\"\"\",ISNUMBER(INT(E11)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",D11,1))=FALSE,\"\"Err4\"\",IF(OR(E11=\"\"\"\",AND(INT(E11)>=1,INT(E11)<=100))=FALSE,\"\"Err6\"\",IF(OR(AND(E11=\"\"\"\",F11=\"\"\"\",OR(D11<>\"\"\"\")))=TRUE,\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",F11,1))=FALSE,\"\"Err2\"\",IF(OR(F11=\"\"\"\",ISNUMBER(INT(F11)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",E11,1))=FALSE,\"\"Err4\"\",IF(OR(F11=\"\"\"\",AND(INT(F11)>=1,INT(F11)<=100))=FALSE,\"\"Err6\"\",IF(OR(AND(E11=\"\"\"\",F11=\"\"\"\",OR(D11<>\"\"\"\")))=TRUE,\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(OR(G11=\"\"A\"\",G11=\"\"X\"\",G11=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G11=\"\"A\"\",OR(D11<>\"\"\"\",E11<>\"\"\"\",F11<>\"\"\"\",H11<>\"\"\"\")),AND(G11=\"\"X\"\",OR(D11<>\"\"\"\",E11<>\"\"\"\",F11<>\"\"\"\",H11<>\"\"\"\")))=TRUE,\"\"Err11\"\",\"\"\"\"))\"\n\"IF(OR(H11=\"\"Y\"\",H11=\"\"\"\")=FALSE,\"\"Err13\"\",IF(AND(H11=\"\"Y\"\",D11=\"\"\"\",E11=\"\"\"\",F11=\"\"\"\")=TRUE,\"\"Err13\"\",\"\"\"\"))\"\n\"IF(OR(G12=\"\"A\"\",G12=\"\"X\"\",G12=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G12=\"\"A\"\",OR(D12<>\"\"\"\",E12<>\"\"\"\",F12<>\"\"\"\",H12<>\"\"\"\")),AND(G12=\"\"X\"\",OR(D12<>\"\"\"\",E12<>\"\"\"\",F12<>\"\"\"\",H12<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D12<>\"\"\"\",E12<>\"\"\"\",F12<>\"\"\"\",H12<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G13=\"\"A\"\",G13=\"\"X\"\",G13=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G13=\"\"A\"\",OR(D13<>\"\"\"\",E13<>\"\"\"\",F13<>\"\"\"\",H13<>\"\"\"\")),AND(G13=\"\"X\"\",OR(D13<>\"\"\"\",E13<>\"\"\"\",F13<>\"\"\"\",H13<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D13<>\"\"\"\",E13<>\"\"\"\",F13<>\"\"\"\",H13<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G14=\"\"A\"\",G14=\"\"X\"\",G14=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G14=\"\"A\"\",OR(D14<>\"\"\"\",E14<>\"\"\"\",F14<>\"\"\"\",H14<>\"\"\"\")),AND(G14=\"\"X\"\",OR(D14<>\"\"\"\",E14<>\"\"\"\",F14<>\"\"\"\",H14<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D14<>\"\"\"\",E14<>\"\"\"\",F14<>\"\"\"\",H14<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G15=\"\"A\"\",G15=\"\"X\"\",G15=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G15=\"\"A\"\",OR(D15<>\"\"\"\",E15<>\"\"\"\",F15<>\"\"\"\",H15<>\"\"\"\")),AND(G15=\"\"X\"\",OR(D15<>\"\"\"\",E15<>\"\"\"\",F15<>\"\"\"\",H15<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D15<>\"\"\"\",E15<>\"\"\"\",F15<>\"\"\"\",H15<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G16=\"\"A\"\",G16=\"\"X\"\",G16=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G16=\"\"A\"\",OR(D16<>\"\"\"\",E16<>\"\"\"\",F16<>\"\"\"\",H16<>\"\"\"\")),AND(G16=\"\"X\"\",OR(D16<>\"\"\"\",E16<>\"\"\"\",F16<>\"\"\"\",H16<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D16<>\"\"\"\",E16<>\"\"\"\",F16<>\"\"\"\",H16<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G17=\"\"A\"\",G17=\"\"X\"\",G17=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G17=\"\"A\"\",OR(D17<>\"\"\"\",E17<>\"\"\"\",F17<>\"\"\"\",H17<>\"\"\"\")),AND(G17=\"\"X\"\",OR(D17<>\"\"\"\",E17<>\"\"\"\",F17<>\"\"\"\",H17<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D17<>\"\"\"\",E17<>\"\"\"\",F17<>\"\"\"\",H17<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G18=\"\"A\"\",G18=\"\"X\"\",G18=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G18=\"\"A\"\",OR(D18<>\"\"\"\",E18<>\"\"\"\",F18<>\"\"\"\",H18<>\"\"\"\")),AND(G18=\"\"X\"\",OR(D18<>\"\"\"\",E18<>\"\"\"\",F18<>\"\"\"\",H18<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D18<>\"\"\"\",E18<>\"\"\"\",F18<>\"\"\"\",H18<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G19=\"\"A\"\",G19=\"\"X\"\",G19=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G19=\"\"A\"\",OR(D19<>\"\"\"\",E19<>\"\"\"\",F19<>\"\"\"\",H19<>\"\"\"\")),AND(G19=\"\"X\"\",OR(D19<>\"\"\"\",E19<>\"\"\"\",F19<>\"\"\"\",H19<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D19<>\"\"\"\",E19<>\"\"\"\",F19<>\"\"\"\",H19<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G20=\"\"A\"\",G20=\"\"X\"\",G20=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G20=\"\"A\"\",OR(D20<>\"\"\"\",E20<>\"\"\"\",F20<>\"\"\"\",H20<>\"\"\"\")),AND(G20=\"\"X\"\",OR(D20<>\"\"\"\",E20<>\"\"\"\",F20<>\"\"\"\",H20<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D20<>\"\"\"\",E20<>\"\"\"\",F20<>\"\"\"\",H20<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G21=\"\"A\"\",G21=\"\"X\"\",G21=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G21=\"\"A\"\",OR(D21<>\"\"\"\",E21<>\"\"\"\",F21<>\"\"\"\",H21<>\"\"\"\")),AND(G21=\"\"X\"\",OR(D21<>\"\"\"\",E21<>\"\"\"\",F21<>\"\"\"\",H21<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D21<>\"\"\"\",E21<>\"\"\"\",F21<>\"\"\"\",H21<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G22=\"\"A\"\",G22=\"\"X\"\",G22=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G22=\"\"A\"\",OR(D22<>\"\"\"\",E22<>\"\"\"\",F22<>\"\"\"\",H22<>\"\"\"\")),AND(G22=\"\"X\"\",OR(D22<>\"\"\"\",E22<>\"\"\"\",F22<>\"\"\"\",H22<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D22<>\"\"\"\",E22<>\"\"\"\",F22<>\"\"\"\",H22<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G23=\"\"A\"\",G23=\"\"X\"\",G23=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G23=\"\"A\"\",OR(D23<>\"\"\"\",E23<>\"\"\"\",F23<>\"\"\"\",H23<>\"\"\"\")),AND(G23=\"\"X\"\",OR(D23<>\"\"\"\",E23<>\"\"\"\",F23<>\"\"\"\",H23<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D23<>\"\"\"\",E23<>\"\"\"\",F23<>\"\"\"\",H23<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G24=\"\"A\"\",G24=\"\"X\"\",G24=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G24=\"\"A\"\",OR(D24<>\"\"\"\",E24<>\"\"\"\",F24<>\"\"\"\",H24<>\"\"\"\")),AND(G24=\"\"X\"\",OR(D24<>\"\"\"\",E24<>\"\"\"\",F24<>\"\"\"\",H24<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D24<>\"\"\"\",E24<>\"\"\"\",F24<>\"\"\"\",H24<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G25=\"\"A\"\",G25=\"\"X\"\",G25=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G25=\"\"A\"\",OR(D25<>\"\"\"\",E25<>\"\"\"\",F25<>\"\"\"\",H25<>\"\"\"\")),AND(G25=\"\"X\"\",OR(D25<>\"\"\"\",E25<>\"\"\"\",F25<>\"\"\"\",H25<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D25<>\"\"\"\",E25<>\"\"\"\",F25<>\"\"\"\",H25<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G26=\"\"A\"\",G26=\"\"X\"\",G26=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G26=\"\"A\"\",OR(D26<>\"\"\"\",E26<>\"\"\"\",F26<>\"\"\"\",H26<>\"\"\"\")),AND(G26=\"\"X\"\",OR(D26<>\"\"\"\",E26<>\"\"\"\",F26<>\"\"\"\",H26<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D26<>\"\"\"\",E26<>\"\"\"\",F26<>\"\"\"\",H26<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G27=\"\"A\"\",G27=\"\"X\"\",G27=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G27=\"\"A\"\",OR(D27<>\"\"\"\",E27<>\"\"\"\",F27<>\"\"\"\",H27<>\"\"\"\")),AND(G27=\"\"X\"\",OR(D27<>\"\"\"\",E27<>\"\"\"\",F27<>\"\"\"\",H27<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D27<>\"\"\"\",E27<>\"\"\"\",F27<>\"\"\"\",H27<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G28=\"\"A\"\",G28=\"\"X\"\",G28=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G28=\"\"A\"\",OR(D28<>\"\"\"\",E28<>\"\"\"\",F28<>\"\"\"\",H28<>\"\"\"\")),AND(G28=\"\"X\"\",OR(D28<>\"\"\"\",E28<>\"\"\"\",F28<>\"\"\"\",H28<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D28<>\"\"\"\",E28<>\"\"\"\",F28<>\"\"\"\",H28<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G29=\"\"A\"\",G29=\"\"X\"\",G29=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G29=\"\"A\"\",OR(D29<>\"\"\"\",E29<>\"\"\"\",F29<>\"\"\"\",H29<>\"\"\"\")),AND(G29=\"\"X\"\",OR(D29<>\"\"\"\",E29<>\"\"\"\",F29<>\"\"\"\",H29<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D29<>\"\"\"\",E29<>\"\"\"\",F29<>\"\"\"\",H29<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G30=\"\"A\"\",G30=\"\"X\"\",G30=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G30=\"\"A\"\",OR(D30<>\"\"\"\",E30<>\"\"\"\",F30<>\"\"\"\",H30<>\"\"\"\")),AND(G30=\"\"X\"\",OR(D30<>\"\"\"\",E30<>\"\"\"\",F30<>\"\"\"\",H30<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D30<>\"\"\"\",E30<>\"\"\"\",F30<>\"\"\"\",H30<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G31=\"\"A\"\",G31=\"\"X\"\",G31=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G31=\"\"A\"\",OR(D31<>\"\"\"\",E31<>\"\"\"\",F31<>\"\"\"\",H31<>\"\"\"\")),AND(G31=\"\"X\"\",OR(D31<>\"\"\"\",E31<>\"\"\"\",F31<>\"\"\"\",H31<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D31<>\"\"\"\",E31<>\"\"\"\",F31<>\"\"\"\",H31<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G32=\"\"A\"\",G32=\"\"X\"\",G32=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G32=\"\"A\"\",OR(D32<>\"\"\"\",E32<>\"\"\"\",F32<>\"\"\"\",H32<>\"\"\"\")),AND(G32=\"\"X\"\",OR(D32<>\"\"\"\",E32<>\"\"\"\",F32<>\"\"\"\",H32<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D32<>\"\"\"\",E32<>\"\"\"\",F32<>\"\"\"\",H32<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G33=\"\"A\"\",G33=\"\"X\"\",G33=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G33=\"\"A\"\",OR(D33<>\"\"\"\",E33<>\"\"\"\",F33<>\"\"\"\",H33<>\"\"\"\")),AND(G33=\"\"X\"\",OR(D33<>\"\"\"\",E33<>\"\"\"\",F33<>\"\"\"\",H33<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D33<>\"\"\"\",E33<>\"\"\"\",F33<>\"\"\"\",H33<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G34=\"\"A\"\",G34=\"\"X\"\",G34=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G34=\"\"A\"\",OR(D34<>\"\"\"\",E34<>\"\"\"\",F34<>\"\"\"\",H34<>\"\"\"\")),AND(G34=\"\"X\"\",OR(D34<>\"\"\"\",E34<>\"\"\"\",F34<>\"\"\"\",H34<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D34<>\"\"\"\",E34<>\"\"\"\",F34<>\"\"\"\",H34<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G35=\"\"A\"\",G35=\"\"X\"\",G35=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G35=\"\"A\"\",OR(D35<>\"\"\"\",E35<>\"\"\"\",F35<>\"\"\"\",H35<>\"\"\"\")),AND(G35=\"\"X\"\",OR(D35<>\"\"\"\",E35<>\"\"\"\",F35<>\"\"\"\",H35<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D35<>\"\"\"\",E35<>\"\"\"\",F35<>\"\"\"\",H35<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G36=\"\"A\"\",G36=\"\"X\"\",G36=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G36=\"\"A\"\",OR(D36<>\"\"\"\",E36<>\"\"\"\",F36<>\"\"\"\",H36<>\"\"\"\")),AND(G36=\"\"X\"\",OR(D36<>\"\"\"\",E36<>\"\"\"\",F36<>\"\"\"\",H36<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D36<>\"\"\"\",E36<>\"\"\"\",F36<>\"\"\"\",H36<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G37=\"\"A\"\",G37=\"\"X\"\",G37=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G37=\"\"A\"\",OR(D37<>\"\"\"\",E37<>\"\"\"\",F37<>\"\"\"\",H37<>\"\"\"\")),AND(G37=\"\"X\"\",OR(D37<>\"\"\"\",E37<>\"\"\"\",F37<>\"\"\"\",H37<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D37<>\"\"\"\",E37<>\"\"\"\",F37<>\"\"\"\",H37<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G38=\"\"A\"\",G38=\"\"X\"\",G38=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G38=\"\"A\"\",OR(D38<>\"\"\"\",E38<>\"\"\"\",F38<>\"\"\"\",H38<>\"\"\"\")),AND(G38=\"\"X\"\",OR(D38<>\"\"\"\",E38<>\"\"\"\",F38<>\"\"\"\",H38<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D38<>\"\"\"\",E38<>\"\"\"\",F38<>\"\"\"\",H38<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G39=\"\"A\"\",G39=\"\"X\"\",G39=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G39=\"\"A\"\",OR(D39<>\"\"\"\",E39<>\"\"\"\",F39<>\"\"\"\",H39<>\"\"\"\")),AND(G39=\"\"X\"\",OR(D39<>\"\"\"\",E39<>\"\"\"\",F39<>\"\"\"\",H39<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D39<>\"\"\"\",E39<>\"\"\"\",F39<>\"\"\"\",H39<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G40=\"\"A\"\",G40=\"\"X\"\",G40=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G40=\"\"A\"\",OR(D40<>\"\"\"\",E40<>\"\"\"\",F40<>\"\"\"\",H40<>\"\"\"\")),AND(G40=\"\"X\"\",OR(D40<>\"\"\"\",E40<>\"\"\"\",F40<>\"\"\"\",H40<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D40<>\"\"\"\",E40<>\"\"\"\",F40<>\"\"\"\",H40<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G41=\"\"A\"\",G41=\"\"X\"\",G41=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G41=\"\"A\"\",OR(D41<>\"\"\"\",E41<>\"\"\"\",F41<>\"\"\"\",H41<>\"\"\"\")),AND(G41=\"\"X\"\",OR(D41<>\"\"\"\",E41<>\"\"\"\",F41<>\"\"\"\",H41<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D41<>\"\"\"\",E41<>\"\"\"\",F41<>\"\"\"\",H41<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G42=\"\"A\"\",G42=\"\"X\"\",G42=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G42=\"\"A\"\",OR(D42<>\"\"\"\",E42<>\"\"\"\",F42<>\"\"\"\",H42<>\"\"\"\")),AND(G42=\"\"X\"\",OR(D42<>\"\"\"\",E42<>\"\"\"\",F42<>\"\"\"\",H42<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D42<>\"\"\"\",E42<>\"\"\"\",F42<>\"\"\"\",H42<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G43=\"\"A\"\",G43=\"\"X\"\",G43=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G43=\"\"A\"\",OR(D43<>\"\"\"\",E43<>\"\"\"\",F43<>\"\"\"\",H43<>\"\"\"\")),AND(G43=\"\"X\"\",OR(D43<>\"\"\"\",E43<>\"\"\"\",F43<>\"\"\"\",H43<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D43<>\"\"\"\",E43<>\"\"\"\",F43<>\"\"\"\",H43<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G44=\"\"A\"\",G44=\"\"X\"\",G44=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G44=\"\"A\"\",OR(D44<>\"\"\"\",E44<>\"\"\"\",F44<>\"\"\"\",H44<>\"\"\"\")),AND(G44=\"\"X\"\",OR(D44<>\"\"\"\",E44<>\"\"\"\",F44<>\"\"\"\",H44<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D44<>\"\"\"\",E44<>\"\"\"\",F44<>\"\"\"\",H44<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(OR(G45=\"\"A\"\",G45=\"\"X\"\",G45=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(G45=\"\"A\"\",OR(D45<>\"\"\"\",E45<>\"\"\"\",F45<>\"\"\"\",H45<>\"\"\"\")),AND(G45=\"\"X\"\",OR(D45<>\"\"\"\",E45<>\"\"\"\",F45<>\"\"\"\",H45<>\"\"\"\")))=TRUE,\"\"Err11\"\",IF(AND(OR(D45<>\"\"\"\",E45<>\"\"\"\",F45<>\"\"\"\",H45<>\"\"\"\"),AND(OR(G48=\"\"A\"\",G48=\"\"X\"\")))=TRUE,\"\"Err12\"\",\"\"\"\")))\"\n\"IF(AND(D11=\"\"\"\",OR(E11<>\"\"\"\",F11<>\"\"\"\"))=TRUE,\"\"Err8\"\",\"\"\"\")\"\n\"IF(ISTEXT(C11)=FALSE,\"\"Err1\"\",\"\"\"\")\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D11,1))=FALSE,\"\"Err2\"\",IF(OR(D11=\"\"\"\",ISNUMBER(INT(D11)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",D11,1))=FALSE,\"\"Err4\"\",IF(OR(D11=\"\"\"\",AND(INT(D11)>=1,INT(D11)<=999))=FALSE,\"\"Err5\"\",IF(AND(D11<>\"\"\"\",E11=\"\"\"\",F11=\"\"\"\",G11=\"\"\"\")=TRUE,\"\"Err7\"\",IF(AND(D11=\"\"\"\",OR(E11<>\"\"\"\",F11<>\"\"\"\",G11<>\"\"\"\"))=TRUE,\"\"Err8\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E11,1))=FALSE,\"\"Err2\"\",IF(OR(E11=\"\"\"\",ISNUMBER(INT(E11)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",E11,1))=FALSE,\"\"Err4\"\",IF(OR(E11=\"\"\"\",AND(INT(E11)>=0,INT(E11)<=100))=FALSE,\"\"Err6\"\",IF(OR(AND(E11=\"\"\"\",F11=\"\"\"\",G11=\"\"\"\",OR(D11<>\"\"\"\")))=TRUE,\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(OR(H11=\"\"A\"\",H11=\"\"X\"\",H11=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(H11=\"\"A\"\",OR(D11<>\"\"\"\",E11<>\"\"\"\",F11<>\"\"\"\",G11<>\"\"\"\",I11<>\"\"\"\")),AND(H11=\"\"X\"\",OR(D11<>\"\"\"\",E11<>\"\"\"\",F11<>\"\"\"\",G11<>\"\"\"\",I11<>\"\"\"\")))=TRUE,\"\"Err11\"\",\"\"\"\"))\"\n\"IF(OR(I11=\"\"Y\"\",I11=\"\"\"\")=FALSE,\"\"Err12\"\",IF(AND(I11=\"\"Y\"\",D11=\"\"\"\",E11=\"\"\"\",F11=\"\"\"\",G11=\"\"\"\")=TRUE,\"\"Err13\"\",\"\"\"\"))\"\n\"IF(ISTEXT(C12)=FALSE,\"\"Err1\"\",\"\"\"\")\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D12,1))=FALSE,\"\"Err2\"\",IF(OR(D12=\"\"\"\",ISNUMBER(INT(D12)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",D12,1))=FALSE,\"\"Err4\"\",IF(OR(D12=\"\"\"\",AND(INT(D12)>=1,INT(D12)<=999))=FALSE,\"\"Err5\"\",IF(AND(D12<>\"\"\"\",E12=\"\"\"\",F12=\"\"\"\",G12=\"\"\"\")=TRUE,\"\"Err7\"\",IF(AND(D12=\"\"\"\",OR(E12<>\"\"\"\",F12<>\"\"\"\",G12<>\"\"\"\"))=TRUE,\"\"Err8\"\",\"\"\"\"))))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E12,1))=FALSE,\"\"Err2\"\",IF(OR(E12=\"\"\"\",ISNUMBER(INT(E12)))=FALSE,\"\"Err3\"\",IF(ISERROR(SEARCH(\"\".\"\",E12,1))=FALSE,\"\"Err4\"\",IF(OR(E12=\"\"\"\",AND(INT(E12)>=0,INT(E12)<=100))=FALSE,\"\"Err6\"\",IF(OR(AND(E12=\"\"\"\",F12=\"\"\"\",G12=\"\"\"\",OR(D12<>\"\"\"\")))=TRUE,\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",G12,1))=FALSE,\"\"Err2\"\",IF(OR(G12=\"\"\"\",ISNUMBER(INT(G12)))=FALSE,\"\"Err3\"\",IF(OR(G12=\"\"\"\",AND(INT(G12)>=0,INT(G12)<=100))=FALSE,\"\"Err6\"\",IF(AND(G12<>\"\"\"\",ISERROR(SEARCH(\"\".\"\",RIGHT(G12,2),1)))=TRUE,\"\"err14\"\",IF(OR(AND(E12=\"\"\"\",F12=\"\"\"\",G12=\"\"\"\",OR(D12<>\"\"\"\")))=TRUE,\"\"Err9\"\",\"\"\"\")))))\"\n\"IF(OR(H12=\"\"A\"\",H12=\"\"X\"\",H12=\"\"\"\")=FALSE,\"\"Err10\"\",IF(OR(AND(H12=\"\"A\"\",OR(D12<>\"\"\"\",E12<>\"\"\"\",F12<>\"\"\"\",G12<>\"\"\"\")),AND(H12=\"\"X\"\",OR(D12<>\"\"\"\",E12<>\"\"\"\",F12<>\"\"\"\",G12<>\"\"\"\")))=TRUE,\"\"Err11\"\",\"\"\"\"))\"\n\"IF(OR(I12=\"\"Y\"\",I12=\"\"\"\")=FALSE,\"\"Err12\"\",IF(AND(I12=\"\"Y\"\",D12=\"\"\"\",E12=\"\"\"\",F12=\"\"\"\",G12=\"\"\"\")=TRUE,\"\"Err13\"\",\"\"\"\"))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",D49,1))=FALSE,\"\"Err1\"\",IF(OR(D49=\"\"\"\",ISNUMBER(INT(D49)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",D49,1))=FALSE,\"\"Err3\"\",IF(OR(D49=\"\"\"\",AND(INT(D49)>=1,INT(D49)<=999))=FALSE,\"\"Err4\"\",\"\"\"\"))))\"\n\"IF(ISERROR(SEARCH(\"\"%\"\",E49,1))=FALSE,\"\"Err1\"\",IF(OR(E49=\"\"\"\",ISNUMBER(INT(E49)))=FALSE,\"\"Err2\"\",IF(ISERROR(SEARCH(\"\".\"\",E49,1))=FALSE,\"\"Err3\"\",IF(OR(E49=\"\"\"\",AND(INT(E49)>=1,INT(E49)<=100))=FALSE,\"\"Err5\"\",\"\"\"\"))))\"\n\"SUM(D7:D104)\"\n\"SUM(D105:D140)\"\n\"D41+D66+D80+D131\"\n\"D87+D97+D104\"\n\"D8+D38+D45+D67+D106\"\n\"D75+D110\"\n\"D85+D118\"\n\"D11+D12+D16+D22+D103+D121\"\n\"D13+D28+D35+D36+D59+D79+D91+D92+D96+D102+D112+D113+D115+D122+D123\"\n\"D10+D23+D25+D27+D31+D33+D43+D48+D49+D54+D56+D60+D68+D76+D78+D94+D108+D119+D128+D132\"\n\"D18+D29+D39+D83+D133+D134\"\n\"D42+D52+D53+D63+D93+D101+D107+D117+D125+D126+D129+D130+D136+D137+D139\"\n\"D40+D140\"\n\"SUM(D146:D156)\"\n\"D50+D124\"\n\"D14+D135+D138\"\n\"D95\"\n\"D160+D161+D162\"\n\"D168-D157-D163\"\n\"SUM(D7:D140)\"\n\"D58+D87+D99+D127\"\n\"D20+D32+D86+D95\"\n\"D17+D24+D44+D89+D97+D100+D104+D116\"\n\"D37+D41+D66+D80+D131\"\n\"D9+D18+D29+D83+D109+D133+D134\"\n\"D14+D15+D51+D84+D85+D105+D118+D120+D135+D138\"\n\"D28+D40+D73+D88+D96+D140\"\n\"D13+D35+D59+D79+D102+D112+D113+D122+D123\"\n\"D30+D36+D62+D72+D81\"\n\"D8+D38+D45+D60+D67+D106\"\n\"D11+D12+D16+D22+D103+D121\"\n\"D39+D50+D74+D75+D110+D124\"\n\"D19+D47+D64\"\n\"D10+D21+D26+D31+D61+D71+D77\"\n\"D25+D27+D43+D48+D49+D68+D76+D132\"\n\"D23+D55+D91+D92+D115\"\n\"D57+D70+D82+D98\"\n\"D34+D42+D54+D56+D63+D65\"\n\"D33+D46+D78+D93+D94+D108+D111+D119+D128\"\n\"D7+D69\"\n\"SUM(D52,D53,D90,D101,D107,D114,D117,D125,D126,D129,D130,D136,D137,D139)\"\n\"SUM(D7:D140)\"\n\"AVERAGE(B3:B71)\"\n\"MEDIAN(B3:B71)\"\n\"STDEV(B3:B71)\"\n\"MIN(B3:B71)\"\n\"MAX(B3:B71)\"\n\"COUNTIF(B3:B71,\"\"<5.1\"\")\"\n\"COUNTIF(B3:B71,\"\"<10.1\"\")\"\n\"COUNTIF(B3:B71,\"\"<15.1\"\")-3\"\n\"COUNTIF(B3:B71,\"\"<20.1\"\")-12\"\n\"COUNTIF(B3:B71,\"\">20.9\"\")\"\n\"COUNTIF(B3:B71,\"\"<1\"\")\"\n\"COUNTIF(B3:B71,\"\"<2\"\")\"\n\"COUNTIF(B3:B71,\"\"<3\"\")\"\n\"COUNTIF(B3:B71,\"\"<4\"\")\"\n\"COUNTIF(B3:B71,\"\"<5\"\")\"\n\"COUNTIF(B3:B71,\"\"<6\"\")\"\n\"COUNTIF(B3:B71,\"\"<7\"\")\"\n\"COUNTIF(B3:B71,\"\"<8\"\")\"\n\"COUNTIF(B3:B71,\"\"<9\"\")\"\n\"COUNTIF(B3:B71,\"\"<10\"\")-1\"\n\"COUNTIF(B3:B71,\"\"<11\"\")-3\"\n\"COUNTIF(B3:B71,\"\"<12\"\")-3\"\n\"COUNTIF(B3:B71,\"\"<13\"\")-3\"\n\"COUNTIF(B3:B71,\"\"<14\"\")-3\"\n\"COUNTIF(B3:B71,\"\"<15\"\")-7\"\n\"COUNTIF(B3:B71,\"\"<16\"\")-7\"\n\"COUNTIF(B3:B71,\"\"<17\"\")-13\"\n\"COUNTIF(B3:B71,\"\"<18\"\")-19\"\n\"COUNTIF(B3:B71,\"\"<19\"\")-20\"\n\"COUNTIF(B3:B71,\"\"<20\"\")-28\"\n\"COUNTIF(B3:B71,\"\"<21\"\")-34\"\n\"COUNTIF(B3:B71,\"\"<22\"\")-43\"\n\"COUNTIF(B3:B71,\"\"<23\"\")-49\"\n\"COUNTIF(B3:B71,\"\"<24\"\")-59\"\n\"COUNTIF(B3:B71,\"\"<25\"\")-61\"\n\"COUNTIF(B3:B71,\"\"<26\"\")-67\"\n\"SUM(B2:P2)\"\n\"SUM(D6:R6)\"\n\"100*S6/$S$6\"\n\"C7\"\n\"AVERAGE(D19:D54)\"\n\"AVERAGE(J8:J43)\"\n\"AVERAGE(S8:S53)\"\n\"C6/C9\"\n\"C7/C9\"\n\"C8/C9\"\n\"C6/C9\"\n\"C7/C9\"\n\"C8/C9\"\n\"SUM(C9:C98)\"\n\"C19+D19+E19+F19+G19\"\n\"H21/$H$19\"\n\"VLOOKUP(I21,$A$46:$C$55,3,TRUE)\"\n\"LEFT(J21,1)\"\n\"SUM(C23:G23)\"\n\"AVERAGE(C21:C35)\"\n\"COUNTIF(K21:K34,J36)\"\n\"STDEV(C21:C34)\"\n\"COUNTIF(K21:K34,J37)\"\n\"MIN(C21:C34)\"\n\"COUNTIF(K21:K34,J38)\"\n\"MAX(C21:C34)\"\n\"C39-C38\"\n\"LOOKUP(B5,B$10:B$21,A$10:A$21)\"\n\"C2/30\"\n\"SUM(C2:C9)\"\n\"C2/C$9\"\n\"SUM(C2:C8)\"\n\"COUNTA(A2:A22)\"\n\"SUM(B2:B22)\"\n\"B23/$A$23\"\n\"COUNTA(A31:A41)\"\n\"SUM(B31:B41)\"\n\"B42/$A$42\"\n\"C2/$C$6\"\n\"C2*A2\"\n\"SUM(C2:C5)\"\n\"(SUM(E2:E5))/30\"\n\"E6\"\n\"SUM(B2:B6)\"\n\"B7/5\"\n\"C2/$C$5\"\n\"C2*A2\"\n\"SUM(C2:C4)\"\n\"(SUM(E2:E4))/30\"\n\"E5\"\n\"C2/$C$4\"\n\"C2*A2\"\n\"SUM(C2:C3)\"\n\"(SUM(E2:E3))/30\"\n\"E4\"\n\"C2/$C$6\"\n\"C2*A2\"\n\"SUM(C2:C5)\"\n\"(SUM(E2:E5))/30\"\n\"E6\"\n\"C2/$C$7\"\n\"C2*A2\"\n\"SUM(C2:C6)\"\n\"(SUM(E2:E6))/30\"\n\"E7\"\n\"C3/$C$7\"\n\"C3*A3\"\n\"SUM(C3:C6)\"\n\"(SUM(E3:E6))/30\"\n\"E7\"\n\"B2/63\"\n\"B2/30\"\n\"SUM(B2:B9)\"\n\"C3/C$5\"\n\"SUM(C3:C4)\"\n\"C9/C$12\"\n\"SUM(C8:C11)\"\n\"B2/30\"\n\"SUM(B2:B3)\"\n\"B7/$B$10\"\n\"SUM(B7:B9)\"\n\"B2/30\"\n\"SUM(B2:B3)\"\n\"'Q3 Data'!E6\"\n\"'Q7 Data'!E5\"\n\"'Q11 Data'!E4\"\n\"'Q15 Data'!E6\"\n\"'Q19 Data'!E7\"\n\"'Q23 Data'!E7\"\n\"B11/30\"\n\"SUM(B11:B12)\"\n\"1.85*80\"\n\"SUM(C2:G2)\"\n\"1.3*90\"\n\"1.85*57\"\n\"1.3*74\"\n\"1.85*92\"\n\"1.3*92\"\n\"((D2*4)+(E2*3.5)+(F2*3)+(G2*2.5)+(H2*2)+(I2*1.5)+(J2*1))/(C2-L2)\"\n\"(C7)/($C$28)\"\n\"SUM(C7:C12)\"\n\"(C14)+(C23)+(C25)\"\n\"(C7)/($C$38)\"\n\"SUM(C7:C32)\"\n\"SUM(C33:C35)\"\n\"SUM(B6:G6)\"\n\"SUM(B6:H6)\"\n\"SUM(B6:G6)\"\n\"SUM(C6:E6)\"\n\"(C7)/($C$20)\"\n\"SUM(C7:C11)\"\n\"SUM(C14:C17)\"\n\"(C12)+(C18)\"\n\"SUM(C7:C17)\"\n\"(C28)-(C24)-(C26)-(C18)\"\n\"SUM(C18:C20)\"\n\"(C28)-6999\"\n\"(C6)/($C$19)\"\n\"SUM(C6:C18)\"\n\"(C7)/($C$24)\"\n\"SUM(C7:C16)\"\n\"(C24)-(C19)\"\n\"SUM(E19:E21)\"\n\"(C6)/(B6)\"\n\"(B12)+(B9)\"\n\"7687+0\"\n\"(B9)/(B7)\"\n\"7883+1\"\n\"5707+0\"\n\"5803+6\"\n\"(B31)\"\n\"(B12)/(B7)\"\n\"(B18)/(B31)\"\n\"(B19)/(B31)\"\n\"(B20)/(B31)\"\n\"(B21)/(B31)\"\n\"(B22)/(B31)\"\n\"(B23)/(B31)\"\n\"(B24)/(B31)\"\n\"(B25)/(B31)\"\n\"(B26)/(B31)\"\n\"(B27)/(B31)\"\n\"(B28)/(B31)\"\n\"(B29)/(B31)\"\n\"SUM(B18:B29)\"\n\"SUM(C18:C30)\"\n\"(B18)+(B19)+(B20)+(B21)+(B22)+(B23)+(B26)+(B27)\"\n\"(B34)/(B31)\"\n\"(B9)+(B12)\"\n\"B9/B7\"\n\"(B31)\"\n\"B12/B7\"\n\"(B18)/(B31)\"\n\"(B19)/(B31)\"\n\"(B20)/(B31)\"\n\"(B21)/(B31)\"\n\"(B22)/(B31)\"\n\"(B23)/(B31)\"\n\"(B24)/(B31)\"\n\"(B25)/(B31)\"\n\"(B26)/(B31)\"\n\"(B27)/(B31)\"\n\"(B28)/(B31)\"\n\"(B29)/(B31)\"\n\"SUM(B18:B30)\"\n\"B18+B19+B20+B21+B22+B23+B26+B27\"\n\"(B34)/(B31)\"\n\"SUM(E7:J7)\"\n\"(C7)+(K7)\"\n\"SUM(C7:I7)\"\n\"(finaid!C24)/(finaid!C7)\"\n\"(finaid!K24)/(finaid!M7)\"\n\"(C7)*30\"\n\"(C7)+(F7)+(I7)\"\n\"((C14)-(C7))/(C7)\"\n\"(C8)/(transfers!C7)\"\n\"(F8)/(transfers!C7)\"\n\"(I8)/(transfers!C7)\"\n\"(L8)/(transfers!C7)\"\n\"(O8)/(transfers!C7)\"\n\"(R8)/(transfers!C7)\"\n\"(C22)/(transfers!F7)\"\n\"(F22)/(transfers!F7)\"\n\"(I22)/(transfers!F7)\"\n\"(L22)/(transfers!F7)\"\n\"(O22)/(transfers!F7)\"\n\"(R22)/(transfers!F7)\"\n\"(C36)/(transfers!I7)\"\n\"(F36)/(transfers!I7)\"\n\"(I36)/(transfers!I7)\"\n\"(L36)/(transfers!I7)\"\n\"(O36)/(transfers!I7)\"\n\"(R36)/(transfers!I7)\"\n\"(C50)/(transfers!C22)\"\n\"(F50)/(transfers!C22)\"\n\"(I50)/(transfers!C22)\"\n\"(L50)/(transfers!C22)\"\n\"(O50)/(transfers!C22)\"\n\"(R50)/(transfers!C22)\"\n\"(C64)/(transfers!F22)\"\n\"(F64)/(transfers!F22)\"\n\"(I64)/(transfers!F22)\"\n\"(L64)/(transfers!F22)\"\n\"(O64)/(transfers!F22)\"\n\"(R64)/(transfers!F22)\"\n\"(C84)/(transfers!I28)\"\n\"(F84)/(transfers!I28)\"\n\"(I84)/(transfers!I28)\"\n\"(L84)/(transfers!I28)\"\n\"(O84)/(transfers!I28)\"\n\"(R84)/(transfers!I28)\"\n\"(C92)/(transfers!L7)\"\n\"(F92)/(transfers!L7)\"\n\"(I92)/(transfers!L7)\"\n\"(L92)/(transfers!L7)\"\n\"(O92)/(transfers!L7)\"\n\"(R92)/(transfers!L7)\"\n\"(C108)/(transfers!D7)\"\n\"(F108)/(transfers!D7)\"\n\"(I108)/(transfers!D7)\"\n\"(L108)/(transfers!D7)\"\n\"(O108)/(transfers!D7)\"\n\"(R108)/(transfers!D7)\"\n\"(C122)/(transfers!G7)\"\n\"(F122)/(transfers!G7)\"\n\"(I122)/(transfers!G7)\"\n\"(L122)/(transfers!G7)\"\n\"(O122)/(transfers!G7)\"\n\"(R122)/(transfers!G7)\"\n\"(C136)/(transfers!J7)\"\n\"(F136)/(transfers!J7)\"\n\"(I136)/(transfers!J7)\"\n\"(L136)/(transfers!J7)\"\n\"(O136)/(transfers!J7)\"\n\"(R136)/(transfers!J7)\"\n\"(C150)/(transfers!D22)\"\n\"(F150)/(transfers!D22)\"\n\"(I150)/(transfers!D22)\"\n\"(L150)/(transfers!D22)\"\n\"(O150)/(transfers!D22)\"\n\"(R150)/(transfers!D22)\"\n\"(C164)/(transfers!G22)\"\n\"(F164)/(transfers!G22)\"\n\"(I164)/(transfers!G22)\"\n\"(L164)/(transfers!G22)\"\n\"(O164)/(transfers!G22)\"\n\"(R164)/(transfers!G22)\"\n\"(C184)/(transfers!J28)\"\n\"(F184)/(transfers!J28)\"\n\"(I184)/(transfers!J28)\"\n\"(L184)/(transfers!J28)\"\n\"(O184)/(transfers!J28)\"\n\"(R184)/(transfers!J28)\"\n\"(C192)/(transfers!M7)\"\n\"(F192)/(transfers!M7)\"\n\"(I192)/(transfers!M7)\"\n\"(L192)/(transfers!M7)\"\n\"(O192)/(transfers!M7)\"\n\"(R192)/(transfers!M7)\"\n\"(C7)/(E7)\"\n\"SUM(C7:C17)\"\n\"(C7)/($C$28)\"\n\"SUM(C7:C12)\"\n\"(C14)+(C23)+(C25)\"\n\"(C6)/($C$37)\"\n\"SUM(D6:D15)\"\n\"SUM(C6:C31)\"\n\"SUM(C32:C34)\"\n\"SUM(B6:G6)\"\n\"SUM(B6:H6)\"\n\"SUM(C6:E6)\"\n\"(C7)/($C$20)\"\n\"SUM(C7:C11)\"\n\"SUM(C14:C17)\"\n\"(C12)+(C18)\"\n\"SUM(C7:C17)\"\n\"(C28)-(C24)-(C26)-(C18)\"\n\"SUM(C18:C20)\"\n\"(C6)/($C$19)\"\n\"SUM(C6:C18)\"\n\"(I9)/(G9)\"\n\"SUM(D9:D13)\"\n\"SUM(D18:D31)\"\n\"(D14)+(D32)\"\n\"SUM(C7:C16)\"\n\"(($C$7*E7)+($C$8*E8)+($C$9*E9)+($C$10*E10)+($C$11*E11)+($C$12*E12)+($C$13*E13)+($C$14*E14)+($C$15*E15))/650\"\n\"(C21)-(C17)\"\n\"(($C$21*E21)-($C$17*E17))/($C$19)\"\n\"(C7)/($C$24)\"\n\"SUM(C7:C16)\"\n\"(C24)-(C19)\"\n\"SUM(E19:E21)\"\n\"(C6)/(B6)\"\n\"(B12)+(B9)\"\n\"7687+0\"\n\"(B9)/(B7)\"\n\"7883+1\"\n\"5707+0\"\n\"5803+6\"\n\"(B31)\"\n\"(B12)/(B7)\"\n\"(B18)/(B31)\"\n\"(B19)/(B31)\"\n\"(B20)/(B31)\"\n\"(B21)/(B31)\"\n\"(B22)/(B31)\"\n\"(B23)/(B31)\"\n\"(B24)/(B31)\"\n\"(B25)/(B31)\"\n\"(B26)/(B31)\"\n\"(B27)/(B31)\"\n\"(B28)/(B31)\"\n\"(B29)/(B31)\"\n\"SUM(B18:B29)\"\n\"SUM(C18:C30)\"\n\"(B18)+(B19)+(B20)+(B21)+(B22)+(B23)+(B26)+(B27)\"\n\"(B34)/(B31)\"\n\"(B9)+(B12)\"\n\"B9/B7\"\n\"(B31)\"\n\"B12/B7\"\n\"(B18)/(B31)\"\n\"(B19)/(B31)\"\n\"(B20)/(B31)\"\n\"(B21)/(B31)\"\n\"(B22)/(B31)\"\n\"(B23)/(B31)\"\n\"(B24)/(B31)\"\n\"(B25)/(B31)\"\n\"(B26)/(B31)\"\n\"(B27)/(B31)\"\n\"(B28)/(B31)\"\n\"(B29)/(B31)\"\n\"SUM(B18:B30)\"\n\"B18+B19+B20+B21+B22+B23+B26+B27\"\n\"(B34)/(B31)\"\n\"SUM(E7:J7)\"\n\"(C7)+(K7)\"\n\"(C6)+(E6)\"\n\"(C10)/(I10)\"\n\"(F10)/(I10)\"\n\"(C10)+(F10)\"\n\"(C10)/(K10)\"\n\"(F10)/(M10)\"\n\"(K10)+(M10)\"\n\"(I10)/(O10)\"\n\"SUM(C7:I7)\"\n\"(finaid!C25)/(finaid!C7)\"\n\"(finaid!K25)/(finaid!M7)\"\n\"(C7)*30\"\n\"SUM(C7:I7)\"\n\"(C7)+(F7)+(I7)\"\n\"((C14)-(C7))/(C7)\"\n\"(C8)/(transfers!C7)\"\n\"(F8)/(transfers!C7)\"\n\"(I8)/(transfers!C7)\"\n\"(L8)/(transfers!C7)\"\n\"(O8)/(transfers!C7)\"\n\"(R8)/(transfers!C7)\"\n\"(C22)/(transfers!F7)\"\n\"(F22)/(transfers!F7)\"\n\"(I22)/(transfers!F7)\"\n\"(L22)/(transfers!F7)\"\n\"(O22)/(transfers!F7)\"\n\"(R22)/(transfers!F7)\"\n\"(C36)/(transfers!I7)\"\n\"(F36)/(transfers!I7)\"\n\"(I36)/(transfers!I7)\"\n\"(L36)/(transfers!I7)\"\n\"(O36)/(transfers!I7)\"\n\"(R36)/(transfers!I7)\"\n\"(C50)/(transfers!C22)\"\n\"(F50)/(transfers!C22)\"\n\"(I50)/(transfers!C22)\"\n\"(L50)/(transfers!C22)\"\n\"(O50)/(transfers!C22)\"\n\"(R50)/(transfers!C22)\"\n\"(C64)/(transfers!F22)\"\n\"(F64)/(transfers!F22)\"\n\"(I64)/(transfers!F22)\"\n\"(L64)/(transfers!F22)\"\n\"(O64)/(transfers!F22)\"\n\"(R64)/(transfers!F22)\"\n\"(C84)/(transfers!I28)\"\n\"(F84)/(transfers!I28)\"\n\"(I84)/(transfers!I28)\"\n\"(L84)/(transfers!I28)\"\n\"(O84)/(transfers!I28)\"\n\"(R84)/(transfers!I28)\"\n\"(C92)/(transfers!L7)\"\n\"(F92)/(transfers!L7)\"\n\"(I92)/(transfers!L7)\"\n\"(L92)/(transfers!L7)\"\n\"(O92)/(transfers!L7)\"\n\"(R92)/(transfers!L7)\"\n\"(C108)/(transfers!D7)\"\n\"(F108)/(transfers!D7)\"\n\"(I108)/(transfers!D7)\"\n\"(L108)/(transfers!D7)\"\n\"(O108)/(transfers!D7)\"\n\"(R108)/(transfers!D7)\"\n\"(C122)/(transfers!G7)\"\n\"(F122)/(transfers!G7)\"\n\"(I122)/(transfers!G7)\"\n\"(L122)/(transfers!G7)\"\n\"(O122)/(transfers!G7)\"\n\"(R122)/(transfers!G7)\"\n\"(C136)/(transfers!J7)\"\n\"(F136)/(transfers!J7)\"\n\"(I136)/(transfers!J7)\"\n\"(L136)/(transfers!J7)\"\n\"(O136)/(transfers!J7)\"\n\"(R136)/(transfers!J7)\"\n\"(C150)/(transfers!D22)\"\n\"(F150)/(transfers!D22)\"\n\"(I150)/(transfers!D22)\"\n\"(L150)/(transfers!D22)\"\n\"(O150)/(transfers!D22)\"\n\"(R150)/(transfers!D22)\"\n\"(C164)/(transfers!G22)\"\n\"(F164)/(transfers!G22)\"\n\"(I164)/(transfers!G22)\"\n\"(L164)/(transfers!G22)\"\n\"(O164)/(transfers!G22)\"\n\"(R164)/(transfers!G22)\"\n\"(C184)/(transfers!J28)\"\n\"(F184)/(transfers!J28)\"\n\"(I184)/(transfers!J28)\"\n\"(L184)/(transfers!J28)\"\n\"(O184)/(transfers!J28)\"\n\"(R184)/(transfers!J28)\"\n\"(C192)/(transfers!M7)\"\n\"(F192)/(transfers!M7)\"\n\"(I192)/(transfers!M7)\"\n\"(L192)/(transfers!M7)\"\n\"(O192)/(transfers!M7)\"\n\"(R192)/(transfers!M7)\"\n\"(C7)/(E7)\"\n\"SUM(C7:C18)\"\n\"SUM(C7:F7)\"\n\"SUM(H7:L7)\"\n\"COUNTIF(List!$C3:$N84,1)\"\n\"COUNTIF(List!$C3:$N84,2)\"\n\"COUNTIF(List!$C3:$N84,3)-1\"\n\"COUNTIF(List!$C3:$N84,4)\"\n\"COUNTIF(List!$C3:$N84,5)\"\n\"SUM(B3:F3)\"\n\"COUNTIF(List!$O$3:$O$84,1)\"\n\"COUNTIF(List!$O$3:$O$84,2)\"\n\"COUNTIF(List!$O$3:$O$84,3)\"\n\"COUNTIF(List!$O$3:$O$84,4)\"\n\"COUNTIF(List!$O$3:$O$84,5)\"\n\"COUNTIF(List!$P$3:$P$84,1)\"\n\"COUNTIF(List!$P$3:$P$84,2)\"\n\"COUNTIF(List!$P$3:$P$84,3)\"\n\"COUNTIF(List!$P$3:$P$84,4)\"\n\"COUNTIF(List!$P$3:$P$84,5)\"\n\"COUNTIF(List!$Q$3:$Q$84,1)\"\n\"COUNTIF(List!$Q$3:$Q$84,2)-2\"\n\"COUNTIF(List!$Q$3:$Q$84,3)-4\"\n\"COUNTIF(List!$Q$3:$Q$84,4)\"\n\"COUNTIF(List!$Q$3:$Q$84,5)\"\n\"COUNTIF(List!$R$3:$R$84,1)\"\n\"COUNTIF(List!$R$3:$R$84,2)-3\"\n\"COUNTIF(List!$R$3:$R$84,3)\"\n\"COUNTIF(List!$R$3:$R$84,4)\"\n\"COUNTIF(List!$R$3:$R$84,5)\"\n\"COUNTIF(List!$S$3:$S$84,1)\"\n\"COUNTIF(List!$S$3:$S$84,2)\"\n\"COUNTIF(List!$S$3:$S$84,3)-2\"\n\"COUNTIF(List!$S$3:$S$84,4)\"\n\"COUNTIF(List!$S$3:$S$84,5)\"\n\"B2*3\"\n\"C2+D2\"\n\"E2/50*45\"\n\"H2*2\"\n\"L2*3.214285714\"\n\"D8*6.5\"\n\"D20*6.5*1.5\"\n\"MAX(D11:D57)\"\n\"MIN(G11:G57)\"\n\"AVERAGE(D11:D57)\"\n\"MEDIAN(D11:D56)\"\n\"SUM(C9:L9)\"\n\"SUM(M3:S3)\"\n\"SUM(M3:S3)/4\"\n\"122/4\"\n\"(B9+C9+D9+E9+F9)\"\n\"SUM(B9:B33)/COUNT(B9:B33)\"\n\"(+D14/9)/2.08333\"\n\"-38-14\"\n\"SUM(D14:D25)\"\n\"SUM(D31:D43)\"\n\"SUM(D50:D50)\"\n\"SUM(D64:D68)\"\n\"(23+19)/2\"\n\"-23-78\"\n\"-16-72\"\n\"SUM(D75:D84)\"\n\"SUM(D90:D92)\"\n\"+D26+D45+D52+D70+D85+D93+D108\"\n\"(+D14/7)/2.08333\"\n\"SUM(D14:D24)\"\n\"SUM(D30:D42)\"\n\"SUM(D49:D51)\"\n\"SUM(D64:D68)\"\n\"SUM(D75:D84)\"\n\"SUM(D90:D92)\"\n\"(10-15)/15\"\n\"+D25+D44+D53+D70+D85+D93+D108\"\n\"AVERAGE(B3:P3,B13:P13)\"\n\"AVERAGE(A10:P10,A20:P20)\"\n\"AVERAGE(B23,B64)\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"SUM(G4:H4)\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",40, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"SUM(F4)\"\n\"SUM(H4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"IF(K5=\"\"Y\"\",20, IF(K5=\"\"N\"\",0, IF(K5=\"\"\"\",\"\"\"\")))\"\n\"SUM(G5,F6)\"\n\"SUM(H5)\"\n\"IF(K12=\"\"Y\"\",28, IF(K12=\"\"N\"\",0, IF(K12=\"\"\"\",\"\"\"\")))\"\n\"IF(K14=\"\"Y\"\",30, IF(K14=\"\"N\"\",0, IF(K14=\"\"\"\",\"\"\"\")))\"\n\"G15\"\n\"IF(K16=\"\"Y\"\",45, IF(K16=\"\"N\"\",0, IF(K16=\"\"\"\",\"\"\"\")))\"\n\"SUM(L4:L22)\"\n\"SUM(L4:L22)\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"F4\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",40, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"G4\"\n\"SUM(H4,F5)\"\n\"SUM(I4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"SUM(G4,F6)\"\n\"SUM(H5,F7)\"\n\"IF(K8=\"\"Y\"\",45, IF(K8=\"\"N\"\",0, IF(K8=\"\"\"\",\"\"\"\")))\"\n\"SUM(G12)\"\n\"IF(K14=\"\"Y\"\",30, IF(K14=\"\"N\"\",0, IF(K14=\"\"\"\",\"\"\"\")))\"\n\"IF(K20=\"\"Y\"\",46, IF(K20=\"\"N\"\",0, IF(K20=\"\"\"\",\"\"\"\")))\"\n\"SUM(L4:L20)\"\n\"SUM(L4:L20)\"\n\"IF(L21>299,\"\"Present Full Day\"\",IF(L21>149,\"\"Present Half Day\"\",IF(L21<150,\"\"Absent Full Day\"\")))\"\n\"IF(L21>299,\"\"Present Full Day\"\",IF(L21>149,\"\"Present Half Day\"\",IF(L21<150,\"\"Absent Full Day\"\")))\"\n\"SUM(D4-C4)/0.04166667\"\n\"E4*60\"\n\"SUM(F4)\"\n\"SUM(0)\"\n\"SUM(G4:H4)\"\n\"D4-C4\"\n\"IF(K4=\"\"Y\"\",40, IF(K4=\"\"N\"\",0, IF(K4=\"\"\"\",\"\"\"\")))\"\n\"SUM(F4)\"\n\"SUM(H4,F5)\"\n\"SUM(J4+(D5-C5))\"\n\"SUM(G5,F6)\"\n\"SUM(H5)\"\n\"IF(K12=\"\"Y\"\",28, IF(K12=\"\"N\"\",0, IF(K12=\"\"\"\",\"\"\"\")))\"\n\"IF(K14=\"\"Y\"\",30, IF(K14=\"\"N\"\",0, IF(K14=\"\"\"\",\"\"\"\")))\"\n\"G15\"\n\"IF(K16=\"\"Y\"\",45, IF(K16=\"\"N\"\",0, IF(K16=\"\"\"\",\"\"\"\")))\"\n\"SUM(L4:L22)\"\n\"SUM(L4:L22)\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"IF(L23>299,\"\"Present Full Day\"\",IF(L23>149,\"\"Present Half Day\"\",IF(L23<150,\"\"Absent Full Day\"\")))\"\n\"COUNTIF(K1:K64,\"\"Active\"\")\"\n\"COUNTIF(L7:L64,\"\"Type I\"\")\"\n\"COUNTIF(C1:C64,\"\">07/01/01\"\")\"\n\"COUNTIF(J1:J64,\"\"Active FY02\"\")\"\n\"COUNTIF(M7:M64,\"\"Type I FY02\"\")\"\n\"COUNTIF(J2:J65,\"\"Active FY01\"\")\"\n\"COUNTIF(M2:M64,\"\"Type I FY01\"\")\"\n\"COUNTIF(J3:J66,\"\"Active FY00\"\")\"\n\"COUNTIF(M4:M64,\"\"Type I FY00\"\")\"\n\"COUNTIF(J4:J67,\"\"Active FY99\"\")\"\n\"COUNTIF(M7:M64,\"\"Type I FY97\"\")\"\n\"COUNTIF(J5:J68,\"\"Active FY97\"\")\"\n\"COUNTIF(J6:J69,\"\"Active FY94\"\")\"\n\"COUNTIF(L1:L64,\"\"Type 2\"\")\"\n\"COUNTIF(J7:J70,\"\"Active FY93\"\")\"\n\"COUNTIF(M2:M65,\"\"Type 2 FY02\"\")\"\n\"COUNTIF(J8:J71,\"\"Active FY92\"\")\"\n\"COUNTIF(M3:M66,\"\"Type 2 FY00\"\")\"\n\"COUNTIF(M4:M67,\"\"Type 2 FY99\"\")\"\n\"COUNTIF(K1:K64,\"\"Exempt\"\")\"\n\"COUNTIF(M5:M68,\"\"Type 2 FY97\"\")\"\n\"COUNTIF(J2:J65,\"\"Exempt FY02\"\")\"\n\"COUNTIF(M6:M69,\"\"Type 2 FY94\"\")\"\n\"COUNTIF(J3:J66,\"\"Exempt FY01\"\")\"\n\"COUNTIF(M7:M71,\"\"Type 2 FY93\"\")\"\n\"COUNTIF(M8:M72,\"\"Type 2 FY92\"\")\"\n\"COUNTIF(K1:K64,\"\"Complete\"\")\"\n\"COUNTIF(J2:J64,\"\"Complete FY02\"\")\"\n\"COUNTIF(L1:L64,\"\"Type 3\"\")\"\n\"COUNTIF(J3:J65,\"\"Complete FY01\"\")\"\n\"COUNTIF(M2:M65,\"\"Type 3 FY01\"\")\"\n\"COUNTIF(K1:K64,\"\"Deferred\"\")\"\n\"COUNTIF(J1:J64,\"\"Not Funded FY02\"\")\"\n\"COUNTIF(C1:C43,\"\">07/01/01\"\")\"\n\"COUNTIF(J7:J43,\"\"Active\"\")\"\n\"COUNTIF(K1:K43,\"\"Type I\"\")\"\n\"COUNTIF(I1:I43,\"\"Active FY02\"\")\"\n\"COUNTIF(L5:L43,\"\"TypeI FY02\"\")\"\n\"COUNTIF(I7:I46,\"\"Active FY01\"\")\"\n\"COUNTIF(L7:L43,\"\"Type I FY01\"\")\"\n\"COUNTIF(I7:I43,\"\"Active FY00\"\")\"\n\"COUNTIF(I2:I43,\"\"Active FY98\"\")\"\n\"COUNTIF(K1:K43,\"\"Type II\"\")\"\n\"COUNTIF(I3:I44,\"\"Active FY97\"\")\"\n\"COUNTIF(L7:L43,\"\"Type II FY02\"\")\"\n\"COUNTIF(L3:L45,\"\"Type II FY01\"\")\"\n\"COUNTIF(J7:J43,\"\"Completed\"\")\"\n\"COUNTIF(L4:L43,\"\"Type II FY00\"\")\"\n\"COUNTIF(I7:I43,\"\"Completed FY02\"\")\"\n\"COUNTIF(L7:L51,\"\"Type II FY97\"\")\"\n\"COUNTIF(I7:I43,\"\"Completed FY00\"\")\"\n\"COUNTIF(K9:K53,\"\"Type III\"\")\"\n\"COUNTIF(J1:J43,\"\"Not Funded\"\")\"\n\"COUNTIF(L10:L54,\"\"Type III FY98\"\")\"\n\"COUNTIF(I2:I44,\"\"Not Funded FY01\"\")\"\n\"COUNTIF(I1:I43,\"\"Exempt\"\")\"\n\"COUNTIF(I1:I43,\"\"Deferred\"\")\"\n\"'RIT Annual Report'!$C$66\"\n\"'NTID Annual Report'!$C$46\"\n\"SUM(F5:G5)\"\n\"SUM(B4:Q4)\"\n\"SUM(B4*0.7)\"\n\"SUM(F13:G13)\"\n\"H13/E13\"\n\"SUM(E13:E384)\"\n\"LOOKUP(B2,grades!$A$2:'grades'!$B$13)\"\n\"LOOKUP(B2,grades!$C$2:'grades'!$D$13)\"\n\"SUM(AVERAGE(B2:B53))\"\n\"SUM(B11:E11)\"\n\"SUM(B30:F30)\"\n\" IF(A12=\"\"HD\"\",7,IF(A12=\"\"DI\"\",6,IF(A12=\"\"CR\"\",5,IF(A12=\"\"PS\"\",4,0))))\"\n\"IF(OR(A12=\"\"TCR\"\",A12=\"\"PCR\"\",A12=\"\"FCR\"\",A12=\"\"SY\"\",A12=\"\"TA\"\",A12=\"\"US\"\",A12=\"\"GP\"\",A12=\"\"AW\"\",A12=\"\"SX\"\",A12=\"\"IP\"\",A12=\"\"AA\"\",A12=\"\"AE\"\",A12=\"\"NA\"\",A12=\"\"*\"\"),0,C12)\"\n\"SUM(B12*C12)\"\n\"SUM(B12:B35)\"\n\"( E36)/((D36))\"\n\"B3*C3\"\n\"B3+B4+B5+B6+B7+B8+B9+B10+B11+B12+B13\"\n\"D14/B14\"\n\"D14/B14\"\n\"D14/B14\"\n\"+A2*B2\"\n\"+C2/B2\"\n\"SUM(C2:C3)/SUM(B2:B3)\"\n\"SUM(C2:C4)/SUM(B2:B4)\"\n\"SUM(C2:C5)/SUM(B2:B5)\"\n\"SUM(C2:C6)/SUM(B2:B6)\"\n\"SUM(C2:C7)/SUM(B2:B7)\"\n\"SUM(C2:C8)/SUM(B2:B8)\"\n\"SUM(C2:C9)/SUM(B2:B9)\"\n\"SUM(C2:C10)/SUM(B2:B10)\"\n\"SUM(C2:C11)/SUM(B2:B11)\"\n\"SUM(C2:C12)/SUM(B2:B12)\"\n\"SUM(C2:C13)/SUM(B2:B13)\"\n\"SUM(C2:C14)/SUM(B2:B14)\"\n\"SUM(C2:C15)/SUM(B2:B15)\"\n\"SUM(C2:C16)/SUM(B2:B16)\"\n\"SUM(C2:C17)/SUM(B2:B17)\"\n\"SUM(C2:C18)/SUM(B2:B18)\"\n\"SUM(C2:C19)/SUM(B2:B19)\"\n\"SUM(C2:C20)/SUM(B2:B20)\"\n\"+B21*A21\"\n\"SUM(C2:C21)/SUM(B2:B21)\"\n\"SUM(C2:C22)/SUM(B2:B22)\"\n\"SUM(C2:C23)/SUM(B2:B23)\"\n\"SUM(C2:C24)/SUM(B2:B24)\"\n\"SUM(C2:C25)/SUM(B2:B25)\"\n\"SUM(C2:C26)/SUM(B2:B26)\"\n\"SUM(C2:C27)/SUM(B2:B27)\"\n\"SUM(C2:C28)/SUM(B2:B28)\"\n\"SUM(C2:C29)/SUM(B2:B29)\"\n\"SUM(C2:C30)/SUM(B2:B30)\"\n\"SUM(C2:C31)/SUM(B2:B31)\"\n\"SUM(C2:C32)/SUM(B2:B32)\"\n\"SUM(C2:C33)/SUM(B2:B33)\"\n\"SUM(C2:C34)/SUM(B2:B34)\"\n\"SUM(C2:C35)/SUM(B2:B35)\"\n\"SUM(C2:C36)/SUM(B2:B36)\"\n\"SUM(C2:C37)/SUM(B2:B37)\"\n\"SUM(C2:C38)/SUM(B2:B38)\"\n\"SUM(C2:C39)/SUM(B2:B39)\"\n\"SUM(C2:C40)/SUM(B2:B40)\"\n\"SUM(C2:C41)/SUM(B2:B41)\"\n\"SUM(C11*4)\"\n\"SUM(C12*3)\"\n\"SUM(C13*2)\"\n\"SUM(D17/C17)\"\n\"SUM(C14*1)\"\n\"SUM(C15*0)\"\n\"SUM(C11:C15)\"\n\"100*SUM(B2:L2)/105\"\n\"AVERAGE(B3:B53)\"\n\"STDEV(B3:B54)\"\n\"B4+C4+D4+E4+F4+G4+H4+I4+J4+K4\"\n\"L4+M4+N4+O4+P4\"\n\"R4 + S4 + T4 + U4 + V4 + W4 + X4 + Y4 + Z4 + AA4 + AB4\"\n\"AC4-AD4\"\n\"AE4+AF4\"\n\"Q4+AG4\"\n\"2160-AH4\"\n\"1920-AH4\"\n\"1680-AH4\"\n\"1440-AH4\"\n\"(AH4/940)*100\"\n\"(AH5/1040)*100\"\n\"IF(ISERROR(I4),\"\"ERROR\"\",A4)\"\n\"IF(ISERROR(O4),\"\"\"\",\"\" \"\"&O4)\"\n\"IF(ISBLANK(D4),\"\"\"\",MATCH(D4,GradePlusses,0))\"\n\"IF(ISERROR(I4),\"\"\"\",I4)\"\n\"J4=\"\"\"\"\"\n\"IF(K4,\"\"\"\",RANK(J4,RanksClean,1))\"\n\"IF(K4,\"\"\"\",L4+(Epsilon*A4))\"\n\"IF(K4,\"\"\"\",RANK(M4,TieBreakers,1))\"\n\"INDEX(iTitles,MATCH(A4,Untied,0))\"\n\"\"\"Percentage \"\"&IF(SUM(F16:AF16)=1,\"\"(100% total)\"\",\"\"(must add up to 100%)\"\")\"\n\"IF(OR(F15,F15>\"\"\"\"),F15,\"\"\"\")\"\n\"(IF(SUM(E20:AE20),ROUND(SUMPRODUCT($F$16:$AF$16,E20:AE20),2),\"\"\"\"))\"\n\"IF(C20<>\"\"\"\",HLOOKUP(C20/100,GradeTable,2),\"\"\"\")\"\n\"IF(OR(C19,C19>\"\"\"\"),C19,\"\"\"\")\"\n\"COUNT(B8:B15)\"\n\"MAX(B8:B15)\"\n\"MIN(100,B3+(C4-B4))\"\n\"MEDIAN(B8:B15)\"\n\"MAX(80,B$4)\"\n\"AVERAGE(B8:B15)\"\n\"MIN(B8:B15)\"\n\"MODE(B8:B15)\"\n\"ROUND((C$3-C$4)/(B$3-B$4)*(B8-B$4)+C$4,0)\"\n\"ROUND((C8+E8+G8+2*I8)/5,0)\"\n\"COUNTIF(C$8:C$15,\"\">=90\"\")\"\n\"COUNTIF(C$8:C$15,\"\">=80\"\")-C19\"\n\"COUNTIF(C$8:C$15,\"\">=70\"\")-C19-C20\"\n\"COUNTIF(C$8:C$15,\"\">=60\"\")-C19-C20-C21\"\n\"COUNTIF(C$8:C$15,\"\"<60\"\")\"\n\"'Course (Attend)'!F16\"\n\"COUNTA(F15:AF15)\"\n\"SUM(F16:AF16)\"\n\"Tests\"\n\"(IF(SUM(F22:AF22),ROUND(SUM(F22:AF22)/$F$19,2),\"\"\"\"))\"\n\"IF(C22<>\"\"\"\",HLOOKUP(C22,GradeTable,2),\"\"\"\")\"\n\"IF(C22<>\"\"\"\",HLOOKUP(C22,GradeTable,3),\"\"\"\")\"\n\"'Course (Attend)'!E22\"\n\"IF(OR(C21,C21>\"\"\"\"),C21,\"\"\"\")\"\n\"IF(SUM(C22:C62),AVERAGE(C22:C62),\"\"\"\")\"\n\"IF(SUM(C22:C62),MAX(C22:C62),\"\"\"\")\"\n\"IF(SUM(C22:C62),MIN(C22:C62),\"\"\"\")\"\n\"COUNTA(F15:AF15)\"\n\"F16\"\n\"IF(OR(F15,F15>\"\"\"\"),F15,\"\"\"\")\"\n\"IF(SUM(F22:AF22)/$F$18,SUM(F22:AF22)/$F$18,\"\"\"\")\"\n\"IF(C22<>\"\"\"\",HLOOKUP(C22,GradeTable,2),\"\"\"\")\"\n\"IF(C22<>\"\"\"\",C22*$F$19,\"\"\"\")\"\n\"IF(OR(C21,C21>\"\"\"\"),C21,\"\"\"\")\"\n\"IF(SUM(C22:C62),AVERAGE(C22:C62),\"\"\"\")\"\n\"IF(SUM(C22:C62),MAX(C22:C62),\"\"\"\")\"\n\"IF(SUM(C22:C62),MIN(C22:C62),\"\"\"\")\"\n\"\"\"Percentage \"\"&IF(SUM(F17:AF17)=1,\"\"(100% total)\"\",\"\"(must add up to 100%)\"\")\"\n\"IF(OR(F16,F16>\"\"\"\"),F16,\"\"\"\")\"\n\"(IF(SUM(F21:AF21),ROUND(SUMPRODUCT($F$17:$AF$17,F21:AF21),2),\"\"\"\"))\"\n\"IF(C21<>\"\"\"\",HLOOKUP(C21/100,GradeTable,2),\"\"\"\")\"\n\"IF(C21<>\"\"\"\",HLOOKUP(C21/100,GradeTable,3),\"\"\"\")\"\n\"IF(OR(C20,C20>\"\"\"\"),C20,\"\"\"\")\"\n\"IF(SUM(C21:C61),AVERAGE(C21:C61),\"\"\"\")\"\n\"IF(SUM(C21:C61),MAX(C21:C61),\"\"\"\")\"\n\"IF(SUM(C21:C61),MIN(C21:C61),\"\"\"\")\"\n\"COUNTA(F15:AF15)\"\n\"SUM(F16:AF16)\"\n\"IF(OR(F15,F15>\"\"\"\"),F15,\"\"\"\")\"\n\"(IF(SUM(E22:AE22),ROUND(SUM(E22:AE22)/$F$19,2),\"\"\"\"))\"\n\"IF(C22<>\"\"\"\",HLOOKUP(C22,GradeTable,2),\"\"\"\")\"\n\"IF(OR(E21,E21>\"\"\"\"),E21,\"\"\"\")\"\n\"SUM(D42:D45)\"\n\"SUM(D46:D51)\"\n\"COUNTIF(F3:AK3,\"\"n\"\")\"\n\"IF(AM3>Tables!$B$15,\"\"FAILS\"\",\"\"ok\"\")\"\n\"SUM(F2:AI2)\"\n\"Attendance!A3\"\n\"AJ2\"\n\"(SUM(F3:AI3))\"\n\"(AK3/AJ3)*100\"\n\"VLOOKUP(AM3,Tables!$A$34:$C$134,2,TRUE)\"\n\"Attendance!A3\"\n\"VLOOKUP(F3,Tables!$A$18:$C$31,2,FALSE)\"\n\"VLOOKUP(F3,Tables!$A$18:$C$31,3,FALSE)\"\n\"(((G3*Tables!$B$2)+(K3*Tables!$B$3)+(O3*Tables!$B$4)+(S3*Tables!$B$5))/100)\"\n\"(V3/Tables!$B$6)*100\"\n\"VLOOKUP(W3,Tables!$A$34:$C$134,2,TRUE)\"\n\"Attendance!A3\"\n\"SUM(F3:AJ3)\"\n\"COUNT(F3:AJ3)*3\"\n\"(AL3/AM3)*100\"\n\"VLOOKUP(AO3,Tables!$A$34:$C$134,2,TRUE)\"\n\"Papers!Z1\"\n\"Attendance!A3\"\n\"(((Assignments!AM3*Tables!$B$10)+(Papers!G3*Tables!$B$2)+(Participation!AO3*Tables!$B$11)))/45\"\n\"VLOOKUP(F3,Tables!$E$34:$G$134,2,TRUE)\"\n\"VLOOKUP(G3,Tables!$F$34:$H$134,2,TRUE)\"\n\"(((Assignments!AM3*Tables!$B$10)+(Papers!G3*Tables!$B$2)+(Papers!K3*Tables!$B$3)+(Participation!AO3*Tables!$B$11)))/60\"\n\"(((Assignments!AM3*Tables!$B$10)+(Papers!G3*Tables!$B$2)+(Papers!K3*Tables!$B$3)+(Papers!O3*Tables!$B$4)+(Participation!AO3*Tables!$B$11)))/75\"\n\"Assignments!AM3\"\n\"Assignments!AO3\"\n\"Papers!W3\"\n\"Participation!AO3\"\n\"Participation!AQ3\"\n\"Attendance!AN3\"\n\"(((R3*Tables!$B$10)+(X3*Tables!$B$11)+(U3*Tables!$B$6)+(AB3*Tables!$B$8))/100)\"\n\"VLOOKUP(F4,Tables!E35:G135,2,TRUE)\"\n\"Attendance!A3\"\n\"Attendance!A3\"\n\"Assignments!F1\"\n\"Assignments!AJ1\"\n\"Assignments!E21\"\n\"Assignments!F21\"\n\"Assignments!E8\"\n\"Assignments!F8\"\n\"Assignments!E14\"\n\"Assignments!F14\"\n\"Assignments!E9\"\n\"Assignments!F9\"\n\"Assignments!E22\"\n\"Assignments!F22\"\n\"Assignments!E6\"\n\"Assignments!F6\"\n\"Assignments!E19\"\n\"Assignments!F19\"\n\"Assignments!E3\"\n\"Assignments!F3\"\n\"Assignments!E13\"\n\"Assignments!F13\"\n\"Assignments!E17\"\n\"Assignments!F17\"\n\"Assignments!E11\"\n\"Assignments!F11\"\n\"Assignments!E7\"\n\"Assignments!F7\"\n\"Assignments!E12\"\n\"Assignments!F12\"\n\"Assignments!E5\"\n\"Assignments!F5\"\n\"Assignments!E18\"\n\"Assignments!F18\"\n\"Assignments!E15\"\n\"Assignments!F15\"\n\"Papers!E21\"\n\"Papers!F21\"\n\"Papers!N21\"\n\"Papers!R21\"\n\"'Final Grades'!F21\"\n\"Papers!Z21\"\n\"'Final Grades'!AG21\"\n\"'Final Grades'!AI21\"\n\"Papers!E8\"\n\"Papers!F8\"\n\"Papers!N8\"\n\"Papers!R8\"\n\"'Final Grades'!F8\"\n\"Papers!Z8\"\n\"'Final Grades'!AG8\"\n\"'Final Grades'!AI8\"\n\"Papers!E14\"\n\"Papers!F14\"\n\"Papers!N14\"\n\"Papers!R14\"\n\"'Final Grades'!F14\"\n\"Papers!Z14\"\n\"'Final Grades'!AG14\"\n\"'Final Grades'!AI14\"\n\"Papers!E9\"\n\"Papers!F9\"\n\"Papers!N9\"\n\"Papers!R9\"\n\"'Final Grades'!F9\"\n\"Papers!Z9\"\n\"'Final Grades'!AG9\"\n\"'Final Grades'!AI9\"\n\"Papers!E22\"\n\"Papers!F22\"\n\"Papers!N22\"\n\"Papers!R22\"\n\"'Final Grades'!F22\"\n\"Papers!Z22\"\n\"'Final Grades'!AG22\"\n\"'Final Grades'!AI22\"\n\"Papers!E6\"\n\"Papers!F6\"\n\"Papers!N6\"\n\"Papers!R6\"\n\"'Final Grades'!F6\"\n\"Papers!Z6\"\n\"'Final Grades'!AG6\"\n\"'Final Grades'!AI6\"\n\"Papers!E19\"\n\"Papers!F19\"\n\"Papers!N19\"\n\"Papers!R19\"\n\"'Final Grades'!F19\"\n\"Papers!Z19\"\n\"'Final Grades'!AG19\"\n\"'Final Grades'!AI19\"\n\"Papers!E10\"\n\"Papers!F10\"\n\"Papers!N10\"\n\"Papers!R10\"\n\"'Final Grades'!F10\"\n\"Papers!Z10\"\n\"'Final Grades'!AG10\"\n\"'Final Grades'!AI10\"\n\"Papers!E3\"\n\"Papers!F3\"\n\"Papers!N3\"\n\"Papers!R3\"\n\"'Final Grades'!F3\"\n\"Papers!Z3\"\n\"'Final Grades'!AG3\"\n\"'Final Grades'!AI3\"\n\"Papers!E13\"\n\"Papers!F13\"\n\"Papers!N13\"\n\"Papers!R13\"\n\"'Final Grades'!F13\"\n\"Papers!Z13\"\n\"'Final Grades'!AG13\"\n\"'Final Grades'!AI13\"\n\"Papers!E17\"\n\"Papers!F17\"\n\"Papers!N17\"\n\"Papers!R17\"\n\"'Final Grades'!F17\"\n\"Papers!Z17\"\n\"'Final Grades'!AG17\"\n\"'Final Grades'!AI17\"\n\"Papers!E11\"\n\"Papers!F11\"\n\"Papers!N11\"\n\"Papers!R11\"\n\"'Final Grades'!F11\"\n\"Papers!Z11\"\n\"'Final Grades'!AG11\"\n\"'Final Grades'!AI11\"\n\"Papers!E7\"\n\"Papers!F7\"\n\"Papers!N7\"\n\"Papers!R7\"\n\"'Final Grades'!F7\"\n\"Papers!Z7\"\n\"'Final Grades'!AG7\"\n\"'Final Grades'!AI7\"\n\"Papers!E12\"\n\"Papers!F12\"\n\"Papers!N12\"\n\"Papers!R12\"\n\"'Final Grades'!F12\"\n\"Papers!Z12\"\n\"'Final Grades'!AG12\"\n\"'Final Grades'!AI12\"\n\"Papers!E5\"\n\"Papers!F5\"\n\"Papers!N5\"\n\"Papers!R5\"\n\"'Final Grades'!F5\"\n\"Papers!Z5\"\n\"'Final Grades'!AG5\"\n\"'Final Grades'!AI5\"\n\"Papers!E18\"\n\"Papers!F18\"\n\"Papers!N18\"\n\"Papers!R18\"\n\"'Final Grades'!F18\"\n\"Papers!Z18\"\n\"'Final Grades'!AG18\"\n\"'Final Grades'!AI18\"\n\"Papers!E15\"\n\"Papers!F15\"\n\"Papers!N15\"\n\"Papers!R15\"\n\"'Final Grades'!F15\"\n\"Papers!Z15\"\n\"'Final Grades'!AG15\"\n\"'Final Grades'!AI15\"\n\"SUM(B2:B5)\"\n\"SUM(B6:B11)\"\n\"H6\"\n\"H7\"\n\"H8\"\n\"COUNTIF(W5:BN5,\"\"=N\"\")\"\n\"IF(N5>=B$6,4,IF(N5>=B$7,3,IF(N5>=B$8,2,IF(N5>=B$9,1,IF(N5=\"\"\"\",\"\"\"\",0)))))\"\n\"ROUND(R5*R$4+P5*P$4+Q5*Q$4,1)\"\n\"IF(J5>0,\"\"F\"\",IF(N5>=B$6,\"\"A\"\",IF(N5>=B$7,\"\"B\"\",IF(N5>=B$8,\"\"C\"\",IF(N5>=B$9,\"\"D\"\",\"\"F\"\")))))\"\n\"ROUND((S5*S$4+T5*T$4+U5*U$4+V5*V$4)/SUM(S$4:V$4),1)\"\n\"ROUND((W5*W$4+X5*X$4+Y5*Y$4+Z5*Z$4+AA5*AA$4+AB5*AB$4+AC5*AC$4+AD5*AD$4+AE5*AE$4+AF5*AF$4+AG5*AG$4+AH5*AH$4+AI5*AI$4+AJ5*AJ$4+AK5*AK$4+AL5*AL$4+AM5*AM$4)/SUM(W$4:AM$4),1)\"\n\"ROUND((AY5*AY$4+AZ5*AZ$4+BA5*BA$4+BB5*BB$4+BC5*BC$4+BD5*BD$4+BE5*BE$4+BF5*BF$4+BG5*BG$4+BH5*BH$4+BI5*BI$4+BJ5*BJ$4+BK5*BK$4+BL5*BL$4+BM5*BM$4+BN5*BN$4)/SUM(AY$4:BN$4),1)\"\n\"VLOOKUP(BO5,BW$6:BZ$56,2)\"\n\"IF(((BP5*(1-BQ$3))+BQ5*BQ$3)*(1+BR5)>4,4,ROUND((BP5*(1-BQ$3)+BQ5*BQ$3)*(1+BR5),1))\"\n\"DCOUNTA(K4:K92,1,A30:A31)\"\n\"C6/C$11\"\n\"BV4\"\n\"TRUNC((BV$6-BV6)/BV$6*100)/100\"\n\"BZ6-BZ5\"\n\"FREQUENCY(BO$5:BO$101,BW6:BW6)\"\n\"DCOUNTA(K4:K92,1,A32:A33)\"\n\"D6+D7+D8\"\n\"IF(BV6-1<0,\"\"\"\",BV6-1)\"\n\"DCOUNTA(K4:K92,1,A34:A35)\"\n\"H9-H6-H7\"\n\"DCOUNTA(K4:K92,1,A36:A37)\"\n\"DCOUNTA(K4:K92,1,A38:A39)\"\n\"D9+D10\"\n\"SUM(C6:C10)\"\n\"N93\"\n\"B46\"\n\"D42/D$47\"\n\"B45\"\n\"B44\"\n\"B43\"\n\"B42\"\n\"AVERAGE(N5:N89)\"\n\"N90\"\n\"ROUND(S2*S$4+Q2*Q$4+R2*R$4,1)\"\n\"H6\"\n\"H7\"\n\"H8\"\n\"COUNTIF(X5:BD5,\"\"=N\"\")\"\n\"IF(O5>=B$6,4,IF(O5>=B$7,3,IF(O5>=B$8,2,IF(O5>=B$9,1,IF(O5=\"\"\"\",\"\"\"\",0)))))\"\n\"ROUND(S5*S$4+Q5*Q$4+R5*R$4,1)\"\n\"IF(J5>0,\"\"F\"\",IF(O5>=B$6,\"\"A\"\",IF(O5>=B$7,\"\"B\"\",IF(O5>=B$8,\"\"C\"\",IF(O5>=B$9,\"\"D\"\",\"\"F\"\")))))\"\n\"SUM(T5:W5)/SUM(T$4:W$4)\"\n\"IF(SUM(X5:AN5)/SUM(X$4:AN$4)>4,4,SUM(X5:AN5)/SUM(X$4:AN$4))\"\n\"SUM(AO5:BD5)/SUM(AO$4:BD$4)\"\n\"VLOOKUP(BE5,BO$6:BR$70,2)\"\n\"IF((BF5*(1-BG$3)+(BG5*BG$3))*(1+BH5)>4,4,ROUND((BF5*(1-BG$3)+BG5*BG$3)*(1+BH5),1))\"\n\"DCOUNTA(K4:K92,1,A30:A31)\"\n\"C6/C$11\"\n\"BN4\"\n\"TRUNC((BN$6-BN6)/BN$6*100)/100\"\n\"BR6-BR5\"\n\"FREQUENCY(BE$5:BE$101,BO6:BO6)\"\n\"DCOUNTA(K4:K92,1,A32:A33)\"\n\"D6+D7+D8\"\n\"BN6-1\"\n\"DCOUNTA(K4:K92,1,A34:A35)\"\n\"H9-H6-H7\"\n\"DCOUNTA(K4:K92,1,A36:A37)\"\n\"DCOUNTA(K4:K92,1,A38:A39)\"\n\"D9+D10\"\n\"SUM(C6:C10)\"\n\"O93\"\n\"B46\"\n\"D42/D$47\"\n\"B45\"\n\"B44\"\n\"B43\"\n\"B42\"\n\"AVERAGE(O5:O89)\"\n\"O90\"\n\"SUM(X97:AN97)/SUM(X$4:AN$4)\"\n\"VLOOKUP(BE97,BO$6:BR$60,2)\"\n\"SUM(B7:L7)/SUM($B$7:$L$7)*30\"\n\"SUM(O7:P7)/SUM($O$7:$P$7)*10\"\n\"\"\"-\"\"\"\n\"(P9+Q9)/SUM($O$7:$P$7)*10\"\n\"(O12+Q12)/SUM($O$7:$P$7)*10\"\n\"\"\"0290\"\"\"\n\"\"\"0130\"\"\"\n\"AVERAGE(B8:B26)\"\n\"SUM(F8:F26)/19\"\n\"(B28/B7)*100\"\n\"SUM(B2:U2)\"\n\"COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=A\"\")+COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=A-\"\")\"\n\"COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=B\"\")+COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=B-\"\")+COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=B+\"\")\"\n\"COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=C\"\")+COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"C+\"\")\"\n\"COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=D\"\")\"\n\"COUNTIF('Grades for Posting'!$AF$2:$AF$84,\"\"=F\"\")\"\n\"SUM(B2:B6)\"\n\"'Grades for Posting'!AB85/200\"\n\"SUM(B2:B8)\"\n\"SUM(B3:I3)\"\n\"SUM(C2:L2)\"\n\"(M2/500)*100\"\n\"AVERAGE(C2:C96)\"\n\"((SUM(D5:J5))*25)/59\"\n\"(25*N5)/100\"\n\"Q5/2\"\n\"L5+O5+R5\"\n\"T5*$X$5\"\n\"100/T5\"\n\"AVERAGE(N5:N40)\"\n\"SUM(F5:I5)/3\"\n\"AVERAGE(E14:E105)\"\n\"AVERAGE(G4:G105)\"\n\"C1+2\"\n\"D1+5\"\n\"IF(ISBLANK(Grades!#REF!),\"\"\"\",COUNTIF(C2:AH2,\"\"A\"\"))\"\n\"IF(ISBLANK(Grades!#REF!),\"\"\"\",LOOKUP(AI2,$AK$2:$AK$6,$AL$2:$AL$6))\"\n\"IF(ISBLANK(Attendance!A2),\"\"\"\",Attendance!A2)\"\n\"IF(ISBLANK(Attendance!A2),\"\"\"\",Attendance!A2)\"\n\"IF(ISBLANK(Attendance!A2),\"\"\"\",Attendance!AJ2)\"\n\" SUM(F2:X2)\"\n\"(Z2+AA2)\"\n\"AB2/40\"\n\"AH2/20\"\n\" AS2+AT2\"\n\" AY2/50\"\n\"SUM(AB2,AF2,AI2,AM2,AQ2,AU2,AY2)-SMALL((AB2,AF2,AI2,AM2,AQ2,AU2,AY2),1)\"\n\" BK2\"\n\"SUM(C2,D2,Y2,BA2,BB2)\"\n\"BD2/400\"\n\" (BI2+BJ2)*3.75\"\n\" AY23/60\"\n\" (BI23+BJ23)*(75/30)\"\n\"[1]Sheet2!D1\"\n\"0.19*B2+0.19*C2+0.31*D2+0.31*E2\"\n\"AVERAGE(B2:B36)\"\n\"+(SUM(G10:K10)+AB10)/5\"\n\"+SUM(M10:S10)\"\n\"+V10*0.3+W10*0.3\"\n\"+SUM(Y10:AA10)\"\n\"+(T10/7*2)\"\n\"+L10*2\"\n\"+X10+AD10+AE10\"\n\"$G$4-(10*F7)\"\n\"SUM(B7+C7+D7+E7+G7+H7+I7)\"\n\"J7/K$6*100\"\n\"AVERAGE(B7:B73)\"\n\"B75/B$4\"\n\"J75/K6\"\n\"0.4/5\"\n\"58+35\"\n\"(((E6/$E$4)*$E$3) +((F6/$F$4)*$F$3)+((G6/$G$4)*$G$3)+((H6/$H$4)*$H$3)+((I6/$I$4)*$I$3)+((J6/$J$4)*$J$3)+((K6/$K$4)*$K$3)+((L6/$L$4)*$L$3)) / ($E$3+$F$3+$G$3+$H$3+$I$3+$J$3+$K$3+$L$3)\"\n\"55+35\"\n\"60+23\"\n\"60+28\"\n\"AVERAGE(E6:E15)\"\n\"MIN(E6:E15)\"\n\"MAX(E6:E15)\"\n\"STDEV(E6:E15)\"\n\"(((E6/$E$4)*$E$3) +((F6/$F$4)*$F$3)+((G6/$G$4)*$G$3)+((H6/$H$4)*$H$3)+((I6/$I$4)*$I$3)+((J6/$J$4)*$J$3)+((K6/$K$4)*$K$3)+((L6/$L$4)*$L$3)+((M6/$M$4)*$M$3)) / ($E$3+$F$3+$G$3+$H$3+$I$3+$J$3+$K$3+$L$3+$M$3)\"\n\"AVERAGE(E6:E16)\"\n\"MIN(E6:E16)\"\n\"MAX(E6:E16)\"\n\"STDEV(E6:E16)\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"IF(H5>=90,\"\"A\"\",IF(H5>=80,\"\"B\"\",IF(H5>=70,\"\"C\"\",IF(H5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"P5*0.65+AW5*0.25+CD5*0.1\"\n\"N5/2\"\n\"L5\"\n\"COUNTIF(I5:K5,\"\"Ex\"\")\"\n\"IF(L5+M5=0,SUM(I5:K5)/(3-O5),(SUM(I5:M5)-MIN(I5:M5))/(4-O5))\"\n\"IF(CJ5+CK5>0,10,0)\"\n\"MIN(R5:AR5)\"\n\"0.5*(COUNTIF(R5:AR5,\"\"<10\"\")+COUNTIF(R5:AR5,\"\"<9.5\"\")+COUNTIF(R5:AR5,\"\"<9\"\")+COUNTIF(R5:AR5,\"\"<8.5\"\")+COUNTIF(R5:AR5,\"\"<8\"\")+COUNTIF(R5:AR5,\"\"<7.5\"\")-6*COUNTIF(R5:AR5,\"\"=0\"\"))-IF(AS5=10,0,IF(AS5=9.5,0.5,IF(AS5=9,1,IF(AS5=8.5,1.5,IF(AS5=8,2,IF(AS5=7.5,2.5,IF(AS5=0,0,3)))))))\"\n\"MIN(CF5+CG5+CH5,AT5)\"\n\"COUNTIF(R5:AR5,\"\"Ex\"\")\"\n\"(SUM(R5:AR5)-AS5+AU5)/(Activities-1-AV5)*10\"\n\"SUM(AY5:BY5)\"\n\"CF5+CG5+CH5\"\n\"MIN((BZ5+CA5+CB5)/(HwkPoints-CC5)*100,100)\"\n\"COUNT(H5:H5)\"\n\"AVERAGE(H5:H5)\"\n\"IF(N7>0,SUM(L5:L5)/N7,0)\"\n\"COUNTIF(N5:N5,\"\">0\"\")\"\n\"'Sec01'!B7\"\n\"'Sec01'!I7\"\n\"'Sec01'!N7\"\n\"COUNTIF('Sec01'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec01'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec01'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec01'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec01'!G5:G5,\"\"F\"\")\"\n\"B2*C2\"\n\"B2*D2\"\n\"B2*E2\"\n\"F2*G2\"\n\"B2*H2\"\n\"'Sec02'!B7\"\n\"'Sec02'!I7\"\n\"'Sec02'!N7\"\n\"COUNTIF('Sec02'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec02'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec02'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec02'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec02'!G5:G5,\"\"F\"\")\"\n\"'Sec03'!B7\"\n\"'Sec03'!I7\"\n\"'Sec03'!N7\"\n\"COUNTIF('Sec03'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec03'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec03'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec03'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec03'!G5:G5,\"\"F\"\")\"\n\"'Sec05'!B7\"\n\"'Sec05'!I7\"\n\"'Sec05'!N7\"\n\"COUNTIF('Sec05'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec05'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec05'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec05'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec05'!G5:G5,\"\"F\"\")\"\n\"'Sec06'!B7\"\n\"'Sec06'!I7\"\n\"'Sec06'!N7\"\n\"COUNTIF('Sec06'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec06'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec06'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec06'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec06'!G5:G5,\"\"F\"\")\"\n\"'Sec07'!B7\"\n\"'Sec07'!I7\"\n\"'Sec07'!N7\"\n\"COUNTIF('Sec07'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec07'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec07'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec07'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec07'!G5:G5,\"\"F\"\")\"\n\"'Sec08'!B7\"\n\"'Sec08'!I7\"\n\"'Sec08'!N7\"\n\"COUNTIF('Sec08'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec08'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec08'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec08'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec08'!G5:G5,\"\"F\"\")\"\n\"'Sec10'!B7\"\n\"'Sec10'!I7\"\n\"'Sec10'!N7\"\n\"COUNTIF('Sec10'!G5:G5,\"\"A\"\")\"\n\"COUNTIF('Sec10'!G5:G5,\"\"B\"\")\"\n\"COUNTIF('Sec10'!G5:G5,\"\"C\"\")\"\n\"COUNTIF('Sec10'!G5:G5,\"\"D\"\")\"\n\"COUNTIF('Sec10'!G5:G5,\"\"F\"\")\"\n\"SUM(B2:B9)\"\n\"SUM(P2:P9)/B11\"\n\"SUM(Q2:Q9)/B11\"\n\"SUM(R2:R9)/B11\"\n\"IF(G11>0,SUM(S2:S9)/G11,0)\"\n\"SUM(T2:T9)/B11\"\n\"J11/B11\"\n\"K11/B11\"\n\"L11/B11\"\n\"M11/B11\"\n\"N11/B11\"\n\"C16-C17\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"IF(G5>=90,\"\"A\"\",IF(G5>=80,\"\"B\"\",IF(G5>=70,\"\"C\"\",IF(G5>=60,\"\"D\"\",\"\"F\"\"))))\"\n\"N5*0.65+(2*AR5+AY5)*0.25/3+BE5*0.1\"\n\"K5\"\n\"IF(K5+L5=0,SUM(H5:J5)/(3-M5),(SUM(H5:L5)-MIN(H5:L5))/(4-M5))\"\n\"COUNTIF(P5:AP5,\"\"Ex\"\")\"\n\"(SUM(P5:AP5)-MIN(P5:AP5))/(Activities-1-AQ5)*10\"\n\"MIN(BG5,4)+MIN(BH5,4)+MIN(BI5,4)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((AT5+AU5+AV5+AW5)/(QuizPoints-AX5)*100,100)\"\n\"MAX(BG5-4,0)+MAX(BH5-4,0)+MAX(BI5-4,0)\"\n\"MIN((BA5+BB5+BC5)/(HwkPoints-BD5)*100,100)\"\n\"COUNT(G5:G5)\"\n\"AVERAGE(G5:G5)\"\n\"'Sec01'!A7\"\n\"'Sec01'!H7\"\n\"'Sec01'!G7\"\n\"COUNTIF('Sec01'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec01'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec01'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec01'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec01'!F5:F5,\"\"F\"\")\"\n\"B2*C2\"\n\"B2*D2\"\n\"B2*E2\"\n\"B2*F2\"\n\"'Sec02'!A7\"\n\"'Sec02'!H7\"\n\"'Sec02'!G7\"\n\"COUNTIF('Sec02'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec02'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec02'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec02'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec02'!F5:F5,\"\"F\"\")\"\n\"'Sec03'!A7\"\n\"'Sec03'!H7\"\n\"'Sec03'!G7\"\n\"COUNTIF('Sec03'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec03'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec03'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec03'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec03'!F5:F5,\"\"F\"\")\"\n\"'Sec04'!A7\"\n\"'Sec04'!H7\"\n\"'Sec04'!G7\"\n\"COUNTIF('Sec04'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec04'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec04'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec04'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec04'!F5:F5,\"\"F\"\")\"\n\"'Sec05'!A7\"\n\"'Sec05'!H7\"\n\"'Sec05'!G7\"\n\"COUNTIF('Sec05'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec05'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec05'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec05'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec05'!F5:F5,\"\"F\"\")\"\n\"'Sec07'!A7\"\n\"'Sec07'!H7\"\n\"'Sec07'!G7\"\n\"COUNTIF('Sec07'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec07'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec07'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec07'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec07'!F5:F5,\"\"F\"\")\"\n\"'Sec10'!A7\"\n\"'Sec10'!H7\"\n\"'Sec10'!G7\"\n\"COUNTIF('Sec10'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec10'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec10'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec10'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec10'!F5:F5,\"\"F\"\")\"\n\"'Sec11'!A7\"\n\"'Sec11'!H7\"\n\"'Sec11'!G7\"\n\"COUNTIF('Sec11'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec11'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec11'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec11'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec11'!F5:F5,\"\"F\"\")\"\n\"'Sec12'!A7\"\n\"'Sec12'!H7\"\n\"'Sec12'!G7\"\n\"COUNTIF('Sec12'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec12'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec12'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec12'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec12'!F5:F5,\"\"F\"\")\"\n\"'Sec14'!A7\"\n\"'Sec14'!H7\"\n\"'Sec14'!G7\"\n\"COUNTIF('Sec14'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec14'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec14'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec14'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec14'!F5:F5,\"\"F\"\")\"\n\"'Sec15'!A7\"\n\"'Sec15'!H7\"\n\"'Sec15'!G7\"\n\"COUNTIF('Sec15'!F5:F5,\"\"A\"\")\"\n\"COUNTIF('Sec15'!F5:F5,\"\"B\"\")\"\n\"COUNTIF('Sec15'!F5:F5,\"\"C\"\")\"\n\"COUNTIF('Sec15'!F5:F5,\"\"D\"\")\"\n\"COUNTIF('Sec15'!F5:F5,\"\"F\"\")\"\n\"SUM(B2:B12)\"\n\"SUM(N2:N12)/B14\"\n\"SUM(O2:O12)/B14\"\n\"SUM(P2:P12)/B14\"\n\"SUM(Q2:Q12)/B14\"\n\"H14/B14\"\n\"I14/B14\"\n\"J14/B14\"\n\"K14/B14\"\n\"L14/B14\"\n\"C19-C20\"\n\"(L9*25+M9*25+P9*15+N9*35)/100\"\n\"100*(Q9+R9+S9+T9+U9+V9+W9+X9+Y9+Z9)/(35+15+25+45+25+75+45+20+20+70)\"\n\"B9+1\"\n\"AVERAGE(K9:K62)\"\n\"(B2+D2+E2+G2+J2+K2+M2-M2-E2)/5\"\n\"(B3+D3+E3+G3+J3+K3+M3-M3-D3)/5\"\n\"(B4+D4+E4+G4+J4+K4+M4-K4-G4)/5\"\n\"(B5+D5+E5+G5+J5+K5+M5-J5-D5)/5\"\n\"(B6+D6+E6+G6+J6+K6+M6-J6-B6)/5\"\n\"(B7+D7+E7+G7+J7+K7+M7-M7-B7)/5\"\n\"(B8+D8+E8+G8+J8+K8+M8-K8-J8)/5\"\n\"(B9+D9+E9+G9+J9+K9+M9-J9-E9)/5\"\n\"(B11+D11+E11+G11+J11+K11+M11-G11-J11)/5\"\n\"(B12+D12+E12+G12+J12+K12+M12-G12-E12)/5\"\n\"(B13+D13+E13+G13+J13+K13+M13-G13-K13)/5\"\n\"(B14+D14+E14+G14+J14+K14+M14-D14-E14)/5\"\n\"(B15+D15+E15+G15+J15+K15+M15-M15-J15)/5\"\n\"(B16+D16+E16+G16+J16+K16+M16-M16-K16)/5\"\n\"(B19+D19+E19+G19+J19+K19+M19-B19-K19)/5\"\n\"(B22+D22+E22+G22+J22+K22+M22-B22-E22)/5\"\n\"(B23+D23+E23+G23+J23+K23+M23-J23-K23)/5\"\n\"(B24+D24+E24+G24+J24+K24+M24-D24-J24)/5\"\n\"(B25+D25+E25+G25+J25+K25+M25-G25-J25)/4\"\n\"(B26+D26+E26+G26+J26+K26+M26-E26-G26)/5\"\n\"(B28+D28+E28+G28+J28+K28+M28-D28-G28)/5\"\n\"(D29+E29+G29+J29+K29+M29-J29-K29)/4\"\n\"(B31+D31+E31+G31+J31+K31+M31-K31-B31)/5\"\n\"AVERAGE(C3:J3)\"\n\"AVERAGE(L3:M3)\"\n\"K4*0.1+R4*0.15+S4*0.15+$P$3*0.3+Q4*0.3\"\n\"AVERAGE(L10:O10)\"\n\"K11*0.1+R11*0.15+S11*0.15+$P$10*0.3+$Q$10*0.15+Q11*0.15\"\n\"AVERAGE(B4:B8,B11:B15)\"\n\"STDEV(B4:B8,B11:B15)\"\n\"+B6+C6+D6+E6+F6\"\n\"+(G6*0.6) + ((I6+J6)/2)*0.4\"\n\"+Q113/105\"\n\"SUM(G6:G111)\"\n\"((B2+D2+E2+G2+I2+J2+K2+M2+O2)/9)*0.3+((C2+F2+H2+L2+P2)/5)*0.2+N2*0.2+R2*0.3\"\n\"C6+E6+F6+G6+H6+I6+J6\"\n\"B7*0.35\"\n\"B41*0.35+3\"\n\"IF(Q1=\"\"\"\",\"\"\"\",IF(R1=\"\"\"\",\"\"\"\",R1/Q1))\"\n\"IF(S1=\"\"\"\",\"\"\"\",IF(S1>=Scales!$C$3,Scales!$B$3,IF((S1>=Scales!$C$4),Scales!$B$4,IF(S1>=Scales!$C$5,Scales!$B$5,IF(S1>=Scales!$C$6,Scales!$B$6,IF(S1>=Scales!$C$7,Scales!$B$7,IF(S1=\"\"\"\",\"\"\"\",Scales!$B$7)))))))\"\n\"SUM(HWRangeAvailable)\"\n\"SUM(HWRangeScore)\"\n\"IF(OR(F5=\"\"\"\",F5=0),\"\"\"\",IF(G5=\"\"\"\",\"\"\"\",G5/F5))\"\n\"SUM(QuizRangeAvailable)\"\n\"SUM(QuizRangeScore)\"\n\"SUM(LabRangeAvailable)\"\n\"SUM(LabRangeScore)\"\n\"SUM(TestRangeAvailable)\"\n\"SUM(TestRangeScore)\"\n\"SUM(MidRangeAvailable)\"\n\"SUM(MidRangeScore)\"\n\"SUM(FinalRangeAvailable)\"\n\"SUM(FinalRangeScore)\"\n\"SUM(HWTotalA,QuizTotalA,LabTotalA,TestTotalA,MidTotalA,FinalTotalA)\"\n\"SUM(HWTotalS,QuizTotalS,LabTotalS,TestTotalS,MidTotalS,FinalTotalS)\"\n\"SUM(HWTotalS*HWScale,QuizTotalS*QuizScale,LabTotalS*LabScale,TestTotalS*LabScale,MidTotalS*MidScale,FinalTotalS*FinalScale) / SUM(HWTotalA*HWScale,QuizTotalA*QuizScale,LabTotalA*LabScale,TestTotalA*LabScale,MidTotalA*MidScale,FinalTotalA*FinalScale)\"\n\"COUNTIF(D4:D60,\"\">0\"\")\"\n\"AVERAGE(D4:D60)\"\n\"COUNTIF(D4:D60,\"\"<50\"\")\"\n\"0.4*B3+0.6*C3\"\n\"IF(D3>=87.5,1,IF(AND(D3>=74.5,D3<87.5),2,IF(AND(D3>=62.5,D3<74.5),3,IF(AND(D3>=49.5,D3<62.5),4,5))))\"\n\"AVERAGE(B3:G3)\"\n\"H3*0.25+O3*0.25+P3*0.25+Q3*0.25\"\n\"AVERAGE(H3:H32)\"\n\"GRADES!A2\"\n\"A3\"\n\"GRADES!A2\"\n\"A3\"\n\"SUM(G24:G99)\"\n\"SUM(C6:AE6)\"\n\"SUM(AF6:AH6)\"\n\"SUM(C6:C37)\"\n\"SUM(AF3:AF37)\"\n\"(C38/D42)*100\"\n\"(D38/D42)*100\"\n\"(E38/D42)*100\"\n\"(F38/D42)*100\"\n\"(G38/D42)*100\"\n\"(H38/D42)*100\"\n\"(J38/D42)*100\"\n\"(K38/D42)*100\"\n\"(L38/D42)*100\"\n\"(M38/D42)*100\"\n\"(N38/D42)*100\"\n\"(O38/D42)*100\"\n\"(P38/D42)*100\"\n\"(Q38/D42)*100\"\n\"(R38/D42)*100\"\n\"(S38/D42)*100\"\n\"(T38/D42)*100\"\n\"(U38/D42)*100\"\n\"(V38/D42)*100\"\n\"(X38/D42)*100\"\n\"(Y38/D42)*100\"\n\"(Z38/D42)*100\"\n\"(AA38/D42)*100\"\n\"(AD38/D42)*100\"\n\"(AG38/D42)*100\"\n\"(AH38/D42)*100\"\n\"AI38\"\n\"SUM(C5:AE5)\"\n\"SUM(AF5:AH5)\"\n\"SUM(C5:C29)\"\n\"SUM(P7:P29)\"\n\"AI30\"\n\"H9+H23+H37+H51+H78\"\n\"H13+H27+H41+H55+H70+H82\"\n\"H19+H33+H47+H61+H73+H88\"\n\"F9+F17+F25+F33+F45\"\n\"F13+F21+F29+F37+F41+F49\"\n\"IF(K6=4,1,(IF(K6=7,1,(IF(K6=11,1,0)))))\"\n\"SUM(C4:N4)\"\n\"SUM(C4:C29)/26\"\n\"SUM(C12:C27)\"\n\"C12/C34*100\"\n\"AVERAGE(B11:B20)\"\n\"AVERAGE(B24:B73)\"\n\"AVERAGE(B77:B85)\"\n\"AVERAGE(B89:B96)\"\n\"AVERAGE(B100:B111)\"\n\"AVERAGE(B115:B130)\"\n\"AVERAGE(B134:B147)\"\n\"AVERAGE(B151:B183)\"\n\"AVERAGE(B187:B226)\"\n\"AVERAGE(B230:B259)\"\n\"AVERAGE(B263:B277)\"\n\"AVERAGE(B298:B393)\"\n\"AVERAGE(B397:B551)\"\n\"AVERAGE(B555:B633)\"\n\"AVERAGE(B640:B642)\"\n\"AVERAGE(B646:B647)\"\n\"AVERAGE(B651:B667)\"\n\"AVERAGE(B671:B719)\"\n\"IF(I6=4,1,(IF(I6=7,1,(IF(I6=11,1,0)))))\"\n\"[1]Franklin!A1\"\n\"[1]ProbableCost!B$5\"\n\"[1]ProbableCost!H$5\"\n\"[1]ProbableCost!B6\"\n\"[1]ProbableCost!B$12\"\n\"[1]ProbableCost!H$12\"\n\"[1]JacksonHS!B7\"\n\"SUM(O12:O18)+37\"\n\"[1]ProbableCost!B$9\"\n\"Q14/3\"\n\"Q14/3\"\n\"Q16\"\n\"Q19\"\n\"SUM(O19:O21)+18\"\n\"[1]Franklin!L22\"\n\"[1]JacksonES!L22\"\n\"[1]Kinnison!L22\"\n\"[1]Parkview!L22\"\n\"[1]Scioto!L22\"\n\"[1]SouthSt!L22\"\n\"[1]Lick!L22\"\n\"[1]JacksonHS!L22\"\n\"[1]ProbableCost!B11\"\n\"[1]ProbableCost!H11\"\n\"SUM(O22:O25)+24\"\n\"B19*B20\"\n\"[1]ProbableCost!B40\"\n\"[1]ProbableCost!I40\"\n\"IF(B21>0,B22/B21,0)\"\n\"SUM(O12:O26)\"\n\"SUM(Q14:Q26)\"\n\"B$15\"\n\"J15\"\n\"B29*B28\"\n\"O30-O31\"\n\"K15\"\n\"L15\"\n\"K19\"\n\"B30+B34+B38\"\n\"B19\"\n\"O35\"\n\"H30\"\n\"L39\"\n\"B56+B52+B48\"\n\"H22\"\n\"[1]Lick!E58\"\n\"B43\"\n\"B59+B60\"\n\"B61+B57\"\n\"5*B19+[1]Franklin!E52\"\n\"5*C19+[1]JacksonES!E52\"\n\"5*D19+[1]Kinnison!E52\"\n\"5*E19+[1]Parkview!E52\"\n\"5*F19+[1]Scioto!E52\"\n\"5*G19+[1]SouthSt!E52\"\n\"5*26799+107180\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"SUM(B62:L62)+SUM(B63:L63)\"\n\"C2*D2\"\n\"SUM(E2:E11)\"\n\"I14/J14\"\n\"K15*J14\"\n\"SUM(I17:I19)\"\n\"SUM(E16:E26)\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"A1\"\n\"B3/C3-1\"\n\"B$3/B$6\"\n\"B17/B19\"\n\"B65\"\n\"B98-C98\"\n\"B113+B114+B115+B116\"\n\"SUM(B4:E4)\"\n\"SUM(B4:I4)\"\n\"SUM(H19:L19)\"\n\"B17/$M17*100\"\n\"SUM(B4:E4)\"\n\"SUM(B4:I4)\"\n\"M17\"\n\"P17/$AA17*100\"\n\"SUM(V4:Z4)\"\n\"SUM(B17:J17)\"\n\"SUM(P17:Z17)\"\n\"SUM(B21:K21)\"\n\"B17/$M17*100\"\n\"SUM(B4:E4)\"\n\"SUM(B4:I4)\"\n\"M17\"\n\"P17/$AA17*100\"\n\"SUM(V4:Z4)\"\n\"SUM(B17:J17)\"\n\"SUM(P17:Z17)\"\n\"National!B4\"\n\"National!M4\"\n\"Lewisham!B4\"\n\"Myschool!B4\"\n\"National!B5\"\n\"National!M5\"\n\"Lewisham!B5\"\n\"Myschool!B5\"\n\"National!B6\"\n\"National!M6\"\n\"Lewisham!B6\"\n\"Myschool!B6\"\n\"National!B7\"\n\"National!M7\"\n\"Lewisham!B7\"\n\"Myschool!B7\"\n\"National!B8\"\n\"National!M8\"\n\"Lewisham!B8\"\n\"Myschool!B8\"\n\"National!B9\"\n\"National!M9\"\n\"Lewisham!B9\"\n\"Myschool!B9\"\n\"National!B10\"\n\"National!M10\"\n\"Lewisham!B10\"\n\"Myschool!B10\"\n\"National!B11\"\n\"National!M11\"\n\"Lewisham!B11\"\n\"Myschool!B11\"\n\"National!B12\"\n\"National!M12\"\n\"Lewisham!B12\"\n\"Myschool!B12\"\n\"National!B13\"\n\"National!M13\"\n\"Lewisham!B13\"\n\"Myschool!B13\"\n\"National!B19\"\n\"Lewisham!P4\"\n\"Myschool!P4\"\n\"National!B20\"\n\"Lewisham!P5\"\n\"Myschool!P5\"\n\"National!B21\"\n\"Lewisham!P6\"\n\"Myschool!P6\"\n\"National!B22\"\n\"Lewisham!P7\"\n\"Myschool!P7\"\n\" ((IF(ISBLANK(H7),0,0))+(IF(ISBLANK(I7),0,50))+(IF(ISBLANK(J7),0,100))) / 100\"\n\" ((IF(ISBLANK(H10),0,0))+(IF(ISBLANK(I10),0,50))+(IF(ISBLANK(J10),0,100))+(IF(ISBLANK(H11),0,0))+(IF(ISBLANK(I11),0,50))+(IF(ISBLANK(J11),0,100))) / 200\"\n\" ((IF(ISBLANK(H14),0,0))+(IF(ISBLANK(I14),0,50))+(IF(ISBLANK(J14),0,100))+(IF(ISBLANK(H15),0,0))+(IF(ISBLANK(I15),0,50))+(IF(ISBLANK(J15),0,100))+(IF(ISBLANK(H16),0,0))+(IF(ISBLANK(I16),0,50))+(IF(ISBLANK(J16),0,100))) / 300\"\n\" ((IF(ISBLANK(H24),0,0))+(IF(ISBLANK(I24),0,50))+(IF(ISBLANK(J24),0,100))+(IF(ISBLANK(H25),0,0))+(IF(ISBLANK(I25),0,50))+(IF(ISBLANK(J25),0,100))+(IF(ISBLANK(H26),0,0))+(IF(ISBLANK(I26),0,50))+(IF(ISBLANK(J26),0,100))+(IF(ISBLANK(H26),0,0))+(IF(ISBLANK(I26),0,50))+(IF(ISBLANK(J26),0,100))) / 400\"\n\" ((IF(ISBLANK(H39),0,0))+(IF(ISBLANK(I39),0,50))+(IF(ISBLANK(J39),0,100))+(IF(ISBLANK(H40),0,0))+(IF(ISBLANK(I40),0,50))+(IF(ISBLANK(J40),0,100))+(IF(ISBLANK(H41),0,0))+(IF(ISBLANK(I41),0,50))+(IF(ISBLANK(J41),0,100))+(IF(ISBLANK(H41),0,0))+(IF(ISBLANK(H42),0,0))+(IF(ISBLANK(I42),0,50))+(IF(ISBLANK(J42),0,100))+(IF(ISBLANK(H43),0,0))+(IF(ISBLANK(I43),0,50))+(IF(ISBLANK(J43),0,100))+(IF(ISBLANK(H44),0,0))+(IF(ISBLANK(I44),0,50))+(IF(ISBLANK(J44),0,100))) / 600\"\n\"A46+A38+A34+A29+A23+A18+A13+A9+A6\"\n\"(K6*A6/A50)+(K9*A9/A50)+(K18*A18/A50)+(K23*A23/A50)+(K29*A29/A50)+(K34*A34/A50)+(K38*A38/A50)+(K13*A13/A50)+(K46*A46/A50)\"\n\"K50*K51\"\n\" ((IF(ISBLANK(H7),0,0))+(IF(ISBLANK(I7),0,50))+(IF(ISBLANK(J7),0,100))) / 100\"\n\" ((IF(ISBLANK(H10),0,0))+(IF(ISBLANK(I10),0,50))+(IF(ISBLANK(J10),0,100))+(IF(ISBLANK(H11),0,0))+(IF(ISBLANK(I11),0,50))+(IF(ISBLANK(J11),0,100))) / 200\"\n\" ((IF(ISBLANK(H14),0,0))+(IF(ISBLANK(I14),0,50))+(IF(ISBLANK(J14),0,100))+(IF(ISBLANK(H15),0,0))+(IF(ISBLANK(I15),0,50))+(IF(ISBLANK(J15),0,100))+(IF(ISBLANK(H16),0,0))+(IF(ISBLANK(I16),0,50))+(IF(ISBLANK(J16),0,100))) / 300\"\n\" ((IF(ISBLANK(H24),0,0))+(IF(ISBLANK(I24),0,50))+(IF(ISBLANK(J24),0,100))+(IF(ISBLANK(H25),0,0))+(IF(ISBLANK(I25),0,50))+(IF(ISBLANK(J25),0,100))+(IF(ISBLANK(H26),0,0))+(IF(ISBLANK(I26),0,50))+(IF(ISBLANK(J26),0,100))+(IF(ISBLANK(H26),0,0))+(IF(ISBLANK(I26),0,50))+(IF(ISBLANK(J26),0,100))) / 400\"\n\" ((IF(ISBLANK(H39),0,0))+(IF(ISBLANK(I39),0,50))+(IF(ISBLANK(J39),0,100))+(IF(ISBLANK(H40),0,0))+(IF(ISBLANK(I40),0,50))+(IF(ISBLANK(J40),0,100))+(IF(ISBLANK(H41),0,0))+(IF(ISBLANK(I41),0,50))+(IF(ISBLANK(J41),0,100))+(IF(ISBLANK(H41),0,0))+(IF(ISBLANK(H42),0,0))+(IF(ISBLANK(I42),0,50))+(IF(ISBLANK(J42),0,100))+(IF(ISBLANK(H43),0,0))+(IF(ISBLANK(I43),0,50))+(IF(ISBLANK(J43),0,100))+(IF(ISBLANK(H44),0,0))+(IF(ISBLANK(I44),0,50))+(IF(ISBLANK(J44),0,100))) / 600\"\n\"A46+A38+A34+A29+A23+A18+A13+A9+A6\"\n\"(K6*A6/A50)+(K9*A9/A50)+(K18*A18/A50)+(K23*A23/A50)+(K29*A29/A50)+(K34*A34/A50)+(K38*A38/A50)+(K13*A13/A50)+(K46*A46/A50)\"\n\"SUM(B3:G3)/6\"\n\"A4-1\"\n\"47/8\"\n\"SUM(M18:M27)\"\n\"M28/M29\"\n\"SUM(C3:J3)-SMALL(C3:J3,1)-SMALL(C3:J3,2)\"\n\"IF(ISBLANK(W3),SUM(U3:V3),SMALL(U3:W3,3)+SMALL(U3:W3,2))+IF(ISBLANK(Z3),SUM(X3:Y3),SMALL(X3:Z3,3)+SMALL(X3:Z3,2))+AA3\"\n\"K3+T3+AB3+AC3\"\n\"IF(AD3>=400,\"\"A\"\",IF(AD3>=380,\"\"B+\"\",IF(AD3>=350,\"\"B\"\",IF(AD3>=330,\"\"C+\"\",IF(AD3>=300,\"\"C\"\",IF(AD3>=280,\"\"D+\"\",IF(AD3>=250,\"\"D\"\",\"\"E\"\")))))))\"\n\"AVERAGE(C3:C40)\"\n\"IF(AD41>=400,\"\"A\"\",IF(AD41>=385,\"\"B+\"\",IF(AD41>=350,\"\"B\"\",IF(AD41>=335,\"\"C+\"\",IF(AD41>=300,\"\"C\"\",IF(AD41>=285,\"\"D+\"\",IF(AD41>=250,\"\"D\"\",\"\"E\"\")))))))\"\n\"IF(D8>D9,D8,D9)\"\n\"D15-D17\"\n\"ROUND(SUM(D25*D11),0)\"\n\"ROUND(D25*0.05,2)*D13\"\n\"ROUND(SUM(D26+D27),0)\"\n\"D18\"\n\"D22\"\n\"ROUND(SUM(((((D31)*(28/1000))-D19)+D20)-D32),0)\"\n\"ROUND(SUM(D28*0.27),0)\"\n\"IF(D33<D34,D33,D34)\"\n\"ROUND(D25*0.0013,2)*D11\"\n\"ROUND(SUM(D28-D35+D37),0)\"\n\"ROUND(D43*0.159,0)\"\n\"SUM(D43:D50)\"\n\"D53+D38\"\n\"SUM(B2:F2)\"\n\"100*G2/200\"\n\"SUM(D2:J2)\"\n\"LOOKUP(C3,Proposal!A$2:A$10,Proposal!I$2:I$10)\"\n\"LOOKUP(C3,Project!I$15:I$23,Project!J$15:J$23)\"\n\"(D3*D$2+E3*E$2+F3*F$2+G3*G$2+J3*J$2)/100\"\n\"AVERAGE(B2:H2)\"\n\"AVERAGE(B10:H10)*0.8\"\n\"AVERAGE(B2:G2)\"\n\"AVERAGE(B3:H3)\"\n\"AVERAGE(B15:F15)\"\n\"I3*0.7+G15*0.1+G27*0.2\"\n\"I6*0.7+G18*0.1+G35*0.2\"\n\"I9*0.7+G21*0.1+G31*0.2\"\n\"SUM(F3:I3)\"\n\"MAX(B9:B198)\"\n\"AVERAGE(B9:B198)\"\n\"MIN(B9:B198)\"\n\"SUM(B9:E9)/$F$4*100\"\n\"G9+10\"\n\"AVERAGE(G9:H9)\"\n\"(F9/100*$F$3+G9/$G$4*$G$3+H9/$H$4*$H$3+I9/$I$4*$I$3)/$J$3*100\"\n\"IF(J9>$L$4,\"\"A\"\",IF(J9>$L$5,\"\"B\"\",IF(J9>$L$6,\"\"C\"\",IF(J9>$L$7,\"\"D\"\",\"\"F\"\"))))\"\n\"SUM(I3:N3)\"\n\"SUM(B4:H4)\"\n\"MAX(B9:B89)\"\n\"AVERAGE(B9:B89)\"\n\"MIN(B9:B89)\"\n\"SUM(B9:H9)/$I$4*100\"\n\"(I9/100*$I$3+J9/$J$4*$J$3+K9/$K$4*$K$3+L9/$L$4*$L$3+M9/$M$4*$M$3+N9/$N$4*$N$3)/$P$3*100 + O9\"\n\"IF(P9>$R$4,\"\"A\"\",IF(P9>$R$5,\"\"B\"\",IF(P9>$R$6,\"\"C\"\",IF(P9>$R$7,\"\"D\"\",\"\"F\"\"))))\"\n\"SUM(B4:G4)\"\n\"SUM(J4:N4)\"\n\"H4+O4\"\n\"SUM(J5:M5)\"\n\"C16+E16+G16+I16+K16+M16\"\n\"SUM(O16:P16)\"\n\"SUM(C17:C32)\"\n\"COUNTIF(G24:G1030,\"\"=X\"\")\"\n\"SUM(B3:F3)-MIN(B3:F3)\"\n\"AVERAGE(B3:B16)\"\n\"STDEV(B3:B16)\"\n\"SUM(B3:F3)-MIN(B3:F3)\"\n\"AVERAGE(B3:B16)\"\n\"STDEV(B3:B16)\"\n\"+FREQUENCY(A1:A24,D3:D12)\"\n\"+E3\"\n\"+E3/23\"\n\"+F3+E4\"\n\"+AVERAGE(A1:A23)\"\n\"+MEDIAN(A1:A23)\"\n\"F4/$F$24*100\"\n\"H4/$H$24*100\"\n\"J4/$J$24*100\"\n\"L4/$L$24*100\"\n\"N4/$N$24*100\"\n\"R4/$R$24*100\"\n\"T4/$T$24*100\"\n\"P5/$P$24*100\"\n\"SUM(F4:F23)\"\n\"SUM(F25:F31)\"\n\"SUM(F4:F32) - (F24 + F32)\"\n\"SUM(F33:F34)\"\n\"F39/$F$59*100\"\n\"H39/$H$59*100\"\n\"J39/$J$59*100\"\n\"L39/$L$59*100\"\n\"N39/$N$59*100\"\n\"R39/$R$59*100\"\n\"T39/$T$59*100\"\n\"P40/$P$59*100\"\n\"MAX(M20:M50)\"\n\"SUM(N20:W20)\"\n\"IF($A20=$A$10,IF(B20=B$10,$L$10,0),0)\"\n\"'Grade A'!A10\"\n\"MAX(M20:M165)\"\n\"SUM(N20:W20)\"\n\"IF($A20=$A$11,IF(B20=B$11,$L$11,0),0)\"\n\"'Grade A'!A10\"\n\"MAX(M20:M165)\"\n\"SUM(N20:W20)\"\n\"IF($A20=$A$12,IF(B20=B$12,$L$12,0),0)\"\n\"'Grade A'!A10\"\n\"MAX(M20:M165)\"\n\"SUM(N20:W20)\"\n\"IF($A20=$A$13,IF(B20=B$13,$L$13,0),0)\"\n\"'Grade A'!L18\"\n\"MAX(M20:M165)\"\n\"'Grade A'!M20+'Grade B'!M20+'Grade C'!M20+'Grade D'!M20\"\n\"SUM(D3:D4)\"\n\"D9\"\n\"Sheet2!A19\"\n\"D28-D29\"\n\"SUM(E4:E10)+SUM(D11:D23)+SUM(D24:D27)+(E29*10)+D30\"\n\"Sheet2!E12+30\"\n\"(D32/D33)*100\"\n\"COUNTA(Grades!D3,Grades!D5,Grades!D7,Grades!D9,Grades!D10)\"\n\"B2*C2\"\n\"D2\"\n\"COUNTA(Grades!D11,Grades!D12,Grades!D13,Grades!D14,Grades!D15,Grades!D16,Grades!D17,Grades!D18,Grades!D19,Grades!D20,Grades!D21,Grades!D22,Grades!D23)\"\n\"COUNTA(Grades!D24,Grades!D25,Grades!D26)\"\n\"COUNTA(Grades!D27)\"\n\"COUNTA(Grades!D28)\"\n\"SUM(D2:D8)\"\n\"A19\"\n\"B11*C11\"\n\"SUM(E2:E11)\"\n\"N(TODAY())\"\n\"IF(A18>37190,3,IF(A18>37155,2,1))\"\n\"C6*D6\"\n\"SUM(E6:E89)\"\n\"E91+E92+E93\"\n\"SUM(B7:I7)\"\n\"SUM(B7:B46)\"\n\"SUM(B47:B48)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"SUM(B7:I7)\"\n\"SUM(B7:B46)\"\n\"SUM(B47:B48)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"SUM(B7:I7)\"\n\"SUM(B7:B46)\"\n\"SUM(B47:B48)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"SUM(E49:G49)\"\n\"+C9+D9\"\n\"+F9+I9\"\n\"SUM(F10:F13)\"\n\"IF((+G12+J12)=0, \"\"     -\"\",G12+J12)\"\n\"IF((+F12+G12)=0,\"\"     - \"\",F12+G12)\"\n\"+F20+F15+F10\"\n\"IF((+F22+F17+F12)=0,\"\"    -\"\",+F22+F17+F12)\"\n\"IF(SUM(F39:F40)=0,\"\"-\"\",SUM(F39:F40))\"\n\"SUM(I39:I40)\"\n\"IF((+E42+E39)=0,\"\"-\"\",(+E42+E39))\"\n\"+H42+H39\"\n\"+G56+G61+G66\"\n\"+H57+H62+H68\"\n\"IF((+C58+C63+C68)=0,\"\"     - \"\",C58+C63+C68)\"\n\"C4*F4\"\n\"H4\"\n\"PRODUCT(C10*F10)\"\n\"SUM(H10:H13)\"\n\"SUM(H16:H22)\"\n\"SUM(H25:H25)\"\n\"SUM(H28:H30)\"\n\"SUM(H33:H34)\"\n\"SUM(H37:H42)\"\n\"SUM(H8+H14+H23+H26+H31+H35+H43)\"\n\"H44*0.08\"\n\"+L9+O9+R9+U9+X9\"\n\"+IF(G9>0,100*H9/G9,0)\"\n\"+N9+Q9+T9+W9+Z9\"\n\"+IF(G9>0,100*J9/G9,0)\"\n\"+SUM(F9:F114)\"\n\"('Daily Work'!AE12/81)*100\"\n\"Attendance!AE12\"\n\"(E12*0.1)+(G12*0.2)+(H12*0.2)+(I12*0.1)+(J12*0.2)+(K12*0.2)\"\n\"VLOOKUP(M12,grades,2)\"\n\"Data_Entry!C5\"\n\"SUM(D12:AD12)\"\n\"Data_Entry!C5\"\n\"IF(Attendance!G12=0,0,1)\"\n\"SUM(D12:AD12)\"\n\"Data_Entry!C5\"\n\"Data_Entry!B11\"\n\"Data_Entry!G11\"\n\"Data_Entry!B5\"\n\"\"\"Academic Calendar and Periods of Employment for Summer, Academic, and Annual Faculty\"\"\"\n\"CHOOSE(MOD(D17,7)+2,\"\"Sat.\"\",\"\"Sun.\"\",\"\"Mon.\"\",\"\"Tue.\"\",\"\"Wed.\"\",\"\"Thu.\"\",\"\"Fri.\"\")\"\n\"C17+1\"\n\"DATEVALUE(F17+1)\"\n\"DATEVALUE(F17+14)\"\n\"H17+14\"\n\"H23+14-2\"\n\"H24+14+2\"\n\"C26+(9.75-C26)\"\n\"DATEVALUE($K$9)\"\n\"DATEVALUE($K$10)\"\n\"F29+8\"\n\"+C37+1\"\n\"+C38+0.3\"\n\"DATEVALUE($K$7)\"\n\"CHOOSE(MOD(F39,7)+1,\"\"Sat.\"\",\"\"Sun.\"\",\"\"Mon.\"\",\"\"Tue.\"\",\"\"Wed.\"\",\"\"Thu.\"\",\"\"Fri.\"\")\"\n\"C27+C39+C50+C55\"\n\"DATEVALUE($K$8)\"\n\"H17\"\n\"H55\"\n\"DATEVALUE($K$11)\"\n\"+C49+0.6\"\n\"DATEVALUE($K$12)\"\n\"DATEVALUE($K$13)\"\n\"IF(P267<=Q266,Q266,Q266+14)\"\n\"R266+0.1\"\n\"B11/52.167/37\"\n\"B11/3\"\n\"C11*(52.167/46)\"\n\"J11*1.04\"\n\"G11-J11\"\n\"J11+500\"\n\"A11/3\"\n\"H11/900\"\n\"H11/800\"\n\"A11*1.04\"\n\"A11/1400\"\n\"#REF!/900\"\n\"B10/3\"\n\"F10*1.04\"\n\"D8*0.75\"\n\"G8/3\"\n\"I8*0.75\"\n\"L8*1.033\"\n\"D8+((D11-D8)/3)\"\n\"D8+(((D11-D8)/3)*2)\"\n\"(I8+I11)/2\"\n\"'Support(SFTF) Dec02'!B11\"\n\"B11/52.167/37\"\n\"(F7-B7)/B7\"\n\"(247768-227648)/227648\"\n\"(343535-303251)/343535\"\n\"(172392-154583)/154583\"\n\"(205914-188231)/188231\"\n\"E7-C7\"\n\"F7\"\n\"F8+G7\"\n\"SUM(B10:E10)\"\n\"F10-H10\"\n\"SUM(B10:B13)\"\n\"SUM(B24,B17,B10)\"\n\"SUM(B10:E10)\"\n\"F10-H10\"\n\"SUM(B10:B13)\"\n\"SUM(B17,B24,B10)\"\n\"SUM(F24,F17,F10)\"\n\"SUM(B10:E10)\"\n\"F10-H10\"\n\"SUM(B10:B13)\"\n\"SUM(B24,B17,B10)\"\n\"SUM(C10,C17,C24)\"\n\"SUM(D5:D48)\"\n\"SUM(E97:E139)\"\n\"(F5-$F$36)\"\n\"AVERAGE(F5:F35)\"\n\"STDEV(F5:F36)\"\n\"MIN(F5:F35)\"\n\"MAX(F5:F35)\"\n\"100/88\"\n\"(F5-$F$36)\"\n\"(H5-$H$36)\"\n\"INT(H5*(100/$H$39))\"\n\"(J5-$J$36)\"\n\"AVERAGE(F5:F35)\"\n\"STDEV(F5:F36)\"\n\"MIN(F5:F35)\"\n\"MAX(F5:F35)\"\n\"ROUND(SUM(B2:O2)/350*100,0)\"\n\"AVERAGE(N2:N153)\"\n\"ROUND(SUM(B2:O2)/350*100,0)\"\n\"+38*2\"\n\"+D6+E6\"\n\"IF((D6+E6-100)>0,(D6+E6-100),0)\"\n\"SUM(B6:E6)\"\n\"+H6/3\"\n\"+41*2\"\n\"+39*2\"\n\"+29*2\"\n\"+43*2\"\n\"+37*2\"\n\"+28*2\"\n\"+34*2\"\n\"+25*2\"\n\"+33*2\"\n\"+20*2\"\n\"+31*2\"\n\"+44*2\"\n\"+24*2\"\n\"+30*2\"\n\"+17*2\"\n\"+26*2\"\n\"+19*2\"\n\"+18*2\"\n\"+27*2\"\n\"+21*2\"\n\"P8+L8+J8+H8+F8+D8+B8\"\n\"(B$8*B10)/100\"\n\"IF((C10+E10+G10+I10+K10+M10)=0,\"\"blank\"\",(C10+E10+G10+I10+K10+M10))\"\n\"IF(N10=\"\"blank\"\",\"\"blank\"\",(N10-N$33))\"\n\"IF(O10=\"\"blank\"\",\"\"blank\"\",(B$33*(O10/P$8)))\"\n\"IF(N10=\"\"blank\"\",\"\"blank\"\",SUM(T10:AM10))\"\n\"IF(N10=\"\"blank\"\",\"\"blank\"\",(P10+AO10))\"\n\"IF(AQ10=\"\"blank\"\",\"\"blank\"\",AR10-AQ10)\"\n\"IF(AS10=AS$33,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B35<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(N10:N29)\"\n\"MIN(B10:B29)\"\n\"P4+L4+J4+H4+F4+D4+B4\"\n\"(B$4*B6)/100\"\n\"IF((C6+E6+G6+I6+K6+M6)=0,\"\"blank\"\",(C6+E6+G6+I6+K6+M6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(N6-N$19))\"\n\"IF(O6=\"\"blank\"\",\"\"blank\"\",(B$19*(O6/P$4)))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",SUM(T6:X6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(P6+Z6))\"\n\"IF(AB6=\"\"blank\"\",\"\"blank\"\",AC6-AB6)\"\n\"IF(AD6=AD$19,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B21<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(N6:N15)\"\n\"MIN(B6:B15)\"\n\"P4+L4+J4+H4+F4+D4+B4\"\n\"(B$4*B6)/100\"\n\"IF((C6+E6+G6+I6+K6+M6)=0,\"\"blank\"\",(C6+E6+G6+I6+K6+M6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(N6-N$14))\"\n\"IF(O6=\"\"blank\"\",\"\"blank\"\",(B$14*(O6/P$4)))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",SUM(T6:X6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(P6+Z6))\"\n\"IF(AB6=\"\"blank\"\",\"\"blank\"\",AC6-AB6)\"\n\"IF(AD6=AD$14,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B16<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(N6:N10)\"\n\"MIN(B6:B10)\"\n\"P4+L4+J4+H4+F4+D4+B4\"\n\"(B$4*B6)/100\"\n\"IF((C6+E6+G6+I6+K6+M6)=0,\"\"blank\"\",(C6+E6+G6+I6+K6+M6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(N6-N$14))\"\n\"IF(O6=\"\"blank\"\",\"\"blank\"\",(B$14*(O6/P$4)))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",SUM(T6:X6))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",(P6+Z6))\"\n\"IF(AB6=\"\"blank\"\",\"\"blank\"\",AC6-AB6)\"\n\"IF(AD6=AD$14,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B16<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(N6:N8)\"\n\"MIN(B6:B8)\"\n\"VLOOKUP(C4,R2:S101,2,FALSE)\"\n\"VLOOKUP(E4,T2:U48,2,FALSE)\"\n\"VLOOKUP(G4,V1:W29,2,FALSE)\"\n\"VLOOKUP(I4,X1:Y67,2,FALSE)\"\n\"VLOOKUP(K4,Z1:AA36,2,FALSE)\"\n\"VLOOKUP(M4,AB1:AC51,2,FALSE)\"\n\"VLOOKUP(O4,AD3:AE32,2,FALSE)\"\n\"IF(E7=\"\"\"\",\"\"\"\",VLOOKUP(E7,'Complete Protein Listing'!#REF!,2,FALSE))\"\n\"SUM(D7:D12)\"\n\"SUM(D34,D27,D20,D13)\"\n\"IF(C39>3,\"\"YES!\"\",\"\"\"\")\"\n\"IF(C40>1,\"\"YES!\"\",\"\"\"\")\"\n\"IF(C44>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF(C45>2,\"\"YES!\"\",\"\"\"\")\"\n\"IF(C48>7,\"\"YES!\"\",\"\"\"\")\"\n\"IF(C51>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((E51+C51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((E51+C51+G51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((I51+G51+E51+C51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((K51+I51+G51+E51+C51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((M51+K51+I51+G51+E51+C51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((O51+M51+K51+I51+G51+E51+C51)>4,\"\"YES!\"\",\"\"\"\")\"\n\"IF((E52+C52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF((E52+C52+G52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF((I52+G52+E52+C52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF((K52+I52+G52+E52+C52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF((M52+K52+I52+G52+E52+C52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"IF((O52+M52+K52+I52+G52+E52+C52)>0,\"\"YES!\"\",\"\"\"\")\"\n\"(B18*4)\"\n\"(B19*3.7)\"\n\"(B20*3.3)\"\n\"(B21*3)\"\n\"(B22*2.7)\"\n\"(B23*2.3)\"\n\"(B24*2)\"\n\"(B25*1.7)\"\n\"(B26*1.3)\"\n\"(B27*1)\"\n\"(B28*0.7)\"\n\"(B29*0)\"\n\"SUM(B18:B29)\"\n\"D31/B31\"\n\"C4*F4\"\n\"H4\"\n\"PRODUCT(C10*F10)\"\n\"SUM(H10:H13)\"\n\"SUM(H16:H22)\"\n\"SUM(H25:H25)\"\n\"SUM(H28:H30)\"\n\"SUM(H33:H34)\"\n\"SUM(H37:H42)\"\n\"SUM(H5+H8+H14+H23+H26+H31+H35+H43)\"\n\"H44*0.05\"\n\"N8+J8+H8+F8+D8+B8\"\n\"(B$8*B10)/100\"\n\"IF((C10+E10+G10+I10+K10)=0,\"\"blank\"\",(C10+E10+G10+I10+K10))\"\n\"IF(L10=\"\"blank\"\",\"\"blank\"\",(L10-L$33))\"\n\"IF(M10=\"\"blank\"\",\"\"blank\"\",(B$33*(M10/N$8)))\"\n\"IF(N10=\"\"blank\"\",\"\"blank\"\",R10-N10)\"\n\"IF(S10=S$33,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B35<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(L10:L29)\"\n\"MIN(B10:B29)\"\n\"N4+J4+H4+F4+D4+B4\"\n\"(B$4*B6)/100\"\n\"IF((C6+E6+G6+I6+K6)=0,\"\"blank\"\",(C6+E6+G6+I6+K6))\"\n\"IF(L6=\"\"blank\"\",\"\"blank\"\",(L6-L$14))\"\n\"IF(M6=\"\"blank\"\",\"\"blank\"\",(B$14*(M6/N$4)))\"\n\"IF(N6=\"\"blank\"\",\"\"blank\"\",R6-N6)\"\n\"IF(S6=S$14,\"\"  <<<<< preferred tender\"\",\"\"\"\")\"\n\"IF(B16<=35,\"\"YES\"\",\"\"\"\")\"\n\"MIN(L6:L10)\"\n\"MIN(B6:B10)\"\n\"SUM(B3,C3)\"\n\"D3/55\"\n\"SUM(G3:H3)\"\n\"N3/60\"\n\"AVERAGE(E3,J3,O3)\"\n\"Q3*100\"\n\"AVERAGE(B1:B39)\"\n\"STDEV(B1:B39)\"\n\"SUM(C4:D4)\"\n\"SUM(L4,H4,E4,K4)\"\n\"(M4/199)\"\n\"MAX(M4:M136)\"\n\"MIN(M4:M136)\"\n\"SUM(B6:B45)\"\n\"SUM(B46:B47)\"\n\"B8+C8+E8\"\n\"57637+64180+6282+6995+6600+6600\"\n\"33020+4953+9900\"\n\"49770+5425+6600\"\n\"3312+361+1320\"\n\"ROUND(52000*B27,0)\"\n\"SUM(B8:B27)\"\n\"57244+6240+6600\"\n\"B44+C44\"\n\"6624+722+2640\"\n\"SUM(B35:B49)\"\n\"B28+B50+C28+C50\"\n\"B28+B50+C28+C50\"\n\"E28+E50\"\n\"D28+D50\"\n\"C58+E58\"\n\"C58-C59\"\n\"D53\"\n\"COUNT(B4:B39)\"\n\"MIN(B4:B39)\"\n\"MAX(B4:B39)\"\n\"AVERAGE(B4:B39)\"\n\"COUNTIF(List!$D$3:$D$4962,1)\"\n\"COUNTIF(List!$D$3:$D$4962,2)\"\n\"COUNTIF(List!$D$3:$D$4962,3)\"\n\"COUNTIF(List!$D$3:$D$4962,4)\"\n\"COUNTIF(List!$D$3:$D$4962,5)\"\n\"SUM(B3:F3)\"\n\"COUNTIF(List!$E$3:$E$4962,1)\"\n\"COUNTIF(List!$E$3:$E$4962,2)\"\n\"COUNTIF(List!$E$3:$E$4962,3)\"\n\"COUNTIF(List!$E$3:$E$4962,4)\"\n\"COUNTIF(List!$E$3:$E$4962,5)\"\n\"COUNTIF(List!$F$3:$F$4962,1)\"\n\"COUNTIF(List!$F$3:$F$4962,2)\"\n\"COUNTIF(List!$F$3:$F$4962,3)\"\n\"COUNTIF(List!$F$3:$F$4962,4)\"\n\"COUNTIF(List!$F$3:$F$4962,5)\"\n\"COUNTIF(List!$G$3:$G$4962,1)\"\n\"COUNTIF(List!$G$3:$G$4962,2)\"\n\"COUNTIF(List!$G$3:$G$4962,3)\"\n\"COUNTIF(List!$G$3:$G$4962,4)\"\n\"COUNTIF(List!$G$3:$G$4962,5)\"\n\"COUNTIF(List!$H$3:$H$4962,1)\"\n\"COUNTIF(List!$H$3:$H$4962,2)\"\n\"COUNTIF(List!$H$3:$H$4962,3)\"\n\"COUNTIF(List!$H$3:$H$4962,4)\"\n\"COUNTIF(List!$H$3:$H$4962,5)\"\n\"COUNTIF(List!$I$3:$I$4962,1)\"\n\"COUNTIF(List!$I$3:$I$4962,2)\"\n\"COUNTIF(List!$I$3:$I$4962,3)\"\n\"COUNTIF(List!$I$3:$I$4962,4)\"\n\"COUNTIF(List!$I$3:$I$4962,5)\"\n\"COUNTIF(List!$J$3:$J$4962,1)\"\n\"COUNTIF(List!$J$3:$J$4962,2)\"\n\"COUNTIF(List!$J$3:$J$4962,3)\"\n\"COUNTIF(List!$J$3:$J$4962,4)\"\n\"COUNTIF(List!$J$3:$J$4962,5)\"\n\"COUNTIF(List!$K$3:$K$4962,1)\"\n\"COUNTIF(List!$K$3:$K$4962,2)\"\n\"COUNTIF(List!$K$3:$K$4962,3)\"\n\"COUNTIF(List!$K$3:$K$4962,4)\"\n\"COUNTIF(List!$K$3:$K$4962,5)\"\n\"COUNTIF(List!$L$3:$L$4962,1)\"\n\"COUNTIF(List!$L$3:$L$4962,2)\"\n\"COUNTIF(List!$L$3:$L$4962,3)\"\n\"COUNTIF(List!$L$3:$L$4962,4)\"\n\"COUNTIF(List!$L$3:$L$4962,5)\"\n\"COUNTIF(List!$M$3:$M$4962,1)\"\n\"COUNTIF(List!$M$3:$M$4962,2)\"\n\"COUNTIF(List!$M$3:$M$4962,3)\"\n\"COUNTIF(List!$M$3:$M$4962,4)\"\n\"COUNTIF(List!$M$3:$M$4962,5)\"\n\"COUNTIF(List!$N$3:$N$4962,1)\"\n\"COUNTIF(List!$N$3:$N$4962,2)\"\n\"COUNTIF(List!$N$3:$N$4962,3)\"\n\"COUNTIF(List!$N$3:$N$4962,4)\"\n\"COUNTIF(List!$N$3:$N$4962,5)\"\n\"SUM(B3:B13)\"\n\"COUNTIF(List!$O$3:$O$4962,1)\"\n\"COUNTIF(List!$O$3:$O$4962,2)\"\n\"COUNTIF(List!$O$3:$O$4962,3)\"\n\"COUNTIF(List!$O$3:$O$4962,4)\"\n\"COUNTIF(List!$O$3:$O$4962,5)\"\n\"COUNTIF(List!$P$3:$P$4962,1)\"\n\"COUNTIF(List!$P$3:$P$4962,2)\"\n\"COUNTIF(List!$P$3:$P$4962,3)\"\n\"COUNTIF(List!$P$3:$P$4962,4)\"\n\"COUNTIF(List!$P$3:$P$4962,5)\"\n\"COUNTIF(List!$Q$3:$Q$4962,1)\"\n\"COUNTIF(List!$Q$3:$Q$4962,2)\"\n\"COUNTIF(List!$Q$3:$Q$4962,3)\"\n\"COUNTIF(List!$Q$3:$Q$4962,4)\"\n\"COUNTIF(List!$Q$3:$Q$4962,5)\"\n\"COUNTIF(List!$D$3:$D$4806,1)\"\n\"COUNTIF(List!$D$3:$D$4806,2)\"\n\"COUNTIF(List!$D$3:$D$4806,3)\"\n\"COUNTIF(List!$D$3:$D$4806,4)\"\n\"COUNTIF(List!$D$3:$D$4806,5)\"\n\"SUM(B3:F3)\"\n\"COUNTIF(List!$F$3:$F$4806,1)\"\n\"COUNTIF(List!$F$3:$F$4806,2)\"\n\"COUNTIF(List!$F$3:$F$4806,3)\"\n\"COUNTIF(List!$F$3:$F$4806,4)\"\n\"COUNTIF(List!$F$3:$F$4806,5)\"\n\"COUNTIF(List!$G$3:$G$4806,1)\"\n\"COUNTIF(List!$G$3:$G$4806,2)\"\n\"COUNTIF(List!$G$3:$G$4806,3)\"\n\"COUNTIF(List!$G$3:$G$4806,4)\"\n\"COUNTIF(List!$G$3:$G$4806,5)\"\n\"COUNTIF(List!$H$3:$H$4806,1)\"\n\"COUNTIF(List!$H$3:$H$4806,2)\"\n\"COUNTIF(List!$H$3:$H$4806,3)\"\n\"COUNTIF(List!$H$3:$H$4806,4)\"\n\"COUNTIF(List!$H$3:$H$4806,5)\"\n\"SUM(B3:B6)\"\n\"COUNTIF(List!$I$3:$I$4806,1)\"\n\"COUNTIF(List!$I$3:$I$4806,2)\"\n\"COUNTIF(List!$I$3:$I$4806,3)\"\n\"COUNTIF(List!$I$3:$I$4806,4)\"\n\"COUNTIF(List!$I$3:$I$4806,5)\"\n\"COUNTIF(List!$J$3:$J$4806,1)\"\n\"COUNTIF(List!$J$3:$J$4806,2)\"\n\"COUNTIF(List!$J$3:$J$4806,3)\"\n\"COUNTIF(List!$J$3:$J$4806,4)\"\n\"COUNTIF(List!$J$3:$J$4806,5)\"\n\"COUNTIF(List!$K$3:$K$4806,1)\"\n\"COUNTIF(List!$K$3:$K$4806,2)\"\n\"COUNTIF(List!$K$3:$K$4806,3)\"\n\"COUNTIF(List!$K$3:$K$4806,4)\"\n\"COUNTIF(List!$K$3:$K$4806,5)\"\n\"(SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q01\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q02\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q03\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q04\"\",1,0))))/(COUNTIF(List!#REF!,\"\"2Q01\"\")+COUNTIF(List!#REF!,\"\"2Q02\"\")+COUNTIF(List!#REF!,\"\"2Q03\"\")+COUNTIF(List!#REF!,\"\"2Q04\"\"))\"\n\"(SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q01\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q02\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q03\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q04\"\",1,0))))/(COUNTIF(List!#REF!,\"\"2Q01\"\")+COUNTIF(List!#REF!,\"\"2Q02\"\")+COUNTIF(List!#REF!,\"\"2Q03\"\")+COUNTIF(List!#REF!,\"\"2Q04\"\"))\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q01\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q01\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q01\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q01\"\")\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q02\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q02\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q02\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q02\"\")\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q03\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q03\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q03\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q03\"\")\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"2Q04\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q04\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"2Q04\"\",1,0)))/COUNTIF(List!#REF!,\"\"2Q04\"\")\"\n\"(SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q01\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q02\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q03\"\",1,0)))+SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q04\"\",1,0))))/(COUNTIF(List!#REF!,\"\"3Q01\"\")+COUNTIF(List!#REF!,\"\"3Q02\"\")+COUNTIF(List!#REF!,\"\"3Q03\"\")+COUNTIF(List!#REF!,\"\"3Q04\"\"))\"\n\"(SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q01\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q02\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q03\"\",1,0)))+SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q04\"\",1,0))))/(COUNTIF(List!#REF!,\"\"3Q01\"\")+COUNTIF(List!#REF!,\"\"3Q02\"\")+COUNTIF(List!#REF!,\"\"3Q03\"\")+COUNTIF(List!#REF!,\"\"3Q04\"\"))\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q01\"\",1,0)))/COUNTIF(List!#REF!,\"\"3Q01\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q01\"\",1,0)))/COUNTIF(List!#REF!,\"\"3Q01\"\")\"\n\"SUM(IF(List!#REF!=\"\"Partial\"\",IF(List!#REF!=\"\"3Q03\"\",1,0)))/COUNTIF(List!#REF!,\"\"3Q03\"\")\"\n\"SUM(IF(List!#REF!=\"\"Full\"\",IF(List!#REF!=\"\"3Q03\"\",1,0)))/COUNTIF(List!#REF!,\"\"3Q03\"\")\"\n\"COUNTIF(List!#REF!,\"\"Partial\"\")/COUNTA(List!I3:I999)\"\n\"COUNTIF(List!#REF!,\"\"Full\"\")/COUNTA(List!I3:I999)\"\n\"C3-F3\"\n\"D3-F3\"\n\"VLOOKUP(E6,GRADES,2)\"\n\"D6*F6\"\n\"SUM(D5:D32)\"\n\"SUM(G2:G32)\"\n\"G33/D33\"\n\"RANK(C7,C$7:C$40,1)\"\n\"RANK(C7,C$7:C$40)\"\n\"SUM(B2:B27)\"\n\"SUM(B2:B9)\"\n\"SUM(B2:B5)\"\n\"SUM(B2:B4)\"\n\"SUM(B2:B10)\"\n\"SUM(B2:B7)\"\n\"(B2/B8)\"\n\"(B3/B8)\"\n\"(B4/B8)\"\n\"(B5/B8)\"\n\"(B6/B8)\"\n\"(B7/B8)\"\n\"SUM(B2:B7)\"\n\"DAVIES!B5+DUBOIS!B5+GIBSON!B5+KNOX!B5+MARTIN!B5+PERRY!B5+PIKE!B5+POSEY!B5+SPENCER!B5+VANDERBURGH!B5+WARRICK!B5\"\n\"B5/$B$5*100\"\n\"D5/$D$5*100\"\n\"SUM(L11:N11)\"\n\"SUM(C2,E2)\"\n\"C2/(C2+E2)\"\n\"E2/(C2+E2)\"\n\"SUM(B2:B9)\"\n\"SUM(B32,B21,B10)\"\n\"C34/B34\"\n\"E34/B34\"\n\"8+27+50+5\"\n\"C3-H3\"\n\"105+620+3+4924+31+1677+6\"\n\"37+146+1203+250\"\n\"M3-R3+W3\"\n\"AB3/M3\"\n\"9+23+50+4\"\n\"77+466+5+3783+15+1217+3\"\n\"23+104+872+203\"\n\"6+22+35+6\"\n\"66+560+11+3669+21+1265+1\"\n\"15+128+773+158\"\n\"4+15+18+1\"\n\"33+330+1+2856+19+982+2\"\n\"12+78+558+128\"\n\"1+4+24+21+3\"\n\"32+361+3+3856+15+1300+7\"\n\"10+81+858+145\"\n\"10+38+50+5\"\n\"126+797+11+8342+38+2573+7\"\n\"43+174+1807+359\"\n\"SUM(B3:B8)\"\n\"8+10+2\"\n\"21+127+2+1922+11+914+2\"\n\"12+45+416+79\"\n\"2+8+6+4\"\n\"67+380+7+5492+50+3738+16\"\n\"30+224+1949+638\"\n\"1\"\n\"5+140+1526+4+1566+2\"\n\"3+73+358+179\"\n\"3+3+2\"\n\"65+355+1+7205+34+4924+9\"\n\"33+200+1757+516\"\n\"SUM(B10:B13)\"\n\"SUM(B9+B14)\"\n\"1042+4\"\n\"1016+1\"\n\"1379+7\"\n\"1054+6\"\n\"1302+5\"\n\"1903+11\"\n\"944+7\"\n\"4362+14\"\n\"4206+3\"\n\"13445+17\"\n\"41614\"\n\"H3+H19\"\n\"33290\"\n\"IF(ISBLANK(B4),\"\"enter Y or N\"\",IF(AND(NOT(B4=\"\"Y\"\"),NOT(B4=\"\"N\"\")),\"\"enter Y or N\"\",\"\":-):-):-)\"\"))\"\n\"IF(B6=\"\"Y\"\",1,0)\"\n\"IF(B8=\"\"Y\"\",3,0)\"\n\"IF(AND(NOT(ISBLANK(B14)),IF(NOT(ISBLANK(C14)),1,0)+IF(NOT(ISBLANK(D14)),1,0)+IF(NOT(ISBLANK(E14)),1,0)=0),\"\"Yes\"\", IF(AND(ISBLANK(B14),IF(NOT(ISBLANK(C14)),1,0)+IF(NOT(ISBLANK(D14)),1,0)+IF(NOT(ISBLANK(E14)),1,0)>=1),\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(G14=\"\"No\"\",\"\"check data\"\",IF(OR(NOT(ISBLANK(C14)),NOT(ISBLANK(D14)),NOT(ISBLANK(E14))),1,0))\"\n\"IF(G16=\"\"No\"\",\"\"check data\"\",IF(OR(NOT(ISBLANK(C16)),NOT(ISBLANK(D16)),NOT(ISBLANK(E16))),2,0))\"\n\"IF(AND(NOT(ISBLANK(B18)),IF(NOT(ISBLANK(C18)),1,0)+IF(NOT(ISBLANK(D18)),1,0)+IF(NOT(ISBLANK(E18)),1,0)+IF(NOT(ISBLANK(F18)),1,0)=0),\"\"Yes\"\", IF(AND(ISBLANK(B18),IF(NOT(ISBLANK(C18)),1,0)+IF(NOT(ISBLANK(D18)),1,0)+IF(NOT(ISBLANK(E18)),1,0)+IF(NOT(ISBLANK(F18)),1,0)>=1),\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(G18=\"\"No\"\",\"\"check data\"\",IF(OR(NOT(ISBLANK(C18)),NOT(ISBLANK(D18)),NOT(ISBLANK(E18)),NOT(ISBLANK(F18))),2,0))\"\n\"IF(G20=\"\"No\"\",\"\"check data\"\",IF(OR(NOT(ISBLANK(C20)),NOT(ISBLANK(D20)),NOT(ISBLANK(E20))),3,0))\"\n\"IF(OR(ISBLANK(B4),ISBLANK(B6),ISBLANK(B7),ISBLANK(B8),ISBLANK(B9),ISBLANK(B10),G14=\"\"No\"\",G16=\"\"No\"\",G18=\"\"No\"\",G20=\"\"No\"\",G22=\"\"No\"\"),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B25=\"\"No\"\",\"\"complete data\"\",IF(B4=\"\"Y\"\",\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(B26=\"\"No\"\",\"\" Applies to a patient with possible encephalitis.\"\",\"\" :-):-):-)\"\")\"\n\"IF(B25=\"\"No\"\",\"\"complete data\"\",IF(H14=1,\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(H14=1,\"\"grade of rhomboencephalitis\"\",\"\":-):-):-)\"\")\"\n\"IF(B25=\"\"No\"\",\"\"complete data\"\",IF(H14=1,IF(MAX(H6:H10,H16:H22)=3,\"\"III\"\",IF(MAX(H6:H10,H16:H22)=2,\"\"II\"\",IF(MAX(H6:H10,H16:H22)=1,\"\"I\"\",0))),\"\":-):-):-)\"\"))\"\n\"SUM(D7:O7)\"\n\"(P7/$P$31)*100\"\n\"AVERAGE(D7:D26)\"\n\"MAX(D7:D26)\"\n\"MIN(D7:D26)\"\n\"(D28/D31)*100\"\n\"AVERAGE(P7:P26)\"\n\"D32*0.45+E32*0.55\"\n\"D32*0.45+E32*0.55\"\n\"SUM(D7:L7)\"\n\"(M7/$M$31)*100\"\n\"AVERAGE(D7:D26)\"\n\"MAX(D7:D26)\"\n\"MIN(D7:D26)\"\n\"(D28/D31)*100\"\n\"AVERAGE(M7:M26)\"\n\"B27*IF(C27=\"\"A\"\", 4,IF(C27=\"\"A-\"\",3.67,IF(C27=\"\"B+\"\",3.33,IF(C27=\"\"B\"\",3,IF(C27=\"\"B-\"\",2.67,IF(C27=\"\"C+\"\",2.33,(IF(C27=\"\"C-\"\",1.67,IF(C27=\"\"D\"\",1, 0)))))))))\"\n\"SUM(B27:B73)\"\n\"SUM(D27:D73)\"\n\"D76/100\"\n\"GRADE(D78)\"\n\"SUM(E10:E147)\"\n\"SUM(B4:Q4)\"\n\"SUM(B4*0.7)\"\n\"\"\"5386\"\"\"\n\"(B2+C2+D2+E2+F2+S2+T2)/82\"\n\"\"\"6151\"\"\"\n\"\"\"3282\"\"\"\n\"\"\"2799\"\"\"\n\"\"\"9351\"\"\"\n\"\"\"0468\"\"\"\n\"\"\"1178\"\"\"\n\"\"\"2895\"\"\"\n\"\"\"9563\"\"\"\n\"\"\"8441\"\"\"\n\"\"\"3416\"\"\"\n\"\"\"4449\"\"\"\n\"\"\"4504\"\"\"\n\"\"\"6917\"\"\"\n\"\"\"7797\"\"\"\n\"\"\"5114\"\"\"\n\"\"\"1001\"\"\"\n\"\"\"5543\"\"\"\n\"\"\"9328\"\"\"\n\"\"\"4229\"\"\"\n\"\"\"5081\"\"\"\n\"\"\"2738\"\"\"\n\"\"\"3254\"\"\"\n\"\"\"5635\"\"\"\n\"\"\"2750\"\"\"\n\"\"\"9208\"\"\"\n\"\"\"0477\"\"\"\n\"\"\"7851\"\"\"\n\"\"\"1768\"\"\"\n\"\"\"9293\"\"\"\n\"\"\"4301\"\"\"\n\"\"\"7167\"\"\"\n\"\"\"4411\"\"\"\n\"\"\"8445\"\"\"\n\"\"\"9801\"\"\"\n\"\"\"1582\"\"\"\n\"\"\"6185\"\"\"\n\"\"\"2823\"\"\"\n\"\"\"5339\"\"\"\n\"\"\"1776\"\"\"\n\"\"\"7613\"\"\"\n\"\"\"4136\"\"\"\n\"\"\"8092\"\"\"\n\"\"\"4403\"\"\"\n\"\"\"0146\"\"\"\n\"\"\"3685\"\"\"\n\"\"\"6504\"\"\"\n\"\"\"0560\"\"\"\n\"\"\"0634\"\"\"\n\"\"\"5267\"\"\"\n\"\"\"4747\"\"\"\n\"\"\"3972\"\"\"\n\"\"\"3309\"\"\"\n\"\"\"0461\"\"\"\n\"\"\"7115\"\"\"\n\"\"\"4303\"\"\"\n\"\"\"6848\"\"\"\n\"\"\"4374\"\"\"\n\"\"\"0085\"\"\"\n\"\"\"1824\"\"\"\n\"\"\"0153\"\"\"\n\"\"\"9433\"\"\"\n\"\"\"2883\"\"\"\n\"\"\"1939\"\"\"\n\"\"\"1157\"\"\"\n\"\"\"5123\"\"\"\n\"\"\"1257\"\"\"\n\"\"\"3378\"\"\"\n\"\"\"2284\"\"\"\n\"\"\"4726\"\"\"\n\"\"\"0040\"\"\"\n\"\"\"8343\"\"\"\n\"\"\"5387\"\"\"\n\"\"\"9522\"\"\"\n\"\"\"9946\"\"\"\n\"\"\"0868\"\"\"\n\"\"\"0804\"\"\"\n\"\"\"8618\"\"\"\n\"\"\"5946\"\"\"\n\"\"\"8446\"\"\"\n\"\"\"4610\"\"\"\n\"\"\"1171\"\"\"\n\"\"\"7014\"\"\"\n\"\"\"4159\"\"\"\n\"\"\"7095\"\"\"\n\"\"\"2413\"\"\"\n\"\"\"0263\"\"\"\n\"\"\"1580\"\"\"\n\"\"\"7958\"\"\"\n\"\"\"5240\"\"\"\n\"(B2+C2+D2+E2++F2+G2+L2)/100*0.5\"\n\"(S2)/68*0.5\"\n\"(Q2+W2)\"\n\"\"\" \"\"\"\n\"\"\"2560\"\"\"\n\"\"\"7150\"\"\"\n\"\"\"7859\"\"\"\n\"\"\"6523\"\"\"\n\"\"\"5172\"\"\"\n\"\"\"9036\"\"\"\n\"\"\"2401\"\"\"\n\"\"\"5972\"\"\"\n\"\"\"4194\"\"\"\n\"\"\"9070\"\"\"\n\"\"\"4148\"\"\"\n\"\"\"4003\"\"\"\n\"\"\"8370\"\"\"\n\"\"\"3082\"\"\"\n\"\"\"8007\"\"\"\n\"\"\"8244\"\"\"\n\"\"\"4002\"\"\"\n\"\"\"1676\"\"\"\n\"\"\"9909\"\"\"\n\"\"\"5229\"\"\"\n\"\"\"5388\"\"\"\n\"\"\"7928\"\"\"\n\"\"\"4197\"\"\"\n\"\"\"8784\"\"\"\n\"\"\"6661\"\"\"\n\"\"\"2541\"\"\"\n\"\"\"0745\"\"\"\n\"\"\"4501\"\"\"\n\"\"\"2411\"\"\"\n\"\"\"5755\"\"\"\n\"\"\"4413\"\"\"\n\"\"\"2748\"\"\"\n\"\"\"9548\"\"\"\n\"\"\"8237\"\"\"\n\"\"\"4960\"\"\"\n\"\"\"3309\"\"\"\n\"\"\"6301\"\"\"\n\"\"\"7684\"\"\"\n\"\"\"9717\"\"\"\n\"\"\"6635\"\"\"\n\"\"\"5364\"\"\"\n\"\"\"8883\"\"\"\n\"\"\"5654\"\"\"\n\"\"\"4711\"\"\"\n\"\"\"6762\"\"\"\n\"\"\"3896\"\"\"\n\"\"\"D\"\"\"\n\"\"\"0145\"\"\"\n\"'Class Participation'!D22\"\n\"SUM(B3:G3)\"\n\"SUM(D2:D21)\"\n\"IF(D$10=0,0,(D10/D$10))\"\n\"E10+H10+K10+N10+Q10\"\n\"IF(F$10=0,0,21*(F10/F$10))\"\n\"IF(I$10=0,0,18*(I10/I$10))\"\n\"IF(R$10=0,0,25*(R10/R$10))\"\n\"SUM(S10:AY10)\"\n\"IF(C11>=0.9,\"\"A\"\",IF($C11>=0.86,\"\"BA\"\",IF($C11>=0.8,\"\"B\"\",IF($C11>=0.76,\"\"CB\"\",IF($C11>=0.69,\"\"C\"\",IF($C11>=0.65,\"\"DC\"\",IF($C11>=0.59,\"\"D\"\",IF($C11<0.05,\"\" -\"\",\"\"E\"\"))))))))\"\n\"AVERAGE(C11:C36)\"\n\"LOOKUP(B19,GradingScheme!$A$3:'GradingScheme'!$A$12,GradingScheme!$C$3:'GradingScheme'!$C$12)\"\n\"SUM(G14:G51)\"\n\"SUM(G61:G84)\"\n\"G53+G86+G88\"\n\"+G98-G94\"\n\"COUNTA(V2:V67)\"\n\"COUNTIF(AH2:AH67,\"\"Y\"\")\"\n\"COUNTIF(AH2:AH67,\"\"N\"\")\"\n\"COUNTIF(AH2:AH67,\"\"NA\"\")\"\n\"SUM(C5:H5)\"\n\"SUM(C5:C24)\"\n\"'Category Totals By Quarter'!I5\"\n\"SUM(D5:D24)\"\n\"SUM('Fac. Eval. Hours'!E6:E25)\"\n\"SUM(Misc!C5:C23)\"\n\"SUM('Fin. Aid'!C5:C23)\"\n\"SUM('ASI Elections'!C5:C13)\"\n\"SUM(Grades!C5:C24)\"\n\"SUM(Test!C5:C24)\"\n\"SUM(ASQ!C5:C24)\"\n\"SUM(C5:C26)\"\n\"SUM(D5:D26)\"\n\"SUM(C5:D26)\"\n\"SUM(C5:C24)\"\n\"SUM(C5:C24)\"\n\"SUM(C5:C23)\"\n\"SUM(C5:C23)\"\n\"SUM(C5:C23)\"\n\"SUM(C5:C24)\"\n\"SUM(C6:D6)\"\n\"SUM(B7:B313)\"\n\"D317/B317\"\n\"46876/I317\"\n\"45851/K317\"\n\"47598/M317\"\n\"35716/O317\"\n\"6205/Q317\"\n\"SUM(C7:C313)\"\n\"E317/$C317\"\n\"B5-C5\"\n\"209+68\"\n\"52837+22849\"\n\"1214+396\"\n\"18679+7417\"\n\"22+5\"\n\"7170+1517\"\n\"166+23\"\n\"4137+549\"\n\"19+10\"\n\"7313+6269\"\n\"137+47\"\n\"2179+1611\"\n\"157+46\"\n\"35904+8290\"\n\"880+260\"\n\"11390+3397\"\n\"11+7\"\n\"2450+6773\"\n\"31+66\"\n\"973+1860\"\n\"SUM(B7:B21)\"\n\"C5+D5\"\n\"B11-D11\"\n\"SUM(B8:G8)\"\n\"SUM(B26:H26)\"\n\"C12+C14+C15\"\n\"D18*G18\"\n\"SUM(H18:H19)\"\n\"A25*C25*E25\"\n\"H20+H25\"\n\"H28-H29\"\n\"SUM(C4:U4)\"\n\"SUM(C8+D8+E8+G8)\"\n\"IF(F37>16,\"\"35\"\",IF(F37=16,\"\"33.25\"\",IF(F37=15,\"\"31.5\"\",IF(F37=14,\"\"29.75\"\",IF(F37=13,\"\"28\"\",\"\"0\"\")))))\"\n\"SUM(C4:U4)\"\n\"SUM(C8+D8+E8+G8)\"\n\"IF(F37>16,\"\"35\"\",IF(F37=16,\"\"33.25\"\",IF(F37=15,\"\"31.5\"\",IF(F37=14,\"\"29.75\"\",IF(F37=13,\"\"28\"\",\"\"0\"\")))))\"\n\"SUM(C2+Z2)\"\n\"SUM(Q2:Y2)\"\n\"SUM(C2/D2)\"\n\"SUM(E2/E2)\"\n\"SUM(E2/D2)\"\n\"SUM(F2/D2)\"\n\"SUM(G2/D2)\"\n\"SUM(H2/D2)\"\n\"SUM(I2/D2)\"\n\"SUM(J2/D2)\"\n\"SUM(K2/D2)\"\n\"SUM(L2/D2)\"\n\"SUM(M2/D2)\"\n\"SUM(N2/D2)\"\n\"SUM(O2/D2)\"\n\"SUM(P2/D2)\"\n\"SUM(Q2/D2)\"\n\"SUM(R2/D2)\"\n\"SUM(S2/D2)\"\n\"SUM(T2/D2)\"\n\"SUM(U2/D2)\"\n\"SUM(V2/D2)\"\n\"SUM(W2/D2)\"\n\"SUM(X2/D2)\"\n\"SUM(Y2/D2)\"\n\"RIGHT(O15,4)\"\n\"VLOOKUP(WEEKDAY(G2)-1,Thedays,2)\"\n\"F2+4\"\n\"H2+3\"\n\"I2+2\"\n\"RIGHT(E3,5)\"\n\"RolesFor1704!A3 & \"\",\"\" & RolesFor1704!B3 & \"\" \"\" & RolesFor1704!C3\"\n\"RolesFor1704!D3\"\n\"RolesFor1704!F3\"\n\"IF(E2+F2>100,100,E2+F2)\"\n\"SUM(G2:U2)\"\n\"IF(V2/$AA$2>1,1,(V2)/($AA$2))\"\n\"VLOOKUP(W2,$AB$2:$AC$6,2)\"\n\"(V2+2*E2)/(MAX($V$2:$V$25)+165)\"\n\"IF(SUM(J2:X2)>22090,\"\"A\"\",VLOOKUP(Y2,$AB$2:$AC$6,2))\"\n\"SUM(E3:T3)\"\n\"IF(SUM(J9:X9)<100,\"\"A\"\",VLOOKUP(Y9,$AB$2:$AC$6,2))\"\n\"IF(SUM(J18:X18)>490,\"\"A\"\",VLOOKUP(Y18,$AB$2:$AC$6,2))\"\n\"VLOOKUP(WEEKDAY(H2)-1,Thedays,2)\"\n\"G2+2\"\n\"G2+4\"\n\"I2+3\"\n\"RIGHT(E3,5)\"\n\"Rolesfor1719!A3 & \"\",\"\" & Rolesfor1719!B3 & \"\" \"\" & Rolesfor1719!C3\"\n\"Rolesfor1719!D3\"\n\"Rolesfor1719!F3\"\n\"Rolesfor1719!A13&\"\", \"\"&Rolesfor1719!B13\"\n\"Rolesfor1719!A6 & \"\",\"\" & Rolesfor1719!B6 & \"\" \"\" & Rolesfor1719!C6\"\n\"Rolesfor1719!D6\"\n\"Rolesfor1719!F6\"\n\"Rolesfor1719!A27 & \"\",\"\" & Rolesfor1719!B27 & \"\" \"\" & Rolesfor1719!C27\"\n\"Rolesfor1719!F27\"\n\"VLOOKUP(WEEKDAY(G2)-1,Thedays,2)\"\n\"F2+2\"\n\"F2+4\"\n\"H2+3\"\n\"RIGHT(E3,5)\"\n\"RolesFor1713!A3 & \"\",\"\" & RolesFor1713!B3 & \"\" \"\" & RolesFor1713!C3\"\n\"RolesFor1713!D3\"\n\"RolesFor1713!F3\"\n\"IF(SUM(E2:J2)/500>1,1,SUM(E2:J2)/500)\"\n\"VLOOKUP(K4,$N$2:$O$6,2)\"\n\"RolesFor1713!A14 & \"\",\"\" & RolesFor1713!B14 & \"\" \"\" & RolesFor1713!C14\"\n\"RolesFor1713!D14\"\n\"RolesFor1713!F14\"\n\"SUM($F$2:$X$2)\"\n\"SUM(G4:AE4)\"\n\"D4/E4\"\n\"SUM(D4:D26)/22\"\n\"SUM(N34:N57)\"\n\"SUM(D34:D58)/24\"\n\"SUM(F34:F58)/21\"\n\"LARGE($B4:$D4,COLUMN()-1)\"\n\"LARGE($B4:$H4,COLUMN()-1)\"\n\"ROUND(SUM(B6:C6)*0.25,1)\"\n\"ROUND(SUM(B11:C11),1)\"\n\"ROUND(B16*0.4,1)\"\n\"VLOOKUP(D20,$G$21:$H$33,2)\"\n\"D8+D13+D18\"\n\"C9*D9\"\n\"E9/F9\"\n\"B9*G9\"\n\"SUM(H9:H12)\"\n\"H13*H14\"\n\"SUM(H17:H22)\"\n\"SUM(H27:H41)\"\n\"SUM(H42,H23,H15)\"\n\"H44/B4\"\n\"H47*B4\"\n\"(H48*H49)\"\n\"(H48*H49)\"\n\"\"\"   1993\"\"\"\n\"\"\"   2000\"\"\"\n\"\"\"1000's\"\"\"\n\"C14*B14\"\n\"B70*4\"\n\"(D69+D70)*0.2\"\n\"B72*2\"\n\"D72*0.2\"\n\"B75*12\"\n\"((SUM(D14:D84)))\"\n\"IF(B94=0,0,(IF(B94>5,(1500+((B94-5)*200)),1500)))\"\n\"B97*1\"\n\"D97*0.2\"\n\"(D99+D100+D101+D102)*0.2\"\n\"SUM(D93:D104)\"\n\"D105+D85\"\n\"B6\"\n\"SUM(B2:N2)\"\n\"O2/182\"\n\"SUM('Hewitt Elementary 0370'!N15)\"\n\"SUM('Hewitt Middle 0380'!N15)\"\n\"SUM('Hewitt Junior 0390'!N15)\"\n\"SUM('Hewitt-Trussville High'!N15)\"\n\"SUM(B2:B6)\"\n\"SUM('Hewitt Elementary 0370'!B2)\"\n\"SUM('Payne Elementary 0370'!P2)\"\n\"SUM('Hewitt Middle 0380'!B7)\"\n\"SUM('Hewitt Junior 0390'!P8)\"\n\"SUM('Hewitt-Trussville High'!P11)\"\n\"SUM(B2:B14)\"\n\"SUM(C15-B15)\"\n\"SUM(B20*$Q$1)\"\n\"SUM(B2:B14)\"\n\"SUM(L2:L8)\"\n\"SUM(C15-B15)\"\n\"SUM(N20)*1.02\"\n\"SUM(N20)*1.02\"\n\"SUM(P20*$U$1)\"\n\"SUM(P2:P8)\"\n\"SUM(P15-O15)\"\n\"SUM(P20*1.02)\"\n\"SUM(P20*1.02)\"\n\"SUM(B20*$P$1)\"\n\"SUM(B2:B14)\"\n\"SUM(K7:K11)\"\n\"SUM(C15-B15)\"\n\"SUM(N20*1.02)\"\n\"SUM(P20*$U$1)\"\n\"SUM(B2:B14)\"\n\"SUM(K7:K11)\"\n\"SUM(C15-B15)\"\n\"SUM(P20*1.02)\"\n\"SUM(P20*$U$1)\"\n\"SUM(B2:B14)\"\n\"SUM(C15-B15)\"\n\"SUM(P20*1.02)\"\n\"SUM('Hewitt Elementary 0370'!B2)\"\n\"SUM('Payne Elementary 0370'!P2)\"\n\"SUM('Hewitt Middle 0380'!B7)\"\n\"SUM(B2:B7)\"\n\"SUM(C8-B8)\"\n\"SUM('Hewitt Middle 0380'!B8)\"\n\"SUM('Hewitt Junior 0390'!P8)\"\n\"SUM(B2:B4)\"\n\"SUM(C5-B5)\"\n\"SUM('Hewitt Junior 0390'!B11)\"\n\"SUM('Hewitt-Trussville High'!P11)\"\n\"SUM(B2:B5)\"\n\"SUM(C6-B6)\"\n\"COUNTIF($R$2:$R$48,T1)\"\n\"SUM(L2:M2)/2\"\n\"(((SUM(C2:K2)+(N2+O2)))/290)*100\"\n\"IF(Q2>=$U$1,$T$1,IF(Q2>=$U$2,$T$2,IF(Q2>=$U$3,$T$3,IF(Q2>=$U$4,$T$4,IF(Q2>=$U$5,$T$5,IF(Q2>=$U$6,$T$6,IF(Q2>=$U$7,$T$7)))))))\"\n\"B7+G7+L7\"\n\"SUM(B7:B11)\"\n\"B7/B$12\"\n\"(B7+B8)/B12\"\n\"B32/B34\"\n\"B33/B34\"\n\"SUM(C3:E19)\"\n\"SUM(C3:J19)\"\n\"SUM(E21/J22)\"\n\"SUM(B5:D5)\"\n\"+B25+D25+F25\"\n\"- Intelligenztest für Kinder und $K55:$AE55\"\n\"- Intelligenztest für Jugendliche und Erw.\"\n\"- Schultest\"\n\"- spez. Funktionsprüfungs- und Eignungstest\"\n\"- Interessentest\"\n\"- Allg.Leistungs- und Fähigkeitstest\"\n\"- Intelligenztest für Kinder und $K55:$AE55\"\n\"- Formdeuteverfahren\"\n\"- mehrdimensionaler Persönlichkeits-Test\"\n\"- Intelligenztest für Kinder und J$72:J$72\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- eindimensionaler Persönlichkeits-Test\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Einstellungstest\"\n\"- klinischer Test\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Entwicklungstest\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K55:$AE55 und Erw.\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für Kinder\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- verbal-thematisches Verfahren\"\n\"- zeichnerisches Gestaltungsverfahren\"\n\"- spielerisches Gestaltungsverfahren\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Interessenstest\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für Kinder und J$81:J$81\"\n\"- Intelligenztest für $K94:$AE94\"\n\"- Intelligenztest für Kinder und Jugendliche\"\n\"- Lerntest\"\n\"- Intelligenztest für Kinder und $K55:$AE55\"\n\"- spezieller Funktions- und Eignungstest\"\n\"- Intelligenztest für Kinder und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für J$69:J$70 und Erw.\"\n\"- Intelligenztest für $K94:$AE94\"\n\"- Intelligenztest für $K94:$AE94\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"- Intelligenztest für $K143:$AE143 und $K55:$AE55\"\n\"SUM(H3:I3)\"\n\"SUM(B3:B18)\"\n\"(B19/J19)*100\"\n\"(C19/J19)*100\"\n\"(D19/J19)*100\"\n\"(E19/J19)*100\"\n\"(F19/J19)*100\"\n\"(G19/J19)*100\"\n\"(H19/J19)*100\"\n\"(I19/J19)*100\"\n\"(J19/J19)*100\"\n\"SUM(B5:G5)\"\n\"(H5/I5)*100\"\n\"SUM(B5:B20)\"\n\"SUM(B5:G5)\"\n\"(H5/I5)*100\"\n\"SUM(B5:B15)\"\n\"[1]AK!B5\"\n\"[1]AK!B6\"\n\"[1]AK!B7\"\n\"[1]AK!B8\"\n\"I7-E7\"\n\"[1]AL!B5\"\n\"[1]AL!B6\"\n\"[1]AL!B7\"\n\"[1]AL!B8\"\n\"[1]AR!B5\"\n\"[1]AR!B6\"\n\"[1]AR!B7\"\n\"[1]AR!B8\"\n\"[1]AZ!B5\"\n\"[1]AZ!B6\"\n\"[1]AZ!B7\"\n\"[1]AZ!B8\"\n\"[1]CA!B5\"\n\"[1]CA!B6\"\n\"[1]CA!B7\"\n\"[1]CA!B8\"\n\"[1]CO!B5\"\n\"[1]CO!B6\"\n\"[1]CO!B7\"\n\"[1]CO!B8\"\n\"[1]CT!B5\"\n\"[1]CT!B6\"\n\"[1]CT!B7\"\n\"[1]CT!B8\"\n\"[1]DE!B5\"\n\"[1]DE!B6\"\n\"[1]DE!B7\"\n\"[1]DE!B8\"\n\"[1]DC!B5\"\n\"[1]DC!B6\"\n\"[1]DC!B7\"\n\"[1]DC!B8\"\n\"[1]FL!B5\"\n\"[1]FL!B6\"\n\"[1]FL!B7\"\n\"[1]FL!B8\"\n\"[1]GA!B5\"\n\"[1]GA!B6\"\n\"[1]GA!B7\"\n\"[1]GA!B8\"\n\"[1]HI!B5\"\n\"[1]HI!B6\"\n\"[1]HI!B7\"\n\"[1]HI!B8\"\n\"[1]IA!B5\"\n\"[1]IA!B6\"\n\"[1]IA!B7\"\n\"[1]IA!B8\"\n\"[1]ID!B5\"\n\"[1]ID!B6\"\n\"[1]ID!B7\"\n\"[1]ID!B8\"\n\"[1]IL!B5\"\n\"[1]IL!B6\"\n\"[1]IL!B7\"\n\"[1]IL!B8\"\n\"[1]IN!B5\"\n\"[1]IN!B6\"\n\"[1]IN!B7\"\n\"[1]IN!B8\"\n\"[1]KS!B5\"\n\"[1]KS!B6\"\n\"[1]KS!B7\"\n\"[1]KS!B8\"\n\"[1]KY!B5\"\n\"[1]KY!B6\"\n\"[1]KY!B7\"\n\"[1]KY!B8\"\n\"[1]LA!B5\"\n\"[1]LA!B6\"\n\"[1]LA!B7\"\n\"[1]LA!B8\"\n\"[1]MA!B5\"\n\"[1]MA!B6\"\n\"[1]MA!B7\"\n\"[1]MA!B8\"\n\"[1]MD!B5\"\n\"[1]MD!B6\"\n\"[1]MD!B7\"\n\"[1]MD!B8\"\n\"[1]ME!B5\"\n\"[1]ME!B6\"\n\"[1]ME!B7\"\n\"[1]ME!B8\"\n\"[1]MI!B5\"\n\"[1]MI!B6\"\n\"[1]MI!B7\"\n\"[1]MI!B8\"\n\"[1]MN!B5\"\n\"[1]MN!B6\"\n\"[1]MN!B7\"\n\"[1]MN!B8\"\n\"[1]MO!B5\"\n\"[1]MO!B6\"\n\"[1]MO!B7\"\n\"[1]MO!B8\"\n\"[1]MS!B5\"\n\"[1]MS!B6\"\n\"[1]MS!B7\"\n\"[1]MS!B8\"\n\"[1]MT!B5\"\n\"[1]MT!B6\"\n\"[1]MT!B7\"\n\"[1]MT!B8\"\n\"[1]NC!B5\"\n\"[1]NC!B6\"\n\"[1]NC!B7\"\n\"[1]NC!B8\"\n\"[1]ND!B5\"\n\"[1]ND!B6\"\n\"[1]ND!B7\"\n\"[1]ND!B8\"\n\"[1]NE!B5\"\n\"[1]NE!B6\"\n\"[1]NE!B7\"\n\"[1]NE!B8\"\n\"[1]NH!B5\"\n\"[1]NH!B6\"\n\"[1]NH!B7\"\n\"[1]NH!B8\"\n\"[1]NJ!B5\"\n\"[1]NJ!B6\"\n\"[1]NJ!B7\"\n\"[1]NJ!B8\"\n\"[1]NM!B5\"\n\"[1]NM!B6\"\n\"[1]NM!B7\"\n\"[1]NM!B8\"\n\"[1]NV!B5\"\n\"[1]NV!B6\"\n\"[1]NV!B7\"\n\"[1]NV!B8\"\n\"[1]NY!B6\"\n\"[1]NY!B7\"\n\"[1]NY!B8\"\n\"[1]OH!B5\"\n\"[1]OH!B6\"\n\"[1]OH!B7\"\n\"[1]OH!B8\"\n\"[1]OK!B5\"\n\"[1]OK!B6\"\n\"[1]OK!B7\"\n\"[1]OK!B8\"\n\"[1]OR!B6\"\n\"[1]OR!B7\"\n\"[1]OR!B8\"\n\"[1]PA!B6\"\n\"[1]PA!B7\"\n\"[1]PA!B8\"\n\"[1]RI!B5\"\n\"[1]RI!B6\"\n\"[1]RI!B7\"\n\"[1]RI!B8\"\n\"[1]SC!B5\"\n\"[1]SC!B6\"\n\"[1]SC!B7\"\n\"[1]SC!B8\"\n\"[1]SD!B5\"\n\"[1]SD!B6\"\n\"[1]SD!B7\"\n\"[1]SD!B8\"\n\"[1]TN!B6\"\n\"[1]TN!B7\"\n\"[1]TN!B8\"\n\"[1]TX!B5\"\n\"[1]TX!B6\"\n\"[1]TX!B7\"\n\"[1]TX!B8\"\n\"[1]UT!B5\"\n\"[1]UT!B6\"\n\"[1]UT!B7\"\n\"[1]UT!B8\"\n\"[1]VA!B5\"\n\"[1]VA!B6\"\n\"[1]VA!B7\"\n\"[1]VA!B8\"\n\"[1]VT!B5\"\n\"[1]VT!B6\"\n\"[1]VT!B7\"\n\"[1]VT!B8\"\n\"[1]WA!B6\"\n\"[1]WA!B7\"\n\"[1]WA!B8\"\n\"[1]WI!B5\"\n\"[1]WI!B6\"\n\"[1]WI!B7\"\n\"[1]WI!B8\"\n\"[1]WV!B5\"\n\"[1]WV!B6\"\n\"[1]WV!B7\"\n\"[1]WV!B8\"\n\"[1]WY!B5\"\n\"[1]WY!B6\"\n\"[1]WY!B7\"\n\"[1]WY!B8\"\n\"[1]NH!B5\"\n\"[1]NH!B6\"\n\"[1]NH!B7\"\n\"[1]NH!B8\"\n\"I7-E7\"\n\"[1]AK!B5\"\n\"[1]AK!B6\"\n\"[1]AK!B7\"\n\"[1]AK!B8\"\n\"[1]VT!B5\"\n\"[1]VT!B6\"\n\"[1]VT!B7\"\n\"[1]VT!B8\"\n\"[1]ME!B5\"\n\"[1]ME!B6\"\n\"[1]ME!B7\"\n\"[1]ME!B8\"\n\"[1]PA!B6\"\n\"[1]PA!B7\"\n\"[1]PA!B8\"\n\"[1]DE!B5\"\n\"[1]DE!B6\"\n\"[1]DE!B7\"\n\"[1]DE!B8\"\n\"[1]KY!B5\"\n\"[1]KY!B6\"\n\"[1]KY!B7\"\n\"[1]KY!B8\"\n\"[1]MN!B5\"\n\"[1]MN!B6\"\n\"[1]MN!B7\"\n\"[1]MN!B8\"\n\"[1]DC!B5\"\n\"[1]DC!B6\"\n\"[1]DC!B7\"\n\"[1]DC!B8\"\n\"[1]VA!B5\"\n\"[1]VA!B6\"\n\"[1]VA!B7\"\n\"[1]VA!B8\"\n\"[1]MA!B5\"\n\"[1]MA!B6\"\n\"[1]MA!B7\"\n\"[1]MA!B8\"\n\"[1]WY!B5\"\n\"[1]WY!B6\"\n\"[1]WY!B7\"\n\"[1]WY!B8\"\n\"[1]OK!B5\"\n\"[1]OK!B6\"\n\"[1]OK!B7\"\n\"[1]OK!B8\"\n\"[1]HI!B5\"\n\"[1]HI!B6\"\n\"[1]HI!B7\"\n\"[1]HI!B8\"\n\"[1]WA!B6\"\n\"[1]WA!B7\"\n\"[1]WA!B8\"\n\"[1]CO!B5\"\n\"[1]CO!B6\"\n\"[1]CO!B7\"\n\"[1]CO!B8\"\n\"[1]WV!B5\"\n\"[1]WV!B6\"\n\"[1]WV!B7\"\n\"[1]WV!B8\"\n\"[1]MT!B5\"\n\"[1]MT!B6\"\n\"[1]MT!B7\"\n\"[1]MT!B8\"\n\"[1]NY!B6\"\n\"[1]NY!B7\"\n\"[1]NY!B8\"\n\"[1]CT!B5\"\n\"[1]CT!B6\"\n\"[1]CT!B7\"\n\"[1]CT!B8\"\n\"[1]TX!B5\"\n\"[1]TX!B6\"\n\"[1]TX!B7\"\n\"[1]TX!B8\"\n\"[1]AZ!B5\"\n\"[1]AZ!B6\"\n\"[1]AZ!B7\"\n\"[1]AZ!B8\"\n\"[1]MI!B5\"\n\"[1]MI!B6\"\n\"[1]MI!B7\"\n\"[1]MI!B8\"\n\"[1]IA!B5\"\n\"[1]IA!B6\"\n\"[1]IA!B7\"\n\"[1]IA!B8\"\n\"[1]CA!B5\"\n\"[1]CA!B6\"\n\"[1]CA!B7\"\n\"[1]CA!B8\"\n\"[1]NM!B5\"\n\"[1]NM!B6\"\n\"[1]NM!B7\"\n\"[1]NM!B8\"\n\"[1]OR!B6\"\n\"[1]OR!B7\"\n\"[1]OR!B8\"\n\"[1]WI!B5\"\n\"[1]WI!B6\"\n\"[1]WI!B7\"\n\"[1]WI!B8\"\n\"[1]SD!B5\"\n\"[1]SD!B6\"\n\"[1]SD!B7\"\n\"[1]SD!B8\"\n\"[1]RI!B5\"\n\"[1]RI!B6\"\n\"[1]RI!B7\"\n\"[1]RI!B8\"\n\"[1]NJ!B5\"\n\"[1]NJ!B6\"\n\"[1]NJ!B7\"\n\"[1]NJ!B8\"\n\"[1]MD!B5\"\n\"[1]MD!B6\"\n\"[1]MD!B7\"\n\"[1]MD!B8\"\n\"[1]ID!B5\"\n\"[1]ID!B6\"\n\"[1]ID!B7\"\n\"[1]ID!B8\"\n\"[1]IN!B5\"\n\"[1]IN!B6\"\n\"[1]IN!B7\"\n\"[1]IN!B8\"\n\"[1]FL!B5\"\n\"[1]FL!B6\"\n\"[1]FL!B7\"\n\"[1]FL!B8\"\n\"[1]MO!B5\"\n\"[1]MO!B6\"\n\"[1]MO!B7\"\n\"[1]MO!B8\"\n\"[1]ND!B5\"\n\"[1]ND!B6\"\n\"[1]ND!B7\"\n\"[1]ND!B8\"\n\"[1]NE!B5\"\n\"[1]NE!B6\"\n\"[1]NE!B7\"\n\"[1]NE!B8\"\n\"[1]IL!B5\"\n\"[1]IL!B6\"\n\"[1]IL!B7\"\n\"[1]IL!B8\"\n\"[1]KS!B5\"\n\"[1]KS!B6\"\n\"[1]KS!B7\"\n\"[1]KS!B8\"\n\"[1]GA!B5\"\n\"[1]GA!B6\"\n\"[1]GA!B7\"\n\"[1]GA!B8\"\n\"[1]OH!B5\"\n\"[1]OH!B6\"\n\"[1]OH!B7\"\n\"[1]OH!B8\"\n\"[1]AR!B5\"\n\"[1]AR!B6\"\n\"[1]AR!B7\"\n\"[1]AR!B8\"\n\"[1]NV!B5\"\n\"[1]NV!B6\"\n\"[1]NV!B7\"\n\"[1]NV!B8\"\n\"[1]NC!B5\"\n\"[1]NC!B6\"\n\"[1]NC!B7\"\n\"[1]NC!B8\"\n\"[1]UT!B5\"\n\"[1]UT!B6\"\n\"[1]UT!B7\"\n\"[1]UT!B8\"\n\"[1]TN!B6\"\n\"[1]TN!B7\"\n\"[1]TN!B8\"\n\"[1]SC!B5\"\n\"[1]SC!B6\"\n\"[1]SC!B7\"\n\"[1]SC!B8\"\n\"[1]MS!B5\"\n\"[1]MS!B6\"\n\"[1]MS!B7\"\n\"[1]MS!B8\"\n\"[1]LA!B5\"\n\"[1]LA!B6\"\n\"[1]LA!B7\"\n\"[1]LA!B8\"\n\"[1]AL!B5\"\n\"[1]AL!B6\"\n\"[1]AL!B7\"\n\"[1]AL!B8\"\n\"#REF!\"\n\"+E7+F7+G7\"\n\"B5*103.2%\"\n\"B62*103.5%\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"C32+E32+G32+I32+K32+M32+O32+Q32+S32\"\n\"SUM(C8:C31)\"\n\"E32+G32+I32+K32+M32+O32+Q32+S32+C32\"\n\"E32+G32+I32+K32+M32+O32+Q32+S32+C32\"\n\"SUM(O25*Q25)\"\n\"SUM(R25:R39)\"\n\"SUM(O26*Q26)\"\n\"SUM(R26:R40)+R95+R148+R202\"\n\"O2\"\n\"O2\"\n\"O2\"\n\"O2\"\n\"P7\"\n\"P7\"\n\"P7\"\n\"D13\"\n\"D13\"\n\"D13\"\n\"SUM(R80:R94)\"\n\"P8\"\n\"P8\"\n\"P8\"\n\"D13\"\n\"D13\"\n\"D13\"\n\"P8\"\n\"P8\"\n\"P8\"\n\"D16\"\n\"D16\"\n\"D16\"\n\"B2+142\"\n\"B3+146\"\n\"VLOOKUP(C4,Sheet2!$A1:$B107,2,FALSE)\"\n\"C3+1\"\n\"SUM(IF(C5:DA5<>\"\"\"\",1,0))\"\n\"SUM(DB5:DB10)\"\n\"SUM(DB17:DB21)\"\n\"SUM(DB43:DB46)\"\n\"SUM(DB69:DB75)\"\n\"SUM(IF(C5:C75=\"\"X\"\",1,0))\"\n\"SUM(IF(AY5:AY75<>\"\"\"\",1,0))\"\n\"SUM(C76:T76)\"\n\"SUM(U76:AF76)\"\n\"SUM(AG76:BO76)\"\n\"SUM(CH76:CV76)\"\n\"SUM(CW76:DA76)\"\n\"MAX(C76:DA76)\"\n\"MAX(DB7:DB75)\"\n\"AVERAGE(C76:DA76)\"\n\"AVERAGE(DB7:DB75)\"\n\"SUM(IF(C76:DA76=0,1,0))\"\n\"SUM(IF(DB5:DB75=0,1,0))\"\n\"COUNT(C76:DA76)\"\n\"COUNT(DB5:DB75)\"\n\"CX82*CX80/CX86\"\n\"SUM(IF('Correlation Matrix'!AG5:BO10=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!C5:T10=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!CH5:CV10=\"\"X\"\",1,0))\"\n\"SUM(C3:H3)\"\n\"I3/J3\"\n\"SUM(IF('Correlation Matrix'!AG11:BO16=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG22:BO26=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG27:BO31=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG32:BO36=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG37:BO42=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG47:BO52=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!C47:T52=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG62:BO66=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!BP62:CG68=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!AG67:BO75=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!BP69:CG75=\"\"X\"\",1,0))\"\n\"SUM(IF('Correlation Matrix'!CH69:CV75=\"\"X\"\",1,0))\"\n\"SUM(C3:C15)\"\n\"C16/C17\"\n\"D94\"\n\"D95\"\n\"F94\"\n\"F95\"\n\"G94\"\n\"H94\"\n\"I94\"\n\"J94\"\n\"K94\"\n\"D10\"\n\"1/(1+EXP(-D98))\"\n\"(D34)\"\n\"SUM($B66:$B91*D66:D91)\"\n\"SUM($C66:$C91*D66:D91)\"\n\"(H34)\"\n\"G106\"\n\"G107\"\n\"F106\"\n\"F107\"\n\"H106\"\n\"H107\"\n\"I106\"\n\"J106\"\n\"K106\"\n\"L106\"\n\"L107\"\n\"M106\"\n\"N106\"\n\"O106\"\n\"P106\"\n\"P107\"\n\"Q106\"\n\"R106\"\n\"R107\"\n\"S106\"\n\"T106\"\n\"T107\"\n\"U106\"\n\"1/(1+EXP(-D110))\"\n\"D33\"\n\"SUM($B78:$B103*D78:D103)\"\n\"SUM($C78:$C103*D78:D103)\"\n\"H33\"\n\"SUM(C78:C103*Q78:Q103)\"\n\"F77\"\n\"F78\"\n\"G77\"\n\"H77\"\n\"H78\"\n\"I77\"\n\"J77\"\n\"J78\"\n\"K77\"\n\"L77\"\n\"L78\"\n\"M77\"\n\"N77\"\n\"N78\"\n\"O77\"\n\"P77\"\n\"P78\"\n\"Q77\"\n\"R77\"\n\"S77\"\n\"S78\"\n\"T77\"\n\"U77\"\n\"U78\"\n\"V77\"\n\"W77\"\n\"X77\"\n\"X78\"\n\"Y77\"\n\"Z77\"\n\"1/(1+EXP(-D81))\"\n\"SUM($B49:$B74*D49:D74)\"\n\"SUM($C49:$C74*D49:D74)\"\n\"B11*B35*(1-B35)*100\"\n\"D11*D35*(1-D35)*100\"\n\"B19*B35*(1-B35)*100\"\n\"D19*D35*(1-D35)*100\"\n\"B24*B35*(1-B35)*100\"\n\"D24*D35*(1-D35)*100\"\n\"1/(1+EXP(-H34))\"\n\"SUM(B9:B32*D9:D32)\"\n\"D94\"\n\"D95\"\n\"F94\"\n\"F95\"\n\"G94\"\n\"H94\"\n\"I94\"\n\"J94\"\n\"K94\"\n\"D9\"\n\"D23\"\n\"D29\"\n\"D32\"\n\"1/(1+EXP(-D98))\"\n\"(D34)\"\n\"SUM($B66:$B91*D66:D91)\"\n\"SUM($C66:$C91*D66:D91)\"\n\"1/(1+EXP(-H33))\"\n\"SUM(B9:B32*D9:D32)\"\n\"G105\"\n\"G106\"\n\"F105\"\n\"F106\"\n\"H105\"\n\"H106\"\n\"I105\"\n\"J105\"\n\"K105\"\n\"L105\"\n\"L106\"\n\"M105\"\n\"N105\"\n\"O105\"\n\"P105\"\n\"P106\"\n\"Q105\"\n\"R105\"\n\"R106\"\n\"S105\"\n\"T105\"\n\"T106\"\n\"U105\"\n\"1/(1+EXP(-D109))\"\n\"D33\"\n\"SUM($B77:$B102*D77:D102)\"\n\"SUM($C77:$C102*D77:D102)\"\n\"H33\"\n\"SUM(C77:C102*Q77:Q102)\"\n\"F77\"\n\"F78\"\n\"G77\"\n\"H77\"\n\"H78\"\n\"I77\"\n\"J77\"\n\"J78\"\n\"K77\"\n\"L77\"\n\"L78\"\n\"M77\"\n\"N77\"\n\"N78\"\n\"O77\"\n\"P77\"\n\"P78\"\n\"Q77\"\n\"R77\"\n\"S77\"\n\"S78\"\n\"T77\"\n\"U77\"\n\"U78\"\n\"V77\"\n\"W77\"\n\"X77\"\n\"X78\"\n\"Y77\"\n\"Z77\"\n\"1/(1+EXP(-D81))\"\n\"SUM($B49:$B74*D49:D74)\"\n\"SUM($C49:$C74*D49:D74)\"\n\"D3*2\"\n\"+D5*2\"\n\"Exercises!AB7\"\n\"(B6*0.15)\"\n\"Compositions!R4\"\n\"(D6*0.2)\"\n\"Exams!G7\"\n\"(F6*0.3)\"\n\"PrepParticipation!M7\"\n\"(H6*0.1)\"\n\"Attendance!BB4\"\n\"SUM(J6*0.05)\"\n\"(C6+E6+G6+I6+K6)\"\n\"M6*0.2\"\n\"(L6+N6)\"\n\"VLOOKUP(P6,Letters,2,TRUE)\"\n\"(L6*100)/80\"\n\"VLOOKUP(S6,Grades,2,TRUE)\"\n\"NOW()\"\n\"grades!A6\"\n\"AVERAGE(C7:AA7)\"\n\"grades!A6\"\n\"AVERAGE(F4:I4)\"\n\"(J4+P4)/2\"\n\"NOW()\"\n\"grades!A6\"\n\"AVERAGE(C7:F7)\"\n\"grades!A6\"\n\"SUM(C4:AZ4)\"\n\"VLOOKUP(BA4,abscence,2,TRUE)\"\n\"NOW()\"\n\"grades!A6\"\n\"AVERAGE(C7:L7)\"\n\"List!U1\"\n\"COUNTIF(List!$D$3:$Q$1256,1)\"\n\"COUNTIF(List!$D$3:$Q$1256,2)\"\n\"COUNTIF(List!$D$3:$Q$1256,3)\"\n\"COUNTIF(List!$D$3:$Q$1256,4)\"\n\"COUNTIF(List!$D$3:$Q$1256,5)\"\n\"SUM(B3:F3)\"\n\"COUNTIF(List!$R$3:$R$1256,1)\"\n\"COUNTIF(List!$R$3:$R$1256,2)\"\n\"COUNTIF(List!$R$3:$R$1256,3)\"\n\"COUNTIF(List!$R$3:$R$1256,4)\"\n\"COUNTIF(List!$R$3:$R$1256,5)\"\n\"COUNTIF(List!$S$3:$S$1256,1)\"\n\"COUNTIF(List!$S$3:$S$1256,2)\"\n\"COUNTIF(List!$S$3:$S$1256,3)\"\n\"COUNTIF(List!$S$3:$S$1256,4)\"\n\"COUNTIF(List!$S$3:$S$1256,5)\"\n\"COUNTIF(List!$T$3:$T$1256,1)\"\n\"COUNTIF(List!$T$3:$T$1256,2)\"\n\"COUNTIF(List!$T$3:$T$1256,3)\"\n\"COUNTIF(List!$T$3:$T$1256,4)\"\n\"COUNTIF(List!$T$3:$T$1256,5)\"\n\"COUNTIF(List!$U$3:$U$1256,1)\"\n\"COUNTIF(List!$U$3:$U$1256,2)\"\n\"COUNTIF(List!$U$3:$U$1256,3)\"\n\"COUNTIF(List!$U$3:$U$1256,4)\"\n\"COUNTIF(List!$U$3:$U$1256,5)\"\n\"SUM(Z9,AD9,AH9)\"\n\"C9-(AE9+AF9+AG9)\"\n\"IF(F9>0,F9/$AD9,\"\"      -\"\")\"\n\"Z9/(AD9+Z9)\"\n\"SUM(F9,H9,J9,L9,N9,P9,R9,T9,V9,X9)\"\n\"SUM(AE11:AG11)\"\n\"SUM(C9:C19)\"\n\"SUM(Z9,AD9,AH9)\"\n\"C9-(AE9+AF9+AG9)\"\n\"IF(F9>0,F9/$AD9,\"\"      -\"\")\"\n\"Z9/(AD9+Z9)\"\n\"SUM(F9,H9,J9,L9,N9,P9,R9,T9,V9,X9)\"\n\"SUM(AE9:AG9)\"\n\"SUM(C9:C19)\"\n\"SUM(E8:R8)\"\n\"SUM(C13:H13)\"\n\"SUM(Q13:S13)\"\n\"K18+E23\"\n\"SUM(E43:H43)\"\n\"C18\"\n\"E23\"\n\"E43\"\n\"M33\"\n\"SUM(K46:K53)\"\n\"C4/B4\"\n\"SUM(B4:B11)\"\n\"C12+C14+C15\"\n\"D18*G18\"\n\"G20\"\n\"SUM(H18+H19-H20)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"Reading!D2\"\n\"Vocabulary!D2\"\n\"Writing!D2\"\n\"D2*0.3+E2*0.2+F2*0.5\"\n\"H2*0.4+G2*0.4+I2*0.2\"\n\"AVERAGE(D3:D7)\"\n\"MAX(D3:D7)\"\n\"MIN(D3:D7)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"AVERAGE(F2:J2)\"\n\"SUM(F2:J2)\"\n\"Reading!D2\"\n\"Vocabulary!D2\"\n\"Writing!D2\"\n\"D2*0.3+E2*0.2+F2*0.5\"\n\"H2*0.4+G2*0.4+I2*0.2\"\n\"AVERAGE(D3:D7)\"\n\"MAX(D3:D7)\"\n\"MIN(D3:D7)\"\n\"AVERAGE(C20/C21)\"\n\"SUM(C34+C36+C38+C40)\"\n\"Sheet2!$D$25\"\n\"Sheet2!$E$25\"\n\"Sheet3!$C$29\"\n\"Sheet3!$D$29\"\n\"Sheet4!$F$7\"\n\"Sheet4!$F$8\"\n\"SUM(D9:D24)\"\n\"SUM(C8:C28)\"\n\"SUM(B7:E7)\"\n\"C2*D2\"\n\"AVERAGE(C2:C3)\"\n\"AVERAGE(C4:C13)\"\n\"SUM(E2:E15)\"\n\"B2*C2\"\n\"SUM(D2:D6)\"\n\"' Homework'!AN8\"\n\"Quizes!M8\"\n\"$B$6*B8+$C$6*C8+$D$6*D8+$E$6*E8+$F$6*F8\"\n\"VLOOKUP(G8,$K$8:$L$19,2,TRUE)\"\n\"VLOOKUP(H8,$L$8:$M$19,2,FALSE)\"\n\"FREQUENCY($G$8:$G$71,S8:S9)\"\n\"FREQUENCY($I$8:$I$71,W8:W9)\"\n\"$B$6*B9+$C$6*C9+$D$6*D9+$E$6*E9++$F$6*F9\"\n\"FREQUENCY($I$8:$I$71,V19:V21)\"\n\"AVERAGE(I8:I49)\"\n\"SUM(X8:X19)\"\n\"SUM(T8:T44)\"\n\"MIN( B8:B71)\"\n\"AVERAGE( B8:B71)\"\n\"MAX( B8:B71)\"\n\"'Overall Grade'!A3\"\n\"'Overall Grade'!B3\"\n\"SUM(B7:AL7)-15-20\"\n\"SUM(B8:AL8)-0-12\"\n\"AM8/$AM$7\"\n\"SUM(B9:AL9)-16-11\"\n\"SUM(B10:AL10)-18-13\"\n\"SUM(B11:AL11)-11-18\"\n\"SUM(B12:AL12)-18-0\"\n\"SUM(B13:AL13)-13-18\"\n\"SUM(B14:AL14)-20-12\"\n\"SUM(B15:AL15)-17-0\"\n\"SUM(B16:AL16)\"\n\"SUM(B17:AL17)-11-19\"\n\"SUM(B18:AL18)-19\"\n\"SUM(B20:AL20)-7-18\"\n\"SUM(B21:AL21)-0-0\"\n\"SUM(B23:AL23)-7-13\"\n\"SUM(B25:AL25)-16-14\"\n\"SUM(B28:AL28)-15\"\n\"SUM(B29:AL29)-11-0\"\n\"SUM(B30:AL30)-13-14\"\n\"SUM(B31:AL31)-0-16\"\n\"SUM(B33:AL33)-17\"\n\"SUM(B35:AL35)-10-19\"\n\"SUM(B37:AL37)-7\"\n\"SUM(B38:AL38)-0-13\"\n\"SUM(B39:AL39)-13-16\"\n\"SUM(B42:AL42)-13-17\"\n\"SUM(B43:AL43)-8\"\n\"SUM(B46:AL46)-6-17\"\n\"SUM(B54:AL54)-11\"\n\"SUM(B56:AL56)-16-10\"\n\"SUM(B59:AL59)-14-19\"\n\"SUM(B60:AL60)-16\"\n\"SUM(B61:AL61)-18\"\n\"SUM(B62:AL62)-18-12\"\n\"SUM(B71:AL71)-11-14\"\n\"AVERAGE(AC8:AC71)\"\n\"'Overall Grade'!A3\"\n\"SUM(B7:I7)\"\n\"L7/$L$7\"\n\"MIN(B8:B72)\"\n\"MIN(E8:E48)\"\n\"MIN(G8:G71)\"\n\"AVERAGE(B8:B72)\"\n\"AVERAGE(E8:E48)\"\n\"AVERAGE(G8:G71)\"\n\"MAX(B8:B72)\"\n\"MAX(E8:E48)\"\n\"+L4\"\n\"+L4-N4\"\n\"AND(B14,C14)\"\n\"OR(B21,C21)\"\n\"NOT(C28)\"\n\"IF(AND(E41,F41),\"\"1\"\",\"\"0\"\")\"\n\"IF(NOT(C9),\"\"1\"\",\"\"0\"\")\"\n\"IF(OR(C15,C16),\"\"1\"\",\"\"0\"\")\"\n\"IF(AND(C22,C23),\"\"1\"\",\"\"0\"\")\"\n\"ABS(C33-C34)\"\n\"IF(AND(C9,C10,C11,C12),1,0)\"\n\"IF(G11,\"\"Unlocked\"\",\"\"Locked\"\")\"\n\"IF(AND(B19,NOT(B20),B21,NOT(B22)),1,0)\"\n\"IF(AND(B11,NOT(B12),B13,NOT(B14)),1,0)\"\n\"IF(G13,\"\"Unlocked\"\",\"\"Locked\"\")\"\n\"IF(AND(NOT(B19),B20,B21,NOT(B22)),1,0)\"\n\"IF(AND(B27,NOT(B28),B29,B30),1,0)\"\n\"IF(AND(NOT(B35),B36,NOT(B37),NOT(B38)),1,0)\"\n\"IF(AND(NOT(B43),NOT(B44),NOT(B45),NOT(B46)),1,0)\"\n\"IF(Reset=0,StartTime,IF(Time<EndTime,Time+DeltaT,EndTime))\"\n\"VLOOKUP(Time,Data!A$12:B$64,2)\"\n\"IF(VLOOKUP(Time,Data!A$12:D$64,4)=5,\"\"ON\"\",\"\"Off\"\")\"\n\"VLOOKUP(Time,Data!A$12:C$64,3)\"\n\"IF(VLOOKUP(Time,Data!A$12:E$64,5)=5,\"\"ON\"\",\"\"Off\"\")\"\n\"StartTime\"\n\"IF(A12<0,LoVolt,HiVolt)\"\n\"IF(A12<0,LoVolt,IF(INT(A12)=FLOOR(A12,2),HiVolt,LoVolt))\"\n\"5*AND(B12,C12)\"\n\"ABS(B12-C12)\"\n\"A12+DeltaT\"\n\"IF(Reset=0,\"\" \"\",IF(Time+DeltaT=A13,5*AND(B13,C13),D13))\"\n\"IF(Reset=0,\"\" \"\",IF(Time+DeltaT=A13,ABS(B13-C13),E13))\"\n\"SUM(F23:F32)\"\n\"SUM(F40:F54)\"\n\"SUM(F5:F14)\"\n\"SUM(M5:M19)\"\n\"E5\"\n\"E5\"\n\"C6\"\n\"C6\"\n\"C7\"\n\"C7\"\n\"C8\"\n\"C8\"\n\"C9\"\n\"C9\"\n\"C10\"\n\"C10\"\n\"C11\"\n\"C11\"\n\"C12\"\n\"C12\"\n\"C13\"\n\"C13\"\n\"C14\"\n\"C14\"\n\"F5\"\n\"F5\"\n\"F6\"\n\"F7\"\n\"F8\"\n\"F9\"\n\"F10\"\n\"F11\"\n\"F12\"\n\"F13\"\n\"F14\"\n\"SUM(A35:S35)\"\n\"SUM(A35:S35)\"\n\"SUM('Record Grades'!E7:E31)/$F$29\"\n\"IF(A36<>\"\"\"\",HLOOKUP(A36,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"(S36+Q36+O36+M36+K36+I36+G36+E36+C36+A36)/$F$30\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F7\"\n\"'Set-Up Your Grade Book'!F8\"\n\"'Set-Up Your Grade Book'!F9\"\n\"'Set-Up Your Grade Book'!F10\"\n\"'Set-Up Your Grade Book'!F11\"\n\"'Set-Up Your Grade Book'!F12\"\n\"'Set-Up Your Grade Book'!F13\"\n\"'Set-Up Your Grade Book'!F14\"\n\"'Record Notebook or Quiz Grades'!U7\"\n\"VLOOKUP(D6,'Set-Up Your Grade Book'!$E$38:$F$49,2,1)\"\n\" (E6*'Set-Up Your Grade Book'!$F$5)+(G6*'Set-Up Your Grade Book'!$F$6)+(I6*'Set-Up Your Grade Book'!$F$7)+(K6*'Set-Up Your Grade Book'!$F$8)+(M6*'Set-Up Your Grade Book'!$F$9)+(O6*'Set-Up Your Grade Book'!$F$10)+(Q6*'Set-Up Your Grade Book'!$F$11)+(S6*'Set-Up Your Grade Book'!$F$12)+(U6*'Set-Up Your Grade Book'!$F$13)+(W6*'Set-Up Your Grade Book'!$F$14)\"\n\"IF(X6<>\"\"\"\",HLOOKUP(X6,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Set-Up Your Grade Book'!J5\"\n\"'Set-Up Your Grade Book'!J6\"\n\"'Set-Up Your Grade Book'!J7\"\n\"'Set-Up Your Grade Book'!J8\"\n\"'Set-Up Your Grade Book'!J9\"\n\"'Set-Up Your Grade Book'!J10\"\n\"'Set-Up Your Grade Book'!J11\"\n\"'Set-Up Your Grade Book'!J12\"\n\"'Set-Up Your Grade Book'!J13\"\n\"'Set-Up Your Grade Book'!J14\"\n\"'Set-Up Your Grade Book'!J15\"\n\"'Set-Up Your Grade Book'!J16\"\n\"'Set-Up Your Grade Book'!J17\"\n\"'Set-Up Your Grade Book'!J18\"\n\"'Set-Up Your Grade Book'!J19\"\n\"'Set-Up Your Grade Book'!M5\"\n\"'Set-Up Your Grade Book'!M6\"\n\"'Set-Up Your Grade Book'!M7\"\n\"'Set-Up Your Grade Book'!M8\"\n\"'Set-Up Your Grade Book'!M9\"\n\"'Set-Up Your Grade Book'!M10\"\n\"'Set-Up Your Grade Book'!M11\"\n\"'Set-Up Your Grade Book'!M12\"\n\"'Set-Up Your Grade Book'!M13\"\n\"'Set-Up Your Grade Book'!M14\"\n\"'Set-Up Your Grade Book'!M15\"\n\"'Set-Up Your Grade Book'!M16\"\n\"'Set-Up Your Grade Book'!M17\"\n\"'Set-Up Your Grade Book'!M18\"\n\"'Set-Up Your Grade Book'!M19\"\n\"'Set-Up Your Grade Book'!M20\"\n\"SUM(D7:R7)\"\n\"S7/$S$6*4\"\n\"IF(T7<>\"\"\"\",HLOOKUP(T7,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Record Grades'!B7\"\n\"'Set-Up Your Grade Book'!F5\"\n\"SUM(F23:F32)\"\n\"SUM(F40:F54)\"\n\"SUM(F5:F14)\"\n\"SUM(M5:M19)\"\n\"E5\"\n\"E5\"\n\"C6\"\n\"C6\"\n\"C7\"\n\"C7\"\n\"C8\"\n\"C8\"\n\"C9\"\n\"C9\"\n\"C10\"\n\"C10\"\n\"C11\"\n\"C11\"\n\"C12\"\n\"C12\"\n\"C13\"\n\"C13\"\n\"C14\"\n\"C14\"\n\"F5\"\n\"F5\"\n\"F6\"\n\"F7\"\n\"F8\"\n\"F9\"\n\"F10\"\n\"F11\"\n\"F12\"\n\"F13\"\n\"F14\"\n\"SUM(A35:S35)\"\n\"SUM(A35:S35)\"\n\"SUM('Record Grades'!E7:E51)/$F$29\"\n\"IF(A36<>\"\"\"\",HLOOKUP(A36,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"(S36+Q36+O36+M36+K36+I36+G36+E36+C36+A36)/$F$30\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C6\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C7\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C8\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C9\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C10\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C11\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C12\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C13\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!C14\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F5\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F6\"\n\"'Set-Up Your Grade Book'!F7\"\n\"'Set-Up Your Grade Book'!F8\"\n\"'Set-Up Your Grade Book'!F9\"\n\"'Set-Up Your Grade Book'!F10\"\n\"'Set-Up Your Grade Book'!F11\"\n\"'Set-Up Your Grade Book'!F12\"\n\"'Set-Up Your Grade Book'!F13\"\n\"'Set-Up Your Grade Book'!F14\"\n\"'Record Notebook or Quiz Grades'!U7\"\n\"VLOOKUP(D6,'Set-Up Your Grade Book'!$E$38:$F$49,2,1)\"\n\" (E6*'Set-Up Your Grade Book'!$F$5)+(G6*'Set-Up Your Grade Book'!$F$6)+(I6*'Set-Up Your Grade Book'!$F$7)+(K6*'Set-Up Your Grade Book'!$F$8)+(M6*'Set-Up Your Grade Book'!$F$9)+(O6*'Set-Up Your Grade Book'!$F$10)+(Q6*'Set-Up Your Grade Book'!$F$11)+(S6*'Set-Up Your Grade Book'!$F$12)+(U6*'Set-Up Your Grade Book'!$F$13)+(W6*'Set-Up Your Grade Book'!$F$14)\"\n\"IF(X6<>\"\"\"\",HLOOKUP(X6,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Record Notebook or Quiz Grades'!U47\"\n\"'Set-Up Your Grade Book'!J5\"\n\"'Set-Up Your Grade Book'!J6\"\n\"'Set-Up Your Grade Book'!J7\"\n\"'Set-Up Your Grade Book'!J8\"\n\"'Set-Up Your Grade Book'!J9\"\n\"'Set-Up Your Grade Book'!J10\"\n\"'Set-Up Your Grade Book'!J11\"\n\"'Set-Up Your Grade Book'!J12\"\n\"'Set-Up Your Grade Book'!J13\"\n\"'Set-Up Your Grade Book'!J14\"\n\"'Set-Up Your Grade Book'!J15\"\n\"'Set-Up Your Grade Book'!J16\"\n\"'Set-Up Your Grade Book'!J17\"\n\"'Set-Up Your Grade Book'!J18\"\n\"'Set-Up Your Grade Book'!J19\"\n\"'Set-Up Your Grade Book'!M5\"\n\"'Set-Up Your Grade Book'!M6\"\n\"'Set-Up Your Grade Book'!M7\"\n\"'Set-Up Your Grade Book'!M8\"\n\"'Set-Up Your Grade Book'!M9\"\n\"'Set-Up Your Grade Book'!M10\"\n\"'Set-Up Your Grade Book'!M11\"\n\"'Set-Up Your Grade Book'!M12\"\n\"'Set-Up Your Grade Book'!M13\"\n\"'Set-Up Your Grade Book'!M14\"\n\"'Set-Up Your Grade Book'!M15\"\n\"'Set-Up Your Grade Book'!M16\"\n\"'Set-Up Your Grade Book'!M17\"\n\"'Set-Up Your Grade Book'!M18\"\n\"'Set-Up Your Grade Book'!M19\"\n\"'Set-Up Your Grade Book'!M20\"\n\"SUM(D7:R7)\"\n\"S7/$S$6*4\"\n\"IF(T7<>\"\"\"\",HLOOKUP(T7,'Set-Up Your Grade Book'!$B$25:$L$26,2),\"\"\"\")\"\n\"'Record Grades'!B7\"\n\"'Set-Up Your Grade Book'!F5\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F47,4,FALSE)\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F47,5,FALSE)\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F47,6,FALSE)\"\n\"LEN(TRIM('Alustage sellelt lehelt'!P6))\"\n\"LEN(TRIM('Alustage sellelt lehelt'!P7))\"\n\"111-bb\"\n\"60+bb\"\n\"400-SUM(B2:E2)\"\n\"SUM(B2:F2)\"\n\"132+aa\"\n\"11-aa\"\n\"2+bb\"\n\"124-aa\"\n\"500-A4-A3\"\n\"aa\"\n\"bb\"\n\"SUM(A3:A6)\"\n\"120-aa\"\n\"200-aa\"\n\"100+10*aa\"\n\"200-10*bb\"\n\"150+aa-bb\"\n\"IF(OR(LEN(TRIM('Alustage sellelt lehelt'!B6))<3,LEN(TRIM('Alustage sellelt lehelt'!B7))<3),\"\"Fill the cells with your first and family name in the first sheet!\"\",'Alustage sellelt lehelt'!B6&\"\" \"\"&'Alustage sellelt lehelt'!B7)\"\n\"2*aa\"\n\"bb\"\n\"2*(aa+bb)\"\n\"B5*aa+D5*bb+F5*(aa+bb)\"\n\"aa\"\n\"-1*(aa+bb)\"\n\"-aa\"\n\"2*bb\"\n\"aa+bb\"\n\"-bb\"\n\"IF(OR(LEN(TRIM('Alustage sellelt lehelt'!B6))<3,LEN(TRIM('Alustage sellelt lehelt'!B7))<3),\"\"Fill the cells with your first and family name in the first sheet!\"\",'Alustage sellelt lehelt'!B6&\"\" \"\"&'Alustage sellelt lehelt'!B7)\"\n\"aa\"\n\"-bb\"\n\"2*(aa+bb)\"\n\"B6*aa+D6*bb+F6*(aa+bb)\"\n\"bb\"\n\"-1*(aa+bb)\"\n\"-aa\"\n\"2*bb\"\n\"aa+bb\"\n\"2*aa\"\n\"B1&\"\" \"\"&C1\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F44,4,FALSE)\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F44,5,FALSE)\"\n\"VLOOKUP(TRIM('Alustage sellelt lehelt'!B6)&\"\" \"\"&TRIM('Alustage sellelt lehelt'!B7),Tudengid!A1:F44,6,FALSE)\"\n\"LEN(TRIM('Alustage sellelt lehelt'!P6))\"\n\"LEN(TRIM('Alustage sellelt lehelt'!P7))\"\n\"111-bb\"\n\"60+bb\"\n\"400-SUM(B2:E2)\"\n\"SUM(B2:F2)\"\n\"132+aa\"\n\"11-aa\"\n\"2+bb\"\n\"124-aa\"\n\"500-A4-A3\"\n\"aa\"\n\"bb\"\n\"SUM(A3:A6)\"\n\"120-aa\"\n\"200-aa\"\n\"100+10*aa\"\n\"200-10*bb\"\n\"150+aa-bb\"\n\"IF(OR(LEN(TRIM('Alustage sellelt lehelt'!B6))<3,LEN(TRIM('Alustage sellelt lehelt'!B7))<3),\"\"Fill the cells with your first and family name in the first sheet!\"\",'Alustage sellelt lehelt'!B6&\"\" \"\"&'Alustage sellelt lehelt'!B7)\"\n\"aa*0.1\"\n\"-bb*0.2\"\n\"(aa+bb)*0.05\"\n\"3*(aa+bb)\"\n\"aa*4\"\n\"2*bb\"\n\"IF(OR(LEN(TRIM('Alustage sellelt lehelt'!B6))<3,LEN(TRIM('Alustage sellelt lehelt'!B7))<3),\"\"Fill the cells with your first and family name in the first sheet!\"\",'Alustage sellelt lehelt'!B6&\"\" \"\"&'Alustage sellelt lehelt'!B7)\"\n\"0.2*aa\"\n\"-bb*0.15\"\n\"0.1*(aa+bb)\"\n\"3*(aa+bb)\"\n\"aa*3\"\n\"2*bb\"\n\"B1&\"\" \"\"&C1\"\n\"D8+1\"\n\"SUM(B8:B12)\"\n\"SUM(B14:B24)\"\n\"SUM(B26:B40)\"\n\"7*24\"\n\"SUM(C9:I9)\"\n\"+C1-J9\"\n\"IF(K9<0,\"\"Not OK\"\", \"\"OK\"\")\"\n\"+K9-J10\"\n\"SUM(C9:C43)\"\n\"IF(C44>24,\"\"Not OK\"\", \"\"OK\"\")\"\n\"IF(C16=\"\"Metropolitan district\"\",901,IF(C16=\"\"Shire County\"\",902,IF(C16=\"\"Unitary Authority\"\",903,IF(C16=\"\"Inner London\"\",904,IF(C16=\"\"Outer London\"\",905,\"\"\"\")))))\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"IF(StartUp!B11>0,B13,\"\"\"\")\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"IF(ISBLANK(F11),\"\"Please fill adjacent field\"\",F11-D11)\"\n\"IF(ISBLANK(F11),\"\"Please fill adjacent field\"\",F11-D11)\"\n\"SUM(D11:D18)\"\n\"SUM(D11:D18)\"\n\"IF(ISBLANK(F19),\"\"\"\",F19-D19)\"\n\"IF(ISBLANK(F19),\"\"\"\",F19-D19)\"\n\"IF(ISBLANK('Obj1'!G39),\"\"\"\",'Obj1'!G39)\"\n\"IF(ISBLANK('Obj1'!G39),\"\"\"\",'Obj1'!G39)\"\n\"IF(ISBLANK('Obj1'!G40),\"\"\"\",\"\"(\"\" &'Obj1'!G40&\"\")\"\")\"\n\"IF(ISBLANK('Obj1'!G40),\"\"\"\",\"\"(\"\" &'Obj1'!G40&\"\")\"\")\"\n\"IF(ISBLANK('Obj4'!G43),\"\"\"\",'Obj4'!G43)\"\n\"IF(ISBLANK('Obj4'!G43),\"\"\"\",'Obj4'!G43)\"\n\"IF(ISBLANK('Obj5'!G38),\"\"\"\",'Obj5'!G38)\"\n\"IF(ISBLANK('Obj5'!G38),\"\"\"\",'Obj5'!G38)\"\n\"IF(ISBLANK('Obj6'!G41),\"\"\"\",'Obj6'!G41)\"\n\"IF(ISBLANK('Obj6'!G41),\"\"\"\",'Obj6'!G41)\"\n\"IF(ISBLANK('Obj7'!G35),\"\"\"\",'Obj7'!G35)\"\n\"IF(ISBLANK('Obj7'!G35),\"\"\"\",'Obj7'!G35)\"\n\"IF(ISBLANK('Obj8'!G38),\"\"\"\",'Obj8'!G38)\"\n\"IF(ISBLANK('Obj8'!G38),\"\"\"\",'Obj8'!G38)\"\n\"IF(ISBLANK('Obj10'!G38),\"\"\"\",'Obj10'!G38)\"\n\"IF(ISBLANK('Obj10'!G38),\"\"\"\",'Obj10'!G38)\"\n\"IF(ISBLANK('Obj11'!G38),\"\"\"\",'Obj11'!G38)\"\n\"IF(ISBLANK('Obj11'!G38),\"\"\"\",'Obj11'!G38)\"\n\" SUM(D28:D34) + D26\"\n\" SUM(D28:D34) + D26\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"StartUp!C8\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"\"\" \"\" & StartUp!C14 & \"\": \"\" & StartUp!D18\"\n\"IF(ISBLANK(D27), \"\"\"\", IF(LEFT(D27,2)=\"\"1 \"\", \"\"LEAVE BLANK (no justification required for 1 rating)\"\", \"\"Justification of rating\"\"))\"\n\"IF(ISBLANK(D27), \"\"\"\", IF(LEFT(D27,2)=\"\"1 \"\", \"\"LEAVE BLANK (no justification required for 1 rating)\"\", \"\"Justification of rating\"\"))\"\n\"IF(ISBLANK($D27),\"\"\"\",LEFT($D27,1))\"\n\"IF(ISBLANK($D37),\"\"\"\",LEFT($D37,1))\"\n\"IF(ISBLANK($D47),\"\"\"\",LEFT($D47,1))\"\n\"IF(ISBLANK($D57),\"\"\"\",LEFT($D57,1))\"\n\"IF(ISBLANK($D67),\"\"\"\",LEFT($D67,1))\"\n\"IF(ISBLANK($D77),\"\"\"\",LEFT($D77,1))\"\n\"IF(ISBLANK($D87),\"\"\"\",LEFT($D87,1))\"\n\"IF(ISBLANK($D97),\"\"\"\",LEFT($D97,1))\"\n\"IF(ISBLANK($D107),\"\"\"\",LEFT($D107,1))\"\n\"IF(ISBLANK($D117),\"\"\"\",LEFT($D117,1))\"\n\"IF(ISBLANK($D127),\"\"\"\",LEFT($D127,1))\"\n\"IF(ISBLANK(D137), \"\"\"\", IF(LEFT(D137,2)=\"\"A \"\", \"\"LEAVE BLANK (no justification required for A rating)\"\", \"\"Justification of rating\"\"))\"\n\"IF(ISBLANK(D137), \"\"\"\", IF(LEFT(D137,2)=\"\"A \"\", \"\"LEAVE BLANK (no justification required for A rating)\"\", \"\"Justification of rating\"\"))\"\n\"SUMPRODUCT($B$8:$Q$8, B11:Q11)\"\n\"SUMPRODUCT($B$7:$Q$7, B11:Q11)\"\n\"SUMPRODUCT($B$6:$Q$6, B11:Q11)\"\n\"(B9 + D9 + F9 + H9 + J9 + L9 + N9)\"\n\" SUM(P9:P11) + SUM(P13:P26) + SUM(Q13:Q26)\"\n\"COUNTBLANK(C5:K5)*10\"\n\"SUM(B6:N6)/7\"\n\"COUNTA(B27:L27)*12.5\"\n\"VLOOKUP(N6,Gradetable,2)\"\n\"Homewk!O6\"\n\"Homewk!M27\"\n\"Attendance!Q5\"\n\"(D24+E24+F24)*0.65/3 + G24*0.05 + J24 *0.2 +K24*0.03 + L24*0.04 +M24*0.04+ C24\"\n\"SUM(D25:M25)\"\n\"SUM(C3:N3)\"\n\"  0.7*X3 + 0.3*Q3\"\n\"IF(R3>=95,\"\"A\"\",IF(R3>=90,\"\"A-\"\",IF(R3>=85,\"\"B+\"\",IF(R3>=80,\"\"B\"\",IF(R3>=75,\"\"B-\"\",IF(R3>=70,\"\"C+\"\",IF(R3>=65,\"\"C\"\",\"\"??\"\")))))))\"\n\"O3 - SMALL(C3:N3,1) - SMALL(C3:N3,2)\"\n\"SUM(B2:AC2)+SUM(AG2:AU2)+SUM(AY2:AZ2)+SUM(BB2)\"\n\"$A$1\"\n\"$F$1\"\n\"SUM(B16:AC16)+SUM(AG16:AU16)+SUM(AY16:AZ16)\"\n\" $AG$3\"\n\" $AH$3\"\n\" $AI$3\"\n\" $AJ$3\"\n\" $AK$3\"\n\" $AL$3\"\n\" $AM$3\"\n\" $AN$3\"\n\" $AO$3\"\n\" $AP$3\"\n\" $AQ$3\"\n\" $AR$3\"\n\" $AS$3\"\n\" $AT$3\"\n\" $AU$3\"\n\" $AV$3\"\n\" $AW$3\"\n\"SUM(F6:F8)\"\n\"SUM(F11:F14)\"\n\"G9+G15\"\n\"SUM(F21:F22)\"\n\"F25\"\n\"G23+G26\"\n\"G17-G28\"\n\"SUM(G6:G15)\"\n\"H17-G19-G20\"\n\"SUM(G28:G44)\"\n\"SUM(G49:G51)\"\n\"H46+H53\"\n\"H55+H57\"\n\"H22-H59\"\n\"H61-H63\"\n\"SUM(G68:G71)\"\n\"H65+H73\"\n\"30000+'2004 Pro Forma Income Statement'!H75-30000\"\n\"SUM(F6:F8)\"\n\"SUM(F11:F14)\"\n\"G9+G15\"\n\"SUM(F21:F22)\"\n\"F25\"\n\"G23+G26\"\n\"G17-G28\"\n\"'2004 Pro Forma Balance Sheet'!F7-'2003 Balance Sheet'!F7\"\n\"SUM(G6:G15)\"\n\"H17-G19-G20\"\n\"SUM(G28:G44)\"\n\"'2004 Pro Forma Balance Sheet'!F22-'2003 Balance Sheet'!F22\"\n\"SUM(G49:G51)\"\n\"H46+H53\"\n\"H55+H57\"\n\"H22-H59\"\n\"H61-H63\"\n\"SUM(G68:G71)\"\n\"H65+H73\"\n\"RANDBETWEEN(-865,865)/1000\"\n\"IF(C3^2+C4^2>1,1,C3^2+C4^2)\"\n\"SQRT(-2*LN(D3)/D3)\"\n\"C3*E3\"\n\"1+G7\"\n\"1+B7\"\n\"1+J8\"\n\"2+D12\"\n\"B23\"\n\"B52\"\n\"C16\"\n\"IF(C4<>0, D4/C4*100,\"\"\"\")\"\n\"IF(ISNUMBER(E4), E4*B4/SUMIF($C$4:$C$9,\"\">0\"\",$B$4:$B$9), \"\"\"\")\"\n\"G16+G33\"\n\"K16\"\n\"C31\"\n\"C34\"\n\"K24+G34\"\n\"SUM(B4:B9)\"\n\"IF(F10>=88, 4, IF(F10>=86, 3.67, IF(F10>=82, 3.33, IF(F10>=74, 3, IF(F10>=71, 2.67, IF(F10>=68, 2.33, IF(F10>=60, 2, \"\"/\"\")))))))\"\n\"IF(F11<> \"\"/\"\", \"\"/\"\", IF(F10>=58, 1.67, IF(F10>=54, 1.33, IF(F10>=49, 1, IF(F10>=46, 0.67, 0)))))\"\n\"SUM(C17:C24)\"\n\"SUM(G17:G28)\"\n\"SUM(K17:K21)\"\n\"SUM(C32:C33)\"\n\"SUM(G32:G34)\"\n\"C16\"\n\"IF(C4<>0, D4/C4*100,\"\"\"\")\"\n\"IF(ISNUMBER(E4), E4*B4/SUMIF($C$4:$C$9,\"\">0\"\",$B$4:$B$9), \"\"\"\")\"\n\"G16+G33\"\n\"K16\"\n\"C31\"\n\"C34\"\n\"K24+G34\"\n\"SUM(B4:B9)\"\n\"IF(F10>=88, 4, IF(F10>=86, 3.67, IF(F10>=82, 3.33, IF(F10>=74, 3, IF(F10>=71, 2.67, IF(F10>=68, 2.33, IF(F10>=60, 2, \"\"/\"\")))))))\"\n\"IF(F11<> \"\"/\"\", \"\"/\"\", IF(F10>=58, 1.67, IF(F10>=54, 1.33, IF(F10>=49, 1, IF(F10>=46, 0.67, 0)))))\"\n\"SUM(C17:C24)\"\n\"SUM(G17:G28)\"\n\"SUM(K17:K21)\"\n\"SUM(C32:C33)\"\n\"SUM(G32:G34)\"\n\"C16\"\n\"MIN(D16+H31, C4)\"\n\"IF(C4<>0, D4/C4*100,\"\"\"\")\"\n\"IF(ISNUMBER(E4), E4*B4/SUMIF($C$4:$C$9,\"\">0\"\",$B$4:$B$9), \"\"\"\")\"\n\"G16\"\n\"MIN(H16+H33, C5)\"\n\"K16\"\n\"MIN(L16+H34, C6)\"\n\"C31\"\n\"MIN(D31+H32,C7)\"\n\"C34\"\n\"K24\"\n\"SUM(B4:B9)\"\n\"IF(F10>=88, 4, IF(F10>=86, 3.67, IF(F10>=82, 3.33, IF(F10>=74, 3, IF(F10>=71, 2.67, IF(F10>=68, 2.33, IF(F10>=60, 2, \"\"/\"\")))))))\"\n\"IF(F11<> \"\"/\"\", \"\"/\"\", IF(F10>=58, 1.67, IF(F10>=54, 1.33, IF(F10>=49, 1, IF(F10>=46, 0.67, 0)))))\"\n\"SUM(C17:C24)\"\n\"SUM(G17:G28)\"\n\"SUM(K17:K21)\"\n\"SUM(C32:C33)\"\n\"-(ROW()-4) *$B$10\"\n\"-C4\"\n\"COS($B$15*D4*1000)\"\n\"SIN($B$15*D4*1000)\"\n\"($B$6*1000*E4-$B$14*$B$24*F4)/1000\"\n\"$B$14*$B$23*F4/1000\"\n\"SQRT(G4*G4+H4*H4)\"\n\"ATAN2(G4,H4)*180/PI()\"\n\"$B$23*E4\"\n\"$B$6*1000/$B$14*F4+$B$24*E4\"\n\"ATAN2(K4,L4)*180/PI()\"\n\"ATAN2(G5,H5)*180/PI()\"\n\"ATAN2(K5,L5)*180/PI()\"\n\"ATAN2(G6,H6)*180/PI()\"\n\"ATAN2(K6,L6)*180/PI()\"\n\"ATAN2(G7,H7)*180/PI()\"\n\"ATAN2(K7,L7)*180/PI()\"\n\"ATAN2(G8,H8)*180/PI()\"\n\"ATAN2(K8,L8)*180/PI()\"\n\"ATAN2(G9,H9)*180/PI()\"\n\"ATAN2(K9,L9)*180/PI()\"\n\"ATAN2(G10,H10)*180/PI()\"\n\"ATAN2(K10,L10)*180/PI()\"\n\"ATAN2(G11,H11)*180/PI()\"\n\"ATAN2(K11,L11)*180/PI()\"\n\"2*PI()*(8.854*(0.000000000001))*B5/LN(2*B3/(B4/100))\"\n\"ATAN2(G12,H12)*180/PI()\"\n\"ATAN2(K12,L12)*180/PI()\"\n\"2*(0.0000001)*LN(2*B3/(B4/100))\"\n\"ATAN2(G13,H13)*180/PI()\"\n\"ATAN2(K13,L13)*180/PI()\"\n\"SQRT(B13/B12)\"\n\"ATAN2(G14,H14)*180/PI()\"\n\"ATAN2(K14,L14)*180/PI()\"\n\"2*PI()*B9*SQRT(B13*B12)\"\n\"ATAN2(G15,H15)*180/PI()\"\n\"ATAN2(K15,L15)*180/PI()\"\n\"1/B9/SQRT(B13*B12)/1000\"\n\"ATAN2(G16,H16)*180/PI()\"\n\"ATAN2(K16,L16)*180/PI()\"\n\"1/SQRT(B12*B13)\"\n\"ATAN2(G17,H17)*180/PI()\"\n\"ATAN2(K17,L17)*180/PI()\"\n\"1/SQRT(4*PI()*(0.0000001)*8.854*(0.000000000001)*B5)\"\n\"ATAN2(G18,H18)*180/PI()\"\n\"ATAN2(K18,L18)*180/PI()\"\n\"B7*ABS(B8)\"\n\"ATAN2(G19,H19)*180/PI()\"\n\"ATAN2(K19,L19)*180/PI()\"\n\"IF(B8>0,SQRT(B7*B7-B19*B19),-SQRT(B7*B7-B19*B19))\"\n\"ATAN2(G20,H20)*180/PI()\"\n\"ATAN2(K20,L20)*180/PI()\"\n\"B7*1000/B6\"\n\"ATAN2(G21,H21)*180/PI()\"\n\"ATAN2(K21,L21)*180/PI()\"\n\"-ACOS(B8)*180/PI()\"\n\"ATAN2(G22,H22)*180/PI()\"\n\"ATAN2(K22,L22)*180/PI()\"\n\"B21*COS(B22*PI()/180)\"\n\"ATAN2(G23,H23)*180/PI()\"\n\"ATAN2(K23,L23)*180/PI()\"\n\"B21*SIN(B22*PI()/180)\"\n\"ATAN2(G24,H24)*180/PI()\"\n\"ATAN2(K24,L24)*180/PI()\"\n\"B6*1000/B21*COS(B22*PI()/180)\"\n\"ATAN2(G25,H25)*180/PI()\"\n\"ATAN2(K25,L25)*180/PI()\"\n\"B6*1000/B21*SIN(B22*PI()/180)\"\n\"ATAN2(G26,H26)*180/PI()\"\n\"ATAN2(K26,L26)*180/PI()\"\n\"B6*1000/B21\"\n\"ATAN2(G27,H27)*180/PI()\"\n\"ATAN2(K27,L27)*180/PI()\"\n\"(B6-B14*B23/1000)/2\"\n\"ATAN2(G28,H28)*180/PI()\"\n\"ATAN2(K28,L28)*180/PI()\"\n\"-B14*B24/1000/2\"\n\"ATAN2(G29,H29)*180/PI()\"\n\"ATAN2(K29,L29)*180/PI()\"\n\"(B6+B14*B23/1000)/2\"\n\"ATAN2(G30,H30)*180/PI()\"\n\"ATAN2(K30,L30)*180/PI()\"\n\"B14*B24/1000/2\"\n\"ATAN2(G31,H31)*180/PI()\"\n\"ATAN2(K31,L31)*180/PI()\"\n\"SQRT((B28*B28+B29*B29)/(B30*B30+B31*B31))*COS(ATAN2(B28,B29)-ATAN2(B30,B31))\"\n\"ATAN2(G32,H32)*180/PI()\"\n\"ATAN2(K32,L32)*180/PI()\"\n\"SQRT((B28*B28+B29*B29)/(B30*B30+B31*B31))*SIN(ATAN2(B28,B29)-ATAN2(B30,B31))\"\n\"ATAN2(G33,H33)*180/PI()\"\n\"ATAN2(K33,L33)*180/PI()\"\n\"SQRT(B32*B32+B33*B33)\"\n\"ATAN2(G34,H34)*180/PI()\"\n\"ATAN2(K34,L34)*180/PI()\"\n\"(1+B34)/(1-B34)\"\n\"ATAN2(G35,H35)*180/PI()\"\n\"ATAN2(K35,L35)*180/PI()\"\n\"ATAN2(G36,H36)*180/PI()\"\n\"ATAN2(K36,L36)*180/PI()\"\n\"ATAN2(G37,H37)*180/PI()\"\n\"ATAN2(K37,L37)*180/PI()\"\n\"ATAN2(G38,H38)*180/PI()\"\n\"ATAN2(K38,L38)*180/PI()\"\n\"ATAN2(G39,H39)*180/PI()\"\n\"ATAN2(K39,L39)*180/PI()\"\n\"ATAN2(G40,H40)*180/PI()\"\n\"ATAN2(K40,L40)*180/PI()\"\n\"ATAN2(G41,H41)*180/PI()\"\n\"ATAN2(K41,L41)*180/PI()\"\n\"ATAN2(G42,H42)*180/PI()\"\n\"ATAN2(K42,L42)*180/PI()\"\n\"ATAN2(G43,H43)*180/PI()\"\n\"ATAN2(K43,L43)*180/PI()\"\n\"ATAN2(G44,H44)*180/PI()\"\n\"ATAN2(K44,L44)*180/PI()\"\n\"ATAN2(G45,H45)*180/PI()\"\n\"ATAN2(K45,L45)*180/PI()\"\n\"ATAN2(G46,H46)*180/PI()\"\n\"ATAN2(K46,L46)*180/PI()\"\n\"ATAN2(G47,H47)*180/PI()\"\n\"ATAN2(K47,L47)*180/PI()\"\n\"ATAN2(G48,H48)*180/PI()\"\n\"ATAN2(K48,L48)*180/PI()\"\n\"ATAN2(G49,H49)*180/PI()\"\n\"ATAN2(K49,L49)*180/PI()\"\n\"ATAN2(G50,H50)*180/PI()\"\n\"ATAN2(K50,L50)*180/PI()\"\n\"ATAN2(G51,H51)*180/PI()\"\n\"ATAN2(K51,L51)*180/PI()\"\n\"ATAN2(G52,H52)*180/PI()\"\n\"ATAN2(K52,L52)*180/PI()\"\n\"ATAN2(G53,H53)*180/PI()\"\n\"ATAN2(K53,L53)*180/PI()\"\n\"ATAN2(G54,H54)*180/PI()\"\n\"ATAN2(K54,L54)*180/PI()\"\n\"Calc!$N$74\"\n\"SUM(B31:B37)\"\n\"Setup!B19\"\n\"SUM(F6:O6)\"\n\"INDEX('Lab Scores'!$B$9:$B$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"INDEX('Lab Scores'!$AG$9:$AG$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"INDEX('Lab Scores'!$AF$9:$AF$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"R6/S6\"\n\"HLOOKUP(Q6,Calc!$A$4:$E$9,5,FALSE)*T6-HLOOKUP(Q6,Calc!$A$4:$E$9,6,FALSE)\"\n\"U6*S6\"\n\"INDEX('Lab Scores'!$C$9:$C$92,MATCH($B6,'Lab Scores'!$A$9:$A$91,0))\"\n\"(V6/V$10*Setup!$B$31)+(AC6/AC$10*Setup!$B$32)+(Z6/Z$10*Setup!$B$33)+(AA6/AA$10*Setup!$B$34)+(AB6/AB$10*Setup!$B$35)+(P6/P$10*Setup!$B$36)+(D6/D$10*Setup!$B$37)\"\n\"AD6+(Y6*Setup!B$39+X6*Setup!B$41+W6*Setup!B$40)*($AD$15/3)\"\n\"LOOKUP(AE6,Calc!$A$20:$B$31)\"\n\"IF(C6=\"\"PN\"\",IF(AE6<Calc!$B$18,\"\"NP\"\",\"\"P\"\"),AF6)\"\n\"T10\"\n\"COUNT(D7:D9)\"\n\"AVERAGE(D7:D9)\"\n\"STDEVP(D7:D9)\"\n\"MAX(D7:D9)\"\n\"MIN(D7:D9)\"\n\"B4+1\"\n\"DCOUNT(Grades!$Q$5:$T$9,\"\"mean lab\"\",B3:B4)\"\n\"DCOUNT(Grades!$Q$5:$T$9,\"\"mean lab\"\",C$3:C$4)\"\n\"DAVERAGE(Grades!$Q$5:$T$9,\"\"mean lab\"\",B$3:B$4)\"\n\"DSTDEVP(Grades!$Q$5:$T$9,\"\"mean lab\"\",B$3:B$4)\"\n\"HLOOKUP(Setup!$B$35,$A$4:$E$7,4,FALSE)/B7\"\n\"HLOOKUP(Setup!$B$35,$A$4:$K$7,4,FALSE)/C7\"\n\"B8*B6-HLOOKUP(Setup!$B$35,$A$4:$K$7,3,FALSE)\"\n\"DAVERAGE(Grades!$Q$5:$U$9,\"\"adj mean lab\"\",B$3:B$4)\"\n\"DSTDEVP(Grades!$Q$5:$U$9,\"\"adj mean lab\"\",B$3:B$4)\"\n\"Grades!AE14\"\n\"Grades!AE15/3\"\n\"VLOOKUP(Setup!B22,B21:D31,3,FALSE)\"\n\"VLOOKUP(Setup!B24,B21:D31,3,FALSE)\"\n\"$B$14+($B$16-0.5-B17)*$B$15\"\n\"Calc!B71\"\n\"$B$14+($B$16-0.5-D21)*$B$15\"\n\"Calc!C71\"\n\"Calc!D71\"\n\"Calc!E71\"\n\"Calc!F71\"\n\"Calc!G71\"\n\"Calc!H71\"\n\"Calc!I71\"\n\"Calc!J71\"\n\"Calc!K71\"\n\"Calc!L71\"\n\"Calc!M71\"\n\"SUM(C20:C31)\"\n\"B39\"\n\"B40+$B38\"\n\"DCOUNTA(Grades!$D$5:$AF$9,\"\"Final\"\",B39:B40)\"\n\"DCOUNTA(Grades!$AF$5:$AF$9,\"\"Grade\"\",B69:B70)\"\n\"SUM(B71:M71)\"\n\"DCOUNTA(Grades!$AG$5:$AG$9,\"\"Grade\"\",B69:B70)\"\n\"B73*B71\"\n\"SUM(B74:M74)/N71\"\n\"B73*B72\"\n\"COUNT(D10:AE10)\"\n\"SUM(D10:AE10)\"\n\"MIN(D10:AE10)\"\n\"SUM(B2:AC2)\"\n\"AD2/46*100\"\n\"SUM(C8:AC8)\"\n\"AD8/44*100\"\n\"SUM(B2:T2)\"\n\"(100-(U2/57*100))/2+(U2/57*100)\"\n\"B2+C2\"\n\"D2/2\"\n\"E2*0.3\"\n\"L2*0.05\"\n\"Q2*0.1\"\n\"X2*0.15\"\n\"F2+K2+M2+R2+W2+Y2\"\n\"((B16*0.15)+(C16*0.15)+(D16*0.15)+(E16*0.05)+(F16*0.05)+(G16*0.05)+(H16*0.05))/65*100\"\n\"((B2*0.15)+(C2*0.15)+(D2*0.15)+(E2*0.05)+(G2*0.05)+(F2*0.05)+(H2*0.05)+(I2*0.05))/70*100\"\n\"((B3*0.15)+(C3*0.15)+(D3*0.15)+(E3*0.05)+(F3*0.05)+(G3*0.05)+(H3*0.05)+(I3*0.05))/70*100\"\n\"SUM(B14:B16)\"\n\"132/$B$31\"\n\"44/$C$31\"\n\"660/$D$31\"\n\"($B$14*B21)+($B$15*C21)+($B$16*D21)\"\n\"105/$B$31\"\n\"67/$C$31\"\n\"483/$D$31\"\n\"121/$B$31\"\n\"35/$C$31\"\n\"632/$D$31\"\n\"166/$B$31\"\n\"84/$C$31\"\n\"757/$D$31\"\n\"165/$B$31\"\n\"70/$C$31\"\n\"719/$D$31\"\n\"98/$B$31\"\n\"25/$C$31\"\n\"611/$D$31\"\n\"176/$B$31\"\n\"82/$C$31\"\n\"748/$D$31\"\n\"H26^2\"\n\"101/$B$31\"\n\"45/$C$31\"\n\"627/$D$31\"\n\"156/$B$31\"\n\"50/$C$31\"\n\"603/$D$31\"\n\"163/$B$31\"\n\"56/$C$31\"\n\"693/$D$31\"\n\"SUM(B21:B30)/10\"\n\"AVERAGE(B21:B30)\"\n\"B48/C48\"\n\"A13+1\"\n\"A20+1\"\n\"A24+1\"\n\"A59+1\"\n\"Class_Number\"\n\"Class_Name\"\n\"Class_Number\"\n\"Class_Name\"\n\"Class_Number\"\n\"Class_Name\"\n\"A4+1\"\n\"A14+1\"\n\"Class_Number\"\n\"Class_Name\"\n\"A5+1\"\n\"J4-I4\"\n\"A6+1\"\n\"GETPIVOTDATA(\"\"Avg After\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"CS 1321\"\")-GETPIVOTDATA(\"\"Avg Before\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"CS 1321\"\")\"\n\"GETPIVOTDATA(\"\"Avg After\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"CS 1315\"\")-GETPIVOTDATA(\"\"Avg Before\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"CS 1315\"\")\"\n\"GETPIVOTDATA(\"\"Avg After\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"COE 1361\"\")-GETPIVOTDATA(\"\"Avg Before\"\",$A$55,\"\"In which course are you enrolled?\"\",\"\"COE 1361\"\")\"\n\"SUM(GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"to fulfill requirement\"\"),GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"1,2\"\"),GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"1,2,3\"\"))\"\n\"D5/GETPIVOTDATA(\"\"Raw Count\"\",$A$4)\"\n\"SUM(GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"for fun\"\"),GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"1,2\"\"),GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"1,2,3\"\"))\"\n\"SUM(GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"to learn useful things\"\"),GETPIVOTDATA(\"\"Raw Count\"\",$A$4,\"\"If tech started offering Media Comp II, would you most likely take it:\"\",\"\"1,2,3\"\"))\"\n\"COUNTIF(F3:AK3,\"\"n\"\")\"\n\"IF(AM3>4,\"\"FAILS\"\",\"\"ok\"\")\"\n\"SUM(F2:AI2)\"\n\"Attendance!A3\"\n\"AJ2\"\n\"(SUM(F3:AI3))\"\n\"(AK3/AJ3)*100\"\n\"VLOOKUP(AM3,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"Attendance!A3\"\n\"VLOOKUP(F3,'Formulas and Tables'!$A$2:$C$15,2,FALSE)\"\n\"VLOOKUP(F3,'Formulas and Tables'!$A$2:$C$15,3,FALSE)\"\n\"(G3*0.15)+(K3*0.15)+(O3*0.15)+(S3*0.25)\"\n\"(V3/70)*100\"\n\"VLOOKUP(W3,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W4,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W5,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W6,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W7,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W8,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W9,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W10,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W11,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W12,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W13,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W14,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W15,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W16,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W17,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W18,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W19,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W20,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W21,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"VLOOKUP(W22,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"Attendance!A3\"\n\"SUM(F3:AJ3)\"\n\"COUNT(F3:AJ3)*3\"\n\"(AL3/AM3)*100\"\n\"VLOOKUP(AO3,'Formulas and Tables'!A18:C118,2,TRUE)\"\n\"Attendance!A3\"\n\"((('Quizzes and Homework'!AM3*0.2)+(Papers!G3*0.15)+(Participation!AO3*0.1))*100)/45\"\n\"VLOOKUP(F3,'Formulas and Tables'!E18:G118,2,TRUE)\"\n\"((('Quizzes and Homework'!AM3*0.2)+(Papers!G3*0.15)+(Papers!K3*0.15)+(Participation!AO3*0.1))*100)/60\"\n\"VLOOKUP(J3,'Formulas and Tables'!E18:G118,2,TRUE)\"\n\"((('Quizzes and Homework'!AM3*0.2)+(Papers!G3*0.15)+(Papers!K3*0.15)+(Papers!O3*0.15)+(Participation!AO3*0.1))*100)/75\"\n\"VLOOKUP(N3,'Formulas and Tables'!E18:G118,2,TRUE)\"\n\"'Quizzes and Homework'!AM3\"\n\"'Quizzes and Homework'!AO3\"\n\"Papers!W3\"\n\"Participation!AO3\"\n\"Participation!AQ3\"\n\"(R3*0.2)+(X3*0.1)+(U3*0.7)\"\n\"VLOOKUP(Z3,'Formulas and Tables'!E18:G118,2,TRUE)\"\n\"Attendance!A3\"\n\"Attendance!A5\"\n\"'Quizzes and Homework'!F1\"\n\"'Quizzes and Homework'!AJ1\"\n\"'Quizzes and Homework'!E21\"\n\"'Quizzes and Homework'!F21\"\n\"'Quizzes and Homework'!E8\"\n\"'Quizzes and Homework'!F8\"\n\"'Quizzes and Homework'!E14\"\n\"'Quizzes and Homework'!F14\"\n\"'Quizzes and Homework'!E9\"\n\"'Quizzes and Homework'!F9\"\n\"'Quizzes and Homework'!E22\"\n\"'Quizzes and Homework'!F22\"\n\"'Quizzes and Homework'!E6\"\n\"'Quizzes and Homework'!F6\"\n\"'Quizzes and Homework'!E19\"\n\"'Quizzes and Homework'!F19\"\n\"'Quizzes and Homework'!E3\"\n\"'Quizzes and Homework'!F3\"\n\"'Quizzes and Homework'!E13\"\n\"'Quizzes and Homework'!F13\"\n\"'Quizzes and Homework'!E17\"\n\"'Quizzes and Homework'!F17\"\n\"'Quizzes and Homework'!E11\"\n\"'Quizzes and Homework'!F11\"\n\"'Quizzes and Homework'!E7\"\n\"'Quizzes and Homework'!F7\"\n\"'Quizzes and Homework'!E12\"\n\"'Quizzes and Homework'!F12\"\n\"'Quizzes and Homework'!E5\"\n\"'Quizzes and Homework'!F5\"\n\"'Quizzes and Homework'!E18\"\n\"'Quizzes and Homework'!F18\"\n\"'Quizzes and Homework'!E15\"\n\"'Quizzes and Homework'!F15\"\n\"Papers!E21\"\n\"Papers!F21\"\n\"Papers!N21\"\n\"Papers!R21\"\n\"'Final Grades'!F21\"\n\"'Final Grades'!#REF!\"\n\"'Final Grades'!J21\"\n\"'Final Grades'!L21\"\n\"'Final Grades'!N21\"\n\"'Final Grades'!P7\"\n\"'Final Grades'!Z21\"\n\"Papers!E8\"\n\"Papers!F8\"\n\"Papers!N8\"\n\"Papers!R8\"\n\"'Final Grades'!F8\"\n\"'Final Grades'!J8\"\n\"'Final Grades'!L8\"\n\"'Final Grades'!N8\"\n\"'Final Grades'!Z8\"\n\"Papers!E14\"\n\"Papers!F14\"\n\"Papers!N14\"\n\"Papers!R14\"\n\"'Final Grades'!F14\"\n\"'Final Grades'!J14\"\n\"'Final Grades'!L14\"\n\"'Final Grades'!N14\"\n\"'Final Grades'!P14\"\n\"'Final Grades'!Z14\"\n\"Papers!E9\"\n\"Papers!F9\"\n\"Papers!N9\"\n\"Papers!R9\"\n\"'Final Grades'!F9\"\n\"'Final Grades'!J9\"\n\"'Final Grades'!L9\"\n\"'Final Grades'!N9\"\n\"'Final Grades'!P9\"\n\"'Final Grades'!Z9\"\n\"Papers!E22\"\n\"Papers!F22\"\n\"Papers!N22\"\n\"Papers!R22\"\n\"'Final Grades'!F22\"\n\"'Final Grades'!J22\"\n\"'Final Grades'!L22\"\n\"'Final Grades'!N22\"\n\"'Final Grades'!P22\"\n\"'Final Grades'!Z22\"\n\"Papers!E6\"\n\"Papers!F6\"\n\"Papers!N6\"\n\"Papers!R6\"\n\"'Final Grades'!F6\"\n\"'Final Grades'!J6\"\n\"'Final Grades'!L6\"\n\"'Final Grades'!N6\"\n\"'Final Grades'!P6\"\n\"'Final Grades'!Z6\"\n\"Papers!E19\"\n\"Papers!F19\"\n\"Papers!N19\"\n\"Papers!R19\"\n\"'Final Grades'!F19\"\n\"'Final Grades'!J19\"\n\"'Final Grades'!L19\"\n\"'Final Grades'!N19\"\n\"'Final Grades'!P19\"\n\"'Final Grades'!Z19\"\n\"Papers!E10\"\n\"Papers!F10\"\n\"Papers!N10\"\n\"Papers!R10\"\n\"'Final Grades'!F10\"\n\"'Final Grades'!J10\"\n\"'Final Grades'!L10\"\n\"'Final Grades'!N10\"\n\"'Final Grades'!P10\"\n\"'Final Grades'!Z10\"\n\"Papers!E3\"\n\"Papers!F3\"\n\"Papers!N3\"\n\"Papers!R3\"\n\"'Final Grades'!F3\"\n\"'Final Grades'!J3\"\n\"'Final Grades'!L3\"\n\"'Final Grades'!N3\"\n\"'Final Grades'!P3\"\n\"'Final Grades'!Z3\"\n\"Papers!E13\"\n\"Papers!F13\"\n\"Papers!N13\"\n\"Papers!R13\"\n\"'Final Grades'!F13\"\n\"'Final Grades'!J13\"\n\"'Final Grades'!L13\"\n\"'Final Grades'!N13\"\n\"'Final Grades'!P13\"\n\"'Final Grades'!Z13\"\n\"Papers!E17\"\n\"Papers!F17\"\n\"Papers!N17\"\n\"Papers!R17\"\n\"'Final Grades'!F17\"\n\"'Final Grades'!J17\"\n\"'Final Grades'!L17\"\n\"'Final Grades'!N17\"\n\"'Final Grades'!P17\"\n\"'Final Grades'!Z17\"\n\"Papers!E11\"\n\"Papers!F11\"\n\"Papers!N11\"\n\"Papers!R11\"\n\"'Final Grades'!F11\"\n\"'Final Grades'!J11\"\n\"'Final Grades'!L11\"\n\"'Final Grades'!N11\"\n\"'Final Grades'!P11\"\n\"'Final Grades'!Z11\"\n\"Papers!E7\"\n\"Papers!F7\"\n\"Papers!N7\"\n\"Papers!R7\"\n\"'Final Grades'!F7\"\n\"'Final Grades'!J7\"\n\"'Final Grades'!L7\"\n\"'Final Grades'!N7\"\n\"'Final Grades'!P7\"\n\"'Final Grades'!Z7\"\n\"Papers!E12\"\n\"Papers!F12\"\n\"Papers!N12\"\n\"Papers!R12\"\n\"'Final Grades'!F12\"\n\"'Final Grades'!J12\"\n\"'Final Grades'!L12\"\n\"'Final Grades'!N12\"\n\"'Final Grades'!P12\"\n\"'Final Grades'!Z12\"\n\"Papers!E5\"\n\"Papers!F5\"\n\"Papers!N5\"\n\"Papers!R5\"\n\"'Final Grades'!F5\"\n\"'Final Grades'!J5\"\n\"'Final Grades'!L5\"\n\"'Final Grades'!N5\"\n\"'Final Grades'!P5\"\n\"'Final Grades'!Z5\"\n\"Papers!E18\"\n\"Papers!F18\"\n\"Papers!N18\"\n\"Papers!R18\"\n\"'Final Grades'!F18\"\n\"'Final Grades'!J18\"\n\"'Final Grades'!L18\"\n\"'Final Grades'!N18\"\n\"'Final Grades'!P18\"\n\"'Final Grades'!Z18\"\n\"Papers!E15\"\n\"Papers!F15\"\n\"Papers!N15\"\n\"Papers!R15\"\n\"'Final Grades'!F15\"\n\"'Final Grades'!J15\"\n\"'Final Grades'!L15\"\n\"'Final Grades'!N15\"\n\"'Final Grades'!P15\"\n\"'Final Grades'!Z15\"\n\"COUNTIF(A2:A44,9090)\"\n\"COUNTIF(A2:A44,9094)\"\n\"COUNTIF(A2:A44,9098)\"\n\"COUNTIF(A2:A44,9494)\"\n\"COUNTIF(A2:A44,9498)\"\n\"COUNTIF(A2:A44,9898)\"\n\"SUM(D3:I3)\"\n\"D3/$J3\"\n\"((2*D3)+E3+F3)/(2*$J3)\"\n\"((2*G3)+E3+H3)/(2*$J3)\"\n\"((2*I3)+F3+H3)/(2*$J3)\"\n\"SUM(D7:F7)\"\n\"POWER(D7,2)\"\n\"2*D7*E7\"\n\"2*D7*F7\"\n\"POWER(E7,2)\"\n\"2*E7*F7\"\n\"POWER(F7,2)\"\n\"D10*$J3\"\n\"CHITEST(D3:I3,D11:I11)\"\n\"1\"\n\"B2+1\"\n\"E9/(B9/100)\"\n\"L9/(M9/100)\"\n\"T9/S9\"\n\"(B10-B9)/B9\"\n\"B52/B31\"\n\"H11*E31\"\n\"AVERAGE(C10:C52)\"\n\"AVERAGE(U9:U52)\"\n\"L10/N10\"\n\"M10/N10\"\n\"L10-M10\"\n\"Q10/N10\"\n\"T10/S10\"\n\"CORREL(R10:R53,U10:U53)\"\n\"U10\"\n\"CORREL(AC12:AC53,AD12:AD53)\"\n\"(AA11-AA10)/AA10\"\n\"W12/M12\"\n\"AB12-AB11\"\n\"C16/($G16/100)\"\n\"AVERAGE(I17:I28)\"\n\"AVERAGE(I29:I43)\"\n\"AVERAGE(I44:I51)\"\n\"AVERAGE(C4:C6)\"\n\"AVERAGE(C4:C9)\"\n\"AVERAGE(C4:C15)\"\n\"ABS(D21-C21)\"\n\"E21^2\"\n\"E21/C21\"\n\"E30/9\"\n\"F30/9\"\n\"((G30)/9)*100\"\n\"SUM(E21:E29)\"\n\"$C$40+$C$41*C47\"\n\"'Problem 28'!D53\"\n\"E5\"\n\"$C$7*G9+(1-$C$7)*(H8+I8)\"\n\"$C$8*(H9-H8)+(1-$C$8)*I8\"\n\"$H$10+D18*$I$10\"\n\"H9+D20*I9\"\n\"-2*($C$13)+C5\"\n\"-($C$13)+C9\"\n\"SUM(D5:D8)/4\"\n\"SUM(D9:D12)/4\"\n\"(C18-C17)/4\"\n\"C18+C20*(1.5)\"\n\"D5/(($C$17)-((5/2-F5)*$C$20))\"\n\"D9/(($C$18)-((5/2-F9)*$C$20))\"\n\"AVERAGE(C23,C27)\"\n\"C34*$C$39\"\n\"SUM(C34:C37)\"\n\"4/C38\"\n\"C43*(C47/D34)+(1-C43)*(C21+C20)\"\n\"C44*(C48-C21)+(1-C44)*C20\"\n\"C45*(C47/C48)+(1-C45)*D34\"\n\"($C$48+C56*$C$49)*D35\"\n\"D2*180/PI()\"\n\"A2*PI()/180\"\n\"ASIN($I$1*SIN(C2)/$I$2)\"\n\"(($I$2^2+$I$3^2)*(COS(D2))^2-2*$I$2*$I$1*COS(C2)*COS(D2)+$I$1^2*(COS(C2)^2))/(($I$2^2+$I$3^2)*(COS(D2))^2+2*$I$2*$I$1*COS(C2)*COS(D2)+$I$1^2*(COS(C2)^2))\"\n\"(($I$2^2+$I$3^2)*(COS(C2))^2-2*$I$2*$I$1*COS(D2)*COS(C2)+$I$1^2*(COS(D2)^2))/(($I$2^2+$I$3^2)*(COS(C2))^2+2*$I$2*$I$1*COS(D2)*COS(C2)+$I$1^2*(COS(D2)^2))\"\n\"COUNT(K!A:A)\"\n\"C11/D11\"\n\"COUNT('1'!A:A)\"\n\"COUNT('2'!A:A)\"\n\"COUNT('3'!A:A)\"\n\"COUNT('4'!A:A)\"\n\"COUNT('5'!A:A)\"\n\"SUM(C11:C16)\"\n\"COUNTIF(K!B:B,\"\"y\"\")\"\n\"C22/D11\"\n\"COUNTIF('1'!B:B,\"\"y\"\")\"\n\"COUNTIF('2'!B:B,\"\"y\"\")\"\n\"COUNTIF('3'!B:B,\"\"y\"\")\"\n\"COUNTIF('4'!B:B,\"\"y\"\")\"\n\"COUNTIF('5'!B:B,\"\"y\"\")\"\n\"COUNTIF(K!$C:$C,\"\"0\"\")/$C$11\"\n\"COUNTIF(K!$C:$C,\"\".5\"\")/$C$11\"\n\"COUNTIF(K!$C:$C,\"\"1\"\")/$D$11\"\n\"COUNTIF(K!$C:$C,\"\"2\"\")/$D$11\"\n\"COUNTIF(K!$C:$C,\"\"3\"\")/$D$11\"\n\"COUNTIF(K!$C:$C,\"\"4\"\")/$D$11\"\n\"SUM(D32:H32)\"\n\"COUNTIF('1'!$C:$C,\"\"0\"\")/$C$12\"\n\"COUNTIF('1'!$C:$C,\"\".5\"\")/$C$12\"\n\"COUNTIF('1'!$C:$C,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$C:$C,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$C:$C,\"\"3\"\")/$C$12\"\n\"COUNTIF('1'!$C:$C,\"\"4\"\")/$C$12\"\n\"SUM(E33:H33)\"\n\"COUNTIF('2'!$C:$C,\"\"0\"\")/$C$13\"\n\"COUNTIF('2'!$C:$C,\"\".5\"\")/$C$13\"\n\"COUNTIF('2'!$C:$C,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$C:$C,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$C:$C,\"\"3\"\")/$C$13\"\n\"COUNTIF('2'!$C:$C,\"\"4\"\")/$C$13\"\n\"SUM(F34:H34)\"\n\"COUNTIF('3'!$C:$C,\"\"0\"\")/$C$14\"\n\"COUNTIF('3'!$C:$C,\"\".5\"\")/$C$14\"\n\"COUNTIF('3'!$C:$C,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$C:$C,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$C:$C,\"\"3\"\")/$C$14\"\n\"COUNTIF('3'!$C:$C,\"\"4\"\")/$C$14\"\n\"SUM(G35:H35)\"\n\"COUNTIF('4'!$C:$C,\"\"0\"\")/$C$15\"\n\"COUNTIF('4'!$C:$C,\"\".5\"\")/$C$15\"\n\"COUNTIF('4'!$C:$C,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$C:$C,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$C:$C,\"\"3\"\")/$C$15\"\n\"COUNTIF('4'!$C:$C,\"\"4\"\")/$C$15\"\n\"SUM(H36)\"\n\"COUNTIF('5'!$C:$C,\"\"0\"\")/$C$16\"\n\"COUNTIF('5'!$C:$C,\"\".5\"\")/$C$16\"\n\"COUNTIF('5'!$C:$C,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$C:$C,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$C:$C,\"\"3\"\")/$C$16\"\n\"COUNTIF('5'!$C:$C,\"\"4\"\")/$C$16\"\n\"5/$C$16\"\n\"COUNTIF(K!$D:$D,\"\"1\"\")/$C$11\"\n\"COUNTIF(K!$D:$D,\"\"2\"\")/$C$11\"\n\"COUNTIF(K!$D:$D,\"\"3\"\")/$C$11\"\n\"COUNTIF('1'!$D:$D,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$D:$D,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$D:$D,\"\"3\"\")/$C$12\"\n\"COUNTIF('2'!$D:$D,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$D:$D,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$D:$D,\"\"3\"\")/$C$13\"\n\"COUNTIF('3'!$D:$D,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$D:$D,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$D:$D,\"\"3\"\")/$C$14\"\n\"COUNTIF('4'!$D:$D,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$D:$D,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$D:$D,\"\"3\"\")/$C$15\"\n\"COUNTIF('5'!$D:$D,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$D:$D,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$D:$D,\"\"3\"\")/$C$16\"\n\"COUNTIF(K!$E:$E,\"\"1\"\")/$C$11\"\n\"COUNTIF(K!$E:$E,\"\"2\"\")/$C$11\"\n\"COUNTIF(K!$E:$E,\"\"3\"\")/$C$11\"\n\"COUNTIF(K!$E:$E,\"\"4\"\")/$C$11\"\n\"COUNTIF('1'!$E:$E,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$E:$E,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$E:$E,\"\"3\"\")/$C$12\"\n\"COUNTIF('1'!$E:$E,\"\"4\"\")/$C$12\"\n\"COUNTIF('2'!$E:$E,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$E:$E,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$E:$E,\"\"3\"\")/$C$13\"\n\"COUNTIF('2'!$E:$E,\"\"4\"\")/$C$13\"\n\"COUNTIF('3'!$E:$E,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$E:$E,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$E:$E,\"\"3\"\")/$C$14\"\n\"COUNTIF('3'!$E:$E,\"\"4\"\")/$C$14\"\n\"COUNTIF('4'!$E:$E,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$E:$E,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$E:$E,\"\"3\"\")/$C$15\"\n\"COUNTIF('4'!$E:$E,\"\"4\"\")/$C$15\"\n\"COUNTIF('5'!$E:$E,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$E:$E,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$E:$E,\"\"3\"\")/$C$16\"\n\"COUNTIF('5'!$E:$E,\"\"4\"\")/$C$16\"\n\"COUNTIF(K!$F:$F,\"\"0\"\")/$C$11\"\n\"COUNTIF(K!$F:$F,\"\".5\"\")/$C$11\"\n\"COUNTIF(K!$F:$F,\"\"1\"\")/$C$11\"\n\"COUNTIF(K!$F:$F,\"\"2\"\")/$C$11\"\n\"COUNTIF(K!$F:$F,\"\"3\"\")/$C$11\"\n\"COUNTIF(K!$F:$F,\"\"4\"\")/$C$11\"\n\"COUNTIF('1'!$F:$F,\"\"0\"\")/$C$12\"\n\"COUNTIF('1'!$F:$F,\"\".5\"\")/$C$12\"\n\"COUNTIF('1'!$F:$F,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$F:$F,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$F:$F,\"\"3\"\")/$C$12\"\n\"COUNTIF('1'!$F:$F,\"\"4\"\")/$C$12\"\n\"COUNTIF('2'!$F:$F,\"\"0\"\")/$C$13\"\n\"COUNTIF('2'!$F:$F,\"\".5\"\")/$C$13\"\n\"COUNTIF('2'!$F:$F,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$F:$F,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$F:$F,\"\"3\"\")/$C$13\"\n\"COUNTIF('2'!$F:$F,\"\"4\"\")/$C$13\"\n\"COUNTIF('3'!$F:$F,\"\"0\"\")/$C$14\"\n\"COUNTIF('3'!$F:$F,\"\".5\"\")/$C$14\"\n\"COUNTIF('3'!$F:$F,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$F:$F,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$F:$F,\"\"3\"\")/$C$14\"\n\"COUNTIF('3'!$F:$F,\"\"4\"\")/$C$14\"\n\"COUNTIF('4'!$F:$F,\"\"0\"\")/$C$15\"\n\"COUNTIF('4'!$F:$F,\"\".5\"\")/$C$15\"\n\"COUNTIF('4'!$F:$F,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$F:$F,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$F:$F,\"\"3\"\")/$C$15\"\n\"COUNTIF('4'!$F:$F,\"\"4\"\")/$C$15\"\n\"COUNTIF('5'!$F:$F,\"\"0\"\")/$C$16\"\n\"COUNTIF('5'!$F:$F,\"\".5\"\")/$C$16\"\n\"COUNTIF('5'!$F:$F,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$F:$F,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$F:$F,\"\"3\"\")/$C$16\"\n\"COUNTIF('5'!$F:$F,\"\"4\"\")/$C$16\"\n\"COUNTIF(K!$G:$G,\"\"1\"\")/$C$11\"\n\"COUNTIF(K!$G:$G,\"\"2\"\")/$C$11\"\n\"COUNTIF(K!$G:$G,\"\"3\"\")/$C$11\"\n\"COUNTIF(K!$G:$G,\"\"4\"\")/$C$11\"\n\"COUNTIF(K!$G:$G,\"\"5\"\")/$C$11\"\n\"COUNTIF('1'!$G:$G,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$G:$G,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$G:$G,\"\"3\"\")/$C$12\"\n\"COUNTIF('1'!$G:$G,\"\"4\"\")/$C$12\"\n\"COUNTIF('1'!$G:$G,\"\"5\"\")/$C$12\"\n\"COUNTIF('2'!$G:$G,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$G:$G,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$G:$G,\"\"3\"\")/$C$13\"\n\"COUNTIF('2'!$G:$G,\"\"4\"\")/$C$13\"\n\"COUNTIF('2'!$G:$G,\"\"5\"\")/$C$13\"\n\"COUNTIF('3'!$G:$G,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$G:$G,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$G:$G,\"\"3\"\")/$C$14\"\n\"COUNTIF('3'!$G:$G,\"\"4\"\")/$C$14\"\n\"COUNTIF('3'!$G:$G,\"\"5\"\")/$C$14\"\n\"COUNTIF('4'!$G:$G,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$G:$G,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$G:$G,\"\"3\"\")/$C$15\"\n\"COUNTIF('4'!$G:$G,\"\"4\"\")/$C$15\"\n\"COUNTIF('4'!$G:$G,\"\"5\"\")/$C$15\"\n\"COUNTIF('5'!$G:$G,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$G:$G,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$G:$G,\"\"3\"\")/$C$16\"\n\"COUNTIF('5'!$G:$G,\"\"4\"\")/$C$16\"\n\"COUNTIF('5'!$G:$G,\"\"5\"\")/$C$16\"\n\"COUNTIF(K!$H:$H,\"\"1\"\")/$C$11\"\n\"COUNTIF(K!$H:$H,\"\"2\"\")/$C$11\"\n\"COUNTIF(K!$H:$H,\"\"3\"\")/$C$11\"\n\"COUNTIF(K!$H:$H,\"\"4\"\")/$C$11\"\n\"COUNTIF(K!$H:$H,\"\"5\"\")/$C$11\"\n\"COUNTIF('1'!$H:$H,\"\"1\"\")/$C$12\"\n\"COUNTIF('1'!$H:$H,\"\"2\"\")/$C$12\"\n\"COUNTIF('1'!$H:$H,\"\"3\"\")/$C$12\"\n\"COUNTIF('1'!$H:$H,\"\"4\"\")/$C$12\"\n\"COUNTIF('1'!$H:$H,\"\"5\"\")/$C$12\"\n\"COUNTIF('2'!$H:$H,\"\"1\"\")/$C$13\"\n\"COUNTIF('2'!$H:$H,\"\"2\"\")/$C$13\"\n\"COUNTIF('2'!$H:$H,\"\"3\"\")/$C$13\"\n\"COUNTIF('2'!$H:$H,\"\"4\"\")/$C$13\"\n\"COUNTIF('2'!$H:$H,\"\"5\"\")/$C$13\"\n\"COUNTIF('3'!$H:$H,\"\"1\"\")/$C$14\"\n\"COUNTIF('3'!$H:$H,\"\"2\"\")/$C$14\"\n\"COUNTIF('3'!$H:$H,\"\"3\"\")/$C$14\"\n\"COUNTIF('3'!$H:$H,\"\"4\"\")/$C$14\"\n\"COUNTIF('3'!$H:$H,\"\"5\"\")/$C$14\"\n\"COUNTIF('4'!$H:$H,\"\"1\"\")/$C$15\"\n\"COUNTIF('4'!$H:$H,\"\"2\"\")/$C$15\"\n\"COUNTIF('4'!$H:$H,\"\"3\"\")/$C$15\"\n\"COUNTIF('4'!$H:$H,\"\"4\"\")/$C$15\"\n\"COUNTIF('4'!$H:$H,\"\"5\"\")/$C$15\"\n\"COUNTIF('5'!$H:$H,\"\"1\"\")/$C$16\"\n\"COUNTIF('5'!$H:$H,\"\"2\"\")/$C$16\"\n\"COUNTIF('5'!$H:$H,\"\"3\"\")/$C$16\"\n\"COUNTIF('5'!$H:$H,\"\"4\"\")/$C$16\"\n\"COUNTIF('5'!$H:$H,\"\"5\"\")/$C$16\"\n\"C49+1\"\n\"+B6*B$4+C6*C$4+D6*D$4\"\n\"+B15*B$13+C15*C$13+D15*D$13\"\n\"E15-E6\"\n\"+B24*B$22+C24*C$22+D24*D$22\"\n\"E24-E6\"\n\"SUMPRODUCT($B$3:$I$3,B35:I35)\"\n\"SUMPRODUCT($B$33:$I$33,B36:I36)\"\n\"SUMPRODUCT($B$46:$D$46,B48:D48)\"\n\"0.1*25000\"\n\"0.248*25000\"\n\"0.18*25000\"\n\"C59*25000\"\n\"SUMPRODUCT($B$59:$D$59,B61:D61)\"\n\"E61*25000\"\n\"18000/25000\"\n\"20000/25000\"\n\"17000/25000\"\n\"SUMPRODUCT($B$71:$E$71,B73:E73)\"\n\"AVERAGE(B91:B98)\"\n\"MAX(B91:B98)\"\n\"MIN(B91:B98)\"\n\"B105\"\n\"B113\"\n\"B114\"\n\"B115\"\n\"(D2-50)/(E2/SQRT(F2))\"\n\"TDIST(-C8,F2-1,1)\"\n\"NORMSDIST(C8)\"\n\"2*C9\"\n\"(D32-30)/(E32/SQRT(F32))\"\n\"TDIST(C36,F32-1,2)\"\n\"TDIST(C36,F32-1,1)\"\n\"1-C48\"\n\"(D61-0.2)/(SQRT(0.2*0.8/E61))\"\n\"NORMSDIST(-C63)*2\"\n\"E61*0.2*0.8\"\n\"C64/2\"\n\"(100+150+200)/E83\"\n\"100+200+150+25+200+50\"\n\"C93-C98*D93/SQRT(E93)\"\n\"C93+C98*D93/SQRT(E93)\"\n\"TINV(F93,E93-1)\"\n\"C93-D99*D93/SQRT(E93)\"\n\"C93+D99*D93/SQRT(E93)\"\n\"(C93-75)/(D93/SQRT(E93))\"\n\"NORMSDIST(C110)*2\"\n\"TDIST(-C110,E93-1,2)\"\n\"B5-B18\"\n\"B5+B18\"\n\"B5-CONFIDENCE(0.05,B9,B17)\"\n\"B5+CONFIDENCE(0.05,B9,B17)\"\n\"B40\"\n\"NORMSDIST(A53)\"\n\"COUNT('Data Sets'!A3:A32)\"\n\"AVERAGE('Data Sets'!A3:A32)\"\n\"STDEV('Data Sets'!A3:A32)\"\n\"E36/SQRT(C36)\"\n\"(D36-28000)/F36\"\n\"TDIST(-G36,C36-1,1)\"\n\"C4\"\n\"A8^5-(2+rt)*A8^4+(1+2*rt)*A8^3 - (1-rt)*A8^2 + 2*(1-rt)*A8 + rt-1\"\n\"5*A8^4 - 4*(2+rt)*A8^3 + 3*(1+2*rt)*A8^2 - 2*(1-rt)*A8 + 2*(1-rt)\"\n\"A8-B8/C8\"\n\"F4*1.609344\"\n\"H5*1000000\"\n\"I6/F3\"\n\"SQRT(2*$H$27*C43/C44)\"\n\"280*((1-C67)/C68^2)^0.25\"\n\"C70-C69\"\n\"0.5*B3*B2^2\"\n\"H2/9800\"\n\"-B11/$H$3\"\n\"-D11/$H$3\"\n\"H11-G11\"\n\"0.5*(I12+I11)*(F12-F11)\"\n\"SUM(J11:J41)\"\n\"J43*COS(8*PI()/180)\"\n\"J45/8\"\n\"J45/(8*PI()/180)\"\n\"J51*PI()/180\"\n\"2*PI()\"\n\"B4+C4\"\n\"A4+1\"\n\"C5\"\n\"B4*-0.1\"\n\"D4+NPV(B21,D5:D19)\"\n\"IRR(D4:D19,B21)\"\n\"SUMPRODUCT($B$4:$E$4, B3:E3)\"\n\"SUMPRODUCT($B$4:$E$4, B7:E7)\"\n\"H7-F7\"\n\"B3+C3+D3\"\n\"SUMPRODUCT($B$3:$D$3*6,B6:D6)\"\n\"E6-G6\"\n\"SUMPRODUCT(F19:L19,F20:L20)\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"B3\"\n\"F11-B11\"\n\"C3\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B3+C3+D3\"\n\"E3/$E$33\"\n\"J3/$J$33\"\n\"O3/$O$33\"\n\"Q3/$Q$33\"\n\"Q3+O3+J3+E3\"\n\"S3/$S$33\"\n\"U3+V3+W3+X3\"\n\"Y3/$Y$33\"\n\"AB3/$AB$33\"\n\"AD3/$AD$33\"\n\"AF3/$AF$33\"\n\"AB3+AD3+AF3\"\n\"AH3/$AH$33\"\n\"E3+J3+O3+Q3+Y3+AH3\"\n\"AK3/$AK$33\"\n\"AVERAGE(S3:S32)\"\n\"S34/S33\"\n\"MEDIAN(S3:S32)\"\n\"AH35/AH33\"\n\"IF('[1]Areas of Concern Log'!$B1=\"\"\"\",\"\"\"\",'[1]Areas of Concern Log'!$B1)\"\n\"\"\"-\"\"\"\n\"IF('[1]Areas of Concern Log'!$B2=\"\"\"\",\"\"\"\",'[1]Areas of Concern Log'!$B2)\"\n\"IF('[1]Areas of Concern Log'!$B3=\"\"\"\",\"\"\"\",'[1]Areas of Concern Log'!$B3)\"\n\"IF('[1]Areas of Concern Log'!$C3=\"\"\"\",\"\"\"\",'[1]Areas of Concern Log'!$C3)\"\n\"B47/$B$54\"\n\"SUM(B47:B53)\"\n\"SUM(B58:B61)\"\n\"100/2600\"\n\"(F3+G3)*60/200\"\n\"(M107+N107)*40/14\"\n\"J3+K3\"\n\"(M152+N152)*40/20\"\n\"AVERAGE(F107:L107)\"\n\"SUM(F152:L152)/7\"\n\"SUM(C3:H3)\"\n\"(I3/6)\"\n\"IF(J3>89,\"\"A\"\",IF(J3>79,\"\"B\"\",IF(J3>69,\"\"C\"\",IF(J3>59,\"\"D\"\",\"\"F\"\"))))\"\n\"AVERAGE(C3:C14)\"\n\"STDEV(C3:C14)\"\n\"MIN(C3:C14)\"\n\"MAX(C3:C14)\"\n\"COUNT(D10:EJ10)/$C$43\"\n\"SUM(D43:EJ43)\"\n\"IF(SUM(D10:D42)>0,1,\"\"\"\")\"\n\"(((0.5*$C$17) - ($C$16*C15))/$C$25)\"\n\"(($C$16*C15 + 0.5*C17)/$C$25)\"\n\"((((1-$C$15)*$C$16) - 0.5*C17)/ $C$25)\"\n\"((1-$C$15)*$C$16) + 0.5*$C$17\"\n\"SUM($C$22:$C$24)\"\n\"A32\"\n\"$C$18\"\n\"A32+$C$17\"\n\"($C$22*B33) + ($C$23*B32) + ($C$24*F32)\"\n\"IF(H6<20,\"\"NO\"\",\"\"YES\"\")\"\n\"(C3)\"\n\"(C3)\"\n\"(C3)\"\n\"(1.01 * D30)\"\n\"(F30*0.89)\"\n\"(H30*1.08)\"\n\"(D31*1.7)\"\n\"(C3)\"\n\"(C3)\"\n\"(C3)\"\n\"(D58-0.67)\"\n\"(D59-0)\"\n\"(F59-2.5)\"\n\"(H59+2.5)\"\n\"(1.7*D60)\"\n\"SUM(B7:B243)\"\n\"1000000*170000\"\n\"SUM(B5:C5)\"\n\"G5-D5\"\n\"(1000*170000)/((1+B$3)^A6)\"\n\"(5000000*614)/((1+B$3)^A6)\"\n\"(50000*1792)/((1+B$3)^A6)\"\n\"SUM(B5:B45)\"\n\"1000000*170000/10\"\n\"SUM(B5:C5)\"\n\"G5-D5\"\n\"((1000*170000)/((1+B$3)^A6))/10\"\n\"(5000000*614)/((1+B$3)^A6)\"\n\"(50000*1792)/((1+B$3)^A6)\"\n\"SUM(B5:B45)\"\n\"0.8638\"\n\"+E10*E9\"\n\"+(E9/E11)^(1/3)-1\"\n\"+E12\"\n\"+G16\"\n\"+E16-0.005\"\n\"+E27+1\"\n\"+E16\"\n\"1/((1+E28)^(E27))\"\n\"+$D$26*$D$25*E29\"\n\"+$D$25*J29\"\n\"+J31+SUM(E30:J30)\"\n\"+E17\"\n\"1/((1+F38)^(F37-1))\"\n\"+$D$35*$D$36*F39\"\n\"+$D$35*J39\"\n\"+J41+SUM(F40:J40)\"\n\"+(J42+($D$25*$D$26))/J32-1\"\n\"+(($G$18*$G$17)/$G$16)*(1-(1/(1+$G$16)^$G$19))\"\n\"+G18/(1+$G$16)^$G$19\"\n\"+G21+G20\"\n\"+(($P$20*$P$21)/$P$19)*(1-(1/(1+$P$19)^$P$22))\"\n\"+G22*(1+G16)^G19\"\n\"+P21/(1+$P$19)^$P$22\"\n\"+G18\"\n\"+G19*G17*G18\"\n\"+G24-G25-G26\"\n\"+G24-G22\"\n\"+G27\"\n\"+G30/G29\"\n\"SUM(C54:Z54)/2\"\n\"C54-C55\"\n\"IF(C56>=0,MIN(INT(C56+B57),C53),INT(B57*EXP(C56/C53)))\"\n\"INT(C57-B57)\"\n\"IF(C54>=C55,C55,C54-C58)\"\n\"0.5*SUM(C59:AA59)\"\n\"C55-C59\"\n\"MAX(C56+B57-C53,0)\"\n\"0.5*SUM(C61:Z61)\"\n\"INT(B64+C61)\"\n\"0.5*C62\"\n\"INT(0.5*SUM(C63:Z63))\"\n\"INT(SUM(C83:Z83)/2)\"\n\"Boom1_NS\"\n\"Radius1_NS\"\n\"D_Building1_NS\"\n\"Max_Payload1_NS\"\n\"Possible1_NS\"\n\"Possible_Cranes_1_NS\"\n\"H_Building_NS\"\n\"D_Lifting_NS\"\n\"H_Object_NS\"\n\"H_Rig_NS\"\n\"Clearance_NS\"\n\"W_Object_NS\"\n\"BOOM1_SM\"\n\"Radius1_SM\"\n\"D_Building1_SM\"\n\"Max_Payload1_SM\"\n\"Possible_SM\"\n\"Crane_Name_SM\"\n\"H_Building_NS\"\n\"D_Lifting_NS\"\n\"H_Object_NS\"\n\"H_Rig_NS\"\n\"Clearance_NS\"\n\"W_Object_NS\"\n\"Boom1_BL\"\n\"Radius1_BL\"\n\"D_Building1_BL\"\n\"Max_Payload2_BL\"\n\"Possible_BL\"\n\"Crane_BL\"\n\"SQRT((H_Object_NS+H_Rig_NS+L_Cable_NS)^2+D_Lifting_NS^2)\"\n\"DEGREES(ASIN(D_Lifting_NS/Hypotenuse_NS))\"\n\"DEGREES(ASIN(Clearance_NS/Hypotenuse_NS))\"\n\"90-(Alpha_NS+Beta_NS)\"\n\"(L_Cable_NS+H_Rig_NS+H_Object_NS+H_Building_NS-H_Platform_NS)/SIN(RADIANS(Gamma_NS))\"\n\"IF(ISERROR(Boom_NS),0,Boom_NS)\"\n\"(L_Cable_NS+H_Rig_NS+H_Object_NS+H_Building_NS-H_Platform_NS)/TAN(RADIANS(Gamma_NS))\"\n\"IF(ISERROR(Radius_NS),0,Radius_NS)\"\n\"Radius_NS-D_Lifting_NS-10\"\n\"IF(ISERROR(D_Building_NS),0,D_Building_NS)\"\n\"VLOOKUP(Radius_NS,TM275_Loads_NS,2)+1\"\n\"HLOOKUP(Boom_NS,TM275_Loads_NS,2)+1\"\n\"INDEX(TM275_Loads_NS,Row_NS,Column_NS)\"\n\"IF(ISERROR(Max_Payload_NS),0,Max_Payload_NS)\"\n\"IF(W_Object_NS<=Max_Payload1_NS,\"\"YES\"\",\"\"NO\"\")\"\n\"IF(W_Object_NS<=Max_Payload1_NS,\"\"TM275LP \"\",\"\"\"\")\"\n\"Name_Crane_NS&Crane_Name_SM&Crane_BL\"\n\"IF(List_of_all_Cranes_NS=\"\"\"\",\"\"Sorry Lift Is Not Possible\"\",List_of_all_Cranes_NS)\"\n\"IF(Crane_Name_SM=\"\"TMS475 \"\",TRUE,FALSE)\"\n\"Possible_NS\"\n\"IF(Name_Crane_NS=\"\"TM275LP \"\",TRUE,FALSE)\"\n\"Possible_SM\"\n\"IF(Crane_BL=\"\"TD180 \"\",TRUE,FALSE)\"\n\"Possible_BL\"\n\"IF(Possible_Cranes_1_NS=\"\"Sorry Lift Is Not Possible\"\",TRUE,FALSE)\"\n\"Poss1&Poss2&Poss3\"\n\"IF(PossT=\"\"NONONO\"\",\"\"NO\"\",\"\"YES\"\")\"\n\"SQRT((H_Object_SM+H_Rig_SM+L_Cable_SM)^2+(D_Lifting_SM)^2)\"\n\"DEGREES(ASIN(D_Lifting_SM/Hypotenuse_SM))\"\n\"DEGREES(ASIN(Clearance_SM/Hypotenuse_SM))\"\n\"(90-(Alpha_SM+Beta_SM))\"\n\"(H_Building_SM+H_Object_SM+H_Rig_SM+L_Cable_SM-H_Platform_SM)/COS(RADIANS(Gamma_SM))\"\n\"IF(ISERROR(BOOM_SM),0,BOOM_SM)\"\n\"(H_Building_SM+H_Object_SM+H_Rig_SM+L_Cable_SM-H_Platform_SM)/TAN(RADIANS(Gamma_SM))\"\n\"IF(ISERROR(Radius_SM),0,Radius_SM)\"\n\"Radius_SM-D_Lifting_SM\"\n\"IF(ISERROR(D_Building_SM),0,D_Building_SM)\"\n\"VLOOKUP(Radius_SM,TMS475_1_Load_SM,2)+1\"\n\"HLOOKUP(BOOM_SM,TMS475_1_Load_SM,2)+1\"\n\"INDEX(TMS475_1_Load_SM,Row_Number_SM,Column_Number_SM)\"\n\"IF(ISERROR(Max_Payload_SM),0,Max_Payload_SM)\"\n\"IF(W_Object_SM<=Max_Payload1_SM,\"\"YES\"\",\"\"NO\"\")\"\n\"IF(W_Object_SM<=Max_Payload1_SM,\"\"TMS475 \"\",\"\"\"\")\"\n\"SQRT((H_Object_BL+H_Rig_BL+L_Cable_BL)^2+(D_Lifting_BL)^2)\"\n\"DEGREES(ASIN(D_Lifting_BL/Hypotenuse_BL))\"\n\"DEGREES(ASIN(Clearance_BL/Hypotenuse_BL))\"\n\"(90-(Alpha_BL+Beta_BL))\"\n\"(H_Building_BL+H_Object_BL+H_Rig_BL+L_Cable_BL-H_Platform_BL)/COS(RADIANS(Gamma_BL))\"\n\"IF(ISERROR(Boom_BL),0,Boom_BL)\"\n\"(H_Building_BL+H_Object_BL+H_Rig_BL+L_Cable_BL-H_Platform_BL)/TAN(RADIANS(Gamma_BL))\"\n\"IF(ISERROR(Radius_BL),0,Radius_BL)\"\n\"Radius_BL-D_Lifting_BL\"\n\"IF(ISERROR(D_Building_BL),0,D_Building_BL)\"\n\"VLOOKUP(Radius_BL,TD180_BL,2)+1\"\n\"HLOOKUP(Boom_BL,TD180_BL,2)+1\"\n\"INDEX(TD180_BL,Row_Number_BL,Column_Number_BL)\"\n\"IF(ISERROR(Max_Payload1_BL),0,Max_Payload1_BL)\"\n\"IF(W_Object_BL<=Max_Payload2_BL,\"\"YES\"\",\"\"NO\"\")\"\n\"IF(W_Object_BL<=Max_Payload2_BL,\"\"TD180 \"\",\"\"\"\")\"\n\"EVcN\"\n\"oNG\"\n\"IF(UseU, \"\"expected utility\"\",\"\"expected monetary value\"\")\"\n\"EVdN\"\n\"oNP\"\n\"oNPil\"\n\"EVdRoot\"\n\"EVcSG\"\n\"oSG\"\n\"EVdSG\"\n\"oSP\"\n\"oSPil\"\n\"EVcS\"\n\"EVcSP\"\n\"EVdSP\"\n\"EVdPIG\"\n\"EVcPI\"\n\"EVdPIP\"\n\"endMarketGood\"\n\"endMarketPoor-SurveyCost\"\n\"IF(UseU, utility(endMarketGood,Hi,Lo,Risk),endMarketGood)\"\n\"IF(UseU, utility(endMarketPoor,Hi,Lo,Risk),endMarketPoor)\"\n\"IF(UseU, utility(PilgrimOffer,Hi,Lo,Risk),PilgrimOffer)\"\n\"IF(UseU, utility(endMarketGood-SurveyCost,Hi,Lo,Risk),endMarketGood-SurveyCost)\"\n\"IF(UseU, utility(endMarketPoor-SurveyCost,Hi,Lo,Risk),endMarketPoor-SurveyCost)\"\n\"IF(UseU, utility(PilgrimOffer-SurveyCost,Hi,Lo,Risk),PilgrimOffer-SurveyCost)\"\n\"1-pGood\"\n\"0.9\"\n\"0.25\"\n\"1-pPredictGood_if_Good\"\n\"1-pPredictGood_if_Poor\"\n\"SUM(B46:B47)\"\n\"pPredictGood_if_Good*pGood\"\n\"pPredictGood_if_Poor*C42\"\n\"SUM(B52:C52)\"\n\"(1-pPredictGood_if_Good)*pGood\"\n\"C47*C42\"\n\"B52/pPredictGood\"\n\"B53/D53\"\n\"C53/D53\"\n\"MAX(D9:D10)\"\n\"EVcN\"\n\"IF(D9<EVdN,\"\"No\"\",\"\"Yes\"\")\"\n\"oNPil\"\n\"EVcSG\"\n\"IF(D17<E14, \"\"No\"\",\"\"Yes\"\")\"\n\"oSPil\"\n\"IF(D18<E14, \"\"No\"\",\"\"Yes\"\")\"\n\"EVcSP\"\n\"EVdN\"\n\"EVcS\"\n\"oNG\"\n\"oNP\"\n\"SUM(F9:F10)\"\n\"oNG\"\n\"pGood\"\n\"E9*D9\"\n\"oNP\"\n\"1-E9\"\n\"oSG\"\n\"pGood_if_PredictGood\"\n\"oSP\"\n\"ModelParameters!C57\"\n\"pGood_if_PredictPoor\"\n\"ModelParameters!C58\"\n\"EVdSG\"\n\"pPredictGood\"\n\"EVdSP\"\n\"ModelParameters!D53\"\n\"EVdPIG\"\n\"EVdPIP\"\n\"1-pGood\"\n\"EVcS-EVdN\"\n\"EVcPI-EVcN\"\n\"A5+2\"\n\"A5+7\"\n\"A7+7\"\n\"A38+7\"\n\"A41+7\"\n\"A47+14\"\n\"A53+14\"\n\"A57+7\"\n\"A85+5\"\n\"A87+2\"\n\"SUM(B107:B113)\"\n\"B5+7\"\n\"SUM(F5:F52)\"\n\"B24+1\"\n\"IF(UseU, \"\"expected utility\"\",\"\"expected monetary value\"\")\"\n\"FALSE\"\n\"1-pGood\"\n\"SUM(B46:B47)\"\n\"SUM(B52:C52)\"\n\"IF(D9<EVdN,\"\"No\"\",\"\"Yes\"\")\"\n\"MAX(D17:D18)\"\n\"IF(D17<E14, \"\"No\"\",\"\"Yes\"\")\"\n\"IF(D18<E14, \"\"No\"\",\"\"Yes\"\")\"\n\"SUM(F9:F10)\"\n\"E9*D9\"\n\"SUM(C4:C8)\"\n\"IF(WEEKDAY(B12)=2,\"\"Mon\"\",IF(WEEKDAY(B12)=3,\"\"Tues\"\",IF(WEEKDAY(B12)=4,\"\"Weds\"\",IF(WEEKDAY(B12)=5,\"\"Thurs\"\",IF(WEEKDAY(B12)=6,\"\"Fri\"\",\"\"?\"\")))))\"\n\"A12+1\"\n\"IF(C13=\"\"Tues\"\",B13+3,B13+4)\"\n\"IF(WEEKDAY(B15)=2,\"\"Mon\"\",IF(WEEKDAY(B15)=3,\"\"Tues\"\",IF(WEEKDAY(B15)=4,\"\"Tues\"\",IF(WEEKDAY(B15)=5,\"\"Thurs\"\",IF(WEEKDAY(B15)=6,\"\"Fri\"\",\"\"?\"\")))))\"\n\"A27+1\"\n\"ROUND((100*SUM(P10:R10)/SUM($P$8:$R$8))+(S10/25)*2.5,0)\"\n\"MIN(ROUND(100*SUM($W10:$BB10)/(SUM($W$8:$BB$8)),0),100)\"\n\"ROUND(100*SUM(U10)/SUM($U$8),0)\"\n\"ROUND((G10*$G$2+I10*$I$2)*(10/7.5),0)\"\n\"IF(K10>=$G$4,\"\"A\"\",IF(AND(K10>=$H$4,K10<$G$4), \"\"B\"\",IF(AND(K10>=$I$4,K10<$H$4),\"\"C\"\",IF(AND(K10>=$J$4,K10<$I$4),\"\"D\"\", IF(K10<$J$4, \"\"E\"\")))))\"\n\"ROUND((G10*$G$2+I10*$I$2+J10*$J$2),0)\"\n\"RIGHT(B45,4)\"\n\"COUNT(D10:D47)\"\n\"AVERAGE(P10:P44)\"\n\"AVERAGE(Q10:Q47)\"\n\"MEDIAN(P10:P44)\"\n\"MEDIAN(Q10:Q47)\"\n\"SUM(P10:P44)\"\n\"SUM(Q10:Q47)\"\n\"COUNT(P10:P44)\"\n\"COUNT(Q10:Q47)\"\n\"FREQUENCY(P10:P47,P59:P60)\"\n\"FREQUENCY(P10:P47,P60:P61)\"\n\"FREQUENCY(P10:P47,P61:P62)\"\n\"FREQUENCY(P10:P47,P62:P63)\"\n\"FREQUENCY(P10:P47,P63:P64)\"\n\"1*P$8\"\n\"0.899*P$8\"\n\"0.799*P$8\"\n\"0.699*P$8\"\n\"0.599*P$8\"\n\"SUM(B8:B10)\"\n\"+C14+C10+C6\"\n\"87-1569\"\n\"+C24+C28+C32\"\n\"SUM(B38:B40)\"\n\"SUM(C33:C41)\"\n\"C42+C46+C50\"\n\"C14\"\n\"C23\"\n\"C32\"\n\"C41\"\n\"C50\"\n\"-C10\"\n\"-C19\"\n\"-C28\"\n\"-C37\"\n\"-C46\"\n\"C6\"\n\"C15\"\n\"C24\"\n\"C33\"\n\"C42\"\n\"C51\"\n\"B76+B77\"\n\"B4+1\"\n\"B5-B6\"\n\"B9\"\n\"B7-B10\"\n\"-B25\"\n\"B13+B14\"\n\"B11-B15\"\n\"-198\"\n\"SUM(B18:B19)\"\n\"B16+B20\"\n\"-B35*B24\"\n\"+B21-B26 - B28\"\n\"295.8/845\"\n\"274.4/784\"\n\"2*B30/(balancesheet!B36+balancesheet!C36)\"\n\"2*B16/(balancesheet!B34+balancesheet!C34)\"\n\"C16/B16-1\"\n\"C21/B21-1\"\n\"C30/B30-1\"\n\"C5/B5-1\"\n\"C9/B9-1\"\n\"B5+1\"\n\"Income!B21\"\n\"balancesheet!C34-balancesheet!B34\"\n\"B6-B7\"\n\"Income!B26\"\n\"'shareholder''s_equity'!C75\"\n\"balancesheet!C35-balancesheet!B35\"\n\"Income!B28\"\n\"balancesheet!C32-balancesheet!B32\"\n\"B13+B14+B15+B16-B17\"\n\"SUM(B6:B13)\"\n\"SUM(B16:B21)\"\n\"B24\"\n\"SUM(B27:B29)\"\n\"B14-B22\"\n\"B25-B30\"\n\"B34+B35\"\n\"B34+B35-B32\"\n\"C34/B34-1\"\n\"C37/B37-1\"\n\"2*Income!B21/(B34+C34)\"\n\"D43/C43-1\"\n\"B22/B34\"\n\"B1+1\"\n\"2*Income!B21/(balancesheet!C34+balancesheet!B34)\"\n\"AVERAGE(F2:H2)\"\n\"Income!B21/Income!B5\"\n\"2*Income!B5/(balancesheet!B34+balancesheet!C34)\"\n\"2*'shareholder''s_equity'!C74/('shareholder''s_equity'!B76+'shareholder''s_equity'!C76)\"\n\"AVERAGE(F6:G6)\"\n\"-balancesheet!C35/balancesheet!C37\"\n\"-2*Income!B26/(balancesheet!C35+balancesheet!B35)\"\n\"balancesheet!C22/balancesheet!C34\"\n\"Income!B6/balancesheet!C8\"\n\"365*balancesheet!C7/Income!B5\"\n\"(Income!B21+(1-Income!B35)*ratios!B12*(balancesheet!C22-balancesheet!C21))/balancesheet!C14\"\n\"balancesheet!B6/balancesheet!B$14\"\n\"balancesheet!B16/balancesheet!B$22\"\n\"balancesheet!B27/balancesheet!B$30\"\n\"balancesheet!B32/(balancesheet!B14-balancesheet!B22)\"\n\"B4+1\"\n\"Income!B5/Income!B$5\"\n\"AVERAGE(C2:C4)\"\n\"AVERAGE(C7:C17)\"\n\"AVERAGE(C21:C45)\"\n\"AVERAGE(C49:C93)\"\n\"AVERAGE(C97:C143)\"\n\"AVERAGE(C147:C163)\"\n\"SUM(G3:G138)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$28)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$24)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$28)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$24)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"COUNTIF($A$6:$A$29,\"\">0\"\")\"\n\"28+1\"\n\"1+27\"\n\"SUM(C6:R6)\"\n\"IF(S6>0,(S6/ABS($S$3)*100),0)\"\n\"SUM(C$6:C$29)\"\n\"IF(C$30>0,AVERAGE(C$6:C$29),0)\"\n\"IF(C$30>0,AVERAGE('Sec1'!C$6:C$16,'Sec2'!C$6:C$21,'Sec3'!C$6:C$11,'Sec4'!C$6:C$22,'Sec5'!C$6:C$13),0)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$V$54,2,FALSE)\"\n\"Spring2004!V51\"\n\"VLOOKUP(B6,Spring2004!$U$1:'Spring2004'!$V$9, 2)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$AG$53,13, FALSE)\"\n\"VLOOKUP(B3,Spring2004!$U$25:'Spring2004'!$Y$53,5, FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$Z$53,6, FALSE)\"\n\"Spring2004!$Y51\"\n\"Spring2004!$Z51\"\n\"VLOOKUP(B3,Spring2004!$U$25:'Spring2004'!$AA$53,7, FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$AB$53,8, FALSE)\"\n\"Spring2004!$AA51\"\n\"Spring2004!$AB51\"\n\"VLOOKUP(B3,Spring2004!$U$25:'Spring2004'!$AC$64,9, FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$AD$64,10, FALSE)\"\n\"Spring2004!$AC51\"\n\"Spring2004!$AD51\"\n\"VLOOKUP(B3,Spring2004!$U$25:'Spring2004'!$AE$64,11, FALSE)\"\n\"VLOOKUP($B$3,Spring2004!$U$25:'Spring2004'!$AI$54,12, FALSE)\"\n\"Spring2004!$AF51\"\n\"VLOOKUP(B3,Spring2004!U24:'Spring2004'!Y53,4,FALSE)\"\n\"Spring2004!$X51\"\n\"VLOOKUP(B3,Spring2004!U25:'Spring2004'!Y54,3,FALSE)\"\n\"Spring2004!$W51\"\n\"0.25*AC3\"\n\"0.55*AC3\"\n\"0.65*AC3\"\n\"0.7*AC3\"\n\"0.76*AC3\"\n\"0.86*AC3\"\n\"0.89*AC3\"\n\"0.93*AC3\"\n\"SUM(W25:AF25)\"\n\"SUM(A25:J25)\"\n\"SUM(K25:T25)\"\n\"AVERAGE(A25:A50)\"\n\"AVERAGE(I25:I50)\"\n\"AVERAGE(C7:C26)\"\n\"STDEV(C7:C26)\"\n\"INT(12*RAND()+1)\"\n\"Homework!$J$3:$J$8\"\n\"Labs!$H$3:$H$8\"\n\"SUM(B3:G3)\"\n\"H3*100/700\"\n\"IF(I3>=89,\"\"A\"\",IF(I3>=79,\"\"B\"\",IF(I3>=69,\"\"C\"\",IF(I3>=59,\"\"D\"\",\"\"F\"\"))))\"\n\"AVERAGE(B3:H3)\"\n\"I3*60/10\"\n\"SUM(B3:F3)\"\n\"G3*140/105\"\n\"H38/F38\"\n\"A31+1\"\n\"SUMPRODUCT(D6:E6,D3:E3)\"\n\"SUMPRODUCT(D3:E3,D11:E11)\"\n\"SUMPRODUCT(D3:E3,D12:E12)\"\n\"SUMPRODUCT(D6:E6,D3:E3)\"\n\"SUMPRODUCT(D3:E3,D11:E11)\"\n\"SUMPRODUCT(D3:E3,D12:E12)\"\n\"SUMPRODUCT(D6:F6,D3:F3)\"\n\"SUMPRODUCT(D$3:F$3,D11:F11)\"\n\"C7+D7+E7\"\n\"SUM(C7,C8)\"\n\"SUMPRODUCT($C$17:$E$18,$C$7:$E$8)\"\n\"D7+E7+F7+G7\"\n\"SUM(D7:D10)\"\n\"SUMPRODUCT(D19:G22,D7:G10)\"\n\"C7+D7+E7+F7\"\n\"SUM(C7:C9)\"\n\"SUMPRODUCT(C18:F20,C7:F9)\"\n\"SUMPRODUCT(D6:G6,D3:G3)\"\n\"SUMPRODUCT(D$3:G$3,D11:G11)\"\n\"$D3+$F3\"\n\"B3\"\n\"$E3+$G3\"\n\"$C3\"\n\"$H3\"\n\"$E3+$F3\"\n\"$I3\"\n\"$D3+$G3\"\n\"$H3+$I3\"\n\"E2\"\n\"SUM(E2:E21)\"\n\"SUM(E2:E21)\"\n\"SUM(E27)\"\n\"SUM(E3:E5)\"\n\"Municipal!E22\"\n\"'Non Profit'!E22\"\n\"Rehab!E8\"\n\"E6\"\n\"SUM(E9:E12)\"\n\"E4\"\n\"SUM(E2:E7)\"\n\"SUM(E2:E7)\"\n\"SUM(E8:E10)\"\n\"SUM(E2:E13)\"\n\"SUM(F3:F13)\"\n\"2432890*0.15\"\n\"SUM(E14:E17)\"\n\"HOME!E11\"\n\"SUM(E18:E19)\"\n\"E9/D9\"\n\"D9/D18\"\n\"40000-13325-1500-175\"\n\"H9/H18\"\n\"D11/$D$18\"\n\"H11/H18\"\n\"H12/H18\"\n\"H13/H18\"\n\"H14/H18\"\n\"1300+800+750+400+350+50+25\"\n\"H15/H18\"\n\"775.06-0.51-14.9-0.51-0.49-10.66-0.95-10.33-0.89-10.68-8.72-0.82-0.66-8.03\"\n\"H17/H18\"\n\"SUM(D9:D17)\"\n\"D22/$D$113\"\n\"H22/H113\"\n\"H23/$H$113\"\n\"81.15+5.22\"\n\"SUM(D22:D27)\"\n\"SUM(H22:H27)\"\n\"I28/$H$113\"\n\"SUM(D31:D34)\"\n\"SUM(H31:H35)\"\n\"SUM(D38:D39)\"\n\"SUM(H38:H39)\"\n\"D48\"\n\"SUM(H48:H50)\"\n\"7875+250\"\n\"4200+125\"\n\"SUM(H54:H57)\"\n\"SUM(D61:D65)\"\n\"SUM(H61:H65)\"\n\"153.3+163.56\"\n\"SUM(D69:D75)\"\n\"SUM(H69:H75)\"\n\"SUM(D79:D81)\"\n\"9.79\"\n\"D112+D106+D97+D88+D82+D76+D66+D58+D51+D45+D40++D35+D28\"\n\"SUM(H22:H112)\"\n\"SUM(I112,I106,I97,I88,I82,I76,I66,I58,I51,I45,I40,I35,I28)\"\n\"H18-I113\"\n\"32*10*170\"\n\"(30 * 1700)\"\n\"SUM(F9:F10)\"\n\"575*1.25+1\"\n\"SUM(F15:F22)\"\n\"ROUND(SUM(F25:F28),5)\"\n\"F23+F29+F30\"\n\"ROUND(F6+F12-F31,5)\"\n\"ROUND(SUM(F34:F35),5)\"\n\"ROUND(F32+F36,5)\"\n\"I38/I31\"\n\"15000-303.03+3297.5-148\"\n\"E9/D9\"\n\"D9/D18\"\n\"17026.29-44.17\"\n\"D10/$D$18\"\n\"-307-496\"\n\"775.06-0.51-14.9-0.51-0.49-10.66-0.95-10.33-0.89-10.68-8.72-0.82-0.66-8.03\"\n\"H15/H18\"\n\"SUM(D9:D16)\"\n\"3100+147.47+40.85+717.5+63.79\"\n\"D22/$D$112\"\n\"H22/H112\"\n\"H23/$H$112\"\n\"131.32+1000\"\n\"81.15+5.22\"\n\"SUM(H22:H30)\"\n\"I31/$H$112\"\n\"2205.38-160-30.38+50\"\n\"1396.5+540\"\n\"190+659.92\"\n\"SUM(H34:H37)\"\n\"SUM(H41:H42)\"\n\"1586.79+1022.01\"\n\"SUM(H51)\"\n\"2797.5+91.07+2033.07\"\n\"SUM(H62:H66)\"\n\"153.3+163.56\"\n\"SUM(H70:H75)\"\n\"9+39+140+78+200+9.5+170.8+40+144.43+418.25\"\n\"242.5+22.5\"\n\"SUM(H79:H81)\"\n\"9.79\"\n\"35.26+38.72+19.99\"\n\"SUM(D22:D111)\"\n\"SUM(I111,I105,I96,I87,I82,I76,I67,I59,I52,I48,I43,I38,I31)\"\n\"SUM(Y2:AF2)\"\n\"SUM(AG2:AO2)\"\n\"SUM(Y2:AO2)\"\n\"SUM(AV3:AZ3)\"\n\"SUM(BG3:BL3)\"\n\"SUM(BN3:BQ3)\"\n\"SUM(D5:S5)\"\n\"T5/150*100\"\n\"SUM(Y5:AP5)\"\n\"AQ5/350*100\"\n\"SUM(BB5:BE5)\"\n\"BA5+BF5+BM5+BS5\"\n\"BT5/400*100\"\n\"AQ5\"\n\"BT5\"\n\"T5\"\n\"CE5/830*100\"\n\"AVERAGE(U5:U21)\"\n\"SUM(Y2:AF2)\"\n\"T1+BS1+AQ1\"\n\"SUM(Y2:AO2)\"\n\"SUM(AV3:AZ3)\"\n\"SUM(BB3:BE3)\"\n\"SUM(BG3:BL3)\"\n\"SUM(BN3:BQ3)\"\n\"SUM(D5:S5)\"\n\"T5/$T$1*100\"\n\"SUM(Y5:AP5)\"\n\"AQ5/$AQ$1*100\"\n\"BA5+BF5+BM5+BS5\"\n\"BT5/$BS$1*100\"\n\"AQ5\"\n\"BT5\"\n\"T5\"\n\"CE5/$CE$1*100\"\n\"AVERAGE(U5:U17)\"\n\"AVERAGE(BA5:BA16)\"\n\"AVERAGE(BF5:BF18)\"\n\" (H26*E21)^(1/2)\"\n\"C7*10\"\n\"SUM(B2:AC2)+SUM(AG2:AU2)+SUM(AY2:AZ2)+SUM(BB2)\"\n\"$A$1\"\n\"$F$1\"\n\"SUM(B16:AC16)+SUM(AG16:AU16)+SUM(AY16:AZ16)\"\n\" $AG$3\"\n\" $AH$3\"\n\" $AI$3\"\n\" $AJ$3\"\n\" $AK$3\"\n\" $AL$3\"\n\" $AM$3\"\n\" $AN$3\"\n\" $AO$3\"\n\" $AP$3\"\n\" $AQ$3\"\n\" $AR$3\"\n\" $AS$3\"\n\" $AT$3\"\n\" $AU$3\"\n\" $AV$3\"\n\" $AW$3\"\n\"(B2/100) + (2*C2+2*E2+H2)*12.5/1000 + (D2 +F2+G2)*12.5/1700+ (I2+J2)*70/4000\"\n\"1500+300*$A10-25*$A10^2+1.5*$A10^3\"\n\"300-50*$A10+4.5*$A10^2\"\n\"B11/A11\"\n\"(B11-1500)/A11\"\n\"300-50*$F$29+4.5*$F$29^2\"\n\"-50+9*$F$31\"\n\"B18*F18/G18\"\n\"B18*F18/G18\"\n\"STDEVP(D3:D37)\"\n\"SUM(G19:G23)\"\n\"SUM(G3:G34)\"\n\"SUM(D4:G4)\"\n\"$D$2/(1+$J4)^$D$1\"\n\"$E$2/(1+$J4)^$E$1\"\n\"$F$2/(1+$J4)^$F$1\"\n\"$G$2/(1+$J4)^$G$1\"\n\"IRR(D2:G2)\"\n\"NPV(A7,$C$3:$E$3)+$B$3\"\n\"NPV(A6,$C$2:$E$2)+$B$2\"\n\"IRR(B2:E2)\"\n\"IRR(B2:E2,22%)\"\n\"-D7*$C$3\"\n\"SUM(C7:C9)\"\n\"SUM(D7:D8)\"\n\"C10/(1+$C$4)^C6\"\n\"SUM(C11:G11)\"\n\"(0.15-0.06*(0.5)*0.75)/0.5\"\n\"-$C$17*$C$18\"\n\"D23+D24\"\n\"SUM(D25:D26)\"\n\"C30/(1+$C$19)^C22\"\n\"D30/(1+$C$20)^D22\"\n\"C49/C38\"\n\"$C$39\"\n\"IF(D47=0,SUM(D45:D47),0)\"\n\"IF(D45<0,0,D45+D46)\"\n\"-IF(D47>0,D47*$C$37,0)\"\n\"C49+C48+C43\"\n\"C50/(1+$C$40)^C42\"\n\"C74/C59\"\n\"$C$60\"\n\"-D71*$C$57\"\n\"D66+D67+D72\"\n\"C76/(1+$C$19)^C65\"\n\"D76/(1+$C$63)^D65\"\n\"AVERAGE(C28:E28)\"\n\"C34/0.09\"\n\"C39*C40\"\n\"C41-C37\"\n\"1/(1-C43/C41)\"\n\"C41/C34\"\n\"0.09\"\n\"C46/C47\"\n\"C34/0.11\"\n\"C41-C51\"\n\"D6/D7\"\n\"D7-D9\"\n\"D10*D8\"\n\"D6\"\n\"D12-D11\"\n\"D9*D8\"\n\"5959000000\"\n\"C7\"\n\"D18*D8\"\n\"D17*D8\"\n\"1/(10%-5%)\"\n\"1/(10%-2%)\"\n\"(10%-5%)\"\n\"(10%-2%)\"\n\"100*SUM(C6:AF6)/COUNT(C6:AF6)\"\n\"100*SUM(C6:C39)/COUNT(C6:C39)\"\n\"100*SUM(D4:D39)/COUNT(D6:D39)\"\n\"SUM(A2:A32)\"\n\"SUM(H4:H22)\"\n\"VLOOKUP(H23,A26:C45,3)\"\n\"SUM(H4:H22)\"\n\"VLOOKUP(H23,A26:C45,3)\"\n\"SUM(H4:H22)\"\n\"VLOOKUP(H23,A26:C45,3)\"\n\"SUM(H4:H22)\"\n\"VLOOKUP(H23,A26:C45,3)\"\n\"0.6*82906340\"\n\"E6/G6\"\n\"SUM(E6:E13)\"\n\"E6*(C17/100)\"\n\"E25*0.5\"\n\"E25*(1-0.5)\"\n\"E28/E4\"\n\"(E4*(0.343)-E28)\"\n\"E32*479\"\n\"E33*67\"\n\"E32*636\"\n\"E32*20\"\n\"0.6*E1\"\n\"SUM(E5:E12)\"\n\"E5*(C16/100)\"\n\"E24*0.5\"\n\"E24*(1-0.5)\"\n\"E27/E3\"\n\"(E3*(0.426)-E27)\"\n\"E31*479\"\n\"E31*20\"\n\"0.6*E1\"\n\"SUM(E5:E12)\"\n\"E5*(C16/100)\"\n\"E24*0.5\"\n\"E24*(1-0.5)\"\n\"E27/E3\"\n\"(E3*(0.295)-E27)\"\n\"E31*479\"\n\"E31*20\"\n\"0.6*D4\"\n\"D9/F9\"\n\"G9*1000/1.12/60\"\n\"G10*1000/1.12/56\"\n\"SUM(D9:D16)\"\n\"D9*(B20/100)\"\n\"D28*0.5\"\n\"D28*(1-0.5)\"\n\"D31/D6\"\n\"D31/(40000000*0.6)\"\n\"33166205*550\"\n\"(D6*(0.343)-D31)\"\n\"D44*479\"\n\"D45*67\"\n\"D44*550\"\n\"D44*20\"\n\"ROUND((B5+C5+D5+E5+F5+G5+H5+J5+K5)/9, 2)\"\n\"N5*$N$208\"\n\"ROUNDUP(IF(Q5>0,(IF(L5=1,IF(O5+10>100,100,O5+10),(IF(L5<0.75,0,IF(O5>100,100,O5))))),0),0)\"\n\"IF(M5>1,1,0)\"\n\"IF(M5>1,IF(P5<56,1,0),0)\"\n\"IF(M5>1,(P5-P$207)^2,0)\"\n\"U5*U$208\"\n\"ROUNDUP(IF(T5>0,(IF(L5=1,IF(V5+10>100,100,V5+10),(IF(L5<0.75,0,IF(V5>100,100,V5))))),0),0)\"\n\"SUM(N5:N206)/Q207\"\n\"SUM(O5:O206)/Q207\"\n\"SUM(P5:P206)/Q207\"\n\"SUM(Q5:Q206)\"\n\"ROUNDUP(100*SUM(R5:R206)/Q207,0)\"\n\"SQRT(SUM(S5:S206)/(Q207-1))\"\n\"SUM(U4:U205)/$X207\"\n\"SUM(X4:X206)\"\n\"ROUNDUP(100*SUM(Y4:Y206)/X207,0)\"\n\"1.05\"\n\"IF(L216=1,IF(O216+10>100,100,O216+10),(IF(L216<0.75,0,IF(O216>100,100,O216))))\"\n\"FREQUENCY(P5:P206,N219:N228)\"\n\"SUM(O220:O229)\"\n\"SUM(B4:B6)\"\n\"B4+C4+D4+E4+F4+G4+H4+I4+J4+K4+L4+M4\"\n\"SUM(B20:B34)\"\n\"B3+B7+B11+B15+B19\"\n\"C6-7\"\n\"C7-3\"\n\"C6*0.1+D6*0.1+E6*0.15+F6*0.2+G6*0.1+H6*0.15+I6*0.2\"\n\"'Class 1'!C3\"\n\"'Class 1'!H6-3\"\n\"'Class 1'!C7-15\"\n\"'Class 1'!D7-20\"\n\"'Class 1'!E7-30\"\n\"'Class 1'!F7-40\"\n\"'Class 1'!G7-50\"\n\"'Class 1'!C14-10\"\n\"'Class 1'!C4\"\n\"'Class 1'!C6-10\"\n\"'Class 1'!G6-5\"\n\"'Class 1'!E7+10\"\n\"'Class 1'!G7-15\"\n\"'Class 1'!I7+5\"\n\"LOG(B4,B5)\"\n\"A11/2\"\n\"A11^$B$6\"\n\"B11/C11\"\n\"$B$7*C11\"\n\"IF(B11<=E11,\"\"TRUE\"\",\"\"FALSE\"\")\"\n\"IF(E11 <=B11,\"\"TRUE\"\", \"\"FALSE\"\")\"\n\"LOG(A11,2)\"\n\"$B$4*A10*LOG(LOG(A10,2),2)\"\n\"$B$5*LOG(LOG(A10,2),2)\"\n\"5*1+A10/LOG(A10,2)\"\n\"IF(B10<=D10,\"\"TRUE\"\", \"\"FALSE\"\")\"\n\"IF(D10<=C10,\"\"TRUE\"\",\"\"FALSE\"\")\"\n\"IF(E10=\"\"TRUE\"\",IF(F10=\"\"TRUE\"\",\"\"True\"\",\"\"False\"\"),\"\"False\"\")\"\n\"$B$5*A11*LOG(LOG(A11,2),2)\"\n\"5*$D$11+A19/LOG(A19,2)\"\n\"5*$D$12+A24/LOG(A24,2)\"\n\"5*$D$13+A29/LOG(A29,2)\"\n\"5*$D$14+A34/LOG(A34,2)\"\n\"5*$D$15+A39/LOG(A39,2)\"\n\"SUM(B2:AC2)\"\n\"SUM(J3:J109)\"\n\"SUM(C10-E10)\"\n\"SUM(C13:C23)\"\n\"SUM(C27:C29)\"\n\"SUM(C33:C36)\"\n\"SUM(C40:C44)\"\n\"SUM(C10+C24+C30+C37+C45+C51+C59)\"\n\"SUM(C67+C69)\"\n\"SUM(C75:C80)\"\n\"SUM(F12:L12)\"\n\"SUM(D12-M12)\"\n\"SUM(C15:C25)\"\n\"SUM(C28:C30)\"\n\"SUM(C34:C37)\"\n\"SUM(C51:C55)\"\n\"SUM(C12+C26+C31+C38+C56+C62+C70)\"\n\"SUM(C76+C78)\"\n\"SUM(C93:C98)\"\n\"2*PI()*B2/360\"\n\"G3*TAN(C5)\"\n\"B10\"\n\"F4*TAN(C15)\"\n\"F4-B11\"\n\"G7-(B12+B13)*SIN(C18)\"\n\"F7-B12*COS(C18)\"\n\"G7-B12*SIN(C18)\"\n\"-G3*TAN(C6)\"\n\"G3\"\n\"90-B2-B5\"\n\"180-B9-B7\"\n\"180-B9\"\n\"180-B19-B16\"\n\"180-B6-B5-B4\"\n\"F4-F2\"\n\"F3-F2\"\n\"F7-F2\"\n\"F6-F2\"\n\"F6-F7\"\n\"F5-F6\"\n\"F4-F3\"\n\"F7-F3\"\n\"G4-G2\"\n\"G3-G2\"\n\"G7-G2\"\n\"G6-G2\"\n\"G6-G7\"\n\"G5-G6\"\n\"G4-G3\"\n\"G7-G3\"\n\"SQRT(C24*C24+C25*C25)\"\n\"C24/C27\"\n\"C25/C27\"\n\"C28\"\n\"0.2*175\"\n\"-D28\"\n\"I28\"\n\"0.6*175\"\n\"-C28\"\n\"-H28\"\n\"-F28\"\n\"H28\"\n\"-E28\"\n\"G28\"\n\"C35+C37+C39+C41+C43+C45\"\n\"SUM(Q35:Q46)\"\n\"MINVERSE(C35:N46)\"\n\"MMULT(C54:N65,Q35:Q46)\"\n\"AttendingList0!B4\"\n\"SUM(D4:Q4)\"\n\"IF(R4>12*0.8, \"\"Yoklamali\"\",\"\"Devamsiz\"\")\"\n\"COUNT(D4:Q4)\"\n\"SUM(D4:D36)\"\n\"SUM(R4:R36)/35\"\n\"MAX(U4:U36)\"\n\"D37/33*100\"\n\"R37/U37*100\"\n\"AttendingList0!B4\"\n\"SUM(D5:H5)/I5\"\n\"AttendingList!R4\"\n\"E5+F5\"\n\"G5+H5\"\n\"SUM(D5:D37)\"\n\"D38/33\"\n\"MIN(D5:D37)\"\n\"MAX(D5:D37)\"\n\"STDEVA(D5:D37)\"\n\"AttendingList0!B4\"\n\"D5*0.7+0.3*E5\"\n\"F5*0.7+0.3*G5\"\n\"H5*0.7+0.3*I5\"\n\"J5*0.7+0.3*K5\"\n\"L5*0.7+0.3*M5\"\n\"N5*0.7+0.3*O5\"\n\"-MIN(P5:U5)\"\n\"-U5\"\n\"SUM(P5:W5)\"\n\"X5/Y5\"\n\"AttendingList0!B4\"\n\"Z5\"\n\"-T6\"\n\"-R8\"\n\"-Q10\"\n\"-S22\"\n\"-P26\"\n\"SUM(D5:D37)\"\n\"D38/28\"\n\"H38/29\"\n\"N38/24\"\n\"O38/25\"\n\"P38/33\"\n\"MIN(D5:D37)\"\n\"MAX(D5:D37)\"\n\"IF(D38>0,STDEVA(D5:D37))\"\n\"D4*0.7+0.3*E4\"\n\"AttendingList0!B4\"\n\"SUM(D5:D37)\"\n\"D38/COUNT(D5:D37)\"\n\"MIN(D5:D37)\"\n\"MAX(D5:D37)\"\n\"IF(D38>0,STDEVA(D5:D37))\"\n\"AttendingList!S1\"\n\"D4*0.3\"\n\"F4*0.4\"\n\"SUM(G4:I4)\"\n\"AttendingList0!B4\"\n\"Homework!J5\"\n\"Sinavlar!Z5\"\n\"Final!F5\"\n\"SUM(D5:D37)\"\n\"D38/COUNT(D5:D37)\"\n\"MIN(D5:D37)\"\n\"MAX(D5:D37)\"\n\"IF(D38>0,STDEVA(D5:D37))\"\n\"IF(F38>0,STDEVA(F5:F37),\"\"------\"\")\"\n\"TotalGrade!B1\"\n\"TotalGrade!B1\"\n\"TotalGrade!B1\"\n\"B2\"\n\"TotalGrade!K3\"\n\"G4+H4\"\n\"TotalGrade!B37\"\n\"J5/73.38*100\"\n\"L5/100*4\"\n\"IF(O5=\"\"AA\"\",4,IF(O5=\"\"BA\"\",3.5,IF(O5=\"\"BB\"\",3,IF(O5=\"\"CB\"\",2.5,IF(O5=\"\"CC\"\",2,IF(O5=\"\"DC\"\",1.5,IF(O5=\"\"DD\"\",1,0)))))))\"\n\"IF(J5>=AA5,\"\"AA\"\",IF(J5>AB5,\"\"BA\"\",IF(J5 >=AC5,\"\"BB\"\",IF(J5>AD5,\"\"CB\"\",IF(J5>AE5,\"\"CC\"\",IF(J5>AF5,\"\"DC\"\",IF(J5>AG5,\"\"DD\"\",\"\"FF\"\")))))))\"\n\"AttendingList0!B36\"\n\"TotalGrade!K37\"\n\"J39\"\n\"X9\"\n\"X10\"\n\"X11\"\n\"X12\"\n\"X13\"\n\"X14\"\n\"X15\"\n\"X16\"\n\"X17\"\n\"TotalGrade!B30\"\n\"AttendingList0!B29\"\n\"TotalGrade!K30\"\n\"J5-J6\"\n\"L5-L6\"\n\"J42\"\n\"AA5\"\n\"TotalGrade!B36\"\n\"AttendingList0!B35\"\n\"TotalGrade!K36\"\n\"X6/4\"\n\"AA5\"\n\"TotalGrade!B28\"\n\"AttendingList0!B27\"\n\"TotalGrade!K28\"\n\"AA5\"\n\"TotalGrade!B26\"\n\"AttendingList0!B25\"\n\"TotalGrade!K26\"\n\"W9-X9\"\n\"AA5\"\n\"TotalGrade!B19\"\n\"AttendingList0!B18\"\n\"TotalGrade!K19\"\n\"X9\"\n\"TotalGrade!B33\"\n\"AttendingList0!B32\"\n\"TotalGrade!K33\"\n\"TotalGrade!B25\"\n\"AttendingList0!B24\"\n\"TotalGrade!K25\"\n\"TotalGrade!B8\"\n\"AttendingList0!B7\"\n\"TotalGrade!K8\"\n\"TotalGrade!B13\"\n\"AttendingList0!B12\"\n\"TotalGrade!K13\"\n\"AttendingList0!B15\"\n\"TotalGrade!K16\"\n\"TotalGrade!B29\"\n\"AttendingList0!B28\"\n\"TotalGrade!K29\"\n\"TotalGrade!B31\"\n\"AttendingList0!B30\"\n\"TotalGrade!K31\"\n\"TotalGrade!B21\"\n\"AttendingList0!B20\"\n\"TotalGrade!B35\"\n\"AttendingList0!B34\"\n\"TotalGrade!K35\"\n\"TotalGrade!B5\"\n\"AttendingList0!B4\"\n\"TotalGrade!K5\"\n\"TotalGrade!B11\"\n\"AttendingList0!B10\"\n\"TotalGrade!K11\"\n\"TotalGrade!B6\"\n\"AttendingList0!B5\"\n\"TotalGrade!K6\"\n\"TotalGrade!B9\"\n\"AttendingList0!B8\"\n\"TotalGrade!K9\"\n\"TotalGrade!B32\"\n\"AttendingList0!B31\"\n\"TotalGrade!K32\"\n\"TotalGrade!B7\"\n\"AttendingList0!B6\"\n\"TotalGrade!K7\"\n\"TotalGrade!B23\"\n\"AttendingList0!B22\"\n\"TotalGrade!K10\"\n\"COUNTIF(O5:O37,\"\"AA\"\")\"\n\"TotalGrade!B10\"\n\"AttendingList0!B9\"\n\"TotalGrade!K23\"\n\"COUNTIF(O5:O37,\"\"BA\"\")\"\n\"TotalGrade!B24\"\n\"AttendingList0!B23\"\n\"COUNTIF(O5:O37,\"\"BB\"\")\"\n\"TotalGrade!K12\"\n\"COUNTIF(O5:O37,\"\"CB\"\")\"\n\"TotalGrade!B20\"\n\"AttendingList0!B19\"\n\"TotalGrade!K20\"\n\"COUNTIF(O5:O37,\"\"CC\"\")\"\n\"TotalGrade!B15\"\n\"AttendingList0!B14\"\n\"COUNTIF(O5:O37,\"\"DC\"\")\"\n\"COUNTIF(O5:O37,\"\"DD\"\")\"\n\"SUM(K5:K37)\"\n\"COUNTIF(O5:O37,\"\"FF\"\")\"\n\"K38/33\"\n\"N39/4*100\"\n\"MIN(K5:K37)\"\n\"MAX(K5:K37)\"\n\"STDEVA(K5:K37)\"\n\"STDEVA(N5:N32,N33:N37)\"\n\"SUM(J5:J32)/28\"\n\"STDEVA(J5:J32)\"\n\"C12*C11\"\n\"C9*C10/C11\"\n\"C14*((1-1/((1+C15/C11)^(C11*C12)))/(C15/C11))\"\n\"C9*(1/(1+C15/C11)^(C11*C12))\"\n\"C14*((1-1/((1+C15/C11)^(C11*C12)))/(C15/C11))+C9*(1/((1+C15/C11)^(C11*C12)))\"\n\"C19-C9\"\n\"C9\"\n\"C12\"\n\"C14\"\n\"C19\"\n\"D31*((1-1/((1+D36/D34)^(D34*D30)))/(D36/D34))+D29*(1/((1+D36/D34)^(D34*D30)))-D32\"\n\"(1+D36/D34)^D34-1\"\n\"SUM(B3:K3)\"\n\"L3/10\"\n\"AVERAGE(B3:B45)\"\n\"E19\"\n\"$B$3+($B$4-$B$3)/((1+$B$5*(-B12)^$B$6)^(1-1/$B$6))\"\n\"(C12-D12)^2\"\n\"LN(-B12)\"\n\"SUM(E14:E18)\"\n\"U13\"\n\"IF(H13=\"\"real\"\",\"\"Correct!\"\",(IF(H13=\"\"fake\"\",\"\"Nope, they're real!\"\",\"\"\"\")))\"\n\"IF(H26=\"\"fake\"\",\"\"Correct!\"\",(IF(H26=\"\"real\"\",\"\"Wrong, they're fake!\"\",\"\"\"\")))\"\n\"COUNTIF(J13:J262,\"\"Correct!\"\")\"\n\"SUM(C5:N5)\"\n\"SUM(O5:O15)\"\n\"SUM(O16:O18)\"\n\"SUM(O25:O26)\"\n\"SUM(O27:O33)\"\n\"SUM(O34:O38)\"\n\"SUM(O39:O44)\"\n\"SUM(O45:O48)\"\n\"SUM(C5:C55)\"\n\"IF((D5=0),0,SUM(D5/$D$15))\"\n\"SUM(D5:D14)\"\n\"SUM('12 month planner'!P15)\"\n\"IF((D23=0),0,SUM(D23/$D$34))\"\n\"SUM('12 month planner'!P18)\"\n\"SUM('12 month planner'!P21)\"\n\"SUM('12 month planner'!P24)\"\n\"SUM('12 month planner'!P26)\"\n\"SUM('12 month planner'!P33)\"\n\"SUM('12 month planner'!P38)\"\n\"SUM('12 month planner'!P44)\"\n\"SUM('12 month planner'!P48)\"\n\"SUM('12 month planner'!P52)\"\n\"SUM('12 month planner'!P55)\"\n\"SUM(D23:D33)\"\n\"SUM(D15-D34)\"\n\"IF((E5=0),0,SUM(E5/$E$39))\"\n\"SUM(E5:E37)\"\n\"IF((E45=0),0,SUM(E45/$E$52))\"\n\"SUM(E45:E51)\"\n\"SUM(E39-E52)\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E14\"\n\"SUM(E5:E10)\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E14\"\n\"SUM(E5:E10)\"\n\"IF(E17=0,\"\"Budget NOT yet allocated\"\",IF(C3-E17=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E17<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E17=0,\"\"Budget NOT yet allocated\"\",IF(C3-E17=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E17<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E17\"\n\"SUM(E5:E13)\"\n\"IF(E25=0,\"\"Budget NOT yet allocated\"\",IF(C12-E25=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C12-E25<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E25=0,\"\"Budget NOT yet allocated\"\",IF(C12-E25=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C12-E25<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C12-E25\"\n\"SUM(E14:E21)\"\n\"C3-E10\"\n\"C3-H10\"\n\"SUM(E4:E7)\"\n\"IF(E8<0,E8*-1+SUM(H4:H7),E8+SUM(H4:H7))\"\n\"IF(E25=0,\"\"Budget NOT yet allocated\"\",IF(C13-E25=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C13-E25<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E25=0,\"\"Budget NOT yet allocated\"\",IF(C13-E25=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C13-E25<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"+C13-E25\"\n\"SUM(E15:E21)\"\n\"IF(E15=0,\"\"Budget NOT yet allocated\"\",IF(C3-E15=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E15<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E15=0,\"\"Budget NOT yet allocated\"\",IF(C3-E15=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E15<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E15\"\n\"SUM(E5:E11)\"\n\"IF(E18=0,\"\"Budget NOT yet allocated\"\",IF(C3-E18=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E18<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E18=0,\"\"Budget NOT yet allocated\"\",IF(C3-E18=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E18<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E18\"\n\"SUM(E5:E14)\"\n\"IF(E12=0,\"\"Budget NOT yet allocated\"\",IF(C3-E12=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E12<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E12=0,\"\"Budget NOT yet allocated\"\",IF(C3-E12=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E12<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E12\"\n\"SUM(E5:E8)\"\n\"IF(E15=0,\"\"Budget NOT yet allocated\"\",IF(C3-E15=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E15<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E15=0,\"\"Budget NOT yet allocated\"\",IF(C3-E15=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E15<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E15\"\n\"SUM(E5:E11)\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E14=0,\"\"Budget NOT yet allocated\"\",IF(C3-E14=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E14<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E14\"\n\"SUM(E5:E10)\"\n\"IF(E16=0,\"\"Budget NOT yet allocated\"\",IF(C3-E16=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E16<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"IF(E16=0,\"\"Budget NOT yet allocated\"\",IF(C3-E16=0, \"\"Well Done! You have balanced the Budget.\"\",IF(C3-E16<0, \"\"Overspent\"\", \"\"Underspent\"\")))\"\n\"C3-E16\"\n\"SUM(E5:E12)\"\n\"SUM(B4:E4)\"\n\"F7/F4\"\n\"F8/F4\"\n\"B5*B4\"\n\"F7/$F$7\"\n\"B6*B4\"\n\"B7-B8\"\n\"6%*B7\"\n\"200*3\"\n\"100*3\"\n\"2%*B7\"\n\"SUM(B10:B13)\"\n\"B9-B14\"\n\"IF(B15>0,B15*28%,0)\"\n\"B4+2\"\n\"B6+3\"\n\"ROUND(SUM(B7:E7)/4*0.65+A7*0.1+F7*0.25,0)\"\n\"HLOOKUP(G7,$D$39:$J$40,2)\"\n\"B3+C3+D3+E3+F3+G3+H3+I3+J3+K3\"\n\"L3/$L$33\"\n\"P3+Q3+R3+S3\"\n\"T3/$T$33\"\n\"W3+X3+Y3\"\n\"Z3/$Z$33\"\n\"(L3+T3+Z3)/Sheet3!$D$9\"\n\"AVERAGE(W3:W32)\"\n\"MEDIAN(W3:W32)\"\n\"AVERAGE(Sheet1!H3:H32)\"\n\"AVERAGE(Sheet1!I3:I32)\"\n\"AVERAGE(Sheet1!J3:J32)\"\n\"AVERAGE(Sheet1!N3:N32)\"\n\"AVERAGE(Sheet1!U3:U32)\"\n\"AVERAGE(Sheet1!AA3:AA33)\"\n\"SUM(B5:B10)\"\n\"AVERAGE(B5:B10)\"\n\"SUM(B15:B19)\"\n\"AVERAGE(B15:B19)\"\n\"SUM(B34:B36)\"\n\"AVERAGE(B34:B36)\"\n\"B12*0.02\"\n\"B21*0.02\"\n\"B38*0.35\"\n\"B31*0.15\"\n\"B40*0.01\"\n\"6/8\"\n\"7/12\"\n\"18/24\"\n\"12/18\"\n\"8/11\"\n\"6/6\"\n\"7/8\"\n\"10/12\"\n\"20/24\"\n\"15/18\"\n\"9/11\"\n\"9/12\"\n\"19/24\"\n\"16/18\"\n\"8/8\"\n\"11/12\"\n\"22/24\"\n\"17/18\"\n\"24/24\"\n\"11/11\"\n\"3/8\"\n\"5/12\"\n\"10/24\"\n\"9/18\"\n\"6/24\"\n\"2/11\"\n\"3/6\"\n\"4/8\"\n\"8/12\"\n\"10/18\"\n\"6/11\"\n\"AVERAGE(N2)\"\n\"AVERAGE(M2)\"\n\"AVERAGE(G2,L2)\"\n\"AVERAGE(K2)\"\n\"AVERAGE(H2:J2)\"\n\"$O$26*O2+$P$26*P2+$Q$26*Q2+$R$26*R2+$S$26*S2\"\n\"LOOKUP(T2,$G$29:$G$33,$F$29:$F$33)\"\n\"SUM(O26:S26)\"\n\"7/8\"\n\"10/12\"\n\"20/24\"\n\"15/18\"\n\"18/24\"\n\"9/11\"\n\"6/6\"\n\"85/100\"\n\"4/8\"\n\"8/12\"\n\"24/24\"\n\"10/18\"\n\"10/24\"\n\"6/11\"\n\"3/6\"\n\"57/100\"\n\"6/8\"\n\"7/12\"\n\"12/18\"\n\"8/11\"\n\"75/100\"\n\"9/12\"\n\"19/24\"\n\"16/18\"\n\"83/100\"\n\"8/8\"\n\"11/12\"\n\"22/24\"\n\"17/18\"\n\"11/11\"\n\"99/100\"\n\"3/8\"\n\"5/12\"\n\"9/18\"\n\"6/24\"\n\"2/11\"\n\"38/100\"\n\"SUM(G5:AA5)\"\n\"240000/0.4825\"\n\"21780/0.4825\"\n\"55200-(1200*12)-(600*12)+(500*12)\"\n\"55200-(1200*12)-(600*12)+(500*12)+5000+10000+10000\"\n\"500*15\"\n\"4297*15\"\n\"5.67*30*50*2\"\n\"4.22*30*2*15\"\n\"SUM(G5:G12)\"\n\"G15*(1/1.12)\"\n\"G14*G15\"\n\"(164-26)*30*13\"\n\"(7.44-0.78)*12*30*18\"\n\"330*12*30\"\n\"715*60*1.1\"\n\"780*60*1.1\"\n\"SUM(G19:G24)\"\n\"C27\"\n\"SUM(G27:AA27)\"\n\"C16\"\n\"SUM(G16:AA16)\"\n\"C30/C31\"\n\"C30-C31\"\n\"4*4.54596\"\n\"8*18\"\n\"4.54596\"\n\"2500/0.797\"\n\"15*18\"\n\"5*18\"\n\"4800/0.797\"\n\"3*4.54596\"\n\"16*18\"\n\"4200/0.712\"\n\"2.5*4.54596\"\n\"1*18\"\n\"5000/0.712\"\n\"6/8*100\"\n\"4*18\"\n\"AVERAGE(T3:T11)\"\n\"AVERAGE(AE3:AE10)\"\n\"13.66759*12\"\n\"2.181987*12\"\n\"C34*31\"\n\"(C37/4.54596)*50\"\n\"C40-C41\"\n\"(8+0+8+15+15+16+1+0+4)/9\"\n\"(0+0+0+5+0+0+1+0+1)/9\"\n\"C47*31*12\"\n\"C48*12*31\"\n\"C50*18\"\n\"10.44*12\"\n\"9.66*12\"\n\"C63*70\"\n\"Y13\"\n\"C74*12\"\n\"C75*31\"\n\"C76*35\"\n\"AB13\"\n\"AC13\"\n\"31*C86\"\n\"C87*50*6\"\n\"AD13\"\n\"C93*15\"\n\"6/9*100\"\n\"5/9*100\"\n\"2/9*100\"\n\"1/9*100\"\n\"7/9*100\"\n\"AE13\"\n\"SUM(G5:AA5)\"\n\"240000/0.4825\"\n\"21780/0.4825\"\n\"55200-(1200*12)-(600*12)+(500*12)\"\n\"55200-(1200*12)-(600*12)+(500*12)+10000+25000+(500*5)+50000+5000\"\n\"500*15\"\n\"4297*15\"\n\"4275*7.5\"\n\"5.67*30*50*6\"\n\"5.75*1*30*120\"\n\"4.22*30*12*15\"\n\"(500*2)+(60*2)\"\n\"3*3000\"\n\"5*3000\"\n\"4*700\"\n\"3*700\"\n\"5*700\"\n\"6*700\"\n\"2*700\"\n\"0.1*G5+0.1*G6\"\n\"SUM(G5:G17)\"\n\"G19*(1/1.12)\"\n\"G18*G19\"\n\"(164-26)*30*13\"\n\"(7.44-0.78)*12*30*18\"\n\"300*12*30\"\n\"((11*10*52)/8)*60\"\n\"((20*6*52)/8)*60\"\n\"0.1*(H11)+0.1*(H13)\"\n\"0.02*G5+0.02*G6\"\n\"SUM(G23:G29)\"\n\"C32\"\n\"SUM(G32:AA32)\"\n\"C20\"\n\"SUM(G20:AA20)\"\n\"C35/C36\"\n\"C35-C36\"\n\"4*4.54596\"\n\"8*18\"\n\"4.54596\"\n\"2500/0.797\"\n\"15*18\"\n\"5*18\"\n\"4800/0.797\"\n\"3*4.54596\"\n\"16*18\"\n\"4200/0.712\"\n\"2.5*4.54596\"\n\"1*18\"\n\"5000/0.712\"\n\"6/8*100\"\n\"4*18\"\n\"AVERAGE(T3:T11)\"\n\"AVERAGE(AE3:AE10)\"\n\"13.66759*12\"\n\"2.181987*12\"\n\"C34*31\"\n\"(C37/4.54596)*50\"\n\"C40-C41\"\n\"(8+0+8+15+15+16+1+0+4)/9\"\n\"(0+0+0+5+0+0+1+0+1)/9\"\n\"C47*31*12\"\n\"C48*12*31\"\n\"C50*18\"\n\"10.44*12\"\n\"9.66*12\"\n\"C63*70\"\n\"Y13\"\n\"C74*12\"\n\"C75*31\"\n\"C76*35\"\n\"AB13\"\n\"AC13\"\n\"31*C86\"\n\"C87*50*6\"\n\"AD13\"\n\"C93*15\"\n\"6/9*100\"\n\"5/9*100\"\n\"2/9*100\"\n\"1/9*100\"\n\"7/9*100\"\n\"AE13\"\n\"20+4\"\n\"14+4\"\n\"18+5\"\n\"41+5\"\n\"15+5\"\n\"10+4\"\n\"64+5\"\n\"17+5\"\n\"47+2\"\n\"17+5/2\"\n\"59+5\"\n\"19+4\"\n\"77+3\"\n\"16+5\"\n\"17+4\"\n\"18+5/2\"\n\"16+4\"\n\"16+3\"\n\"13+4\"\n\"20+5\"\n\"43+3\"\n\"12/2+3\"\n\"20+2\"\n\"52+5\"\n\"11+5\"\n\"38+6\"\n\"14+5\"\n\"12+5\"\n\"58+2+3\"\n\"51+3\"\n\"46+5\"\n\"24+1+3\"\n\"13+5/2\"\n\"20+3\"\n\"64+2\"\n\"17/2+2\"\n\"14+2\"\n\"18+4\"\n\"12+5/2\"\n\"78+2+5\"\n\"80+2+5\"\n\"19+5\"\n\"20+5/2\"\n\"34+4\"\n\"6+4\"\n\"8+4\"\n\"36+3\"\n\"43+5\"\n\"57+2+3\"\n\"12+3\"\n\"57+2+5\"\n\"38+3\"\n\"43+7\"\n\"50+2+5\"\n\"11+4\"\n\"5+2\"\n\"MAX(B33:B68)\"\n\"MAX(G2:G68)\"\n\"MAX(N17:N68)\"\n\"MIN(B2:B68)\"\n\"MIN(N17:N69)\"\n\"AVERAGE(B2:B68)\"\n\"STDEV(B2:B68)\"\n\"IF(L4=0,\"\"na\"\",K4/L4)\"\n\"IF(K4=0,\"\"na\"\",O4)\"\n\"IF(M4>J4,\"\"YES\"\",\"\"no\"\")\"\n\"IF(O4= \"\"no\"\",\"\"see listings on form\"\",\"\"continual improvement \"\")\"\n\"AVERAGE(M4:M10)\"\n\"IF(M11>#REF!-0.01,\"\"YES\"\",\"\"no\"\")\"\n\"AVERAGE(M13:M14)\"\n\"AVERAGE(M17:M20)\"\n\"AVERAGE(M23:M23)\"\n\"IF(M24>J23-0.01,\"\"YES\"\",\"\"no\"\")\"\n\"AVERAGE(M29:M34)\"\n\"IF(SUM(L37:L42)<1,\"\"na\"\",AVERAGE(M37:M42))\"\n\"IF(SUM(L45:L45)<1,\"\"na\"\",AVERAGE(M45:M45))\"\n\"IF(M46>#REF!,\"\"YES\"\",\"\"no\"\")\"\n\"IF(SUM(L49:L51)<1,\"\"na\"\",AVERAGE(M49:M51))\"\n\"IF(M52>J51,\"\"YES\"\",\"\"no\"\")\"\n\"IF(SUM(L54:L58)<1,\"\"na\"\",AVERAGE(M54:M58))\"\n\"(SUM(B4:F4)+SUM(G4:M4)+N4)/(COUNT(B4:F4)*100+COUNT(G4:J4)*15+COUNT(K4:M4)*30+COUNT(N4)*150)*100\"\n\"IF(O4<59.4,\"\"F\"\",IF(O4<69.4,\"\"D\"\",IF(O4<79.4,\"\"C\"\",IF(O4<89.4,\"\"B\"\",\"\"A\"\"))))\"\n\"AVERAGE(B4:B46)\"\n\"STDEV(B4:B46)\"\n\"COUNTIF(B$4:B$46,\"\">=90\"\")\"\n\"COUNTIF(N$4:N$46,\"\">=135\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<90\"\")-COUNTIF(B$4:B$46,\"\"<80\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<135\"\")-COUNTIF(N$4:N$46,\"\"<120\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<80\"\")-COUNTIF(B$4:B$46,\"\"<70\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<120\"\")-COUNTIF(N$4:N$46,\"\"<105\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<70\"\")-COUNTIF(B$4:B$46,\"\"<60\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<105\"\")-COUNTIF(N$4:N$46,\"\"<90\"\")\"\n\"COUNTIF(B$4:B$46,\"\"<60\"\")\"\n\"COUNTIF(N$4:N$46,\"\"<90\"\")\"\n\"MINVERSE(B10:D12)\"\n\"MINVERSE(C18:E20)\"\n\"MMULT(C33:E35,C25:C27)\"\n\"SUM(B4:E4)\"\n\"SUM(B7:B13)\"\n\"B4-B14\"\n\"B3-G3\"\n\"(C3-B3)+(E3-D3)+(G3-F3)\"\n\"H3+H4+H5+H6+H7\"\n\"E2*H2\"\n\"SUM(B19:B24)\"\n\"ABS(B17-4.31)\"\n\"ABS(B17-4.29)\"\n\"D17*D17\"\n\"SUM(B17:B22)\"\n\"B24/6\"\n\"ABS(D28-D29)\"\n\"D30/D29*100\"\n\"D24/6\"\n\"D33/D28*100\"\n\"(SQRT(E24/5))\"\n\"D36/D28*100\"\n\"AVERAGE(B18:B23)\"\n\"AVEDEV(B18:B23)\"\n\"STDEV(B18:B23)\"\n\"2-LOG(D7)\"\n\"10+C7\"\n\"2-LOG10(B4)\"\n\"$C$11*A4+$C$12\"\n\"2-LOG10(B5)\"\n\"2-LOG10(B6)\"\n\"2-LOG10(B7)\"\n\"2-LOG10(B8)\"\n\"SLOPE(C4:C8,A4:A8)\"\n\"INTERCEPT(C4:C8,A4:A8)\"\n\"CORREL(C4:C8,A4:A8)\"\n\"AVERAGE(F8:F21)\"\n\"AVERAGE(H8:H20)\"\n\"AVERAGE(J7:J16)\"\n\"AVERAGE(L8:L22)\"\n\"SUM(E12:H12)\"\n\"SUM(E12:E14)\"\n\"E12/E$15\"\n\"E$15*(E21-$I21)^2/$I21\"\n\"SUM(I29:I31)\"\n\"(4-1)*(3-1)\"\n\"CHIDIST(I33,I34)\"\n\"CHIINV(I39,I34)\"\n\"D9/D8\"\n\"1-D10\"\n\"1-D13/2\"\n\"NORMINV(D14,0,1)\"\n\"D16*D16\"\n\"D8/(D8+D17)\"\n\"D10+D17/(2*D8)\"\n\"D16*SQRT(D10*D11/D8 +D17/(4*D8*D8))\"\n\"D22*(D24-D26)\"\n\"D29*D8\"\n\"D22*(D24+D26)\"\n\"D30*D8\"\n\"G23-E23\"\n\"G24-F24\"\n\"F25-F23\"\n\"(F24-E23)^2/(F24+E23)\"\n\"(2-1)*(2-1)\"\n\"CHIDIST(E30,E31)\"\n\"IF(E32>E27, \"\"ACCEPT  Ho\"\", \"\"REJECT  Ho\"\")\"\n\"AVERAGE(D11:D100)\"\n\"' Homework'!AN10\"\n\"Quizes!M5\"\n\"B7*$B$5+C7*$C$5+0*$D$5+E7*E5+F7*F5\"\n\"VLOOKUP(G7,$K$7:$L$18,2,TRUE)\"\n\"VLOOKUP(H7,$L$7:$M$18,2,FALSE)\"\n\"FREQUENCY($G$7:$G$48,S7:S8)\"\n\"FREQUENCY($I$7:$I$48,W7:W8)\"\n\"B8*$B$5+C8*$C$5+0*$D$5+E8*E5+F8*F5\"\n\"B9*$B$5+C9*$C$5+0*$D$5+E9*E5+F9*F5\"\n\"B10*$B$5+C10*$C$5+D10*$D$5+0*E5+F10*F5\"\n\"B11*$B$5+0*$C$5+D11*$D$5+E11*E5+F11*F5\"\n\"B12*$B$5+0*$C$5+D12*$D$5+E12*E5+F12*F5\"\n\"B13*$B$5+0*$C$5+D13*$D$5+E13*E5+F13*F5\"\n\"1\"\n\"B14*$B$5+0*$C$5+D14*$D$5+E14*E5+F14*F5\"\n\"B15*$B$5+0*$C$5+D15*$D$5+E15*E5+F15*F5\"\n\"B16*$B$5+0*$C$5+D16*$D$5+E16*E5+F16*F5\"\n\"B17*$B$5+0*$C$5+D17*$D$5+E17*E5+F17*F5\"\n\"B18*$B$5+0*$C$5+D18*$D$5+E18*E5+F18*F5\"\n\"FREQUENCY($I$7:$I$48,V18:V20)\"\n\"B19*$B$5+C19*$C$5+D19*$D$5+0*E5+F19*F5\"\n\"B20*$B$5+C20*$C$5+0*$D$5+E20*E5+F20*F5\"\n\"B21*$B$5+0*$C$5+D21*$D$5+E21*E5+F21*F5\"\n\"AVERAGE(I7:I48)\"\n\"SUM(X7:X18)\"\n\"B22*$B$5+0*$C$5+D22*$D$5+E22*E5+F22*F5\"\n\"B23*$B$5+C23*$C$5+0*$D$5+E23*E5+F23*F5\"\n\"B24*B5+0*C5+D24*D5+E24*E5+F24*F5\"\n\"B25*B5+C25*C5+D24*D5+0*E5+F25*F5\"\n\"B26*$B$5+0*$C$5+D26*$D$5+E26*E5+F26*F5\"\n\"B27*$B$5+0*$C$5+D27*$D$5+E27*E5+F27*F5\"\n\"B28*B5+D28*D5+E28*E5+F28*F5\"\n\"B29*$B$5+C29*$C$5+D29*$D$5+0*E5+F29*F5\"\n\"B30*$B$5+0*$C$5+D30*$D$5+E30*E5+F30*F5\"\n\"B31*$B$5+C31*$C$5+D31*$D$5+0*E5+F31*F5\"\n\"B32*$B$5+C32*$C$5+D32*$D$5+0*E5+F32*F5\"\n\"B33*$B$5+0*$C$5+D33*$D$5+E33*E5+F33*F5\"\n\"B34*$B$5+0*$C$5+D34*$D$5+E34*E5+F34*F5\"\n\"B35*$B$5+C35*$C$5+0*$D$5+E35*E5+F35*F5\"\n\"B36*$B$5+0*$C$5+D36*$D$5+E36*E5+F36*F5\"\n\"B37*$B$5+0*$C$5+D37*$D$5+E37*E5+F37*F5\"\n\"B38*$B$5+0*$C$5+D38*$D$5+E38*E5+F38*F5\"\n\"B39*$B$5+0*$C$5+D39*$D$5+E39*E5+F39*F5\"\n\"B40*$B$5+C40*$C$5+0*$D$5+E40*E5+F40*F5\"\n\"B41*$B$5+C41*$C$5+0*$D$5+E41*E5+F41*F5\"\n\"B42*$B$5+C42*$C$5+0*$D$5+E42*E5+F42*F5\"\n\"B43*$B$5+C43*$C$5+0*$D$5+E43*E5+F43*F5\"\n\"B44*$B$5+0*$C$5+D44*$D$5+E44*E5+F44*F5\"\n\"B45*$B$5+0*$C$5+D45*$D$5+E45*E5+F45*F5\"\n\"B46*$B$5+0*$C$5+D46*$D$5+E46*E5+F46*F5\"\n\"SUM(T7:T43)\"\n\"B47*$B$5+0*$C$5+D47*$D$5+E47*E5+F47*F5\"\n\"MIN(B7:B48)\"\n\"AVERAGE(B7:B48)\"\n\"MAX(B7:B48)\"\n\"SUM(B9:AL9)-15-20\"\n\"SUM(B10:AL10)\"\n\"AM10/AM9\"\n\"AM11/AM9\"\n\"AM12/AM9\"\n\"AM13/AM9\"\n\"AM14/AM9\"\n\"AM15/AM9\"\n\"AM16/AM9\"\n\"AM17/AM9\"\n\"AM18/AM9\"\n\"AM19/AM9\"\n\"AM20/AM9\"\n\"AM21/AM9\"\n\"AM22/AM9\"\n\"AM23/AM9\"\n\"AM24/AM9\"\n\"AM25/AM9\"\n\"AM26/AM9\"\n\"AM27/AM9\"\n\"AM28/AM9\"\n\"AM29/AM9\"\n\"AM30/AM9\"\n\"AM31/AM9\"\n\"AM32/AM9\"\n\"AM33/AM9\"\n\"AM34/AM9\"\n\"AM35/AM9\"\n\"AM36/AM9\"\n\"AM37/AM9\"\n\"AM38/AM9\"\n\"AM39/AM9\"\n\"AM40/AM9\"\n\"AM41/AM9\"\n\"AM42/AM9\"\n\"AM43/AM9\"\n\"AM44/AM9\"\n\"AM45/AM9\"\n\"AM46/AM9\"\n\"AM47/AM9\"\n\"AM48/AM9\"\n\"AM49/AM9\"\n\"AM50/AM9\"\n\"AVERAGE(AM10:AM50)\"\n\"AM51/AM9\"\n\"SUM(B4:H4)\"\n\"L4/$L$4\"\n\"MIN(B5:B46)\"\n\"MIN(E5:E45)\"\n\"AVERAGE(B5:B46)\"\n\"AVERAGE(E5:E45)\"\n\"MAX(B5:B46)\"\n\"MAX(E5:E45)\"\n\"SUM(C6:C74)\"\n\"SUM(B4:K4)\"\n\"AVERAGE(L4:L42)\"\n\"SUM(C5:K5)\"\n\"SUM(C6:G6)\"\n\"SUM(H6:K6)\"\n\"AVERAGE(C6:C44)\"\n\"SUM(B4:G4)\"\n\"SUM(B7:H7)\"\n\"AVERAGE(B4:B42)\"\n\"SUM(B5:E5)\"\n\"B$7+B11\"\n\"$C$21*$B17*B27\"\n\"$C17*B$6\"\n\"B33+B39\"\n\"SUMPRODUCT(B5:C5,B53:C53)+SUMPRODUCT(B45:C47,B57:C59)\"\n\"SUM(B57:C57)\"\n\"SUM(B57:B59)\"\n\"3*B53\"\n\"A4+(B4/24)-1.48\"\n\"A3+(B3/24)-1.71\"\n\"SUM(F3)\"\n\"SUM($H$2,G3)\"\n\"SUM(G3,F4)\"\n\"PRODUCT(C4,D4,G2)\"\n\"PRODUCT(C4,D4)\"\n\"PRODUCT(C5,D5,G2)\"\n\"PRODUCT(C6,D6,G2)\"\n\"PRODUCT(C7,D7,G2)\"\n\"PRODUCT(C8,D8,G2)\"\n\"PRODUCT(C11,D11,G2)\"\n\"PRODUCT(C12,D12,G2)\"\n\"PRODUCT(C13,D13,G2)\"\n\"PRODUCT(C14,D14,G2)\"\n\"PRODUCT(C17,D17,G2)\"\n\"PRODUCT(C20,D20,G2)\"\n\"PRODUCT(C21,D21,G2)\"\n\"PRODUCT(C22,D22,G2)\"\n\"PRODUCT(C23,D23,G2)\"\n\"PRODUCT(C24,D24,G2)\"\n\"PRODUCT(C25,D25,G2)\"\n\"PRODUCT(C26,D26,G2)\"\n\"PRODUCT(C27,D27,G2)\"\n\"PRODUCT(C28,D28,G2)\"\n\"PRODUCT(C31,D31,G2)\"\n\"PRODUCT(C32,D32,G2)\"\n\"PRODUCT(C33,D33,G2)\"\n\"PRODUCT(C34,D34,G2)\"\n\"PRODUCT(C35,D35,G2)\"\n\"PRODUCT(C36,D36,G2)\"\n\"PRODUCT(C37,D37,G2)\"\n\"PRODUCT(C40,D40,G2)\"\n\"PRODUCT(C41,D41,G2)\"\n\"PRODUCT(C42,D42,G2)\"\n\"PRODUCT(C43,D43,G2)\"\n\"PRODUCT(C44,D44,G2)\"\n\"PRODUCT(C47,D47,G2)\"\n\"PRODUCT(C48,D48,G2)\"\n\"PRODUCT(C49,D49,G2)\"\n\"PRODUCT(C52,D52,G2)\"\n\"PRODUCT(C53,D53,G2)\"\n\"PRODUCT(C54,D54,G2)\"\n\"PRODUCT(C58,D58,G2)\"\n\"PRODUCT(C59,D59,G2)\"\n\"PRODUCT(C61,D61,G2)\"\n\"PRODUCT(C62,D62,G2)\"\n\"PRODUCT(C65,D65,G2)\"\n\"PRODUCT(C66,D66,G2)\"\n\"PRODUCT(C69,D69,G2)\"\n\"PRODUCT(C70,D70,G2)\"\n\"PRODUCT(C73,D73,G2)\"\n\"PRODUCT(C73:D73)\"\n\"PRODUCT(C74,D74,G2)\"\n\"PRODUCT(C75,D75,G2)\"\n\"PRODUCT(C78,175)\"\n\"SUM(E4:E81)\"\n\"PRODUCT(F82,0.09)\"\n\"PRODUCT(F85,0.9)\"\n\"PRODUCT(F82,C85,0.09)\"\n\"PRODUCT(F82,0.18)\"\n\"PRODUCT(F82,C86,0.18)\"\n\"PRODUCT(C87,D87)\"\n\"PRODUCT(C91,1000)\"\n\"SUM(E82,E85:E108)\"\n\"B5+2\"\n\"B5+5\"\n\"A5\"\n\"B5+7\"\n\"B9+3\"\n\"B12+4\"\n\"B13+1\"\n\"AVERAGE(D7:D21)\"\n\"D25\"\n\"B29*D29\"\n\"SUM(E29:E38)\"\n\"AVERAGE(C6:C14)\"\n\"AVERAGE(C16:C17)\"\n\"SUM(C20*0.55)+(C21*0.25)+(C15*5)+(C18*0.15)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"NOW()\"\n\"SUM(J10:M10)\"\n\"SUM(R10:AF10)\"\n\"MIN(500,SUM(J14:M14,P14:Q14))\"\n\"SUM(R14:AE14)\"\n\"\"\"1-22\"\"\"\n\"\"\"3-16\"\"\"\n\"\"\"18-100\"\"\"\n\"\"\"103-118\"\"\"\n\"\"\"403-405\"\"\"\n\"\"\"345-352\"\"\"\n\"\"\"90-96\"\"\"\n\"\"\"123-138, 140-161\"\"\"\n\"\"\"352-386\"\"\"\n\"\"\"161-177\"\"\"\n\"\"\"180-218\"\"\"\n\"\"\"223-254\"\"\"\n\"\"\"257-291\"\"\"\n\"\"\"95-133\"\"\"\n\"\"\"295-313\"\"\"\n\"SUM(B3:E3)/170*100*0.3\"\n\"F3+0.2*H3+0.2*I3/80*100+0.3*J3\"\n\"SUM(B7:E7)/170*100*0.35\"\n\"IF(K7>88,\"\"A\"\",IF(K7>78,\"\"B\"\",IF(K7>65,\"\"C\"\",IF(K7>55,\"\"D\"\",IF(K7<=55,\"\"F\"\")))))\"\n\"AVERAGE(D17:D92)\"\n\"STDEV(D17:D92)\"\n\"MEDIAN(D17:D92)\"\n\"MODE(D17:D92)\"\n\"PERCENTILE(D17:D92,0.25)\"\n\"PERCENTILE(D17:D92,0.75)\"\n\"MAX(D17:D92)\"\n\"MIN(D17:D92)\"\n\"(D17/D$4*D$5+F17/F$4*F$5+H17/H$4*H$5+J17/J$4*J$5+L17/L$4*L$5+N17/N$4*N$5+P17/P$4*P$5+Q17/Q$4*Q$5)*100\"\n\"E17+G17+I17+K17+M17+O17\"\n\"60+8\"\n\"68+28\"\n\"47.5+23\"\n\"77+16\"\n\"88.5+1\"\n\"62+24\"\n\"147+10\"\n\"(S102 * S$100) + (U102 * U$100)\"\n\"SUM(E2:E47)\"\n\"SUM(E2:E29)\"\n\"SUM(E2:E19)\"\n\"[1]!wbname()\"\n\"[1]!wbname()\"\n\"(C10/C2)\"\n\"(C11/C2)\"\n\"0.03\"\n\"0.17\"\n\"0.12\"\n\"0.71\"\n\"B3+B5\"\n\"1-B12\"\n\"B6-B3\"\n\"B16/B13\"\n\"0.2\"\n\"B24*B22\"\n\"1-B25\"\n\"B36+B41*B23\"\n\"B36/B43\"\n\"FALSE\"\n\"ZF102\"\n\"B7\"\n\"No_Bid\"\n\"ZF102+No_Bid\"\n\"B7+No_Bid\"\n\"1-C45\"\n\"SUM(B44:B45)\"\n\"$G$17\"\n\"ZA102\"\n\"$B$13\"\n\"Bid___Good_Weather\"\n\"IF($E$6=$C$13,$J$10,\"\"If forecast good then \"\")\"\n\"IF(E6<>$C$13,$M$20,\"\"\"\")\"\n\"$B$15\"\n\"L6*N6+L8*N8\"\n\"IF($E$6=$C$13,\"\"\"\",\"\"otherwise \"\")\"\n\"IF(E6<>$C$13,$M$30,\"\"\"\")\"\n\"1-ZA102\"\n\"$B$14\"\n\"Bid___Bad_Weather\"\n\"$C$13\"\n\"MAX(K7,K12)\"\n\"IF(I10>K12,$B$15,$B$16)\"\n\"ZA102\"\n\"UseU\"\n\"$B$16\"\n\"1-ZA102\"\n\"C27\"\n\"MAX(I10,I25)\"\n\"IF(F17>I25,$C$13,$C$14)\"\n\"D27\"\n\"$C$15\"\n\"$C$16\"\n\"1-C19\"\n\"_xlnm.Print_Area\"\n\"C27\"\n\"C19*ZA102\"\n\"D19*(1-ZA102)\"\n\"D27\"\n\"C20*ZA102\"\n\"D20*(1-ZA102)\"\n\"$C$14\"\n\"J20*L20+J30*L30\"\n\"C28\"\n\"C23/_xlnm.Print_Area\"\n\"C24/Predict_Bad_Weather\"\n\"D28\"\n\"Predict_Bad_Weather\"\n\"C23+D23\"\n\"C28\"\n\"D28\"\n\"0\"\n\"$I$10\"\n\"$I$25\"\n\"ZA102*Bid___Good_Weather+(1-ZA102)*0\"\n\"oNG-Weather_Forecast_Cost\"\n\"2*B27\"\n\"2*B28\"\n\"(B27+B28)\"\n\"PI()\"\n\"(2*B30*B35/1000/B26)^1.5/B34^3*B35/100000\"\n\"100000/D32\"\n\"0.0820578/1000\"\n\"A11\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 7'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Education Activities, p. 8'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 9'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Human Needs Activities, p. 10'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 11'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 12'!D22\"\n\"'Environment Activities, p. 13'!$D22\"\n\"'Environment Activities, p. 13'!#REF!\"\n\"'Environment Activities, p. 13'!$D27\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Public Safety, p. 14'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"'Member Development, p. 15'!$D22\"\n\"-LOG(A7, 2)\"\n\"A7*B7\"\n\"C7+C8+C9+C10+C11\"\n\"SUM(C19:C44)\"\n\"26*((1/26)*-LOG((1/26),2))\"\n\"F4/50\"\n\"G4+(50-F4)*4/7/100\"\n\"G4+(50-F4)*4/7/100\"\n\"(B4+C4+D4+E4)/40\"\n\"(B4+C4+D4+E4)/40*1/10+H4*9/10\"\n\"SUM((0.8*A14)+(0.15*B14)+(0.05*C14))\"\n\"AVERAGE(A2:A12)\"\n\"-(ROW()-4) *$B$10\"\n\"-C4\"\n\"COS($B$15*D4*1000)\"\n\"SIN($B$15*D4*1000)\"\n\"($B$6*1000*E4-$B$14*$B$24*F4)/1000\"\n\"$B$14*$B$23*F4/1000\"\n\"SQRT(G4*G4+H4*H4)\"\n\"ATAN2(G4,H4)*180/PI()\"\n\"$B$23*E4\"\n\"$B$6*1000/$B$14*F4+$B$24*E4\"\n\"ATAN2(K4,L4)*180/PI()\"\n\"ATAN2(G5,H5)*180/PI()\"\n\"ATAN2(K5,L5)*180/PI()\"\n\"ATAN2(G6,H6)*180/PI()\"\n\"ATAN2(K6,L6)*180/PI()\"\n\"ATAN2(G7,H7)*180/PI()\"\n\"ATAN2(K7,L7)*180/PI()\"\n\"ATAN2(G8,H8)*180/PI()\"\n\"ATAN2(K8,L8)*180/PI()\"\n\"ATAN2(G9,H9)*180/PI()\"\n\"ATAN2(K9,L9)*180/PI()\"\n\"ATAN2(G10,H10)*180/PI()\"\n\"ATAN2(K10,L10)*180/PI()\"\n\"ATAN2(G11,H11)*180/PI()\"\n\"ATAN2(K11,L11)*180/PI()\"\n\"2*PI()*(8.854*(0.000000000001))*B5/LN(B4)\"\n\"ATAN2(G12,H12)*180/PI()\"\n\"ATAN2(K12,L12)*180/PI()\"\n\"2*(0.0000001)*LN(B4)\"\n\"ATAN2(G13,H13)*180/PI()\"\n\"ATAN2(K13,L13)*180/PI()\"\n\"SQRT(B13/B12)\"\n\"ATAN2(G14,H14)*180/PI()\"\n\"ATAN2(K14,L14)*180/PI()\"\n\"2*PI()*B9*SQRT(B13*B12)\"\n\"ATAN2(G15,H15)*180/PI()\"\n\"ATAN2(K15,L15)*180/PI()\"\n\"1/B9/SQRT(B13*B12)/1000\"\n\"ATAN2(G16,H16)*180/PI()\"\n\"ATAN2(K16,L16)*180/PI()\"\n\"1/SQRT(B12*B13)\"\n\"ATAN2(G17,H17)*180/PI()\"\n\"ATAN2(K17,L17)*180/PI()\"\n\"1/SQRT(4*PI()*(0.0000001)*8.854*(0.000000000001)*B5)\"\n\"ATAN2(G18,H18)*180/PI()\"\n\"ATAN2(K18,L18)*180/PI()\"\n\"B7*ABS(B8)\"\n\"ATAN2(G19,H19)*180/PI()\"\n\"ATAN2(K19,L19)*180/PI()\"\n\"IF(B8>0,SQRT(B7*B7-B19*B19),-SQRT(B7*B7-B19*B19))\"\n\"ATAN2(G20,H20)*180/PI()\"\n\"ATAN2(K20,L20)*180/PI()\"\n\"B7*1000/B6\"\n\"ATAN2(G21,H21)*180/PI()\"\n\"ATAN2(K21,L21)*180/PI()\"\n\"-ACOS(B8)*180/PI()\"\n\"ATAN2(G22,H22)*180/PI()\"\n\"ATAN2(K22,L22)*180/PI()\"\n\"B21*COS(B22*PI()/180)\"\n\"ATAN2(G23,H23)*180/PI()\"\n\"ATAN2(K23,L23)*180/PI()\"\n\"B21*SIN(B22*PI()/180)\"\n\"ATAN2(G24,H24)*180/PI()\"\n\"ATAN2(K24,L24)*180/PI()\"\n\"B6*1000/B21*COS(B22*PI()/180)\"\n\"ATAN2(G25,H25)*180/PI()\"\n\"ATAN2(K25,L25)*180/PI()\"\n\"B6*1000/B21*SIN(B22*PI()/180)\"\n\"ATAN2(G26,H26)*180/PI()\"\n\"ATAN2(K26,L26)*180/PI()\"\n\"B6*1000/B21\"\n\"ATAN2(G27,H27)*180/PI()\"\n\"ATAN2(K27,L27)*180/PI()\"\n\"(B6-B14*B23/1000)/2\"\n\"ATAN2(G28,H28)*180/PI()\"\n\"ATAN2(K28,L28)*180/PI()\"\n\"-B14*B24/1000/2\"\n\"ATAN2(G29,H29)*180/PI()\"\n\"ATAN2(K29,L29)*180/PI()\"\n\"(B6+B14*B23/1000)/2\"\n\"ATAN2(G30,H30)*180/PI()\"\n\"ATAN2(K30,L30)*180/PI()\"\n\"B14*B24/1000/2\"\n\"ATAN2(G31,H31)*180/PI()\"\n\"ATAN2(K31,L31)*180/PI()\"\n\"SQRT((B28*B28+B29*B29)/(B30*B30+B31*B31))*COS(ATAN2(B28,B29)-ATAN2(B30,B31))\"\n\"ATAN2(G32,H32)*180/PI()\"\n\"ATAN2(K32,L32)*180/PI()\"\n\"SQRT((B28*B28+B29*B29)/(B30*B30+B31*B31))*SIN(ATAN2(B28,B29)-ATAN2(B30,B31))\"\n\"ATAN2(G33,H33)*180/PI()\"\n\"ATAN2(K33,L33)*180/PI()\"\n\"SQRT(B32*B32+B33*B33)\"\n\"ATAN2(G34,H34)*180/PI()\"\n\"ATAN2(K34,L34)*180/PI()\"\n\"(1+B34)/(1-B34)\"\n\"ATAN2(G35,H35)*180/PI()\"\n\"ATAN2(K35,L35)*180/PI()\"\n\"ATAN2(G36,H36)*180/PI()\"\n\"ATAN2(K36,L36)*180/PI()\"\n\"ATAN2(G37,H37)*180/PI()\"\n\"ATAN2(K37,L37)*180/PI()\"\n\"ATAN2(G38,H38)*180/PI()\"\n\"ATAN2(K38,L38)*180/PI()\"\n\"ATAN2(G39,H39)*180/PI()\"\n\"ATAN2(K39,L39)*180/PI()\"\n\"ATAN2(G40,H40)*180/PI()\"\n\"ATAN2(K40,L40)*180/PI()\"\n\"ATAN2(G41,H41)*180/PI()\"\n\"ATAN2(K41,L41)*180/PI()\"\n\"ATAN2(G42,H42)*180/PI()\"\n\"ATAN2(K42,L42)*180/PI()\"\n\"ATAN2(G43,H43)*180/PI()\"\n\"ATAN2(K43,L43)*180/PI()\"\n\"ATAN2(G44,H44)*180/PI()\"\n\"ATAN2(K44,L44)*180/PI()\"\n\"ATAN2(G45,H45)*180/PI()\"\n\"ATAN2(K45,L45)*180/PI()\"\n\"ATAN2(G46,H46)*180/PI()\"\n\"ATAN2(K46,L46)*180/PI()\"\n\"ATAN2(G47,H47)*180/PI()\"\n\"ATAN2(K47,L47)*180/PI()\"\n\"ATAN2(G48,H48)*180/PI()\"\n\"ATAN2(K48,L48)*180/PI()\"\n\"ATAN2(G49,H49)*180/PI()\"\n\"ATAN2(K49,L49)*180/PI()\"\n\"ATAN2(G50,H50)*180/PI()\"\n\"ATAN2(K50,L50)*180/PI()\"\n\"ATAN2(G51,H51)*180/PI()\"\n\"ATAN2(K51,L51)*180/PI()\"\n\"ATAN2(G52,H52)*180/PI()\"\n\"ATAN2(K52,L52)*180/PI()\"\n\"ATAN2(G53,H53)*180/PI()\"\n\"ATAN2(K53,L53)*180/PI()\"\n\"ATAN2(G54,H54)*180/PI()\"\n\"ATAN2(K54,L54)*180/PI()\"\n\"(C7-$C$18)\"\n\"(D7-$D$18)\"\n\"E7*F7\"\n\"AVERAGE(C7:C16)\"\n\"SUM(G7:G16)/(C20-1)\"\n\"STDEV(C7:C16)\"\n\"COUNT(C7:C16)\"\n\"G18/(C19*D19)\"\n\"15/SQRT(C20)\"\n\"(C18-C25)/C27\"\n\"NORMDIST(C29,0,1,FALSE)\"\n\"(C7-C8)/D10 *SQRT($C$12*$C$13/($C$11*($C$11-1)))\"\n\"(E7-E8)/F10 *SQRT($C$12*$C$13/($C$11*($C$11-1)))\"\n\"SUM(C6:D6)\"\n\"E6/E8\"\n\"(1-G6)\"\n\"SUM(C6:C7)\"\n\"D8/E8\"\n\"D6/E8\"\n\"1-D10\"\n\"(G10-D10*G6)/SQRT(D10*D11*G6*G7)\"\n\"(C7*D6-C6*D7)/(D24*D25*E8*E8)\"\n\"SUM(C8:AD8)\"\n\"SUM(AG8:AH8)\"\n\"$AN8\"\n\"$AT8\"\n\"AX8\"\n\"AL8\"\n\"IF($BH8>70,\"\"passing\"\",\"\"no\"\")\"\n\"AR9\"\n\"B3+2\"\n\"B4+5\"\n\"B5-2.93333\"\n\"D5^2\"\n\"C5-2\"\n\"D5*F5\"\n\"SUM(B5:B7)\"\n\"8.8/3\"\n\"6/3\"\n\"H8/((SQRT(E8))*(SQRT(G8)))\"\n\"B23-2.777767\"\n\"C23-3.166667\"\n\"K23-1.777667\"\n\"L23-2.333333\"\n\"B26/3\"\n\"SQRT(N26)\"\n\"(H26)/((SQRT(E26))*(SQRT(G26)))\"\n\"(2*(B29))/(1+B29)\"\n\"SUM(B38:B41)/4\"\n\"(C37+C39+C40+C41)/4\"\n\"(D37+D38+D40+D41)/4\"\n\"(E37+E38+E39+E41)/4\"\n\"SUM(F37:F40)/4\"\n\"(B38+B39+B40+B41+C39+C40+C41+D40+D41+E41)/10\"\n\"(B38+B39+B40+(-1*B41)+C39+C40+D40+(-1*C41)+(-1*D41)+(-1*E41))/10\"\n\"(5*B44)/(1+(4*B44))\"\n\"(C39+C40+C41+D40+D41+E41)/6\"\n\"(B39+B40+B41+D40+D41+E41)/6\"\n\"(B38+B40+B41+C40+C41+E41)/6\"\n\"(B38+B39+B41+C39+C41+D41)/6\"\n\"(B38+B39+B40+C39+C40+D40)/6\"\n\"(4*B46)/(1+(3*B46))\"\n\"(B69*B70)/51\"\n\"(C69*C70)/51\"\n\"(D69*D70)/51\"\n\"(E69*E70)/51\"\n\"SUM(B75:B78)\"\n\"(C79-B79)/(51-B79)\"\n\"SUM(B87:B91)\"\n\"SUM(B92:F92)/5\"\n\"B92\"\n\"C92\"\n\"D92\"\n\"E92\"\n\"F92\"\n\"B100^2\"\n\"B100/5\"\n\"(C100-(B101/5))/4\"\n\"1-((B102*(5-B102))/(5*B103))\"\n\"(5/(5-1))*(1-((B102*(5-B102))/(5*B103)))\"\n\"(SUM(B108:F108))/5\"\n\"1-H108\"\n\"H108*I108\"\n\"(C121-(B122/5))/5\"\n\"(5/(5-1))*(1-((J113)/B124))\"\n\"SUM(G7:K7)\"\n\"SUM(G7:G17)\"\n\"AVERAGE(B5:B34)\"\n\"MEDIAN(B5:B34)\"\n\"$B$28\"\n\"$C$28\"\n\"F4+F7*F5\"\n\"F9*F5\"\n\"F4-F7*F5\"\n\"F8*F5\"\n\"$F$10\"\n\"$F$4\"\n\"$F$11\"\n\"$H$10\"\n\"$F$5\"\n\"AVERAGE(B8:B27)\"\n\"$H$11\"\n\"AVERAGE(B34:F34)\"\n\"MAX(B34:F34)-MIN(B34:F34)\"\n\"AVERAGE(G34:G43)\"\n\"$G$44-$B$48*$H$44\"\n\"$H$44*$B$50\"\n\"$G$44+$B$48*$H$44\"\n\"B49*H45\"\n\"B67/100\"\n\"$C$92\"\n\"SQRT(E68*(1-E68)/100)\"\n\"E68+3*E69\"\n\"A76+1\"\n\"$H$90\"\n\"AVERAGE(H67:H89)\"\n\"AVERAGE(C67:C91)\"\n\"B4*B3\"\n\"B5*B6+B7*B8+B9\"\n\"E3-E4\"\n\"E3/E4\"\n\"E3/(B5*B6)\"\n\"E4/(B7*B8)\"\n\"SUM(D6:F6)\"\n\"SUM(D6:I6)\"\n\"SUM(D6:F6)\"\n\"SUM(D6:G6)\"\n\"SUM(D30:G30)\"\n\"SUM(B2:G2)\"\n\"SUM(B2:E2)\"\n\"'Q4 Homework'!H2\"\n\"B3*0.3+C3*0+D3*0.4+E3*0.2\"\n\"B4*0.3+C4*0.1+D4*0.4+E4*0.2\"\n\"(F4/300)*100\"\n\"'Q4 Summary'!G4\"\n\"AVERAGE(D2:G2)\"\n\"IF(H2<60,\"\"F\"\",IF(H2<70,\"\"D\"\",IF(H2<80,\"\"C\"\",IF(H2<90,\"\"B\"\",IF(H2<101,\"\"A\"\")))))\"\n\"AVERAGE(D2:D10)\"\n\"SUM(B2:G2)\"\n\"SUM(B2:E2)\"\n\"'Q4 Homework'!H2\"\n\"B3*0.3+C3*0.1+D3*0.4+D3*0.2\"\n\"(F4/300)*100\"\n\"'Q4 Summary'!G4\"\n\"AVERAGE(D2:G2)\"\n\"IF(H2<60,\"\"F\"\",IF(H2<70,\"\"D\"\",IF(H2<80,\"\"C\"\",IF(H2<90,\"\"B\"\",IF(H2<101,\"\"A\"\")))))\"\n\"AVERAGE(D2:D10)\"\n\"SUM(B2:G2)\"\n\"(SUM(B2:G2)-MIN(B2:G2))/(COUNT(B2:G2)-1)\"\n\"SUM(R2:V2)\"\n\"(SUM(R2:V2)-MIN(R2:V2))/(COUNT(R2:V2)-1)\"\n\"SUM(Y2:AB2)\"\n\"AVERAGE(Y2:AB2)\"\n\"(I2*C$1)+(Q2*K$1)+(X2*S$1)+(AD2*Z$1)\"\n\"SUM(E42)\"\n\"SUM(E9)\"\n\"SUM(C9:C39)\"\n\"SUM(C9:C21)\"\n\"SUM(B9)\"\n\"SUM(D6:I6)\"\n\"SUM(C9/$C$6)\"\n\"SUM(D9:CC9)\"\n\"SUM(H2)*3+SUM(J2:J3)+SUM(L2)/12\"\n\"(SUM(B2:B4)*4+SUM(D2:D3)+SUM(F2:F3)/12)\"\n\"SUM(C10 - C11)\"\n\"COS(RAND()*A7)\"\n\"D5/C5*100\"\n\"G5/C5*100\"\n\"E5/C5*100\"\n\"F5/C5\"\n\"K5*8.4+H5+I5*3.3-J5*2\"\n\"((F9/80)*$B$4)+((G9/50)*$B$5)+((H9/60)*$B$6)+((I9/100)*$B$7)\"\n\"SUM(F21:I21)\"\n\"VLOOKUP(N21, $E$2:$F$14,2,TRUE)\"\n\"((B18/$D$2)*$C$2)+((C18/$D$3)*$C$3)+((D18/$D$4)*$C$4)+((E18/$D$5)*$C$5)+((F18/$D$6)*$C$6)\"\n\"VLOOKUP(G18,$I$2:$J$14,2,TRUE)\"\n\"((B18/$D$2)*$C$2)+((C18/$D$3)*$C$3)+((D18/$D$4)*$C$4)+((E18/$D$5)*$C$5)+((F18/$D$6)*$C$6)\"\n\"VLOOKUP(G18,$I$2:$J$14,2,TRUE)\"\n\"((E17/$D$4)*$C$4)+((F17/$D$5)*$C$5)+((G17/$D$6)*$C$6)+((H17/$D$7)*$C$7)+((I17/$D$2)*$C$2)+((J17/$D$9)*$C$9)+((K17/$D$3)*$C$3)+((L17/$D$8)*$C$8)\"\n\"VLOOKUP(M17,$F$2:$G$14,2,TRUE)\"\n\"((D19/$C$2)*$B$2)+((E19/$C$3)*$B$3)+((F19/$C$4)*$B$4)+((G19/$C$5)*$B$5)+((H19/$C$6)*$B$6)\"\n\"VLOOKUP(I19,$G$2:$H$14,2,TRUE)\"\n\"((F21/$E$4)*$D$4)+((G21/$E$5)*$D$5)+((H21/$E$6)*$D$6)\"\n\"VLOOKUP(I21,$H$5:$I$17,2,TRUE)\"\n\"+AVERAGE(B2:G2)\"\n\"MIN(B2:G2)\"\n\"MAX(B2:G2)\"\n\"SUM(B2:G2)\"\n\"SUM(B9:B12)\"\n\"SUM(B2:B7,B9:B12)\"\n\"SUM(B15:G15)\"\n\"SUM(C43:C46)\"\n\"Sheet2!P5\"\n\"Sheet3!P4\"\n\"(C3*0.125)+(D3*25)+(E3*25)+(F3*25)+(G3*12.5)\"\n\"VLOOKUP(I3,$K$5:$L$17,2,TRUE)\"\n\"MAX(C3:C17)\"\n\"MIN(C4:C18)\"\n\"MIN(D3:D17)\"\n\"AVERAGE(D3:D17)\"\n\"MAX(C5:L5)\"\n\"MIN(C5:L5)\"\n\"AVERAGE(C5:L5)\"\n\"MAX(C5:C19)\"\n\"MIN(C5:C19)\"\n\"AVERAGE(C5:C19)\"\n\"C4/$D$24\"\n\"E4/$F$24\"\n\"G4/$H$24\"\n\"I4/$J$24\"\n\"K4/$L$24\"\n\"MAX(D4,F4,H4,J4,L4)\"\n\"MIN(D4,F4,H4,J4,L4)\"\n\"AVERAGE(D4,F4,H4,J4,L40)\"\n\"MAX(C4:C18)\"\n\"MIN(C4:C18)\"\n\"AVERAGE(C4:C18)\"\n\"D6+E6+F6\"\n\"G6/H6\"\n\"A6+1\"\n\"N6/7\"\n\"L6/3\"\n\"D6+E6+F6+G6+H6+I6+J6+K6\"\n\"A6+1\"\n\"N10/8\"\n\"((D6*5)+(E6*10)+(F6*10)+(G6*25)+(H6*15)+(I6*10)+(J6*25))/100\"\n\"A6+1\"\n\"SUM(D6:D46)/41\"\n\"SUM(H6:H46)/40\"\n\"SUM(F6:S6)\"\n\"+(T6-$T$54)/$T$54\"\n\"SUM(W6:Y6)\"\n\"+(Z6-$Z$54)/$Z$54\"\n\"+(AF6-$AF$54)/$AF$54\"\n\"+(AL6-$AL$54)/$AL$54\"\n\"+(T6/$T$55)+Z6/100+AF6/100+AL6/100\"\n\"+(AO6-$AO$54)/$AO$54\"\n\"SUM(Sheet2!G31:T31)\"\n\"SUM(F6:F52)/47\"\n\"SUM(H6:H52)/46\"\n\"SUM(J6:J52)/43\"\n\"SUM(K6:K52)/41\"\n\"SUM(L6:L52)/37\"\n\"SUM(M6:M52)/39\"\n\"SUM(N6:N52)/38\"\n\"SUM(O6:O52)/35\"\n\"SUM(P6:P52)/18\"\n\"SUM(Q6:Q52)/32\"\n\"SUM(R6:R52)/27\"\n\"SUM(S6:S52)/26\"\n\"F54/F55\"\n\"E6+(AG6*0.5)+(AI6*0.25)+(AK6*0.35)\"\n\"SUM(G6:T6)\"\n\"IF(U6*U$58>75,(U6*U$58-75)*U$59+75,U6*U$58)\"\n\"(+V6+Y6+AB6+AE6-MIN(V6,Y6,AB6,AE6))/3\"\n\"AM6+1\"\n\"SUM(C6:C52)/47\"\n\"SUM(I6:I52)/46\"\n\"SUM(K6:K52)/43\"\n\"SUM(L6:L52)/41\"\n\"SUM(M6:M52)/37\"\n\"SUM(N6:N52)/39\"\n\"SUM(O6:O52)/38\"\n\"SUM(P6:P52)/35\"\n\"SUM(Q6:Q52)/18\"\n\"SUM(R6:R52)/32\"\n\"+SUM(U6:U52)/47\"\n\"+SUM(G55:T55)-100\"\n\"MEDIAN(C6:C52)\"\n\"75/U56\"\n\"(25/(MAX(U6:U52)*U58-75))\"\n\"SUM(C6:F6)\"\n\"SUM(I6:M6)\"\n\"SUM(I6:I52)/47\"\n\"J5\"\n\"K5/(D5+E5)\"\n\"1.5*11\"\n\"(14*6)+(4*6)\"\n\"3*14\"\n\"(1 *5)+(4*3)\"\n\"3*(1*5)+(5*6)\"\n\"2*(2*16)\"\n\"3*(1*5)\"\n\"3*(45/60*6)\"\n\"SUM(D5:D19)\"\n\"SUM(E5:E15)\"\n\"SUM(H5:H20)\"\n\"K26/D26\"\n\"(3*40/60)*5\"\n\"(3*4)\"\n\"(4*2)\"\n\"(2.5*16)\"\n\"(19*3)\"\n\"(1*8)\"\n\"(4*7)+(2*4)\"\n\"SUM(D26:D37)\"\n\"SUM(E27:E36)\"\n\"SUM(F26:F36)\"\n\"SUM(H26:H35)\"\n\"SUM(D5+D6+D7+D8+D9+D10+D11+D12+D13+D14+D15+D16+D18+D19+D26+D27+D28+D29+D30+D31+D32+D34+D35+D36)\"\n\"SUM(D5+D9+D11+D15+D31)\"\n\"SUM(D7+D14+D17)\"\n\"SUM(D5+D10+D18+D35+D36)\"\n\"SUM(D8+D26+D27+D28+D34)\"\n\"SUM(D32+D33)\"\n\"SUM(D6+D13+D15+D19)\"\n\"SUM(D7+D14+D17)\"\n\"SUM(D12+D16)\"\n\"SUM(E5+E14+E15+E29+E31)\"\n\"SUM(E5+E15+E31)\"\n\"SUM(E5)\"\n\"SUM(E15)\"\n\"SUM(E14)\"\n\"SUM(F5+F6+F8+F9+F10+F11+F12+F13+F14+F15+F16+F18+F19+F26+F27+F28+F29+F30+F31+F32+F34+F35+F36)\"\n\"SUM(F5+F9+F11+F15+F31)\"\n\"SUM(F14+F30)\"\n\"SUM(F5+F10+F18+F35+F36)\"\n\"SUM(F8+F26+F27+F28+F34)\"\n\"SUM(F32+F33)\"\n\"SUM(F6+F13+F15+F19)\"\n\"SUM(F14+F17)\"\n\"SUM(F12+F16)\"\n\"SUM(G5+G6+G7+G8+G9+G10+G11+G12+G13+G14+G15+G16+G18+G19+G26+G27+G28+G29+G30+G31+G32+G34+G35+G36)\"\n\"SUM(G5+G9+G11+G15+G31)\"\n\"SUM(G7+G14+G30)\"\n\"SUM(G5+G10+G18+G35+G36)\"\n\"SUM(G8+G27+G28+G26+G34)\"\n\"SUM(G32+G33)\"\n\"SUM(G6+G13+G15+G19)\"\n\"SUM(G7+G14+G17+G30)\"\n\"SUM(G12+G16)\"\n\"'Raw Data'!A4\"\n\"'Raw Data'!A4\"\n\"'Raw Data'!F4\"\n\"C1\"\n\"'Raw Data'!D5\"\n\"'Raw Data'!J5\"\n\"Q2*R2\"\n\"SUM(J28+J29+J31+J33+J36+J38+J42)\"\n\"SUM(J30+J37+J40+J43)\"\n\"SUM(J34+J35+J39)\"\n\"SUM(S2+S3+S5+S7+S10+S12+S15+S16)\"\n\"SUM(S6)\"\n\"SUM(S4+S11+S14+S17)\"\n\"SUM(S9+S13+S8)\"\n\"IF(B4=\"\"bullying\"\",1,0)\"\n\"T3/T2\"\n\"SUM(C2:C17)\"\n\"C1\"\n\"J18+K18\"\n\"'Raw Data'!A4\"\n\"'Raw Data'!F4\"\n\"C1\"\n\"SUM(J2+J3+J5+J7+J10+J12+J15+J16)\"\n\"SUM(J6)\"\n\"SUM(J4+J11+J14+J17)\"\n\"SUM(J8+J9+J13)\"\n\"SUM(K2+K3+K5+K7+K10+K12+K15+K16)\"\n\"SUM(K6)\"\n\"SUM(K4+K11+K14+K17)\"\n\"SUM(K8+K9+K13)\"\n\"SUM(L18)\"\n\"Q2\"\n\"159-107\"\n\"K152+(K153/2)\"\n\"SUM(C2:C12)\"\n\"E16*D16\"\n\"SUM(D16+D17+D18+D19+D22+D23+D24+D25+D26)\"\n\"SUM(F16+F17+F18+F19+F22+F23+F24+F25+F26)\"\n\"B31/B30\"\n\"C31/D13\"\n\"SUM(B16+B17+B18+B19+B22+B23+B24+B25+B26)\"\n\"SUM(B20)\"\n\"SUM(C16+C17+C18+C19+C22+C23+C24+C25+C26)\"\n\"'Raw Data'!I4\"\n\"G3\"\n\"M3\"\n\"'Raw Data'!K5\"\n\"IF(G4=1,$K4*$E4,0)\"\n\"IF(G4=1,$K4*$F4,0)\"\n\"SUM(E4:E19)\"\n\"SUM(F5:F16)\"\n\"SUM(G4:G18)\"\n\"SUM(M20:P20)\"\n\"SUM(Q20:T20)\"\n\"'Age Charts'!B23\"\n\"'Age Charts'!B24\"\n\"M20/M21\"\n\"S37\"\n\"K3\"\n\"'Raw Data'!I26\"\n\"IF(G24=1,$K24*$F24,0)\"\n\"SUM(M35:O35)\"\n\"SUM(P35:R35)\"\n\"SUM(E24:E34)\"\n\"SUM(F28:F34)\"\n\"SUM(M35:R35)\"\n\"SUM(E20+E35)\"\n\"SUM(F35+F20)\"\n\"'Age Charts'!B44\"\n\"'Age Charts'!B45\"\n\"'Age Data'!K3\"\n\"SUM(A2:A17)\"\n\"SUM(B3:B14)\"\n\"SUM(C2:C16)\"\n\"SUM(A2+A7+A10+A12+A15+A16)\"\n\"SUM(A8)\"\n\"SUM(A4)\"\n\"SUM(B3+B5)\"\n\"B6\"\n\"SUM(B8+B9+B13)\"\n\"SUM(B4+B11+B14)\"\n\"'Age Data'!M22\"\n\"'Age Data'!Q22\"\n\"'Age Data'!E23\"\n\"'Age Data'!K23\"\n\"C29\"\n\"A30+A31+A32+A33+A36+A37+A38+A39+A40\"\n\"B35\"\n\"'Age Data'!M37\"\n\"'Age Data'!P37\"\n\"102000+46140+2000+9300+9400+6100+18500+19000+10000+3500+3528\"\n\"80099.76+46267.16+3741.07+9300+9400+6099.99+18499.93+18999.96+10004.6+2645\"\n\"4800+7700+5356+1700\"\n\"4930.14+7904.42+5556+1078.99\"\n\"8300+500\"\n\"12984.41+167.34\"\n\"4000+1500+2500+2200+1700+1300+1700+1100+1300+1000+1000+300+300\"\n\"10033.75+526.6+3340.79+1518.11+1029.3+800+717.07+500+1791.98+811.5+3019.82+72.49+153.54\"\n\"1978.26+1661.19+1641.69-567.86+1060.31+597.29+2192.16\"\n\"2500+1000+300+2200+1150+250+1440+60\"\n\"2920+5000+4000+3700+25000+8200+3330+250\"\n\"675.06+5431+5613.68+2317.78+24790+2050.46+39365.4+8348.47+16291.47+635.12\"\n\"1800+17500+3300\"\n\"2387.64+18152.94+4307.9\"\n\"4420+750+1000+200\"\n\"3153.17+9.92+307.63+5.98\"\n\"300+250+650\"\n\"730\"\n\"200+900+300+3100+800+2000\"\n\"1428.19+863.4+779.94\"\n\"4050+1200+2000+400+100\"\n\"5229.72+577.9+2837.51+341.26\"\n\"600+450+300\"\n\"296.6+48.3+406.38+420.9\"\n\"38870+68236\"\n\"SUM(B3:B21)\"\n\"75803.12+39134.53+4210.88+8100+10300+2998.46+18499.92+19999.92+10000\"\n\"4833.2+8400.48+2800+4234.35\"\n\"8880.91+307.3-65.96-688.14\"\n\"13766.02+1721.17+3674.19+369.08+1393.4+817.48+1704.79+163.31+1002.03+623.5+921.91+149.54+102.02+100\"\n\"902.12+3252.2+1466.08+1113.93+196.61\"\n\"2245.54+4674+3681.91+2355.49+24640+4356.06+2091.75+528.87\"\n\"602.73+16966.55+3460.25+862\"\n\"4540.01+109.5+53.46+108.48\"\n\"314.49+360+70\"\n\"100+1389.82+2647.86\"\n\"4744.84+409.98+640.44+189.38+39.9+755.09\"\n\"69+394.87+1199.89\"\n\"72979.41\"\n\"SUM(B3:B21)\"\n\"66600.04+32463.04+3893.84+8100+9500+3700+18500+19999.92+11000.22+0.04\"\n\"4822.9+7237.98\"\n\"18566.45+1224.95+2993.06\"\n\"629.2+2058.29+2356.69+424.07\"\n\"69.85+4671+2457.03+2232.86+24690+3006.84+3790.68\"\n\"652.88+13564.3+2846.17+874.1\"\n\"2819.83+927.11+423.61\"\n\"162.22+291.09+346\"\n\"440.83+1168.79\"\n\"5198.3+784.2+1416.45+1437.63\"\n\"446.62+31\"\n\"SUM(B3:B21)\"\n\"SUM(B3+B8+B12+B17+B22+B25+B29+B31+B33+B35+B39+B46+H3+H5+H9+H12+H29+H38+H49+B58+B61+B66+H58+H68+H76)\"\n\"SUM(B3+B8+B12+B17+B22+B25+B29+B31+B33+B35+B39+B46+H3+H5+H9+H12+H29+H38+H49+B58+B61+B66+H58+H68+H76)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(B3+B8+B12+B17+B22+B25+B29+B31+B33+B35+B39+B46+H3+H5+H9+H12+H29+H38+H49+B58+B61+B66+H58+H68+H76)\"\n\"SUM(B3+B8+B12+B17+B22+B25+B29+B31+B33+B35+B39+B46+H3+H5+H9+H12+H29+H38+H49+B58+B61+B66+H58+H68+H76)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(H78+I78+J78+K78)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(D87:E105)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"SUM(H80+D106)\"\n\"Sheet2!P5\"\n\"Sheet3!P4\"\n\"(C3*0.125)+(D3*25)+(E3*25)+(F3*25)+(G3*12.5)\"\n\"VLOOKUP(I3,$K$5:$L$17,2,TRUE)\"\n\"(C4*0.125)+(D4*0.25)+(E4*0.25)+(F4*0.25)+(G4*0.125)\"\n\"MAX(C3:C17)\"\n\"MIN(C3:C17)\"\n\"AVERAGE(C3:C17)\"\n\"MAX(C5:L5)\"\n\"MIN(C5:L5)\"\n\"AVERAGE(C5:L5)\"\n\"MAX(C5:C19)\"\n\"MIN(C5:C19)\"\n\"AVERAGE(C5:C19)\"\n\"C4/$D$24\"\n\"E4/$F$24\"\n\"G4/$H$24\"\n\"I4/$J$24\"\n\"K4/$L$24\"\n\"MAX(D4,F4,H4,J4,L4)\"\n\"MIN(D4,F4,H4,J4,L4)\"\n\"AVERAGE(D4,F4,H4,J4,L40)\"\n\"MAX(C4:C18)\"\n\"MIN(C4:C18)\"\n\"AVERAGE(C4:C18)\"\n\"SUM(C3:F3)\"\n\"IF(G3>18000,0.1*G3,\"\"\"\")\"\n\"IF(ISBLANK(B4),\"\"enter Y or N\"\",IF(AND(NOT(B4=\"\"Y\"\"),NOT(B4=\"\"N\"\")),\"\"enter Y or N\"\",\"\":-):-):-)\"\"))\"\n\"IF(IF(NOT(ISBLANK(B8)),1,0)+IF(NOT(ISBLANK(C8)),1,0)+IF(NOT(ISBLANK(D8)),1,0)+IF(NOT(ISBLANK(E8)),1,0)+IF(NOT(ISBLANK(F8)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(G8=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B8)),0,0)+IF(NOT(ISBLANK(C8)),1,0)+IF(NOT(ISBLANK(D8)),2,0)+IF(NOT(ISBLANK(E8)),3,0)+IF(NOT(ISBLANK(F8)),4,0))\"\n\"IF(OR(ISBLANK(B4),G8=\"\"No\"\",G10=\"\"No\"\",G12=\"\"No\"\",G14=\"\"No\"\",G16=\"\"No\"\",G18=\"\"No\"\",G20=\"\"No\"\",G22=\"\"No\"\",G24=\"\"No\"\",G26=\"\"No\"\",G28=\"\"No\"\",G30=\"\"No\"\",G32=\"\"No\"\",G34=\"\"No\"\",G36=\"\"No\"\"),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(B4=\"\"Y\"\",\"\"Yes\"\",\"\"No\"\"))\"\n\"IF(B40=\"\"No\"\",\"\" Applies to a child's functional abilities.\"\",\"\" :-):-):-)\"\")\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",SUM(H8:H36))\"\n\"B41/60\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(H8=0,1,0)+IF(H10=0,1,0)+IF(H12=0,1,0)+IF(H14=0,1,0)+IF(H16=0,1,0)+IF(H18=0,1,0)+IF(H20=0,1,0)+IF(H22=0,1,0)+IF(H24=0,1,0)+IF(H26=0,1,0)+IF(H28=0,1,0)+IF(H30=0,1,0)+IF(H32=0,1,0)+IF(H34=0,1,0)+IF(H36=0,1,0))\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(H8=1,1,0)+IF(H10=1,1,0)+IF(H12=1,1,0)+IF(H14=1,1,0)+IF(H16=1,1,0)+IF(H18=1,1,0)+IF(H20=1,1,0)+IF(H22=1,1,0)+IF(H24=1,1,0)+IF(H26=1,1,0)+IF(H28=1,1,0)+IF(H30=1,1,0)+IF(H32=1,1,0)+IF(H34=1,1,0)+IF(H36=1,1,0))\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(H8=2,1,0)+IF(H10=2,1,0)+IF(H12=2,1,0)+IF(H14=2,1,0)+IF(H16=2,1,0)+IF(H18=2,1,0)+IF(H20=2,1,0)+IF(H22=2,1,0)+IF(H24=2,1,0)+IF(H26=2,1,0)+IF(H28=2,1,0)+IF(H30=2,1,0)+IF(H32=2,1,0)+IF(H34=2,1,0)+IF(H36=2,1,0))\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(H8=3,1,0)+IF(H10=3,1,0)+IF(H12=3,1,0)+IF(H14=3,1,0)+IF(H16=3,1,0)+IF(H18=3,1,0)+IF(H20=3,1,0)+IF(H22=3,1,0)+IF(H24=3,1,0)+IF(H26=3,1,0)+IF(H28=3,1,0)+IF(H30=3,1,0)+IF(H32=3,1,0)+IF(H34=3,1,0)+IF(H36=3,1,0))\"\n\"IF(B39=\"\"No\"\",\"\"complete data\"\",IF(H8=4,1,0)+IF(H10=4,1,0)+IF(H12=4,1,0)+IF(H14=4,1,0)+IF(H16=4,1,0)+IF(H18=4,1,0)+IF(H20=4,1,0)+IF(H22=4,1,0)+IF(H24=4,1,0)+IF(H26=4,1,0)+IF(H28=4,1,0)+IF(H30=4,1,0)+IF(H32=4,1,0)+IF(H34=4,1,0)+IF(H36=4,1,0))\"\n\"(L5+L$85)*3.33333\"\n\"(L44+L$85)*3.333333\"\n\"SUM(L4:L40)+SUM(L44:L79)\"\n\"COUNT(L4:L40)+COUNT(L44:L79)\"\n\"L81/L82\"\n\"L84-L83\"\n\"(L4+L$81)*3.333333\"\n\"SUM(L4:L37)+SUM(L41:L75)\"\n\"COUNT(L4:L37)+COUNT(L41:L75)\"\n\"L77/L78\"\n\"L80-L79\"\n\"(L4+L$84)*3.3333333\"\n\"(L41+L$84)*3.333333\"\n\"SUM(L4:L37) + SUM(L41:L77)\"\n\"COUNT(L4:L37) + COUNT(L41:L77)\"\n\"L79/L80\"\n\"L83-L82\"\n\"(L82+L84)*3.3333333\"\n\"SUM(C6:I6)\"\n\"(J6-K6)/5\"\n\"N6+P6+R6+T6+U6+V6\"\n\"(W6-X6)/3\"\n\"Y6*0.75+L6*0.25\"\n\"C5*3.33+C$40\"\n\"22+1\"\n\"(E5*3.333)+E$40\"\n\"(G5*3.33)+G$40\"\n\"D5+F5+H5\"\n\"+MIN(D5,F5,H5)\"\n\"(I5-J5)/2\"\n\"SUM(M5:S5)\"\n\"(T5-U5)/5\"\n\"B5*B$2+K5*K$2+L5*L$2+V5*V$2+W5*W$2\"\n\"A5+1\"\n\"20+3\"\n\"15+4\"\n\"18+3\"\n\"23+2\"\n\"21+1\"\n\"26+1\"\n\"20+2\"\n\"84+4\"\n\"B16*B$2+K16*K$2+L16*L$2+V16*V$2+W16*W$2+5\"\n\"19+1\"\n\"18+2\"\n\"24+2\"\n\"18+1\"\n\"23+1\"\n\"25+1\"\n\"24+1\"\n\"SUM(C5:C33)\"\n\"COUNT(C5:C33)\"\n\"C36/C37\"\n\"C38*3.33+1\"\n\"E38*3.33\"\n\"'Complete GAS Bank'!A4\"\n\"'Complete GAS Bank'!C4\"\n\"'Complete GAS Bank'!A98\"\n\"'Complete GAS Bank'!C98\"\n\"'Complete GAS Bank'!A137\"\n\"'Complete GAS Bank'!C137\"\n\"'Complete GAS Bank'!A165\"\n\"'Complete GAS Bank'!C165\"\n\"'Complete GAS Bank'!A176\"\n\"'Complete GAS Bank'!C176\"\n\"'Complete GAS Bank'!#REF!\"\n\"SUM((0.5*A16)+(0.4*B16)+(0.1*C16))\"\n\"AVERAGE(A2:A14)\"\n\"((C6+(C7/96)*100))/2\"\n\"((C6+(C7/96)*100))/2\"\n\"((C11+C12+C13)/240)*100\"\n\"(C16/120)*100\"\n\"IF(C22>37,100,(C22/37)*100)\"\n\"IF(C22>37,100,(C22/37)*100)\"\n\"C8\"\n\"C36*D36\"\n\"(C14+C18)/2\"\n\"C20\"\n\"C29\"\n\"C26\"\n\"SUM(E36:E40)\"\n\"+(B6/$B$6)*100\"\n\"+(G6+H6)/I6\"\n\"+(L6/$L$6)*100\"\n\"+(M6/$M$6)*100\"\n\"+B8+C8+D8+E8+F8+J8+K8+L8+M8\"\n\"+MIN(B8:F8)\"\n\"+N8-O8\"\n\"+P8/$Q$5\"\n\"+IF(Q8>89, \"\"A\"\",IF(Q8>79, \"\"B\"\",IF(Q8>69, \"\"C\"\", IF(Q8>59, \"\"D\"\", \"\"F\"\"))))\"\n\"Z11\"\n\"Z11\"\n\"Z11*0.9\"\n\"Z11*0.9\"\n\"T4-0.1\"\n\"T4-0.1\"\n\"Z11*0.6\"\n\"Z11*0.6\"\n\"T2-0.1\"\n\"T2-0.1\"\n\"Z11*0.8\"\n\"Z11*0.8\"\n\"Z11*0.7\"\n\"Z11*0.7\"\n\"MAX(M13:M32)\"\n\"SUM(F11:W11)\"\n\"IF(E13=0,\"\"NA\"\", IF(E13>90,\"\"A\"\", IF(E13>80,\"\"B\"\", IF(E13>70,\"\"C\"\", IF(E13>60,\"\"D\"\", IF(E13<=60,\"\"F\"\"))))))\"\n\"(Z13/Z11)*100\"\n\"SUM(F13:Y13)\"\n\"(Z14/Z11)*100\"\n\"(Z15/Z11)*100\"\n\"(Z16/Z11)*100\"\n\"(Z17/Z11)*100\"\n\"(Z18/Z11)*100\"\n\"(Z19/Z11)*100\"\n\"(Z20/Z11)*100\"\n\"(Z21/Z11)*100\"\n\"(Z22/Z11)*100\"\n\"(Z23/Z11)*100\"\n\"(Z24/Z11)*100\"\n\"(Z25/Z11)*100\"\n\"(Z26/Z11)*100\"\n\"(Z27/Z11)*100\"\n\"(Z28/Z11)*100\"\n\"(Z29/Z11)*100\"\n\"(Z30/Z11)*100\"\n\"(Z31/Z11)*100\"\n\"(Z32/Z11)*100\"\n\"(Z33/Z11)*100\"\n\"(Z34/Z11)*100\"\n\"(Z35/Z11)*100\"\n\"(Z36/Z11)*100\"\n\"(Z37/Z11)*100\"\n\"(Z38/Z11)*100\"\n\"(Z39/Z11)*100\"\n\"(Z40/Z11)*100\"\n\"(Z41/Z11)*100\"\n\"(Z42/Z11)*100\"\n\"(Z43/Z11)*100\"\n\"(Z44/Z11)*100\"\n\"(Z45/Z11)*100\"\n\"(Z46/Z11)*100\"\n\"(Z47/Z11)*100\"\n\"(Z48/Z11)*100\"\n\"(Z49/Z11)*100\"\n\"(Z50/Z11)*100\"\n\"IF(E54=0,\"\"NA\"\", IF(E54>90,\"\"A\"\", IF(E54>80,\"\"B\"\", IF(E54>70,\"\"C\"\", IF(E54>60,\"\"D\"\", IF(E54<59.9,\"\"F\"\"))))))\"\n\"(Z54/Z53)*100\"\n\"Z11\"\n\"Z11\"\n\"Z11*0.9\"\n\"Z11*0.9\"\n\"T4-0.1\"\n\"T4-0.1\"\n\"Z11*0.6\"\n\"Z11*0.6\"\n\"T2-0.1\"\n\"T2-0.1\"\n\"Z11*0.8\"\n\"Z11*0.8\"\n\"Z11*0.7\"\n\"Z11*0.7\"\n\"MAX(N13:N33)\"\n\"SUM(F11:W11)\"\n\"IF(E13=0,\"\"NA\"\", IF(E13>90,\"\"A\"\", IF(E13>80,\"\"B\"\", IF(E13>70,\"\"C\"\", IF(E13>60,\"\"D\"\", IF(E13<=60,\"\"F\"\"))))))\"\n\"(Z13/Z11)*100\"\n\"SUM(F13:Y13)\"\n\"(Z14/Z11)*100\"\n\"(Z15/Z11)*100\"\n\"(Z16/Z11)*100\"\n\"(Z17/Z11)*100\"\n\"(Z18/Z11)*100\"\n\"(Z19/Z11)*100\"\n\"(Z20/Z11)*100\"\n\"(Z21/Z11)*100\"\n\"(Z22/Z11)*100\"\n\"(Z23/Z11)*100\"\n\"(Z24/Z11)*100\"\n\"(Z25/Z11)*100\"\n\"(Z26/Z11)*100\"\n\"(Z27/Z11)*100\"\n\"(Z28/Z11)*100\"\n\"(Z29/Z11)*100\"\n\"(Z30/Z11)*100\"\n\"(Z31/Z11)*100\"\n\"(Z32/Z11)*100\"\n\"(Z33/Z11)*100\"\n\"(Z34/Z11)*100\"\n\"(Z35/Z11)*100\"\n\"(Z36/Z11)*100\"\n\"(Z37/Z11)*100\"\n\"(Z38/Z11)*100\"\n\"(Z39/Z11)*100\"\n\"(Z40/Z11)*100\"\n\"(Z41/Z11)*100\"\n\"(Z42/Z11)*100\"\n\"(Z43/Z11)*100\"\n\"(Z44/Z11)*100\"\n\"(Z45/Z11)*100\"\n\"(Z46/Z11)*100\"\n\"(Z47/Z11)*100\"\n\"(Z48/Z11)*100\"\n\"(Z49/Z11)*100\"\n\"(Z50/Z11)*100\"\n\"(B5+C5+D5)/300\"\n\"(B5+B6+B7+B8+B9+B10+B11+B12+B13)/9\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"(E15+J15)/2\"\n\"SUM(D7:K7)\"\n\"L9/L$7*1\"\n\"NOW()\"\n\"F4+O4+AB4\"\n\"B20\"\n\"SUM(N7:Y7)\"\n\"IF(COUNTBLANK(E7:I7)>COUNTBLANK(E$7:I$7),0,\"\"\"\")\"\n\"IF(SUM(E$7:J$7)<>0,SUM(E7:J7)/SUM(E$7:J$7),0)\"\n\"IF((SUM(E$7:J$7)-MIN(E$7:J$7))<>0,(SUM(E7:J7)-MIN(E7:J7))/(SUM(E$7:J$7)-MIN(E$7:J$7)),0)\"\n\"IF(SUM(N$7:Y$7)<>0,SUM(N7:Y7)/SUM(N$7:Y$7),0)\"\n\"($F$4*L7+$O$4*Z7+$AB$4*L7)/($F$4*L$7+$O$4*Z$7+$AB$4*L$7)\"\n\"($F$4*K7+$O$4*Z7+$AB$4*AB7/100)/($F$4*K$7+$O$4*Z$7+$AB$4*AB$7/100)\"\n\"($F$4*L7+$O$4*Z7+$AB$4*AB7/100)/($F$4*L$7+$O$4*Z$7+$AB$4*AB$7/100)\"\n\"IF(ROUNDUP(100*AD9,2)>89,\"\"A\"\",IF(ROUNDUP(100*AD9,2)>84,\"\"B+\"\",IF(ROUNDUP(100*AD9,2)>79,\"\"B\"\",IF(ROUNDUP(100*AD9,2)>74,\"\"C+\"\",IF(ROUNDUP(100*AD9,2)>69,\"\"C\"\",IF(ROUNDUP(100*AD9,2)>64,\"\"N\"\",IF(ROUNDUP(100*AD9,2)>59,\"\"N\"\",\"\"N\"\")))))))\"\n\"COUNTA(E9:E17)\"\n\"COUNTIF(AE8:AE17,\"\"A\"\")\"\n\"(AH19)/SUM(AH$19:AH$26)\"\n\"COUNTA(C9:C17)\"\n\"AVERAGE(E9:E17)\"\n\"COUNTIF(AE8:AE17,\"\"B\"\")+COUNTIF(AE8:AE17,\"\"B+\"\")\"\n\"MEDIAN(E9:E17)\"\n\"COUNTIF(AE8:AE17,\"\"C\"\")+COUNTIF(AE8:AE17,\"\"C+\"\")\"\n\"MODE(E9:E17)\"\n\"COUNTIF(AE8:AE17,\"\"D\"\")+COUNTIF(AE8:AE17,\"\"D+\"\")\"\n\"COUNTIF(AE8:AE17,\"\"F\"\")\"\n\"STDEVP(E9:E17)\"\n\"COUNTIF(AE8:AE17,\"\"N\"\")\"\n\"COUNTIF(AE8:AE17,\"\"W\"\")+COUNTIF(AE8:AE17,\"\"W1\"\")+COUNTIF(AE8:AE17,\"\"W2\"\")\"\n\"COUNTA(AE8:AE17)-SUM(AE19:AE25)\"\n\"SUM(AE19:AE26)\"\n\"NOW()\"\n\"F4+O4+W4\"\n\"B20\"\n\"SUM(N7:T7)\"\n\"IF(COUNTBLANK(E7:I7)>COUNTBLANK(E$7:I$7),0,\"\"\"\")\"\n\"IF(SUM(E$7:J$7)<>0,SUM(E7:J7)/SUM(E$7:J$7),0)\"\n\"IF((SUM(E$7:J$7)-MIN(E$7:J$7))<>0,(SUM(E7:J7)-MIN(E7:J7))/(SUM(E$7:J$7)-MIN(E$7:J$7)),0)\"\n\"IF(SUM(N$7:T$7)<>0,MIN(SUM(N7:T7)/SUM(N$7:T$7),$U$3),0)\"\n\"($F$4*L7+$O$4*U7+$W$4*L7)/($F$4*L$7+$O$4*U$7+$W$4*L$7)\"\n\"($F$4*K7+$O$4*U7+$W$4*W7/100)/($F$4*K$7+$O$4*U$7+$W$4*W$7/100)\"\n\"($F$4*L7+$O$4*U7+$W$4*W7/100)/($F$4*L$7+$O$4*U$7+$W$4*W$7/100)\"\n\"IF(ROUNDUP(100*Y9,2)>89,\"\"A\"\",IF(ROUNDUP(100*Y9,2)>84,\"\"B+\"\",IF(ROUNDUP(100*Y9,2)>79,\"\"B\"\",IF(ROUNDUP(100*Y9,2)>74,\"\"C+\"\",IF(ROUNDUP(100*Y9,2)>69,\"\"C\"\",IF(ROUNDUP(100*Y9,2)>64,\"\"D+\"\",IF(ROUNDUP(100*Y9,2)>59,\"\"D\"\",\"\"F\"\")))))))\"\n\"COUNTA(E9:E17)\"\n\"COUNTIF(AC8:AC17,\"\"A\"\")\"\n\"(AC19)/SUM(AC$19:AC$26)\"\n\"COUNTA(C9:C17)\"\n\"AVERAGE(E9:E17)\"\n\"COUNTIF(AC8:AC17,\"\"B\"\")+COUNTIF(AC8:AC17,\"\"B+\"\")\"\n\"MEDIAN(E9:E17)\"\n\"COUNTIF(AC8:AC17,\"\"C\"\")+COUNTIF(AC8:AC17,\"\"C+\"\")\"\n\"MODE(E9:E17)\"\n\"COUNTIF(AC8:AC17,\"\"D\"\")+COUNTIF(AC8:AC17,\"\"D+\"\")\"\n\"COUNTIF(AC8:AC17,\"\"F\"\")\"\n\"STDEVP(E9:E17)\"\n\"COUNTIF(AC8:AC17,\"\"N\"\")\"\n\"COUNTIF(AC8:AC17,\"\"W\"\")+COUNTIF(AC8:AC17,\"\"W1\"\")+COUNTIF(AC8:AC17,\"\"W2\"\")\"\n\"COUNTA(AC8:AC17)-SUM(AC19:AC25)\"\n\"SUM(AC19:AC26)\"\n\"NOW()\"\n\"F4+M4+S4\"\n\"B20\"\n\"SUM(L7:P7)\"\n\"IF(COUNTBLANK(E7:H7)>COUNTBLANK(E$7:H$7),0,\"\"\"\")\"\n\"IF(SUM(E$7:I$7)<>0,SUM(E7:I7)/SUM(E$7:I$7),0)\"\n\"IF(SUM(L$7:P$7)<>0,MIN(SUM(L7:P7)/SUM(L$7:P$7),$Q$3),0)\"\n\"($F$4*J7+$M$4*Q7+$S$4*J7)/($F$4*J$7+$M$4*Q$7+$S$4*J$7)\"\n\"($F$4*J7+$M$4*Q7+$S$4*S7/100)/($F$4*J$7+$M$4*Q$7+$S$4*S$7/100)\"\n\"IF(ROUNDUP(100*U9,2)>89,\"\"A\"\",IF(ROUNDUP(100*U9,2)>84,\"\"B+\"\",IF(ROUNDUP(100*U9,2)>79,\"\"B\"\",IF(ROUNDUP(100*U9,2)>74,\"\"C+\"\",IF(ROUNDUP(100*U9,2)>69,\"\"C\"\",IF(ROUNDUP(100*U9,2)>64,\"\"D+\"\",IF(ROUNDUP(100*U9,2)>59,\"\"D\"\",\"\"F\"\")))))))\"\n\"COUNTA(E9:E17)\"\n\"COUNTIF(V8:V17,\"\"A\"\")\"\n\"(X19)/SUM(X$19:X$26)\"\n\"COUNTA(C9:C17)\"\n\"AVERAGE(E9:E17)\"\n\"COUNTIF(V8:V17,\"\"B\"\")+COUNTIF(V8:V17,\"\"B+\"\")\"\n\"MEDIAN(E9:E17)\"\n\"COUNTIF(V8:V17,\"\"C\"\")+COUNTIF(V8:V17,\"\"C+\"\")\"\n\"MODE(E9:E17)\"\n\"COUNTIF(V8:V17,\"\"D\"\")+COUNTIF(V8:V17,\"\"D+\"\")\"\n\"COUNTIF(V8:V17,\"\"F\"\")\"\n\"STDEVP(E9:E17)\"\n\"COUNTIF(V8:V17,\"\"N\"\")\"\n\"COUNTIF(V8:V17,\"\"W\"\")+COUNTIF(V8:V17,\"\"W1\"\")+COUNTIF(V8:V17,\"\"W2\"\")\"\n\"COUNTA(V8:V17)-SUM(V19:V25)\"\n\"SUM(V19:V26)\"\n\"SUM(C2:G2)\"\n\"Names!B1\"\n\"Names!C1\"\n\"Names!G1\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"'Homework Grade'!E5\"\n\"ROUND(((E6*E5)+(F6*F5)+(G6*G5)+(H6*H5)+(J6*J5)),2)\"\n\"HLOOKUP(C6,$Z$24:$AK$25,2)\"\n\"'Test Grade'!C6\"\n\"'Quiz Grade'!C6\"\n\"'Notebook Grade'!C6\"\n\"'Homework Grade'!C6\"\n\"'Participation Grade'!C6\"\n\"ROUND(((E7*E5)+(F7*F5)+(G7*G5)+(H7*H5)+(J7*J5)),2)\"\n\"ROUND(((E8*E5)+(F8*F5)+(G8*G5)+(H8*H5)+(J8*J5)),2)\"\n\"ROUND(((E9*E5)+(F9*F5)+(G9*G5)+(H9*H5)+(J9*J5)),2)\"\n\"ROUND(((E10*E5)+(F10*F5)+(G10*G5)+(H10*H5)+(J10*J5)),2)\"\n\"ROUND(((E11*E5)+(F11*F5)+(G11*G5)+(H11*H5)+(J11*J5)),2)\"\n\"ROUND(((E12*E5)+(F12*F5)+(G12*G5)+(H12*H5)+(J12*J5)),2)\"\n\"ROUND(((E13*E5)+(F13*F5)+(G13*G5)+(H13*H5)+(J13*J5)),2)\"\n\"ROUND(((E14*E5)+(F14*F5)+(G14*G5)+(H14*H5)+(J14*J5)),2)\"\n\"ROUND(((E15*E5)+(F15*F5)+(G15*G5)+(H15*H5)+(J15*J5)),2)\"\n\"ROUND(((E16*E5)+(F16*F5)+(G16*G5)+(H16*H5)+(J16*J5)),2)\"\n\"ROUND(((E17*E5)+(F17*F5)+(G17*G5)+(H17*H5)+(J17*J5)),2)\"\n\"ROUND(((E18*E5)+(F18*F5)+(G18*G5)+(H18*H5)+(J18*J5)),2)\"\n\"ROUND(((E19*E5)+(F19*F5)+(G19*G5)+(H19*H5)+(J19*J5)),2)\"\n\"ROUND(((E20*E5)+(F20*F5)+(G20*G5)+(H20*H5)+(J20*J5)),2)\"\n\"ROUND(((E21*E5)+(F21*F5)+(G21*G5)+(H21*H5)+(J21*J5)),2)\"\n\"ROUND(((E22*E5)+(F22*F5)+(G22*G5)+(H22*H5)+(J22*J5)),2)\"\n\"ROUND(((E23*E5)+(F23*F5)+(G23*G5)+(H23*H5)+(J23*J5)),2)\"\n\"ROUND(((E24*E5)+(F24*F5)+(G24*G5)+(H24*H5)+(J24*J5)),2)\"\n\"Names!W22\"\n\"Names!W21-0.0051\"\n\"Names!W20-0.0051\"\n\"Names!W19-0.0051\"\n\"Names!W18-0.0051\"\n\"Names!W17-0.0051\"\n\"Names!W16-0.0051\"\n\"Names!W15-0.0051\"\n\"Names!W14-0.0051\"\n\"Names!W13-0.0051\"\n\"Names!W12-0.0051\"\n\"Names!W11-0.0051\"\n\"ROUND(((E25*E5)+(F25*F5)+(G25*G5)+(H25*H5)+(J25*J5)),2)\"\n\"ROUND(((E26*E5)+(F26*F5)+(G26*G5)+(H26*H5)+(J26*J5)),2)\"\n\"ROUND(((E27*E5)+(F27*F5)+(G27*G5)+(H27*H5)+(J27*J5)),2)\"\n\"ROUND(((E28*E5)+(F28*F5)+(G28*G5)+(H28*H5)+(J28*J5)),2)\"\n\"ROUND(((E29*E5)+(F29*F5)+(G29*G5)+(H29*H5)+(J29*J5)),2)\"\n\"ROUND(((E30*E5)+(F30*F5)+(G30*G5)+(H30*H5)+(J30*J5)),2)\"\n\"ROUND(((E31*E5)+(F31*F5)+(G31*G5)+(H31*H5)+(J31*J5)),2)\"\n\"ROUND(((E32*E5)+(F32*F5)+(G32*G5)+(H32*H5)+(J32*J5)),2)\"\n\"ROUND(((E33*E5)+(F33*F5)+(G33*G5)+(H33*H5)+(J33*J5)),2)\"\n\"ROUND(((E34*E5)+(F34*F5)+(G34*G5)+(H34*H5)+(J34*J5)),2)\"\n\"ROUND(((E35*E5)+(F35*F5)+(G35*G5)+(H35*H5)+(J35*J5)),2)\"\n\"ROUND(((E36*E5)+(F36*F5)+(G36*G5)+(H36*H5)+(J36*J5)),2)\"\n\"ROUND(((E37*E5)+(F37*F5)+(G37*G5)+(H37*H5)+(J37*J5)),2)\"\n\"ROUND(((E38*E5)+(F38*F5)+(G38*G5)+(H38*H5)+(J38*J5)),2)\"\n\"ROUND(((E39*E5)+(F39*F5)+(G39*G5)+(H39*H5)+(J39*J5)),2)\"\n\"ROUND(((E40*E5)+(F40*F5)+(G40*G5)+(H40*H5)+(J40*J5)),2)\"\n\"COUNT('Test Grade'!E5:N5)\"\n\"COUNT('Quiz Grade'!E5:R5)\"\n\"Names!U11\"\n\"Names!AA25\"\n\"Names!AA25\"\n\"Names!AA25\"\n\"Names!B1\"\n\"Names!C1\"\n\"Names!C2\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"SUM(E5:IV5)+0.001\"\n\"D6/D5\"\n\"SUM(E6:IV6)\"\n\"D7/D5\"\n\"D8/D5\"\n\"D9/D5\"\n\"D10/D5\"\n\"D11/D5\"\n\"D12/D5\"\n\"D13/D5\"\n\"D14/D5\"\n\"D15/D5\"\n\"D16/D5\"\n\"D17/D5\"\n\"D18/D5\"\n\"D19/D5\"\n\"D20/D5\"\n\"D21/D5\"\n\"D22/D5\"\n\"D23/D5\"\n\"D24/D5\"\n\"D25/D5\"\n\"D26/D5\"\n\"D27/D5\"\n\"D28/D5\"\n\"D29/D5\"\n\"D30/D5\"\n\"D31/D5\"\n\"D32/D5\"\n\"D33/D5\"\n\"D34/D5\"\n\"D35/D5\"\n\"D36/D5\"\n\"D37/D5\"\n\"D38/D5\"\n\"D39/D5\"\n\"D40/D5\"\n\"Names!B1\"\n\"Names!D1\"\n\"Names!D2\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"SUM(E5:IV5)+0.001\"\n\"D6/D5\"\n\"SUM(E6:IV6)\"\n\"D7/D5\"\n\"D8/D5\"\n\"D9/D5\"\n\"D10/D5\"\n\"D11/D5\"\n\"D12/D5\"\n\"D13/D5\"\n\"D14/D5\"\n\"D15/D5\"\n\"D16/D5\"\n\"D17/D5\"\n\"D18/D5\"\n\"D19/D5\"\n\"D20/D5\"\n\"D21/D5\"\n\"D22/D5\"\n\"D23/D5\"\n\"D24/D5\"\n\"D25/D5\"\n\"D26/D5\"\n\"D27/D5\"\n\"D28/D5\"\n\"D29/D5\"\n\"D30/D5\"\n\"D31/D5\"\n\"D32/D5\"\n\"D33/D5\"\n\"D34/D5\"\n\"D35/D5\"\n\"D36/D5\"\n\"D37/D5\"\n\"D38/D5\"\n\"D39/D5\"\n\"D40/D5\"\n\"Names!B1\"\n\"Names!E1\"\n\"Names!E2\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"SUM(E5:IV5)+0.001\"\n\"D6/D5\"\n\"SUM(E6:IV6)\"\n\"D7/D5\"\n\"D8/D5\"\n\"D9/D5\"\n\"D10/D5\"\n\"D11/D5\"\n\"D12/D5\"\n\"D13/D5\"\n\"D14/D5\"\n\"D15/D5\"\n\"D16/D5\"\n\"D17/D5\"\n\"D18/D5\"\n\"D19/D5\"\n\"D20/D5\"\n\"D21/D5\"\n\"D22/D5\"\n\"D23/D5\"\n\"D24/D5\"\n\"D25/D5\"\n\"D26/D5\"\n\"D27/D5\"\n\"D28/D5\"\n\"D29/D5\"\n\"D30/D5\"\n\"D31/D5\"\n\"D32/D5\"\n\"D33/D5\"\n\"D34/D5\"\n\"D35/D5\"\n\"D36/D5\"\n\"D37/D5\"\n\"D38/D5\"\n\"D39/D5\"\n\"D40/D5\"\n\"Names!B1\"\n\"Names!F1\"\n\"Names!F2\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"SUM(F5:IV5)+0.001\"\n\"(COUNT(F5:AS5))\"\n\"D6/D5\"\n\"SUM(F6:IV6)\"\n\"E5-(COUNT(F6:AS6))\"\n\"D7/D5\"\n\"E5-(COUNT(F7:AS7))\"\n\"D8/D5\"\n\"E5-(COUNT(F8:AS8))\"\n\"D9/D5\"\n\"E5-(COUNT(F9:AS9))\"\n\"D10/D5\"\n\"E5-(COUNT(F10:AS10))\"\n\"D11/D5\"\n\"E5-(COUNT(F11:AS11))\"\n\"D12/D5\"\n\"E5-(COUNT(F12:AS12))\"\n\"D13/D5\"\n\"E5-(COUNT(F13:AS13))\"\n\"D14/D5\"\n\"E5-(COUNT(F14:AS14))\"\n\"D15/D5\"\n\"E5-(COUNT(F15:AS15))\"\n\"D16/D5\"\n\"E5-(COUNT(F16:AS16))\"\n\"D17/D5\"\n\"E5-(COUNT(F17:AS17))\"\n\"D18/D5\"\n\"E5-(COUNT(F18:AS18))\"\n\"D19/D5\"\n\"E5-(COUNT(F19:AS19))\"\n\"D20/D5\"\n\"E5-(COUNT(F20:AS20))\"\n\"D21/D5\"\n\"E5-(COUNT(F21:AS21))\"\n\"D22/D5\"\n\"E5-(COUNT(F22:AS22))\"\n\"D23/D5\"\n\"E5-(COUNT(F23:AS23))\"\n\"D24/D5\"\n\"E5-(COUNT(F24:AS24))\"\n\"D25/D5\"\n\"E5-(COUNT(F25:AS25))\"\n\"D26/D5\"\n\"E5-(COUNT(F26:AS26))\"\n\"D27/D5\"\n\"E5-(COUNT(F27:AS27))\"\n\"D28/D5\"\n\"E5-(COUNT(F28:AS28))\"\n\"D29/D5\"\n\"E5-(COUNT(F29:AS29))\"\n\"D30/D5\"\n\"E5-(COUNT(F30:AS30))\"\n\"D31/D5\"\n\"E5-(COUNT(F31:AS31))\"\n\"D32/D5\"\n\"E5-(COUNT(F32:AS32))\"\n\"D33/D5\"\n\"E5-(COUNT(F33:AS33))\"\n\"D34/D5\"\n\"E5-(COUNT(F34:AS34))\"\n\"D35/D5\"\n\"E5-(COUNT(F35:AS35))\"\n\"D36/D5\"\n\"E5-(COUNT(F36:AS36))\"\n\"D37/D5\"\n\"E5-(COUNT(F37:AS37))\"\n\"D38/D5\"\n\"E5-(COUNT(F38:AS38))\"\n\"D39/D5\"\n\"E5-(COUNT(F39:AS39))\"\n\"D40/D5\"\n\"E5-(COUNT(F40:AS40))\"\n\"Names!B1\"\n\"Names!G1\"\n\"Names!G2\"\n\"Names!$A:$A\"\n\"Names!$B:$B\"\n\"SUM(E5:IV5)+0.001\"\n\"D6/D5\"\n\"SUM(E6:IV6)\"\n\"D7/D5\"\n\"D8/D5\"\n\"D9/D5\"\n\"D10/D5\"\n\"D11/D5\"\n\"D12/D5\"\n\"D13/D5\"\n\"D14/D5\"\n\"D15/D5\"\n\"D16/D5\"\n\"D17/D5\"\n\"D18/D5\"\n\"D19/D5\"\n\"D20/D5\"\n\"D21/D5\"\n\"D22/D5\"\n\"D23/D5\"\n\"D24/D5\"\n\"D25/D5\"\n\"D26/D5\"\n\"D27/D5\"\n\"D28/D5\"\n\"D29/D5\"\n\"D30/D5\"\n\"D31/D5\"\n\"D32/D5\"\n\"D33/D5\"\n\"D34/D5\"\n\"D35/D5\"\n\"D36/D5\"\n\"D37/D5\"\n\"D38/D5\"\n\"D39/D5\"\n\"D40/D5\"\n\"Names!B1\"\n\"Names!$B:$B\"\n\"Names!$B:$B\"\n\"Names!B7\"\n\"Names!B1\"\n\"Names!$B:$B\"\n\"RIGHT(B10,4)\"\n\"ROUND(100*SUM(P10:R10)/SUM($P$8:$R$8),0)\"\n\"ROUND(100*SUM(V10:AZ10)/SUM($V$8:$AZ$8),0)\"\n\"ROUND(100*SUM(T10)/SUM($T$8),0)\"\n\"ROUND((G10*$G$2+I10*$I$2)*(10/7.5),0)\"\n\"IF(K10>=$G$4,\"\"A\"\",IF(AND(K10>=$H$4,K10<$G$4), \"\"B\"\",IF(AND(K10>=$I$4,K10<$H$4),\"\"C\"\",IF(AND(K10>=$J$4,K10<$I$4),\"\"D\"\", IF(K10<$J$4, \"\"E\"\")))))\"\n\"ROUND((G10*$G$2+I10*$I$2+J10*$J$2),0)\"\n\"ROUND(100*SUM(V11:BG11)/SUM($V$8:$BG$8),0)\"\n\"COUNT(D10:D57)\"\n\"AVERAGE(P10:P54)\"\n\"AVERAGE(Q10:Q57)\"\n\"MEDIAN(P10:P54)\"\n\"MEDIAN(Q10:Q57)\"\n\"SUM(P10:P54)\"\n\"SUM(Q10:Q57)\"\n\"COUNT(P10:P54)\"\n\"COUNT(Q10:Q57)\"\n\"FREQUENCY(P10:P57,P69:P70)\"\n\"FREQUENCY(P10:P57,P70:P71)\"\n\"FREQUENCY(P10:P57,P71:P72)\"\n\"FREQUENCY(P10:P57,P72:P73)\"\n\"FREQUENCY(P10:P57,P73:P74)\"\n\"1*P$8\"\n\"0.899*P$8\"\n\"0.799*P$8\"\n\"0.699*P$8\"\n\"0.599*P$8\"\n\"(0.25*K12)+(0.25*L12)+(0.1*M12)+(0.05*N12)+(0.35*O12)\"\n\"VLOOKUP(G12,$T$10:$U$21,2)\"\n\"VLOOKUP(B12,$R$10:$S$22,2)\"\n\"(0.4*K23)+(0.1*L23)+(0.1*M23)+(0.4*N23)\"\n\"(0.3*K35)+(0.3*L35)+(0*M35)+(0.4*N35)\"\n\"(0.3*K45)+(0.15*L45)+(0.1*M45)+(0.15*N45)+(0.3*O45)\"\n\"IF(AVERAGE(Exams)>Final,AVERAGE(Exams),0.5*AVERAGE(Exams)+0.5*Final)\"\n\"IF(RegularHomework>ExamAverage,0.1*ExcelHomework+0.1*RegularHomework+0.8*ExamAverage,0.1*ExcelHomework+0.9*ExamAverage)\"\n\"SUM(B4:I4)\"\n\"J4/$J$27*100\"\n\"SUM(L4:AD4)\"\n\"AE4/$AE$27*100\"\n\"AN4*100/60\"\n\"IF(AH4>0,(AG4+AH4)/($AG$27+$AH$27)*100,AG4/$AG$27*100)\"\n\"AF4*0.2+K4*0.15+IF(AI4>0,AI4*0.4,40)+IF(AJ4>0,AJ4/$AJ$27*25,AI4*0.25)\"\n\"VLOOKUP(AK4,$AO$5:$AP$15,2)\"\n\"AO8-4\"\n\"SUM(B27:I27)-30\"\n\"AVERAGEA(B4:B25)\"\n\"STDEVPA(B4:B25)\"\n\"MAX(B4:B25)\"\n\"(SUM(B8:F8) - MIN(B8:F8))*27/80 + 0.35*G8 +SUM(H8:O8)*27/160 + P8 + Q8\"\n\"1\"\n\"(D60+D26)/2\"\n\"D26\"\n\"D60\"\n\"AVERAGE(F8:F15)\"\n\"STDEV(F8:F15)\"\n\"MAX(F8:F15)\"\n\"MIN(F8:F15)\"\n\"47+10\"\n\"60+20\"\n\"A8\"\n\"C8\"\n\"AVERAGE(G26,J26,M26)\"\n\"(E26+F26+(E$25-E26)/2)/($E$25+$F$25)\"\n\"5+3\"\n\"(H26+I26)/($H$25+$I$25)\"\n\"(K26+L26)/($K$25+$L$25)\"\n\"40+12\"\n\"28\"\n\"24+7\"\n\"(E30+F30)/($E$25+$F$25)\"\n\"50+5\"\n\"30+11\"\n\"20+3\"\n\"SUM(F43:M43)\"\n\"C8\"\n\"SUM(F44:M44)/$O$43\"\n\"J6\"\n\"SUM(I59:CC59)\"\n\"SUM(I60:CC60)/$D$59\"\n\"J8/J$7\"\n\"LINEST(D60:D67,D26:D33,1,1)\"\n\"DCOUNT(Lettergrades,,I80:I81)\"\n\"C8\"\n\"H8\"\n\"G8\"\n\"F8\"\n\"E8\"\n\"LINEST(F90:F123,E90:E123,1,1)\"\n\"+AF3+AG3\"\n\"AVERAGE(AD3:AE3,AH3)\"\n\"(AD3+AE3+AH3-MIN(AD3,AE3,AH3))/2\"\n\"B3+C3+D3+E3+F3+G3+H3+I3+J3+K3+L3+M3+N3+O3+P3+Q3+R3\"\n\"+AK3*100/$AK$24\"\n\"+S3+T3+U3+V3+W3+X3+Y3+Z3+AA3+AB3+AC3\"\n\"+AM3/$AM$24*100\"\n\"+(6*AI3+1.5*(AL3+AN3))/9+AP3\"\n\"+AQ3/AQ$24*100\"\n\"+(6*AJ3+1.5*(AL3+AN3))/9+AP3\"\n\"+AS3/$AS$24*100\"\n\"+AF6\"\n\"+AM6/$AM$24*100+AG6\"\n\"(B19+C19+D19+E19+F19+G19+H19+I19+J19+K19+L19+M19+N19+O19+P19+Q19+R19)*16/14\"\n\"AVERAGE(B4:B21)\"\n\"MAX(AK4:AK22)\"\n\"MAX(AM3:AM22)\"\n\"MEDIAN(B4:B24)\"\n\"1-24/60\"\n\"0.125+C2\"\n\"(75-21)/75\"\n\"E2\"\n\"0.8*15/15+0.2*1\"\n\"D2\"\n\"F2\"\n\"IF(AVERAGE(AE2:AF2)>AF2,AVERAGE(AE2:AF2),AF2)\"\n\"AVERAGE(G2:O2)\"\n\"AVERAGE(Q2:AC2)\"\n\"0.4*AJ2+0.6*AK2\"\n\"0.2*AG2+0.25*AH2+0.25*AI2+0.3*AL2\"\n\"1-23/60\"\n\"59/75\"\n\"21/22\"\n\"(75-15)/75\"\n\"0.5*23/25+0.5*0-0.2\"\n\"1-18.5/60\"\n\"(75-16)/75\"\n\"25/37\"\n\"1-23.5/60\"\n\"(75-20)/75\"\n\"23/27\"\n\"19/25\"\n\"29/29\"\n\"0.8*15/15+0.2*1-10%\"\n\"18/19\"\n\"7/23\"\n\"22/23\"\n\"1-19/60\"\n\"(75-14)/75\"\n\"0.5*25/37+0.5\"\n\"55/75\"\n\"1-27.5/60\"\n\"34/37\"\n\"1-22/60\"\n\"(75-23)/75\"\n\"13/27\"\n\"AVERAGE(C2:C12)\"\n\"1-9/35\"\n\"0.05+C2\"\n\"21/21*0.8+0.2*0-0.1\"\n\"10/10*0.8+0.2*0.33-0.05\"\n\"4/4*0.8+0.2*0\"\n\"6/6*0.8+0.2*0\"\n\"7/7*0.8+0.2*0\"\n\"0.8*5/5+0.2*0\"\n\"0.8*6/8+0.2*0\"\n\"1/8\"\n\"4/6\"\n\"0.25*0.8+0.25*0.7+0.25*0.6+0.25*0.6\"\n\"3.4/4\"\n\"SUM(E2:Q2)/12\"\n\"SUM(R2:X2)/7\"\n\"AVERAGE(Z2:AA2)\"\n\"D2\"\n\"0.7*AD2+0.3*AE2\"\n\"0.3*AF2+0.15*AC2+0.55*AB2\"\n\"0.1+AG2\"\n\"1-10/35\"\n\"4/5*0.8+0.2*1\"\n\"7/7*0.8+0.2*0.333\"\n\"5/5*0.8+0.2*0\"\n\"4/8\"\n\"4.5/6\"\n\"4.75/7\"\n\"0.2*1+0.2*1+0.2*0.75+0.2*0.75+0.2*1\"\n\"3.5/4\"\n\"3/5\"\n\"1-10.5/35\"\n\"4/21*0.8\"\n\"7/7*0.8+0.2*0-0.3\"\n\"2/8\"\n\"2.75/4\"\n\"21/21*0.8+0.2\"\n\"6/10*0.8+0.2*0\"\n\"3.5/4*0.8+0.2*0.5\"\n\"6/6*0.8+0.2*0.5\"\n\"0.25/6+0.5\"\n\"3/7\"\n\"0.2*0.5+0.2*0.5+0.2*0.5+0.2*1+0.2*0.5\"\n\"1-16/35\"\n\"17/21*0.8\"\n\"3.5/4*0.8+0.2*0\"\n\"1-8.5/35\"\n\"0.8*17/21\"\n\"4/4*0.8+0.2*1\"\n\"(0.25+0.33)/8\"\n\"4/7\"\n\"3.75/4\"\n\"2.9/4\"\n\"3.7/4\"\n\"1-3/35\"\n\"21/21*0.8+0\"\n\"10/10*0.8+0.2*1\"\n\"3/4*0.8+0.2*0\"\n\"5/8\"\n\"4.75/8\"\n\"5.5/6\"\n\"5.67/7\"\n\"10/10*0.8+0.2*0.33\"\n\"7/8\"\n\"1-11/35\"\n\"9.333/10*0.8+0.2*0\"\n\"1.92/8\"\n\"5.25/7\"\n\"12/21*0.8\"\n\"10/10*0.8+0.2*0*0.67-0.05\"\n\"1-1.67/8\"\n\"5.84/7\"\n\"4.7/5\"\n\"1-19.5/35\"\n\"17/21*0.8+0.2\"\n\"8/10*0.8+0.2*0*0.33-0.05\"\n\"6/7*0.8+0.2*0.5\"\n\"1-16.5/35\"\n\"21/21*0.8+0.2*0\"\n\"8/10*0.8+0.2*0.33-0.05\"\n\"3/4*0.8+0.2*0.75\"\n\"5/6*0.8+0.2*1\"\n\"0.8*4.5/5+0.2*0\"\n\"3/8\"\n\"34.5/35\"\n\"0%\"\n\"1-13.5/35\"\n\"20/21*0.8+0.2\"\n\"6.67/10*0.8+0.2*0*0.33-0.05\"\n\"6/7*0.8+0.2*0\"\n\"3/6*0.8+0.2*0.5\"\n\"2.83/7\"\n\"AVERAGE(C2:C15)\"\n\"1-25/35\"\n\"0.8*17/21+0.2\"\n\"AVERAGE(C2:C21)\"\n\"SUM(C2:L2)/10\"\n\"SUM(M2:Q2)/5\"\n\"AVERAGE(R2:S2)\"\n\"AVERAGE(C2:C48)\"\n\"SUM(E4:F4)\"\n\"SUM(R4:AX4)\"\n\"AVERAGE(B5:C5)\"\n\"G5/100*100\"\n\"LOOKUP(H5,$E$58:$E$197,$F$58:$F$197)\"\n\"(SUM(J5:O5)-(MIN(J5:O5)))/(COUNT(J5:O5)-1)\"\n\"AY5/$AY$4*100\"\n\"(D5*0.3)+(I5*0.15)+(Q5*0.1)+(BB5*0.15)+(BC5*0.2)+(BA5*0.1)\"\n\"A5\"\n\"G6/$G$4*100\"\n\"AVERAGE(J43:O43)\"\n\"(D43*0.55)+(I43*0.175)+(#REF!*0.175)+(BA43*0.1)\"\n\"#REF!/#REF!*100\"\n\"E59+1\"\n\"F119+0.1\"\n\"E7\"\n\"E5/D5\"\n\"E13\"\n\"K13\"\n\"SUM(J5:J7)\"\n\"K25\"\n\"(E7*D7) + (E13*D13) + (K13*J13) + (K25*J25)\"\n\"IF(O14>89.99%,\"\"A\"\",IF(O14>79.99%,\"\"B\"\", IF(O14>69.99%,\"\"C\"\",IF(O14>59.99%,\"\"D\"\",\"\"F\"\"))))\"\n\"SUM(J17:J20)\"\n\"SUM(C21:C25)\"\n\"C33/B33\"\n\"E33*D33\"\n\"SUM(B33:B38)\"\n\"B44/$B$50\"\n\"C4/B4\"\n\"E4*D4\"\n\"SUM(B4:B9)\"\n\"C4/B4\"\n\"B4/$B$10\"\n\"E4*D4\"\n\"SUM(B4:B8)\"\n\"SUM(F4:F9)\"\n\"SUM(B5:U5)\"\n\"(B5+C5+D5+E5+H5+I5+L5+M5+O5+P5+S5+T5)\"\n\"B21/60*100\"\n\"F5+G5+J5+N5+Q5+U5\"\n\"E21/90*100\"\n\"K5+R5\"\n\"H21/150*100\"\n\"M21/300*100\"\n\"(B5+C5+D5+E5+H5+I5+L5+M5+O5+P5+S5+T5)/12\"\n\"(F5+G5+J5+N5+Q5+U5)/6\"\n\"(K5+R5)/2\"\n\"C21*0.2+F21*0.3+I21*0.5\"\n\"SUM(B5:U5)\"\n\"(SUMPRODUCT(A6:U6,A$5:U$5))/V$5\"\n\"(B5+C5+D5+E5+H5+I5+L5+M5+O5+P5+S5+T5)\"\n\"B23/60*100\"\n\"F5+G5+J5+N5+Q5+U5\"\n\"E23/90*100\"\n\"K5+R5\"\n\"H23/150*100\"\n\"C23*0.2+F23*0.3+I23*0.5\"\n\"(B5+C5+D5+E5+H5+I5+L5+M5+O5+P5+S5+T5)/12\"\n\"(F5+J5+Q5+2*(G5+N5+U5))/9\"\n\"(K5+R5)/2\"\n\"C23*0.2+F23*0.3+I23*0.5\"\n\"(B5+1)\"\n\"COUNTIF(C5:C201,\"\"Yes\"\")\"\n\"SUM(D5:D201)\"\n\"SUM(D5:D201)\"\n\"SUM(D5:D120)\"\n\"SUM(D121:D201)\"\n\"COUNTIF(C5:C201,\"\"Yes\"\")\"\n\"(B201-B209)\"\n\"COUNTIF(C5:C120,\"\"\"\")\"\n\"COUNTIF(C121:C201,\"\"\"\")\"\n\"B6*B8\"\n\"(B10*(B12+B17)*B20*1+B24)*B26*B28*B30\"\n\"(B13+B14)/B15\"\n\"0.79*(0.01*B18)^0.77\"\n\"1+0.7*(B31-1)\"\n\"SUM(B35:B37)\"\n\"B6*(B43+B46)\"\n\"(0.35*B44+50)*B45/60\"\n\"(0.16*B47)/60\"\n\"721+372\"\n\"B6*(0.16*B50)/60\"\n\"35*4*25.4\"\n\"B6*B53*B54*B55/1850\"\n\"(1.875+2.375)*25.4\"\n\"40*2.44\"\n\"10*2.26\"\n\"120\"\n\"SUM(B59:B61)+B52+B49+B42+B5+B38\"\n\"0.22\"\n\"33%*B67\"\n\"(B67+B68)\"\n\"B70*B69\"\n\"B74*50/3600\"\n\"B63/B77\"\n\"B78+B75+B71\"\n\"B95+B63\"\n\"B63/B94\"\n\"B97+B92+B88\"\n\"3*10000\"\n\"4000*3\"\n\"47500*0.15\"\n\"2500*4\"\n\"2200*50\"\n\"SUM(A7:A9)\"\n\"SUM(L7:L11)\"\n\"31500-L7\"\n\"2500*3\"\n\"SUM(H17:H18)\"\n\"SUM(B17:B20)\"\n\"100000-20000-7125\"\n\"30000-22500\"\n\"SUM(F41:F44)-E43\"\n\"20000*11\"\n\"20000*5\"\n\"D48-E49\"\n\"1000*11\"\n\"5*1000\"\n\"2000*100\"\n\"12*5000\"\n\"5*5000\"\n\"13*3000\"\n\"2000*100*0.09*1/12\"\n\"23000*0.02\"\n\"SUM(D61:D62)\"\n\"+E49+E52+E57\"\n\"25000-1960\"\n\"SUM(E75:E76)-D77\"\n\"F3+G3/60+H3/3600\"\n\"3.14159265/180\"\n\"F2+G2/60+H2/3600\"\n\"(J2+K2/60+L2/3600)/15\"\n\"$S$1+1.0027379093*S5-$S$3\"\n\"T5-(B5+C5/60+D5/3600)\"\n\"1/(SIN(-1*$U$1*((ABS(F5)+G5/60+H5/3600)))*SIN($U$1*$S$2)+COS($U$1*((ABS(F5)+G5/60+H5/3600)))*COS($U$1*$S$2)*COS($U$1*U5*15))\"\n\"J5\"\n\"AVERAGE(M5:M14)/K5/L5\"\n\"STDEV(M5:M14)/K5/L5\"\n\"AVERAGE(P5:P14)/N5/O5\"\n\"STDEV(P5:P14)/N5/O5\"\n\"X5-Z5\"\n\"(Y5^2+AA5^2)^0.5\"\n\"-2.5*LOG10(AB5)\"\n\"0.43429448*AC5/AB5\"\n\"$AF$5-AF5\"\n\"V5\"\n\"AD5+AG5\"\n\"AE5\"\n\"AF5-AD5+AH5*$AT$22\"\n\"AH5\"\n\"AH15\"\n\"AH25\"\n\"AH35\"\n\"AH45\"\n\"STDEV(P15:P24)/N15/N24\"\n\"-2.5*LOG10(AB15)\"\n\"1/(SIN($U$1*((ABS(F25)+G25/60+H25/3600)))*SIN($U$1*$S$2)+COS($U$1*((ABS(F25)+G25/60+H25/3600)))*COS($U$1*$S$2)*COS($U$1*U25*15))\"\n\"-2.5*LOG10(AB25)\"\n\"1/(SIN($U$1*((ABS(F35)+G35/60+H35/3600)))*SIN($U$1*$S$2)+COS(1*$U$1*((ABS(F35)+G35/60+H35/3600)))*COS($U$1*$S$2)*COS($U$1*U35*15))\"\n\"-2.5*LOG10(AB35)\"\n\"-2.5*LOG10(AB45)\"\n\"A55\"\n\"1/(SIN(-1*$U$1*((ABS(F55)+G55/60+H55*3600)))*SIN($U$1*$S$2)+COS(-1*$U$1*((ABS(F55)+G55/60+H55*3600)))*COS($U$1*$S$2)*COS($U$1*U55*15))\"\n\"-2.5*LOG10(AB55)\"\n\"-2.5*LOG10(AB65)\"\n\"-2.5*LOG10(AB75)\"\n\"-2.5*LOG10(AB85)\"\n\"-2.5*LOG10(AB95)\"\n\"-2.5*LOG10(AB105)\"\n\"-2.5*LOG10(AB115)\"\n\"-2.5*LOG10(AB125)\"\n\"-2.5*LOG10(AB135)\"\n\"-2.5*LOG10(AB145)\"\n\"-2.5*LOG10(AB155)\"\n\"-2.5*LOG10(AB165)\"\n\"SUM(C11:C13)\"\n\"SUM(D14:D21)\"\n\"SUM(C25:C26)\"\n\"SUM(D27:D29)\"\n\"SUM(D30:D34)\"\n\"SUM(C70:C71)\"\n\"+C20-D20\"\n\"+E20/D20\"\n\"+C20-C21\"\n\"B10*SUM(B38:B43)+C10*SUM(C38:C43)+D10*SUM(D38:D43)+E10*SUM(E38:E43)+F10*SUM(F38:F43)+G10*SUM(G38:G43)-0.5*SUM(B30:G35)\"\n\"B22-B30-B38\"\n\"B23+B30-B31-B39\"\n\"SUMPRODUCT($B$6:$G$6,B22:G22)\"\n\"SUMPRODUCT($B$7:$G$7,B22:G22)\"\n\"SUMPRODUCT($B$8:$G$8,B22:G22)\"\n\"24*16*4\"\n\"24*16*2\"\n\"24*16*3\"\n\"B13-B38\"\n\"SUM(O2:O66)/62\"\n\"6.38*10^3\"\n\"(C6/(C6+C5))^2\"\n\"SQRT(((C12*C13)/(1+(C14/C13))))\"\n\"6.67*10^-11\"\n\"7.35*10^22\"\n\"C20+C21\"\n\"SQRT(((4*3.1415927^2*C24^3)/(C22*C23)))\"\n\"C26/(60*60)\"\n\"C22\"\n\"((C32*C33)/((C32*C33/C30)-(C31^2/2)))-C30\"\n\"C35*0.98\"\n\"SQRT(C39/C40)*C41\"\n\"(2*3.1415927*SQRT((C40/C39)))/2\"\n\"A2+1\"\n\"IF(ISBLANK('mag per year'!AD3),\"\"\"\",'mag per year'!AD3)\"\n\"QUARTILE($A$2:$A$8,1)\"\n\"IF(OR($A$2<$B$6,$A$2>$B$8),$A$2,#N/A)\"\n\"IF(OR(AND($A$2<$B$5,$A$2>=$B$6),AND($A$2>$B$7,$A$2<=$B$8)),$A$2,#N/A)\"\n\"IF(OR(AND($A$2<$B$2,$A$2>=$B$5),AND($A$2>$B$4,$A$2<=$B$7)),$A$2,\"\"\"\")\"\n\"$B$3\"\n\"MIN($A$2:$A$8)-(MAX($A$2:$A$8)-MIN($A$2:$A$8))/14\"\n\"AVERAGE($A$2:$A$8)\"\n\"IF(ISBLANK('mag per year'!AE3),\"\"\"\",'mag per year'!AE3)\"\n\"QUARTILE($M$2:$M$8,1)\"\n\"IF(OR($M$2<$N$6,$M$2>$N$8),$M$2,#N/A)\"\n\"IF(OR(AND($M$2<$N$5,$M$2>=$N$6),AND($M$2>$N$7,$M$2<=$N$8)),$M$2,#N/A)\"\n\"IF(OR(AND($M$2<$N$2,$M$2>=$N$5),AND($M$2>$N$4,$M$2<=$N$7)),$M$2,\"\"\"\")\"\n\"$N$3\"\n\"MIN($M$2:$M$8)-(MAX($M$2:$M$8)-MIN($M$2:$M$8))/14\"\n\"AVERAGE($M$2:$M$8)\"\n\"IF(ISBLANK(sandstone!B3),\"\"\"\",sandstone!B3)\"\n\"QUARTILE($Y$2:$Y$16,1)\"\n\"IF(OR($Y$2<$Z$6,$Y$2>$Z$8),$Y$2,#N/A)\"\n\"IF(OR(AND($Y$2<$Z$5,$Y$2>=$Z$6),AND($Y$2>$Z$7,$Y$2<=$Z$8)),$Y$2,#N/A)\"\n\"IF(OR(AND($Y$2<$Z$2,$Y$2>=$Z$5),AND($Y$2>$Z$4,$Y$2<=$Z$7)),$Y$2,\"\"\"\")\"\n\"$Z$3\"\n\"MIN($Y$2:$Y$31)-(MAX($Y$2:$Y$31)-MIN($Y$2:$Y$31))/14\"\n\"AVERAGE($Y$2:$Y$16)\"\n\"IF(ISBLANK(sandstone!B3),\"\"\"\",sandstone!B3)\"\n\"QUARTILE($AK$2:$AK$16,1)\"\n\"IF(OR($AK$2<$AL$6,$AK$2>$AL$8),$AK$2,#N/A)\"\n\"IF(OR(AND($AK$2<$AL$5,$AK$2>=$AL$6),AND($AK$2>$AL$7,$AK$2<=$AL$8)),$AK$2,#N/A)\"\n\"IF(OR(AND($AK$2<$AL$2,$AK$2>=$AL$5),AND($AK$2>$AL$4,$AK$2<=$AL$7)),$AK$2,\"\"\"\")\"\n\"$AL$3\"\n\"MIN($AK$2:$AK$31)-(MAX($AK$2:$AK$31)-MIN($AK$2:$AK$31))/14\"\n\"AVERAGE($AK$2:$AK$16)\"\n\"IF(ISBLANK(sandstone!B3),\"\"\"\",sandstone!B3)\"\n\"QUARTILE($AW$2:$AW$17,1)\"\n\"IF(OR($AW$2<$AX$6,$AW$2>$AX$8),$AW$2,#N/A)\"\n\"IF(OR(AND($AW$2<$AX$5,$AW$2>=$AX$6),AND($AW$2>$AX$7,$AW$2<=$AX$8)),$AW$2,#N/A)\"\n\"IF(OR(AND($AW$2<$AX$2,$AW$2>=$AX$5),AND($AW$2>$AX$4,$AW$2<=$AX$7)),$AW$2,\"\"\"\")\"\n\"$AX$3\"\n\"MIN($AW$2:$AW$33)-(MAX($AW$2:$AW$33)-MIN($AW$2:$AW$33))/14\"\n\"AVERAGE($AW$2:$AW$17)\"\n\"QUARTILE($A$2:$A$8,2)\"\n\"IF(OR($A$3<$B$6,$A$3>$B$8),$A$3,#N/A)\"\n\"IF(OR(AND($A$3<$B$5,$A$3>=$B$6),AND($A$3>$B$7,$A$3<=$B$8)),$A$3,#N/A)\"\n\"IF(OR(AND($A$3<$B$2,$A$3>=$B$5),AND($A$3>$B$4,$A$3<=$B$7)),$A$3,\"\"\"\")\"\n\"$B$2\"\n\"QUARTILE($M$2:$M$8,2)\"\n\"IF(OR($M$3<$N$6,$M$3>$N$8),$M$3,#N/A)\"\n\"IF(OR(AND($M$3<$N$5,$M$3>=$N$6),AND($M$3>$N$7,$M$3<=$N$8)),$M$3,#N/A)\"\n\"IF(OR(AND($M$3<$N$2,$M$3>=$N$5),AND($M$3>$N$4,$M$3<=$N$7)),$M$3,\"\"\"\")\"\n\"$N$2\"\n\"QUARTILE($Y$2:$Y$16,2)\"\n\"IF(OR($Y$3<$Z$6,$Y$3>$Z$8),$Y$3,#N/A)\"\n\"IF(OR(AND($Y$3<$Z$5,$Y$3>=$Z$6),AND($Y$3>$Z$7,$Y$3<=$Z$8)),$Y$3,#N/A)\"\n\"IF(OR(AND($Y$3<$Z$2,$Y$3>=$Z$5),AND($Y$3>$Z$4,$Y$3<=$Z$7)),$Y$3,\"\"\"\")\"\n\"$Z$2\"\n\"QUARTILE($AK$2:$AK$16,2)\"\n\"IF(OR($AK$3<$AL$6,$AK$3>$AL$8),$AK$3,#N/A)\"\n\"IF(OR(AND($AK$3<$AL$5,$AK$3>=$AL$6),AND($AK$3>$AL$7,$AK$3<=$AL$8)),$AK$3,#N/A)\"\n\"IF(OR(AND($AK$3<$AL$2,$AK$3>=$AL$5),AND($AK$3>$AL$4,$AK$3<=$AL$7)),$AK$3,\"\"\"\")\"\n\"$AL$2\"\n\"QUARTILE($AW$2:$AW$17,2)\"\n\"IF(OR($AW$3<$AX$6,$AW$3>$AX$8),$AW$3,#N/A)\"\n\"IF(OR(AND($AW$3<$AX$5,$AW$3>=$AX$6),AND($AW$3>$AX$7,$AW$3<=$AX$8)),$AW$3,#N/A)\"\n\"IF(OR(AND($AW$3<$AX$2,$AW$3>=$AX$5),AND($AW$3>$AX$4,$AW$3<=$AX$7)),$AW$3,\"\"\"\")\"\n\"$AX$2\"\n\"QUARTILE($A$2:$A$8,3)\"\n\"IF(OR($A$4<$B$6,$A$4>$B$8),$A$4,#N/A)\"\n\"IF(OR(AND($A$4<$B$5,$A$4>=$B$6),AND($A$4>$B$7,$A$4<=$B$8)),$A$4,#N/A)\"\n\"IF(OR(AND($A$4<$B$2,$A$4>=$B$5),AND($A$4>$B$4,$A$4<=$B$7)),$A$4,\"\"\"\")\"\n\"QUARTILE($M$2:$M$8,3)\"\n\"IF(OR($M$4<$N$6,$M$4>$N$8),$M$4,#N/A)\"\n\"IF(OR(AND($M$4<$N$5,$M$4>=$N$6),AND($M$4>$N$7,$M$4<=$N$8)),$M$4,#N/A)\"\n\"IF(OR(AND($M$4<$N$2,$M$4>=$N$5),AND($M$4>$N$4,$M$4<=$N$7)),$M$4,\"\"\"\")\"\n\"QUARTILE($Y$2:$Y$16,3)\"\n\"IF(OR($Y$4<$Z$6,$Y$4>$Z$8),$Y$4,#N/A)\"\n\"IF(OR(AND($Y$4<$Z$5,$Y$4>=$Z$6),AND($Y$4>$Z$7,$Y$4<=$Z$8)),$Y$4,#N/A)\"\n\"IF(OR(AND($Y$4<$Z$2,$Y$4>=$Z$5),AND($Y$4>$Z$4,$Y$4<=$Z$7)),$Y$4,\"\"\"\")\"\n\"QUARTILE($AK$2:$AK$16,3)\"\n\"IF(OR($AK$4<$AL$6,$AK$4>$AL$8),$AK$4,#N/A)\"\n\"IF(OR(AND($AK$4<$AL$5,$AK$4>=$AL$6),AND($AK$4>$AL$7,$AK$4<=$AL$8)),$AK$4,#N/A)\"\n\"IF(OR(AND($AK$4<$AL$2,$AK$4>=$AL$5),AND($AK$4>$AL$4,$AK$4<=$AL$7)),$AK$4,\"\"\"\")\"\n\"QUARTILE($AW$2:$AW$17,3)\"\n\"IF(OR($AW$4<$AX$6,$AW$4>$AX$8),$AW$4,#N/A)\"\n\"IF(OR(AND($AW$4<$AX$5,$AW$4>=$AX$6),AND($AW$4>$AX$7,$AW$4<=$AX$8)),$AW$4,#N/A)\"\n\"IF(OR(AND($AW$4<$AX$2,$AW$4>=$AX$5),AND($AW$4>$AX$4,$AW$4<=$AX$7)),$AW$4,\"\"\"\")\"\n\"$B$2-1.5*($B$4-$B$2)\"\n\"IF(OR($A$5<$B$6,$A$5>$B$8),$A$5,#N/A)\"\n\"IF(OR(AND($A$5<$B$5,$A$5>=$B$6),AND($A$5>$B$7,$A$5<=$B$8)),$A$5,#N/A)\"\n\"IF(OR(AND($A$5<$B$2,$A$5>=$B$5),AND($A$5>$B$4,$A$5<=$B$7)),$A$5,\"\"\"\")\"\n\"$B$9\"\n\"$N$2-1.5*($N$4-$N$2)\"\n\"IF(OR($M$5<$N$6,$M$5>$N$8),$M$5,#N/A)\"\n\"IF(OR(AND($M$5<$N$5,$M$5>=$N$6),AND($M$5>$N$7,$M$5<=$N$8)),$M$5,#N/A)\"\n\"IF(OR(AND($M$5<$N$2,$M$5>=$N$5),AND($M$5>$N$4,$M$5<=$N$7)),$M$5,\"\"\"\")\"\n\"$N$9\"\n\"$Z$2-1.5*($Z$4-$Z$2)\"\n\"IF(OR($Y$5<$Z$6,$Y$5>$Z$8),$Y$5,#N/A)\"\n\"IF(OR(AND($Y$5<$Z$5,$Y$5>=$Z$6),AND($Y$5>$Z$7,$Y$5<=$Z$8)),$Y$5,#N/A)\"\n\"IF(OR(AND($Y$5<$Z$2,$Y$5>=$Z$5),AND($Y$5>$Z$4,$Y$5<=$Z$7)),$Y$5,\"\"\"\")\"\n\"$Z$9\"\n\"AVERAGE($Y$17:$Y$31)\"\n\"$AL$2-1.5*($AL$4-$AL$2)\"\n\"IF(OR($AK$5<$AL$6,$AK$5>$AL$8),$AK$5,#N/A)\"\n\"IF(OR(AND($AK$5<$AL$5,$AK$5>=$AL$6),AND($AK$5>$AL$7,$AK$5<=$AL$8)),$AK$5,#N/A)\"\n\"IF(OR(AND($AK$5<$AL$2,$AK$5>=$AL$5),AND($AK$5>$AL$4,$AK$5<=$AL$7)),$AK$5,\"\"\"\")\"\n\"$AL$9\"\n\"AVERAGE($AK$17:$AK$31)\"\n\"$AX$2-1.5*($AX$4-$AX$2)\"\n\"IF(OR($AW$5<$AX$6,$AW$5>$AX$8),$AW$5,#N/A)\"\n\"IF(OR(AND($AW$5<$AX$5,$AW$5>=$AX$6),AND($AW$5>$AX$7,$AW$5<=$AX$8)),$AW$5,#N/A)\"\n\"IF(OR(AND($AW$5<$AX$2,$AW$5>=$AX$5),AND($AW$5>$AX$4,$AW$5<=$AX$7)),$AW$5,\"\"\"\")\"\n\"$AX$9\"\n\"AVERAGE($AW$18:$AW$33)\"\n\"$B$2-3*($B$4-$B$2)\"\n\"IF(OR($A$6<$B$6,$A$6>$B$8),$A$6,#N/A)\"\n\"IF(OR(AND($A$6<$B$5,$A$6>=$B$6),AND($A$6>$B$7,$A$6<=$B$8)),$A$6,#N/A)\"\n\"IF(OR(AND($A$6<$B$2,$A$6>=$B$5),AND($A$6>$B$4,$A$6<=$B$7)),$A$6,\"\"\"\")\"\n\"$N$2-3*($N$4-$N$2)\"\n\"IF(OR($M$6<$N$6,$M$6>$N$8),$M$6,#N/A)\"\n\"IF(OR(AND($M$6<$N$5,$M$6>=$N$6),AND($M$6>$N$7,$M$6<=$N$8)),$M$6,#N/A)\"\n\"IF(OR(AND($M$6<$N$2,$M$6>=$N$5),AND($M$6>$N$4,$M$6<=$N$7)),$M$6,\"\"\"\")\"\n\"$Z$2-3*($Z$4-$Z$2)\"\n\"IF(OR($Y$6<$Z$6,$Y$6>$Z$8),$Y$6,#N/A)\"\n\"IF(OR(AND($Y$6<$Z$5,$Y$6>=$Z$6),AND($Y$6>$Z$7,$Y$6<=$Z$8)),$Y$6,#N/A)\"\n\"IF(OR(AND($Y$6<$Z$2,$Y$6>=$Z$5),AND($Y$6>$Z$4,$Y$6<=$Z$7)),$Y$6,\"\"\"\")\"\n\"$AL$2-3*($AL$4-$AL$2)\"\n\"IF(OR($AK$6<$AL$6,$AK$6>$AL$8),$AK$6,#N/A)\"\n\"IF(OR(AND($AK$6<$AL$5,$AK$6>=$AL$6),AND($AK$6>$AL$7,$AK$6<=$AL$8)),$AK$6,#N/A)\"\n\"IF(OR(AND($AK$6<$AL$2,$AK$6>=$AL$5),AND($AK$6>$AL$4,$AK$6<=$AL$7)),$AK$6,\"\"\"\")\"\n\"$AX$2-3*($AX$4-$AX$2)\"\n\"IF(OR($AW$6<$AX$6,$AW$6>$AX$8),$AW$6,#N/A)\"\n\"IF(OR(AND($AW$6<$AX$5,$AW$6>=$AX$6),AND($AW$6>$AX$7,$AW$6<=$AX$8)),$AW$6,#N/A)\"\n\"IF(OR(AND($AW$6<$AX$2,$AW$6>=$AX$5),AND($AW$6>$AX$4,$AW$6<=$AX$7)),$AW$6,\"\"\"\")\"\n\"$B$4+1.5*($B$4-$B$2)\"\n\"IF(OR($A$7<$B$6,$A$7>$B$8),$A$7,#N/A)\"\n\"IF(OR(AND($A$7<$B$5,$A$7>=$B$6),AND($A$7>$B$7,$A$7<=$B$8)),$A$7,#N/A)\"\n\"IF(OR(AND($A$7<$B$2,$A$7>=$B$5),AND($A$7>$B$4,$A$7<=$B$7)),$A$7,\"\"\"\")\"\n\"$N$4+1.5*($N$4-$N$2)\"\n\"IF(OR($M$7<$N$6,$M$7>$N$8),$M$7,#N/A)\"\n\"IF(OR(AND($M$7<$N$5,$M$7>=$N$6),AND($M$7>$N$7,$M$7<=$N$8)),$M$7,#N/A)\"\n\"IF(OR(AND($M$7<$N$2,$M$7>=$N$5),AND($M$7>$N$4,$M$7<=$N$7)),$M$7,\"\"\"\")\"\n\"$Z$4+1.5*($Z$4-$Z$2)\"\n\"IF(OR($Y$7<$Z$6,$Y$7>$Z$8),$Y$7,#N/A)\"\n\"IF(OR(AND($Y$7<$Z$5,$Y$7>=$Z$6),AND($Y$7>$Z$7,$Y$7<=$Z$8)),$Y$7,#N/A)\"\n\"IF(OR(AND($Y$7<$Z$2,$Y$7>=$Z$5),AND($Y$7>$Z$4,$Y$7<=$Z$7)),$Y$7,\"\"\"\")\"\n\"$AL$4+1.5*($AL$4-$AL$2)\"\n\"IF(OR($AK$7<$AL$6,$AK$7>$AL$8),$AK$7,#N/A)\"\n\"IF(OR(AND($AK$7<$AL$5,$AK$7>=$AL$6),AND($AK$7>$AL$7,$AK$7<=$AL$8)),$AK$7,#N/A)\"\n\"IF(OR(AND($AK$7<$AL$2,$AK$7>=$AL$5),AND($AK$7>$AL$4,$AK$7<=$AL$7)),$AK$7,\"\"\"\")\"\n\"$AX$4+1.5*($AX$4-$AX$2)\"\n\"IF(OR($AW$7<$AX$6,$AW$7>$AX$8),$AW$7,#N/A)\"\n\"IF(OR(AND($AW$7<$AX$5,$AW$7>=$AX$6),AND($AW$7>$AX$7,$AW$7<=$AX$8)),$AW$7,#N/A)\"\n\"IF(OR(AND($AW$7<$AX$2,$AW$7>=$AX$5),AND($AW$7>$AX$4,$AW$7<=$AX$7)),$AW$7,\"\"\"\")\"\n\"$B$4+3*($B$4-$B$2)\"\n\"IF(OR($A$8<$B$6,$A$8>$B$8),$A$8,#N/A)\"\n\"IF(OR(AND($A$8<$B$5,$A$8>=$B$6),AND($A$8>$B$7,$A$8<=$B$8)),$A$8,#N/A)\"\n\"IF(OR(AND($A$8<$B$2,$A$8>=$B$5),AND($A$8>$B$4,$A$8<=$B$7)),$A$8,\"\"\"\")\"\n\"$B$4\"\n\"$N$4+3*($N$4-$N$2)\"\n\"IF(OR($M$8<$N$6,$M$8>$N$8),$M$8,#N/A)\"\n\"IF(OR(AND($M$8<$N$5,$M$8>=$N$6),AND($M$8>$N$7,$M$8<=$N$8)),$M$8,#N/A)\"\n\"IF(OR(AND($M$8<$N$2,$M$8>=$N$5),AND($M$8>$N$4,$M$8<=$N$7)),$M$8,\"\"\"\")\"\n\"$N$4\"\n\"$Z$4+3*($Z$4-$Z$2)\"\n\"IF(OR($Y$8<$Z$6,$Y$8>$Z$8),$Y$8,#N/A)\"\n\"IF(OR(AND($Y$8<$Z$5,$Y$8>=$Z$6),AND($Y$8>$Z$7,$Y$8<=$Z$8)),$Y$8,#N/A)\"\n\"IF(OR(AND($Y$8<$Z$2,$Y$8>=$Z$5),AND($Y$8>$Z$4,$Y$8<=$Z$7)),$Y$8,\"\"\"\")\"\n\"$Z$4\"\n\"$AL$4+3*($AL$4-$AL$2)\"\n\"IF(OR($AK$8<$AL$6,$AK$8>$AL$8),$AK$8,#N/A)\"\n\"IF(OR(AND($AK$8<$AL$5,$AK$8>=$AL$6),AND($AK$8>$AL$7,$AK$8<=$AL$8)),$AK$8,#N/A)\"\n\"IF(OR(AND($AK$8<$AL$2,$AK$8>=$AL$5),AND($AK$8>$AL$4,$AK$8<=$AL$7)),$AK$8,\"\"\"\")\"\n\"$AL$4\"\n\"$AX$4+3*($AX$4-$AX$2)\"\n\"IF(OR($AW$8<$AX$6,$AW$8>$AX$8),$AW$8,#N/A)\"\n\"IF(OR(AND($AW$8<$AX$5,$AW$8>=$AX$6),AND($AW$8>$AX$7,$AW$8<=$AX$8)),$AW$8,#N/A)\"\n\"IF(OR(AND($AW$8<$AX$2,$AW$8>=$AX$5),AND($AW$8>$AX$4,$AW$8<=$AX$7)),$AW$8,\"\"\"\")\"\n\"$AX$4\"\n\"IF(AND(COUNT($F$2:$F$8)>0,MIN($F$2:$F$8)<$B$2),MIN($F$2:$F$8),$B$2)\"\n\"IF(AND(COUNT($R$2:$R$8)>0,MIN($R$2:$R$8)<$N$2),MIN($R$2:$R$8),$N$2)\"\n\"IF(ISBLANK(sandstone!B11),\"\"\"\",sandstone!B11)\"\n\"IF(AND(COUNT($AD$2:$AD$16)>0,MIN($AD$2:$AD$16)<$Z$2),MIN($AD$2:$AD$16),$Z$2)\"\n\"IF(OR($Y$9<$Z$6,$Y$9>$Z$8),$Y$9,#N/A)\"\n\"IF(OR(AND($Y$9<$Z$5,$Y$9>=$Z$6),AND($Y$9>$Z$7,$Y$9<=$Z$8)),$Y$9,#N/A)\"\n\"IF(OR(AND($Y$9<$Z$2,$Y$9>=$Z$5),AND($Y$9>$Z$4,$Y$9<=$Z$7)),$Y$9,\"\"\"\")\"\n\"IF(ISBLANK(sandstone!B11),\"\"\"\",sandstone!B11)\"\n\"IF(AND(COUNT($AP$2:$AP$16)>0,MIN($AP$2:$AP$16)<$AL$2),MIN($AP$2:$AP$16),$AL$2)\"\n\"IF(OR($AK$9<$AL$6,$AK$9>$AL$8),$AK$9,#N/A)\"\n\"IF(OR(AND($AK$9<$AL$5,$AK$9>=$AL$6),AND($AK$9>$AL$7,$AK$9<=$AL$8)),$AK$9,#N/A)\"\n\"IF(OR(AND($AK$9<$AL$2,$AK$9>=$AL$5),AND($AK$9>$AL$4,$AK$9<=$AL$7)),$AK$9,\"\"\"\")\"\n\"IF(AND(COUNT($BB$2:$BB$17)>0,MIN($BB$2:$BB$17)<$AX$2),MIN($BB$2:$BB$17),$AX$2)\"\n\"IF(OR($AW$9<$AX$6,$AW$9>$AX$8),$AW$9,#N/A)\"\n\"IF(OR(AND($AW$9<$AX$5,$AW$9>=$AX$6),AND($AW$9>$AX$7,$AW$9<=$AX$8)),$AW$9,#N/A)\"\n\"IF(OR(AND($AW$9<$AX$2,$AW$9>=$AX$5),AND($AW$9>$AX$4,$AW$9<=$AX$7)),$AW$9,\"\"\"\")\"\n\"IF(AND(COUNT($F$2:$F$8)>0,MAX($F$2:$F$8)>$B$4),MAX($F$2:$F$8),$B$4)\"\n\"$B$10\"\n\"IF(AND(COUNT($R$2:$R$8)>0,MAX($R$2:$R$8)>$N$4),MAX($R$2:$R$8),$N$4)\"\n\"$N$10\"\n\"IF(AND(COUNT($AD$2:$AD$16)>0,MAX($AD$2:$AD$16)>$Z$4),MAX($AD$2:$AD$16),$Z$4)\"\n\"IF(OR($Y$10<$Z$6,$Y$10>$Z$8),$Y$10,#N/A)\"\n\"IF(OR(AND($Y$10<$Z$5,$Y$10>=$Z$6),AND($Y$10>$Z$7,$Y$10<=$Z$8)),$Y$10,#N/A)\"\n\"IF(OR(AND($Y$10<$Z$2,$Y$10>=$Z$5),AND($Y$10>$Z$4,$Y$10<=$Z$7)),$Y$10,\"\"\"\")\"\n\"$Z$10\"\n\"IF(AND(COUNT($AP$2:$AP$16)>0,MAX($AP$2:$AP$16)>$AL$4),MAX($AP$2:$AP$16),$AL$4)\"\n\"IF(OR($AK$10<$AL$6,$AK$10>$AL$8),$AK$10,#N/A)\"\n\"IF(OR(AND($AK$10<$AL$5,$AK$10>=$AL$6),AND($AK$10>$AL$7,$AK$10<=$AL$8)),$AK$10,#N/A)\"\n\"IF(OR(AND($AK$10<$AL$2,$AK$10>=$AL$5),AND($AK$10>$AL$4,$AK$10<=$AL$7)),$AK$10,\"\"\"\")\"\n\"$AL$10\"\n\"IF(AND(COUNT($BB$2:$BB$17)>0,MAX($BB$2:$BB$17)>$AX$4),MAX($BB$2:$BB$17),$AX$4)\"\n\"IF(OR($AW$10<$AX$6,$AW$10>$AX$8),$AW$10,#N/A)\"\n\"IF(OR(AND($AW$10<$AX$5,$AW$10>=$AX$6),AND($AW$10>$AX$7,$AW$10<=$AX$8)),$AW$10,#N/A)\"\n\"IF(OR(AND($AW$10<$AX$2,$AW$10>=$AX$5),AND($AW$10>$AX$4,$AW$10<=$AX$7)),$AW$10,\"\"\"\")\"\n\"$AX$10\"\n\"QUARTILE($Y$17:$Y$31,1)\"\n\"IF(OR($Y$11<$Z$6,$Y$11>$Z$8),$Y$11,#N/A)\"\n\"IF(OR(AND($Y$11<$Z$5,$Y$11>=$Z$6),AND($Y$11>$Z$7,$Y$11<=$Z$8)),$Y$11,#N/A)\"\n\"IF(OR(AND($Y$11<$Z$2,$Y$11>=$Z$5),AND($Y$11>$Z$4,$Y$11<=$Z$7)),$Y$11,\"\"\"\")\"\n\"QUARTILE($AK$17:$AK$31,1)\"\n\"IF(OR($AK$11<$AL$6,$AK$11>$AL$8),$AK$11,#N/A)\"\n\"IF(OR(AND($AK$11<$AL$5,$AK$11>=$AL$6),AND($AK$11>$AL$7,$AK$11<=$AL$8)),$AK$11,#N/A)\"\n\"IF(OR(AND($AK$11<$AL$2,$AK$11>=$AL$5),AND($AK$11>$AL$4,$AK$11<=$AL$7)),$AK$11,\"\"\"\")\"\n\"QUARTILE($AW$18:$AW$33,1)\"\n\"IF(OR($AW$11<$AX$6,$AW$11>$AX$8),$AW$11,#N/A)\"\n\"IF(OR(AND($AW$11<$AX$5,$AW$11>=$AX$6),AND($AW$11>$AX$7,$AW$11<=$AX$8)),$AW$11,#N/A)\"\n\"IF(OR(AND($AW$11<$AX$2,$AW$11>=$AX$5),AND($AW$11>$AX$4,$AW$11<=$AX$7)),$AW$11,\"\"\"\")\"\n\"QUARTILE($Y$17:$Y$31,2)\"\n\"IF(OR($Y$12<$Z$6,$Y$12>$Z$8),$Y$12,#N/A)\"\n\"IF(OR(AND($Y$12<$Z$5,$Y$12>=$Z$6),AND($Y$12>$Z$7,$Y$12<=$Z$8)),$Y$12,#N/A)\"\n\"IF(OR(AND($Y$12<$Z$2,$Y$12>=$Z$5),AND($Y$12>$Z$4,$Y$12<=$Z$7)),$Y$12,\"\"\"\")\"\n\"QUARTILE($AK$17:$AK$31,2)\"\n\"IF(OR($AK$12<$AL$6,$AK$12>$AL$8),$AK$12,#N/A)\"\n\"IF(OR(AND($AK$12<$AL$5,$AK$12>=$AL$6),AND($AK$12>$AL$7,$AK$12<=$AL$8)),$AK$12,#N/A)\"\n\"IF(OR(AND($AK$12<$AL$2,$AK$12>=$AL$5),AND($AK$12>$AL$4,$AK$12<=$AL$7)),$AK$12,\"\"\"\")\"\n\"QUARTILE($AW$18:$AW$33,2)\"\n\"IF(OR($AW$12<$AX$6,$AW$12>$AX$8),$AW$12,#N/A)\"\n\"IF(OR(AND($AW$12<$AX$5,$AW$12>=$AX$6),AND($AW$12>$AX$7,$AW$12<=$AX$8)),$AW$12,#N/A)\"\n\"IF(OR(AND($AW$12<$AX$2,$AW$12>=$AX$5),AND($AW$12>$AX$4,$AW$12<=$AX$7)),$AW$12,\"\"\"\")\"\n\"QUARTILE($Y$17:$Y$31,3)\"\n\"IF(OR($Y$13<$Z$6,$Y$13>$Z$8),$Y$13,#N/A)\"\n\"IF(OR(AND($Y$13<$Z$5,$Y$13>=$Z$6),AND($Y$13>$Z$7,$Y$13<=$Z$8)),$Y$13,#N/A)\"\n\"IF(OR(AND($Y$13<$Z$2,$Y$13>=$Z$5),AND($Y$13>$Z$4,$Y$13<=$Z$7)),$Y$13,\"\"\"\")\"\n\"QUARTILE($AK$17:$AK$31,3)\"\n\"IF(OR($AK$13<$AL$6,$AK$13>$AL$8),$AK$13,#N/A)\"\n\"IF(OR(AND($AK$13<$AL$5,$AK$13>=$AL$6),AND($AK$13>$AL$7,$AK$13<=$AL$8)),$AK$13,#N/A)\"\n\"IF(OR(AND($AK$13<$AL$2,$AK$13>=$AL$5),AND($AK$13>$AL$4,$AK$13<=$AL$7)),$AK$13,\"\"\"\")\"\n\"QUARTILE($AW$18:$AW$33,3)\"\n\"IF(OR($AW$13<$AX$6,$AW$13>$AX$8),$AW$13,#N/A)\"\n\"IF(OR(AND($AW$13<$AX$5,$AW$13>=$AX$6),AND($AW$13>$AX$7,$AW$13<=$AX$8)),$AW$13,#N/A)\"\n\"IF(OR(AND($AW$13<$AX$2,$AW$13>=$AX$5),AND($AW$13>$AX$4,$AW$13<=$AX$7)),$AW$13,\"\"\"\")\"\n\"$Z$11-1.5*($Z$13-$Z$11)\"\n\"IF(OR($Y$14<$Z$6,$Y$14>$Z$8),$Y$14,#N/A)\"\n\"IF(OR(AND($Y$14<$Z$5,$Y$14>=$Z$6),AND($Y$14>$Z$7,$Y$14<=$Z$8)),$Y$14,#N/A)\"\n\"IF(OR(AND($Y$14<$Z$2,$Y$14>=$Z$5),AND($Y$14>$Z$4,$Y$14<=$Z$7)),$Y$14,\"\"\"\")\"\n\"$AL$11-1.5*($AL$13-$AL$11)\"\n\"IF(OR($AK$14<$AL$6,$AK$14>$AL$8),$AK$14,#N/A)\"\n\"IF(OR(AND($AK$14<$AL$5,$AK$14>=$AL$6),AND($AK$14>$AL$7,$AK$14<=$AL$8)),$AK$14,#N/A)\"\n\"IF(OR(AND($AK$14<$AL$2,$AK$14>=$AL$5),AND($AK$14>$AL$4,$AK$14<=$AL$7)),$AK$14,\"\"\"\")\"\n\"$AX$11-1.5*($AX$13-$AX$11)\"\n\"IF(OR($AW$14<$AX$6,$AW$14>$AX$8),$AW$14,#N/A)\"\n\"IF(OR(AND($AW$14<$AX$5,$AW$14>=$AX$6),AND($AW$14>$AX$7,$AW$14<=$AX$8)),$AW$14,#N/A)\"\n\"IF(OR(AND($AW$14<$AX$2,$AW$14>=$AX$5),AND($AW$14>$AX$4,$AW$14<=$AX$7)),$AW$14,\"\"\"\")\"\n\"$Z$11-3*($Z$13-$Z$11)\"\n\"IF(OR($Y$15<$Z$6,$Y$15>$Z$8),$Y$15,#N/A)\"\n\"IF(OR(AND($Y$15<$Z$5,$Y$15>=$Z$6),AND($Y$15>$Z$7,$Y$15<=$Z$8)),$Y$15,#N/A)\"\n\"IF(OR(AND($Y$15<$Z$2,$Y$15>=$Z$5),AND($Y$15>$Z$4,$Y$15<=$Z$7)),$Y$15,\"\"\"\")\"\n\"$AL$11-3*($AL$13-$AL$11)\"\n\"IF(OR($AK$15<$AL$6,$AK$15>$AL$8),$AK$15,#N/A)\"\n\"IF(OR(AND($AK$15<$AL$5,$AK$15>=$AL$6),AND($AK$15>$AL$7,$AK$15<=$AL$8)),$AK$15,#N/A)\"\n\"IF(OR(AND($AK$15<$AL$2,$AK$15>=$AL$5),AND($AK$15>$AL$4,$AK$15<=$AL$7)),$AK$15,\"\"\"\")\"\n\"$AX$11-3*($AX$13-$AX$11)\"\n\"IF(OR($AW$15<$AX$6,$AW$15>$AX$8),$AW$15,#N/A)\"\n\"IF(OR(AND($AW$15<$AX$5,$AW$15>=$AX$6),AND($AW$15>$AX$7,$AW$15<=$AX$8)),$AW$15,#N/A)\"\n\"IF(OR(AND($AW$15<$AX$2,$AW$15>=$AX$5),AND($AW$15>$AX$4,$AW$15<=$AX$7)),$AW$15,\"\"\"\")\"\n\"$Z$13+1.5*($Z$13-$Z$11)\"\n\"IF(OR($Y$16<$Z$6,$Y$16>$Z$8),$Y$16,#N/A)\"\n\"IF(OR(AND($Y$16<$Z$5,$Y$16>=$Z$6),AND($Y$16>$Z$7,$Y$16<=$Z$8)),$Y$16,#N/A)\"\n\"IF(OR(AND($Y$16<$Z$2,$Y$16>=$Z$5),AND($Y$16>$Z$4,$Y$16<=$Z$7)),$Y$16,\"\"\"\")\"\n\"$Z$12\"\n\"$AL$13+1.5*($AL$13-$AL$11)\"\n\"IF(OR($AK$16<$AL$6,$AK$16>$AL$8),$AK$16,#N/A)\"\n\"IF(OR(AND($AK$16<$AL$5,$AK$16>=$AL$6),AND($AK$16>$AL$7,$AK$16<=$AL$8)),$AK$16,#N/A)\"\n\"IF(OR(AND($AK$16<$AL$2,$AK$16>=$AL$5),AND($AK$16>$AL$4,$AK$16<=$AL$7)),$AK$16,\"\"\"\")\"\n\"$AL$12\"\n\"$AX$13+1.5*($AX$13-$AX$11)\"\n\"IF(OR($AW$16<$AX$6,$AW$16>$AX$8),$AW$16,#N/A)\"\n\"IF(OR(AND($AW$16<$AX$5,$AW$16>=$AX$6),AND($AW$16>$AX$7,$AW$16<=$AX$8)),$AW$16,#N/A)\"\n\"IF(OR(AND($AW$16<$AX$2,$AW$16>=$AX$5),AND($AW$16>$AX$4,$AW$16<=$AX$7)),$AW$16,\"\"\"\")\"\n\"$AX$12\"\n\"IF(ISBLANK(sandstone!C3),\"\"\"\",sandstone!C3)\"\n\"$Z$13+3*($Z$13-$Z$11)\"\n\"IF(OR($Y$17<$Z$15,$Y$17>$Z$17),$Y$17,#N/A)\"\n\"IF(OR(AND($Y$17<$Z$14,$Y$17>=$Z$15),AND($Y$17>$Z$16,$Y$17<=$Z$17)),$Y$17,#N/A)\"\n\"IF(OR(AND($Y$17<$Z$11,$Y$17>=$Z$14),AND($Y$17>$Z$13,$Y$17<=$Z$16)),$Y$17,\"\"\"\")\"\n\"$Z$11\"\n\"IF(ISBLANK(sandstone!C3),\"\"\"\",sandstone!C3)\"\n\"$AL$13+3*($AL$13-$AL$11)\"\n\"IF(OR($AK$17<$AL$15,$AK$17>$AL$17),$AK$17,#N/A)\"\n\"IF(OR(AND($AK$17<$AL$14,$AK$17>=$AL$15),AND($AK$17>$AL$16,$AK$17<=$AL$17)),$AK$17,#N/A)\"\n\"IF(OR(AND($AK$17<$AL$11,$AK$17>=$AL$14),AND($AK$17>$AL$13,$AK$17<=$AL$16)),$AK$17,\"\"\"\")\"\n\"$AL$11\"\n\"$AX$13+3*($AX$13-$AX$11)\"\n\"IF(OR($AW$17<$AX$6,$AW$17>$AX$8),$AW$17,#N/A)\"\n\"IF(OR(AND($AW$17<$AX$5,$AW$17>=$AX$6),AND($AW$17>$AX$7,$AW$17<=$AX$8)),$AW$17,#N/A)\"\n\"IF(OR(AND($AW$17<$AX$2,$AW$17>=$AX$5),AND($AW$17>$AX$4,$AW$17<=$AX$7)),$AW$17,\"\"\"\")\"\n\"$AX$11\"\n\"IF(AND(COUNT($AD$17:$AD$31)>0,MIN($AD$17:$AD$31)<$Z$11),MIN($AD$17:$AD$31),$Z$11)\"\n\"IF(OR($Y$18<$Z$15,$Y$18>$Z$17),$Y$18,#N/A)\"\n\"IF(OR(AND($Y$18<$Z$14,$Y$18>=$Z$15),AND($Y$18>$Z$16,$Y$18<=$Z$17)),$Y$18,#N/A)\"\n\"IF(OR(AND($Y$18<$Z$11,$Y$18>=$Z$14),AND($Y$18>$Z$13,$Y$18<=$Z$16)),$Y$18,\"\"\"\")\"\n\"IF(AND(COUNT($AP$17:$AP$31)>0,MIN($AP$17:$AP$31)<$AL$11),MIN($AP$17:$AP$31),$AL$11)\"\n\"IF(OR($AK$18<$AL$15,$AK$18>$AL$17),$AK$18,#N/A)\"\n\"IF(OR(AND($AK$18<$AL$14,$AK$18>=$AL$15),AND($AK$18>$AL$16,$AK$18<=$AL$17)),$AK$18,#N/A)\"\n\"IF(OR(AND($AK$18<$AL$11,$AK$18>=$AL$14),AND($AK$18>$AL$13,$AK$18<=$AL$16)),$AK$18,\"\"\"\")\"\n\"IF(ISBLANK(sandstone!C3),\"\"\"\",sandstone!C3)\"\n\"IF(AND(COUNT($BB$18:$BB$33)>0,MIN($BB$18:$BB$33)<$AX$11),MIN($BB$18:$BB$33),$AX$11)\"\n\"IF(OR($AW$18<$AX$15,$AW$18>$AX$17),$AW$18,#N/A)\"\n\"IF(OR(AND($AW$18<$AX$14,$AW$18>=$AX$15),AND($AW$18>$AX$16,$AW$18<=$AX$17)),$AW$18,#N/A)\"\n\"IF(OR(AND($AW$18<$AX$11,$AW$18>=$AX$14),AND($AW$18>$AX$13,$AW$18<=$AX$16)),$AW$18,\"\"\"\")\"\n\"IF(AND(COUNT($AD$17:$AD$31)>0,MAX($AD$17:$AD$31)>$Z$13),MAX($AD$17:$AD$31),$Z$13)\"\n\"IF(OR($Y$19<$Z$15,$Y$19>$Z$17),$Y$19,#N/A)\"\n\"IF(OR(AND($Y$19<$Z$14,$Y$19>=$Z$15),AND($Y$19>$Z$16,$Y$19<=$Z$17)),$Y$19,#N/A)\"\n\"IF(OR(AND($Y$19<$Z$11,$Y$19>=$Z$14),AND($Y$19>$Z$13,$Y$19<=$Z$16)),$Y$19,\"\"\"\")\"\n\"$Z$18\"\n\"IF(AND(COUNT($AP$17:$AP$31)>0,MAX($AP$17:$AP$31)>$AL$13),MAX($AP$17:$AP$31),$AL$13)\"\n\"IF(OR($AK$19<$AL$15,$AK$19>$AL$17),$AK$19,#N/A)\"\n\"IF(OR(AND($AK$19<$AL$14,$AK$19>=$AL$15),AND($AK$19>$AL$16,$AK$19<=$AL$17)),$AK$19,#N/A)\"\n\"IF(OR(AND($AK$19<$AL$11,$AK$19>=$AL$14),AND($AK$19>$AL$13,$AK$19<=$AL$16)),$AK$19,\"\"\"\")\"\n\"$AL$18\"\n\"IF(AND(COUNT($BB$18:$BB$33)>0,MAX($BB$18:$BB$33)>$AX$13),MAX($BB$18:$BB$33),$AX$13)\"\n\"IF(OR($AW$19<$AX$15,$AW$19>$AX$17),$AW$19,#N/A)\"\n\"IF(OR(AND($AW$19<$AX$14,$AW$19>=$AX$15),AND($AW$19>$AX$16,$AW$19<=$AX$17)),$AW$19,#N/A)\"\n\"IF(OR(AND($AW$19<$AX$11,$AW$19>=$AX$14),AND($AW$19>$AX$13,$AW$19<=$AX$16)),$AW$19,\"\"\"\")\"\n\"$AX$18\"\n\"IF(OR($Y$20<$Z$15,$Y$20>$Z$17),$Y$20,#N/A)\"\n\"IF(OR(AND($Y$20<$Z$14,$Y$20>=$Z$15),AND($Y$20>$Z$16,$Y$20<=$Z$17)),$Y$20,#N/A)\"\n\"IF(OR(AND($Y$20<$Z$11,$Y$20>=$Z$14),AND($Y$20>$Z$13,$Y$20<=$Z$16)),$Y$20,\"\"\"\")\"\n\"IF(OR($AK$20<$AL$15,$AK$20>$AL$17),$AK$20,#N/A)\"\n\"IF(OR(AND($AK$20<$AL$14,$AK$20>=$AL$15),AND($AK$20>$AL$16,$AK$20<=$AL$17)),$AK$20,#N/A)\"\n\"IF(OR(AND($AK$20<$AL$11,$AK$20>=$AL$14),AND($AK$20>$AL$13,$AK$20<=$AL$16)),$AK$20,\"\"\"\")\"\n\"IF(OR($AW$20<$AX$15,$AW$20>$AX$17),$AW$20,#N/A)\"\n\"IF(OR(AND($AW$20<$AX$14,$AW$20>=$AX$15),AND($AW$20>$AX$16,$AW$20<=$AX$17)),$AW$20,#N/A)\"\n\"IF(OR(AND($AW$20<$AX$11,$AW$20>=$AX$14),AND($AW$20>$AX$13,$AW$20<=$AX$16)),$AW$20,\"\"\"\")\"\n\"IF(OR($Y$21<$Z$15,$Y$21>$Z$17),$Y$21,#N/A)\"\n\"IF(OR(AND($Y$21<$Z$14,$Y$21>=$Z$15),AND($Y$21>$Z$16,$Y$21<=$Z$17)),$Y$21,#N/A)\"\n\"IF(OR(AND($Y$21<$Z$11,$Y$21>=$Z$14),AND($Y$21>$Z$13,$Y$21<=$Z$16)),$Y$21,\"\"\"\")\"\n\"IF(OR($AK$21<$AL$15,$AK$21>$AL$17),$AK$21,#N/A)\"\n\"IF(OR(AND($AK$21<$AL$14,$AK$21>=$AL$15),AND($AK$21>$AL$16,$AK$21<=$AL$17)),$AK$21,#N/A)\"\n\"IF(OR(AND($AK$21<$AL$11,$AK$21>=$AL$14),AND($AK$21>$AL$13,$AK$21<=$AL$16)),$AK$21,\"\"\"\")\"\n\"IF(OR($AW$21<$AX$15,$AW$21>$AX$17),$AW$21,#N/A)\"\n\"IF(OR(AND($AW$21<$AX$14,$AW$21>=$AX$15),AND($AW$21>$AX$16,$AW$21<=$AX$17)),$AW$21,#N/A)\"\n\"IF(OR(AND($AW$21<$AX$11,$AW$21>=$AX$14),AND($AW$21>$AX$13,$AW$21<=$AX$16)),$AW$21,\"\"\"\")\"\n\"IF(OR($Y$22<$Z$15,$Y$22>$Z$17),$Y$22,#N/A)\"\n\"IF(OR(AND($Y$22<$Z$14,$Y$22>=$Z$15),AND($Y$22>$Z$16,$Y$22<=$Z$17)),$Y$22,#N/A)\"\n\"IF(OR(AND($Y$22<$Z$11,$Y$22>=$Z$14),AND($Y$22>$Z$13,$Y$22<=$Z$16)),$Y$22,\"\"\"\")\"\n\"$Z$13\"\n\"IF(OR($AK$22<$AL$15,$AK$22>$AL$17),$AK$22,#N/A)\"\n\"IF(OR(AND($AK$22<$AL$14,$AK$22>=$AL$15),AND($AK$22>$AL$16,$AK$22<=$AL$17)),$AK$22,#N/A)\"\n\"IF(OR(AND($AK$22<$AL$11,$AK$22>=$AL$14),AND($AK$22>$AL$13,$AK$22<=$AL$16)),$AK$22,\"\"\"\")\"\n\"$AL$13\"\n\"IF(OR($AW$22<$AX$15,$AW$22>$AX$17),$AW$22,#N/A)\"\n\"IF(OR(AND($AW$22<$AX$14,$AW$22>=$AX$15),AND($AW$22>$AX$16,$AW$22<=$AX$17)),$AW$22,#N/A)\"\n\"IF(OR(AND($AW$22<$AX$11,$AW$22>=$AX$14),AND($AW$22>$AX$13,$AW$22<=$AX$16)),$AW$22,\"\"\"\")\"\n\"$AX$13\"\n\"IF(OR($Y$23<$Z$15,$Y$23>$Z$17),$Y$23,#N/A)\"\n\"IF(OR(AND($Y$23<$Z$14,$Y$23>=$Z$15),AND($Y$23>$Z$16,$Y$23<=$Z$17)),$Y$23,#N/A)\"\n\"IF(OR(AND($Y$23<$Z$11,$Y$23>=$Z$14),AND($Y$23>$Z$13,$Y$23<=$Z$16)),$Y$23,\"\"\"\")\"\n\"IF(OR($AK$23<$AL$15,$AK$23>$AL$17),$AK$23,#N/A)\"\n\"IF(OR(AND($AK$23<$AL$14,$AK$23>=$AL$15),AND($AK$23>$AL$16,$AK$23<=$AL$17)),$AK$23,#N/A)\"\n\"IF(OR(AND($AK$23<$AL$11,$AK$23>=$AL$14),AND($AK$23>$AL$13,$AK$23<=$AL$16)),$AK$23,\"\"\"\")\"\n\"IF(OR($AW$23<$AX$15,$AW$23>$AX$17),$AW$23,#N/A)\"\n\"IF(OR(AND($AW$23<$AX$14,$AW$23>=$AX$15),AND($AW$23>$AX$16,$AW$23<=$AX$17)),$AW$23,#N/A)\"\n\"IF(OR(AND($AW$23<$AX$11,$AW$23>=$AX$14),AND($AW$23>$AX$13,$AW$23<=$AX$16)),$AW$23,\"\"\"\")\"\n\"IF(OR($Y$24<$Z$15,$Y$24>$Z$17),$Y$24,#N/A)\"\n\"IF(OR(AND($Y$24<$Z$14,$Y$24>=$Z$15),AND($Y$24>$Z$16,$Y$24<=$Z$17)),$Y$24,#N/A)\"\n\"IF(OR(AND($Y$24<$Z$11,$Y$24>=$Z$14),AND($Y$24>$Z$13,$Y$24<=$Z$16)),$Y$24,\"\"\"\")\"\n\"$Z$19\"\n\"IF(OR($AK$24<$AL$15,$AK$24>$AL$17),$AK$24,#N/A)\"\n\"IF(OR(AND($AK$24<$AL$14,$AK$24>=$AL$15),AND($AK$24>$AL$16,$AK$24<=$AL$17)),$AK$24,#N/A)\"\n\"IF(OR(AND($AK$24<$AL$11,$AK$24>=$AL$14),AND($AK$24>$AL$13,$AK$24<=$AL$16)),$AK$24,\"\"\"\")\"\n\"$AL$19\"\n\"IF(OR($AW$24<$AX$15,$AW$24>$AX$17),$AW$24,#N/A)\"\n\"IF(OR(AND($AW$24<$AX$14,$AW$24>=$AX$15),AND($AW$24>$AX$16,$AW$24<=$AX$17)),$AW$24,#N/A)\"\n\"IF(OR(AND($AW$24<$AX$11,$AW$24>=$AX$14),AND($AW$24>$AX$13,$AW$24<=$AX$16)),$AW$24,\"\"\"\")\"\n\"$AX$19\"\n\"IF(OR($Y$25<$Z$15,$Y$25>$Z$17),$Y$25,#N/A)\"\n\"IF(OR(AND($Y$25<$Z$14,$Y$25>=$Z$15),AND($Y$25>$Z$16,$Y$25<=$Z$17)),$Y$25,#N/A)\"\n\"IF(OR(AND($Y$25<$Z$11,$Y$25>=$Z$14),AND($Y$25>$Z$13,$Y$25<=$Z$16)),$Y$25,\"\"\"\")\"\n\"IF(OR($AK$25<$AL$15,$AK$25>$AL$17),$AK$25,#N/A)\"\n\"IF(OR(AND($AK$25<$AL$14,$AK$25>=$AL$15),AND($AK$25>$AL$16,$AK$25<=$AL$17)),$AK$25,#N/A)\"\n\"IF(OR(AND($AK$25<$AL$11,$AK$25>=$AL$14),AND($AK$25>$AL$13,$AK$25<=$AL$16)),$AK$25,\"\"\"\")\"\n\"IF(OR($AW$25<$AX$15,$AW$25>$AX$17),$AW$25,#N/A)\"\n\"IF(OR(AND($AW$25<$AX$14,$AW$25>=$AX$15),AND($AW$25>$AX$16,$AW$25<=$AX$17)),$AW$25,#N/A)\"\n\"IF(OR(AND($AW$25<$AX$11,$AW$25>=$AX$14),AND($AW$25>$AX$13,$AW$25<=$AX$16)),$AW$25,\"\"\"\")\"\n\"IF(OR($Y$26<$Z$15,$Y$26>$Z$17),$Y$26,#N/A)\"\n\"IF(OR(AND($Y$26<$Z$14,$Y$26>=$Z$15),AND($Y$26>$Z$16,$Y$26<=$Z$17)),$Y$26,#N/A)\"\n\"IF(OR(AND($Y$26<$Z$11,$Y$26>=$Z$14),AND($Y$26>$Z$13,$Y$26<=$Z$16)),$Y$26,\"\"\"\")\"\n\"IF(OR($AK$26<$AL$15,$AK$26>$AL$17),$AK$26,#N/A)\"\n\"IF(OR(AND($AK$26<$AL$14,$AK$26>=$AL$15),AND($AK$26>$AL$16,$AK$26<=$AL$17)),$AK$26,#N/A)\"\n\"IF(OR(AND($AK$26<$AL$11,$AK$26>=$AL$14),AND($AK$26>$AL$13,$AK$26<=$AL$16)),$AK$26,\"\"\"\")\"\n\"IF(OR($AW$26<$AX$15,$AW$26>$AX$17),$AW$26,#N/A)\"\n\"IF(OR(AND($AW$26<$AX$14,$AW$26>=$AX$15),AND($AW$26>$AX$16,$AW$26<=$AX$17)),$AW$26,#N/A)\"\n\"IF(OR(AND($AW$26<$AX$11,$AW$26>=$AX$14),AND($AW$26>$AX$13,$AW$26<=$AX$16)),$AW$26,\"\"\"\")\"\n\"IF(OR($Y$27<$Z$15,$Y$27>$Z$17),$Y$27,#N/A)\"\n\"IF(OR(AND($Y$27<$Z$14,$Y$27>=$Z$15),AND($Y$27>$Z$16,$Y$27<=$Z$17)),$Y$27,#N/A)\"\n\"IF(OR(AND($Y$27<$Z$11,$Y$27>=$Z$14),AND($Y$27>$Z$13,$Y$27<=$Z$16)),$Y$27,\"\"\"\")\"\n\"IF(OR($AK$27<$AL$15,$AK$27>$AL$17),$AK$27,#N/A)\"\n\"IF(OR(AND($AK$27<$AL$14,$AK$27>=$AL$15),AND($AK$27>$AL$16,$AK$27<=$AL$17)),$AK$27,#N/A)\"\n\"IF(OR(AND($AK$27<$AL$11,$AK$27>=$AL$14),AND($AK$27>$AL$13,$AK$27<=$AL$16)),$AK$27,\"\"\"\")\"\n\"IF(OR($AW$27<$AX$15,$AW$27>$AX$17),$AW$27,#N/A)\"\n\"IF(OR(AND($AW$27<$AX$14,$AW$27>=$AX$15),AND($AW$27>$AX$16,$AW$27<=$AX$17)),$AW$27,#N/A)\"\n\"IF(OR(AND($AW$27<$AX$11,$AW$27>=$AX$14),AND($AW$27>$AX$13,$AW$27<=$AX$16)),$AW$27,\"\"\"\")\"\n\"IF(OR($Y$28<$Z$15,$Y$28>$Z$17),$Y$28,#N/A)\"\n\"IF(OR(AND($Y$28<$Z$14,$Y$28>=$Z$15),AND($Y$28>$Z$16,$Y$28<=$Z$17)),$Y$28,#N/A)\"\n\"IF(OR(AND($Y$28<$Z$11,$Y$28>=$Z$14),AND($Y$28>$Z$13,$Y$28<=$Z$16)),$Y$28,\"\"\"\")\"\n\"IF(OR($AK$28<$AL$15,$AK$28>$AL$17),$AK$28,#N/A)\"\n\"IF(OR(AND($AK$28<$AL$14,$AK$28>=$AL$15),AND($AK$28>$AL$16,$AK$28<=$AL$17)),$AK$28,#N/A)\"\n\"IF(OR(AND($AK$28<$AL$11,$AK$28>=$AL$14),AND($AK$28>$AL$13,$AK$28<=$AL$16)),$AK$28,\"\"\"\")\"\n\"IF(OR($AW$28<$AX$15,$AW$28>$AX$17),$AW$28,#N/A)\"\n\"IF(OR(AND($AW$28<$AX$14,$AW$28>=$AX$15),AND($AW$28>$AX$16,$AW$28<=$AX$17)),$AW$28,#N/A)\"\n\"IF(OR(AND($AW$28<$AX$11,$AW$28>=$AX$14),AND($AW$28>$AX$13,$AW$28<=$AX$16)),$AW$28,\"\"\"\")\"\n\"IF(OR($Y$29<$Z$15,$Y$29>$Z$17),$Y$29,#N/A)\"\n\"IF(OR(AND($Y$29<$Z$14,$Y$29>=$Z$15),AND($Y$29>$Z$16,$Y$29<=$Z$17)),$Y$29,#N/A)\"\n\"IF(OR(AND($Y$29<$Z$11,$Y$29>=$Z$14),AND($Y$29>$Z$13,$Y$29<=$Z$16)),$Y$29,\"\"\"\")\"\n\"IF(OR($AK$29<$AL$15,$AK$29>$AL$17),$AK$29,#N/A)\"\n\"IF(OR(AND($AK$29<$AL$14,$AK$29>=$AL$15),AND($AK$29>$AL$16,$AK$29<=$AL$17)),$AK$29,#N/A)\"\n\"IF(OR(AND($AK$29<$AL$11,$AK$29>=$AL$14),AND($AK$29>$AL$13,$AK$29<=$AL$16)),$AK$29,\"\"\"\")\"\n\"IF(OR($AW$29<$AX$15,$AW$29>$AX$17),$AW$29,#N/A)\"\n\"IF(OR(AND($AW$29<$AX$14,$AW$29>=$AX$15),AND($AW$29>$AX$16,$AW$29<=$AX$17)),$AW$29,#N/A)\"\n\"IF(OR(AND($AW$29<$AX$11,$AW$29>=$AX$14),AND($AW$29>$AX$13,$AW$29<=$AX$16)),$AW$29,\"\"\"\")\"\n\"IF(OR($Y$30<$Z$15,$Y$30>$Z$17),$Y$30,#N/A)\"\n\"IF(OR(AND($Y$30<$Z$14,$Y$30>=$Z$15),AND($Y$30>$Z$16,$Y$30<=$Z$17)),$Y$30,#N/A)\"\n\"IF(OR(AND($Y$30<$Z$11,$Y$30>=$Z$14),AND($Y$30>$Z$13,$Y$30<=$Z$16)),$Y$30,\"\"\"\")\"\n\"IF(OR($AK$30<$AL$15,$AK$30>$AL$17),$AK$30,#N/A)\"\n\"IF(OR(AND($AK$30<$AL$14,$AK$30>=$AL$15),AND($AK$30>$AL$16,$AK$30<=$AL$17)),$AK$30,#N/A)\"\n\"IF(OR(AND($AK$30<$AL$11,$AK$30>=$AL$14),AND($AK$30>$AL$13,$AK$30<=$AL$16)),$AK$30,\"\"\"\")\"\n\"IF(OR($AW$30<$AX$15,$AW$30>$AX$17),$AW$30,#N/A)\"\n\"IF(OR(AND($AW$30<$AX$14,$AW$30>=$AX$15),AND($AW$30>$AX$16,$AW$30<=$AX$17)),$AW$30,#N/A)\"\n\"IF(OR(AND($AW$30<$AX$11,$AW$30>=$AX$14),AND($AW$30>$AX$13,$AW$30<=$AX$16)),$AW$30,\"\"\"\")\"\n\"IF(OR($Y$31<$Z$15,$Y$31>$Z$17),$Y$31,#N/A)\"\n\"IF(OR(AND($Y$31<$Z$14,$Y$31>=$Z$15),AND($Y$31>$Z$16,$Y$31<=$Z$17)),$Y$31,#N/A)\"\n\"IF(OR(AND($Y$31<$Z$11,$Y$31>=$Z$14),AND($Y$31>$Z$13,$Y$31<=$Z$16)),$Y$31,\"\"\"\")\"\n\"IF(OR($AK$31<$AL$15,$AK$31>$AL$17),$AK$31,#N/A)\"\n\"IF(OR(AND($AK$31<$AL$14,$AK$31>=$AL$15),AND($AK$31>$AL$16,$AK$31<=$AL$17)),$AK$31,#N/A)\"\n\"IF(OR(AND($AK$31<$AL$11,$AK$31>=$AL$14),AND($AK$31>$AL$13,$AK$31<=$AL$16)),$AK$31,\"\"\"\")\"\n\"IF(OR($AW$31<$AX$15,$AW$31>$AX$17),$AW$31,#N/A)\"\n\"IF(OR(AND($AW$31<$AX$14,$AW$31>=$AX$15),AND($AW$31>$AX$16,$AW$31<=$AX$17)),$AW$31,#N/A)\"\n\"IF(OR(AND($AW$31<$AX$11,$AW$31>=$AX$14),AND($AW$31>$AX$13,$AW$31<=$AX$16)),$AW$31,\"\"\"\")\"\n\"IF(OR($AW$32<$AX$15,$AW$32>$AX$17),$AW$32,#N/A)\"\n\"IF(OR(AND($AW$32<$AX$14,$AW$32>=$AX$15),AND($AW$32>$AX$16,$AW$32<=$AX$17)),$AW$32,#N/A)\"\n\"IF(OR(AND($AW$32<$AX$11,$AW$32>=$AX$14),AND($AW$32>$AX$13,$AW$32<=$AX$16)),$AW$32,\"\"\"\")\"\n\"IF(OR($AW$33<$AX$15,$AW$33>$AX$17),$AW$33,#N/A)\"\n\"IF(OR(AND($AW$33<$AX$14,$AW$33>=$AX$15),AND($AW$33>$AX$16,$AW$33<=$AX$17)),$AW$33,#N/A)\"\n\"IF(OR(AND($AW$33<$AX$11,$AW$33>=$AX$14),AND($AW$33>$AX$13,$AW$33<=$AX$16)),$AW$33,\"\"\"\")\"\n\"0.1*(B9-C9)\"\n\"B9+D9-C9\"\n\"-C9\"\n\"D9/(1.1)^(A9+1)\"\n\"E9\"\n\"SUM(F9:F19)\"\n\"F20+G20\"\n\"-C28/(1.1)^1\"\n\"-C29/(1.1)^2\"\n\"-C30/(1.1)^3\"\n\"-C31/(1.1)^4\"\n\"-C32/(1.1)^5\"\n\"-C33/(1.1)^6\"\n\"-C34/(1.1)^7\"\n\"-C35/(1.1)^8\"\n\"-C36/(1.1)^9\"\n\"SUM(F27:F36)\"\n\"J11*D28\"\n\"SUM(E12+F12+G12+H12)\"\n\"I12/12\"\n\"E11+E12+E13+E14+E15+E16\"\n\"SUM(E11+E12+E13+E14+E15)\"\n\"E22/E16\"\n\"SUM(E13+E14+E15+E16)/SUM(E11+E12)\"\n\"SUM(F11:J11)-E11\"\n\"SUM(D11:D16)\"\n\"SUM(F11:F16)\"\n\"SUM(E18:E27)\"\n\"0.18*E28\"\n\"SUM(E28:E30)\"\n\"SUM(F41:J41)-D41\"\n\"D47/$D$47\"\n\"(D47-D46)/D46\"\n\"F22/E22\"\n\"F21/E21\"\n\"D47-(D46+D43)\"\n\"E23/D52\"\n\"F23/F52\"\n\"SUM(F54:I54)-E54\"\n\"D47/E54\"\n\"F49/F54\"\n\"E55*1900\"\n\"E13/D13\"\n\"G13/D13\"\n\"SUM(C13:C18)\"\n\"SUM(D13:D19)\"\n\"SUM(E13:E18)\"\n\"SUM(D20:D29)\"\n\"D30*0.18\"\n\"SUM(D30:D32)\"\n\"(B4+C4)*0.06\"\n\"B4+C4+D4\"\n\"E4\"\n\"SUM(C4:C48)\"\n\"0*B4\"\n\"D2*(B4-C4)\"\n\"E2*(B4-C4+D4)\"\n\"B4-C4+D4-E4\"\n\"F4\"\n\"D2*(B5-C5)\"\n\"E2*(B5-C5+D5)\"\n\"D2*(B6-C6)\"\n\"E2*(B6-C6+D6)\"\n\"D2*(B7-C7)\"\n\"E2*(B7-C7+D7)\"\n\"D2*(B8-C8)\"\n\"E2*(B8-C8+D8)\"\n\"D2*(B9-C9)\"\n\"E2*(B9-C9+D9)\"\n\"D2*(B10-C10)\"\n\"E2*(B10-C10+D10)\"\n\"D2*(B11-C11)\"\n\"E2*(B11-C11+D11)\"\n\"D2*(B12-C12)\"\n\"E2*(B12-C12+D12)\"\n\"D2*(B13-C13)\"\n\"E2*(B13-C13+D13)\"\n\"(12*(C8*C7/4*C10-C8*C7/4*C11))/(C9*(C7^2))\"\n\"RADIANS(45)\"\n\"(((2*PI()/86400)^(-1))*(C16*(10^4))*SIN(C17))/((6.38*(10^6)))+1\"\n\"(5/2*(C15*(10^10))/(5.97*(10^24)))*C18\"\n\"RADIANS(C22)\"\n\"C21*9.81/SIN(C23)/2\"\n\"(C28*0.5*C27*9.81-C29*0.5*C27*9.81)/(C30*9.81)\"\n\"(C34*C39+C39/2*C35)/(SIN(C37)*C38)\"\n\"C40*COS(C37)\"\n\"C34+C35-SIN(C37)*C40\"\n\"(J3+P3+Z3)/3\"\n\"(K3+Q3+AA3+AN3)/4\"\n\"I3/F3\"\n\"(IF(L3=\"\"x\"\",1)+IF(M3=\"\"x\"\",1)+IF(N3=\"\"x\"\",1))/3\"\n\"O3/F3\"\n\"(IF(R3=\"\"x\"\",1)+IF(S3=\"\"x\"\",1)+IF(T3=\"\"x\"\",1)+IF(U3=\"\"x\"\",1)+IF(V3=\"\"x\"\",1)+IF(W3=\"\"x\"\",1)+IF(X3=\"\"x\"\",1))/7\"\n\"Y3/F3\"\n\"(IF(AB3=\"\"x\"\",1)+IF(AC3=\"\"x\"\",1)+IF(AD3=\"\"x\"\",1)+IF(AE3=\"\"x\"\",1)+IF(AF3=\"\"x\"\",1)+IF(AG3=\"\"x\"\",1)+IF(AH3=\"\"x\"\",1)+IF(AI3=\"\"x\"\",1)+IF(AJ3=\"\"x\"\",1)+IF(AK3=\"\"x\"\",1))/10\"\n\"AL3/F3\"\n\"(IF(AO3=\"\"x\"\",1)+IF(AP3=\"\"x\"\",1)+IF(AQ3=\"\"x\"\",1)+IF(AR3=\"\"x\"\",1)+IF(AS3=\"\"x\"\",1)+IF(AT3=\"\"x\"\",1)+IF(AU3=\"\"x\"\",1)+IF(AV3=\"\"x\"\",1)+IF(AW3=\"\"x\"\",1))/9\"\n\"C2+D2+E2+F2+G2+H2+I2+J2+L2+K2+M2+N2\"\n\"SUM(C2:C27)\"\n\"SUMPRODUCT(B$5:F$5,B6:F6)\"\n\"SUMPRODUCT(B$5:F$5,B6:F6)\"\n\"AVERAGE(B3:B12)\"\n\"AVERAGE(B3:E12)\"\n\"0.8*B14\"\n\"B15+0.25\"\n\"B14*0.75\"\n\"1.25*B17\"\n\"B18-B16\"\n\"B5-C5\"\n\"D5\"\n\"C5\"\n\"E5*(1+0.05)+D6\"\n\"1*(1.05)+D16\"\n\"0.5*B9+0.5*C9\"\n\"B9*0.5+D9*0.5\"\n\"B9*0.5+E9*0.5\"\n\"B9*0.5+G9*0.5\"\n\"C9-F9\"\n\"Q9-Q8\"\n\"AVERAGE(B9:B91)\"\n\"STDEV(B9:B91)\"\n\"VAR(B9:B91)\"\n\"B93/B95\"\n\"A5+1\"\n\"B6/10\"\n\"B9*10\"\n\"B10/50\"\n\"B11*3\"\n\"B12*15\"\n\"B13*25\"\n\"SUM(C6:C13)\"\n\"B17*100\"\n\"B18*75\"\n\"B19*50\"\n\"B20*45\"\n\"B21*30\"\n\"SUM(C17:C22)\"\n\"+((B29*B35)+(B30*B37)+(B31*(B37+B38))+(B32*(B37+B38+B39)))/(B37+B38+B39)\"\n\"((B28*(B35+B36+B38+B39))+(B29*(B36+B38+B39))+(B30*(B39+B38))+(B31*(B39)))/(B39+B38+B37)\"\n\"(E30-B28)*(-B47/B53)\"\n\"IF(E35>0,\"\"TENSION\"\",\"\"COMPRESSION\"\")\"\n\"(-E35*B35/B47)\"\n\"B35+B36\"\n\"(E32-B32)/(-B51/B52)\"\n\"(E37*(-B39/B52))\"\n\"(-B29*B35)/(B53*B37/B48)\"\n\"(-E39*(B53/B48))\"\n\"(E39*(B36/B48))+E36\"\n\"(E38-E41)/(B38/B50)\"\n\"(-E42*(B49/B50))\"\n\"((B39)^2+((B39/(B39+B38+B37)*B40)^2))^0.5\"\n\"(E37*B39/B52)/(B38/B45)\"\n\"((B38)^2+((B38/(B37+B39+B38)*B40)^2))^0.5\"\n\"(E42*(B38/B50)+(E44*B38/B45))/(B36/B46)\"\n\"((B36)^2+((B36/(B37+B38+B39)*B40)^2))^0.5\"\n\"-B32\"\n\"((B35)^2+((B35/(B37+B39+B38)*B40)^2))^0.5\"\n\"0\"\n\"((B36)^2+((B36/(B37+B38+B39)*B40)^2))^0.5\"\n\"((B37/(B37+B39+B38)*B40))\"\n\"((B38)^2+((B37/(B37+B38+B39)*B40)^2))^0.5\"\n\"((B37+B38)/(B37+B38+B39)*B40)\"\n\"((B39)^2+((B37+B38)/(B37+B38+B39)*B40)^2)^0.5\"\n\"(B35/(B37+B38+B39))*B40\"\n\"(($B$26*($B$33+$B$34+$B$36+$B$37))+($B$27*($B$34+$B$36+$B$37))+($B$28*($B$37+$B$36))+($B$29*($B$37)))/($B$37+$B$36+$B$35)\"\n\"+(($B$27*$B$33)+($B$28*$B$35)+($B$29*($B$35+$B$36))+($B$30*($B$35+$B$36+$B$37)))/($B$35+$B$36+$B$37)\"\n\"(E28-B26)*(-B45/B51)\"\n\"IF(E33>0,\"\"TENSION\"\",\"\"COMPRESSION\"\")\"\n\"(-E33*B33/B45)\"\n\"B33+B34\"\n\"(E30-B30)/(-B49/B50)\"\n\"(E35*(-B37/B50))\"\n\"(-B27*B33)/(B51*B35/B46)\"\n\"(-E37*(B51/B46))\"\n\"(E37*(B34/B46))+E34\"\n\"(E36-E39)/(B36/B48)\"\n\"(-E40*(B47/B48))\"\n\"((B37)^2+((B37/(B37+B36+B35)*B38)^2))^0.5\"\n\"(E35*B37/B50)/(B36/B43)\"\n\"((B36)^2+((B36/(B35+B37+B36)*B38)^2))^0.5\"\n\"(E40*(B36/B48)+(E42*B36/B43))/(B34/B44)\"\n\"((B34)^2+((B34/(B35+B36+B37)*B38)^2))^0.5\"\n\"-B30\"\n\"((B33)^2+((B33/(B35+B37+B36)*B38)^2))^0.5\"\n\"0\"\n\"((B34)^2+((B34/(B35+B36+B37)*B38)^2))^0.5\"\n\"((B35/(B35+B37+B36)*B38))\"\n\"((B36)^2+((B35/(B35+B36+B37)*B38)^2))^0.5\"\n\"((B35+B36)/(B35+B36+B37)*B38)\"\n\"((B37)^2+((B35+B36)/(B35+B36+B37)*B38)^2)^0.5\"\n\"(B33/(B35+B36+B37))*B38\"\n\"+((B33*B39)+(B34*B41)+(B35*(B41+B42))+(B36*(B41+B42+B43)))/(B41+B42+B43)\"\n\"((B32*(B39+B40+B42+B43))+(B33*(B40+B42+B43))+(B34*(B43+B42))+(B35*(B43)))/(B43+B42+B41)\"\n\"(E34-B32)*(-B51/B57)\"\n\"IF(E39>0,\"\"TENSION\"\",\"\"COMPRESSION\"\")\"\n\"(-E39*B39/B51)\"\n\"B39+B40\"\n\"(E36-B36)/(-B55/B56)\"\n\"(E41*(-B43/B56))\"\n\"(-B33*B39)/(B57*B41/B52)\"\n\"(-E43*(B57/B52))\"\n\"(E43*(B40/B52))+E40\"\n\"(E42-E45)/(B42/B54)\"\n\"(-E46*(B53/B54))\"\n\"((B43)^2+((B43/(B43+B42+B41)*B44)^2))^0.5\"\n\"(E41*B43/B56)/(B42/B49)\"\n\"((B42)^2+((B42/(B41+B43+B42)*B44)^2))^0.5\"\n\"(E46*(B42/B54)+(E48*B42/B49))/(B40/B50)\"\n\"((B40)^2+((B40/(B41+B42+B43)*B44)^2))^0.5\"\n\"-B36\"\n\"((B39)^2+((B39/(B41+B43+B42)*B44)^2))^0.5\"\n\"0\"\n\"((B40)^2+((B40/(B41+B42+B43)*B44)^2))^0.5\"\n\"((B41/(B41+B43+B42)*B44))\"\n\"((B42)^2+((B41/(B41+B42+B43)*B44)^2))^0.5\"\n\"((B41+B42)/(B41+B42+B43)*B44)\"\n\"((B43)^2+((B41+B42)/(B41+B42+B43)*B44)^2)^0.5\"\n\"(B39/(B41+B42+B43))*B44\"\n\"+EXP(-A10*8760*$B$4)\"\n\"+EXP(-A10*8760*$C$4)\"\n\"+B10*C10\"\n\"+(D10-D11)/((D10+D11)/2)/(8760/2)\"\n\"1-(1-D10)^2\"\n\"+(1-(1-B10)^2)*(1-(1-C10)^2)\"\n\"+D10\"\n\"+F10\"\n\"+H10\"\n\"+SUM(B23:B32)/2\"\n\"+(B23+B24)/2\"\n\"+E10\"\n\"G10\"\n\"+I10\"\n\"1*52\"\n\"8760*0.00001\"\n\"+D6*4\"\n\"+C6+E6\"\n\"+(8760-F6)/8760\"\n\"1/(1+1/(1/(D6/52)))\"\n\"2*52\"\n\"8760*0.00003\"\n\"+D7*8\"\n\"+D6+D7\"\n\"+D6*5\"\n\"+D7*5\"\n\"+G14\"\n\"2*I8\"\n\"+D7*5*2\"\n\"+I9\"\n\"3*0.00004\"\n\"1/G12\"\n\"+G13/52\"\n\"B6/B7*24\"\n\"D18*$B$17/(D18+$B$17)\"\n\"LN(H18)\"\n\"E18-B$15\"\n\"SLOPE(J17:J19,I17:I19)\"\n\"($B$17+D18)/D18\"\n\"B6/B7*24\"\n\"D18*$B$17/(D18+$B$17)\"\n\"LN(H18)\"\n\"E18-B$15\"\n\"SLOPE(J17:J19,I17:I19)\"\n\"0.5*K6*H6/F6\"\n\"'m(p)'!B15*$G$8\"\n\"B6/B7*24\"\n\"D18*$B$17/(D18+$B$17)\"\n\"LN(H18)\"\n\"E18-B$15\"\n\"SLOPE(J17:J19,I17:I19)\"\n\"0.0001-A4\"\n\"C4*C4/(B4*B4)\"\n\"E$1+8.314*298.15*LN(D4)\"\n\"E4/1000\"\n\"A4/0.0001\"\n\"AVERAGE(G19:G56)\"\n\"AVERAGE(I23:I56)\"\n\"AVERAGE(B14:B18)\"\n\"C18\"\n\"(B19-E19)/B19\"\n\"ABS(G19)\"\n\"2*C22-D22+((2/(5-1))*(C22-D22))\"\n\"(B23-F23)/B23\"\n\"EXP(6.626E-34*300000000/(0.0000229*1.3806E-23*500))-1\"\n\"2*6.626E-34*300000000/(0.0000229*1.3806E-23*500)\"\n\"8*3.1416*6.626E-34*300000000/(B6*0.000000001)^5\"\n\"1/(EXP((6.626E-34*300000000)/($B6*0.000000001*1.3806E-23*E$3))-1)\"\n\"C6*D6\"\n\"8*3.1416*1.3806E-23*E$3/((B6*0.000000001)^4)\"\n\"B6+B$3\"\n\"G233/E233\"\n\"SUM(E6:E504)\"\n\"4*0.0000000567*E3^4/300000000\"\n\"$B3*0.000000001*E506\"\n\"A17/1820\"\n\"200*0.88\"\n\"C17+D17\"\n\"200*12\"\n\"C17+176\"\n\"200*60*A18*0.06/1000\"\n\"200*13*A18*0.06/1000\"\n\"10*B14\"\n\"50000*5/C14\"\n\"D14*12\"\n\"D14*0.4\"\n\"E14+F14\"\n\"I4+1\"\n\"(I$4<$E5)*$D5+100*($E5=I$4+1)\"\n\"MMULT($I5:$P5,R$29:R$36)/100\"\n\"BETAINV(RAND(),AE5,AF5)\"\n\"F5\"\n\"MATCH(AA5,$AA$29:$AA$33,0)\"\n\"INDEX(AB$29:AB$33,$AB5)\"\n\"AC5+AD5*EXP(1)\"\n\"AD5+AC5*PI()\"\n\"1/(1+R41)^$Q41\"\n\"Q33+1\"\n\"R44\"\n\"SUM(C5:J5)\"\n\"Values!B5\"\n\"Values!G5\"\n\"MATCH(N5,$C$4:$I$4,0)\"\n\"INDEX(C$5:C$12,$P5)\"\n\"Values!AC5\"\n\"SUMPRODUCT(R5:X5,Values!R5:X5)+Y5*AA5\"\n\"AB5*O5\"\n\"Y5*AA5+(1-Y5)*1\"\n\"O5*AD5\"\n\"SUM(AC5:AC24)\"\n\"MMULT(C29:V48,TRANSPOSE(C29:V48))-C5:V24\"\n\"Probabilities!M5\"\n\"NORMSINV(RAND())\"\n\"MMULT(AB5:AU24,$G$5:$G$24)\"\n\"INDEX($Q$5:$Q$12,J5)\"\n\"INDEX(Values!R5:Y5,J5)\"\n\"L5*D5\"\n\"IF(J5=8,Values!Y5,1)\"\n\"D5*N5\"\n\"Correlations!C29\"\n\"SUM(Probabilities!C12:$J12)\"\n\"NORMSINV(S5)\"\n\"SUM(M5:M24)\"\n\"Probabilities!AC27\"\n\"M26-M27\"\n\"FREQUENCY(A:A,I4:I23)\"\n\"J4/N\"\n\"I4+1\"\n\"AVERAGE(A:A)\"\n\"AVERAGE(B:B)\"\n\"STDEV(A:A)\"\n\"STDEV(B:B)\"\n\"MIN(A:A)\"\n\"MIN(B:B)\"\n\"MAX(A:A)\"\n\"MAX(B:B)\"\n\"Probabilities!B5\"\n\"Probabilities!J5\"\n\"-SMALL(A:A,E19*N)\"\n\"-SMALL(B:B,E19*N)\"\n\"SUM(J4:J24)\"\n\"FREQUENCY(A:A,I30:I41)\"\n\"SUM(J$30:J30)/N\"\n\"I30+0.5\"\n\"SUM(J30:J42)\"\n\"AVERAGE(E18:E44)\"\n\"MEDIAN(E18:E44)\"\n\"BINOMDIST(0,5,0.58,FALSE)\"\n\"1-D19\"\n\"NORMDIST(83,75,8,TRUE)\"\n\"NORMDIST(C89,1,0.5,FALSE)\"\n\"NORMDIST(C89,1,1,FALSE)\"\n\"AVERAGE($C$11:$C$20)\"\n\"STDEVP($C$11:$C$20)\"\n\"STDEV($C$11:$C$20)\"\n\"FREQUENCY(D68:D77,D86:D89)\"\n\"MEDIAN($C$11:$C$20)\"\n\"MODE($C$11:$C$20)\"\n\"BINOMDIST(B11,25,0.4,0)\"\n\"B11+1\"\n\"F33\"\n\"I33\"\n\"J33\"\n\"F32\"\n\"F33\"\n\" E10 + 28*G10\"\n\"$F$33*B37 +$F$32\"\n\"CORREL(B9:K9,B10:K10)\"\n\"F42\"\n\"F43\"\n\"E20\"\n\"D21 +F21*88\"\n\"TRANSPOSE(A8:K10)\"\n\"F42+F43*88\"\n\"TRANSPOSE(A10:K10)\"\n\"TRANSPOSE(A9:K9)\"\n\"H22\"\n\"L29\"\n\"H29\"\n\"H30\"\n\"H34\"\n\"H35\"\n\"H36\"\n\"H37\"\n\"H34 +H35*90 +H36*20 + H37*12\"\n\"K35\"\n\"K36\"\n\"K37\"\n\"AVERAGE(B19:B38)\"\n\"STDEV(B19:B38)\"\n\"CORREL($B19:$B38,C19:C38)\"\n\"H41\"\n\"H55\"\n\"F63\"\n\"B56\"\n\"B89\"\n\"B90\"\n\"B91\"\n\"B89 + B90*0 + B91*100\"\n\"F84\"\n\"B77\"\n\"B84\"\n\"B85\"\n\"G17 - E13\"\n\"E90\"\n\"E91\"\n\"F91\"\n\"C28*D28\"\n\"B56\"\n\"F63\"\n\"E70\"\n\"B76\"\n\"E13-D8\"\n\"F83\"\n\"E89\"\n\"E91\"\n\"C29*D29\"\n\"A29+1\"\n\"M43\"\n\"I36\"\n\"M68\"\n\"I61\"\n\"O36\"\n\"L36\"\n\"L37\"\n\"A76\"\n\"J84\"\n\"J85\"\n\"A$24\"\n\"A$25\"\n\"A$26\"\n\"A$27\"\n\"SQRT(M59)\"\n\"K59\"\n\"J28\"\n\"J29\"\n\"K28\"\n\"K29\"\n\"SQRT(1/D83 + 1/E83)\"\n\"M29-M28\"\n\"H83/($C$78*F83)\"\n\"TDIST(I83,$C$79,2)\"\n\"J28\"\n\"K28\"\n\"M30-M28\"\n\"J28\"\n\"K28\"\n\"M31-M28\"\n\"K30\"\n\"M30-M29\"\n\"J29\"\n\"K29\"\n\"M31-M29\"\n\"K31\"\n\"M31-M30\"\n\"SUM(D2:D34)\"\n\"B3/300\"\n\"$B3*C8\"\n\"C8-C10\"\n\"C11\"\n\"C13/(1+$B4)^C7\"\n\"SUM(C14:J14)\"\n\"$E3/8\"\n\"(C20-C21)*$B3\"\n\"-B24\"\n\"B25\"\n\"C25/(1+$B4)^C19\"\n\"SUM(B26:J26)\"\n\"AVERAGE(B38:B42)\"\n\"VARP(B38:B42)\"\n\"COVAR(B38:B42,C38:C42)\"\n\"1-B52\"\n\"B52*$B46+B53*$C46\"\n\"(B52^2)*$B47+(B53^2)*$C47+2*B52*B53*$B48\"\n\"SQRT(B55)\"\n\"B74+B75\"\n\"((B74)^2)*B47+(B75)^2*C47+2*B48*B74*B75\"\n\"B74*B46+B75*C46\"\n\"B74\"\n\"B$81*$B38+B$82*$C38\"\n\"COVAR(B84:B88,C84:C88)\"\n\"COVAR(B84:B88,D84:D88)\"\n\"COVAR(C84:C88,D84:D88)\"\n\"B105*(1+0.13)\"\n\"(0.13-0.07)/0.08\"\n\"B107*2\"\n\"0.07+B108*0.08\"\n\"45.2/1.19\"\n\"40*1.13\"\n\"B120*0.4\"\n\"(1/1.1)^B119\"\n\"B121*B122\"\n\"SUM(B123:K123)\"\n\"(B135-60000)*0.25\"\n\"B135-B136\"\n\"B137-B134\"\n\"B124\"\n\"B138+B132\"\n\"A143-A141\"\n\"AVERAGE(B152:D152)\"\n\"SQRT(VARP(B152:D152))\"\n\"10+C160*(F154-10)/G154\"\n\"10+C161*(F154-10)/G154\"\n\"COVAR(B152:D152,B154:D154)\"\n\"VARP(B154:D154)\"\n\"B164/C164\"\n\"COVAR(B153:D153,B154:D154)\"\n\"VARP(B154:D154)\"\n\"(F152-10)/(F154-10)\"\n\"(F153-10)/(F154-10)\"\n\"((B3-B2)/B2)*100 %\"\n\"1-J3-J4\"\n\"J3*(SUM(E2:E63))+J4*(SUM(F2:F63)+J5*(G2:G63))\"\n\"SUM(J17:L19)\"\n\"SQRT(J8)*100 %\"\n\"J3^2*VARP(E2:E63)\"\n\"J18\"\n\"J19\"\n\"J3*J4*COVAR(E2:E63, F2:F63)\"\n\"J4^2*VARP(F2:F63)\"\n\"J3*J5*COVAR(E2:E63, G2:G63)\"\n\"J5*J4*COVAR(F2:F63, G2:G63)\"\n\"J5^2*VARP(G2:G63)\"\n\"SUM(B7:B12)\"\n\"SUM(B13:C13)\"\n\"SUM(B13:B17)\"\n\"SUM(B23:B31)\"\n\"SUM(B35:B36)\"\n\"+B32+B37\"\n\"+B41+B46\"\n\"SUM(B7:B12)\"\n\"SUM(B13:C13)\"\n\"SUM(B13:B17)\"\n\"SUM(B23:B31)\"\n\"SUM(B35:B36)\"\n\"+B32+B37\"\n\"+B41+B46\"\n\"C10-B10\"\n\"A10+1\"\n\"3*B110\"\n\"SUM(B10:B49)/COUNT(B10:B49)\"\n\"SUM(B56:B95)/COUNT(B56:B95)\"\n\"COUNT(B10:B49)\"\n\"COUNT(B56:B95)\"\n\"SUM(B10:B49)-10*B109\"\n\"SUM(B56:B95)-10*B110\"\n\"SUM(D10:D49)\"\n\"SUM(D56:D95)\"\n\"D116+D117\"\n\"B101\"\n\"A125\"\n\"B101+B102\"\n\"B101+B102+B103\"\n\"C109\"\n\"C110\"\n\"'Lab Notes'!B101\"\n\"'Lab Notes'!B101+'Lab Notes'!B102\"\n\"'Lab Notes'!B101+'Lab Notes'!B102+'Lab Notes'!B103\"\n\"'Lab Notes'!C109\"\n\"G12\"\n\"G14\"\n\"'Lab Notes'!D114\"\n\"'Lab Notes'!C109\"\n\"20*F46-10*F46\"\n\"5*'Lab Notes'!B101\"\n\"F47+F48\"\n\"'Lab Notes'!E114\"\n\"'Lab Notes'!B101+'Lab Notes'!B102+'Lab Notes'!B103\"\n\"-10*'Lab Notes'!B110\"\n\"25*'Lab Notes'!B101+20*'Lab Notes'!B102+'Lab Notes'!B103*5\"\n\"'Lab Notes'!C109\"\n\"'Lab Notes'!C110\"\n\"'Lab Notes'!D114\"\n\"'Lab Notes'!E114\"\n\"'Lab Notes'!D116\"\n\"'Lab Notes'!E116\"\n\"Homework!F45\"\n\"F55\"\n\"F47\"\n\"F57\"\n\"((C6/100)/12)\"\n\"(C4*((C8*((1+C8)^C10))/(((1+C8)^C10)-1)))\"\n\"(B6-B12)\"\n\"SQRT(((B6^2-B14^2)/3))\"\n\"(((B4*B14*B16)/(6*B8*B10*B6))*(B6^2-B16^2-B14^2))\"\n\"MINVERSE(A7:C9)\"\n\"MMULT(E7:G9,I7:I9)\"\n\"MMULT(A7:C9,K7:K9)\"\n\"TINV(0.05,100-1)\"\n\"B9-B8*B10/SQRT(B11)\"\n\"B9+B8*B10/SQRT(B11)\"\n\"NORMSINV(0.95)\"\n\"70/125\"\n\"B19-B18*SQRT((B19*(1-B19))/B20)\"\n\"B19+B18*SQRT((B19*(1-B19))/B20)\"\n\"(135-130)/(20/SQRT(85))\"\n\"+C67/2\"\n\"+C67\"\n\"+C67\"\n\"(C63-C66)/(C64/SQRT(C65))\"\n\"+F71\"\n\"TINV(F70*2,C65-1)\"\n\"-TINV(F70*2,C65-1)\"\n\"TINV(G70*2,C65-1)\"\n\"-TINV(H70*2,C65-1)\"\n\"IF(OR(F71>E72,F71<F72),\"\"Reject Null\"\",\"\"Accept Null\"\")\"\n\"IF(G71>G72,\"\"Reject Null\"\",\"\"Accept Null\"\")\"\n\"IF(H71<H72,\"\"Reject Null\"\",\"\"Accept Null\"\")\"\n\"15/1000\"\n\"+C128/2\"\n\"+C128\"\n\"+C128\"\n\"(C125-C127)/SQRT(C125*(1-C125)/C126)\"\n\"-NORMSINV(F130)\"\n\"NORMSINV(F130)\"\n\"-NORMSINV(G130)\"\n\"+M217-L217\"\n\"TINV(0.1,24-1)\"\n\"AVERAGE(K217:K240)\"\n\"STDEV(K217:K240)\"\n\"+C234/2\"\n\"+C234\"\n\"+C234\"\n\"(C231)/(C232/SQRT(C233))\"\n\"TINV(F240*2,C233-1)\"\n\"-TINV(F240*2,C233-1)\"\n\"TINV(G240*2,C233-1)\"\n\"-TINV(H240*2,C233-1)\"\n\"AVERAGE(J256:J265)\"\n\"STDEV(J256:J265)\"\n\"SQRT((((C300-1)*C298^2)+((C301-1)*C299^2))/(C300+C301-2))\"\n\"AVERAGE(J291:J300)\"\n\"STDEV(J291:J300)\"\n\"(C296-C297)/(G299*SQRT((1/C300)+(1/C301)))\"\n\"+F306\"\n\"TINV(F305*2,C300+C301-2)\"\n\"-TINV(F305*2,C300+C301-2)\"\n\"TINV(G305*2,C300+C301-2)\"\n\"-TINV(H305*2,C300+C301-2)\"\n\"683/3220\"\n\"1498/10245\"\n\"(C364-D364)/SQRT((C364*(1-C364)/C365)+(D364*(1-D364)/D365))\"\n\"130/200\"\n\"120/200\"\n\"ROUND(((F415^2)*(-NORMSINV(F416)-NORMSINV(F417))^2)/F414^2,0)+1\"\n\"ROUND(((F427^2+F428^2)*(-NORMSINV(F429/2)-NORMSINV(F430))^2)/F426^2,0)+1\"\n\"ROUND(((F453^2+F454^2)*(-NORMSINV(F455)-NORMSINV(F456))^2)/F452^2,0)+1\"\n\"AVERAGE(J474:J488)\"\n\"13/38\"\n\"11/36\"\n\"AVERAGE(H574:H585)\"\n\"STDEV(H574:H585)\"\n\"I574-J574\"\n\"TRANSPOSE(D10:D13)\"\n\"D10:D13\"\n\"B4*D$20*$B23\"\n\"MMULT(MINVERSE($D$23:$G$26),$I$23:$I$26)/H29\"\n\"MMULT(MINVERSE($D$23:$G$26),$B$10:$B$13)/H30\"\n\"MMULT(MINVERSE($D$23:$G$26),$B$10:$B$13-$G$11)/H31\"\n\"MMULT(TRANSPOSE(I23:I26),MMULT(MINVERSE($D$23:$G$26),$I$23:$I$26))\"\n\"MMULT(TRANSPOSE(I23:I26),MMULT(MINVERSE($D$23:$G$26),$B$10:$B$13))\"\n\"MMULT(TRANSPOSE(I23:I26),MMULT(MINVERSE($D$23:$G$26),$B$10:$B$13-$G$11))\"\n\"SUM(D29:D32)\"\n\"MMULT(TRANSPOSE(D29:D32),$B$10:$B$13)\"\n\"MMULT(MMULT(TRANSPOSE(D29:D32),$D$23:$G$26),D29:D32)\"\n\"SQRT(D36)\"\n\"MMULT(MMULT(TRANSPOSE(D29:F32),D23:G26),D29:F32)\"\n\"SQRT(B3)\"\n\"C6/$C$10\"\n\"SUM(C6:C9)\"\n\"TRANSPOSE($D$6:$D$9)\"\n\"C$12*$A14*'Problem Data'!B10\"\n\"SUM(C14:F17)\"\n\"SUM(C28:F28)\"\n\"C$26*'Problem Data'!B10\"\n\"A28/$D$19\"\n\"$D$43+C36*($D$42-$D$43)\"\n\"$D$64+C36*($D$63-$D$64)\"\n\"C45+0.02\"\n\"C46\"\n\"C94*1000000\"\n\"G93/G95\"\n\"TRANSPOSE(A105:A108)\"\n\"C94\"\n\"C$103*$A105*'Problem Data'!B10\"\n\"C103\"\n\"C$112*'Problem Data'!B10\"\n\"G93\"\n\"A114/$D$110\"\n\"$G$120+C120*($G$119-$G$120)\"\n\"C6*C7*C8\"\n\"C6*C7\"\n\"C20/D20\"\n\"100*(E20/$E$27)\"\n\"C6*C8\"\n\"(C7+C7+C6)*C8\"\n\"C6*C7\"\n\"0.018*C9*C15\"\n\"SUM(E20:E26)\"\n\"E27-E21\"\n\"C16-(C17/E28)\"\n\"D30\"\n\"D34+((C35-C34)*(D33-D34)/10)\"\n\"24*E28*D35\"\n\"D37/(C14)\"\n\"IF(C14<1,D38/100000,0)\"\n\"IF(C14=G35,D38/F10,0)\"\n\"D39*C10\"\n\"F39*C11\"\n\" C43+(C44*C45)\"\n\" C46*C10\"\n\"(C50*30*8.34*70)/(C51*100000)\"\n\"C52+C53\"\n\" (C54)*C10\"\n\"C57*C58\"\n\"C59*C10\"\n\"E65*C11\"\n\"C66*D66*30/1000\"\n\"E66*C11\"\n\"E67*C11\"\n\"E68*C11\"\n\"E69*C11\"\n\"E70*C11\"\n\"E71*C11\"\n\"E72*C11\"\n\"E73*C11\"\n\"E74*C11\"\n\"E75*C11\"\n\"E76*C11\"\n\"E77*C11\"\n\"E78*C11\"\n\"E79*C11\"\n\"SUM(E65:E79)\"\n\"C82/E82\"\n\"C83*C85\"\n\"D39+(C46+C54+C59)*12\"\n\"C86*C10\"\n\"(E80*12)+F39\"\n\"SUM(E85:E87)\"\n\"C85*C99\"\n\"C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100+C95*E95/100\"\n\"E102/C104\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E27)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E27*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E27)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E27*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E27)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E27*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E26)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E26*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E26)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E26*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E26)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E26*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C5*C6*C7\"\n\"C5*C6\"\n\"C19/D19\"\n\"100*(E19/$E$26)\"\n\"C5*C7\"\n\"(C6+C6+C5)*C7\"\n\"C5*C6\"\n\"0.018*C8*C14\"\n\"SUM(E19:E25)\"\n\"E26-E20\"\n\"C15-(C16/E26)\"\n\"D29\"\n\"D33+((C34-C33)*(D32-D33)/10)\"\n\"24*E26*D34\"\n\"D36/(C13)\"\n\"IF(C13<1,D37/100000,0)\"\n\"IF(C13=G34,D37/F9,0)\"\n\"D38*C9\"\n\"F38*C10\"\n\" C42+(C43*C44)\"\n\" C45*C9\"\n\"(C49*30*8.34*70)/(C50*100000)\"\n\"C51+C52\"\n\" (C53)*C9\"\n\"C56*C57\"\n\"C58*C9\"\n\"E64*C10\"\n\"C65*D65*30/1000\"\n\"E65*C10\"\n\"E66*C10\"\n\"E67*C10\"\n\"E68*C10\"\n\"E69*C10\"\n\"E70*C10\"\n\"E71*C10\"\n\"E72*C10\"\n\"E73*C10\"\n\"E74*C10\"\n\"E75*C10\"\n\"E76*C10\"\n\"E77*C10\"\n\"E78*C10\"\n\"SUM(E64:E78)\"\n\"C81/E81\"\n\"C82*C84\"\n\"D38+(C45+C53+C58)*12\"\n\"C85*C9\"\n\"(E79*12)+F38\"\n\"SUM(E84:E86)\"\n\"C84*C98\"\n\"C90*E90/100+C91*E91/100+C92*E92/100+C93*E93/100+C94*E94/100\"\n\"E101/C103\"\n\"C4-B4\"\n\"1/E4\"\n\"F4*D4\"\n\"H4/2\"\n\"J4/3\"\n\"G4/ABS(L4*$L$19+M4*$M$19+N4*$N$19+O4*$O$19)\"\n\"SUM(L4:L16)\"\n\"MIN(P4:P16)\"\n\"1-L17\"\n\"G34/ABS(L34*$L$44+M34*$M$44+N34*$N$44+O34*$O$44)\"\n\"SUM(L34:L41)\"\n\"MIN(P34:P41)\"\n\"G52/ABS(L52*$L$61+M52*$M$61+N52*$N$61+O52*$O$61)\"\n\"SUM(L52:L58)\"\n\"MIN(P52:P58)\"\n\"G68/ABS(L68*$L$76+M68*$M$76+N68*$N$76+O68*$O$76)\"\n\"SUM(L68:L73)\"\n\"MIN(P68:P73)\"\n\"G83/ABS(L83*$L$90+M83*$M$90+N83*$N$90+O83*$O$90)\"\n\"SUM(L83:L87)\"\n\"MIN(P83:P87)\"\n\"G97/ABS(L97*$L$103+M97*$M$103+N97*$N$103+O97*$O$103)\"\n\"SUM(L97:L100)\"\n\"MIN(P97:P100)\"\n\"1000+G111/ABS(L111*$L$103+M111*$M$103+N111*$N$103+O111*$O$103)\"\n\"SUM(L111:L113)\"\n\"MIN(P111:P113)\"\n\"G129/ABS(L129*$L$135+M129*$M$135+N129*$N$135+O129*$O$135)\"\n\"G143/ABS(L143*$L$148+M143*$M$148+N143*$N$148+O143*$O$148)\"\n\"SUM(L159:L159)\"\n\"MIN(P159:P159)\"\n\"C11*0.000000001\"\n\"C12\"\n\"C13*0.001\"\n\"(E16/E17)*100\"\n\"E14*E12*E11\"\n\"E13\"\n\" (C23*C24)/C22/1000\"\n\"C26\"\n\"C42/1000\"\n\"C43/100\"\n\"C44/POWER(10,9)\"\n\"POWER(COS(PI()*E45*E42/E44/E43),2)\"\n\" 0.25*C62/C63\"\n\" 0.25*C71/C72\"\n\"C82/(2*C81)\"\n\"(0.5*C92)/(2*C91)\"\n\"(C102-1)*(C101*POWER(10,-9))/2\"\n\"(2*(E113/(E111/E112)))\"\n\" 2*E111*E113/E112 * 1000\"\n\" (C121*C124)/(C122*C123) * 100000\"\n\"C132*1000\"\n\"C133*0.00000001\"\n\"1.22*(E133/E131)\"\n\"E134*E132\"\n\"E135*10\"\n\"C141/C142 / 1000000\"\n\"RADIANS(C152)\"\n\"SIN(E152)\"\n\"C151*0.000000001/E153\"\n\"(ASIN(2*E162/E161)-ASIN(2*E163/E161))*1000\"\n\"DEGREES(ATAN((C171/C172)))\"\n\"D51-$C51\"\n\"SUM(L51:Q51)/6\"\n\"J51-$C51\"\n\"AVERAGE(K$51:K$110)\"\n\"STDEV(K$51:K$110)\"\n\"INTERCEPT(L$51:L$110,$S$51:$S$110)\"\n\"SLOPE(L$51:L$110,$S$51:$S$110)\"\n\"RSQ(L$51:L$110,$S$51:$S$110)\"\n\"PEARSON(L$51:L$110,$S$51:$S$110)\"\n\"VAR('Data & RP'!$D$51:$D$110)\"\n\"[1]!CMLRet($K$114,$S$114,$S$115,L124)\"\n\"[1]!SMLRet($K$114,$S$114,P124)\"\n\"VAR('Data & RP'!$E$51:$E$110)\"\n\"VAR('Data & RP'!$F$51:$F$110)\"\n\"VAR('Data & RP'!$G$51:$G$110)\"\n\"VAR('Data & RP'!$H$51:$H$110)\"\n\"VAR('Data & RP'!$I$51:$I$110)\"\n\"COVAR($D$51:$D$110,D$51:D$110)*(60/59)\"\n\"COVAR($E$51:$E$110,E$51:E$110)*(60/59)\"\n\"COVAR($F$51:$F$110,F$51:F$110)*(60/59)\"\n\"STDEV($K51:$K110)\"\n\"COVAR($G$51:$G$110,G$51:G$110)*(60/59)\"\n\"STDEV($L51:$L110)\"\n\"AVERAGE($L51:$L110)\"\n\"COVAR($H$51:$H$110,H$51:H$110)*(60/59)\"\n\"STDEV($M51:$M110)\"\n\"AVERAGE($M51:$M110)\"\n\"COVAR($I$51:$I$110,I$51:I$110)*(60/59)\"\n\"STDEV($N51:$N110)\"\n\"AVERAGE($N51:$N110)\"\n\"STDEV($O51:$O110)\"\n\"AVERAGE($O51:$O110)\"\n\"STDEV($P51:$P110)\"\n\"AVERAGE($P51:$P110)\"\n\"SLOPE($L51:$L110,$S$51:$S$110)\"\n\"AVERAGE($L51:$L110)\"\n\"STDEV($Q51:$Q110)\"\n\"AVERAGE($Q51:$Q110)\"\n\"SLOPE($M51:$M110,$S$51:$S$110)\"\n\"AVERAGE($M51:$M110)\"\n\"STDEV($R51:$R110)\"\n\"AVERAGE($R51:$R110)\"\n\"SLOPE($N51:$N110,$S$51:$S$110)\"\n\"AVERAGE($N51:$N110)\"\n\"STDEV($S51:$S110)\"\n\"AVERAGE($S51:$S110)\"\n\"SLOPE($O51:$O110,$S$51:$S$110)\"\n\"AVERAGE($O51:$O110)\"\n\"SLOPE($P51:$P110,$S$51:$S$110)\"\n\"AVERAGE($P51:$P110)\"\n\"SLOPE($Q51:$Q110,$S$51:$S$110)\"\n\"AVERAGE($Q51:$Q110)\"\n\"SLOPE($R51:$R110,$S$51:$S$110)\"\n\"AVERAGE($R51:$R110)\"\n\"[1]!SMLRet($K$114,$S$114,P147)\"\n\"E142\"\n\"AVERAGE($D$160:$I$160)\"\n\"AVERAGE(D$151:D$156)\"\n\"AVERAGE($D$162:$I$162)\"\n\"D142\"\n\"E143\"\n\"F144\"\n\"G145\"\n\"H146\"\n\"I147\"\n\"C3*1000\"\n\"B3/D3\"\n\"E3*(1000/999.7)\"\n\"F3*G3\"\n\"F3*G3^2\"\n\"-0.51*(G3^2)*SQRT($B$20)\"\n\"10^K3\"\n\"F3*L3\"\n\"SUM(H3:H4)/SUM(H3:H6)\"\n\"H5/SUM(H3:H6)\"\n\"H6/(SUM(H3:H6))\"\n\"H7/(H7+H9+H10)\"\n\"H9/(H9+H7+H10)\"\n\"H10/(H10+H9+H7)\"\n\"10^-7.25\"\n\"#N/A\"\n\"0.5*SUM(J3:J13)\"\n\"((C24-C23))/(C23+C24)*100\"\n\"SUM(H7:H13)\"\n\"C23+H15\"\n\"SUM(H3:H6)\"\n\"C24+H14\"\n\"C3*1000\"\n\"B3/D3\"\n\"E3*(1000/999.7)\"\n\"F3*G3\"\n\"F3*G3^2\"\n\"-0.51*(G3^2)*SQRT($B$20)\"\n\"10^J3\"\n\"F3*K3\"\n\"10^-7.25\"\n\"NA()\"\n\"0.5*SUM(I3:I13)\"\n\"((C24-C23))/(C23+C24)*100\"\n\"SUM(H7:H13)\"\n\"C23+H15\"\n\"SUM(H3:H6)\"\n\"C24+H14\"\n\"COUNT(C19:C53)\"\n\"AVERAGE(C19:C53)\"\n\"D71*D70-5*D70-20*D69\"\n\"COUNT(C77:C122)\"\n\"AVERAGE(C77:C122)\"\n\"D128*D129-5*D128-20*D127\"\n\"D207*D206-8*D206-20*D205\"\n\"COUNT(C213:C257)\"\n\"'Enter data'!B10\"\n\"A5\"\n\"A6+'Enter data'!B11\"\n\"A8+'Enter data'!B12\"\n\"A10+'Enter data'!B13\"\n\"4*'Enter data'!D69\"\n\"'Enter data'!D127*4\"\n\"'Enter data'!B10\"\n\"A34+'Enter data'!B11\"\n\"A36+'Enter data'!B12\"\n\"A38+'Enter data'!B13\"\n\"'Enter data'!D205*4\"\n\"'Enter data'!D263*4\"\n\"20*5-20*5-20*4\"\n\"16*12-16*5-4*20\"\n\"'Enter data'!D71\"\n\"'Enter data'!D70\"\n\"'Enter data'!D72\"\n\"'Enter data'!D129\"\n\"'Enter data'!D128\"\n\"'Enter data'!D130\"\n\"'Enter data'!D205\"\n\"'Enter data'!D263\"\n\"E86*D86-E86*8-20*4\"\n\"E88*D88-E88*8-3*20\"\n\"E90*D90-E90*8-2*20\"\n\"'Enter data'!D207\"\n\"'Enter data'!D206\"\n\"'Enter data'!D208\"\n\"'Enter data'!D265\"\n\"'Enter data'!D264\"\n\"'Enter data'!D266\"\n\"NOW()\"\n\"(C3/B3)*100\"\n\"D3*($B$29/100)\"\n\"(B3/$B$29)*100\"\n\"C3/(F3/100)\"\n\"MAX(C14:N50)\"\n\"MIN(C14:N50)\"\n\"B15+1\"\n\"IF($O7>0,C7/$O7,\"\"ERROR\"\")\"\n\"IF(O7=0,0,2-((1-H7)^2+I7^2+J7^2+K7^2)*4/3)\"\n\"IF(MIN(C7:F7)<0,0,SUM(C7:F7))\"\n\"1+A7\"\n\"MIN(10,MAX(0,SUM(M7:M12)))\"\n\"NOW()\"\n\"SQRT(B9)\"\n\"B10/(H8*B9)\"\n\"B11*H9*H8*B9/B10\"\n\"B23/B9\"\n\"B11^2/B22\"\n\"B10*B9\"\n\"2*(B7+B8)-B10\"\n\"B27*B9\"\n\"B11*(B14/2000)^2*H12*PI()\"\n\"B29/(2*(B7-B21))\"\n\"4*B11*(B30+B21)\"\n\"B31*B15/1000\"\n\"B31*B16/1000\"\n\"B28*H7\"\n\"H9/((B14/2000)^2*PI())\"\n\"B33+B34\"\n\"B24\"\n\"H10\"\n\"H13\"\n\"B29\"\n\"(B8-B21)*(B7-B21)\"\n\"B32\"\n\"B10\"\n\"B21/10\"\n\"B21\"\n\"B27/10\"\n\"H15\"\n\"SUM(C5:C11)\"\n\"E9+273\"\n\"(I8*F9/I7)*(1+C8/I7+C9/(I7^2)+C10/(I7^4)+C11/(I7^5))\"\n\"I8*F9/I7\"\n\"(D20-D18)/D18\"\n\"1-LN(B13^3+$F$6*B13^2+$F$7*B13+$F$8)\"\n\"D13-C13\"\n\"SUM(E13:E29)\"\n\"RADIANS(B9)\"\n\"COS(C9)/(SIN(C9)+COS(C9))\"\n\"D9*$D$4\"\n\"1500+300*$A10-25*$A10^2+1.5*$A10^3\"\n\"300-50*$A10+4.5*$A10^2\"\n\"B11/A11\"\n\"(B11-1500)/A11\"\n\"300-50*$F$29+4.5*$F$29^2\"\n\"-50+9*$F$31\"\n\"-1500 + 2200*H19 - 225*H19^2 - 1.5*H19^3\"\n\"2500 - 250*$H19\"\n\"2500 - 250*$I19\"\n\"2200 - 450*$H$19 - 4.5*$H$19^2\"\n\"2200 - 450*$I$19 - 4.5*$I$19^2\"\n\"B2+1\"\n\"H2+1\"\n\"SUM(B4:B6)\"\n\"SUM(B4:H4)\"\n\"SUM(B24:B38)\"\n\"B3+B8+B13+B18+B23\"\n\"B2+6\"\n\"C2+1\"\n\"SUM(B5:B7)\"\n\"D5+D6+D7\"\n\"Individual!Q4\"\n\"Individual!Y4\"\n\"Individual!CS4\"\n\"B5+D5+F5+H5+J5+L5+N5+P5+R5+T5+V5+X5\"\n\"#REF!+E5+G5+I5+K5+M5+O5+Q5+S5+U5+W5+Y5\"\n\"(D9+D10+D11)\"\n\"Individual!Q9\"\n\"Individual!CS9\"\n\"Individual!BU10\"\n\"Individual!Q14\"\n\"Individual!BE14\"\n\"Individual!BM14\"\n\"Individual!CC14\"\n\"Individual!CK14\"\n\"Individual!CS14\"\n\"Individual!AO15\"\n\"Individual!BU15\"\n\"C14+E14+G15+I15+K14+M14+O14+Q14+S14+U14+W14+Y14\"\n\"C15+E15+#REF!+#REF!+K15+M15+O15+Q15+S15+U15+W15+Y15\"\n\"SUM(C13:C15)\"\n\"Individual!Q19\"\n\"Individual!CS19\"\n\"Individual!Y20\"\n\"Individual!AG20\"\n\"Individual!AO20\"\n\"Individual!AW20\"\n\"Individual!BE20\"\n\"Individual!CC21\"\n\"Individual!CK21\"\n\"SUM(B21:B35)\"\n\"Individual!Q24\"\n\"Individual!AO24\"\n\"Individual!AW24\"\n\"Individual!BE24\"\n\"Individual!CC24\"\n\"Individual!CK24\"\n\"Individual!CS24\"\n\"Individual!Y25\"\n\"Individual!AG25\"\n\"Individual!BM25\"\n\"Individual!BU25\"\n\"B4+B8+B12+B16+B20\"\n\"(D4+D8+D12+D16+D20)\"\n\"B3-$B$15\"\n\"C3-$C$15\"\n\"D3-$D$15\"\n\"E3-$E$15\"\n\"F3-$F$15\"\n\"G3-$G$15\"\n\"(B3-$B$15)/$B$15\"\n\"(C3-$C$15)/$C$15\"\n\"(D3-$D$15)/$D$15\"\n\"(E3-$E$15)/$E$15\"\n\"(F3-$F$15)/$F$15\"\n\"(G3-$G$15)/$G$15\"\n\"AVERAGE(B3:B14)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"SUM(K7:K30)\"\n\"MAX(P7:P30)\"\n\"MIN(P7:P30)\"\n\"D39/1000*1.5598+1.525\"\n\"D39/1000\"\n\"SUM(A39:A47)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F18)\"\n\"SUM(K8:K18)\"\n\"MIN(P7:P18)\"\n\"D23/1000*1.5598+1.525\"\n\"D23/1000\"\n\"SUM(A23:A28)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F30)\"\n\"SUM(K8:K30)\"\n\"MAX(P7:P30)\"\n\"MIN(P7:P30)\"\n\"D35/1000*1.5598+1.525\"\n\"D35/1000\"\n\"SUM(A35:A41)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F28)\"\n\"SUM(K8:K28)\"\n\"MIN(P7:P28)\"\n\"D33/1000*1.5598+1.525\"\n\"D33/1000\"\n\"SUM(A33:A43)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F31)\"\n\"SUM(K8:K31)\"\n\"MIN(P7:P19)\"\n\"A37\"\n\"E37/1000*1.5598+1.525\"\n\"E37/1000\"\n\"SUM(A38:A38)\"\n\"SUM(B37:B47)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F19)\"\n\"SUM(K8:K19)\"\n\"MIN(P7:P19)\"\n\"SUM(A26:A30)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F18)\"\n\"SUM(K8:K18)\"\n\"MIN(P7:P18)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"F7\"\n\"8*F7/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M7*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"B8-B7\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F25)\"\n\"SUM(K8:K25)\"\n\"MAX(P7:P25)\"\n\"MIN(P7:P25)\"\n\"SUM(A31:A33)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F21)\"\n\"SUM(K8:K21)\"\n\"MIN(P8:P23)\"\n\"SUM(A26:A32)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F22)\"\n\"SUM(K8:K22)\"\n\"MAX(P8:P22)\"\n\"MIN(P8:P23)\"\n\"SUM(A29:A35)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"IF(O8/N8>0.5,O8/N8,\"\"\"\")\"\n\"MAX(F7:F75)\"\n\"SUM(K8:K75)\"\n\"MIN(P8:P77)\"\n\"MAX(A81:A95)\"\n\"D4/(2*D3)\"\n\"SQRT(1/(D3*D5))\"\n\"(0.2027*A7+1.2055)*1000\"\n\"D7*157.4\"\n\"C7*7.751*157.4\"\n\"G7/H7\"\n\"B8-B7\"\n\"F8\"\n\"8*F8/($D$3*SQRT($G$2^2-$G$1^2))\"\n\"M8*(EXP(-$G$1*$G$3))*SIN(SQRT($G$2^2-$G$1^2)*$G$3)\"\n\"1000*(D8*1000-228.75)*8/64.353\"\n\"O8/N8\"\n\"MAX(F7:F40)\"\n\"SUM(K8:K40)\"\n\"MAX(P8:P40)\"\n\"MIN(P8:P41)\"\n\"B7+10\"\n\"B2*E4+B3*H4\"\n\"$B$2*E6+$B$3*H6\"\n\"IF(OR(AND(L6=\"\">=\"\",K6<M6),AND(L6=\"\"<=\"\",K6>M6)),\"\"VIOLATED\"\",\"\" \"\")\"\n\"MAX($C$4)\"\n\"COUNT($B$2:$B$3)\"\n\"$K$7<=$M$7\"\n\"$K$8<=$M$8\"\n\"$B$2>=0\"\n\"$B$3>=0\"\n\"{100,100,0.000001,0.05,FALSE,FALSE,FALSE,1,1,1}\"\n\"B2*E5*B3*H5*B4*K5\"\n\"B2*E7+B3*H7+B4*K7\"\n\"IF(OR(AND(O7=\"\">=\"\",N7<P7),AND(O7=\"\"<=\"\",N7>P7)),\"\"VIOLATED\"\",\"\" \"\")\"\n\"MAX($C$5)\"\n\"COUNT($B$2:$B$4)\"\n\"$N$7<=$P$7\"\n\"$B$2>=0\"\n\"$B$3>=0\"\n\"$B$4>=0\"\n\"{100,100,0.000001,0.05,FALSE,FALSE,FALSE,1,1,1}\"\n\"B2*E5+B3*H5+B4*K5\"\n\"$B$2*E7+$B$3*H7+$B$4*K7\"\n\"IF(OR(AND(O7=\"\">=\"\",N7<P7),AND(O7=\"\"<=\"\",N7>P7)),\"\"VIOLATED\"\",\"\" \"\")\"\n\"B2*E4+B3*H4\"\n\"$B$2*E6+$B$3*H6\"\n\"IF(OR(AND(L6=\"\">=\"\",K6<M6),AND(L6=\"\"<=\"\",K6>M6)),\"\"VIOLATED\"\",\"\" \"\")\"\n\"MAX($C$4)\"\n\"COUNT($B$2:$B$3)\"\n\"$K$7<=$M$7\"\n\"$K$8<=$M$8\"\n\"$B$2>=0\"\n\"$B$3>=0\"\n\"{100,100,0.000001,0.05,FALSE,FALSE,FALSE,1,1,1}\"\n\"B2*E5+B3*H5+B4*K5\"\n\"$B$2*E7+$B$3*H7+$B$4*K7\"\n\"IF(OR(AND(O7=\"\">=\"\",N7<P7),AND(O7=\"\"<=\"\",N7>P7)),\"\"VIOLATED\"\",\"\" \"\")\"\n\"'Comm Devt'!$N$85\"\n\"B6-C6\"\n\"'Comm Devt'!$O$85\"\n\"B6+E6\"\n\"Crime!$N$126\"\n\"Crime!$O$126\"\n\"ETE!$N$50\"\n\"ETE!$O$50\"\n\"Health!$N$110\"\n\"Health!$O$110\"\n\"Envt!$N$121\"\n\"Envt!$O$121\"\n\"'Road Safety'!N2\"\n\"'Road Safety'!O2\"\n\"SUM(B6:B11)\"\n\"Crime!$F126\"\n\"'Comm Devt'!$F85\"\n\"ETE!$F50\"\n\"Envt!$F121\"\n\"Health!$F110\"\n\"'Road Safety'!$F151\"\n\"SUM(B15:G15)\"\n\"Crime!$F131\"\n\"'Comm Devt'!$F90\"\n\"ETE!$F55\"\n\"Envt!$F126\"\n\"Health!$F115\"\n\"'Road Safety'!$F156\"\n\"SUM(B15:B17)\"\n\"SUM(J2:K2)\"\n\"IF(J2=0,0,N2/J2)\"\n\"SUM(L2:L15)\"\n\"COUNTIF($E$2:$E$123,E126)\"\n\"SUMIF($E$2:$E$125,$E126,J$2:J$125)\"\n\"SUM(F126:F131)\"\n\"SUM(J2:K2)\"\n\"IF(J2=0,0,N2/J2)\"\n\"L2/100*V2\"\n\"J2/100*X2\"\n\"SUM(U2:U21)\"\n\"+#REF!+#REF!+#REF!+N24\"\n\"COUNTIF($E$2:$E$82,E85)\"\n\"SUMIF($E$2:$E$84,$E85,J$2:J$84)\"\n\"SUM(F85:F90)\"\n\"SUM(J2:K2)\"\n\"IF(J2=0,0,N2/J2)\"\n\"L2/100*V2\"\n\"J2/100*X2\"\n\"K2/100*Z2\"\n\"SUM(U2:U12)\"\n\"SUM(L2:L21)\"\n\"COUNTIF($E$2:$E$47,E50)\"\n\"SUMIF($E$2:$E$49,$E50,J$2:J$49)\"\n\"SUM(F50:F55)\"\n\"SUM(J2:K2)\"\n\"IF(J2=0,0,N2/J2)\"\n\"SUM(N2:O2)\"\n\"-K17\"\n\"SUM(L3:L19)\"\n\"COUNTIF($E$2:$E$118,E121)\"\n\"SUMIF($E$2:$E$120,$E121,J$2:J$120)\"\n\"SUM(F121:F126)\"\n\"SUM(J2:K2)\"\n\"IF(J3=0,0,N3/J3)\"\n\"SUM(J2:J27)\"\n\"COUNTIF($E$2:$E$107,E110)\"\n\"SUMIF($E$3:$E$109,$E110,J$3:J$109)\"\n\"COUNTIF($E$3:$E$107,E112)\"\n\"SUM(F110:F115)\"\n\"C6+E6+G6\"\n\"SUM(K6:L6)\"\n\"SUM(G8:K8)\"\n\"G9+I9\"\n\"SUM(K6:K10)\"\n\"SUM(J2:K2)\"\n\"IF(J2=0,0,N2/J2)\"\n\"SUM(N2:O2)\"\n\"$C$15*B6+$C$16\"\n\"B7*B7\"\n\"B7*C7\"\n\"SUM(B7:B11)\"\n\"(5*F12-B12*C12)/(5*D12-B12*B12)\"\n\"(C12-C15*B12)/5\"\n\"(5*F12-B12*C12)/((5*D12-B12*B12)*(5*E12-C12*C12))^0.5\"\n\"SLOPE(C7:C11,B7:B11)\"\n\"INTERCEPT(C7:C11,B7:B11)\"\n\"CORREL(C7:C11,B7:B11)\"\n\"$B$14*B7+$B$15\"\n\"SLOPE(C7:C11,B7:B11)\"\n\"INTERCEPT(C7:C11,B7:B11)\"\n\"CORREL(C7:C11,B7:B11)\"\n\"B16*B16\"\n\"SUM(F9:J9)\"\n\"L9+M9\"\n\"A10\"\n\"N10*$S$9/$N$9\"\n\"O10*$T$9/$O$9\"\n\"K10*$U$9/$K$9\"\n\"Z10*100/$AD$10\"\n\"IF(P10>=$AE$7,\"\"F\"\",AA10)\"\n\"R10+S10+T10+U10+V10+W10\"\n\"IF(X10>$AF$21,\"\"A+\"\",IF(X10>$AF$22,\"\"A-\"\",IF(X10>$AF$23,\"\"B+\"\",IF(X10>$AF$24,\"\"B-\"\",IF(X10>$AF$25,\"\"C+\"\",IF(X10>$AF$26,\"\"C-\"\",IF(X10>$AF$27,\"\"D+\"\",IF(X10>$AF$28,\"\"D-\"\",\"\"F\"\"))))))))\"\n\"AC14*0.2\"\n\"AC14*0.2\"\n\"AC14*0.25\"\n\"AC14*0.25\"\n\"AC14*0.3\"\n\"AC14*0.3\"\n\"COUNTIF(Y10:Y59,\"\"A*\"\")\"\n\"COUNTIF(Y10:Y59,\"\"A*\"\")\"\n\"AC14*0.3\"\n\"AC14*0.3\"\n\"AC14*0.35\"\n\"AC14*0.35\"\n\"AC14*0.4\"\n\"AC14*0.4\"\n\"COUNTIF(Y10:Y59,\"\"B*\"\")\"\n\"COUNTIF(Y10:Y59,\"\"B*\"\")\"\n\"AC14*0.2\"\n\"AC14*0.2\"\n\"AC14*0.25\"\n\"AC14*0.25\"\n\"AC14*0.3\"\n\"AC14*0.3\"\n\"COUNTIF(Y10:Y59,\"\"C*\"\")\"\n\"COUNTIF(Y10:Y59,\"\"C*\"\")\"\n\"AC14*0.05\"\n\"AC14*0.05\"\n\"AC14*0.1\"\n\"AC14*0.1\"\n\"AC14*0.15\"\n\"AC14*0.15\"\n\"COUNTIF(Y10:Y59,\"\"D*\"\")\"\n\"COUNTIF(Y10:Y59,\"\"D*\"\")\"\n\"AC14*0.05\"\n\"AC14*0.05\"\n\"AC14*0.1\"\n\"AC14*0.1\"\n\"COUNTIF(Y10:Y59,\"\"F*\"\")\"\n\"COUNTIF(Y10:Y59,\"\"F*\"\")\"\n\"AVERAGE(F10:F59)\"\n\"IF(X60>94.49,\"\"A+\"\",IF(X60>89.49,\"\"A-\"\",IF(X60>84.49,\"\"B+\"\",IF(X60>79.49,\"\"B-\"\",IF(X60>74.49,\"\"C+\"\",IF(X60>69.49,\"\"C-\"\",IF(X60>64.49,\"\"D+\"\",IF(X60>59.49,\"\"D-\"\",\"\"F\"\"))))))))\"\n\"AVERAGE(Z10:Z30)\"\n\"IF(X60>94.49,\"\"A+\"\",IF(X60>89.49,\"\"A-\"\",IF(X60>84.49,\"\"B+\"\",IF(X60>79.49,\"\"B-\"\",IF(X60>74.49,\"\"C+\"\",IF(X60>69.49,\"\"C-\"\",IF(X60>64.49,\"\"D+\"\",IF(X60>59.49,\"\"D-\"\",\"\"F\"\"))))))))\"\n\"A3+7\"\n\"A5+1\"\n\"AVERAGE(C2:C53)\"\n\"SUM(C5:AB5)\"\n\"T2+S2+R2+O2+C2\"\n\"Attendance!AC4\"\n\"(C4*$C$2)+(O4*$O$2)+(R4*$R$2)+(S4*$S$2)+(T4*$T$2)+U4\"\n\"IF(V4>='Grading Standards'!$B$7,\"\"A\"\",IF(V4>='Grading Standards'!$B$8,\"\"A-\"\",IF(V4>='Grading Standards'!$B$9,\"\"B+\"\",IF(V4>='Grading Standards'!$B$10,\"\"B\"\",IF(V4>='Grading Standards'!$B$11,\"\"B-\"\",\"\"other\"\")))))\"\n\"IF(V4>='Grading Standards'!$B$11,\"\"other\"\",IF(V4>='Grading Standards'!$B$12,\"\"C+\"\",IF(V4>='Grading Standards'!$B$13,\"\"C\"\",IF(V4>='Grading Standards'!$B$14,\"\"C-\"\",IF(V4>='Grading Standards'!$B$15,\"\"D\"\",IF(V4>='Grading Standards'!$B$16,\"\"F\"\",\"\"other\"\"))))))\"\n\"((M5+L5+K5+J5+I5+H5+G5+F5+E5+D5)-N5)/9\"\n\"P5+Q5\"\n\"LARGE(D6:M6,10)\"\n\"AVERAGE(R5:R43)\"\n\"0.06*100000\"\n\"-PMT(6%,15,100000,0)\"\n\"G22\"\n\"A25-B27\"\n\"100000-C27\"\n\"0.06*D27\"\n\"C30\"\n\"A25-B33\"\n\"D27-C33\"\n\"0.06*D33\"\n\"$A$25-B35\"\n\"D33-C35\"\n\"0.06*D35\"\n\"D35-C36\"\n\"SUM(M6:M106)\"\n\"IF(C6=\"\"\"\",\"\"\"\",IF(OR(AND(LEFT(E6,1)=\"\"A\"\",C6>0),AND(OR(LEFT(E6,1)=\"\"L\"\",LEFT(E6,1)=\"\"S\"\"),C6<0)),\"\"Dr\"\",\"\"Cr\"\"))\"\n\"IF(ISNA(VLOOKUP(B6,Categories!$A$2:$H$61,8)),\"\"\"\",VLOOKUP(B6,Categories!$A$2:$H$61,8))\"\n\"IF(E6=\"\"\"\",\"\"\"\",IF(LEFT(E6,1)=\"\"A\"\",1,-1))\"\n\"IF(ISERR(K6*C6),\"\"\"\",K6*C6)\"\n\"IF(A6=\"\"\"\",\"\"\"\",SUMIF($A$6:$A$106,$A6,$L$6:$L$106))\"\n\"H6+H5\"\n\"SUM(B5:B9)\"\n\"SUM(B15:B16)\"\n\"G26\"\n\"B29\"\n\"LEFT(B2,1)\"\n\"$A2&\"\". \"\"&$B2&\"\": \"\"&$E2&\"\" - \"\"&$D2\"\n\"$B2&\"\": \"\"&$E2&\"\" - \"\"&$D2\"\n\"A2+1\"\n\"C10/$C$20\"\n\"SUM(C10:C18)\"\n\"4/20\"\n\"12/20\"\n\"17/20\"\n\"19/20\"\n\"AVERAGE(A8:A37)\"\n\"MODE(A8:A37)\"\n\"MEDIAN(A8:A37)\"\n\"AVERAGE(B42:B61)\"\n\"VAR(A71:A76)\"\n\"STDEV(A71:A76)\"\n\"AVERAGE(A71:A76)\"\n\"(8.672/178)*100\"\n\"VAR(B84:B93)\"\n\"STDEV(B84:B93)\"\n\"(B96/AVERAGE(B84:B93))*100\"\n\"(B104-$B$125)/$B$128\"\n\"MEDIAN(B104:B123)\"\n\"STDEV(B104:B123)\"\n\"Class_Number\"\n\"Class_Name\"\n\"Class_Number\"\n\"Class_Name\"\n\"Class_Term\"\n\"[1]Schedule!D5\"\n\"[1]Schedule!E6\"\n\"A4+1\"\n\"[1]Schedule!D9\"\n\"[1]Schedule!E10\"\n\"[1]Schedule!D13\"\n\"[1]Schedule!E16\"\n\"[1]Schedule!E18\"\n\"[1]Schedule!D21\"\n\"[1]Schedule!D23\"\n\"[1]Schedule!E24\"\n\"[1]Schedule!E26\"\n\"[1]Schedule!D29\"\n\"[1]Schedule!E32\"\n\"[1]Schedule!E34\"\n\"[1]Schedule!D37\"\n\"[1]Schedule!E38\"\n\"[1]Schedule!D45\"\n\"[1]Schedule!E46\"\n\"A30+1\"\n\"A38+1\"\n\"COUNT(hw)\"\n\"VLOOKUP(hwCount,hwDrops,2)\"\n\"SUM(hw)\"\n\"5*hwCount\"\n\"IF(hwDropCount>=1, -MIN(hw), \"\"\"\")\"\n\"IF(hwDropCount>=1,-5,\"\"\"\")\"\n\"IF(hwDropCount>=2,-SMALL(hw,2),\"\"\"\")\"\n\"IF(hwDropCount>=2,-5,\"\"\"\")\"\n\"IF(hwDropCount>=3,-SMALL(hw,3),\"\"\"\")\"\n\"IF(hwDropCount>=3,-5,\"\"\"\")\"\n\"SUM(E15:E18)\"\n\"IF(ISNUMBER(E23),100,\"\"\"\")\"\n\"IF(COUNT(Quizzes)<4,-1,IF(AND(SUM(Quizzes)>=340,MIN(Quizzes)>=80),1,0))\"\n\"IF(AND(Eligible>0,LEFT(UPPER(F30),1)=\"\"Y\"\"),1,0)\"\n\"IF(Eligible>0,\"\"CONGRATULATIONS! You are eligible to skip the final!\"\", IF(Eligible<0,\"\"\"\",\"\"Your lowest quiz will be dropped automatically.\"\"))\"\n\"IF(Eligible>0,\"\"Will you skip the final? (Y or N)\"\",\"\"(Ignore box at right.)\"\")\"\n\"IF(Eligible=\"\"YES\"\",\"\"\"\",\"\"n/a\"\")\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"IF(DropFinal>0,\"\"(No final exam)\"\",\"\"Final exam\"\")\"\n\"IF(ISNUMBER(E35),150,\"\"\"\")\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"E19\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"E27\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"IF(DropFinal>0,\"\"(All quizzes count)\"\",\"\"Drop lowest quiz\"\")\"\n\"IF(AND(Eligible>0,DropFinal=0),-MIN(Quizzes),\"\"\"\")\"\n\"IF(OR(Eligible<0,DropFinal>0),\"\"\"\",-100)\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"IF(DropFinal>0,E34+E36+E37,SUM(E34:E38))\"\n\"IF(DropFinal>0,F36+F37,SUM(F35:F38))\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"IF(F39=0,\"\"\"\",ROUND(E39/F39,2))\"\n\"IF(AND(DropFinal>0,ISNUMBER(E35)),\"\"DUDE! You're dropping the final exam — don't enter a score.\"\",\"\"\"\")\"\n\"VLOOKUP(F40,LetterGrades,2)\"\n\"Attendance!X11\"\n\"(E11*0.05)+(F11*0.15)+(G11*0.15)+(H11*0.15)+(I11*0.1)+(J11*0.1)+(K11*0.3)\"\n\"L11\"\n\"'Students'' Data'!B2\"\n\"SUM(D11:W11)\"\n\"'Students'' Data'!B2\"\n\"'Students'' Data'!C3\"\n\"'Students'' Data'!B11\"\n\"'Students'' Data'!F11\"\n\"VLOOKUP(E12,'Lookup Tables'!B11:D15,2)\"\n\"'Students'' Data'!B11\"\n\"VLOOKUP(K12,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q12,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E13,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K13,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q13,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E14,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K14,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q14,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E15,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K15,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q15,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E16,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K16,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q16,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E17,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K17,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q17,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E18,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(K18,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(Q18,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E22,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K22,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q22,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E23,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K23,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q23,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E24,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K24,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q24,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E25,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K25,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q25,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E26,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K26,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q26,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E27,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K27,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q27,'Lookup Tables'!B11:D15,2)\"\n\"VLOOKUP(E28,'Lookup Tables'!B22:D32,2)\"\n\"VLOOKUP(K28,'Lookup Tables'!H11:J15,2)\"\n\"VLOOKUP(Q28,'Lookup Tables'!B11:D15,2)\"\n\"'Students'' Data'!B2\"\n\"IF(OR(J13=\"\"YES\"\",L13=\"\"YES\"\"),1,0)\"\n\"IF(OR(M13<600,N13=\"\"YES\"\"),1,0)\"\n\"IF(AND(OR(J13=\"\"YES\"\",L13=\"\"YES\"\"),(Z13=0)),\"\"Trouble\"\",0)\"\n\"IF(AND(OR(M13<600,N13=\"\"YES\"\"),(AA13=0)),\"\"Trouble\"\",0)\"\n\"IF(AND(AND(J13=\"\"NO\"\",L13=\"\"NO\"\"),(O13=\"\"YES\"\")),\"\"Trouble\"\",0)\"\n\"IF(AND(AND(M13>=600,N13=\"\"NO\"\"),(O13=\"\"YES\"\")),\"\"Trouble\"\",0)\"\n\"IF(AND(Z13=1,AA13=1),\"\"SRSA\"\",0)\"\n\"IF(AND(AF13=0,O13=\"\"YES\"\"),\"\"Trouble\"\",0)\"\n\"IF(AND(AF13=\"\"SRSA\"\",O13=\"\"NO\"\"),\"\"Trouble\"\",0)\"\n\"IF(S13=\"\"YES\"\",1,0)\"\n\"IF(P13>=20,1,0)\"\n\"IF(AND(AI13=1,AJ13=1),\"\"Initial\"\",0)\"\n\"IF(AND(AF13=\"\"SRSA\"\",AK13=\"\"Initial\"\"),\"\"SRSA\"\",0)\"\n\"IF(AND(AK13=\"\"Initial\"\",AL13=0),\"\"RLIS\"\",0)\"\n\"IF(AND(AM13=0,U13=\"\"YES\"\"),\"\"Trouble\"\",0)\"\n\"IF(AND(U13=\"\"NO\"\",AM13=\"\"RLIS\"\"),\"\"Trouble\"\",0)\"\n\"100*R10\"\n\"100*T9\"\n\"8.62/39.15\"\n\"D9/(C9+D9)\"\n\"Y10/R9\"\n\"100*R9\"\n\"Y14/R10\"\n\"100*R23\"\n\"D48/(C48+D48)\"\n\"P51*100\"\n\"'CPE 100'!B6\"\n\"'CPE 101'!B6\"\n\"'CPE 102'!B6\"\n\"'CPE 103'!B6\"\n\"'CPE 141'!B6\"\n\"'CPE 205'!B6\"\n\"'CPE 215'!B6\"\n\"'CPE 234'!B6\"\n\"'CPE 315'!B6\"\n\"'CPE 316'!B6\"\n\"'CPE 434'!B6\"\n\"'CPE 453'!B6\"\n\"'CPE 464'!B6\"\n\"'CPE 100'!B6\"\n\"'CPE 101'!B6\"\n\"'CPE 102'!B6\"\n\"'CPE 103'!B6\"\n\"'CPE 141'!B6\"\n\"'CPE 205'!B6\"\n\"'CPE 215'!B6\"\n\"'CPE 234'!B6\"\n\"'CPE 315'!B6\"\n\"'CPE 316'!B6\"\n\"'CPE 434'!B6\"\n\"'CPE 453'!B6\"\n\"'CPE 464'!B6\"\n\"'NEW QFD Converted #'!B3\"\n\"'NEW QFD Converted #'!G3\"\n\"'NEW QFD Converted #'!J3\"\n\"'NEW QFD Converted #'!K3\"\n\"'NEW QFD Converted #'!M3\"\n\"'NEW QFD Converted #'!N3\"\n\"'[2]QFD Converted #'!$C$3\"\n\"'[2]QFD Converted #'!E3\"\n\"'[2]QFD Converted #'!F3\"\n\"'[2]QFD Converted #'!I3\"\n\"'[2]QFD Converted #'!G3\"\n\"'[2]QFD Converted #'!N3\"\n\"'[2]QFD Converted #'!AA3\"\n\"'[2]QFD Converted #'!R3\"\n\"'[5]QFD Converted #'!B3\"\n\"'[5]QFD Converted #'!D3\"\n\"'[5]QFD Converted #'!M3\"\n\"'[2]QFD Converted #'!G4\"\n\"'[2]QFD Converted #'!L4\"\n\"'[2]QFD Converted #'!AG4\"\n\"'[2]QFD Converted #'!AX4\"\n\"'CPE 141'!B6\"\n\"'[2]QFD Converted #'!$C$4\"\n\"'[1]CE QFD Converted #'!$D$4\"\n\"'[1]CE QFD Converted #'!$E$4\"\n\"'[1]CE QFD Converted #'!$F$4\"\n\"'[2]QFD Converted #'!$D$4\"\n\"'[2]QFD Converted #'!$L$4\"\n\"'[2]QFD Converted #'!$W$4\"\n\"'[2]QFD Converted #'!$AH$4\"\n\"'[3]MFGE QFD Converted #'!$F$5\"\n\"'[4]ME QFD Converted #'!$F$5\"\n\"'[4]ME QFD Converted #'!$G$5\"\n\"'NEW QFD Converted #'!$I$4\"\n\"SUM(C9:BY9)\"\n\"($C$8*C9)+($D$8*D9)+($E$8*E9)+($F$8*F9)+($G$8*G9)+($H$8*H9)+($I$8*I9)+($J$8*J9)+($K$8*K9)+($L$8*L9)+($M$8*M9)+($N$8*N9)+($O$8*O9)+($P$8*P9)+($Q$8*Q9)+($W$8*W9)+($AE$8*AE9)+($AH$8*AH9)+($AI$8*AI9)+($AJ$8*AJ9)+($AK$8*AK9)+($AL$8*AL9)+($AM$8*AM9)+($AN$8*AN9)+($AO$8*AO9)+($AP$8*AP9)+($AQ$8*AQ9)+($AR$8*AR9)+($AS$8*AS9)+($AT$8*AT9)+($AU$8*AU9)+($AV$8*AV9)+($AW$8*AW9)+($AX$8*AX9)+($AY$8*AY9)+($AZ$8*AZ9)+($BA$8*BA9)+($BB$8*BB9)+($BC$8*BC9)+($BE$8*BE9)+($BG$8*BG9)+($BH$8*BH9)+($BI$8*BI9)+($BJ$8*BJ9)+($BK$8*BK9)+($BL$8*BL9)+($BM$8*BM9)+($BN$8*BN9)+($BO$8*BO9)+($BP$8*BP9)+($BQ$8*BQ9)+($BR$8*BR9)+($BS$8*BS9)+($BT$8*BT9)+($BU$8*BU9)+($BV$8*BV9)+($BW$9*BW9)+($BX$8*BX9)+($BY$8*BY9)\"\n\"CA9/$CA$28*100\"\n\"'[2]QFD Converted #'!$C$5\"\n\"'[1]CE QFD Converted #'!$D$5\"\n\"'[1]CE QFD Converted #'!$E$5\"\n\"'[1]CE QFD Converted #'!$F$5\"\n\"'[2]QFD Converted #'!$D$5\"\n\"'[2]QFD Converted #'!$L$5\"\n\"'[2]QFD Converted #'!$W$5\"\n\"'[2]QFD Converted #'!$AH$5\"\n\"'[3]MFGE QFD Converted #'!$F$6\"\n\"'[4]ME QFD Converted #'!$F$6\"\n\"'[4]ME QFD Converted #'!$G$6\"\n\"'NEW QFD Converted #'!$I$5\"\n\"'[2]QFD Converted #'!$C$6\"\n\"'[1]CE QFD Converted #'!$D$6\"\n\"'[1]CE QFD Converted #'!$E$6\"\n\"'[1]CE QFD Converted #'!$F$6\"\n\"'[2]QFD Converted #'!$D$6\"\n\"'[2]QFD Converted #'!$L$6\"\n\"'[2]QFD Converted #'!$W$6\"\n\"'[2]QFD Converted #'!$AH$6\"\n\"'[3]MFGE QFD Converted #'!$F$7\"\n\"'[4]ME QFD Converted #'!$F$7\"\n\"'[4]ME QFD Converted #'!$G$7\"\n\"'NEW QFD Converted #'!$I$6\"\n\"'[2]QFD Converted #'!$C$7\"\n\"'[1]CE QFD Converted #'!$D$7\"\n\"'[1]CE QFD Converted #'!$E$7\"\n\"'[1]CE QFD Converted #'!$F$7\"\n\"'[2]QFD Converted #'!$D$7\"\n\"'[2]QFD Converted #'!$L$7\"\n\"'[2]QFD Converted #'!$W$7\"\n\"'[2]QFD Converted #'!$AH$7\"\n\"'[3]MFGE QFD Converted #'!$F$8\"\n\"'[4]ME QFD Converted #'!$F$8\"\n\"'[4]ME QFD Converted #'!$G$8\"\n\"'NEW QFD Converted #'!$I$7\"\n\"'[2]QFD Converted #'!$C$8\"\n\"'[1]CE QFD Converted #'!$D$8\"\n\"'[1]CE QFD Converted #'!$E8\"\n\"'[1]CE QFD Converted #'!$F$8\"\n\"'[2]QFD Converted #'!$D$8\"\n\"'[2]QFD Converted #'!$L$8\"\n\"'[2]QFD Converted #'!$W$8\"\n\"'[2]QFD Converted #'!$AH$8\"\n\"'[3]MFGE QFD Converted #'!$F$9\"\n\"'[4]ME QFD Converted #'!$F$9\"\n\"'[4]ME QFD Converted #'!$G$9\"\n\"'NEW QFD Converted #'!$I$8\"\n\"'[2]QFD Converted #'!$C$9\"\n\"'[1]CE QFD Converted #'!$D$9\"\n\"'[1]CE QFD Converted #'!$E$9\"\n\"'[1]CE QFD Converted #'!$F$9\"\n\"'[2]QFD Converted #'!$D$9\"\n\"'[2]QFD Converted #'!$L$9\"\n\"'[2]QFD Converted #'!$W$9\"\n\"'[2]QFD Converted #'!$AH$9\"\n\"'[3]MFGE QFD Converted #'!$F$10\"\n\"'[4]ME QFD Converted #'!$F$10\"\n\"'[4]ME QFD Converted #'!$G$10\"\n\"'NEW QFD Converted #'!$I$9\"\n\"'[2]QFD Converted #'!$C$10\"\n\"'[1]CE QFD Converted #'!$D$10\"\n\"'[1]CE QFD Converted #'!$E$10\"\n\"'[1]CE QFD Converted #'!$F$10\"\n\"'[2]QFD Converted #'!$D$10\"\n\"'[2]QFD Converted #'!$L$10\"\n\"'[2]QFD Converted #'!$W$10\"\n\"'[2]QFD Converted #'!$AH$10\"\n\"'[3]MFGE QFD Converted #'!$F$11\"\n\"'[4]ME QFD Converted #'!$F$11\"\n\"'[4]ME QFD Converted #'!$G$11\"\n\"'NEW QFD Converted #'!$I$10\"\n\"'[2]QFD Converted #'!$C$11\"\n\"'[1]CE QFD Converted #'!$D$11\"\n\"'[1]CE QFD Converted #'!$E$11\"\n\"'[1]CE QFD Converted #'!$F$11\"\n\"'[2]QFD Converted #'!$D$11\"\n\"'[2]QFD Converted #'!$L$11\"\n\"'[2]QFD Converted #'!$W$11\"\n\"'[2]QFD Converted #'!$AH$11\"\n\"'[3]MFGE QFD Converted #'!$F$12\"\n\"'[4]ME QFD Converted #'!$F$12\"\n\"'[4]ME QFD Converted #'!$G$12\"\n\"'NEW QFD Converted #'!$I$11\"\n\"'[2]QFD Converted #'!$C$12\"\n\"'[1]CE QFD Converted #'!$D$12\"\n\"'[1]CE QFD Converted #'!$E$12\"\n\"'[1]CE QFD Converted #'!$F$12\"\n\"'[2]QFD Converted #'!$D$12\"\n\"'[2]QFD Converted #'!$L$12\"\n\"'[2]QFD Converted #'!$W$12\"\n\"'[2]QFD Converted #'!$AH$12\"\n\"'[3]MFGE QFD Converted #'!$F$13\"\n\"'[4]ME QFD Converted #'!$F$13\"\n\"'[4]ME QFD Converted #'!$G$13\"\n\"'NEW QFD Converted #'!$I$12\"\n\"'[2]QFD Converted #'!$C$13\"\n\"'[1]CE QFD Converted #'!$D$13\"\n\"'[1]CE QFD Converted #'!$E$13\"\n\"'[1]CE QFD Converted #'!$F$13\"\n\"'[2]QFD Converted #'!$D$13\"\n\"'[2]QFD Converted #'!$L$13\"\n\"'[2]QFD Converted #'!$W$13\"\n\"'[2]QFD Converted #'!$AH$13\"\n\"'[3]MFGE QFD Converted #'!$F$14\"\n\"'[4]ME QFD Converted #'!$F$14\"\n\"'[4]ME QFD Converted #'!$G$14\"\n\"'NEW QFD Converted #'!$I$13\"\n\"'[2]QFD Converted #'!$C$14\"\n\"'[1]CE QFD Converted #'!$D$14\"\n\"'[1]CE QFD Converted #'!$E$14\"\n\"'[1]CE QFD Converted #'!$F$14\"\n\"'[2]QFD Converted #'!$D$14\"\n\"'[2]QFD Converted #'!$L$14\"\n\"'[2]QFD Converted #'!$W$14\"\n\"'[2]QFD Converted #'!$AH$14\"\n\"'[3]MFGE QFD Converted #'!$F$15\"\n\"'[4]ME QFD Converted #'!$F$15\"\n\"'[4]ME QFD Converted #'!$G$15\"\n\"'NEW QFD Converted #'!$I$14\"\n\"IF([2]CPE219!G26 = \"\"H\"\",9, IF([2]CPE219!G26= \"\"M\"\",3, IF([2]CPE219!G26= \"\"L\"\",1, IF([2]CPE219!G26 =\"\"\"\",0))))\"\n\"IF([2]CPE259!E26=\"\"H\"\",9,IF([2]CPE259!E26=\"\"M\"\",3,IF([2]CPE259!E26=\"\"L\"\",1,IF([2]CPE259!E26=\"\"\"\",0))))\"\n\"IF([2]CPE319!E26=\"\"H\"\",9,IF([2]CPE319!E26=\"\"M\"\",3,IF([2]CPE319!E26 =\"\"L\"\",1,IF([2]CPE319!E26 =\"\"\"\",0))))\"\n\"'[2]QFD Converted #'!$AG$23\"\n\"'[2]QFD Converted #'!$BM$23\"\n\"'[2]QFD Converted #'!$BN$23\"\n\"'[2]QFD Converted #'!$C$23\"\n\"'[2]QFD Converted #'!E23\"\n\"'[2]QFD Converted #'!K23\"\n\"'[2]QFD Converted #'!F23\"\n\"'[2]QFD Converted #'!I23\"\n\"'[2]QFD Converted #'!G23\"\n\"'[2]QFD Converted #'!N23\"\n\"'[2]QFD Converted #'!AA23\"\n\"'[2]QFD Converted #'!$C$24\"\n\"'[2]QFD Converted #'!$C$25\"\n\"'[2]QFD Converted #'!$C$26\"\n\"SUM(C9:C27)\"\n\"C28*C8\"\n\"C29/6899*100\"\n\"DCOUNT(gkm7379Database,CustomerData!K1,Criteria!C11:C12)\"\n\"DSUM(gkm7379Database,CustomerData!N1,Criteria!B11:B12)\"\n\"DSUM(gkm7379Database,CustomerData!L1,Criteria!B11:B12)\"\n\"DSUM(gkm7379Database,CustomerData!M1,Criteria!B11:B12)\"\n\"DAVERAGE(gkm7379Database,CustomerData!M1,Criteria!E11:E12)\"\n\"DMAX(gkm7379Database,CustomerData!N1,Criteria!B11:B12)\"\n\"DGET(gkm7379Database,CustomerData!F1,Criteria!B14:B15)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!C14:C16)\"\n\"DSUM(gkm7379Database,CustomerData!L1,Criteria!C14:C16)\"\n\"DSUM(gkm7379Database,CustomerData!M1,Criteria!C14:C16)\"\n\"DAVERAGE(gkm7379Database,CustomerData!N1,Criteria!C14:C16)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!D14:D15)\"\n\"DSUM(gkm7379Database,CustomerData!L1,Criteria!D14:D15)\"\n\"DSUM(gkm7379Database,CustomerData!M1,Criteria!D14:D15)\"\n\"DAVERAGE(gkm7379Database,CustomerData!N1,Criteria!D14:D15)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!E14:E15)\"\n\"DSUM(gkm7379Database,CustomerData!L1,Criteria!E14:E15)\"\n\"DSUM(gkm7379Database,CustomerData!M1,Criteria!E14:E15)\"\n\"DAVERAGE(gkm7379Database,CustomerData!N1,Criteria!E14:E15)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B11:B12)-SUM(SummaryReport!C25:C27)\"\n\"DSUM(gkm7379Database,CustomerData!L1,Criteria!B11:B12)-SUM(SummaryReport!D25:D27)\"\n\"DSUM(gkm7379Database,CustomerData!M1,Criteria!B11:B12)-SUM(SummaryReport!E25:E27)\"\n\"(D28-E28)/C28\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B19:C20)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B21:D22)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B23:C24)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B26:C27)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B28:D29)\"\n\"DCOUNT(gkm7379Database,CustomerData!L1,Criteria!B30:C31)\"\n\"SummaryReport!A18\"\n\"J2*I2\"\n\"K2*L2\"\n\"L2-M2\"\n\"1+C2\"\n\"1+C2\"\n\"1+C3\"\n\"1+C5\"\n\"1+C7\"\n\"1+C7\"\n\"1+C7\"\n\"1+C7\"\n\"5/6\"\n\"(B3-B2)/(B1-B2)\"\n\"(B1-B3)/(B1-B2)\"\n\"+B12*$B$1\"\n\"MAX($D$2-C11,0)\"\n\"+(1/$B$3)*(G11*$B$5+G13*$B$6)\"\n\"+(F12-F14)/(B12-B14)\"\n\"+F12-(F12-F14)*B1/(B1-B2)\"\n\"+I12*A13+J12/B3\"\n\"+B12*$B$2\"\n\"+(G11-G13)/(C11-C13)\"\n\"+G11-(G11-G13)*(B1/(B1-B2))\"\n\"+I13*B12+J13/B3\"\n\"+(G13-G15)/(C13-C15)\"\n\"+G13-(G13-G15)*B1/(B1-B2)\"\n\"+I14*B14+J14/B3\"\n\"+MAX(C11-$B$20,0)\"\n\"+(F22-F24)/(B12-B14)\"\n\"+F22-(F22-F24)*B1/(B1-B2)\"\n\"+I22*A13+J22/B3\"\n\"+(G21-G23)/(C11-C13)\"\n\"+G21-(G21-G23)*B1/(B1-B2)\"\n\"+I23*B12+J23/B3\"\n\"+(G23-G25)/(C13-C15)\"\n\"+G24-(G23-G25)*B1/(B1-B2)\"\n\"+I24*B14+J24/B3\"\n\"+E23-E13\"\n\"+I22+I12\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C24\"\n\"IF(E24=\"\"\"\",\"\"\"\",D24*E24)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C33\"\n\"IF(E33=\"\"\"\",\"\"\"\",D33*E33)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C33\"\n\"IF(E33=\"\"\"\",\"\"\"\",D33*E33)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C38\"\n\"IF(E38=\"\"\"\",\"\"\"\",D38*E38)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C38\"\n\"IF(E38=\"\"\"\",\"\"\"\",D38*E38)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C38\"\n\"IF(E38=\"\"\"\",\"\"\"\",D38*E38)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C72\"\n\"IF(E72=\"\"\"\",\"\"\"\",D72*E72)\"\n\"VLOOKUP($F$6,$H$23:$I$29,2)*C72\"\n\"IF(E72=\"\"\"\",\"\"\"\",D72*E72)\"\n\"SUM(F24:G85)\"\n\"'CD-ROMs'!H23\"\n\"'Quick References'!F28\"\n\"'Technical Courseware'!G37\"\n\"SUM(F86:F89)\"\n\"'Courseware & Libraries'!I23\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C6\"\n\"IF(E6=\"\"\"\",\"\"\"\",D6*E6)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C8\"\n\"IF(E8=\"\"\"\",\"\"\"\",D8*E8)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C8\"\n\"IF(E8=\"\"\"\",\"\"\"\",D8*E8)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C8\"\n\"IF(E8=\"\"\"\",\"\"\"\",D8*E8)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C8\"\n\"IF(E8=\"\"\"\",\"\"\"\",D8*E8)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C8\"\n\"IF(E8=\"\"\"\",\"\"\"\",D8*E8)\"\n\"SUM(F8:F31)\"\n\"'Courseware & Libraries'!I23\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*495\"\n\"IF(G6=\"\"\"\",\"\"\"\",F6*G6)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*49.95\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*44.95\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*39.95\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*IF(G9<100,B9,IF(G9<500,C9,IF(G9<1000,D9,IF(G9>1000,12.95))))\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*149.95\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*139.95\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$J$5:$K$11,2)*129.95\"\n\"'Courseware & Libraries'!I28\"\n\"SUM(H7:H22)\"\n\"'Courseware & Libraries'!I23\"\n\"IF(E6=\"\"\"\",\"\"\"\",D6*E6)\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$H$5:$I$11,2)*C7\"\n\"SUM(F7:F27)\"\n\"'Courseware & Libraries'!I23\"\n\"IF(F6=\"\"\"\",\"\"\"\",E6*F6)\"\n\"Blended!I6\"\n\"VLOOKUP('Courseware & Libraries'!$F$6,$I$5:$J$10,2)*C7\"\n\"SUM(G6:G36)\"\n\"SUM(B3*C3)\"\n\"SUM(D3:D532)\"\n\"SUM(D537:D544:D546:D608)\"\n\"SUM(D614:D703)\"\n\"SUM(D708:D759)\"\n\"E765*F765\"\n\"D765+G765\"\n\"D831\"\n\"SUM(H765:H831)\"\n\"D533\"\n\"D609\"\n\"D704\"\n\"D760\"\n\"H832\"\n\"SUM(B835:B839)\"\n\"IF(B8=\"\"Tues\"\",1,\"\"\"\")\"\n\"IF(WEEKDAY(C8)=3,\"\"Tues\"\",(IF(WEEKDAY(C8)=5,\"\"Thur\"\",\"\"oops!\"\")))\"\n\"+C8+2\"\n\"1+D13\"\n\"1+#REF!\"\n\"SUM(L7:L29)\"\n\"+L32-L30\"\n\"1+C9\"\n\"1+D48\"\n\"SUM(J8:J64)\"\n\"+J67-J65\"\n\"+B2*C2\"\n\"+D2+D3\"\n\"SUM(D2:D22)\"\n\"+Sheet1!J65\"\n\"+D23-D24\"\n\"C7\"\n\"C7+2\"\n\"$C$7+7*(A11-1)\"\n\"$C$9+7*(A13-1)\"\n\"$C$7+7*(A35-1) - 1\"\n\"$C$9+7*(A37-1) - 1\"\n\"A5+7\"\n\"B7-B8\"\n\"B9-B10-B11\"\n\"B12+B13\"\n\"B9/B5\"\n\"B10/B5\"\n\"(B12+B11)/B9\"\n\"B11/B5\"\n\"B15*(1+$C$4)\"\n\"B16*(1+$C$5)\"\n\"C15*C16\"\n\"C7\"\n\"C17*$B$18\"\n\"C6\"\n\"C19*C15\"\n\"C18-C20\"\n\"C21*(1-$C$8)\"\n\"B23\"\n\"C23-B23\"\n\"C22-C24-C26\"\n\"NPV(C30,$C27:$L27)\"\n\"-PV(C30,10,0,$L27*(1+$C$11)/(C30-$C$11))\"\n\"C31+C32\"\n\"C33-C34\"\n\"C35/C36\"\n\"B15*(1+$C$4)\"\n\"B16*(1+$C$5)\"\n\"C15*C16\"\n\"C7\"\n\"C17*$B$18\"\n\"C6\"\n\"C19*C15\"\n\"C18-C20\"\n\"C21*(1-$C$8)\"\n\"B23\"\n\"C23-B23\"\n\"C17*$C$10\"\n\"C22-C24-C26\"\n\"NPV(C30,$C$27:$L$27)\"\n\"-PV(C30,10,0,$L$27*(1+$C$11)/(C30-$C$11))\"\n\"C31+C32\"\n\"C33-C34\"\n\"C35/C36\"\n\"B15*(1+$C$4)\"\n\"B16*(1+$C$5)\"\n\"C15*C16\"\n\"C7\"\n\"C17*$B$18\"\n\"C6\"\n\"C19*C15\"\n\"C18-C20\"\n\"C21*(1-$C$8)\"\n\"C17*$C$9\"\n\"C23-B23\"\n\"C17*$C$10\"\n\"C22-C24-C26\"\n\"NPV(C30,$C$27:$L$27)\"\n\"-PV(C30,10,0,$L$27*(1+$C$11)/(C30-$C$11))\"\n\"C31+C32\"\n\"C33-C34\"\n\"C35/C36\"\n\"(B3+C3)/2\"\n\"D3*$E$1\"\n\"(F3+G3+H3)/3\"\n\"I3*$J$1\"\n\"L3*$M$1\"\n\"ROUND(E3+J3+K3+M3, 0)\"\n\"(SUM(D2:R2)+T2+U2)/2\"\n\"SUM(D2:D52)\"\n\"AVERAGE(D2:D52)\"\n\"STDEV(D2:D52)\"\n\"SUM(B2:U2)\"\n\"V2/505*100\"\n\"27.5/35*100\"\n\"32/40*100\"\n\"28/40*100\"\n\"13/15*100\"\n\"16/35*100\"\n\"3/4*100\"\n\"22/25*100\"\n\"10/15*100\"\n\"11/15*100\"\n\"34/40*100\"\n\"100\"\n\"21/25*100\"\n\"21/35*100\"\n\"19/40*100\"\n\"18/40*100\"\n\"34.5*2\"\n\"(31/40)*100\"\n\"14/15*100\"\n\"17.5/35*100\"\n\"37/40*100\"\n\"23.5/35*100\"\n\"24/40*100\"\n\"23/25*100\"\n\"20/25*100\"\n\"35/40*100\"\n\"21.5*2\"\n\"25/30*100\"\n\"12/15*100\"\n\"23/35*100\"\n\"33/40*100\"\n\"26/40*100\"\n\"38/40*100\"\n\"18/25*100\"\n\"31.5*2\"\n\"21/40*100\"\n\"22/35*100\"\n\"36/40*100\"\n\"14+1+12\"\n\"29/40*100\"\n\"30/35*100\"\n\"25/35*100\"\n\"10/40*100\"\n\"13/40*100\"\n\"25/40*100\"\n\"19.5/35*100\"\n\"12/40*100\"\n\"5/15*100\"\n\"27.5*2\"\n\"39/40*100\"\n\"31/40*100\"\n\"13.5/35*100\"\n\"7/15*100\"\n\"26.5/35*100\"\n\"20.5/35*100\"\n\"37.5*2\"\n\"27/40*100\"\n\"93.3\"\n\"22.5/35*100\"\n\"19/35*100\"\n\"23/40*100\"\n\"30/40*100\"\n\"16/40*100\"\n\"15/35*100\"\n\"29/35*100\"\n\"20/30*100\"\n\"28*2\"\n\"23.5*2\"\n\"31/35*100\"\n\"43.5*2\"\n\"22/40*100\"\n\"46*2\"\n\"9.5/35*100\"\n\"18/20*100\"\n\"AVERAGE(E6:E104)\"\n\"(B1)/(1-B2)\"\n\"(1-B1)/(B2)\"\n\"(B7)/(1-B7)\"\n\"(B9)*(B4)\"\n\"(B10)/(B10+1)\"\n\"(B1)/(1-B2)\"\n\"(1-B1)/(B2)\"\n\"(B7)/(1-B7)\"\n\"(B9)*(B4)\"\n\"(B10)/(B10+1)\"\n\"(B1)/(1-B2)\"\n\"(1-B1)/(B2)\"\n\"(B7)/(1-B7)\"\n\"(B9)*(B4)\"\n\"(B10)/(B10+1)\"\n\"TODAY( )\"\n\"10^E20\"\n\"B30-(B31*B29/1000)\"\n\"1/(0.018*B21)*EXP(-B32/8.314*0.298)\"\n\"B36*10^(0.28*0.5)\"\n\"B21*10^-(0.28*0.5)\"\n\"B21\"\n\"LN(B39)\"\n\"1/B51\"\n\"B50+(B44/0.008314)*(E51-E52)\"\n\"EXP(B53)\"\n\"1/(0.018*B54)*EXP(-((B30-(B29*0.278))/(8.314*0.278)))\"\n\"B54\"\n\"B38\"\n\"B37\"\n\"1/(A6+273.15)\"\n\"LN(B6)\"\n\"1/274.15\"\n\"B17*B22+B18\"\n\"EXP(B23)\"\n\"(B13+273.15)*B39\"\n\"(C40-(274.15*B39))/1000\"\n\"B24*C43\"\n\"(1/C44)*EXP(-B41/(0.008314*274.15))\"\n\"-B17*8.314/1000\"\n\"C40/1000\"\n\"B52-B58\"\n\"1/(A8+273.15)\"\n\"LN(B8)\"\n\"LN(B16)\"\n\"(B$53*$D57)+B$54\"\n\"1/(273.15+A57)\"\n\"EXP(B57)\"\n\"EXP((D57*B$76)+B$77)\"\n\"B81/100000\"\n\"(1/($B$74*B62))*(1/$C81)\"\n\"-B53*8.314/1000\"\n\"B100+B101\"\n\"C100+B101\"\n\"LOG(C121/B121)/0.5\"\n\"AVERAGE(B5:E5)\"\n\"AVERAGE(B5:B16)\"\n\"(SUM(M2:P2)+SUM(R2:T2))*10/7\"\n\"U2*Q2*C2\"\n\"IF(V2>5.5,\"\"passed\"\",\"\"\"\")\"\n\"IF(W2=\"\"passed\"\",TRUNC(V2*3/10,2),\"\"\"\")\"\n\"1/6\"\n\"1/3\"\n\"1/5\"\n\"1/C57\"\n\"30+TRUNC((RAND()+RAND()+RAND()+RAND()+RAND())*15,0)\"\n\"[1]!ExpValue($B$6:$B$17,C6:C17)\"\n\"R80\"\n\"[1]!PVar($B$6:$B$17,C6:C17)\"\n\"[1]!PStDev($B$6:$B$17,C6:C17)\"\n\"[1]!PCovar($B$6:$B$17,$C$6:$C$17,C$6:C$17)\"\n\"[1]!PCovar($B$6:$B$17,$D$6:$D$17,D$6:D$17)\"\n\"[1]!PCovar($B$6:$B$17,$E$6:$E$17,E$6:E$17)\"\n\"[1]!PCovar($B$6:$B$17,$F$6:$F$17,F$6:F$17)\"\n\"[1]!PCovar($B$6:$B$17,$G$6:$G$17,G$6:G$17)\"\n\"[1]!PCovar($B$6:$B$17,$H$6:$H$17,H$6:H$17)\"\n\"[1]!PCovar($B$6:$B$17,$I$6:$I$17,I$6:I$17)\"\n\"[1]!PCovar($B$6:$B$17,$J$6:$J$17,J$6:J$17)\"\n\"[1]!PCovar($B$6:$B$17,$K$6:$K$17,K$6:K$17)\"\n\"[1]!PCovar($B$6:$B$17,$L$6:$L$17,L$6:L$17)\"\n\"[1]!PCovar($B$6:$B$17,$M$6:$M$17,M$6:M$17)\"\n\"[1]!PCovar($B$6:$B$17,$N$6:$N$17,N$6:N$17)\"\n\"[1]!PCovar($B$6:$B$17,$O$6:$O$17,O$6:O$17)\"\n\"[1]!PCovar($B$6:$B$17,$P$6:$P$17,P$6:P$17)\"\n\"[1]!PCovar($B$6:$B$17,$Q$6:$Q$17,Q$6:Q$17)\"\n\"[1]!PCorr($B$6:$B$17,$C$6:$C$17,C$6:C$17)\"\n\"[1]!PCorr($B$6:$B$17,$D$6:$D$17,D$6:D$17)\"\n\"[1]!PCorr($B$6:$B$17,$E$6:$E$17,E$6:E$17)\"\n\"[1]!PCorr($B$6:$B$17,$F$6:$F$17,F$6:F$17)\"\n\"[1]!PCorr($B$6:$B$17,$G$6:$G$17,G$6:G$17)\"\n\"[1]!PCorr($B$6:$B$17,$H$6:$H$17,H$6:H$17)\"\n\"[1]!PCorr($B$6:$B$17,$I$6:$I$17,I$6:I$17)\"\n\"[1]!PCorr($B$6:$B$17,$J$6:$J$17,J$6:J$17)\"\n\"[1]!PCorr($B$6:$B$17,$K$6:$K$17,K$6:K$17)\"\n\"[1]!PCorr($B$6:$B$17,$L$6:$L$17,L$6:L$17)\"\n\"[1]!PCorr($B$6:$B$17,$M$6:$M$17,M$6:M$17)\"\n\"[1]!PCorr($B$6:$B$17,$N$6:$N$17,N$6:N$17)\"\n\"[1]!PCorr($B$6:$B$17,$O$6:$O$17,O$6:O$17)\"\n\"[1]!PCorr($B$6:$B$17,$P$6:$P$17,P$6:P$17)\"\n\"[1]!PCorr($B$6:$B$17,$Q$6:$Q$17,Q$6:Q$17)\"\n\"SUM(C62:Q62)\"\n\"[1]!PortRet($C$62:$Q$62,$C$20:$Q$20)\"\n\"[1]!PortVar1($C$62:$Q$62,$C$64:$Q$78)\"\n\"[1]!PortStDev1($C$62:$Q$62,$C$64:$Q$78)\"\n\"AVERAGE(C$6:C$17)\"\n\"VAR(C$6:C$17)\"\n\"STDEV(C$6:C$17)\"\n\"VAR(RDERets1!$C$6:$C$17)\"\n\"VAR(RDERets1!$D$6:$D$17)\"\n\"VAR(RDERets1!$E$6:$E$17)\"\n\"VAR(RDERets1!$F$6:$F$17)\"\n\"VAR(RDERets1!$G$6:$G$17)\"\n\"VAR(RDERets1!$H$6:$H$17)\"\n\"VAR(RDERets1!$I$6:$I$17)\"\n\"VAR(RDERets1!$J$6:$J$17)\"\n\"VAR(RDERets1!$K$6:$K$17)\"\n\"VAR(RDERets1!$L$6:$L$17)\"\n\"VAR(RDERets1!$M$6:$M$17)\"\n\"VAR(RDERets1!$N$6:$N$17)\"\n\"VAR(RDERets1!$O$6:$O$17)\"\n\"VAR(RDERets1!$P$6:$P$17)\"\n\"VAR(RDERets1!$Q$6:$Q$17)\"\n\"MAX(C$111:C$124)\"\n\"MAX(D$112:D$124)\"\n\"MAX(E$113:E$124)\"\n\"MAX(F$114:F$124)\"\n\"MAX(G$115:G$124)\"\n\"MAX(H$116:H$124)\"\n\"MAX(I$117:I$124)\"\n\"MAX(J$118:J$124)\"\n\"MAX(K$119:K$124)\"\n\"MAX(L$120:L$124)\"\n\"MAX(M$121:M$124)\"\n\"MAX(N$122:N$124)\"\n\"MAX(O$123:O$124)\"\n\"MAX(P$124:P$124)\"\n\"MAX(C128:Q128)\"\n\"$D$86\"\n\"$Q$86\"\n\"$D$88\"\n\"$Q$88\"\n\"$D$93\"\n\"$D$106\"\n\"$Q$106\"\n\"[1]!PortRet($A141:$B141,$C$132:$D$132)\"\n\"[1]!PortStDev1($A141:$B141,$C$136:$D$137)\"\n\"1-$A142\"\n\"-$D$106\"\n\"[1]!PortRet($A164:$B164,$C$155:$D$155)\"\n\"[1]!PortStDev1($A164:$B164,$C$159:$D$160)\"\n\"[1]!WOpt1Cov($C$178,$D$178,$C$179,$D$179,$D$182)\"\n\"[1]!WOpt2Cov($C$178,$D$178,$C$179,$D$179,$D$182)\"\n\"[1]!PortRet($A187:$B187,$C$178:$D$178)\"\n\"[1]!PortStDev1($A187:$B187,$C$182:$D$183)\"\n\"MINVERSE(C192:Q206)\"\n\"MMULT(C209:Q223,B209:B223)\"\n\"C228/$C$243\"\n\"SUM(C228:C242)\"\n\"[1]!PortRet($D$228:$D$242,$B$209:$B$223)\"\n\"[1]!PortVar1($D$228:$D$242,$C$192:$Q$206)\"\n\"[1]!PortStDev1($D$228:$D$242,$C$192:$Q$206)\"\n\"VAR(Sheet4!$B$1:$B$12)\"\n\"VAR(Sheet4!$C$1:$C$12)\"\n\"VAR(Sheet4!$D$1:$D$12)\"\n\"VAR(Sheet4!$E$1:$E$12)\"\n\"VAR(Sheet4!$F$1:$F$12)\"\n\"VAR(Sheet4!$G$1:$G$12)\"\n\"VAR(Sheet4!$H$1:$H$12)\"\n\"VAR(Sheet4!$I$1:$I$12)\"\n\"VAR(Sheet4!$J$1:$J$12)\"\n\"VAR(Sheet4!$K$1:$K$12)\"\n\"VAR(Sheet4!$L$1:$L$12)\"\n\"VAR(Sheet4!$M$1:$M$12)\"\n\"VAR(Sheet4!$N$1:$N$12)\"\n\"VAR(Sheet4!$O$1:$O$12)\"\n\"VAR(Sheet4!$P$1:$P$12)\"\n\"U13\"\n\"IF(H13=\"\"real\"\",\"\"Correct!\"\",(IF(H13=\"\"fake\"\",\"\"Nope, they're real!\"\",\"\"\"\")))\"\n\"IF(H26=\"\"fake\"\",\"\"Correct!\"\",(IF(H26=\"\"real\"\",\"\"Wrong, they're fake!\"\",\"\"\"\")))\"\n\"COUNTIF(J13:J262,\"\"Correct!\"\")\"\n\"SUM(I7:L7)\"\n\"((I7*9)+(J7*3)+(K7*1))/M7\"\n\"N7-H7\"\n\"(STDEVP(I8:L8))/SQRT(M8)\"\n\"0.03\"\n\"0.17\"\n\"0.12\"\n\"0.71\"\n\"B3+B5\"\n\"1-B12\"\n\"1-B5\"\n\"B6+B13-B15\"\n\"B16/B13\"\n\"0.2\"\n\"B24*B22\"\n\"1-B25\"\n\"B36+B40*B23\"\n\"B36/B42\"\n\"FALSE\"\n\"PilgrimOffer\"\n\"B7\"\n\"endMarketGood\"\n\"PilgrimOffer+endMarketGood\"\n\"B7+endMarketGood\"\n\"1-C45\"\n\"1-pPredictGood_if_Good\"\n\"SUM(B44:B45)\"\n\"$G$17\"\n\"P_Good_Weather\"\n\"$B$13\"\n\"Bid___Good_Weather\"\n\"IF($E$6=$C$13,$J$10,\"\"If forecast good then \"\")\"\n\"IF(E6<>$C$13,$M$20,\"\"\"\")\"\n\"$B$15\"\n\"L6*N6+L8*N8\"\n\"IF($E$6=$C$13,\"\"\"\",\"\"otherwise \"\")\"\n\"IF(E6<>$C$13,$M$30,\"\"\"\")\"\n\"1-P_Good_Weather\"\n\"$B$14\"\n\"Bid___Bad_Weather\"\n\"$C$13\"\n\"MAX(K7,K12)\"\n\"IF(I10>K12,$B$15,$B$16)\"\n\"No_Bid\"\n\"$B$16\"\n\"C27\"\n\"Bid___Good_Weather-Weather_Forecast_Cost\"\n\"MAX(I10,I25)\"\n\"IF(F17>I25,$C$13,$C$14)\"\n\"D27\"\n\"Bid___Bad_Weather-Weather_Forecast_Cost\"\n\"$C$15\"\n\"$C$16\"\n\"1-C19\"\n\"Forecast_Good_Weather\"\n\"C27\"\n\"No_Bid-Weather_Forecast_Cost\"\n\"C19*P_Good_Weather\"\n\"D19*(1-P_Good_Weather)\"\n\"D27\"\n\"$C$14\"\n\"J20*L20+J30*L30\"\n\"C28\"\n\"C23/Forecast_Good_Weather\"\n\"C24/Forecast_Bad_Weather\"\n\"D28\"\n\"Forecast_Bad_Weather\"\n\"C23+D23\"\n\"C28\"\n\"D28\"\n\"0\"\n\"$I$10\"\n\"$I$25\"\n\"P_Good_Weather*Bid___Good_Weather+(1-P_Good_Weather)*0\"\n\"EPPI-No_Forecast_EMV\"\n\"(Forecast_EMV+Weather_Forecast_Cost)-No_Forecast_EMV\"\n\"SUM(D2:D65)\"\n\"+YEAR(J$12)-YEAR(J$8)+1\"\n\"+YEAR(J$12)-YEAR(J$8)+1\"\n\"+(F$8/F$12)*(1-(1/(1+F$12)^E$22))\"\n\"+(F$8/(F$12-F$13))*(1-((1+F$13)/(1+F$12))^J$22)\"\n\"+F$15*E$23\"\n\"+J23*F$15\"\n\"+YEAR(J$9)-YEAR(J$11)-1\"\n\"+YEAR(J$9)-YEAR(J$11)-1\"\n\"+E$22-E$28\"\n\"+E$22-E$28\"\n\"-F$11-(F$11/(1+F$12))\"\n\"-F$11-(F$11/(1+F$12))\"\n\"+((F$9/F$12)*(1-(1/(1+F$12)^E$29)))*(1/(1+F$12)^E$28)\"\n\"+((F$9/(F$12-F$14))*(1-((1+F$14)/(1+F$12))^J$29))*(1/(1+F$12)^J$28)\"\n\"+F$10/((1+F$12)^E$28)\"\n\"+E32\"\n\"+F$15*E$31+E$30+E32\"\n\"+J31*F$15+J30+J32\"\n\"+\"\"PV on 9/1/2001 of Extra Money Saved\"\"\"\n\"+E24-E33\"\n\"+J33-J24\"\n\"+\"\"FV on 8/31/2026 of Extra Money Saved\"\"\"\n\"+E36*((1+F12)^E22)\"\n\"+J36*((1+F12)^J22)\"\n\"NOW()\"\n\"SUM(B48:D48)\"\n\"IF(Sheet2!$A$2>=A8,A8,\"\" \"\")\"\n\"IF(Sheet2!$A$2>=A8,10-C8,\"\" \"\")\"\n\"IF(Sheet2!$A$2>=A8,0.5*C8*D8,\"\" \"\")\"\n\"10-A2\"\n\"-A2/2\"\n\"A2/2\"\n\"B2\"\n\"A5\"\n\"C8\"\n\"A6\"\n\"C8\"\n\"(SUM(B4:B11)+SUM(E4:E11))/COUNT(B4:B11)*0.5+SUM(C4:C11)/COUNT(C4:C11)*0.25+SUM(D4:D11)/COUNT(D4:D11)*0.25\"\n\"IF(E13<70,IF(E13<60,\"\"Failing!\"\",\"\"Danger\"\"),\"\"\"\")\"\n\"$G$2*3\"\n\"A3+3\"\n\"B3 + B3*B$2\"\n\"F4\"\n\"F5/F$4\"\n\"SUM(F48:T48)\"\n\"(0.5*(SUM(AG48:AJ48)/4)+(0.25*(AL48))+(0.125*SUM(F48:T48)/15)+(0.125*SUM(V48:AE48)/10))\"\n\"E31+1\"\n\"SUM(E35:E38)\"\n\"E42-E43\"\n\"SUM(E44:E45)\"\n\"E39+E46\"\n\"SUM(E53:E55)\"\n\"E56+E61\"\n\"E66+E67\"\n\"E78-E85\"\n\"0.4*E89\"\n\"E91-E93\"\n\"A7+5\"\n\"A7+7\"\n\"A17+7\"\n\"SUM(F9:P9)\"\n\"(F9/R9)\"\n\"(H9/R9)\"\n\"(J9/R9)\"\n\"(L9/R9)\"\n\"(N9/R9)\"\n\"(P9/R9)\"\n\"((F9*[1]Sheet1!F$10)+(H9*[1]Sheet1!H$10)+(J9*[1]Sheet1!J$10)+(L9*[1]Sheet1!L$10)+(N9*[1]Sheet1!N$10)+(P9*[1]Sheet1!P$10))/R9\"\n\"SUM(F9:F15)\"\n\"SUM(F3:F48)\"\n\"E4+(E5*E6)\"\n\"SUM(E11:E24)\"\n\"SUM(E9:H9)\"\n\"A9+1\"\n\"D11+I11+J11\"\n\"C2*0.8+AJ2*0.2\"\n\"IF(AJ2>84,D2*1.1,D2)\"\n\"W2*0.25+AE2*0.125+AI2*0.625\"\n\"AVERAGE(E2:V2)\"\n\"AVERAGE(X2:AD2)\"\n\"AVERAGE(AF2:AH2)\"\n\"AN2-AM2\"\n\"SUM(AO2:BS2)\"\n\"COUNT(AO2:BS2)\"\n\"AJ5\"\n\"AJ28\"\n\"C2*0.8+AJ2*0.2\"\n\"IF(AJ2>84,D2*1.1,D2)\"\n\"W2*0.25+AE2*0.125+AI2*0.625\"\n\"AVERAGE(E2:V2)\"\n\"AVERAGE(X2:AD2)\"\n\"AVERAGE(AF2:AH2)\"\n\"AN2-AM2\"\n\"SUM(AO2:BS2)\"\n\"COUNT(AO2:BS2)\"\n\"SUM(B4:E4)\"\n\"SUM(B3:B42)\"\n\"B7*C7\"\n\"D7*0.075\"\n\"E7+D7\"\n\"SUM(F7:F17)\"\n\"SUM(F7:F17)\"\n\"E19*0.1\"\n\"E19*0.1\"\n\"E19*0.03\"\n\"E19*0.03\"\n\"E19-E20+E21\"\n\"E19-E20+E21\"\n\"B4*C4\"\n\"E9*F9\"\n\"G9*0.07\"\n\"G9*0.08\"\n\"G9+H9+I9\"\n\"SUM(J9:J22)\"\n\"J23*0.1\"\n\"J23*0.04\"\n\"SUM(H9:H22)\"\n\"SUM(I9:I22)\"\n\"J23-J25+J26\"\n\"SUM(B3:G3)\"\n\"SUM(I3:L3)\"\n\"SUM(H3:L3)\"\n\"(H3+M3)/$N$3\"\n\"SUM(O4:W4)\"\n\"O4/110\"\n\"O5/111\"\n\"O6/103\"\n\"C23/110\"\n\"C44/111\"\n\"SUM(N4:T4)\"\n\"N4/109\"\n\"C5/110\"\n\"C23/110\"\n\"C24/109\"\n\"B3+2*B10\"\n\"B4+B10\"\n\"B5/-1\"\n\"B12-B13\"\n\"B14-B20\"\n\"B15-2*B20\"\n\"B2-100*B10\"\n\"B3/-1\"\n\"B4+B10\"\n\"B5\"\n\"SUM(C4:I4)\"\n\"B4*D4\"\n\"SUM(C4:C10)\"\n\"SUM(K4:K11)\"\n\"SUM(K4:K11)\"\n\"B4*C4*F4*H4\"\n\"F18/F19\"\n\"(F18)+(B5*C5*F5*H5)+(B6*C6*F6*H6)+(B7*C7*F7*H7)+(B8*C8*F8*H8)+(B9*C9*F9*H9)+(B10*C10*F10*H10)\"\n\"B23*C23*D23*E23\"\n\"E43*D43\"\n\"1-F50-D44+E44*D44\"\n\"I52/D41\"\n\"C59*D59*E59\"\n\"F60/F66\"\n\"SUM(B195:B200)\"\n\"(B222-B221)*(C222+C221)/2\"\n\"(B223-B222)*(C223+C221)/2\"\n\"SUM(E219:E225)\"\n\"B5*C5*D5\"\n\"B5*C5*G5\"\n\"B5*C5*J5\"\n\"B5*C5*O5\"\n\"B5*C5*R5\"\n\"E6/E12\"\n\"SUM(E5:E11)\"\n\"F6\"\n\"F26\"\n\"I6\"\n\"I26\"\n\"L6\"\n\"L26\"\n\"Q6\"\n\"Q26\"\n\"T6\"\n\"F45\"\n\"F16\"\n\"I45\"\n\"I16\"\n\"L45\"\n\"L16\"\n\"F55\"\n\"Q16\"\n\"I55\"\n\"T16\"\n\"F65\"\n\"B13*C13*D13*E13\"\n\"F14/F20\"\n\"SUM(F13:F19)\"\n\"G14\"\n\"G114\"\n\"G214\"\n\"G24\"\n\"G124\"\n\"G224\"\n\"G34\"\n\"G134\"\n\"G234\"\n\"G44\"\n\"G144\"\n\"G244\"\n\"G54\"\n\"G154\"\n\"G254\"\n\"G64\"\n\"G164\"\n\"G264\"\n\"G74\"\n\"G174\"\n\"G274\"\n\"G84\"\n\"G184\"\n\"G284\"\n\"G94\"\n\"G194\"\n\"G294\"\n\"G104\"\n\"G204\"\n\"G304\"\n\"NORMDIST(140,124,20,TRUE)\"\n\"1-D8\"\n\"NORMDIST(90,124,20,TRUE)\"\n\"NORMDIST(0.3,0.8,0.48,TRUE)\"\n\"NORMDIST(0.3,0.05,0.16,TRUE)\"\n\"((0.16*0.8)+(0.48*0.05))/0.64\"\n\"NORMDIST(E46,0.8,0.48,TRUE)\"\n\"1-E49\"\n\"NORMDIST(E46,0.05,0.16,TRUE)\"\n\"COUNT(C59:C76)\"\n\"SUM(D59:D76)\"\n\"AVERAGE(D59:D76)\"\n\"STDEV(D59:D76)\"\n\"COUNT(C86:C101)\"\n\"SUM(D86:D101)\"\n\"AVERAGE(D86:D101)\"\n\"STDEV(D86:D101)\"\n\"0.00008206*1015/$D$41/B41\"\n\"(C41-E41)^2\"\n\"SUM(F41:F44)\"\n\"D41\"\n\"0.00008206*B50/C50/1\"\n\"$E$50*EXP(-$E$51/8.314/B50)\"\n\"SUM(G50:G54)\"\n\"1/B50\"\n\"LN(D50)\"\n\"LN($D$59)-($D$60/8.314)*B59\"\n\"EXP(E59)\"\n\"(D50-G59)^2\"\n\"29926*8.314\"\n\"EXP(22.039)\"\n\"MMULT(B10:C11,E10:E11)\"\n\"TRANSPOSE(B11:D12)\"\n\"TRANSPOSE(B11:D13)\"\n\"TRANSPOSE(B11:E11)\"\n\"TRANSPOSE(B11:B13)\"\n\"MMULT(B11:C12,B11:C12)\"\n\"MMULT(B11:D13,B15:D17)\"\n\"MINVERSE(B11:C12)\"\n\"MINVERSE(B11:C12)\"\n\"MINVERSE(B11:C12)\"\n\"MMULT(B10:F13,B15:E19)\"\n\"MINVERSE(B16:D18)\"\n\"MMULT(J16:L18,B26:B28)\"\n\"MINVERSE(B16:D18)\"\n\"MMULT(J16:L18,B26:B28)\"\n\"MINVERSE(B16:D18)\"\n\"MMULT(J16:L18,B26:B28)\"\n\"D8-B8\"\n\"SUMPRODUCT(E8:E13,G8:G13)\"\n\"MMULT(B18:G18,$G$8:$G$13)\"\n\"BINOMDIST(B11,$C$7,$C$8,0)\"\n\"SUM(C11:C16)\"\n\"SUM(H7:H18)\"\n\"BINOMDIST(C10,C8,C9,1)\"\n\"1-0.3231\"\n\"BINOMDIST(C10,C8,C9,1)\"\n\"1-0.7939\"\n\"SUMPRODUCT(C8:C12,D8:D12)\"\n\"SUMPRODUCT((C8:C12-D15)*(C8:C12-D15),D8:D12)\"\n\"SQRT(D16)\"\n\"SUMPRODUCT(C22:C32,D22:D32)\"\n\"SUMPRODUCT((C22:C32-D35)*(C22:C32-D35),D22:D32)\"\n\"SQRT(36/C8)\"\n\"1-NORMDIST(32,C9,C10,1)\"\n\"NORMDIST(25,C9,C10,1)\"\n\"1-C12-C11\"\n\"1-NORMDIST(32,C19,C20,1)\"\n\"NORMDIST(25,C19,C20,1)\"\n\"(25-26)/1.2\"\n\"0.5-0.2967\"\n\"1-C24-C31\"\n\"(SUM(J2:J3))/3+(SUM(L2))/12\"\n\"(SUM(B2:B3:B4)*4)+(SUM(D2:D3:D4:D5)+(SUM(F2:F4:F3))/4)\"\n\"SUM(B11:B12)\"\n\"1-C9\"\n\"$D$4*C9+$D$5*D9\"\n\"$D$4*$D$5/(D9*$D$4+C9*$D$5)\"\n\"1/($D$2*1/E9+(1-$D$2)*(C9/$D$4+D9/$D$5))\"\n\"1/($E$2*1/E9+(1-$E$2)*(C9/$D$4+D9/$D$5))\"\n\"SUM(E5:E21)\"\n\"+D22/E22\"\n\"AVERAGE(B2:E2)\"\n\"F2*10\"\n\"SUM(B30:E30)\"\n\"F30/G30*100\"\n\"SUM(B3:B9)\"\n\"2*A34\"\n\"A27+21\"\n\"A27+B27\"\n\"+(D5/E5)\"\n\"SUM(E5:E21)\"\n\"((1-SUM($G$2:$J$2)-SUM($C$4)))+C$4\"\n\"SUM($C2,$G2:$J2)\"\n\"G4\"\n\"(C4/SUM($C$4:$D$4))*0.7\"\n\"SUM(C3:D3,G3:J3)\"\n\"G4\"\n\"SUM(C4:D4,G4:M4)\"\n\"(C6*C$2)+(G6*G$2)+(G6*G$2)+(H6*H$2)+(I6*I$2)\"\n\"(C6*C$3)+(D6*D$3)+(G6*G$3)+(H6*H$3)+(I6*I$3)+(J6*J$3)\"\n\"Homework!X6\"\n\"Participation!R6\"\n\"Attendance!S6\"\n\"Journal!R6\"\n\"(C6*C$4)+(D6*D$4)+(K6*K$4)+(G6*G$4)+(H6*H$4)+(I6*I$4)+(J6*J4)+(L6*L$4)+(M6*M$4)\"\n\"(C7*C$4)+(D7*D$4)+(K7*K$4)+(G7*G$4)+(H7*H$4)+(I7*I$4)+(L7*L$4)+(M7*M$4)\"\n\"Totals!B6\"\n\"AVERAGE(C6:W6)\"\n\"Totals!B6\"\n\"55+(AVERAGE(C6:P6)*4)\"\n\"Totals!B6\"\n\"SUM(C6:Q6)\"\n\"IF($R6>6,0,IF($R6>2,96-(8*($R6-2)),100-($R6*2)))\"\n\"IF($R6>4,0,IF($R6>2,90-(15*($R6-2)),100-($R6*5)))\"\n\"Totals!B6\"\n\"AVERAGE(C6:Q6)\"\n\"((1-SUM($J$5:$L$5)-SUM($C$5:$F$5))/4)+C$5\"\n\"SUM($C2:$F2,$J2:$L2)\"\n\"((1-SUM($G$3,$J$3:$L$3)-SUM($C$5:$F$5))/4)+C$5\"\n\"SUM(C3:F3,G3,J3:L3)\"\n\"((1-SUM($J$4:$L$4)-SUM($C$5:$F$5)-SUM($M$5:$N$5))/6)+C$5\"\n\"SUM(C4:F4,J4:N4)\"\n\"SUM(C5:F5,J5:N5,P5)\"\n\"(C7*C$2)+(D7*D$2)+(E7*E$2)+(F7*F$2)+(J7*J$2)+(K7*K$2)+(L7*L$2)\"\n\"(C7*C$3)+(D7*D$3)+(E7*E$3)+(F7*F$3)++(G7*G$3)+(J7*J$3)+(K7*K$3)+(L7*L$3)\"\n\"Homework!W5\"\n\"Participation!Q5\"\n\"Attendance!S6\"\n\"(C7*C$4)+(D7*D$4)+(E7*E$4)+(F7*F$4)+(M7*M$4)+(N7*N$4)+(J7*J$4)+(K7*K$4)+(L7*K$4)\"\n\"(C7*C$5)+(D7*D$5)+(E7*E$5)+(F7*F$5)+(P7*P$5)+(J7*J$5)+(K7*K$5)+(L7*L$5)+(M7*M$5)+(N7*N$5)\"\n\"Totals!B7\"\n\"AVERAGE(C6:W6)\"\n\"Totals!B7\"\n\"55+(AVERAGE(C6:P6)*4)\"\n\"Totals!B7\"\n\"SUM(C6:Q6)\"\n\"IF($R6>6,0,100-(5*$R6))\"\n\"IF($R6>4,0,100-(7.5*$R6))\"\n\"SUM(C10:BN10)\"\n\"SUM(B5:D5)*100/(40+56+58)\"\n\"QUARTILE(B5:B27,0)\"\n\"QUARTILE(B5:B27,1)\"\n\"QUARTILE(B5:B27,2)\"\n\"QUARTILE(B5:B27,3)\"\n\"QUARTILE(B5:B27,4)\"\n\"AVERAGE(B5:B27)\"\n\"STDEV(B5:B27)\"\n\"SUM(D5:AO5)\"\n\"AQ5/$AQ$5*20\"\n\"(AS5+AT5+AU5+AV5)\"\n\"LOOKUP(AX5,$BA$8:$BA$15,$BB$8:$BB$15)\"\n\"SUM(D5:AJ5)\"\n\"AL5/$AL$5*20\"\n\"(AM5+AN5+AO5+AP5)\"\n\"LOOKUP(AR5,$AU$8:$AU$15,$AV$8:$AV$15)\"\n\"AL34/($AL$5-5)*20\"\n\"'Weekly Chart'!H19\"\n\"B7/C7\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"SUM(C7:G7)\"\n\"SUM(C7:C17)\"\n\"AVERAGE(C7:C17)\"\n\"'Final Report'!B36\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Weekly Chart'!C19\"\n\"'Final Report'!B36\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!B36\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"SUM(B7:I7)\"\n\"B7/$J7*100\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"SUM(B7:H7)\"\n\"B7/$I7*100\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"SUM(B7:G7)\"\n\"B7/$H7*100\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"SUM(B7:F7)\"\n\"B7/$G7*100\"\n\"'Final Report'!B36\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"'Final Report'!A1\"\n\"IF(SUM(E7:I7)=0,\"\"\"\",(5*E7+4*F7+3*G7+2*H7+1*I7)/SUM(E7:I7))\"\n\"IF(B7=\"\"\"\",\"\"\"\",(B7-1)/4)\"\n\"[2]Analysis!$C$24\"\n\"[2]Analysis!C25\"\n\"[2]Analysis!C26\"\n\"[2]Analysis!C27\"\n\"[2]Analysis!C28\"\n\"[2]Analysis!C$29\"\n\"SUM(E7:K7)\"\n\"IF(L7<>$B$55,\"\"E\"\",\"\"\"\")\"\n\"[2]Analysis!D24\"\n\"[2]Analysis!D25\"\n\"[2]Analysis!D$29\"\n\"IF(B9=\"\"\"\",\"\"\"\",(1-ABS(B9-3)/2))\"\n\"[2]Analysis!E24\"\n\"[2]Analysis!E28\"\n\"[2]Analysis!E$29\"\n\"[2]Analysis!F24\"\n\"[2]Analysis!F$29\"\n\"[2]Analysis!G30\"\n\"[2]Analysis!G$29\"\n\"[2]Analysis!$H$24\"\n\"[2]Analysis!$H$25\"\n\"[2]Analysis!$H$26\"\n\"[2]Analysis!$H$27\"\n\"[2]Analysis!$H$28\"\n\"[2]Analysis!H$29\"\n\"[2]Analysis!$I$24\"\n\"[2]Analysis!$I$25\"\n\"[2]Analysis!$I$26\"\n\"[2]Analysis!$I$27\"\n\"[2]Analysis!$I$28\"\n\"[2]Analysis!I$29\"\n\"[2]Analysis!$J$24\"\n\"[2]Analysis!$J$25\"\n\"[2]Analysis!$J$26\"\n\"[2]Analysis!$J$27\"\n\"[2]Analysis!$J$28\"\n\"[2]Analysis!J$29\"\n\"[2]Analysis!$K$24\"\n\"[2]Analysis!$K$25\"\n\"[2]Analysis!$K$26\"\n\"[2]Analysis!$K$27\"\n\"[2]Analysis!$K$28\"\n\"[2]Analysis!K$29\"\n\"[2]Analysis!$L$24\"\n\"[2]Analysis!$L$25\"\n\"[2]Analysis!$L$26\"\n\"[2]Analysis!$L$27\"\n\"[2]Analysis!$L$28\"\n\"[2]Analysis!L$29\"\n\"[2]Analysis!$M$24\"\n\"[2]Analysis!$M$25\"\n\"[2]Analysis!$M$26\"\n\"[2]Analysis!$M$27\"\n\"[2]Analysis!$M$28\"\n\"[2]Analysis!M$29\"\n\"[2]Analysis!$P$24\"\n\"[2]Analysis!$P$25\"\n\"[2]Analysis!$P$26\"\n\"[2]Analysis!$P$27\"\n\"[2]Analysis!$P$28\"\n\"IF(L37=\"\"\"\",\"\"\"\",H37/L37)\"\n\"[2]Analysis!$N$27\"\n\"[2]Analysis!$N$28\"\n\"[2]Analysis!N$29\"\n\"[2]Analysis!$O$24\"\n\"[2]Analysis!$O$25\"\n\"[2]Analysis!$O$26\"\n\"[2]Analysis!$O$27\"\n\"[2]Analysis!$O$28\"\n\"[2]Analysis!O$29\"\n\"[2]Analysis!$R$24\"\n\"[2]Analysis!$R$25\"\n\"[2]Analysis!$R$26\"\n\"[2]Analysis!$R$27\"\n\"[2]Analysis!$R$28\"\n\"[2]Analysis!R$29\"\n\"[2]Analysis!$S$24\"\n\"[2]Analysis!$S$25\"\n\"[2]Analysis!$S$26\"\n\"[2]Analysis!$S$27\"\n\"[2]Analysis!$S$28\"\n\"[2]Analysis!S$29\"\n\"[2]Analysis!$T$24\"\n\"[2]Analysis!$T$25\"\n\"[2]Analysis!$T$26\"\n\"[2]Analysis!$T$27\"\n\"[2]Analysis!$T$28\"\n\"[2]Analysis!T$29\"\n\"[2]Analysis!$U$24\"\n\"[2]Analysis!$U$25\"\n\"[2]Analysis!$U$26\"\n\"[2]Analysis!$U$27\"\n\"[2]Analysis!$U$28\"\n\"[2]Analysis!U$29\"\n\"[2]Analysis!Q30\"\n\"[2]Analysis!Q$29\"\n\"[2]Analysis!$V$24\"\n\"[2]Analysis!$V$25\"\n\"[2]Analysis!$V$26\"\n\"[2]Analysis!$V$27\"\n\"[2]Analysis!$V$28\"\n\"[2]Analysis!V$29\"\n\"IF(SUM(C7:C52)=0,\"\"\"\",AVERAGE(C7:C52))\"\n\"[2]Analysis!A32\"\n\"IF(B56=\"\"\"\",\"\"\"\",B55/B56)\"\n\"COUNTIF(C$4:C$22,5)\"\n\"COUNTIF(C$4:C$22,4)\"\n\"COUNTIF(C$4:C$22,3)\"\n\"COUNTIF(C$4:C$22,2)\"\n\"COUNTIF(C$4:C$22,1)\"\n\"COUNTIF(C$4:C$15,\"\"\"\")\"\n\"AVERAGE(C4:C22)\"\n\"SUM(C24:C29)\"\n\"MAX(C31:V31)\"\n\"COUNTIF(C$4:C$28,5)\"\n\"COUNTIF(C$4:C$28,4)\"\n\"COUNTIF(C$4:C$28,3)\"\n\"COUNTIF(C$4:C$28,2)\"\n\"COUNTIF(C$4:C$28,1)\"\n\"COUNTIF(C$4:C$28,\"\"\"\")\"\n\"AVERAGE(C4:C28)\"\n\"SUM(C30:C35)\"\n\"MAX(C37:V37)\"\n\"IF(SUM(E7:I7)=0,\"\"\"\",(5*E7+4*F7+3*G7+2*H7+1*I7)/SUM(E7:I7))\"\n\"IF(B7=\"\"\"\",\"\"\"\",(B7-1)/4)\"\n\"Analysis!$C$30\"\n\"Analysis!C31\"\n\"Analysis!C32\"\n\"Analysis!C33\"\n\"Analysis!C34\"\n\"Analysis!C$35\"\n\"SUM(E7:K7)\"\n\"IF(L7<>$B$55,\"\"E\"\",\"\"\"\")\"\n\"Analysis!D30\"\n\"Analysis!D31\"\n\"Analysis!D$35\"\n\"IF(B9=\"\"\"\",\"\"\"\",(1-ABS(B9-3)/2))\"\n\"Analysis!E30\"\n\"Analysis!E$35\"\n\"Analysis!F30\"\n\"Analysis!F$35\"\n\"Analysis!G36\"\n\"Analysis!G$35\"\n\"Analysis!$H$30\"\n\"Analysis!$H$31\"\n\"Analysis!$H$32\"\n\"Analysis!$H$33\"\n\"Analysis!$H$34\"\n\"Analysis!H$35\"\n\"Analysis!$I$30\"\n\"Analysis!$I$31\"\n\"Analysis!$I$32\"\n\"Analysis!$I$33\"\n\"Analysis!$I$34\"\n\"Analysis!I$35\"\n\"Analysis!$J$30\"\n\"Analysis!$J$31\"\n\"Analysis!$J$32\"\n\"Analysis!$J$33\"\n\"Analysis!$J$34\"\n\"Analysis!J$35\"\n\"Analysis!$K$30\"\n\"Analysis!$K$31\"\n\"Analysis!$K$32\"\n\"Analysis!$K$33\"\n\"Analysis!$K$34\"\n\"Analysis!K$35\"\n\"Analysis!$L$30\"\n\"Analysis!$L$31\"\n\"Analysis!$L$32\"\n\"Analysis!$L$33\"\n\"Analysis!$L$34\"\n\"Analysis!L$35\"\n\"Analysis!$M$30\"\n\"Analysis!$M$31\"\n\"Analysis!$M$32\"\n\"Analysis!$M$33\"\n\"Analysis!$M$34\"\n\"Analysis!M$35\"\n\"Analysis!$P$30\"\n\"Analysis!$P$31\"\n\"Analysis!$P$32\"\n\"Analysis!$P$33\"\n\"Analysis!$P$34\"\n\"Analysis!P$35\"\n\"IF(L37=\"\"\"\",\"\"\"\",H37/L37)\"\n\"Analysis!$N$33\"\n\"Analysis!$N$34\"\n\"Analysis!N$35\"\n\"Analysis!$O$30\"\n\"Analysis!$O$31\"\n\"Analysis!$O$32\"\n\"Analysis!$O$33\"\n\"Analysis!$O$34\"\n\"Analysis!O$35\"\n\"Analysis!$R$30\"\n\"Analysis!$R$31\"\n\"Analysis!$R$32\"\n\"Analysis!$R$33\"\n\"Analysis!$R$34\"\n\"Analysis!R$35\"\n\"Analysis!$S$30\"\n\"Analysis!$S$31\"\n\"Analysis!$S$32\"\n\"Analysis!$S$33\"\n\"Analysis!$S$34\"\n\"Analysis!S$35\"\n\"Analysis!$T$30\"\n\"Analysis!$T$31\"\n\"Analysis!$T$32\"\n\"Analysis!$T$33\"\n\"Analysis!$T$34\"\n\"Analysis!T$35\"\n\"Analysis!$U$30\"\n\"Analysis!$U$31\"\n\"Analysis!$U$32\"\n\"Analysis!$U$33\"\n\"Analysis!$U$34\"\n\"Analysis!U$35\"\n\"Analysis!Q36\"\n\"Analysis!Q$35\"\n\"Analysis!$V$30\"\n\"Analysis!$V$31\"\n\"Analysis!$V$32\"\n\"Analysis!$V$33\"\n\"Analysis!$V$34\"\n\"Analysis!V$35\"\n\"IF(SUM(C7:C52)=0,\"\"\"\",AVERAGE(C7:C52))\"\n\"Analysis!A38\"\n\"[2]Lectures!B48\"\n\"IF(B56=\"\"\"\",\"\"\"\",B55/B56)\"\n\"ROUND(A10*0.1+(B10+C10+D10)/3*0.55+E10*0.25+(F10+G10)/2*0.1,0)\"\n\"HLOOKUP(H10,$D$39:$I$40,2)\"\n\"SUM(D9:R9)\"\n\"S9\"\n\"(S9/S9)*100\"\n\"U9*V9\"\n\"S9\"\n\"(S11/T11)*100\"\n\"V9\"\n\"'Extra Credit'!J5\"\n\"Attendance!G7\"\n\"W11\"\n\"W19\"\n\"W27\"\n\"W35\"\n\"SUM(D43:V43)\"\n\"E7-'Main Page'!N4\"\n\"IF(F7>0,-(F7*2),0)\"\n\"SUM(#REF!)\"\n\"SUM(K7:AB7)\"\n\"E5+G5+I5\"\n\"'Main Page'!$B$1\"\n\"'Main Page'!$B$2\"\n\"'Main Page'!$A$3\"\n\"100*B179/D179/4\"\n\"+F179*100\"\n\"IF($D$22*COS(RADIANS(75-#REF!))<0,0, $D$22*COS(RADIANS(75-#REF!)))\"\n\"IF($D$22*COS((75+#REF!)*3.14/180)>0,$D$22*COS((75+#REF!)*3.14/180),0)\"\n\"$D$22*COS(RADIANS(60-#REF!))\"\n\"$D$22*COS((60+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(45-#REF!))\"\n\"$D$22*COS((45+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(30-#REF!))\"\n\"$D$22*COS((30+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(15-#REF!))\"\n\"$D$22*COS((15+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(0-#REF!))\"\n\"$D$22*COS((0+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(-15-#REF!))\"\n\"$D$22*COS((-15+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(-30-#REF!))\"\n\"$D$22*COS((-30+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(-45-#REF!))\"\n\"$D$22*COS((-45+#REF!)*3.14/180)\"\n\"$D$22*COS(RADIANS(-60-#REF!))\"\n\"$D$22*COS((-60+#REF!)*3.14/180)\"\n\"IF($D$22*COS(RADIANS(-75-#REF!))>0,$D$22*COS(RADIANS(-75-#REF!)),0)\"\n\"$D$22*COS((-75+#REF!)*3.14/180)\"\n\"IF($E$28*COS(RADIANS(75-G32))<0,0, $E$28*COS(RADIANS(75-G32)))\"\n\"IF($D$22*COS((75+G32)*3.14/180)>0,$D$22*COS((75+G32)*3.14/180),0)\"\n\"$E$28*COS(RADIANS(60-G32))\"\n\"$D$22*COS((60+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(45-G32))\"\n\"$D$22*COS((45+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(30-G32))\"\n\"$D$22*COS((30+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(15-G32))\"\n\"$D$22*COS((15+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(0-G32))\"\n\"$D$22*COS((0+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(-15-G32))\"\n\"$D$22*COS((-15+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(-30-G32))\"\n\"$D$22*COS((-30+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(-45-G32))\"\n\"$D$22*COS((-45+G32)*3.14/180)\"\n\"$E$28*COS(RADIANS(-60-G32))\"\n\"$D$22*COS((-60+G32)*3.14/180)\"\n\"IF($E$28*COS(RADIANS(-75-G32))>0,$E$28*COS(RADIANS(-75-G32)),0)\"\n\"$D$22*COS((-75+G32)*3.14/180)\"\n\"IF(D22=0,56,D22)\"\n\"IF(G9=\"\"autumnal equinox\"\", \"\"J\"\",\"\"K\"\")\"\n\"IF(C16=\"\"summer solstice\"\", \"\"J\"\",\"\"K\"\")\"\n\"IF(K16=\"\"winter solstice\"\", \"\"J\"\",\"\"K\"\")\"\n\"IF(G27=\"\"vernal equinox\"\", \"\"J\"\",\"\"K\"\")\"\n\"SUM(G18:G21)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G22:G25)\"\n\"SUM(G20:G23)\"\n\"SUM(G19:G22)\"\n\"SUM(G20:G23)\"\n\"SUM(G20:G23)\"\n\"SUM(G21:G24)\"\n\"SUM(G23:G26)\"\n\"AVERAGE(D2:D22)\"\n\"AVERAGE(E2:E24)\"\n\"STDEV(D2:D22)\"\n\"STDEV(E2:E24)\"\n\"MEDIAN(D2:D22)\"\n\"MEDIAN(E2:E24)\"\n\"AVERAGE(C2:C20)\"\n\"SUM(E2:E20)\"\n\"AVERAGE(B6:B32)\"\n\"+A5+1\"\n\"SUM(C5*40)/100\"\n\"SUM(C5*40)/100\"\n\"ROUND(C5*720/100,0)\"\n\"SUM(D20*E20)\"\n\"SUM(D19:D36)\"\n\"SUM(E19:E36)\"\n\"SUM(G11:G36)\"\n\"'Enter Grades'!B$2\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$2\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$2\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$2\"\n\"'Enter Grades'!F$2\"\n\"'Enter Grades'!G$2\"\n\"'Enter Absence'!A4\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!$B$3\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$3\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$3\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$3\"\n\"'Enter Grades'!F$3\"\n\"'Enter Grades'!G$3\"\n\"'Enter Absence'!A5\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$4\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$4\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$4\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$4\"\n\"'Enter Grades'!F$4\"\n\"'Enter Grades'!G$4\"\n\"'Enter Absence'!A6\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$5\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$5\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$5\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$5\"\n\"'Enter Grades'!F$5\"\n\"'Enter Grades'!G$5\"\n\"'Enter Absence'!A7\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$6\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$6\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$6\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$6\"\n\"'Enter Grades'!F$6\"\n\"'Enter Grades'!G$6\"\n\"'Enter Absence'!A8\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$7\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$7\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$7\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$7\"\n\"'Enter Grades'!F$7\"\n\"'Enter Grades'!G$7\"\n\"'Enter Absence'!A9\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$8\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$8\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$8\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$8\"\n\"'Enter Grades'!F$8\"\n\"'Enter Grades'!G$8\"\n\"'Enter Absence'!A10\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$9\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$9\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$9\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$9\"\n\"'Enter Grades'!F$9\"\n\"'Enter Grades'!G$9\"\n\"'Enter Absence'!A11\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Grades'!B$10\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$10\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$10\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$10\"\n\"'Enter Grades'!F$10\"\n\"'Enter Grades'!G$10\"\n\"'Enter Absence'!A12\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J10\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!$K10\"\n\"'Enter Absence'!AF12\"\n\"'Enter Grades'!L10\"\n\"'Enter Grades'!B$11\"\n\"C3/B3\"\n\"LOOKUP(D3,'Enter Grades'!N$3:O$106)\"\n\"(H3+H4)\"\n\"'Enter Grades'!C$11\"\n\"(H3+H4)\"\n\"'Enter Grades'!D$11\"\n\"SUM(B3:B5)\"\n\"'Enter Grades'!E$11\"\n\"'Enter Grades'!F$11\"\n\"'Enter Grades'!G$11\"\n\"'Enter Absence'!A13\"\n\"C6+C10+I16\"\n\"'Enter Grades'!J2\"\n\"SUM(I3:I14)/6\"\n\"'Enter Grades'!K2\"\n\"'Enter Absence'!AF4\"\n\"'Enter Grades'!L2\"\n\"'Enter Absence'!A4\"\n\"Anderson!I$16\"\n\"IF(COUNTBLANK(B2:H2)=7,\"\"\"\",SUM(B2:H2))\"\n\"IF(COUNTBLANK(B2:H2)=7,\"\"\"\",I2/98)\"\n\"LOOKUP(J2, N$3:O$106)\"\n\"IF(COUNTBLANK(B2:H2)=7,\"\"\"\",RANK(I2,(I$2:I$11)))\"\n\"Gomez!I16\"\n\"Jordan!I16\"\n\"Lin!I16\"\n\"Lupinski!I16\"\n\"Martin!I16\"\n\"Martinez!I16\"\n\"Stewart!I16\"\n\"Thomas!I$16\"\n\"Whitman!I16\"\n\"SUM(B4:AE4)\"\n\"RANK(AF4,AF$4:AF$12)\"\n\"SUM(#REF!)\"\n\"RANK(A59,AF$4:AF$18)\"\n\"500/16.92\"\n\"E2*C2\"\n\"C2\"\n\"-0.0043*F2^2+3.7742*F2-807.78\"\n\"SUM(Q3:Q19)\"\n\"1000/16.9\"\n\"2*C21\"\n\"500/16.91\"\n\"AVERAGE(F2:F42)\"\n\"MIN(F2:F42)\"\n\"MAX(F2:F42)\"\n\"STDEV(F2:F42)\"\n\"AVERAGE(F48:F55)\"\n\"MIN(F48:F55)\"\n\"MAX(F48:F55)\"\n\"STDEV(F48:F55)\"\n\"500/6.48\"\n\"500/6.45\"\n\"AVERAGE(F61:F63)\"\n\"500/16.9\"\n\"1000/16.85\"\n\"AVERAGE(F75:F81)\"\n\"500/6.5\"\n\"500/6.65\"\n\"1000/6.65\"\n\"1000/6.55\"\n\"1000/6.45\"\n\"500/3.2\"\n\"1000/6.5\"\n\"1000/6.3\"\n\"B121\"\n\"(0.2027*O121+1.2055)*1000\"\n\"AVERAGE(B122:B124)\"\n\"AVERAGE(B125)\"\n\"AVERAGE(B126:B127)\"\n\"AVERAGE(B135:B140)\"\n\"AVERAGE(B144:B153)\"\n\"MAX(V121:V161)\"\n\"AVERAGE(B157:B197)\"\n\"AVERAGE(B198:B205)\"\n\"MIN(B121:B205)\"\n\"D2/1000*527.5\"\n\"212.23*G2+1145.3\"\n\"G2*2027+1205.5\"\n\"I2-H2\"\n\"J2/I2\"\n\"G3*202.7+1205.5\"\n\"J11/1000*527.5/1000\"\n\"J17/1000*527.5\"\n\"2*N34\"\n\"D39*527.5\"\n\"B83*527.5\"\n\"C83*1000\"\n\"B98*527.5/1000\"\n\"1000*C98\"\n\"E134/1000\"\n\"C134/B134\"\n\"MAX(B134:B138)\"\n\"B134/$B$139\"\n\"C134/$C$139\"\n\"B149/$B$154\"\n\"C149/$C$154\"\n\"0.0249*M84^2-2.0087*M84+78.783\"\n\"SUM(C85:C97)\"\n\"C2*157.4\"\n\"B2*7.751*157.4\"\n\"G2/F2\"\n\"(0.2027*A2+1.2055)*1000\"\n\"MIN(I2:I144)\"\n\"MAX(I2:I144)\"\n\"IF(D3+AC3+AI3>0,AVERAGE(D3:AB3)*50%+AVERAGE(AC3:AH3)*30%+AVERAGE(AI3:AR3)*20%+AT3-AU3,\"\"\"\")\"\n\"IF(B3>=89.5,\"\"Passing A\"\",IF(B3>=79.5,\"\"Passing B\"\",IF(B3>=69.5,\"\"Passing C\"\",IF(B3>=59.5,\"\"Passing D\"\",IF(B3<59.5,\"\"Failing\"\",\"\"\"\")))))\"\n\"IF(SUM(B3:B32)>0,AVERAGE(B3:B32),\"\"\"\")\"\n\"IF(E3+AD3+AJ3>0,AVERAGE(E3:AC3)*50%+AVERAGE(AD3:AI3)*30%+AVERAGE(AJ3:AS3)*20%+AU3-AV3,\"\"\"\")\"\n\"(B3+'1st MP'!B3)/2\"\n\"IF(B3>=89.5,\"\"Passing A\"\",IF(B3>=79.5,\"\"Passing B\"\",IF(B3>=69.5,\"\"Passing C\"\",IF(B3>=59.5,\"\"Passing D\"\",IF(B3<59.5,\"\"Failing\"\",\"\"\"\")))))\"\n\"IF(SUM(B3:B32)>0,AVERAGE(B3:B32),\"\"\"\")\"\n\"IF(E3+AD3+AJ3>0,AVERAGE(E3:AC3)*50%+AVERAGE(AD3:AI3)*30%+AVERAGE(AJ3:AS3)*20%+AU3-AV3,\"\"\"\")\"\n\"(B3+'2nd MP'!B3+'1st MP'!B3)/3\"\n\"IF(B3>=89.5,\"\"Passing A\"\",IF(B3>=79.5,\"\"Passing B\"\",IF(B3>=69.5,\"\"Passing C\"\",IF(B3>=59.5,\"\"Passing D\"\",IF(B3<59.5,\"\"Failing\"\",\"\"\"\")))))\"\n\"IF(SUM(B3:B32)>0,AVERAGE(B3:B32),\"\"\"\")\"\n\"IF(E3+AD3+AJ3>0,AVERAGE(E3:AC3)*50%+AVERAGE(AD3:AI3)*30%+AVERAGE(AJ3:AS3)*20%+AU3-AV3,\"\"\"\")\"\n\"(B3+'3rd MP'!B3+'2nd MP'!B3+'1st MP'!B3)/4\"\n\"IF(B3>=89.5,\"\"Passing A\"\",IF(B3>=79.5,\"\"Passing B\"\",IF(B3>=69.5,\"\"Passing C\"\",IF(B3>=59.5,\"\"Passing D\"\",IF(B3<59.5,\"\"Failing\"\",\"\"\"\")))))\"\n\"IF(SUM(B3:B32)>0,AVERAGE(B3:B32),\"\"\"\")\"\n\"'1st MP'!B3\"\n\"'2nd MP'!B3\"\n\"'3rd MP'!B3\"\n\"'3rd MP'!B3\"\n\"AVERAGE(B3:F3)\"\n\"IF(G3>=89.5,\"\"Passing A\"\",IF(G3>=79.5,\"\"Passing B\"\",IF(G3>=69.5,\"\"Passing C\"\",IF(G3>=59.5,\"\"Passing D\"\",IF(G3<59.5,\"\"Failing\"\",\"\"\"\")))))\"\n\"'4th MP'!B33\"\n\"AVERAGE(F3:F32)\"\n\"COUNT(F3:F32)\"\n\"SUM(J6:J40)\"\n\"+J42+J41\"\n\"+A48*A47\"\n\"+K10/1.0717\"\n\"SUM(O10:O30)\"\n\"SUM(B10:B40)\"\n\"IF(ISBLANK(A9),\"\" \"\",+A9)\"\n\"IF(ISBLANK(B9),\"\" \"\",1)\"\n\"IF(ISBLANK(B9),\"\" \"\",+$E$9-B9)\"\n\"IF(ISBLANK(B9),\"\" \"\",+LN(ABS(F9/B9)))\"\n\"IF(ISBLANK(A9),\"\" \"\",$E$9/(1+$C$48*EXP(-$C$46*A9)))\"\n\"IF(ISBLANK(B9),\"\" \"\",+B9-H9)\"\n\"IF(ISBLANK(B9),\"\" \"\",+I9^2)\"\n\"SUM(J9:INDEX(J9:J41,B43))\"\n\"+E9\"\n\"+C48\"\n\"+C46\"\n\"MAX(N29:N51)\"\n\"1.0001*E12\"\n\"IF(ISBLANK(B17),\"\" \"\",B17)\"\n\"MIN(A9:A41)\"\n\"E26\"\n\"$E$9/(1+$C$48*EXP(-$C$46*K26))\"\n\"ABS(E9)\"\n\"K26+$E$33\"\n\"MAX(A9:A41)\"\n\"ABS(B9:B41)\"\n\"(E29-E26)/20\"\n\"COUNT(B9:B41)\"\n\"MMULT(MINVERSE(MMULT(TRANSPOSE(C9:INDEX(D9:D41,B43)),C9:INDEX(D9:D41,B43))),MMULT(TRANSPOSE(C9:INDEX(D9:D41,B43)),G9:INDEX(G9:G41,B43)))\"\n\"-D43\"\n\"+D44\"\n\"EXP(C47)\"\n\"E9\"\n\"C11\"\n\"G11\"\n\"$C$17+H11\"\n\"C11^2\"\n\"$E$8\"\n\"$D$17\"\n\"(F11-D11)/(E11-C11)\"\n\"-H6\"\n\"+C12^2\"\n\"H11*0.1\"\n\"E8\"\n\"H19*0.1\"\n\"H6\"\n\"(C8-A8)/50\"\n\"A8\"\n\"A13^3-9*A13^2+24*A13\"\n\"A13\"\n\"G67\"\n\"A13+$E$8\"\n\"A13-0.0001\"\n\"(B13-B67)/0.0001\"\n\"A13+0.0001\"\n\"(E67-B13)/0.0001\"\n\"(C67+F67)/2\"\n\"(G68-G67)/$E$8\"\n\"(G117-G116)/$E$8\"\n\"(D23-B23)/50\"\n\"B23\"\n\"B27+$I23\"\n\"D24\"\n\"-93.1+0.26*B$27+0.146*$A28-0.0000944*B$27^2+0.000041*B$27*$A28-0.00196*$A28^2\"\n\"A28-I$24\"\n\"2+0*A$23+0*$E19+A$23^2+0*A$23*$E19-$E19^2\"\n\"+$D$13+$D$14\"\n\"+A19-$B$20\"\n\"+$D$13\"\n\"+$D$13-$D$14\"\n\"+$C$13-$C$14\"\n\"+$C$13\"\n\"+$C$13+$C$14\"\n\"-93.1+0.26*G14+0.146*H14-0.0000944*G14^2+0.000041*G14*H14-0.00196*H14^2\"\n\"+C14-C$14\"\n\"+G$14+2*G$12*RAND()-G$12\"\n\"EXP(0.05)-1\"\n\"B7/(1+$F$6)^A7\"\n\"SUM(C6:C16)\"\n\"2.3*A8-1\"\n\"B8-C8\"\n\"D8^2\"\n\"B8-$B$16\"\n\"C8-$B$16\"\n\"AVERAGE(B8:B15)\"\n\"SUM(E8:E15)\"\n\"I16/G16\"\n\"(B10-B9)/B9*100\"\n\"C10-C$20\"\n\"D10^2\"\n\"SUM(E10:E18)\"\n\"AVERAGE(C10:C18)\"\n\"COUNT(C10:C18)\"\n\"E19/($C22-1)\"\n\"SQRT(E22)\"\n\"IF(ISBLANK(A8),\"\" \"\",+A8)\"\n\"IF(ISBLANK(B8),\"\" \"\",1)\"\n\"IF(ISBLANK(A8),\"\" \"\",$J$8/(1+$K$8*EXP(-$L$8*A8)))\"\n\"IF(ISBLANK(B8),\"\" \"\",+B8-F8)\"\n\"IF(ISBLANK(B8),\"\" \"\",+G8^2)\"\n\"SUM($H$8:INDEX($H$8:$H$40,$B$42))\"\n\"IF(ISBLANK(B16),\"\" \"\",B16)\"\n\"MIN(A7:A40)\"\n\"E25\"\n\"$J$8/(1+$K$8*EXP(-$L$8*I25))\"\n\"I25+$E$32\"\n\"MAX(A7:A40)\"\n\"(E28-E25)/20\"\n\"COUNT(B8:B40)\"\n\"24*G14+39*H14\"\n\"+C14-C$14\"\n\"G14+7*H14\"\n\"150*G14+210*H14\"\n\"6*G14+4*H14\"\n\"+G$14+2*G$12*RAND()-G$12\"\n\"24*G14+39*H14\"\n\"+C14-C$14\"\n\"(9-6*G14)/4\"\n\"G14+7*H14\"\n\"150*G14+210*H14\"\n\"6*G14+4*H14\"\n\"G14*H14*I14\"\n\"+C14-C$14\"\n\"G14+H14+I14\"\n\"+K$14+2*K$12*RAND()-K$12\"\n\"AVERAGE(B5:B15)\"\n\"AVERAGE(B18:B29)\"\n\"AVERAGE(B31:B39)\"\n\"AVERAGE(B42:B51)\"\n\"AVERAGE(B149:B153)\"\n\"AVERAGE(B156:B158)\"\n\"AVERAGE(B187:B199)\"\n\"AVERAGE(B261:B268)\"\n\"AVERAGE(B271:B276)\"\n\"AVERAGE(B357:B360)\"\n\"AVERAGE(B396:B397)\"\n\"AVERAGE(B406:B407)\"\n\"AVERAGE(B451:B451)\"\n\"AVERAGE(B5:B14)\"\n\"AVERAGE(B17:B27)\"\n\"AVERAGE(B30:B37)\"\n\"AVERAGE(B39:B44)\"\n\"AVERAGE(B55:B61)\"\n\"AVERAGE(B75:B83)\"\n\"AVERAGE(B104:B108)\"\n\"AVERAGE(B123:B126)\"\n\"AVERAGE(B197:B208)\"\n\"AVERAGE(B354:B356)\"\n\"AVERAGE(B369:B370)\"\n\"3+A46\"\n\"+A7+1\"\n\"1+F7\"\n\"A11+3\"\n\"3+A16\"\n\"F37+1\"\n\"SUM(K4:M4)\"\n\"AC4\"\n\"CK4\"\n\"IF(BH4<120, BH4, 120)\"\n\"SUM(C4:H4)\"\n\"SUM(O4:AB4)\"\n\"SUM(AE4:BG4)\"\n\"SUM(BJ4:CJ4)\"\n\"AVERAGE(D4:D51)\"\n\"SUM(K4:M4)\"\n\"AD4\"\n\"CM4\"\n\"IF(BJ4<120, BJ4,120)\"\n\"SUM(C4:H4)\"\n\"SUM(O4:AC4)\"\n\"SUM(AG4:BI4)\"\n\"SUM(BL4:CL4)\"\n\"AVERAGE(D4:D46)\"\n\"F$2*EXP(G$2*I2)\"\n\"5+I2\"\n\"100+I7\"\n\"A2-1650\"\n\"J2-1980\"\n\"G$2*EXP(H$2*J2)\"\n\"G$3*EXP(H$3*K2)\"\n\"5+J2\"\n\"100+J7\"\n\"S12+5\"\n\"S13+100\"\n\"50+J14\"\n\"1+J15\"\n\"C3-C2\"\n\"S30+10\"\n\"S33+1\"\n\"IF(E17=\"\"\"\",\"\"\"\",F16/E17)\"\n\"IF(J12=\"\"\"\",\"\"\"\",J12)\"\n\"IF(I17=\"\"\"\",\"\"\"\",I17*E18)\"\n\"IF(J12=\"\"\"\",\"\"\"\",J12+G18)\"\n\"IF(B30=\"\"\"\",\"\"\"\",2000+(5*B30))\"\n\"IF(B30=\"\"\"\",\"\"\"\",2000+(7*B30))\"\n\"IF(B31=\"\"\"\",\"\"\"\",6000+(2*B31))\"\n\"IF(B31=\"\"\"\",\"\"\"\",6000+(3*B31))\"\n\"IF(B32=\"\"\"\",\"\"\"\",10000+(1.75*B32))\"\n\"IF(B32=\"\"\"\",\"\"\"\",10000+(2.75*B32))\"\n\"IF(B33=\"\"\"\",\"\"\"\",18000+(1.25*B33))\"\n\"IF(B33=\"\"\"\",\"\"\"\",18000+(2.5*B33))\"\n\"IF(B34=\"\"\"\",\"\"\"\",35000+(0.6*B34))\"\n\"IF(B34=\"\"\"\",\"\"\"\",35000+(2*B34))\"\n\"IF(B35=\"\"\"\",\"\"\"\",45000+(0.6*B35))\"\n\"IF(B36=\"\"\"\",\"\"\"\",70000+(0.5*B36))\"\n\"IF(B36=\"\"\"\",\"\"\"\",70000+(2*B36))\"\n\"IF(B37=\"\"\"\",\"\"\"\",110000+(0.5*B37))\"\n\"IF(B37=\"\"\"\",\"\"\"\",110000+(2*B37))\"\n\"IF(B38=\"\"\"\",\"\"\"\",150000+(0.4*B38))\"\n\"IF(B38=\"\"\"\",\"\"\"\",150000+(1.75*B38))\"\n\"IF(B39=\"\"\"\",\"\"\"\",220000+(0.4*B39))\"\n\"IF(B39=\"\"\"\",\"\"\"\",220000+(1.75*B39))\"\n\"IF(E45=\"\"\"\",\"\"\"\",E45*20)\"\n\"IF(F46=\"\"\"\",\"\"\"\",H45+F46)\"\n\"IF(I59=\"\"\"\",\"\"\"\",I59)\"\n\"IF(F64=\"\"\"\",\"\"\"\",0.1*F64)\"\n\"IF(B80=\"\"\"\",\"\"\"\",15+15)\"\n\"IF(B80=\"\"\"\",\"\"\"\",15+30)\"\n\"IF(B81=\"\"\"\",\"\"\"\",20+(B81/1000*15))\"\n\"IF(B81=\"\"\"\",\"\"\"\",20+(B81/1000*20))\"\n\"IF(B82=\"\"\"\",\"\"\"\",30+(B82/1000*15))\"\n\"IF(B82=\"\"\"\",\"\"\"\",30+(B82/1000*20))\"\n\"IF(B83=\"\"\"\",\"\"\"\",45+(B83/1000*10))\"\n\"IF(B83=\"\"\"\",\"\"\"\",45+(B83/1000*15))\"\n\"IF(B84=\"\"\"\",\"\"\"\",60+(B84/1000*8))\"\n\"IF(B84=\"\"\"\",\"\"\"\",60+(B84/1000*12))\"\n\"IF(B85=\"\"\"\",\"\"\"\",120+(B85/1000*8))\"\n\"IF(B85=\"\"\"\",\"\"\"\",120+(B85/1000*12))\"\n\"IF(B86=\"\"\"\",\"\"\"\",180+(B86/1000*6))\"\n\"IF(B86=\"\"\"\",\"\"\"\",180+(B86/1000*8))\"\n\"IF(B87=\"\"\"\",\"\"\"\",250+(B87/1000*4))\"\n\"IF(B87=\"\"\"\",\"\"\"\",250+(B87/1000*6))\"\n\"IF(B88=\"\"\"\",\"\"\"\",450+(B88/1000*3))\"\n\"IF(B88=\"\"\"\",\"\"\"\",450+(B88/1000*5))\"\n\"IF(B89=\"\"\"\",\"\"\"\",600+(B89/1000*2))\"\n\"IF(B89=\"\"\"\",\"\"\"\",600+(B89/1000*4))\"\n\"IF(J93=\"\"\"\",\"\"\"\",J93-J94)\"\n\"IF(I59=\"\"\"\",\"\"\"\",I59)\"\n\"IF(D102=\"\"\"\",\"\"\"\",D102/10)\"\n\"IF(D103=\"\"\"\",\"\"\"\",D103/25)\"\n\"IF(I69=\"\"\"\",\"\"\"\",I69)\"\n\"IF(J95=\"\"\"\",\"\"\"\",J95)\"\n\"IF(E108=\"\"\"\",\"\"\"\",E108/1.5)\"\n\"IF(I97=\"\"\"\",\"\"\"\",I97)\"\n\"IF(E111=\"\"\"\",\"\"\"\",E111*0.5*C112)\"\n\"IF(H102=\"\"\"\",\"\"\"\",SUM(H102:H112))\"\n\"IF(E118=\"\"\"\",\"\"\"\",E118*30)\"\n\"IF(E120=\"\"\"\",\"\"\"\",E120*45)\"\n\"IF(E123=\"\"\"\",\"\"\"\",E123*35)\"\n\"IF(H118=\"\"\"\",\"\"\"\",SUM(H118:H124))\"\n\"IF(B156=\"\"\"\",\"\"\"\",10)\"\n\"IF(B156=\"\"\"\",\"\"\"\",8)\"\n\"IF(B156=\"\"\"\",\"\"\"\",7)\"\n\"IF(B157=\"\"\"\",\"\"\"\",B157/1000*10)\"\n\"IF(B157=\"\"\"\",\"\"\"\",B157/1000*8)\"\n\"IF(B157=\"\"\"\",\"\"\"\",B157/1000*7)\"\n\"IF(B158=\"\"\"\",\"\"\"\",B158/1000*5)\"\n\"IF(E120=\"\"\"\",\"\"\"\",E120)\"\n\"IF(B160=\"\"\"\",\"\"\"\",B160-F160-C161)\"\n\"IF(I161=\"\"\"\",\"\"\"\",I161)\"\n\"IF(D163=\"\"\"\",\"\"\"\",D163*30)\"\n\"IF(C175=\"\"\"\",\"\"\"\",C175*150)\"\n\"IF(E181=\"\"\"\",\"\"\"\",E181*10)\"\n\"IF(E183=\"\"\"\",\"\"\"\",E183*25)\"\n\"IF(SUM(H181:H189)>0,(SUM(H181:H189)),\"\"\"\")\"\n\"IF(F198=\"\"\"\",\"\"\"\",F198*I198)\"\n\"SUM(J198:J213)\"\n\"B218*D218\"\n\"IF(E223=\"\"\"\",\"\"\"\",E223/H223)\"\n\"SUM(I223:I225)\"\n\"SUM(I233:I239)\"\n\"SUM(J215+I218+I226+I240)\"\n\"H114\"\n\"H126\"\n\"H163\"\n\"H175\"\n\"H192\"\n\"H242\"\n\"IF(H246=\"\"\"\",\"\"\"\",SUM(H246:H251))\"\n\"IF(H253=\"\"\"\",\"\"\"\",H253/4)\"\n\"H114\"\n\"H126\"\n\"H163\"\n\"H175\"\n\"H192\"\n\"H242\"\n\"H255\"\n\"IF(B11=\"\"X\"\",C11,IF(B12=\"\"X\"\",C12,IF(B13=\"\"X\"\",C13,IF(B14=\"\"x\"\",C14,IF(B15=\"\"x\"\",C15,M10)))))\"\n\"(\"\"(\"\"&I23&\"\")\"\")\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"SUM(J15:J19)\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"SUM(J22:J32)\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"SUM(I22:I31)\"\n\"G54-H54\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"G23-H23\"\n\"SUM(I23:I32)\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19&\"\" - \"\"&'Bat Cover'!$M$11\"\n\"'Bat Cover'!$E$23\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"'Bat Cover'!$C$19\"\n\"'Bat Cover'!$M$11\"\n\"'Bat Cover'!$I$52\"\n\"NOW()\"\n\"MID(A2,FIND(\"\" \"\",A2)+1,99)\"\n\"+C4*B4\"\n\"SUM(C4:C24)\"\n\"+C25+H25\"\n\"+D25+I25\"\n\"+H27*7\"\n\"SUM(H33:H38)\"\n\"+C42+H39\"\n\"+D42+I39\"\n\"SUM(C33:C41)\"\n\"+G47*H47\"\n\"SUM(H47:H57)\"\n\"+C59+H58\"\n\"+D59+I58\"\n\"SUM(C66:C72)\"\n\"+H73+C73\"\n\"+I73+D73\"\n\"SUM(H82:H86)\"\n\"+H87+C89\"\n\"+D89+I87\"\n\"SUM(H109:H116)\"\n\"+H117+C120\"\n\"+I117+D120\"\n\"SUM(H125:H138)\"\n\"+C141+H139\"\n\"SUM(C125:C140)\"\n\"+I139+D141\"\n\"SUM(C160:C174)\"\n\"+I26+I40+I59+I74+I88+I102+I118+I140+I153+I176+I191+C208\"\n\"+I26+I40+I59+I74+I88+I102+I118+I140+I153+I176+I191+C208\"\n\"+H27+H41+H60+H75+H89+H103+H119+H141+H154+H177+H192\"\n\"+H27+H41+H60+H75+H89+H103+H119+H141+H154+H177+H192\"\n\"+H196*7\"\n\"+H197*0.45\"\n\"+H197*0.45\"\n\"+H197+H198\"\n\"+H197+H198\"\n\"+D210\"\n\"+D210\"\n\"+H199-H200\"\n\"+H201*0.1\"\n\"+I201\"\n\"+H204-H203\"\n\"SUM(C195:C207)\"\n\"+D208*40\"\n\"+C208\"\n\"+C4*B4\"\n\"SUM(C4:C23)\"\n\"SUM(H4:H24)\"\n\"+C24+H25\"\n\"+D24+I25\"\n\"+H27*7\"\n\"SUM(H33:H38)\"\n\"SUM(C33:C39)\"\n\"+C40+H39\"\n\"+D40+I39\"\n\"+G47*H47\"\n\"SUM(H47:H57)\"\n\"+H73+C73\"\n\"+I73+D73\"\n\"SUM(H82:H86)\"\n\"+H87+C89\"\n\"+D89+I87\"\n\"SUM(D109:D116)\"\n\"+H117+C120\"\n\"+I117+D120\"\n\"SUM(H125:H138)\"\n\"+C141+H139\"\n\"SUM(C125:C140)\"\n\"+I139+D141\"\n\"+D155+I152\"\n\"SUM(C160:C174)\"\n\"+D190+I190\"\n\"+I26+I40+I59+I74+I88+I102+I118+I140+I153+I176+I191+IC207+D229\"\n\"+I26+I40+I59+I74+I88+I102+I118+I140+I153+I176+I191+D229+C207\"\n\"+H27+H41+H60+H75+H89+H103+H119+H141+H154+H177+H192+D207+D225\"\n\"+H27+H41+H60+H75+H89+H103+H119+H141+H154+H177+H192+D207+D225\"\n\"+H197*7\"\n\"+H197*7\"\n\"+D227\"\n\"+D227\"\n\"+H199-H200\"\n\"+H201*0.1\"\n\"+H204-H203\"\n\"SUM(C198:C206)\"\n\"SUM(C212:C224)\"\n\"+D225*40\"\n\"+C225\"\n\"SUM(D16:D26)\"\n\"SUM(I16:I30)\"\n\"SUM(I12-D32+I32)\"\n\"SUM(I35,I37,I38,I39,I40,I41)\"\n\"IF(I45=\"\"\"\",\"\"no % in Box K\"\",IF(I45>1,\"\"Error: invalid % in Box K\"\",IF(I45<0,\"\"Error: invalid % in Box K\"\",I45*I43)))\"\n\"SUM(D14:D24)\"\n\"SUM(D30:D44)\"\n\"SUM(D11-D26+D46)\"\n\"IF('WS1'!I45=\"\"\"\",\"\"Invalid % in Box K WS1\"\",IF('WS1'!I45>1,\"\"Invalid % in Box K WS1\"\",IF('WS1'!I45<0,\"\"Invalid % in Box K WS1\"\",'WS1'!I45)))\"\n\"IF('WS1'!I45=\"\"\"\",\"\"Invalid % in Box K WS1\"\",IF('WS1'!I45>1,\"\"Invalid % in Box K WS1\"\",IF('WS1'!I45<0,\"\"Invalid % in Box K WS1\"\",'WS1'!I45)))\"\n\"IF($D$52=\"\"Invalid % in Box K WS1\"\",\"\"\"\",SUM(D49*$D$52))\"\n\"IF($D$52=\"\"Invalid % in Box K WS1\"\",\"\"\"\",SUM(D49*$D$52))\"\n\"'WS2'!D55\"\n\"SUM(C9,E9,G9)\"\n\"'WS2'!F55\"\n\"'WS2'!H55\"\n\"'WS2'!J55\"\n\"'WS2'!L55\"\n\"SUM(I12:I14)\"\n\"SUM(I9:I14)-MINA(I9:I14)-MAXA(I9:I14)\"\n\"MAXA(I16,I18)/3\"\n\"'WS1'!I48\"\n\"SUM(I20)\"\n\"SUM(I33*70%)\"\n\"SUM(I27)\"\n\"IF((SUM(I39,I41)<0), 0, SUM(I39,I41))\"\n\"IF((SUM(I37-I43)<0), 0, SUM(I37-I43))\"\n\"SUM('WS3'!I45)\"\n\"SUM(C7*60%)\"\n\"SUM(C11-C13)\"\n\"MINA(C9,C15)\"\n\"SUM('WS3'!I45)\"\n\"SUM(C22*40%)\"\n\"IF('WS1'!M8<3, 40000, 70000)\"\n\"SUM(C17,C32)\"\n\"SUM('WS3'!I45)\"\n\"SUM(F7*60%)\"\n\"IF(B17=\"\"\"\",\"\"\"\",IF(B17<0.1,\"\"ineligible (< 10%)\"\",IF(B17>1,\"\"invalid % in (a)\"\",B17*$F$9)))\"\n\"IF(A17=\"\"\"\",\"\"\"\",SUM(105000-D17))\"\n\"MINA(C17,E17)\"\n\"IF(SUM(F17:F26)>F9,\"\"Shares over 100%\"\",IF(SUM(B17:B26)>1,\"\"Shares over 100%\"\",SUM(F17:F26)))\"\n\"IF(COUNTIF(B17:B26,\"\">=.0\"\")>=5, 5, COUNTIF(B17:B26,\"\">=.0\"\"))\"\n\"SUM(C31*F29)\"\n\"MINA(F27,F31)\"\n\"SUM('WS3'!I45)\"\n\"SUM(G7*40%)\"\n\"IF(WS5A!A17=\"\"\"\",\"\"\"\",WS5A!A17)\"\n\"IF(B17=\"\"\"\",\"\"\"\",IF(B17<0.1,\"\"ineligible (<10%)\"\",IF(B17>1,\"\"invalid % in (a)\"\",B17*$G$9)))\"\n\"IF(A17=\"\"\"\",\"\"\"\",IF('WS1'!$M$8<3,40000,70000))\"\n\"IF(E17=\"\"\"\",\"\"\"\",SUM(E17-D17))\"\n\"IF(MINA(C17,F17)<0,0,MINA(C17,F17))\"\n\"IF(SUM(G17:G26)>G9,\"\"Shares over 100%\"\",IF(SUM(B17:B26)>1,\"\"Shares over 100%\"\",SUM(G17:G26)))\"\n\"IF('WS1'!M8<3, 40000, 70000)\"\n\"SUM(WS5A!C31)\"\n\"SUM(G29*C31)\"\n\"MINA(G27,G31)\"\n\"SUM(WS5A!F33+G33)\"\n\"SUM('WS3'!I45)\"\n\"SUM(E7*60%)\"\n\"IF(E11<1,\"\"\"\",SUM(E9/E11))\"\n\"IF(A21=\"\"\"\",\"\"\"\",$E$13)\"\n\"IF(A21=\"\"\"\",\"\"\"\",SUM(105000-C21))\"\n\"IF(MINA(B21,D21)<0,0,MINA(B21,D21))\"\n\"IF(SUM(B21:B30)>E13*E11,\"\"ERROR! listed members exceed # entered on Line J1\"\",SUM(E21:E30))\"\n\"IF(COUNTIF(B21:B30,\"\">=.0\"\")>=5, 5, COUNTIF(B21:B30,\"\">=.0\"\"))\"\n\"SUM(B35*E33)\"\n\"MINA(E31,E35)\"\n\"SUM('WS3'!I45)\"\n\"SUM(F7*40%)\"\n\"WS6a!E11\"\n\"IF(F11<1,\"\"\"\",SUM(F9/F11))\"\n\"IF(WS6a!A21=\"\"\"\",\"\"\"\",WS6a!A21)\"\n\"IF(A21=\"\"\"\",\"\"\"\",$F$13)\"\n\"IF(A21=\"\"\"\",\"\"\"\",IF('WS1'!$M$8<3,40000,70000))\"\n\"IF(D21=\"\"\"\",\"\"\"\",SUM(D21-C21))\"\n\"IF(MINA(B21,E21)<0,0,MINA(B21,E21))\"\n\"IF(SUM(B21:B30)>F13*F11,\"\"ERROR! listed members exceed # entered on Line J2\"\",SUM(F21:F30))\"\n\"IF('WS1'!M8<3, 40000, 70000)\"\n\"SUM(C35*F33)\"\n\"MINA(F31,F35)\"\n\"SUM(F37+WS6a!E37)\"\n\"SUM(C4:C39)\"\n\"SUM(E6:E9)\"\n\"SUM(E13:E17)\"\n\"E10+E18\"\n\"SUM(E24:E25)\"\n\"SUM(E29:E31)\"\n\"E26+E32\"\n\"F20-E34\"\n\"E36+E34\"\n\"'bal #1'!$E$8\"\n\"B10+B11-B12\"\n\"C13/$D$5\"\n\"SUM(C13:C20)\"\n\"SUM(C24:C32)\"\n\"C21+C33\"\n\"D35/$D$5\"\n\"D5-D35\"\n\"'bal #1'!$E$6\"\n\"'Inc. State. 1'!$D$37\"\n\"'Inc. State. 1'!$C$31\"\n\"SUM(B5:B8)\"\n\"D9\"\n\"B9-B10\"\n\"'CASH FLOW'!$B$11\"\n\"'Inc. State. 1'!$B$12\"\n\"SUM(E6:E9)\"\n\"'bal #1'!$E$13\"\n\"'bal #1'!$E$14\"\n\"-'Inc. State. 1'!$C$31\"\n\"'bal #1'!$E$16\"\n\"SUM(E13:E17)\"\n\"E10+E18\"\n\"SUM(E24:E25)\"\n\"SUM(E29:E31)\"\n\"E26+E32\"\n\"F20-E34\"\n\"E36+E34\"\n\"'Bal 2'!$E$8\"\n\"B10+B11-B12\"\n\"C13/$D$5\"\n\"SUM(C13:C20)\"\n\"SUM(C24:C32)\"\n\"C21+C33\"\n\"D35/$D$5\"\n\"D5-D35\"\n\"'Bal 2'!$E$6\"\n\"'Inc. State. 2'!$D$37\"\n\"'Inc. State. 2'!$C$31\"\n\"SUM(B5:B8)\"\n\"D10\"\n\"SUM(D5:D9)\"\n\"B9-B10\"\n\"'CASH FLOW (2)'!$B$11\"\n\"'Inc. State. 2'!$B$12\"\n\"SUM(E6:E9)\"\n\"'Bal 2'!$E$13:$E$14\"\n\"-'Inc. State. 1'!$C$31-'Inc. State. 2'!$C$31\"\n\"'Bal 2'!$E$16\"\n\"SUM(E13:E17)\"\n\"E10+E18\"\n\"SUM(E24:E25)\"\n\"SUM(E29:E31)\"\n\"E26+E32\"\n\"F20-E34\"\n\"E36+E34\"\n\"'Bal #3'!$E$8\"\n\"B10+B11-B12\"\n\"C13/$D$5\"\n\"SUM(C13:C20)\"\n\"SUM(C24:C32)\"\n\"C21+C33\"\n\"D35/$D$5\"\n\"D5-D35\"\n\"'Bal #3'!$E$6\"\n\"'Inc. State. 3'!$D$37\"\n\"'Inc. State. 3'!$C$31\"\n\"SUM(B5:B8)\"\n\"D10\"\n\"SUM(D5:D9)\"\n\"B9-B10\"\n\"'CASH FLOW (3)'!$B$11\"\n\"'Inc. State. 3'!$B$12\"\n\"SUM(E6:E9)\"\n\"91000-8070\"\n\"-'Inc. State. 1'!$C$31-'Inc. State. 2'!$C$31-'Inc. State. 3'!$C$31\"\n\"SUM(E13:E17)\"\n\"E10+E18\"\n\"SUM(E24:E25)\"\n\"SUM(E29:E31)\"\n\"E26+E32\"\n\"F20-E34\"\n\"E36+E34\"\n\"L2\"\n\"L3-N3\"\n\"L3\"\n\"SUM(L2:L6)\"\n\"'Expense Summary'!F2\"\n\"0.15*Q7\"\n\"SUM(T7:X7)\"\n\"28264\"\n\"N9\"\n\"22000-3000\"\n\"L14-N14\"\n\"SUM(L8:L29)\"\n\"'Expense Summary'!$F$3\"\n\"L31\"\n\"L33\"\n\"L34-N34\"\n\"L44-X44\"\n\"SUM(L31:L81)\"\n\"'Expense Summary'!F4\"\n\"SUM(L83:L88)\"\n\"'Expense Summary'!$F$5\"\n\"L99\"\n\"SUM(L90:L107)\"\n\"'Expense Summary'!$F$6\"\n\"SUM(L109:L111)\"\n\"'Expense Summary'!$F$7\"\n\"2958.98+(8745/5)+468+695\"\n\"L114\"\n\"8745/5\"\n\"2793+2436+2995+495+5164+15522+3*1749\"\n\"L123-N123\"\n\"SUM(Q121:Q135)\"\n\"5500+2175+840\"\n\"SUM(L137:L149)\"\n\"'Expense Summary'!$F$9\"\n\"L7+L30+L82+L89+L108+L112+L136+L150\"\n\"L114-2000+L122+L124\"\n\"L119+L123+L125+L126-4500+L127-4500+L128+L129+L131+L132-7000\"\n\"L134+L135\"\n\"L133\"\n\"Q136-29000\"\n\"SUM(E2:E4)\"\n\"SUM(E7:E10)\"\n\"SUM(E13:E18)\"\n\"SUM(E24:E28)\"\n\"E41/4\"\n\"SUM(E38:E44)\"\n\"SUM(E48:E59)\"\n\"E45+E60\"\n\"SUM(E65:E66)\"\n\"Detail!L7\"\n\"Detail!N7\"\n\"Detail!Q7\"\n\"'Pre-1999'!E29\"\n\"Detail!L30\"\n\"Detail!N30\"\n\"Detail!Q30\"\n\"'Pre-1999'!$E$5\"\n\"Detail!L82\"\n\"Detail!N82\"\n\"Detail!Q82\"\n\"'Pre-1999'!$E$61\"\n\"Detail!L89\"\n\"Detail!N89+G5\"\n\"Detail!Q89\"\n\"'Pre-1999'!$E$34\"\n\"Detail!L108\"\n\"Detail!N108\"\n\"Detail!Q108\"\n\"'Pre-1999'!$E$19+450000\"\n\"Detail!L112\"\n\"Detail!N112\"\n\"Detail!Q112\"\n\"'Pre-1999'!$E$36\"\n\"Detail!L136\"\n\"Detail!N136+G8\"\n\"Detail!Q136\"\n\"'Pre-1999'!$E$11\"\n\"Detail!L150\"\n\"Detail!N150\"\n\"Detail!Q150\"\n\"'Pre-1999'!$E$21+74000\"\n\"SUM(B2:B9)\"\n\"D5+E5\"\n\"H5/21.75/8\"\n\"580/22\"\n\"13800/11/22\"\n\"16843/11/22\"\n\"48/22\"\n\"15866/11/22\"\n\"SUM(D24:D29)\"\n\"SUM(B6:B21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+E24\"\n\"SUM(B6:B21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+E24\"\n\"SUM(B5:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+E23\"\n\"SUM(B5:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+E23\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+E23\"\n\"SUM(B5:B20)\"\n\"SUM(C6:C20)\"\n\"B22/60*B21\"\n\"B23+D23+E23\"\n\"SUM(B6:B22)\"\n\"SUM(C6:C21)\"\n\"B24/60*B23\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+D23+E23\"\n\"SUM(B6:B21)\"\n\"B23/60*B22\"\n\"B24+D24\"\n\"SUM(B7:B21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+E24\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+D23\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+E24\"\n\"SUM(B7:B21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+E24\"\n\"SUM(B6:B21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+E24\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+E23\"\n\"SUM(B7:B21)\"\n\"B23/60*B22\"\n\"B24+D24+E24+F24\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+F23\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+F23\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+F24\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+F24\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+F24\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+F24\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+C24+D24+F24\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+F23\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+F23\"\n\"SUM(B31:B47)\"\n\"SUM(C32:C47)\"\n\"SUM(B6:B20)\"\n\"B22/60*B21\"\n\"B23+C23+D23+E23\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+D24+E24+G24\"\n\"SUM(B6:B21)\"\n\"SUM(C7:C21)\"\n\"B23/60*B22\"\n\"B24+D24+E24+G24\"\n\"SUM(B8:B23)\"\n\"SUM(C8:C22)\"\n\"B25/60*B24\"\n\"B26+D26+E26+F26\"\n\"TODAY()\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"TODAY()\"\n\"IF(NOT(ISBLANK($B7)),IF(NOT(ISBLANK(VLOOKUP($B7,$B$38:$AP$44,E$37))),VLOOKUP($B7,$B$38:$AP$44,E$37),\"\"\"\"),\"\"\"\")\"\n\"B37+1\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"TODAY()\"\n\"IF('I. HCC Unit'!B9<>0,'I. HCC Unit'!B9,\"\" \"\")\"\n\"'I. HCC Unit'!B5\"\n\"'I. HCC Unit'!B5\"\n\"TODAY()\"\n\"IF('I. HCC Unit'!B24<>0,'I. HCC Unit'!B24,\"\" \"\")\"\n\"EntryForm!$O$5\"\n\"EntryForm!$O$6\"\n\"EntryForm!$O$7\"\n\"EntryForm!$O$8\"\n\"EntryForm!$O$9\"\n\"EntryForm!$O$10\"\n\"EntryForm!$O$11\"\n\"EntryForm!$O$12\"\n\"EntryForm!$O$13\"\n\"EntryForm!$O$14\"\n\"EntryForm!$O$15\"\n\"EntryForm!$O$16\"\n\"EntryForm!$O$17\"\n\"Instructions!A1\"\n\"B5\"\n\"B12-1\"\n\"B14-B15\"\n\"B17+B19-B20\"\n\"B22-B24+B26+B28+B30\"\n\"B32-B34\"\n\"B36+B38\"\n\"B40+SUM(B43:B49)\"\n\"B5\"\n\"B60-B61\"\n\"SUM(B57:B59)+SUM(B62:B66)\"\n\"SUM(B68:B75)\"\n\"B67+B76\"\n\"SUM(B80:B83)\"\n\"SUM(B97:B98)\"\n\"B95+B100\"\n\"B5\"\n\"Instructions!A1\"\n\"Input!B3\"\n\"Instructions!A1\"\n\"Input!B3\"\n\"B12-1\"\n\"Input!B14/Input!B$14\"\n\"Input!B58/Input!B$77\"\n\"Instructions!A1\"\n\"Input!B3\"\n\"B12-1\"\n\"Input!B14/$I14\"\n\"IF($B$7=5,Input!F14,IF($B$7=4,Input!E14,IF($B$7=3,Input!D14,IF($B$7=2,Input!C14,IF($B$7=1,Input!B14,NA())))))\"\n\"IF(H14=0,NA(),H14)\"\n\"IF($B$8=5,Input!F58,IF($B$8=4,Input!E58,IF($B$8=3,Input!D58,IF($B$8=2,Input!C58,IF($B$8=1,Input!B58,NA())))))\"\n\"Instructions!A1\"\n\"Input!B3\"\n\"MIN(B7:B8)\"\n\"MIN(B7,B8-1)\"\n\"MAX(B7:B8)\"\n\"B$5\"\n\"B15-1\"\n\"Input!B60*365/Input!B14\"\n\"Input!B14/((Input!B60+Input!C60)/2)\"\n\"365/B18\"\n\"NA()\"\n\"Input!B63*365/Input!B15\"\n\"Input!B15/((Input!B63+Input!C63)/2)\"\n\"B19+B23\"\n\"Input!B67-Input!B85\"\n\"Input!B67/Input!B85\"\n\"(Input!B58+Input!B59+Input!B62)/Input!B85\"\n\"(Input!B58+Input!B59)/Input!B85\"\n\"Input!B14/((B26+C26)/2)\"\n\"IF(Input!B118<0,NA(),Input!B118/(Input!B81+Input!B82))\"\n\"IF(Input!B32+Input!B24-Input!B30<0,NA(),(Input!B32+Input!B24-Input!B30)/(Input!B24+Input!B106))\"\n\"IF(Input!B32+Input!B24-Input!B30+Input!B107<0,NA(),(Input!B32+Input!B24-Input!B30+Input!B107)/(Input!B24+Input!B106+Input!B107))\"\n\"Input!B95/Input!B77\"\n\"Input!B95/Input!B100\"\n\"Input!B95/(Input!B100-Input!B71)\"\n\"IF(Input!B118<0,NA(),Input!B118/Input!B95)\"\n\"IF(Input!B36-Input!B30<0,NA(),(Input!B36-Input!B30)/Input!B14)\"\n\"Input!B14/((Input!B77+Input!C77)/2)\"\n\"IF(Input!B36<0,NA(),Input!B36/((Input!B77+Input!C77)/2))\"\n\"IF(Input!B22<0,NA(),Input!B22/Input!B14)\"\n\"Input!B14/((Input!B77+Input!C77-SUM(Input!B70:'Input'!C73))/2)\"\n\"IF(Input!B22<0,NA(),Input!B22/((Input!B77+Input!C77-SUM(Input!B70:'Input'!C73))/2))\"\n\"Input!B14/((Input!B69+Input!C69)/2)\"\n\"IF(Input!B36+Input!B24*(1-Input!B115)<0,NA(),(Input!B36+Input!B24*(1-Input!B115))/((Input!B101+Input!C101-Input!B85-Input!C85)/2))\"\n\"IF(Input!B40-Input!B109<0,NA(),(Input!B40-Input!B109)/((Input!B100+Input!C100)/2))\"\n\"IF(Input!B40-Input!B109-Input!B110<0,NA(),(Input!B40-Input!B109-Input!B110)/((Input!B98+Input!C98)/2))\"\n\"IF(Input!B17<0,NA(),Input!B17/Input!B14)\"\n\"IF(Input!B32-Input!B30<0,NA(),(Input!B32+Input!B24-Input!B30)/(Input!B32-Input!B30))\"\n\"Input!B113\"\n\"Input!B114/Input!B113\"\n\"IF(Input!B40-Input!B112<0,NA(),(Input!B40-Input!B112)/Input!B40)\"\n\"IF(Input!B111<0,NA(),Input!B111/Input!B113)\"\n\"Input!B111/Input!B114\"\n\"Input!B98/Input!B116\"\n\"(Input!B120-Input!B121)/Input!B120\"\n\"IF(Input!B118-Input!B109-Input!B110<0,NA(),(Input!B118-Input!B109-Input!B110)/Input!B117)\"\n\"IF(Input!B118<0,NA(),Input!B118/Input!B112)\"\n\"Input!B114\"\n\"Instructions!A1\"\n\"Input!B3\"\n\"MIN(B7:B8)\"\n\"MIN(B7,B8-1)\"\n\"MAX(B7:B8)\"\n\"Input!B5\"\n\"B15-1\"\n\"Input!B60*365/Input!B14\"\n\"Input!B14/Input!B60\"\n\"365/B18\"\n\"Input!B63*365/Input!B15\"\n\"Input!B15/Input!B63\"\n\"B19+B23\"\n\"Input!B67-Input!B85\"\n\"Input!B67/Input!B85\"\n\"(Input!B58+Input!B59+Input!B62)/Input!B85\"\n\"(Input!B58+Input!B59)/Input!B85\"\n\"Input!B14/B26\"\n\"IF(Input!B118<0,NA(),Input!B118/(Input!B81+Input!B82))\"\n\"B15\"\n\"IF(Input!B32+Input!B24-Input!B30<0,NA(),(Input!B32+Input!B24-Input!B30)/(Input!B24+Input!B106))\"\n\"IF(Input!B32+Input!B24-Input!B30+Input!B107<0,NA(),(Input!B32+Input!B24-Input!B30+Input!B107)/(Input!B24+Input!B106+Input!B107))\"\n\"Input!B95/Input!B77\"\n\"Input!B95/Input!B100\"\n\"Input!B95/(Input!B100-Input!B71)\"\n\"IF(Input!B118<0,NA(),Input!B118/Input!B95)\"\n\"B36\"\n\"IF(Input!B36-Input!B30<0,NA(),(Input!B36-Input!B30)/Input!B14)\"\n\"Input!B14/Input!B77\"\n\"IF(Input!B36<0,NA(),Input!B36/Input!B77)\"\n\"IF(Input!B22<0,NA(),Input!B22/Input!B14)\"\n\"Input!B14/(Input!B77-SUM(Input!B70:'Input'!B73))\"\n\"IF(Input!B22<0,NA(),Input!B22/(Input!B77-SUM(Input!B70:'Input'!B73)))\"\n\"Input!B14/Input!B69\"\n\"IF(Input!B36+Input!B24*(1-Input!B115)<0,NA(),(Input!B36+Input!B24*(1-Input!B115))/(Input!B101-Input!B85))\"\n\"IF(Input!B40-Input!B109<0,NA(),(Input!B40-Input!B109)/Input!B100)\"\n\"IF(Input!B40-Input!B109-Input!B110<0,NA(),(Input!B40-Input!B109-Input!B110)/Input!B98)\"\n\"IF(Input!B17<0,NA(),Input!B17/Input!B14)\"\n\"B47\"\n\"IF(Input!B32-Input!B30<0,NA(),(Input!B32+Input!B24-Input!B30)/(Input!B32-Input!B30))\"\n\"Input!B113\"\n\"Input!B114/Input!B113\"\n\"IF(Input!B40-Input!B112<0,NA(),(Input!B40-Input!B112)/Input!B40)\"\n\"IF(Input!B111<0,NA(),Input!B111/Input!B113)\"\n\"Input!B111/Input!B114\"\n\"Input!B98/Input!B116\"\n\"(Input!B120-Input!B121)/Input!B120\"\n\"IF(Input!B118-Input!B109-Input!B110<0,NA(),(Input!B118-Input!B109-Input!B110)/Input!B117)\"\n\"IF(Input!B118<0,NA(),Input!B118/Input!B112)\"\n\"Input!B114\"\n\"Instructions!A1\"\n\"C$24*C2 + D$24*D2 + E$24*E2 + F$24*F2 + G$24*G2 + H$24*H2 + I$24*I2 + J$24*J2 + K$24*K2\"\n\"N2*10/16\"\n\"L2/T2\"\n\"P2-N2\"\n\"N3*1\"\n\"N4*12/16\"\n\"N5*6/16\"\n\"N6*0.5\"\n\"N7*5\"\n\"N8*4\"\n\"N9*1.375\"\n\"N12*8\"\n\"N13*3\"\n\"N14*26/16\"\n\"N16*2\"\n\"N19*11/16\"\n\"N20\"\n\"$B6*C6 + $B10*C10 + $B2*C2 + $B8*C8 + $B7*C7 + $B11*C11 + $B5*C5 + $B3*C3 + $B9*C9 + $B4*C4 + $B12*C12 + $B13*C13 + $B14*C14 + $B15*C15 + $B16*C16 + $B17*C17 + $B18*C18 + $B19*C19 + $B20*C20\"\n\"L11+L15\"\n\"P11/3+P23-N23\"\n\"L12 + (L8/16)\"\n\"C23*C24\"\n\"SUM(C25:K25)\"\n\"P2*B2*T2 + P3*B3*T3 + P4*B4*T4 + P5*B5*T5 + P6*B6*T6 + P7*B7*T7 + P8*B8*T8 + P9*B9*T9 + P10*B10*T10 + P11*B11*T11 + P12*B12*T12 + P13*B13*T13 + P14*B14*T14 + P15*B15*T15 + P16*B16*T16 + P17*B17*T17 + P18*B18*T18 + P19*B19*T19 + P20*B20*T20 + P23*B15*T23 + P24*T24*80\"\n\"C28/H29\"\n\"D28/H29\"\n\"F29*(52/12)\"\n\"G29*7\"\n\"G29*1\"\n\"G29*2\"\n\"G29*3\"\n\"G29*4\"\n\"G29*5\"\n\"G29*6\"\n\"P29/16\"\n\"C29/B30\"\n\"D29/B30\"\n\"C34*1\"\n\"B34*E34\"\n\"K34*N34\"\n\"C36*42/16\"\n\"C37\"\n\"C44*7\"\n\"C45*3.3125\"\n\"B34*C34 + B35*C35 + B36*C36 + B37*C37 + B38*C38 + B39*C39 + B40*C40+ B41*C41 + B42*C42 + B43*C43 + B44*C44 + B45*C45 + B46*C46 + B47*C47\"\n\"SUM(G34:G47)\"\n\"C51*0.5\"\n\"C52*(12/16)\"\n\"C54*(24/16)\"\n\"C55*5/16\"\n\"C56*7/16\"\n\"C57*4.5/16\"\n\"C59*6\"\n\"C60*3.25\"\n\"C61*20\"\n\"C62*10\"\n\"C28+C48+L48+T48+C65+L65+T65\"\n\"D28+G48+O48+W48+G65+O65+W65\"\n\"C68/H29\"\n\"D68/H29\"\n\"SUM(F69:I69)\"\n\"F69/J69*C69\"\n\"G69/J69*C69\"\n\"H69/J69*C69\"\n\"I69/J69*C69\"\n\"L69/P69*D69\"\n\"M69/P69*D69\"\n\"N69/P69*D69\"\n\"O69/P69*D69\"\n\"(F70-F69)*$H$29/3500\"\n\"F11*1\"\n\"F12*0.5\"\n\"F11+0.5*F12\"\n\"M14\"\n\"M14*F21*H21/2000\"\n\"IF(H21-IF(DATE(YEAR(TODAY()),6,15)-TODAY()<0,DATE(YEAR(TODAY())+1,6,15)-TODAY(),DATE(YEAR(TODAY()),6,15)-TODAY()),\"\" \"\",\"\"Days to Jun 15th\"\")\"\n\"J21\"\n\"F31*H31*0.85/2000\"\n\"SUM(J31:J33)\"\n\"IF(F42>0,(8+0.14*F42)*3.14159*(D42/2)*(D42/2)*F42/2000,)\"\n\"IF(F42>0,(H42-(8+0.14*(J42))*3.14159*(D42/2)*(D42/2)*(J42)/2000),)\"\n\"H49*D49*F49*15/2000\"\n\"D49*F49*(H49-L49)*15/2000\"\n\"H50*D50*F50/2000\"\n\"3.14159*(D56/2)*(D56/2)*F56*15/2000\"\n\"3.14159*(D56/2)*(D56/2)*(F56-J56)*15/2000\"\n\"L42+L43+L44+N49+N50+N51+L56+L57+L58\"\n\"M35+M60\"\n\"M24\"\n\"M89-M24\"\n\"M35\"\n\"M14\"\n\"H21\"\n\"D99*2000/F99/H99\"\n\"M60\"\n\"M14\"\n\"H21\"\n\"SUM(J99:J100)\"\n\"M87\"\n\"M14\"\n\"IF(H109>0,D109*2000/F109/H109,)\"\n\"M102\"\n\"M112\"\n\"F21\"\n\"B118+E118 -H118\"\n\"M120\"\n\"M14\"\n\"H21\"\n\"B124*D124*F124/2000\"\n\"M126/0.9\"\n\"TODAY()\"\n\"F11*1\"\n\"F12*0.5\"\n\"F11+0.5*F12\"\n\"M14\"\n\"IF(DATE(YEAR(TODAY()),6,15)-TODAY()<0,DATE(YEAR(TODAY())+1,6,15)-TODAY(),DATE(YEAR(TODAY()),6,15)-TODAY())\"\n\"M14*F21*H21/2000\"\n\"IF(H21-IF(DATE(YEAR(TODAY()),6,15)-TODAY()<0,DATE(YEAR(TODAY())+1,6,15)-TODAY(),DATE(YEAR(TODAY()),6,15)-TODAY()),\"\" \"\",\"\"Days to Jun 15th\"\")\"\n\"J21\"\n\"F31*H31*0.85/2000\"\n\"SUM(J31:J33)\"\n\"IF(F42>0,(8+0.14*F42)*3.14159*(D42/2)*(D42/2)*F42/2000,)\"\n\"IF(F42>0,(H42-(8+0.14*(J42))*3.14159*(D42/2)*(D42/2)*(J42)/2000),)\"\n\"H49*D49*F49*15/2000\"\n\"D49*F49*(H49-L49)*15/2000\"\n\"H50*D50*F50/2000\"\n\"3.14159*(D56/2)*(D56/2)*F56*15/2000\"\n\"3.14159*(D56/2)*(D56/2)*(F56-J56)*15/2000\"\n\"L42+L43+L44+N49+N50+N51+L56+L57+L58\"\n\"M35+M60\"\n\"M24\"\n\"M89-M24\"\n\"M35\"\n\"M14\"\n\"H21\"\n\"D99*2000/F99/H99\"\n\"M60\"\n\"M14\"\n\"H21\"\n\"SUM(J99:J100)\"\n\"M87\"\n\"M14\"\n\"IF(DATE(YEAR(TODAY()),10,1)-TODAY()<0,DATE(YEAR(TODAY())+1,10,1)-TODAY(),DATE(YEAR(TODAY()),10,1)-TODAY())\"\n\"IF(H109>0,D109*2000/F109/H109,)\"\n\"IF(H109-IF(DATE(YEAR(TODAY()),10,1)-TODAY()<0,DATE(YEAR(TODAY())+1,10,1)-TODAY(),DATE(YEAR(TODAY()),10,1)-TODAY()),\"\" \"\",\"\"Days to Oct 1st\"\")\"\n\"M102\"\n\"M112\"\n\"F21\"\n\"B118+E118 -H118\"\n\"M120\"\n\"M14\"\n\"H21\"\n\"B124*D124*F124/2000\"\n\"M126/0.9\"\n\"IF(ISBLANK(PSEXlab),\"\"\"\",PSEXlab)\"\n\"IF(ISBLANK(PETHNATlab),\"\"\"\",PETHNATlab)\"\n\"IF(ISBLANK(PEDUClab),\"\"\"\",PEDUClab)\"\n\"IF(ISBLANK(PTOCClab),\"\"\"\",PTOCClab)\"\n\"IF(ISBLANK(POCClab),\"\"\"\",POCClab)\"\n\"IF(ISBLANK(PINDlab),\"\"\"\",PINDlab)\"\n\"IF(ISBLANK(PTYPEWKlab),\"\"\"\",PTYPEWKlab)\"\n\"IF(ISBLANK(PDISABLlab),\"\"\"\",PDISABLlab)\"\n\"IF(ISBLANK(PACTIVlab),\"\"\"\",PACTIVlab)\"\n\"IF(ISBLANK(PIMMIGRlab),\"\"\"\",PIMMIGRlab)\"\n\"IF(ISBLANK(PLFSlab),\"\"\"\",PLFSlab)\"\n\"Household!C4\"\n\"COUNTRYlab\"\n\"COUNTRYlab\"\n\"Household!E4\"\n\"Persons!E6\"\n\"PSEXlab\"\n\"Household!C4\"\n\"PSEXlab\"\n\"PIMMIGRlab\"\n\"PETHNATlab\"\n\"D7lab\"\n\"Household!D31\"\n\"PEDUClab\"\n\"COUNTRYlab\"\n\"Household!E4\"\n\"Household!C4\"\n\"PSEXlab\"\n\"PETHNATlab\"\n\"D7lab\"\n\"Household!D31\"\n\"PEDUClab\"\n\"Household!G4\"\n\"SUM(E21:E43)\"\n\"'Subsequent Pages Personal Prop'!E52\"\n\"E44+E45\"\n\"SUM(E4:E51)\"\n\"C6*B6\"\n\"SUM(K5:K73)\"\n\"C81\"\n\"G81\"\n\"K74\"\n\"SUM(K76:K79)\"\n\"SUM(C5:C80)\"\n\"L80*7\"\n\"L80*7\"\n\"'MS-1 Page 1'!$B$12\"\n\"'Page 6'!$B$28\"\n\"SUM('Page 6'!C28)\"\n\"SUM('Page 6'!B43)\"\n\"SUM('Page 7'!A6:B6)\"\n\"SUM('Page 7'!A8:B8)\"\n\"'Page 7'!$A$15\"\n\"'Page 7'!$A$17\"\n\"SUM(C8:C13)\"\n\"SUM(D7:D13)\"\n\"SUM(D17:D20)\"\n\"SUM(' Page 4'!B13:B14)\"\n\"SUM(' Page 4'!B13:B14)\"\n\"SUM(' Page 4'!B20:B21)\"\n\"SUM(' Page 4'!B27:B28)\"\n\"SUM(' Page 4'!B37:B38)\"\n\"D14+D21+D24+D26+D27+D28+D30\"\n\"D14+D21+D24+D26+D27+D28+D30\"\n\"'MS-1 Page 1'!$B$12\"\n\"'Page 2'!D31-'Page 2'!D34-'Page 2'!D36-'Page 2'!D37-'Page 2'!D39\"\n\"'Page 2'!D31-'Page 2'!D34-'Page 2'!D36-'Page 2'!D37-'Page 2'!D39\"\n\"'Page 2'!D31-'Page 2'!D34-'Page 2'!D36-'Page 2'!D37-'Page 2'!D39\"\n\"SUM('Page 6'!E14)\"\n\"SUM('Page 6'!G14)\"\n\"SUM(D9:D15)\"\n\"SUM(D6-D16)\"\n\"SUM(D6-D16)\"\n\"SUM('Page 2'!D24:D27)\"\n\"SUM(D17-D19)\"\n\"SUM(D17-D19)\"\n\"'MS-1 Page 1'!$B$12\"\n\"SUM(B8:B12)\"\n\"SUM(B8:B12)\"\n\"SUM(B17:B19)\"\n\"SUM(B17:B19)\"\n\"'MS-1 Page 1'!$B$12\"\n\"SUM(B4*C4)\"\n\"SUM(B4*C4)\"\n\"SUM(C4:C8)\"\n\"SUM(D4:E8)\"\n\"SUM(D4:E8)\"\n\"SUM(B16:B17)\"\n\"'MS-1 Page 1'!$B$12\"\n\"SUM(C11*E11)\"\n\"SUM(E11:E13)\"\n\"SUM(B20:B27)\"\n\"'MS-1 Page 1'!$B$12\"\n\"'MS-1 Page 1'!$B$12\"\n\"SUM(C8:C13)\"\n\"SUM(D7:D13)\"\n\"SUM(D18:D20)\"\n\"D14+D21+D24+D26+D27+D28+D29+D31\"\n\"D14+D21+D24+D26+D27+D28+D29+D31\"\n\"'MS-1 Page 1'!$B$12\"\n\"'Page 8'!D32-'Page 8'!D35-'Page 8'!D37-'Page 8'!D38-'Page 8'!D40\"\n\"'Page 8'!D32-'Page 8'!D35-'Page 8'!D37-'Page 8'!D38-'Page 8'!D40\"\n\"'Page 8'!D32-'Page 8'!D35-'Page 8'!D37-'Page 8'!D38-'Page 8'!D40\"\n\"SUM(D6:D12)\"\n\"SUM(D3-D13)\"\n\"SUM(D3-D13)\"\n\"$G$24\"\n\"'Scope of the plan'!$E$7\"\n\"D12+E12-F12\"\n\"H12*G12/1000\"\n\"IF(ISERROR(SUM(J12:J16)),\"\"\"\",SUM(J12:J16))\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"'Scope of the plan'!$E$7\"\n\"IF(ISERROR(I10*J10/1000000),\"\"\"\",(I10*J10/1000000))\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"IF(ISERROR(D23*F23),\"\"\"\",(D23*F23))\"\n\"IF(ISERROR(D23*F23),\"\"\"\",(D23*F23))\"\n\"IF(ISERROR(I23*J23),\"\"\"\",(I23*J23))\"\n\"I38*J38/1000000\"\n\"IF(ISERROR(D54*F54/1000000),\"\"\"\",(D54*F54/1000000))\"\n\"IF(ISERROR(D54*F54/1000000),\"\"\"\",(D54*F54/1000000))\"\n\"'Scope of the plan'!$E$7\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$17),\"\"\"\",('Inventory-Input amounts'!$J$17))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$10),\"\"\"\",('Inventory - Output Amounts'!$H$10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K10),\"\"\"\",('Inventory - Output Amounts'!K10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G23),\"\"\"\",('Inventory - Output Amounts'!G23))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K23),\"\"\"\",('Inventory - Output Amounts'!K23))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G38),\"\"\"\",('Inventory - Output Amounts'!G38))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K38),\"\"\"\",('Inventory - Output Amounts'!K38))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$G$53),\"\"\"\",('Inventory - Output Amounts'!$G$53))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$53),\"\"\"\",('Inventory - Output Amounts'!$I$53))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$53),\"\"\"\",('Inventory - Output Amounts'!$J$53))\"\n\"IF(ISERROR(F10+G10+H10+I10+J10+K10+L10+M10),\"\"\"\",(F10+G10+H10+I10+J10+K10+L10+M10))\"\n\"IF(ISERROR(D10-E10-N10),\"\"\"\",(D10-E10-N10))\"\n\"'Scope of the plan'!$E$8\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$33),\"\"\"\",('Inventory-Input amounts'!$J$33))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$11),\"\"\"\",('Inventory - Output Amounts'!$H$11))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$54),\"\"\"\",('Inventory - Output Amounts'!$I$54))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$54),\"\"\"\",('Inventory - Output Amounts'!$J$54))\"\n\"'Scope of the plan'!$E$9\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$49),\"\"\"\",('Inventory-Input amounts'!$J$49))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$12),\"\"\"\",('Inventory - Output Amounts'!$H$12))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$55),\"\"\"\",('Inventory - Output Amounts'!$I$55))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$55),\"\"\"\",('Inventory - Output Amounts'!$J$55))\"\n\"'Scope of the plan'!$E$10\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$65),\"\"\"\",('Inventory-Input amounts'!$J$65))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$13),\"\"\"\",('Inventory - Output Amounts'!$H$13))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$56),\"\"\"\",('Inventory - Output Amounts'!$I$56))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$56),\"\"\"\",('Inventory - Output Amounts'!$J$56))\"\n\"'Scope of the plan'!$E$11\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$81),\"\"\"\",('Inventory-Input amounts'!$J$81))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$14),\"\"\"\",('Inventory - Output Amounts'!$H$14))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$57),\"\"\"\",('Inventory - Output Amounts'!$I$57))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$57),\"\"\"\",('Inventory - Output Amounts'!$J$57))\"\n\"'Scope of the plan'!$E$7\"\n\"IF(ISERROR('Inventory-Input amounts'!J17/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory-Input amounts'!J17/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!H10/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!H10/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K10/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!K10/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G23/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!G23/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K23/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!K23/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G38/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!G38/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K38/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!K38/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G53/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!G53/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!I53/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!I53/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!J53/'Inventory - Output Amounts'!E10),\"\"\"\",('Inventory - Output Amounts'!J53/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Mass Balance'!N10/'Inventory - Output Amounts'!E10),\"\"\"\",('Mass Balance'!N10/'Inventory - Output Amounts'!E10))\"\n\"IF(ISERROR('Mass Balance'!O10/'Inventory - Output Amounts'!E10),\"\"\"\",('Mass Balance'!O10/'Inventory - Output Amounts'!E10))\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"'Scope of the plan'!$E$7\"\n\"IF(ISERROR(D11+E11),\"\"\"\",(D11+E11))\"\n\"IF(ISERROR(F11/'Inventory - Output Amounts'!E10),\"\"\"\",(F11/'Inventory - Output Amounts'!E10))\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"'Scope of the plan'!$E$7\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"IF(ISERROR(SUM(D10:D15)),\"\"\"\",(SUM(D10:D15)))\"\n\"IF(ISERROR(D18+D19+D20+D21),\"\"\"\",(D18+D19+D20+D21))\"\n\"IF(ISERROR(D16/D22),\"\"\"\",(D16/D22))\"\n\"'Summary of  Reductions'!$B$9\"\n\"'Summary of  Reductions'!$B$10\"\n\"'Summary of  Reductions'!$B$11\"\n\"'Summary of  Reductions'!$B$12\"\n\"'Summary of  Reductions'!$B$13\"\n\"'Summary of  Reductions'!$B$9\"\n\"'Summary of  Reductions'!$B$10\"\n\"'Summary of  Reductions'!$B$11\"\n\"'Summary of  Reductions'!$B$12\"\n\"'Summary of  Reductions'!$B$13\"\n\"'Scope of the plan'!$E$7\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"'Facility Information'!$D$10\"\n\"'Facility Information'!$D$11\"\n\"'Facility Information'!$D$13\"\n\"'Facility Information'!$F$13\"\n\"'Facility Information'!$F$15\"\n\"'Facility Information'!$D$17\"\n\"'Facility Information'!$F$17\"\n\"'Facility Information'!$D$19\"\n\"'Facility Information'!$F$19\"\n\"'Facility Information'!$D$20\"\n\"'Facility Information'!$G$20\"\n\"'Facility Information'!$D$21\"\n\"'Facility Information'!$D$22\"\n\"'Facility Information'!E24\"\n\"'Facility Information'!G24\"\n\"'Facility Information'!G24\"\n\"'Facility Information'!$D$26\"\n\"'Facility Information'!G25\"\n\"'Facility Information'!G25\"\n\"'Facility Information'!G25\"\n\"'Facility Information'!$B$31\"\n\"'Facility Information'!$F$31\"\n\"'Scope of the plan'!C7\"\n\"'Mass Balance'!D7\"\n\"'Scope of the plan'!$E$7\"\n\"IF(ISERROR('Inventory-Input amounts'!$J$17),\"\"\"\",('Inventory-Input amounts'!$J$17))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$H$10),\"\"\"\",('Inventory - Output Amounts'!$H$10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K10),\"\"\"\",('Inventory - Output Amounts'!K10))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G23),\"\"\"\",('Inventory - Output Amounts'!G23))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K23),\"\"\"\",('Inventory - Output Amounts'!K23))\"\n\"IF(ISERROR('Inventory - Output Amounts'!G38),\"\"\"\",('Inventory - Output Amounts'!G38))\"\n\"IF(ISERROR('Inventory - Output Amounts'!K38),\"\"\"\",('Inventory - Output Amounts'!K38))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$G$53),\"\"\"\",('Inventory - Output Amounts'!$G$53))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$I$53),\"\"\"\",('Inventory - Output Amounts'!$I$53))\"\n\"IF(ISERROR('Inventory - Output Amounts'!$J$53),\"\"\"\",('Inventory - Output Amounts'!$J$53))\"\n\"IF(ISERROR(F10+G10+H10+I10+J10+K10+L10+M10),\"\"\"\",(F10+G10+H10+I10+J10+K10+L10+M10))\"\n\"IF(ISERROR(D10-E10-N10),\"\"\"\",(D10-E10-N10))\"\n\"'Scope of the plan'!$E$8\"\n\"'Scope of the plan'!$E$9\"\n\"'Scope of the plan'!$E$10\"\n\"'Scope of the plan'!$E$11\"\n\"'Current waste Mgmt. Practices'!D7\"\n\"'Current waste Mgmt. Practices'!D7\"\n\"'Scope of the plan'!$E$7\"\n\"'Expected Annual Reductions'!$G$9\"\n\"IF(ISERROR(D8/'Inventory - Output Amounts'!E10),\"\"\"\",(D8/'Inventory - Output Amounts'!E10))\"\n\"'Summary of  Reductions'!F9\"\n\"'Expected Annual Reductions'!$M$9\"\n\"IF(ISERROR(G8/'Inventory - Output Amounts'!E10),\"\"\"\",(G8/'Inventory - Output Amounts'!E10))\"\n\"'Scope of the plan'!$E$8\"\n\"'Expected Annual Reductions'!$G$10\"\n\"'Expected Annual Reductions'!$M$10\"\n\"'Scope of the plan'!$E$9\"\n\"'Expected Annual Reductions'!$G$11\"\n\"'Expected Annual Reductions'!$M$11\"\n\"'Scope of the plan'!$E$10\"\n\"'Expected Annual Reductions'!$G$12\"\n\"'Expected Annual Reductions'!$M$12\"\n\"'Scope of the plan'!$E$11\"\n\"'Expected Annual Reductions'!$G$13\"\n\"'Expected Annual Reductions'!$M$13\"\n\"F18\"\n\"F19\"\n\"F20\"\n\"F21\"\n\"F22\"\n\"F23\"\n\"F24\"\n\"F25\"\n\"F26\"\n\"F27\"\n\"F28\"\n\"F29\"\n\"F30\"\n\"F31\"\n\"F32\"\n\"F33\"\n\"F16\"\n\"F17\"\n\"F34\"\n\"IF($AE$1,AF3*AF1,AF3*AF2)\"\n\"IF($AE$1,\"\"Member\"\",\"\"Non-Member\"\")\"\n\"IF($AE$1,AV1,AV2)\"\n\"AV4\"\n\"IF($AE$1,AW1,AW2)\"\n\"AW4\"\n\"IF($AE$1,AF1,AF2)\"\n\"AF4\"\n\"IF($AE$1,AG1,AG2)\"\n\"AG4\"\n\"IF($AE$1,AH1,AH2)\"\n\"AH4\"\n\"IF(AE1,0,IF(AA19=Z19,0,1))\"\n\"IF($AE$1,AI1,AI2)\"\n\"AI4\"\n\"IF($AE$1,AJ1,AJ2)\"\n\"AJ4\"\n\"IF($AE$1,AK1,AK2)\"\n\"AK4\"\n\"IF($AE$1,AL1,AL2)\"\n\"AL4\"\n\"IF($AE$1,AM1,AM2)\"\n\"AM4\"\n\"IF($AE$1,AN1,AN2)\"\n\"AN4\"\n\"IF($AE$1,AO1,AO2)\"\n\"AO4\"\n\"IF($AE$1,AP1,AP2)\"\n\"AP4\"\n\"IF($AE$1,AQ1,AQ2)\"\n\"AQ4\"\n\"IF($AE$1,AR1,AR2)\"\n\"AR4\"\n\"IF($AE$1,AS1,AS2)\"\n\"AS4\"\n\"IF($AE$1,AT1,AT2)\"\n\"AT4\"\n\"IF($AE$1,AU1,AU2)\"\n\"AU4\"\n\"Z20\"\n\"IF($AE$1,AX1,AX2)\"\n\"AX4\"\n\"SUM(H16:H34)\"\n\"SUM(H35:H36)\"\n\"'Pg 1-Company Info'!B2\"\n\"SUM(F10:F15)\"\n\"SUM(J10:J13)\"\n\"SUM(F20:F27)\"\n\"SUM(F30:F33)\"\n\"SUM(H25:H34)\"\n\"SUM(F38:F48)\"\n\"SUM(J38:J48)\"\n\"SUM(J52:J59)\"\n\"+J60+J49+J16\"\n\"F8-F9+F10\"\n\"F11\"\n\"F49\"\n\"L47\"\n\"SUM(J17:J19)\"\n\"'Pg 4-Supporting Schedules'!H16\"\n\"'Pg 4-Supporting Schedules'!H35\"\n\"SUM(J20:J22)\"\n\"L14-L23\"\n\"'Pg 4-Supporting Schedules'!H49\"\n\"'Pg 4-Supporting Schedules'!H60\"\n\"SUM(J26:J27)\"\n\"L24-L28\"\n\"L29-L30\"\n\"J33-J34\"\n\"L31+L35\"\n\"SUM(L42:L46)\"\n\"SUM(F42:F48)\"\n\"F7-F8\"\n\"SUM(F10:F14)\"\n\"SUM(H5:H16)\"\n\"SUM(H22:H28)\"\n\"+H17+H29+H30\"\n\"SUM(F37:F39)\"\n\"SUM(H40:H42)\"\n\"H43+H47\"\n\"G36\"\n\"IF(L2=LOOKUP($L$7,Data!$A$6:$A$85,Data!$AV$6:$AV$85),\"\"Yes\"\",\"\"No\"\")\"\n\"IF(L3=LOOKUP($L$7,Data!$A$6:$A$85,Data!AJ6:AJ85),\"\"Yes\"\",\"\"No\"\")\"\n\"IF(L4=LOOKUP($L$7,Data!$A$6:$A$85,Data!X6:X85),\"\"Yes\"\",\"\"No\"\")\"\n\"IF(L5=LOOKUP($L$7,Data!$A$6:$A$85,Data!L6:L85),\"\"Yes\"\",\"\"No\"\")\"\n\"Data!G1\"\n\"L7\"\n\"LOOKUP(Graphs!$L$12,Check!$A$12:$A$91,Check!AV12:AV91)\"\n\"LOOKUP(Graphs!$L$12,Check!$A$12:$A$91,Check!AW12:AW91)\"\n\"LOOKUP(Graphs!$L$12,Check!$A$12:$A$91,Check!AX12:AX91)\"\n\"LOOKUP(Graphs!$L$12,Check!$A$12:$A$91,Check!AY12:AY91)\"\n\"SUM(G36:G39)\"\n\"MIN(Data!L86,Data!X86,Data!AJ86,Data!AV86)\"\n\"G40/G41\"\n\"AJ6\"\n\"X6\"\n\"L6\"\n\"SUM(AV6:AY6)\"\n\"BA6/A6\"\n\"AV7+AJ7+X7+L7\"\n\"COUNT(L6:L85)\"\n\"Data!G1\"\n\"Data!B6\"\n\"Q10\"\n\"IF(B12>0,MIN(B12+C12,D12),MIN(C12,D12-B12))\"\n\"B12+C12-D12\"\n\"SUM(cust_preorder)\"\n\"G12+H12-C12\"\n\"B12+H8-D12\"\n\"IF(G1=\"\"Team\"\",MAX(J12,0)*Graphs!$N$15-MIN(Check!J12,0)*Graphs!$N$16,MAX(Check!F12,0)*Graphs!$N$15-MIN(Check!F12,0)*Graphs!$N$16)\"\n\"K12\"\n\"H10\"\n\"SUM(ware_preorder)\"\n\"N12+T8-IF(S$2=\"\"Not Transmitted\"\",P12,D10)\"\n\"IF(S1=\"\"Team\"\",MAX(V12,0)*Graphs!$M$15-MIN(Check!V12,0)*Graphs!$M$16,MAX(Check!R12,0)*Graphs!$M$15-MIN(Check!R12,0)*Graphs!$M$16)\"\n\"SUM(dist_preorder)\"\n\"Z12+AF8-IF(AE$2=\"\"Not Transmitted\"\",AB12,D8)\"\n\"IF(AE1=\"\"Team\"\",MAX(AH12,0)*Graphs!$L$15-MIN(Check!AH12,0)*Graphs!$L$16,MAX(Check!AD12,0)*Graphs!$L$15-MIN(Check!AD12,0)*Graphs!$L$16)\"\n\"AR9\"\n\"SUM(fact_preorder)\"\n\"AL12+AM12-IF(AQ$2=\"\"Not Transmitted\"\",AN12,D6)\"\n\"IF(AQ1=\"\"Team\"\",MAX(AT12,0)*Graphs!$K$15-MIN(Check!AT12,0)*Graphs!$K$16,MAX(Check!AP12,0)*Graphs!$K$15-MIN(Check!AP12,0)*Graphs!$K$16)\"\n\"AJ12\"\n\"X12\"\n\"L12\"\n\"AV12+AJ12+X12+L12\"\n\"BA12/A12\"\n\"F12\"\n\"I12\"\n\"J12+H9-D13\"\n\"L12+K13\"\n\"V12+T9-IF(S$2=\"\"Not Transmitted\"\",P13,D9)\"\n\"AH12+AF9-IF(AE$2=\"\"Not Transmitted\"\",AB13,D9)\"\n\"AT12+AM13-IF(AQ$2=\"\"Not Transmitted\"\",AN13,D7)\"\n\"+C4*C6*C8*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+C10*C12*C14*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+C16*C18*C20*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"SUM(C26:C30)\"\n\"C32*'Cost Drivers'!C8\"\n\"B8\"\n\"H8*'Cost Drivers'!$C$14\"\n\"+D26*J8\"\n\"+F26*D8\"\n\"+F26*F8\"\n\"H26+J26\"\n\"B10\"\n\"H10*'Cost Drivers'!$C$14\"\n\"+D27*J10\"\n\"+F27*D10\"\n\"+F27*F10\"\n\"B12\"\n\"H12*'Cost Drivers'!$C$14\"\n\"+D28*J12\"\n\"+F28*D12\"\n\"+F28*F12\"\n\"B14\"\n\"H14*'Cost Drivers'!$C$14\"\n\"+D29*J14\"\n\"+F29*D14\"\n\"+F29*F14\"\n\"B16\"\n\"H16*'Cost Drivers'!$C$14\"\n\"+D30*J16\"\n\"+F30*D16\"\n\"+F30*F16\"\n\"B18\"\n\"H18*'Cost Drivers'!$C$14\"\n\"+D31*J18\"\n\"+F31*D18\"\n\"+F31*F18\"\n\"SUM(H26:H31)\"\n\"E8*'Cost Drivers'!C14\"\n\"C8*E14\"\n\"+C8*12*C10*C12\"\n\"+C30*'Cost Drivers'!C10\"\n\"+C14*12*C16\"\n\"+C34*'Cost Drivers'!C8\"\n\"+C32+C36\"\n\"+(C8*C10*C12+C14*C16)*12*E41\"\n\"+C6*C8*('Cost Drivers'!C14+'Cost Drivers'!C12)\"\n\"+C17*C10\"\n\"+C12*12\"\n\"+C21+C19\"\n\"C23*'Cost Drivers'!C8\"\n\"C5*('Cost Drivers'!C14+'Cost Drivers'!C12)\"\n\"(C9+C15+C17)*C29\"\n\"C13*C11\"\n\"(C19+C7)\"\n\"SUM(C31:C35)\"\n\"+C37*'Cost Drivers'!C8*C23\"\n\"+'Asset and Inventory Management'!C23\"\n\"+'LANDesk Time Savings'!G11+'LANDesk Time Savings'!G12\"\n\"D10*'Cost Drivers'!$C$8\"\n\"+H10-J10\"\n\"+L10/H10\"\n\"+'Software Distribution'!C32\"\n\"+SUM('LANDesk Time Savings'!G14:G16)\"\n\"+'OS Deployment'!C37\"\n\"+'LANDesk Time Savings'!G18+'LANDesk Time Savings'!G19+'LANDesk Time Savings'!G20\"\n\"+'OS Deployment'!C39\"\n\"+F14*'Cost Drivers'!C8\"\n\"+'Remote Problem Resolution'!C34+'Remote Problem Resolution'!C30\"\n\"+'LANDesk Time Savings'!G25+'LANDesk Time Savings'!G23\"\n\"'LANDesk Time Savings'!F25*'Cost Drivers'!$C$8+'LANDesk Time Savings'!F23*'Cost Drivers'!$C$10\"\n\"'LANDesk Time Savings'!G25*'Cost Drivers'!$C$8+'LANDesk Time Savings'!G23*'Cost Drivers'!$C$10\"\n\"+'Software License Monitoring'!J32\"\n\"+'Cost Drivers'!C18*52*'Cost Drivers'!C16\"\n\"+(1-'LANDesk Time Savings'!D9)*'Cost Drivers'!C18*'Cost Drivers'!C16*52\"\n\"SUM(D10:D16)\"\n\"SUM(H10:H20)\"\n\"'Software License Monitoring'!H32\"\n\"+Pricing!D9*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+D30*0.05\"\n\"+Pricing!D11*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"IF(Pricing!D13=1,\"\"Based on a 1 Year Agreement\"\",IF(Pricing!D13=2,\"\"Based on a 2 Year Agreement\"\",IF(Pricing!D13=3,\"\"Based on a 3 Year Agreement\"\")))\"\n\"SUM(D30:D36)\"\n\"+L22-D36\"\n\"+D38/L22*12\"\n\"+(L22-D38)/D38\"\n\"TODAY()+30\"\n\"+B113+30\"\n\"+'ROI Summary'!$H$22/12/1000\"\n\"+'ROI Summary'!$H$22/12/1000+B114\"\n\"'ROI Summary'!$D$38/1000+('ROI Summary'!J22-'ROI Summary'!J20)/12/1000\"\n\"+B115+('ROI Summary'!$J$22)/12/1000\"\n\"+'ROI Summary'!H10/1000\"\n\"+'ROI Summary'!J10/1000\"\n\"+'ROI Summary'!H12/1000\"\n\"+'ROI Summary'!J12/1000\"\n\"+'ROI Summary'!H14/1000\"\n\"+'ROI Summary'!J14/1000\"\n\"+'ROI Summary'!H16/1000\"\n\"+'ROI Summary'!J16/1000\"\n\"+'ROI Summary'!H20/1000\"\n\"+'ROI Summary'!J20/1000\"\n\"TODAY()+30\"\n\"+B85+30\"\n\"+'ROI Summary'!$H$22/12/1000\"\n\"+'ROI Summary'!$H$22/12/1000+B86\"\n\"'ROI Summary'!$D$38/1000+('ROI Summary'!J22-'ROI Summary'!J20)/12/1000\"\n\"+B87+('ROI Summary'!$J$22)/12/1000\"\n\"+'ROI Summary'!H10/1000\"\n\"+'ROI Summary'!J10/1000\"\n\"+'ROI Summary'!H12/1000\"\n\"+'ROI Summary'!J12/1000\"\n\"+'ROI Summary'!H14/1000\"\n\"+'ROI Summary'!J14/1000\"\n\"+'ROI Summary'!H16/1000\"\n\"+'ROI Summary'!J16/1000\"\n\"+'ROI Summary'!H20/1000\"\n\"+'ROI Summary'!J20/1000\"\n\"'Cost Drivers'!C18\"\n\"C9*D9\"\n\"'Asset and Inventory Management'!C10\"\n\"+'Asset and Inventory Management'!C19\"\n\"'Asset and Inventory Management'!C19*(1-D11)\"\n\"+F11-G11\"\n\"'Asset and Inventory Management'!C12\"\n\"+'Asset and Inventory Management'!C21\"\n\"(1-D12)*'Asset and Inventory Management'!C21\"\n\"'Software Distribution'!C6\"\n\"+'Software Distribution'!C26\"\n\"(1-D14)*'Software Distribution'!C26\"\n\"'Software Distribution'!C12\"\n\"+'Software Distribution'!C28\"\n\"(1-D15)*'Software Distribution'!C28\"\n\"'Software Distribution'!C18\"\n\"+'Software Distribution'!C30\"\n\"(1-D16)*'Software Distribution'!C30\"\n\"+'OS Deployment'!C9+'OS Deployment'!C15+'OS Deployment'!C17\"\n\"+'OS Deployment'!C31\"\n\"(1-D18)*F18\"\n\"+'OS Deployment'!C13\"\n\"+'OS Deployment'!C33\"\n\"+'OS Deployment'!C7+'OS Deployment'!C19\"\n\"+'OS Deployment'!C35\"\n\"'Remote Problem Resolution'!C10\"\n\"'Remote Problem Resolution'!C12\"\n\"+'Remote Problem Resolution'!C30\"\n\"(1-D22)*C22*(1-D23)*C23*'Remote Problem Resolution'!C8*12\"\n\"'Remote Problem Resolution'!C14\"\n\"'Remote Problem Resolution'!C16\"\n\"+'Remote Problem Resolution'!C34\"\n\"(1-D24)*C24*(1-D25)*C25*12\"\n\"+IF(('Cost Drivers'!C12+'Cost Drivers'!C14)<100,D21,IF(('Cost Drivers'!C12+'Cost Drivers'!C14)<1000,D22,IF(('Cost Drivers'!C12+'Cost Drivers'!C14)>=1000,D23)))\"\n\"IF(D13=1,F30,IF(D13=2,H30,IF(D13=3,J30)))\"\n\"+D21*0.3\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$F$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$F$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$F$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$F$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$F$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$F$26))))))\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$H$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$H$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$H$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$H$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$H$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$H$26))))))\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$J$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$J$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$J$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$J$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$J$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$J$26))))))\"\n\"+C4*C6*C8*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+C10*C12*C14*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+C16*C18*C20*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"SUM(C26:C30)\"\n\"C32*'Cost Drivers'!C8\"\n\"B8\"\n\"H8*'Cost Drivers'!$C$14\"\n\"+D26*J8\"\n\"+F26*D8\"\n\"+F26*F8\"\n\"H26+J26\"\n\"B10\"\n\"H10*'Cost Drivers'!$C$14\"\n\"+D27*J10\"\n\"+F27*D10\"\n\"+F27*F10\"\n\"B12\"\n\"H12*'Cost Drivers'!$C$14\"\n\"+D28*J12\"\n\"+F28*D12\"\n\"+F28*F12\"\n\"B14\"\n\"H14*'Cost Drivers'!$C$14\"\n\"+D29*J14\"\n\"+F29*D14\"\n\"+F29*F14\"\n\"B16\"\n\"H16*'Cost Drivers'!$C$14\"\n\"+D30*J16\"\n\"+F30*D16\"\n\"+F30*F16\"\n\"B18\"\n\"H18*'Cost Drivers'!$C$14\"\n\"+D31*J18\"\n\"+F31*D18\"\n\"+F31*F18\"\n\"SUM(H26:H31)\"\n\"E8*'Cost Drivers'!C14\"\n\"C8*E14\"\n\"+C8*12*C10*C12\"\n\"+C30*'Cost Drivers'!C10\"\n\"+C14*12*C16\"\n\"+C34*'Cost Drivers'!C8\"\n\"+C32+C36\"\n\"+(C8*C10*C12+C14*C16)*12*E41\"\n\"+C6*C8*('Cost Drivers'!C14+'Cost Drivers'!C12)\"\n\"+C17*C10\"\n\"+C12*12\"\n\"+C21+C19\"\n\"C23*'Cost Drivers'!C8\"\n\"C5*('Cost Drivers'!C14+'Cost Drivers'!C12)\"\n\"(C9+C15+C17)*C29\"\n\"C13*C11\"\n\"(C19+C7)\"\n\"SUM(C31:C35)\"\n\"+C37*'Cost Drivers'!C8*C23\"\n\"+'Asset and Inventory Management'!C23\"\n\"+'LANDesk Time Savings'!G11+'LANDesk Time Savings'!G12\"\n\"D10*'Cost Drivers'!$C$8\"\n\"+H10-J10\"\n\"+L10/H10\"\n\"+'Software Distribution'!C32\"\n\"+SUM('LANDesk Time Savings'!G14:G16)\"\n\"+'OS Deployment'!C37\"\n\"+'LANDesk Time Savings'!G18+'LANDesk Time Savings'!G19+'LANDesk Time Savings'!G20\"\n\"+'OS Deployment'!C39\"\n\"+F14*'Cost Drivers'!C8\"\n\"+'Remote Problem Resolution'!C34+'Remote Problem Resolution'!C30\"\n\"+'LANDesk Time Savings'!G25+'LANDesk Time Savings'!G23\"\n\"'LANDesk Time Savings'!F25*'Cost Drivers'!$C$8+'LANDesk Time Savings'!F23*'Cost Drivers'!$C$10\"\n\"'LANDesk Time Savings'!G25*'Cost Drivers'!$C$8+'LANDesk Time Savings'!G23*'Cost Drivers'!$C$10\"\n\"+'Software License Monitoring'!J32\"\n\"+'Cost Drivers'!C18*52*'Cost Drivers'!C16\"\n\"+(1-'LANDesk Time Savings'!D9)*'Cost Drivers'!C18*'Cost Drivers'!C16*52\"\n\"SUM(D10:D16)\"\n\"SUM(H10:H20)\"\n\"'Software License Monitoring'!H32\"\n\"+Pricing!D9*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"+D30*0.05\"\n\"+Pricing!D11*('Cost Drivers'!C12+'Cost Drivers'!C14)\"\n\"IF(Pricing!D13=1,\"\"Based on a 1 Year Agreement\"\",IF(Pricing!D13=2,\"\"Based on a 2 Year Agreement\"\",IF(Pricing!D13=3,\"\"Based on a 3 Year Agreement\"\")))\"\n\"SUM(D30:D36)\"\n\"+L22-D36\"\n\"+D38/L22*12\"\n\"+(L22-D38)/D38\"\n\"TODAY()+30\"\n\"+B113+30\"\n\"+'ROI Summary'!$H$22/12/1000\"\n\"+'ROI Summary'!$H$22/12/1000+B114\"\n\"'ROI Summary'!$D$38/1000+('ROI Summary'!J22-'ROI Summary'!J20)/12/1000\"\n\"+B115+('ROI Summary'!$J$22)/12/1000\"\n\"+'ROI Summary'!H10/1000\"\n\"+'ROI Summary'!J10/1000\"\n\"+'ROI Summary'!H12/1000\"\n\"+'ROI Summary'!J12/1000\"\n\"+'ROI Summary'!H14/1000\"\n\"+'ROI Summary'!J14/1000\"\n\"+'ROI Summary'!H16/1000\"\n\"+'ROI Summary'!J16/1000\"\n\"+'ROI Summary'!H20/1000\"\n\"+'ROI Summary'!J20/1000\"\n\"TODAY()+30\"\n\"+B85+30\"\n\"+'ROI Summary'!$H$22/12/1000\"\n\"+'ROI Summary'!$H$22/12/1000+B86\"\n\"'ROI Summary'!$D$38/1000+('ROI Summary'!J22-'ROI Summary'!J20)/12/1000\"\n\"+B87+('ROI Summary'!$J$22)/12/1000\"\n\"+'ROI Summary'!H10/1000\"\n\"+'ROI Summary'!J10/1000\"\n\"+'ROI Summary'!H12/1000\"\n\"+'ROI Summary'!J12/1000\"\n\"+'ROI Summary'!H14/1000\"\n\"+'ROI Summary'!J14/1000\"\n\"+'ROI Summary'!H16/1000\"\n\"+'ROI Summary'!J16/1000\"\n\"+'ROI Summary'!H20/1000\"\n\"+'ROI Summary'!J20/1000\"\n\"'Cost Drivers'!C18\"\n\"C9*D9\"\n\"'Asset and Inventory Management'!C10\"\n\"+'Asset and Inventory Management'!C19\"\n\"'Asset and Inventory Management'!C19*(1-D11)\"\n\"+F11-G11\"\n\"'Asset and Inventory Management'!C12\"\n\"+'Asset and Inventory Management'!C21\"\n\"(1-D12)*'Asset and Inventory Management'!C21\"\n\"'Software Distribution'!C6\"\n\"+'Software Distribution'!C26\"\n\"(1-D14)*'Software Distribution'!C26\"\n\"'Software Distribution'!C12\"\n\"+'Software Distribution'!C28\"\n\"(1-D15)*'Software Distribution'!C28\"\n\"'Software Distribution'!C18\"\n\"+'Software Distribution'!C30\"\n\"(1-D16)*'Software Distribution'!C30\"\n\"+'OS Deployment'!C9+'OS Deployment'!C15+'OS Deployment'!C17\"\n\"+'OS Deployment'!C31\"\n\"(1-D18)*F18\"\n\"+'OS Deployment'!C13\"\n\"+'OS Deployment'!C33\"\n\"+'OS Deployment'!C7+'OS Deployment'!C19\"\n\"+'OS Deployment'!C35\"\n\"'Remote Problem Resolution'!C10\"\n\"'Remote Problem Resolution'!C12\"\n\"+'Remote Problem Resolution'!C30\"\n\"(1-D22)*C22*(1-D23)*C23*'Remote Problem Resolution'!C8*12\"\n\"'Remote Problem Resolution'!C14\"\n\"'Remote Problem Resolution'!C16\"\n\"+'Remote Problem Resolution'!C34\"\n\"(1-D24)*C24*(1-D25)*C25*12\"\n\"+IF(('Cost Drivers'!C12+'Cost Drivers'!C14)<100,D21,IF(('Cost Drivers'!C12+'Cost Drivers'!C14)<1000,D22,IF(('Cost Drivers'!C12+'Cost Drivers'!C14)>=1000,D23)))\"\n\"IF(D13=1,F30,IF(D13=2,H30,IF(D13=3,J30)))\"\n\"+D21*0.18\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$F$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$F$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$F$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$F$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$F$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$F$26))))))\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$H$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$H$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$H$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$H$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$H$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$H$26))))))\"\n\"IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<100,$J$21,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<1000,$J$22,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<5000,$J$23,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<10000,$J$24,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)<20000,$J$25,IF(('Cost Drivers'!$C$12+'Cost Drivers'!$C$14)>=20000,$J$26))))))\"\n\"98645-1361\"\n\"SUM(B8:B11)\"\n\"602269+200\"\n\"SUM(B12:B16)\"\n\"18575+450000\"\n\"71265-1\"\n\"340555+71111-1\"\n\"303801+594-768+200\"\n\"1176170-1361-594+768+1\"\n\"989067\"\n\"+B9/C9-1\"\n\"-217439+1\"\n\"SUM(B9:B10)\"\n\"C9+C10\"\n\"-563716-1\"\n\"-26277-230-35047-49997+2339+2050+207-1991-B15+1\"\n\"-1991-325\"\n\"SUM(B13:B15)\"\n\"-40285+1042\"\n\"SUM(B16:B19)\"\n\"ROUND(B22/B30,2)\"\n\"ROUND(B22/B31,2)\"\n\"+B27/C27-1+0.01\"\n\"207264\"\n\"+B36+B37\"\n\"308470-3461\"\n\"149602+54662+34756-19028-2666-1-6539\"\n\"185691+3460\"\n\"13873+132134+19028+2666+1\"\n\"B38+B42\"\n\"59883\"\n\"16869+10263+11706\"\n\"B16-B46-B47-B49\"\n\"-4035-1991-325-5517\"\n\"989067\"\n\"+B9/C9-1\"\n\"-217439+1\"\n\"SUM(B9:B10)\"\n\"C9+C10\"\n\"-563716-1+(5517)\"\n\"-26277-230-35047-49997+2339+2050+207-1991-B15+1+(4035+1991+325)\"\n\"(-1991-325)*0\"\n\"SUM(B13:B15)\"\n\"1181-(1181)\"\n\"-40285+1042+(1658)\"\n\"SUM(B16:B19)\"\n\"-ROUND(B20*36%,0)\"\n\"'Inc. Stmt - Reported'!B21-4444\"\n\"ROUND(B22/B30,2)\"\n\"ROUND(B22/B31,2)\"\n\"207264\"\n\"+B36+B37\"\n\"308470-3461\"\n\"149602+54662+34756-19028-2666-1-6539\"\n\"185691+3460\"\n\"13873+132134+19028+2666+1\"\n\"B38+B42\"\n\"59883\"\n\"16869+10263+11706\"\n\"'Inc. Stmt - Reported'!B48\"\n\"(-4035-1991-325-5517)*0\"\n\"'Inc. Stmt - Reported'!B11\"\n\"B12/B12\"\n\"'Inc. Stmt - Reported'!C11\"\n\"D12/D12\"\n\"B16-B15\"\n\"B14/$B$12\"\n\"B14-D14\"\n\"B14/D14-1\"\n\"D14/$D$12\"\n\"(-1991-319)*0\"\n\"SUM(D14:D15)\"\n\"B23-B22-B21-B20\"\n\"B15\"\n\"1991+325\"\n\"SUM(C19:C22)\"\n\"B32-B31-B30-B29-B28-B27\"\n\"ROUND((5517026/1000)*(1-$B$43),0)\"\n\"ROUND((4035301/1000)*(1-$B$43),0)\"\n\"ROUND(((1990983+324459)/1000)*(1-$B$43),0)\"\n\"ROUND((1657892/1000)*(1-$B$43),0)\"\n\"ROUND((-1181071/1000)*(1-$B$43),0)\"\n\"SUM(D26:D31)\"\n\"ROUND(B27/$B$42,2)\"\n\"ROUND(B29/$B$42,2)-0.01\"\n\"B15-B14-B13-B12-B11\"\n\"SUM(E3:E6)\"\n\"SUM(E8:E26)\"\n\"SUM(E30:E32)\"\n\"SUM(E58:E71)\"\n\"E7+E27+E29+E33+E53+E57+E72\"\n\"SUM(E3:E7)\"\n\"SUM(E9:E16)\"\n\"E8+E17+E26+E28\"\n\"'[1]1'!$J$32\"\n\"'[2]1'!$J$32\"\n\"SUM(E11+H11)\"\n\"'[1]2'!$J$32\"\n\"'[2]2'!$J$32\"\n\"'[1]3'!$J$32\"\n\"'[2]3'!$J$32\"\n\"'[1]4'!$J$32\"\n\"'[2]4'!$J$32\"\n\"'[1]5'!$J$32\"\n\"'[2]5'!$J$32\"\n\"'[1]6'!$J$32\"\n\"'[2]6'!$J$32\"\n\"'[1]7'!$J$32\"\n\"'[2]7'!$J$32\"\n\"'[1]8'!$J$32\"\n\"'[2]8'!$J$32\"\n\"'[1]9'!$J$32\"\n\"'[2]9'!$J$32\"\n\"'[1]10'!$J$32\"\n\"'[2]10'!$J$32\"\n\"'[1]11'!$J$32\"\n\"'[2]11'!$J$32\"\n\"'[1]12'!$J$32\"\n\"'[2]12'!$J$32\"\n\"'[1]13'!$J$32\"\n\"'[2]13'!$J$32\"\n\"'[1]14'!$J$32\"\n\"'[2]14'!$J$32\"\n\"'[1]15'!$J$32\"\n\"'[2]15'!$J$32\"\n\"'[1]16'!$J$32\"\n\"'[2]16'!$J$32\"\n\"SUM(E11:E26)\"\n\"SUM(E11:E26)\"\n\"$K$27\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"'1'!$A$5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"'1'!H5\"\n\"SUM(G9*I9)\"\n\"SUM(G9*I9)\"\n\"SUM(J9:K31)\"\n\"SUM(J9:K31)\"\n\"193437+21988\"\n\"138220+3326460\"\n\"1237+8368\"\n\"13616+18\"\n\"58961+342\"\n\"11485+5\"\n\"3000+8*350+2500\"\n\"SUM(F5:F123)\"\n\"C3-D3\"\n\"D9-D10\"\n\"F8+F10+SUM(F11:F13)\"\n\"F18+F21+F24+F27+F29\"\n\"SUM(F33)\"\n\"H14+H30+H34\"\n\"SUM(F42:F48)\"\n\"SUM(F52:F53)\"\n\"H49+H54\"\n\"SUM(F61:F63)\"\n\"H56+H64\"\n\"H66-H36\"\n\"D9-D10\"\n\"F8+F10+SUM(F11:F13)\"\n\"F18+F21+F24+F27+F29\"\n\"SUM(F33)\"\n\"H14+H30+H34\"\n\"SUM(F42:F48)\"\n\"SUM(F52:F53)\"\n\"H49+H54\"\n\"+F61+F62-F63\"\n\"H56+H64\"\n\"H66-H36\"\n\"E6-E7\"\n\"152*20\"\n\"121*20\"\n\"137*20\"\n\"143*20\"\n\"161*20\"\n\"SUM(E10:E14)\"\n\"E8-E17\"\n\"SUM(E20:E49)\"\n\"E18-E50\"\n\"SUM(E53:E54)\"\n\"E51+E55\"\n\"SUM(E56)\"\n\"SUM($F$56:G56)\"\n\"A9+7\"\n\"+I7\"\n\"+B9*B10\"\n\"+E13\"\n\"+E14/360\"\n\"+G14*B11\"\n\"+D19\"\n\"+B9\"\n\"+E30+C30-B30\"\n\"+D25\"\n\"+D30\"\n\"+B34/C34\"\n\"+D30\"\n\"+B34+B35\"\n\"+D30\"\n\"+ C40/360*B34\"\n\"+D30\"\n\"+B9\"\n\"+B44 - C44\"\n\"+D19\"\n\"+IF(E44<0,E44,0)\"\n\"+D20\"\n\"+G50*F50\"\n\"+IF(E44>=0,E44,0)\"\n\"+D36\"\n\"+H52/F52\"\n\"+D21\"\n\"+B56-E56+D56\"\n\"+B36\"\n\"+H52\"\n\"+B11\"\n\"+C56\"\n\"+C61-C62\"\n\"0.05*C61\"\n\"SUM(C65:C71)\"\n\"0.05*(C92+D92)/2\"\n\"+C63-C72-C73-C74\"\n\"+IF(C76>0,0.35*C76,0)\"\n\"+C86+E86\"\n\"+D139\"\n\"+F15\"\n\"+D87-C87\"\n\"+D21\"\n\"+H52\"\n\"SUM(C86:C89)\"\n\"+C93+-1*C73\"\n\"SUM(C90:C95)\"\n\"SUM(D90:D94)\"\n\"+I40\"\n\"SUM(D100)\"\n\"+C110\"\n\"+C78\"\n\"+C96-C103-C101\"\n\"+D106+D108\"\n\"+C110+C100+C103\"\n\"+D110+D101+D103\"\n\"+D108\"\n\"+C73\"\n\"+IF(E87>0,-1*E87,E87)\"\n\"+E100\"\n\"SUM(D118:D125)\"\n\"+IF(E94>0,-1*E94,E94)\"\n\"+IF(E92>0,-1*E92,E92)\"\n\"SUM(D129:D130)\"\n\"+E103\"\n\"+E107\"\n\"+D109\"\n\"SUM(D134:D136)\"\n\"+D126+D131+D137\"\n\"+C7-C11\"\n\"SUM(C17:C23)\"\n\"+D13-D25\"\n\"+C34\"\n\"SUM(C10:N10)\"\n\"SUM(C10:C13)\"\n\"+D10*0.5\"\n\"SUM(C19:C31)\"\n\"SUM(O21:O31)\"\n\"+C6+C14-C32\"\n\"SUM(G7:G8)\"\n\"SUM(B7:B17)\"\n\"SUM(G7:G15)\"\n\"SUM(B4:B12)\"\n\"D7*(1+I7)\"\n\"C7/B7-1\"\n\"E25*E26\"\n\"B7/B$7\"\n\"E7*N8\"\n\"B7-B8\"\n\"E7*N10\"\n\"E7*N11\"\n\"CF!B8\"\n\"B9-B11-B12-B10\"\n\"Ratios!D34*BS!D29\"\n\"Ratios!B35*IS!B15\"\n\"D19+(BS!E33-BS!D33)/E27\"\n\"B17/B19\"\n\"B21/B19\"\n\"G7/C25\"\n\"B27/B20\"\n\"((B22*(1+B29))/B27)+B29-B24\"\n\"CF!B29\"\n\"C10/B10-1\"\n\"B10/B$13\"\n\"IS!E7/Ratios!E10\"\n\"D12*(1+IS!I7)\"\n\"SUM(B10:B12)\"\n\"B13/B$20\"\n\"IS!E7/Ratios!E12\"\n\"B16/Ratios!B33\"\n\"C16/Ratios!C33+B17\"\n\"B16-B17\"\n\"B18+B13\"\n\"N25*E27\"\n\"B25/B27\"\n\"N26*E27\"\n\"B26/B27\"\n\"SUM(B25:B26)\"\n\"(E11+E12)/Ratios!E19\"\n\"B27/B$36\"\n\"B29+B27\"\n\"B32+IS!C17-IS!C21\"\n\"B34+B30\"\n\"IS!B9/IS!B7\"\n\"IS!B17/IS!B7\"\n\"IS!B7/BS!B11\"\n\"IS!B7/BS!B20\"\n\"IS!B7/BS!B16\"\n\"IS!B7/BS!B12\"\n\"IS!B7/BS!B26\"\n\"-CF!B18/CF!B8\"\n\"BS!B13/BS!B27\"\n\"(BS!B11+BS!B12)/BS!B27\"\n\"BS!B29/BS!B20\"\n\"(BS!B10+BS!B12)/BS!B27\"\n\"IS!B13/IS!B7\"\n\"IS!B7/BS!B20\"\n\"IS!B15/IS!B13\"\n\"IS!B17/IS!B15\"\n\"BS!B20/BS!B34\"\n\"B26*B27*B28*B29*B30\"\n\"IS!B14/BS!B29\"\n\"IS!C17\"\n\"BS!C17-BS!B17\"\n\"-(BS!C11-BS!B11)\"\n\"BS!C25-BS!B25\"\n\"SUM(B7:B13)\"\n\"-(BS!C16-BS!B16)\"\n\"BS!C29-BS!B29\"\n\"BS!C33-BS!B33\"\n\"-IS!C21\"\n\"SUM(B22:B24)\"\n\"BS!B10\"\n\"B29\"\n\"B25+B18+B14\"\n\"B27+B28\"\n\"SUM(C10:D10)\"\n\"SUM(C12:C13)\"\n\"(C10+C20)/2\"\n\"SUM(C58:C67)\"\n\"IF(OR(C87>50000,C87=\"\" \"\"),\"\" \"\",\"\"Significant remodeling defined to be over $50,000\"\")\"\n\"IF(OR(C89<25,C89=\"\" \"\"),\"\" \"\",\"\"Please check value\"\")\"\n\"IF(OR(C96>500,C96=\"\" \"\"),\"\" \"\",\"\"Convenience stores should be over 500 sq. ft.\"\")\"\n\"SUM(C8:C10)\"\n\"E11+E17-E19-E21\"\n\"E27/$C$11\"\n\"SUM(E27:E49)\"\n\"SUM(E55:E65)\"\n\"E23-E50+E66\"\n\"SUM(E86:E90)\"\n\"SUM(E96:E99)\"\n\"E71-E78+E91-E100\"\n\"C115/$D$135\"\n\"SUM(C115:C117)\"\n\"D118/$D$135\"\n\"IF(C128<0,\"\"Please enter value as a positive figure\"\",\"\"  \"\")\"\n\"SUM(C125:C128)\"\n\"SUM(D118:D133)\"\n\"SUM(D143:D154)\"\n\"IF(D135=D156,\"\" \"\",\"\"Should match Total Assets above\"\")\"\n\"SUM(C10:C12)\"\n\"SUM(C41:C45)\"\n\"SUM(D75:D78)\"\n\"D79/C79\"\n\"E79\"\n\"+E5-D5\"\n\"+J7+J8+J9\"\n\"SUM(P10:P16)\"\n\"SUM(J13:J18)\"\n\"+D10+D8+D5\"\n\"+D12+D14\"\n\"SUM(P22:P27)\"\n\"+J11+J5\"\n\"+J20-J22\"\n\"+D20+D25+D24+D23+D22\"\n\"+J30+J31\"\n\"SUM(P31:P39)\"\n\"+D31+D30+D28\"\n\"+J33+J36+J37\"\n\"+J39+J28\"\n\"+P41+P29+P19+P8\"\n\"+P43+P5\"\n\"+J56+J57+J58+J59\"\n\"SUM(P60:P66)\"\n\"+D60+D57+D54\"\n\"+J61+J54\"\n\"SUM(P81:P90)\"\n\"+D81+D80+D78\"\n\"+J90+J78\"\n\"+P92+P79+P69+P57\"\n\"+P94+P54\"\n\"SUM(J23:J28)\"\n\"SUM(J71:J78)\"\n\"SUM(J79+J68+J64+J62+J57+J56+J42+J36+J29)\"\n\"SUM(E91:E100)\"\n\"SUM(E129:E171)\"\n\"SUM(E175:E178)\"\n\"SUM(E179+E172+E126+E117+E101)\"\n\"SUM(+E179+E172+E126+E117+I101)\"\n\"SUM(G179+G172+G126+G117+G206)\"\n\"SUM(I179+I172+I126+I117+I101)\"\n\"SUM(I189-I191)\"\n\"B10*SUM(B38:B43)+C10*SUM(C38:C43)+D10*SUM(D38:D43)+E10*SUM(E38:E43)+F10*SUM(F38:F43)+G10*SUM(G38:G43)-0.5*SUM(B30:G35)\"\n\"B22-B30-B38\"\n\"B23+B30-B31-B39\"\n\"SUMPRODUCT($B$6:$G$6,B22:G22)\"\n\"SUMPRODUCT($B$7:$G$7,B22:G22)\"\n\"SUMPRODUCT($B$8:$G$8,B22:G22)\"\n\"24*16*4\"\n\"24*16*2\"\n\"24*16*3\"\n\"B13-B38\"\n\"SUMPRODUCT($B$4:$E$4, B3:E3)\"\n\"SUMPRODUCT($B$4:$E$4, B7:E7)\"\n\"H7-F7\"\n\"B3+C3+D3\"\n\"SUMPRODUCT($B$3:$D$3*6,B6:D6)\"\n\"E6-G6\"\n\"SUMPRODUCT(F19:L19,F20:L20)\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"B3\"\n\"F11-B11\"\n\"C3\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H9\"\n\"Instructions!H8\"\n\"$B$4-1\"\n\"$B$4-2\"\n\"$B$4-3\"\n\"$B$4-4\"\n\"$B$4-5\"\n\"$B$4-6\"\n\"SUM(B9:B15)\"\n\"SUM(B16:B24)\"\n\"SUM(B39:B43)\"\n\"SUM(B38:B43)\"\n\"SUM(B47:B54)\"\n\"B45+B55\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"B6+B7\"\n\"B8+SUM(B9:B17)\"\n\"B22+SUM(B23:B25)\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B3:H3\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Balance Sheet'!A7\"\n\"IF('Data Balance Sheet'!B$25=0,\"\"\"\",'Data Balance Sheet'!B9/'Data Balance Sheet'!B$25*100)\"\n\"IF('Data Balance Sheet'!G$25=0,\"\"\"\",'Data Balance Sheet'!G19/'Data Balance Sheet'!G$25*-100)\"\n\"IF('Data Balance Sheet'!B$56=0,\"\"\"\",'Data Balance Sheet'!B29/'Data Balance Sheet'!B$56*100)\"\n\"'Data Balance Sheet'!A6\"\n\"B4\"\n\"B59-1\"\n\"'Data Balance Sheet'!A8\"\n\"IF(INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B9/INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B10/INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B11/INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B12/INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B13/INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B14/INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B15/INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B16/INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B17/INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B18/INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B19/INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B20/INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B21/INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B22/INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B23/INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B24/INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B25/INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B29/INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B30/INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(31,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B31/INDIRECT(ADDRESS(31,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B32/INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(33,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B33/INDIRECT(ADDRESS(33,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(34,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B34/INDIRECT(ADDRESS(34,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(35,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B35/INDIRECT(ADDRESS(35,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(36,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B36/INDIRECT(ADDRESS(36,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(37,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B37/INDIRECT(ADDRESS(37,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(38,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B38/INDIRECT(ADDRESS(38,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(39,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B39/INDIRECT(ADDRESS(39,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(40,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B40/INDIRECT(ADDRESS(40,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(41,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B41/INDIRECT(ADDRESS(41,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(42,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B42/INDIRECT(ADDRESS(42,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(43,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B43/INDIRECT(ADDRESS(43,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(44,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B44/INDIRECT(ADDRESS(44,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(45,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B45/INDIRECT(ADDRESS(45,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(46,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B46/INDIRECT(ADDRESS(46,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(47,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B47/INDIRECT(ADDRESS(47,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(48,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B48/INDIRECT(ADDRESS(48,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(49,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B49/INDIRECT(ADDRESS(49,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(50,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B50/INDIRECT(ADDRESS(50,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(51,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B51/INDIRECT(ADDRESS(51,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(52,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B52/INDIRECT(ADDRESS(52,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(53,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B53/INDIRECT(ADDRESS(53,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(55,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B55/INDIRECT(ADDRESS(55,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(56,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))=0,\"\"\"\",'Data Balance Sheet'!B56/INDIRECT(ADDRESS(56,Instructions!$H$7+1,1,TRUE,\"\"Data Balance Sheet\"\"))*100)\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Income Statement'!A6\"\n\"IF('Data Income Statement'!B$6=0,\"\"\"\",'Data Income Statement'!B6/'Data Income Statement'!B$6*100)\"\n\"B4\"\n\"B36-1\"\n\"'Data Income Statement'!A6\"\n\"IF(INDIRECT(ADDRESS(6,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B6/INDIRECT(ADDRESS(6,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(7,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B7/INDIRECT(ADDRESS(7,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(8,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B8/INDIRECT(ADDRESS(8,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B9/INDIRECT(ADDRESS(9,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B10/INDIRECT(ADDRESS(10,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B11/INDIRECT(ADDRESS(11,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B12/INDIRECT(ADDRESS(12,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B13/INDIRECT(ADDRESS(13,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B14/INDIRECT(ADDRESS(14,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B15/INDIRECT(ADDRESS(15,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B16/INDIRECT(ADDRESS(16,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B17/INDIRECT(ADDRESS(17,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B18/INDIRECT(ADDRESS(18,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B19/INDIRECT(ADDRESS(19,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B20/INDIRECT(ADDRESS(20,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B21/INDIRECT(ADDRESS(21,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B22/INDIRECT(ADDRESS(22,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B23/INDIRECT(ADDRESS(23,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B24/INDIRECT(ADDRESS(24,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B25/INDIRECT(ADDRESS(25,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(26,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B26/INDIRECT(ADDRESS(26,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(27,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B27/INDIRECT(ADDRESS(27,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(28,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B28/INDIRECT(ADDRESS(28,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B29/INDIRECT(ADDRESS(29,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B30/INDIRECT(ADDRESS(30,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"IF(INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))=0,\"\"\"\",'Data Income Statement'!B32/INDIRECT(ADDRESS(32,Instructions!$H$7+1,1,TRUE,\"\"Data Income Statement\"\"))*100)\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B3\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",'Data Balance Sheet'!B16/'Data Balance Sheet'!B38)\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",('Data Balance Sheet'!B9+'Data Balance Sheet'!B10+'Data Balance Sheet'!B11)/'Data Balance Sheet'!B38)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6/365=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B11+'Data Balance Sheet'!B11)/2)/('Data Income Statement'!B6/365),(('Data Balance Sheet'!B11+'Data Balance Sheet'!C11)/2)/('Data Income Statement'!B6/365)))\"\n\"IF('Data Income Statement'!C6/365=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C11+'Data Balance Sheet'!C11)/2)/('Data Income Statement'!C6/365),(('Data Balance Sheet'!C11+'Data Balance Sheet'!D11)/2)/('Data Income Statement'!C6/365)))\"\n\"IF('Data Income Statement'!D6/365=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D11+'Data Balance Sheet'!D11)/2)/('Data Income Statement'!D6/365),(('Data Balance Sheet'!D11+'Data Balance Sheet'!E11)/2)/('Data Income Statement'!D6/365)))\"\n\"IF('Data Income Statement'!E6/365=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E11+'Data Balance Sheet'!E11)/2)/('Data Income Statement'!E6/365),(('Data Balance Sheet'!E11+'Data Balance Sheet'!F11)/2)/('Data Income Statement'!E6/365)))\"\n\"IF('Data Income Statement'!F6/365=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F11+'Data Balance Sheet'!F11)/2)/('Data Income Statement'!F6/365),(('Data Balance Sheet'!F11+'Data Balance Sheet'!G11)/2)/('Data Income Statement'!F6/365)))\"\n\"IF('Data Income Statement'!G6/365=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G11+'Data Balance Sheet'!G11)/2)/('Data Income Statement'!G6/365),(('Data Balance Sheet'!G11+'Data Balance Sheet'!H11)/2)/('Data Income Statement'!G6/365)))\"\n\"IF('Data Income Statement'!H6/365=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H11+'Data Balance Sheet'!H11)/2)/('Data Income Statement'!H6/365),(('Data Balance Sheet'!H11+'Data Balance Sheet'!I11)/2)/('Data Income Statement'!H6/365)))\"\n\"IF('Data Income Statement'!B7/365=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B12+'Data Balance Sheet'!B12)/2)/(-'Data Income Statement'!B7/365),(('Data Balance Sheet'!B12+'Data Balance Sheet'!C12)/2)/(-'Data Income Statement'!B7/365)))\"\n\"IF('Data Income Statement'!C7/365=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C12+'Data Balance Sheet'!C12)/2)/(-'Data Income Statement'!C7/365),(('Data Balance Sheet'!C12+'Data Balance Sheet'!D12)/2)/(-'Data Income Statement'!C7/365)))\"\n\"IF('Data Income Statement'!D7/365=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D12+'Data Balance Sheet'!D12)/2)/(-'Data Income Statement'!D7/365),(('Data Balance Sheet'!D12+'Data Balance Sheet'!E12)/2)/(-'Data Income Statement'!D7/365)))\"\n\"IF('Data Income Statement'!E7/365=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E12+'Data Balance Sheet'!E12)/2)/(-'Data Income Statement'!E7/365),(('Data Balance Sheet'!E12+'Data Balance Sheet'!F12)/2)/(-'Data Income Statement'!E7/365)))\"\n\"IF('Data Income Statement'!F7/365=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F12+'Data Balance Sheet'!F12)/2)/(-'Data Income Statement'!F7/365),(('Data Balance Sheet'!F12+'Data Balance Sheet'!G12)/2)/(-'Data Income Statement'!F7/365)))\"\n\"IF('Data Income Statement'!G7/365=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G12+'Data Balance Sheet'!G12)/2)/(-'Data Income Statement'!G7/365),(('Data Balance Sheet'!G12+'Data Balance Sheet'!H12)/2)/(-'Data Income Statement'!G7/365)))\"\n\"IF('Data Income Statement'!H7/365=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H12+'Data Balance Sheet'!H12)/2)/(-'Data Income Statement'!H7/365),(('Data Balance Sheet'!H12+'Data Balance Sheet'!I12)/2)/(-'Data Income Statement'!H7/365)))\"\n\"IF(ISERROR(B27+B28),\"\"\"\",B27+B28)\"\n\"'Data Balance Sheet'!H4\"\n\"H27+H28\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B55=0,\"\"\"\",'Data Balance Sheet'!B44/'Data Balance Sheet'!B55)\"\n\"IF('Data Balance Sheet'!B56=0,\"\"\"\",('Data Balance Sheet'!B44)/'Data Balance Sheet'!B56)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B19=0,\"\"\"\",'Data Income Statement'!B18/-'Data Income Statement'!B19)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B19=0,\"\"\"\",('Data Income Statement'!B19-'Data Income Statement'!B32)/'Data Income Statement'!B19)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B25=0,\"\"\"\",'Data Balance Sheet'!B55/'Data Balance Sheet'!B25)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B25=0,\"\"\"\",'Data Balance Sheet'!B45/'Data Balance Sheet'!B25)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B38=0,\"\"\"\",'Data Income Statement'!B32/'Data Balance Sheet'!B38)\"\n\"'Data Balance Sheet'!B4\"\n\"IF((('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)=0,\"\"\"\",('Data Income Statement'!B22-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/((IF(Instructions!$H$7=1,('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2,('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2))))\"\n\"IF((('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)=0,\"\"\"\",('Data Income Statement'!C22-('Data Income Statement'!C19*(1+'Data Income Statement'!C21/'Data Income Statement'!C20)))/((IF(Instructions!$H$7=2,('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2,('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2))))\"\n\"IF((('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)=0,\"\"\"\",('Data Income Statement'!D22-('Data Income Statement'!D19*(1+'Data Income Statement'!D21/'Data Income Statement'!D20)))/((IF(Instructions!$H$7=3,('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2,('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2))))\"\n\"IF((('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)=0,\"\"\"\",('Data Income Statement'!E22-('Data Income Statement'!E19*(1+'Data Income Statement'!E21/'Data Income Statement'!E20)))/((IF(Instructions!$H$7=4,('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2,('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2))))\"\n\"IF((('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)=0,\"\"\"\",('Data Income Statement'!F22-('Data Income Statement'!F19*(1+'Data Income Statement'!F21/'Data Income Statement'!F20)))/((IF(Instructions!$H$7=5,('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2,('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2))))\"\n\"IF((('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)=0,\"\"\"\",('Data Income Statement'!G22-('Data Income Statement'!G19*(1+'Data Income Statement'!G21/'Data Income Statement'!G20)))/((IF(Instructions!$H$7=6,('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2,('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2))))\"\n\"IF((('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2)=0,\"\"\"\",('Data Income Statement'!H22-('Data Income Statement'!H19*(1+'Data Income Statement'!H21/'Data Income Statement'!H20)))/((IF(Instructions!$H$7=7,('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2,('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2))))\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",('Data Income Statement'!B22-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/('Data Income Statement'!B6))\"\n\"IF('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B28/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!B55-'Data Balance Sheet'!B49)/2),'Data Income Statement'!B28/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2)))\"\n\"IF('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C28/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2),'Data Income Statement'!C28/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2)))\"\n\"IF('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D28/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2),'Data Income Statement'!D28/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2)))\"\n\"IF('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E28/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2),'Data Income Statement'!E28/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2)))\"\n\"IF('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F28/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2),'Data Income Statement'!F28/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2)))\"\n\"IF('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G28/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2),'Data Income Statement'!G28/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2)))\"\n\"IF('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H28/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2),'Data Income Statement'!H28/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49)/2)))\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B8/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B18/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B20/'Data Income Statement'!B6)\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B22/'Data Income Statement'!B6)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Balance Sheet'!B11+'Data Balance Sheet'!C11=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B11+'Data Balance Sheet'!B11)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B11+'Data Balance Sheet'!C11)/2)))\"\n\"IF('Data Balance Sheet'!C11+'Data Balance Sheet'!D11=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C11+'Data Balance Sheet'!C11)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C11+'Data Balance Sheet'!D11)/2)))\"\n\"IF('Data Balance Sheet'!D11+'Data Balance Sheet'!E11=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D11+'Data Balance Sheet'!D11)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D11+'Data Balance Sheet'!E11)/2)))\"\n\"IF('Data Balance Sheet'!E11+'Data Balance Sheet'!F11=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E11+'Data Balance Sheet'!E11)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E11+'Data Balance Sheet'!F11)/2)))\"\n\"IF('Data Balance Sheet'!F11+'Data Balance Sheet'!G11=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F11+'Data Balance Sheet'!F11)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F11+'Data Balance Sheet'!G11)/2)))\"\n\"IF('Data Balance Sheet'!G11+'Data Balance Sheet'!H11=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G11+'Data Balance Sheet'!G11)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G11+'Data Balance Sheet'!H11)/2)))\"\n\"IF('Data Balance Sheet'!H11+'Data Balance Sheet'!I11=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H11+'Data Balance Sheet'!H11)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H11+'Data Balance Sheet'!I11)/2)))\"\n\"IF('Data Balance Sheet'!B12+'Data Balance Sheet'!C12=0,\"\"\"\",IF(Instructions!$H$7=1,-'Data Income Statement'!B7/(('Data Balance Sheet'!B12+'Data Balance Sheet'!B12)/2),-'Data Income Statement'!B7/(('Data Balance Sheet'!B12+'Data Balance Sheet'!C12)/2)))\"\n\"IF('Data Balance Sheet'!C12+'Data Balance Sheet'!D12=0,\"\"\"\",IF(Instructions!$H$7=2,-'Data Income Statement'!C7/(('Data Balance Sheet'!C12+'Data Balance Sheet'!C12)/2),-'Data Income Statement'!C7/(('Data Balance Sheet'!C12+'Data Balance Sheet'!D12)/2)))\"\n\"IF('Data Balance Sheet'!D12+'Data Balance Sheet'!E12=0,\"\"\"\",IF(Instructions!$H$7=3,-'Data Income Statement'!D7/(('Data Balance Sheet'!D12+'Data Balance Sheet'!D12)/2),-'Data Income Statement'!D7/(('Data Balance Sheet'!D12+'Data Balance Sheet'!E12)/2)))\"\n\"IF('Data Balance Sheet'!E12+'Data Balance Sheet'!F12=0,\"\"\"\",IF(Instructions!$H$7=4,-'Data Income Statement'!E7/(('Data Balance Sheet'!E12+'Data Balance Sheet'!E12)/2),-'Data Income Statement'!E7/(('Data Balance Sheet'!E12+'Data Balance Sheet'!F12)/2)))\"\n\"IF('Data Balance Sheet'!F12+'Data Balance Sheet'!G12=0,\"\"\"\",IF(Instructions!$H$7=5,-'Data Income Statement'!F7/(('Data Balance Sheet'!F12+'Data Balance Sheet'!F12)/2),-'Data Income Statement'!F7/(('Data Balance Sheet'!F12+'Data Balance Sheet'!G12)/2)))\"\n\"IF('Data Balance Sheet'!G12+'Data Balance Sheet'!H12=0,\"\"\"\",IF(Instructions!$H$7=6,-'Data Income Statement'!G7/(('Data Balance Sheet'!G12+'Data Balance Sheet'!G12)/2),-'Data Income Statement'!G7/(('Data Balance Sheet'!G12+'Data Balance Sheet'!H12)/2)))\"\n\"IF('Data Balance Sheet'!H12+'Data Balance Sheet'!I12=0,\"\"\"\",IF(Instructions!$H$7=7,-'Data Income Statement'!H7/(('Data Balance Sheet'!H12+'Data Balance Sheet'!H12)/2),-'Data Income Statement'!H7/(('Data Balance Sheet'!H12+'Data Balance Sheet'!I12)/2)))\"\n\"IF(SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/((SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24))/2),'Data Income Statement'!B6/((SUM('Data Balance Sheet'!B17:'Data Balance Sheet'!B24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/((SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24))/2),'Data Income Statement'!C6/((SUM('Data Balance Sheet'!C17:'Data Balance Sheet'!C24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/((SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24))/2),'Data Income Statement'!D6/((SUM('Data Balance Sheet'!D17:'Data Balance Sheet'!D24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/((SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24))/2),'Data Income Statement'!E6/((SUM('Data Balance Sheet'!E17:'Data Balance Sheet'!E24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/((SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24))/2),'Data Income Statement'!F6/((SUM('Data Balance Sheet'!F17:'Data Balance Sheet'!F24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/((SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24))/2),'Data Income Statement'!G6/((SUM('Data Balance Sheet'!G17:'Data Balance Sheet'!G24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24))/2)))\"\n\"IF(SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!I17:'Data Balance Sheet'!I24)=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/((SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24))/2),'Data Income Statement'!H6/((SUM('Data Balance Sheet'!H17:'Data Balance Sheet'!H24)+SUM('Data Balance Sheet'!I17:'Data Balance Sheet'!I24))/2)))\"\n\"IF('Data Balance Sheet'!B25+'Data Balance Sheet'!C25=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)))\"\n\"IF('Data Balance Sheet'!C25+'Data Balance Sheet'!D25=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)))\"\n\"IF('Data Balance Sheet'!D25+'Data Balance Sheet'!E25=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)))\"\n\"IF('Data Balance Sheet'!E25+'Data Balance Sheet'!F25=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)))\"\n\"IF('Data Balance Sheet'!F25+'Data Balance Sheet'!G25=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)))\"\n\"IF('Data Balance Sheet'!G25+'Data Balance Sheet'!H25=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)))\"\n\"IF('Data Balance Sheet'!H25+'Data Balance Sheet'!I25=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)))\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B20=0,\"\"\"\",IF('Data Income Statement'!B6=0,\"\"\"\",('Data Income Statement'!B26-('Data Income Statement'!B19*(1+'Data Income Statement'!B21/'Data Income Statement'!B20)))/'Data Income Statement'!B6))\"\n\"IF('Data Balance Sheet'!B25+'Data Balance Sheet'!C25=0,\"\"\"\",IF(Instructions!$H$7=1,'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2),'Data Income Statement'!B6/(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)))\"\n\"IF('Data Balance Sheet'!C25+'Data Balance Sheet'!D25=0,\"\"\"\",IF(Instructions!$H$7=2,'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2),'Data Income Statement'!C6/(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)))\"\n\"IF('Data Balance Sheet'!D25+'Data Balance Sheet'!E25=0,\"\"\"\",IF(Instructions!$H$7=3,'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2),'Data Income Statement'!D6/(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)))\"\n\"IF('Data Balance Sheet'!E25+'Data Balance Sheet'!F25=0,\"\"\"\",IF(Instructions!$H$7=4,'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2),'Data Income Statement'!E6/(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)))\"\n\"IF('Data Balance Sheet'!F25+'Data Balance Sheet'!G25=0,\"\"\"\",IF(Instructions!$H$7=5,'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2),'Data Income Statement'!F6/(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)))\"\n\"IF('Data Balance Sheet'!G25+'Data Balance Sheet'!H25=0,\"\"\"\",IF(Instructions!$H$7=6,'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2),'Data Income Statement'!G6/(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)))\"\n\"IF('Data Balance Sheet'!H25+'Data Balance Sheet'!I25=0,\"\"\"\",IF(Instructions!$H$7=7,'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2),'Data Income Statement'!H6/(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)))\"\n\"IF(ISERR(B298*B301),\"\"\"\",B298*B301)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Income Statement'!B6=0,\"\"\"\",'Data Income Statement'!B28/'Data Income Statement'!B6)\"\n\"B301\"\n\"IF('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49=0,\"\"\"\",IF(Instructions!$H$7=1,(('Data Balance Sheet'!B25+'Data Balance Sheet'!B25)/2)/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!B55-'Data Balance Sheet'!B49)/2),(('Data Balance Sheet'!B25+'Data Balance Sheet'!C25)/2)/(('Data Balance Sheet'!B55-'Data Balance Sheet'!B49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2)))\"\n\"IF('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49=0,\"\"\"\",IF(Instructions!$H$7=2,(('Data Balance Sheet'!C25+'Data Balance Sheet'!C25)/2)/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!C55-'Data Balance Sheet'!C49)/2),(('Data Balance Sheet'!C25+'Data Balance Sheet'!D25)/2)/(('Data Balance Sheet'!C55-'Data Balance Sheet'!C49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2)))\"\n\"IF('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49=0,\"\"\"\",IF(Instructions!$H$7=3,(('Data Balance Sheet'!D25+'Data Balance Sheet'!D25)/2)/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!D55-'Data Balance Sheet'!D49)/2),(('Data Balance Sheet'!D25+'Data Balance Sheet'!E25)/2)/(('Data Balance Sheet'!D55-'Data Balance Sheet'!D49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2)))\"\n\"IF('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49=0,\"\"\"\",IF(Instructions!$H$7=4,(('Data Balance Sheet'!E25+'Data Balance Sheet'!E25)/2)/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!E55-'Data Balance Sheet'!E49)/2),(('Data Balance Sheet'!E25+'Data Balance Sheet'!F25)/2)/(('Data Balance Sheet'!E55-'Data Balance Sheet'!E49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2)))\"\n\"IF('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49=0,\"\"\"\",IF(Instructions!$H$7=5,(('Data Balance Sheet'!F25+'Data Balance Sheet'!F25)/2)/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!F55-'Data Balance Sheet'!F49)/2),(('Data Balance Sheet'!F25+'Data Balance Sheet'!G25)/2)/(('Data Balance Sheet'!F55-'Data Balance Sheet'!F49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2)))\"\n\"IF('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49=0,\"\"\"\",IF(Instructions!$H$7=6,(('Data Balance Sheet'!G25+'Data Balance Sheet'!G25)/2)/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!G55-'Data Balance Sheet'!G49)/2),(('Data Balance Sheet'!G25+'Data Balance Sheet'!H25)/2)/(('Data Balance Sheet'!G55-'Data Balance Sheet'!G49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2)))\"\n\"IF('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49=0,\"\"\"\",IF(Instructions!$H$7=7,(('Data Balance Sheet'!H25+'Data Balance Sheet'!H25)/2)/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!H55-'Data Balance Sheet'!H49)/2),(('Data Balance Sheet'!H25+'Data Balance Sheet'!I25)/2)/(('Data Balance Sheet'!H55-'Data Balance Sheet'!H49+'Data Balance Sheet'!I55-'Data Balance Sheet'!I49)/2)))\"\n\"IF(ISERR(B307*B310*B313),\"\"\"\",B307*B310*B313)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Share Info'!B7=0,\"\"\"\",'Data Share Info'!B7/'Data Share Info'!B8)\"\n\"'Data Balance Sheet'!B4\"\n\"IF('Data Share Info'!B9=0,\"\"\"\",'Data Share Info'!B7/('Data Balance Sheet'!B55/'Data Share Info'!B9))\"\n\"'Data Balance Sheet'!B4\"\n\"'Data Share Info'!B7*('Data Share Info'!B9-'Data Share Info'!B10)\"\n\"SUM(C10:K10)\"\n\"SUM(C22+E22+G22+I22+K22)\"\n\"Y11\"\n\"RANK(P11,$P$11:$P$15)\"\n\"RANK(P11,$P$11:$P$30)\"\n\"E11+F11+G11+I11+(J11+L11+M11)/3\"\n\"(X11/$X$36)*10\"\n\"RANK(P16,$P$16:$P$19)\"\n\"RANK(P20,$P$20:$P$24)\"\n\"RANK(P25,$P$25:$P$30)\"\n\"RANK(P31,$P$11:$P$31)\"\n\"MAX(X11:X31)-MIN(X11:X31)\"\n\"MIN(X11:X31)\"\n\"MAX(X11:X31)\"\n\"RANK(P71,$P$71:$P$74)\"\n\"RANK(P71,$P$71:$P$92)\"\n\"E71+F71+G71+I71+(J71+L71+M71)/2\"\n\"(X71/$X$97)*10\"\n\"RANK(P75,$P$71:$P$75)\"\n\"RANK(P76,$P$76:$P$78)\"\n\"RANK(P79,$P$79:$P$80)\"\n\"RANK(P81,$P$81:$P$83)\"\n\"RANK(P85,$P$85:$P$88)\"\n\"RANK(P89,$P$89:$P$92)\"\n\"MAX(X71:X91)-MIN(X71:X91)\"\n\"MIN(X71:X91)\"\n\"MAX(X71:X91)\"\n\"Y11\"\n\"RANK(P11,$P$11:$P$15)\"\n\"RANK(P11,$P$11:$P$30)\"\n\"E11+F11+G11+I11+(J11+L11+M11)/3\"\n\"IF($X$36>0,(X11/$X$36)*10,0)\"\n\"RANK(P16,$P$16:$P$19)\"\n\"RANK(P20,$P$20:$P$24)\"\n\"RANK(P25,$P$25:$P$30)\"\n\"RANK(P31,$P$11:$P$31)\"\n\"MAX(X11:X31)-MIN(X11:X31)\"\n\"MIN(X11:X31)\"\n\"MAX(X11:X31)\"\n\"RANK(P70,$P$70:$P$73)\"\n\"RANK(P70,$P$70:$P$91)\"\n\"IF($X$96<0,(X70/$X$96)*10,0)\"\n\"RANK(P74,$P$70:$P$74)\"\n\"RANK(P75,$P$75:$P$77)\"\n\"RANK(P78,$P$78:$P$79)\"\n\"RANK(P80,$P$80:$P$82)\"\n\"RANK(P84,$P$84:$P$87)\"\n\"RANK(P88,$P$88:$P$91)\"\n\"MAX(X70:X90)-MIN(X70:X90)\"\n\"MIN(X70:X90)\"\n\"MAX(X70:X90)\"\n\"B56\"\n\"F6\"\n\"F6\"\n\"F6\"\n\"F6\"\n\"B5/F6\"\n\"C5/F6\"\n\"D5/F6\"\n\"E5/F6\"\n\"F5/F6\"\n\"B5-B7\"\n\"B5*0.15\"\n\"F12/4\"\n\"F12/4\"\n\"F12/4\"\n\"F12/4\"\n\"(F76*0.11)\"\n\"(F77*0.09)\"\n\"SUM(B11:B18)\"\n\"B8-B19\"\n\"SUM(B20:E20)\"\n\"B20*0.34\"\n\"B20-B22\"\n\"SUM(G30:G41)\"\n\"F44*(B30*0.01)\"\n\"F44*(C30*0.01)\"\n\"F44*(D30*0.01)\"\n\"F44*(E30*0.01)\"\n\"F5*(G30*0.01)\"\n\"F5*(G31*0.01)\"\n\"F5*(G32*0.01)\"\n\"F5*(G33*0.01)\"\n\"F5*(G34*0.01)\"\n\"F5*(G35*0.01)\"\n\"F5*(G36*0.01)\"\n\"F5*(G37*0.01)\"\n\"F5*(G38*0.01)\"\n\"F5*(G39*0.01)\"\n\"F5*(G40*0.01)\"\n\"F5*(G41*0.01)\"\n\"F61+B24\"\n\"B62+C24\"\n\"E62\"\n\"B7*0.25\"\n\"SUM(B62:B63)\"\n\"B69\"\n\"($F68/4)\"\n\"(-F67)*0.08\"\n\"(+B67+B68)\"\n\"$F70\"\n\"B69+B70\"\n\"B64+B71\"\n\"B73-B78\"\n\"(+B24/+B79)*100\"\n\"(B24/B73)*100\"\n\"(+B64/+B76)\"\n\"(+B64-B63)/B76\"\n\"B78/+B79\"\n\"B79/+B71\"\n\"(B24/B5)*100\"\n\"(B5/B73)\"\n\"(B73/B79)\"\n\"(F76*0.11)\"\n\"(F77*0.09)\"\n\"F62+B134\"\n\"B115*0.06\"\n\"B117*0.25\"\n\"SUM(B172:B174)\"\n\"F69\"\n\"F69\"\n\"F70\"\n\"(+B134/+B190)*100\"\n\"(B134/B184)*100\"\n\"(B134/B115)*100\"\n\"(B115/B184)\"\n\"F76*0.11\"\n\"F77*0.09\"\n\"F178\"\n\"F178\"\n\"F70\"\n\"+F297+F298\"\n\"SUM(E10:E147)\"\n\"7500*8.05\"\n\"2500*8.05\"\n\"55000-1500\"\n\"53500*0.02\"\n\"53500*0.98\"\n\"1500*8.15\"\n\"F60-F61\"\n\"SUM(C66:C67)\"\n\"D65-D67\"\n\"D68+D69\"\n\"SUM(E64:E70)\"\n\"E71-E72\"\n\"F62-F73\"\n\"7500*13-D81\"\n\"C88*D88\"\n\"80500/10000\"\n\"3500*8.15\"\n\"SUM(C88:C91)\"\n\"7500*13\"\n\"SUM(H97:H98)\"\n\"J96-J99\"\n\"8.05*2500\"\n\"$I$6\"\n\"$I$7\"\n\"M24+M25\"\n\"$O$6\"\n\"$O$7\"\n\"INDEX('FRA data and parameters'!$A$1:$Q$34,MATCH('auxiliary table'!$A1,'FRA data and parameters'!$B1:$B34,0)+5,MATCH(B1,'FRA data and parameters'!$A$7:$Q$7,0))\"\n\"MATCH(B5,$B1:$I1,1)\"\n\"MATCH(C5,$B$1:$I$1,1)\"\n\"INDEX($B$2:$I$2,1,B4)+(INDEX($B$2:$I$2,1,B4+1)-INDEX($B$2:$I$2,1,B4))/(INDEX($B$1:$I$1,1,B4+1)-INDEX($B$1:$I$1,1,B4))*(B5-INDEX($B$1:$I$1,1,B4))\"\n\"INDEX('FRA data and parameters'!$A$1:$Q$34,MATCH('auxiliary table'!$A9,'FRA data and parameters'!$B1:$B34,0)+5,MATCH(B9,'FRA data and parameters'!$A$20:$Q$20,0))\"\n\"INDEX($B$10:$I$10,1,B12)+(INDEX($B$10:$I$10,1,B12+1)-INDEX($B$10:$I$10,1,B12))/(INDEX($B$9:$I$9,1,B12+1)-INDEX($B$9:$I$9,1,B12))*(B13-INDEX($B$9:$I$9,1,B12))\"\n\"INDEX('FRA data and parameters'!$A$1:$Q$34,MATCH('auxiliary table'!$A17,'FRA data and parameters'!$B1:$B34,0)+5,MATCH(B17,'FRA data and parameters'!$A$29:$Q$29,0))\"\n\"MATCH(B21,$B17:$H17,1)\"\n\"INDEX($B$18:$H$18,1,B20)+(INDEX($B$18:$H$18,1,B20+1)-INDEX($B$18:$H$18,1,B20))/(INDEX($B$17:$H$17,1,B20+1)-INDEX($B$17:$H$17,1,B20))*(B21-INDEX($B$17:$H$17,1,B20))\"\n\"MATCH(B3,'auxiliary table'!$B$1:$I$1,1)\"\n\"IF(ISNUMBER(MATCH(B3,'auxiliary table'!$B$1:$I$1,0)),INDEX('auxiliary table'!$B$2:$I$2,1,MATCH('data for graph'!B3,'auxiliary table'!$B$1:$I$1,0)),INDEX('auxiliary table'!$B$2:$I$2,1,B2)+(INDEX('auxiliary table'!$B$2:$I$2,1,B2+1)-INDEX('auxiliary table'!$B$2:$I$2,1,B2))/(INDEX('auxiliary table'!$B$1:$I$1,1,B2+1)-INDEX('auxiliary table'!$B$1:$I$1,1,B2))*(B3-INDEX('auxiliary table'!$B$1:$I$1,1,B2)))\"\n\"MATCH(B9,'auxiliary table'!$B$9:$I$9,1)\"\n\"IF(ISNUMBER(MATCH(B9,'auxiliary table'!$B$9:$I$9,0)),INDEX('auxiliary table'!$B$10:$I$10,1,MATCH('data for graph'!B9,'auxiliary table'!$B$9:$I$9,0)),INDEX('auxiliary table'!$B$10:$I$10,1,B8)+(INDEX('auxiliary table'!$B$10:$I$10,1,B8+1)-INDEX('auxiliary table'!$B$10:$I$10,1,B8))/(INDEX('auxiliary table'!$B$9:$I$9,1,B8+1)-INDEX('auxiliary table'!$B$9:$I$9,1,B8))*(B9-INDEX('auxiliary table'!$B$9:$I$9,1,B8)))\"\n\"MATCH(B15,'auxiliary table'!$B$17:$I$17,1)\"\n\"IF(ISNUMBER(MATCH(B15,'auxiliary table'!$B$17:$I$17,0)),INDEX('auxiliary table'!$B$18:$I$18,1,MATCH('data for graph'!B15,'auxiliary table'!$B$17:$I$17,0)),INDEX('auxiliary table'!$B$18:$I$18,1,B14)+(INDEX('auxiliary table'!$B$18:$I$18,1,B14+1)-INDEX('auxiliary table'!$B$18:$I$18,1,B14))/(INDEX('auxiliary table'!$B$17:$I$17,1,B14+1)-INDEX('auxiliary table'!$B$17:$I$17,1,B14))*(B15-INDEX('auxiliary table'!$B$17:$I$17,1,B14)))\"\n\"SUM(D7:H7)\"\n\"-SUM(K7:M7)\"\n\"IF(OR($B7=\"\"Yes\"\",$B7=\"\"Y\"\"),-F7*Tax_Rate,0)\"\n\"SUM(D15:H15)\"\n\"SUM(D7:D23)\"\n\"IF(SUM(D24:H24)=SUM(I7:I23),SUM(I7:I23),\"\"error\"\")\"\n\"SUM(D27:D31)\"\n\"IF(SUM(D32:H32)=SUM(I27:I31),SUM(I27:I31),\"\"error\"\")\"\n\"IF(CY_lik_Equity=0,\"\"\"\",\"\"Amounts posted to Equity relate to errors affecting any Equity account EXCEPT Retained Earnings\"\")\"\n\"D32+D24\"\n\"IF(SUM(D34:H34)=+I24+I32,+I24+I32,\"\"Error\"\")\"\n\"SUM(F38:H38)\"\n\"SUM(F38:F43)\"\n\"IF(SUM(F44:H44)=SUM(I38:I43),SUM(I38:I43),\"\"error\"\")\"\n\"SUM(F46:F48)\"\n\"IF(SUM(F49:H49)=SUM(I46:I48),SUM(I46:I48),\"\"error\"\")\"\n\"+F49+F44\"\n\"+K44+K49\"\n\"+J34\"\n\"+K50+K34\"\n\"CY_knw_Assets\"\n\"CY_knw_Liabs+CY_tx_knw_Liabs\"\n\"CY_knw_RetEarn_bf+CY_tx_knw_RetEarn_bf+PY_knw_RetEarn+PY_tx_knw_RetEarn\"\n\"+CY_knw_Equity+CY_tx_knw_Equity\"\n\"CY_knw_Income+CY_tx_knw_Income+PY_knw_Income+PY_tx_knw_Income\"\n\"CY_all_Assets\"\n\"+CY_all_Liabs+Tax_Effect_Liabs\"\n\"CY_all_RetEarn_bf+CY_tx_all_RetEarn_bf+PY_all_RetEarn+PY_tx_all_RetEarn\"\n\"+CY_all_Equity+CY_tx_all_Equity\"\n\"+CY_all_Income+CY_tx_all_Income+PY_all_Income+PY_tx_all_Income\"\n\"SUM(D7:H7)\"\n\"-SUM(K7:M7)\"\n\"IF(OR($B7=\"\"Yes\"\",$B7=\"\"Y\"\"),-F7*Tax_Rate,0)\"\n\"SUM(D15:H15)\"\n\"SUM(D7:D23)\"\n\"IF(SUM(D24:H24)=SUM(I7:I23),SUM(I7:I23),\"\"error\"\")\"\n\"SUM(D27:D31)\"\n\"IF(SUM(D32:H32)=SUM(I27:I31),SUM(I27:I31),\"\"error\"\")\"\n\"IF(CY_lik_Equity=0,\"\"\"\",\"\"Amounts posted to Equity relate to errors affecting any Equity account EXCEPT Retained Earnings\"\")\"\n\"D32+D24\"\n\"IF(SUM(D34:H34)=+I24+I32,+I24+I32,\"\"Error\"\")\"\n\"SUM(F38:H38)\"\n\"SUM(F38:F43)\"\n\"IF(SUM(F44:H44)=SUM(I38:I43),SUM(I38:I43),\"\"error\"\")\"\n\"SUM(F46:F48)\"\n\"IF(SUM(F49:H49)=SUM(I46:I48),SUM(I46:I48),\"\"error\"\")\"\n\"+F49+F44\"\n\"+K44+K49\"\n\"+J34\"\n\"+K50+K34\"\n\"CY_knw_Assets\"\n\"CY_knw_Liabs+CY_tx_knw_Liabs\"\n\"CY_knw_RetEarn_bf+CY_tx_knw_RetEarn_bf+PY_knw_RetEarn+PY_tx_knw_RetEarn\"\n\"+CY_knw_Equity+CY_tx_knw_Equity\"\n\"CY_knw_Income+CY_tx_knw_Income+PY_knw_Income+PY_tx_knw_Income\"\n\"CY_all_Assets\"\n\"+CY_all_Liabs+Tax_Effect_Liabs\"\n\"CY_all_RetEarn_bf+CY_tx_all_RetEarn_bf+PY_all_RetEarn+PY_tx_all_RetEarn\"\n\"+CY_all_Equity+CY_tx_all_Equity\"\n\"+CY_all_Income+CY_tx_all_Income+PY_all_Income+PY_tx_all_Income\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"'1. Gen Info'!G3\"\n\"Ending_Inventory Jan\"\n\"Ending_Inventory Feb\"\n\"Ending_Inventory Mar\"\n\"Beginning_Inventory+Production_Qty-Delivery_Reqmts\"\n\"Production_Qty*Production\"\n\"Inventory*(Beginning_Inventory+Ending_Inventory)/2\"\n\"Production_Cost+Inventory_Cost\"\n\"SUM((Total_Cost Jan):(Total_Cost Apr.))\"\n\"InitialInventory+Production_Qty-Delivery_Reqmts\"\n\"Ending_Inventory Jan+Production_Qty-Delivery_Reqmts\"\n\"Ending_Inventory Feb+Production_Qty-Delivery_Reqmts\"\n\"Ending_Inventory Mar+Production_Qty-Delivery_Reqmts\"\n\"Production_Qty*Production\"\n\"Inventory*(InitialInventory+Ending_Inventory)/2\"\n\"Inventory*(Ending_Inventory Jan+Ending_Inventory)/2\"\n\"Inventory*(Ending_Inventory Feb+Ending_Inventory)/2\"\n\"Inventory*(Ending_Inventory Mar+Ending_Inventory)/2\"\n\"Production_Cost+Inventory_Cost\"\n\"SUM((Total_Cost Jan):(Total_Cost Apr.))\"\n\"Ending_Inventory Jan\"\n\"Ending_Inventory Feb\"\n\"Ending_Inventory Mar\"\n\"Beginning_Inventory+Production_Qty-Delivery_Reqmts\"\n\"Production_Qty*Production\"\n\"Inventory*(Beginning_Inventory+Ending_Inventory)/2\"\n\"Production_Cost+Inventory_Cost\"\n\"SUM((Total_Cost Jan):(Total_Cost Apr.))\"\n\"C11-C12\"\n\"C17\"\n\"ROUND(58*E10,0)\"\n\"ROUND(36*E10, 0)\"\n\"ROUND(34*E10, 0)\"\n\"ROUND(59*E10,0)\"\n\"C15+C$8-C16\"\n\"2*$F$2*F12\"\n\"C$4*C$8\"\n\"C$5*C11+C$6*C12\"\n\"C19+C20\"\n\"SUM(C21:F21)\"\n\"F$2*SUM(C16:F16)-G21-G17\"\n\"Inventory_Qty-BackOrder_Qty\"\n\"Ending_Inventory Jan\"\n\"Ending_Inventory Feb\"\n\"Ending_Inventory Mar\"\n\"ROUND(58*Economic_Climate,0)\"\n\"ROUND(36*Economic_Climate, 0)\"\n\"ROUND(34*Economic_Climate, 0)\"\n\"ROUND(59*Economic_Climate,0)\"\n\"Beginning_Inventory+Production_Qty-Delivery_Reqmts\"\n\"2*F$2*F10\"\n\"Production_Qty*Production\"\n\"Inventory*C9+C6*C10\"\n\"Production_Cost+Inventory_Cost\"\n\"SUM((Total_Cost Jan):(Total_Cost Apr.))\"\n\"F2*SUM(Delivery_Reqmts)-G19-G15\"\n\"I12\"\n\"SUM(H32:H40)\"\n\"SUM(H32:H40)\"\n\"SUM(H32:H40)\"\n\"SUM(C14:C15)\"\n\"SUM(C18:C21)\"\n\"+C17+C13\"\n\"SUM(C29:C31)\"\n\"+C330\"\n\"+C36+C34+C28\"\n\"+E36+E28+E34\"\n\"SUM(C55:C60)\"\n\"+E54\"\n\"SUM(C62:C69)\"\n\"SUM(H54:H69)\"\n\"+H70-E120\"\n\"+C72\"\n\"1416\"\n\"+C61+C54+C71\"\n\"SUM(C79:C91)\"\n\"476555.8+3116.33\"\n\"103735.39+26083.05+11314.95\"\n\"119787.63+23296.62+7810.26+39259.95+700.75+9833.86\"\n\"5391.07+1100+386269.71+19556\"\n\"401702.82+57330.93\"\n\"+C92+C78\"\n\"+C74-C100\"\n\"SUM(C122:C125)\"\n\"-26907-7561074\"\n\"+E120+E121\"\n\"+C64\"\n\"+C84\"\n\"SUM(E131:E132)\"\n\"SUM(E138:E141)\"\n\"+C31-E31\"\n\"+C136+C129+C117\"\n\"+E147\"\n\"+C144+C145\"\n\"+C147-C532\"\n\"SUM(C235:C239)\"\n\"+C234-C241\"\n\"+C235-C242\"\n\"SUM(C251:C255)\"\n\"+E277\"\n\"+E280\"\n\"-C289\"\n\"SUM(C266:C268)\"\n\"-16647\"\n\"+C280\"\n\"SUM(C313:C314)\"\n\"+C102\"\n\"SUM(C324:C329)\"\n\"+E344+E335-E338\"\n\"+C352+C362\"\n\"+E352+E356+E362\"\n\"+C469-C467\"\n\"SUM(E473:E490)\"\n\"+C102\"\n\"+C83\"\n\"-C66\"\n\"-C64\"\n\"-C63\"\n\"+E18-C18\"\n\"-E37+C37\"\n\"+C38-E38\"\n\"SUM(C504:C510)\"\n\"+C272\"\n\"+C39\"\n\"+C21\"\n\"+C20\"\n\"+'Financial Statements '!E54\"\n\"+'Financial Statements '!E61\"\n\"+C15+C16\"\n\"+'Financial Statements '!C100\"\n\"+C17-C18\"\n\"+'Financial Statements '!C14\"\n\"-'Financial Statements '!C34\"\n\"+'Financial Statements '!C17-'Financial Statements '!C36\"\n\"SUM(E23:E27)\"\n\"+'Financial Statements '!C117\"\n\"+'Financial Statements '!C129\"\n\"+'Financial Statements '!C136\"\n\"SUM(C32:C34)\"\n\"+'Financial Statements '!C28/'Financial Statements '!C23\"\n\"+'Financial Statements '!C17/'Financial Statements '!C36\"\n\"SUM(B7:B19)\"\n\"SUM(H3:H26)\"\n\"SUM(H3:H49)\"\n\"+B6\"\n\"+G6\"\n\"SUM(F5:F6)\"\n\"+G6\"\n\"+F7\"\n\"+J7\"\n\"SUM(E11:E13)\"\n\"VLOOKUP(D9,SGLDATA!$A$6:$B$405,2,FALSE)\"\n\"VLOOKUP(D44,SGLDATA!$A$6:B$405,2,FALSE)\"\n\"1268+299\"\n\"2970+7\"\n\"3465+84\"\n\"3565-14\"\n\"79+10\"\n\"269+1\"\n\"9+9\"\n\"16\"\n\"12\"\n\"13\"\n\"12+14\"\n\"8\"\n\"24+5\"\n\"3563+33\"\n\"2058+225\"\n\"1399+243\"\n\"958+459\"\n\"2444+527\"\n\"49\"\n\"19\"\n\"596+51\"\n\"4039+47\"\n\"499+79\"\n\"670+20\"\n\"228+35\"\n\"1244+577\"\n\"662+54\"\n\"2146+164\"\n\"212+36\"\n\"2745+209\"\n\"2894+303\"\n\"1\"\n\"1769+245\"\n\"596+172\"\n\"89+16\"\n\"37+4\"\n\"13+80\"\n\"4\"\n\"744+64\"\n\"527+85\"\n\"774+174\"\n\"9\"\n\"30\"\n\"18\"\n\"58+9\"\n\"2040+8\"\n\"4687+81\"\n\"292+80\"\n\"648+149\"\n\"40+1161\"\n\"264+74\"\n\"74+10\"\n\"134+7\"\n\"3+98\"\n\"21+2\"\n\"246+2\"\n\"508+444\"\n\"1401+13\"\n\"10\"\n\"1501+233\"\n\"244+163\"\n\"106+9\"\n\"11+112\"\n\"19+442\"\n\"6\"\n\"555+265\"\n\"370+28\"\n\"536+168\"\n\"412\"\n\"1166+24\"\n\"828+13\"\n\"20\"\n\"29+54\"\n\"1866+6\"\n\"69+19\"\n\"2077+681\"\n\"2781+558\"\n\"1435+31\"\n\"3488+302\"\n\"4825+57\"\n\"92+18\"\n\"12+46\"\n\"149+22\"\n\"14\"\n\"82+13\"\n\"141+29\"\n\"15+100\"\n\"97+22\"\n\"509+4246\"\n\"103\"\n\"38\"\n\"35+6\"\n\"177+36\"\n\"19+1\"\n\"122\"\n\"50\"\n\"113+8\"\n\"79\"\n\"46+7\"\n\"3\"\n\"5\"\n\"25+743\"\n\"39+1646\"\n\"1873+29\"\n\"114+486\"\n\"4697+335\"\n\"122+2245\"\n\"549+15\"\n\"1434+197\"\n\"159+2\"\n\"807+11\"\n\"64+1109\"\n\"1439+332\"\n\"295+2130\"\n\"118+1760\"\n\"150+1420\"\n\"241+1783\"\n\"235+2072\"\n\"313+2792\"\n\"271+2475\"\n\"228+2507\"\n\"103+3345\"\n\"476+3576\"\n\"221+2484\"\n\"101+1440\"\n\"64+840\"\n\"6061+1041\"\n\"SUM(B3:B112)\"\n\"SUM(D189:D193)\"\n\"SUM(H189:H192)\"\n\"+D196-D199-D200-D201\"\n\"+H196-H199\"\n\"SUM(C228:C230)\"\n\"(L3+M3)/2\"\n\"B3/B4\"\n\"M4\"\n\"Q6\"\n\"N6\"\n\"L8+M8\"\n\"52*7\"\n\"(B7/B8)*B9\"\n\"G14\"\n\"(2*B12)/(B13+B14)\"\n\"B8\"\n\"B19\"\n\"L3/L9\"\n\"B22/B23*100\"\n\"(L12/L14)*L10\"\n\"(M12/M14)*L10\"\n\"(2*L8)/(L6+L7)\"\n\"(2*L14)/(L4+L5)\"\n\"L13/L4\"\n\"L13/L17\"\n\"L11/L15\"\n\"L13/L15\"\n\"F17\"\n\"L18/L15\"\n\"L21/L15\"\n\"B26\"\n\"L13/L20\"\n\"L19/(L34*4)\"\n\"N19/(N34*2)\"\n\"L19/(L15/L20)\"\n\"(L15-L16)/L16\"\n\"(L34-M34)/M34\"\n\"L38/L37\"\n\"L20*L19\"\n\"L5-K45\"\n\"N14\"\n\"L45/M45\"\n\"B35\"\n\"V15\"\n\"R15\"\n\"N15\"\n\"R15\"\n\"V13\"\n\"R12\"\n\"N13\"\n\"R13\"\n\"V5\"\n\"R4\"\n\"B34\"\n\"N5\"\n\"R4\"\n\"V24\"\n\"R24\"\n\"N24\"\n\"R24\"\n\"B50/(B51/B52)\"\n\"U50/U48\"\n\"V29\"\n\"R29\"\n\"B50/(B35/B52)\"\n\"N29\"\n\"R29\"\n\"B51\"\n\"R28\"\n\"N28\"\n\"R28\"\n\"B47\"\n\"(B62-B61)/B61*100\"\n\"B59\"\n\"B67/B63\"\n\"SUM(B8-C8+D8)\"\n\"E8-F8\"\n\"A8+1\"\n\"E8\"\n\"SUM(C8:C37)\"\n\"SUM(G8:G37)\"\n\"SQRT(SUM(G8:G37)*SUM(G8:G37))\"\n\"0.01*C39+130\"\n\"IF(H40>C41,\"\"FAIL\"\",\"\"PASS\"\")\"\n\"0.005*C39+130\"\n\"IF(H40>C44,\"\"FAIL\"\",\"\"PASS\"\")\"\n\"G2-D2\"\n\"G2-(D2+E2)\"\n\"G2+H2-(D2+E2)\"\n\"(B10)\"\n\"SUM(B10,C10)\"\n\"SUM(B10,C10,D10)\"\n\"SUM(B10:E10)\"\n\"SUM(B10:F10)\"\n\"SUM(B10:G10)\"\n\"SUM(B10:H10)\"\n\"SUM(B10:I10)\"\n\"SUM(B10:J10)\"\n\"SUM(B10:K10)\"\n\"E6-F6-G6\"\n\"SUM(E6:E53)\"\n\"SUM(E5:G5)\"\n\"H9\"\n\"H8+H5+H6\"\n\"H7\"\n\"'Company 1'!A1\"\n\"'Company 2'!A1\"\n\"'Company 3'!A1\"\n\"'Company 4'!A1\"\n\"'Company 5'!A1\"\n\"'Company 6'!A1\"\n\"AVERAGE(C5:H5)\"\n\"'Company 1'!B7\"\n\"'Company 2'!B7\"\n\"'Company 3'!B7\"\n\"'Company 4'!B7\"\n\"'Company 5'!B7\"\n\"'Company 6'!B7\"\n\"'Company 1'!B52\"\n\"'Company 2'!B52\"\n\"'Company 3'!B52\"\n\"'Company 4'!B52\"\n\"'Company 5'!B52\"\n\"'Company 6'!B52\"\n\"'Company 1'!B11\"\n\"'Company 2'!B11\"\n\"'Company 3'!B11\"\n\"'Company 4'!B11\"\n\"'Company 5'!B11\"\n\"'Company 6'!B11\"\n\"'Company 1'!B54\"\n\"'Company 2'!B54\"\n\"'Company 3'!B54\"\n\"'Company 4'!B54\"\n\"'Company 5'!B54\"\n\"'Company 6'!B54\"\n\"'Company 1'!B12\"\n\"'Company 2'!B12\"\n\"'Company 3'!B12\"\n\"'Company 4'!B12\"\n\"'Company 5'!B12\"\n\"'Company 6'!B12\"\n\"'Company 1'!B13\"\n\"'Company 2'!B13\"\n\"'Company 3'!B13\"\n\"'Company 4'!B13\"\n\"'Company 5'!B13\"\n\"'Company 6'!B13\"\n\"'Company 1'!B57\"\n\"'Company 2'!B57\"\n\"'Company 3'!B57\"\n\"'Company 4'!B57\"\n\"'Company 5'!B57\"\n\"'Company 6'!B57\"\n\"'Company 1'!B66+'Company 1'!B68-'Company 1'!B70\"\n\"'Company 2'!B66+'Company 2'!B68-'Company 2'!B70\"\n\"'Company 3'!B66+'Company 3'!B68-'Company 3'!B70\"\n\"'Company 4'!B66+'Company 4'!B68-'Company 4'!B70\"\n\"'Company 5'!B66+'Company 5'!B68-'Company 5'!B70\"\n\"'Company 6'!B66+'Company 6'!B68-'Company 6'!B70\"\n\"'Company 1'!B56\"\n\"'Company 2'!B56\"\n\"'Company 3'!B56\"\n\"'Company 4'!B56\"\n\"'Company 5'!B56\"\n\"'Company 6'!B56\"\n\"'Company 1'!B54\"\n\"'Company 2'!B54\"\n\"'Company 3'!B54\"\n\"'Company 4'!B54\"\n\"'Company 5'!B54\"\n\"'Company 6'!B54\"\n\"'Company 1'!B71\"\n\"'Company 2'!B71\"\n\"'Company 3'!B71\"\n\"'Company 4'!B71\"\n\"'Company 5'!B71\"\n\"'Company 6'!B71\"\n\"'Company 1'!B76\"\n\"'Company 2'!B76\"\n\"'Company 3'!B76\"\n\"'Company 4'!B76\"\n\"'Company 5'!B76\"\n\"'Company 6'!B76\"\n\"'Company 1'!B4\"\n\"'Company 2'!B4\"\n\"'Company 3'!B4\"\n\"'Company 4'!B4\"\n\"'Company 5'!B4\"\n\"'Company 6'!B4\"\n\"'Company 1'!B80\"\n\"'Company 2'!B80\"\n\"'Company 3'!B80\"\n\"'Company 4'!B80\"\n\"'Company 5'!B80\"\n\"'Company 6'!B80\"\n\"'Company 1'!B14\"\n\"'Company 2'!B14\"\n\"'Company 3'!B14\"\n\"'Company 4'!B14\"\n\"'Company 5'!B14\"\n\"'Company 6'!B14\"\n\"'Company 1'!B85\"\n\"'Company 2'!B85\"\n\"'Company 3'!B85\"\n\"'Company 4'!B85\"\n\"'Company 5'!B85\"\n\"'Company 6'!B85\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"(B18-B19)/B18\"\n\"B24/B18\"\n\"B28/B18\"\n\"B28/B38\"\n\"B28/B41\"\n\"B20/B18\"\n\"B21/B18\"\n\"B22/B18\"\n\"1/(B30/((B35+C35-B37-C37)/2))\"\n\"B26/B25\"\n\"B18/(B15)\"\n\"B18/B32\"\n\"B32/(B18/365)\"\n\"B19/B33\"\n\"B33/(B19/365)\"\n\"B19/B39\"\n\"B39/(B19/365)\"\n\"B18/B38\"\n\"365/B71\"\n\"B34/B40\"\n\"B38/B41\"\n\"B45/B38\"\n\"(B10*100)/B5\"\n\"(B41)/B42\"\n\"B4/B81\"\n\"B29/B18\"\n\"B31/B30\"\n\"B47/B38\"\n\"B44/B42\"\n\"1-(B48/B18)\"\n\"B49/B18\"\n\"D83\"\n\"D96\"\n\"D98+D99+D102+D103+D104+D105+D106+D107+D109+D110+D111+D112+D113\"\n\"D100+D101\"\n\"D108\"\n\"D132\"\n\"D139+D144\"\n\"D152\"\n\"SUM(D8:D17)\"\n\"SUM(D19:D21)\"\n\"D156\"\n\"D155+D157+D158+D159+D160\"\n\"D161\"\n\"SUM(D24:D29)\"\n\"D170\"\n\"D30+D32\"\n\"D175\"\n\"D18+D22+D34+D36\"\n\"D183+D184+D185+D187+D188+D189+D190+D191+D192+D193+D194+D195+D196+D197+D198\"\n\"D209\"\n\"D186\"\n\"D221+D253\"\n\"D260\"\n\"SUM(D42:D47)\"\n\"-D273+D275+D277\"\n\"D273\"\n\"D278\"\n\"D49+D57\"\n\"NOW()\"\n\"0\"\n\"700\"\n\"33654.45\"\n\"-33654.45\"\n\"-33071.43\"\n\"105041.72\"\n\"-21859.58\"\n\"17798.99\"\n\"-2205.94\"\n\"900\"\n\"-6945.61\"\n\"4527.51\"\n\"92421.7\"\n\"743105.69\"\n\"-290626.07\"\n\"167938.93\"\n\"SUM(C74:C82)\"\n\"1397749.25\"\n\"2130000\"\n\"1451.4\"\n\"-3665.43\"\n\"-12574.18\"\n\"30132.06\"\n\"319.7\"\n\"14853.9\"\n\"12227.69\"\n\"1260374.99\"\n\"114195.12\"\n\"-12966.32\"\n\"54558.96\"\n\"6712.66\"\n\"-3866.57\"\n\"4859.7\"\n\"4011.83\"\n\"30230.45\"\n\"50395.93\"\n\"-55347.74\"\n\"2299.36\"\n\"1031.88\"\n\"4170.17\"\n\"-8947.77\"\n\"311.5\"\n\"108.5\"\n\"21762.9\"\n\"46642.5\"\n\"122159.2\"\n\"-21626.52\"\n\"SUM(C99:C113)\"\n\"-93.65\"\n\"35967.39\"\n\"39568.97\"\n\"-187.3\"\n\"11902.98\"\n\"18233.82\"\n\"326.03\"\n\"19030.52\"\n\"18704.49\"\n\"4203.92\"\n\"39114.31\"\n\"30531.74\"\n\"5101.35\"\n\"5194.35\"\n\"46200.18\"\n\"86101.47\"\n\"99443.57\"\n\"5798.24\"\n\"2173.77\"\n\"-7087.64\"\n\"-3543.82\"\n\"SUM(C135:C138)\"\n\"-500\"\n\"SUM(C142:C143)\"\n\"-5897.9\"\n\"-81442.7\"\n\"27408.45\"\n\"5650\"\n\"-3031.09\"\n\"-31090.44\"\n\"SUM(C147:C151)\"\n\"57399.18\"\n\"63712.95\"\n\"92127.66\"\n\"60000\"\n\"869022.26\"\n\"372104.27\"\n\"3869.64\"\n\"373938.32\"\n\"367571.27\"\n\"SUM(C155:C161)\"\n\"-1591.67\"\n\"-134995.52\"\n\"-123853.83\"\n\"-3425\"\n\"-828635.8\"\n\"-804660.8\"\n\"-6666.67\"\n\"-344963.33\"\n\"-298296.64\"\n\"-33500.01\"\n\"-30000.01\"\n\"-733.34\"\n\"-91344.77\"\n\"-86211.39\"\n\"394974.85\"\n\"-385887.45\"\n\"C83+C96+C114+C132+C139+C144+C152+C162+C170+C175\"\n\"12654.77\"\n\"33994.93\"\n\"93119.64\"\n\"466.5\"\n\"174.5\"\n\"2680\"\n\"3630\"\n\"34750\"\n\"-9626.55\"\n\"-2230\"\n\"-117.47\"\n\"-497.05\"\n\"-25513.8\"\n\"-0.01\"\n\"-2592.5\"\n\"442.5\"\n\"2072.5\"\n\"7397.5\"\n\"196\"\n\"672\"\n\"883.34\"\n\"2673.34\"\n\"1025.85\"\n\"4282.38\"\n\"SUM(C182:C198)\"\n\"-23311.4\"\n\"88491.5\"\n\"75339.17\"\n\"79458.15\"\n\"1017.8\"\n\"210.15\"\n\"922\"\n\"833.34\"\n\"26666.84\"\n\"20833.46\"\n\"-5000\"\n\"16720.88\"\n\"25881.72\"\n\"5113.34\"\n\"5229.26\"\n\"25112.02\"\n\"5037.5\"\n\"SUM(C213:C220)\"\n\"2654\"\n\"2614.63\"\n\"2595.17\"\n\"2575.85\"\n\"2561.79\"\n\"2514.93\"\n\"2506.32\"\n\"2500\"\n\"2991.04\"\n\"462.24\"\n\"2035.63\"\n\"1791.68\"\n\"2817.48\"\n\"2105.41\"\n\"2520.2\"\n\"2502.85\"\n\"-136.07\"\n\"2734.52\"\n\"SUM(C225:C252)\"\n\"C221+C253\"\n\"13196\"\n\"12808.2\"\n\"C199+C209+C221+C253+C260\"\n\"-16777.29\"\n\"24791.9\"\n\"69659.38\"\n\"6062.97\"\n\"1000\"\n\"47940.15\"\n\"5329.42\"\n\"1195951.66\"\n\"1158645.72\"\n\"-5329.42\"\n\"2037447.01\"\n\"2000159.35\"\n\"-337984.12\"\n\"235932.79\"\n\"74593.6\"\n\"C275+C279\"\n\"3368575.78\"\n\"C262+C281\"\n\"3855164.52\"\n\"H285-H286\"\n\"D178\"\n\"-D283\"\n\"C8*D8\"\n\"C8-F8\"\n\"I8+C9-F9\"\n\"C6*D6\"\n\"E6*0.062\"\n\"E6*0.0145\"\n\"(E6-K6)*0.15\"\n\"E6*0.05\"\n\"E6*0.01\"\n\"SUM(F6:K6)\"\n\"E6-L6\"\n\"SUM(F7:J7)\"\n\"SUM(E6:E35)\"\n\"E19-E20\"\n\"C23*0.124\"\n\"C24*0.029\"\n\"E22+E23+E24\"\n\"SUM(E32,E33)\"\n\"E25\"\n\"E34\"\n\"J9*12\"\n\"SUM(E9:E48)\"\n\"B9-B10\"\n\" 48.2%\"\n\"E14*(1+E15)/E16\"\n\"G18*0.1694\"\n\"SUM(G18:G19)\"\n\"F17*G20\"\n\"G22+G23\"\n\"G20/G24\"\n\"H21/G24\"\n\"SUM(H21:H21)\"\n\"SUM(G34:G39)\"\n\"(G25-(G40/60))/G25\"\n\"(G25-(H40/60))/G25\"\n\"(G25-(I40/60))/G25\"\n\"G24\"\n\"F17\"\n\"I27-(G40/60*F42*F43)\"\n\"I27-(H40/60*F42*F43)\"\n\"I27-(I40/60*F42*F43)\"\n\"SUM(G44:G44)\"\n\"'Benefit Pct Calculation'!C23\"\n\"$G$45*C55\"\n\"SUM(C56:G56)\"\n\"$H$45*C55\"\n\"$I$45*C55\"\n\"AVERAGE(F13:F14)\"\n\"F15+F19\"\n\"G23*F20\"\n\"H23*F20\"\n\"I23*F20\"\n\"F20-G24\"\n\"F20-H24\"\n\"F20-I24\"\n\"G32*G31\"\n\"G21/G34*G25\"\n\"G25-G35\"\n\"G36*G38\"\n\"G39\"\n\"'Benefit Pct Calculation'!C23\"\n\"C45*G40\"\n\"D45*G40\"\n\"G40*E45\"\n\"(G33+G36+G40)*F45\"\n\"G40*G45\"\n\"SUM(C46:G46)\"\n\"C45*H40\"\n\"D45*H40\"\n\"E45*H40\"\n\"(H33+H40+H36)*F45\"\n\"G45*H40\"\n\"C45*I40\"\n\"D45*I40\"\n\"E45*I40\"\n\"(I33+I36+I40)*F45\"\n\"G45*I40\"\n\"E10*(1+E11)/E12\"\n\"0.1694*G14\"\n\"SUM(G14:G15)\"\n\"G19*F13\"\n\"H19\"\n\"G28*I20\"\n\"H28*I20\"\n\"I28*I20\"\n\"G29\"\n\"'Benefit Pct Calculation'!C23\"\n\"G30*C35\"\n\"G30*D35\"\n\"E35*G30\"\n\"F35*G30\"\n\"G35*G30\"\n\"SUM(C36:G36)\"\n\"C35*H30\"\n\"D35*H30\"\n\"E35*H30\"\n\"F35*H30\"\n\"G35*H30\"\n\"C35*I30\"\n\"D35*I30\"\n\"E35*I30\"\n\"F35*I30\"\n\"G35*I30\"\n\"E13*D10\"\n\"SUM(E13:F13)\"\n\"E13*0.1694\"\n\"E16*D10\"\n\"0.1694*E14\"\n\"SUM(E13:E17)\"\n\"E27*(1+E28)/E29\"\n\"E32/60*E30\"\n\"G18*E33\"\n\"G18*E36*E37\"\n\"G18*E40*E41*E42\"\n\"F34+F38+F43\"\n\"G51*G44\"\n\"G44*H51\"\n\"G44*I51\"\n\"G52\"\n\"'Benefit Pct Calculation'!C23\"\n\"$G$53*C58\"\n\"$G$53\"\n\"SUM(C59:G59)\"\n\"$H$53*C58\"\n\"$H$53\"\n\"$I$53*C58\"\n\"$I$53\"\n\"SUM(C8:G8)\"\n\"SUM(C8:C18)\"\n\"C19\"\n\"C19+D19\"\n\"C19+D19+E19\"\n\"C19+D19+E19+F19\"\n\"F21\"\n\"C19/H19\"\n\"SUM(C19:D19)/H19\"\n\"SUM(C19:E19)/H19\"\n\"SUM(C19:F19)/H19\"\n\"'Processing PO''s'!H56\"\n\"'Processing PO''s'!H57\"\n\"'Processing PO''s'!H58\"\n\"'Inventory Mgt.'!H46\"\n\"'Inventory Mgt.'!H47\"\n\"'Inventory Mgt.'!H48\"\n\"'Vendor Files'!H36\"\n\"'Vendor Files'!H37\"\n\"'Vendor Files'!H38\"\n\"'Document Management'!H59\"\n\"'Document Management'!H60\"\n\"'Document Management'!H61\"\n\"SUM(C5:C8)\"\n\"B$8*B$9*$G8/12+SUM(B$29:B$33)\"\n\"C$8*C$9*$G8/12+SUM(C$29:C$33)+IF(($G8-C$13<0),C$12,C$12+($G8-C$13)*C$14)\"\n\"IF((C10-C13<0),C12,C12+(C10-C13)*C14)\"\n\"B16+(B10*B17)\"\n\"B8*B9*B10/12\"\n\"B18*B19\"\n\"B18*B20*B8/100\"\n\"+B21\"\n\"B8*B22\"\n\"B23\"\n\"SUM(B27:B33)\"\n\"C26+C28+C29+C30+C31+C32+C33\"\n\"D27+D28+D31+D32+D33\"\n\"E26+E28+E31+E32+E33\"\n\"B8+B34\"\n\"3000*C4\"\n\"2100*C5\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2001\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2001\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2002\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2002\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2003\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2003\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2004\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2004\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2005\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2001\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2001\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2002\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2002\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2003\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2003\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$I$4:$I$72,\"\"=2004\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2004\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUMIF('Overall Inventory'!$J$4:$J$72,\"\"=2005\"\",'Overall Inventory'!$K$4:$K$72)\"\n\"SUM(C22:I22)\"\n\"SUM(C27:C38)\"\n\"(C54+D54-E54)\"\n\"SUM(C54:C64)\"\n\"(B67+C67-D67+E67)\"\n\"(C70-D70+E70)\"\n\"SUM(C67:C73)\"\n\"(D65+D74)\"\n\"SUM(C85:F85)\"\n\"($C$85)\"\n\"($D$85)\"\n\"($E$85)\"\n\"($F$85)\"\n\"($B$85)\"\n\"SUM(C90:C94)\"\n\"($F$54)\"\n\"(B105+C105+D105-E105)\"\n\"($F$55)\"\n\"($F$56)\"\n\"($F$57)\"\n\"($F$58)\"\n\"($F$59)\"\n\"($F$60)\"\n\"($F$61)\"\n\"($F$62)\"\n\"($F$63)\"\n\"($F$64)\"\n\"SUM(B105:B117)\"\n\"($F$67)\"\n\"($F$68)\"\n\"($F$69)\"\n\"($F$70)\"\n\"($F$71)\"\n\"($F$72)\"\n\"($F$73)\"\n\"(D118+D132)\"\n\"IF(C25=C71,D71,IF(C25=C72,D72,IF(C25=C73,D73,0)))\"\n\"($B25*$D25)\"\n\"IF(C27=C71,D71,IF(C27=C72,D72,IF(C27=C73,D73,0)))\"\n\"IF(C28=C71,D71,IF(C28=C72,D72,IF(C28=C73,D73,0)))\"\n\"SUM(B27:B29)\"\n\"IF(C31=C71,D71,IF(C31=C72,D72,IF(C31=C73,D73,0)))\"\n\"(B31*D31)\"\n\"IF(C32=C71,D71,IF(C32=C72,D72,IF(C32=C73,D73,0)))\"\n\"IF(C33=C71,D71,IF(C33=C72,D72,IF(C33=C73,D73,0)))\"\n\"SUM(B30:B33)+B25\"\n\"IF(C35=C71,D71,IF(C35=C72,D72,IF(C35=C73,D73,0)))\"\n\"(B34+B35)\"\n\"(B38)\"\n\"J36\"\n\"IF(C47=C71,D71,IF(C47=C72,D72,IF(C47=C73,D73,0)))\"\n\"IF(C48=C71,D71,IF(C48=C72,D72,IF(C48=C73,D73,0)))\"\n\"IF(C49=C71,D71,IF(C49=C72,D72,IF(C49=C73,D73,0)))\"\n\"IF(C51=C71,D71,IF(C51=C72,D72,IF(C51=C73,D73,0)))\"\n\"IF(C52=C71,D71,IF(C52=C72,D72,IF(C52=C73,D73,0)))\"\n\"IF(C53=C71,D71,IF(C53=C72,D72,IF(C53=C73,D73,0)))\"\n\"IF(C54=C71,D71,IF(C54=C72,D72,IF(C54=C73,D73,0)))\"\n\"IF(C55=C71,D71,IF(C55=C72,D72,IF(C55=C73,D73,0)))\"\n\"IF(C56=C71,D71,IF(C56=C72,D72,IF(C56=C73,D73,0)))\"\n\"IF(C57=C71,D71,IF(C57=C72,D72,IF(C57=C73,D73,0)))\"\n\"SUM(B47:B57)\"\n\"IF(C60=C71,D71,IF(C60=C72,D72,IF(C60=C73,D73,0)))\"\n\"IF(C61=C71,D71,IF(C61=C72,D72,IF(C61=C73,D73,0)))\"\n\"IF(C62=C71,D71,IF(C62=C72,D72,IF(C62=C73,D73,0)))\"\n\"IF(C63=C71,D71,IF(C63=C72,D72,IF(C63=C73,D73,0)))\"\n\"SUM(B60:B63)\"\n\"IF(C65=C71,D71,IF(C65=C72,D72,IF(C65=C73,D73,0)))\"\n\"(B44)\"\n\"SUM(J65:J66)\"\n\"(B64+B67)\"\n\"SUM(B5:M5)\"\n\"SUM(B9)\"\n\"SUM(B5:B10)\"\n\"SUM(B14:B34)\"\n\"SUM(B11-B36)\"\n\"B38\"\n\"B39\"\n\"SUM(B41,C38)\"\n\"CASHnew.XLS!M41\"\n\"SUM(B6:B10)\"\n\"'INC-STMT.XLS'!B31\"\n\"SUM(G11:G13)+G5+G6\"\n\"CASHnew.XLS!Drawings\"\n\"SUM(B14:B15)\"\n\"C11+B14+B15\"\n\"SUM(G14-F15)\"\n\"CASH_YR2.XLS!$N$41\"\n\"SUM(B26:B27)\"\n\"CASH_YR2.XLS!$N$10-SUM(F5:F6)+SUM(B9:B10)+SUM(B14:B15)\"\n\"'INC-STMT.XLS'!$C$31\"\n\"SUM(F31:F32)+G27\"\n\"CASH_YR2.XLS!N34\"\n\"C31+B33+B34\"\n\"G33-F34\"\n\"CASH_YR3.XLS!$N$43\"\n\"SUM(G43:G44)\"\n\"CASH_YR3.XLS!N12-SUM(F25:F26)+SUM(B27:B29)+SUM(B33:B34)\"\n\"'INC-STMT.XLS'!$D$31\"\n\"SUM(F49:F50)+F43\"\n\"Tea_Room_Sales+Yarn_Shop_Sales\"\n\"SUM(CASH_YR2.XLS!$N$5:$N$6)\"\n\"SUM(CASH_YR3.XLS!$N$6:$N$8)\"\n\"(Yarn_Shop_Sales*0.5)+Yarn_Inventory\"\n\"CASH_YR2.XLS!N16+(CASH_YR2.XLS!N6*0.5)\"\n\"CASH_YR3.XLS!N18+CASH_YR3.XLS!N7*0.5\"\n\"SUM(B4-B5)\"\n\"CASHnew.XLS!N17\"\n\"CASH_YR2.XLS!N17\"\n\"CASH_YR3.XLS!N19\"\n\"Misc.\"\n\"CASH_YR2.XLS!N33\"\n\"CASH_YR3.XLS!N35\"\n\"CASH_YR2.XLS!N33\"\n\"CASH_YR3.XLS!N35\"\n\"SUM(B10:B27)\"\n\"SUM(B6-B29)\"\n\"SUM(B5:M5)\"\n\"SUM(C27:M27)\"\n\"SUM(B14:B36)\"\n\"SUM(B11-B38)\"\n\"B40\"\n\"B41\"\n\"SUM(B43,C40)\"\n\"SUM(B6:M6)\"\n\"SUM(B10)\"\n\"SUM(B16:B38)\"\n\"SUM(B13-B40)\"\n\"B42\"\n\"B43\"\n\"SUM(B45,C42)\"\n\"SUM(B3:B8)\"\n\"SUM(B13:B29)\"\n\"SUM(B33:B34)\"\n\"B30+B35\"\n\"B10-B38\"\n\"C6+C7-C8\"\n\"C12+SUM(C13:C15)\"\n\"C16-C17\"\n\"C9-C18\"\n\"SUM(C24:C25)\"\n\"SUM(C28:C37)\"\n\"C26+C38\"\n\"C20-C39\"\n\"C40+C45\"\n\"SUM(C7:C10)\"\n\"SUM(C14:C17)-C18\"\n\"C11+C19+C21+C23\"\n\"SUM(C29:C33)\"\n\"C37+C38\"\n\"'Statement of Capital'!B13\"\n\"SUM(C42:C43)\"\n\"C34+C39+C44\"\n\"'Income Statement'!C49\"\n\"B7+B9+B10-B11\"\n\"SUM(D6:D11)\"\n\"SUM(D15:D16)\"\n\"D13-D17\"\n\"D12/D18\"\n\"D44+D45\"\n\"D46/D53\"\n\"D19\"\n\"D48\"\n\"D71*D72\"\n\"D98\"\n\"D91/D92\"\n\"D88/D93\"\n\"D96-D97\"\n\"'Income Statement'!C9\"\n\"'Income Statement'!C9\"\n\"B4/B5\"\n\"B6-1\"\n\"B7\"\n\"'Income Statement'!C49\"\n\"'Income Statement'!C9\"\n\"C5/C6\"\n\"'Income Statement'!C9\"\n\"'Balance Sheet'!C24\"\n\"'Balance Sheet'!C24\"\n\"'Balance Sheet'!C44\"\n\"Calculations!C9\"\n\"Calculations!C18\"\n\"B4*B5\"\n\"Calculations!C7\"\n\"B6*B10\"\n\"B12\"\n\"'Acual Rate'!B9\"\n\"'Sustainable Rate'!B13\"\n\"SQRT(A12^2*D12^2+C12*B12^2)\"\n\"SQRT((2*$B$4*250*A12)/($B$5*$B$3))\"\n\"(1-$B$2)*(F12/E12)\"\n\"VLOOKUP(G12,O12:P41,2)\"\n\"H12*E12\"\n\"I12+F12/2\"\n\"A12+1\"\n\"B12\"\n\"A36*B36/365\"\n\"SQRT(C36)\"\n\"$B$30*365/$B$27\"\n\"E36/(E36+$B$28)\"\n\"SQRT((2*$B$29*A36)/($B$27*$B$28))\"\n\"0.7071*LN(D36/(2*1.4142*G36*(1-F36)))\"\n\"H36*D36+C36\"\n\"I36+G36\"\n\"AVERAGE(A55:A64)\"\n\"STDEV(A55:A64)\"\n\"F5/2/365\"\n\"(F3/F2-F7)/SQRT(F4)\"\n\"($F$7+SQRT(B15)*$F$8)*$F$2\"\n\"$F$2/D15\"\n\"B15+1\"\n\"B4/B5\"\n\"365/(B4+B5)\"\n\"B3\"\n\"D9*E9*12\"\n\"+F9/12\"\n\"D9/B4*7/6\"\n\"D9/B5*7/6\"\n\"SUM(F9:F13)\"\n\"F15/D9\"\n\"+F15/12\"\n\"+F15/12/(D9/1000)\"\n\"D9*B7\"\n\"D20*E20\"\n\"+F15+F20\"\n\"F22/D20\"\n\"'Input Sheet'!B3\"\n\"'Input Sheet'!B4\"\n\"'Input Sheet'!B6\"\n\"365/(N38+O38)\"\n\"365/(N60+O60)\"\n\"A9/C9*7/6\"\n\"A17/2\"\n\"A17*E9\"\n\"C17*E9\"\n\"IF($C$17+(A24/($C$9*6/7))<$A$17,($C$17+(A24/($C$9*6/7))),$A$17)\"\n\"IF($G$17+(($A$9-A24)/($C$9*6/7/$E$9))<$E$17,$G$17+(($A$9-A24)/($C$9*6/7/$E$9)),$E$17)\"\n\"A24/38*35.494\"\n\"(A25-A24)/C25\"\n\"(A25-A24)/E24\"\n\"$A$37*0.1\"\n\"$A$37*0.199\"\n\"$A$37*0.2\"\n\"$A$37*0.3\"\n\"$A$37*0.4\"\n\"$A$37*0.499\"\n\"$A$37*0.5\"\n\"$A$37*0.6\"\n\"$A$37*0.7\"\n\"$A$37*0.799\"\n\"$A$37*0.8\"\n\"$A$37*0.9\"\n\"$A$9\"\n\"SUM(N24:N36)\"\n\"SUM(O24:O37)\"\n\"A24\"\n\"AVERAGE(C24,C25,C27)\"\n\"C46\"\n\"AVERAGE(C27,C28,C29,C31)\"\n\"AVERAGE(E35:E37)\"\n\"E57\"\n\"365/(M38+N38)\"\n\"365/(M60+N60)\"\n\"A9/C9*7/6\"\n\"A17/2\"\n\"A17*E9\"\n\"C17*E9\"\n\"IF($C$17+(A24/($C$9*6/7))<$A$17,($C$17+(A24/($C$9*6/7))),$A$17)\"\n\"IF($G$17+(($A$9-A24)/($C$9*6/7/$E$9))<$E$17,$G$17+(($A$9-A24)/($C$9*6/7/$E$9)),$E$17)\"\n\"A24/38*35.494\"\n\"(A25-A24)/AVERAGE(C24:C25)\"\n\"(A25-A24)/AVERAGE(E24:E25)\"\n\"$A$37*0.1\"\n\"$A$37*0.199\"\n\"SUM(M24:M26)\"\n\"$A$37*0.2\"\n\"$A$37*0.3\"\n\"$A$37*0.4\"\n\"$A$37*0.499\"\n\"SUM(M27:M30)\"\n\"SUM(N24:N30)\"\n\"$A$37*0.5\"\n\"$A$37*0.6\"\n\"$A$37*0.7\"\n\"$A$37*0.799\"\n\"SUM(N31:N34)\"\n\"$A$37*0.8\"\n\"$A$37*0.9\"\n\"SUM(M31:M36)\"\n\"SUM(N35:N36)\"\n\"$A$9\"\n\"SUM(M24:M36)\"\n\"SUM(N24:N37)\"\n\"A24\"\n\"+$A46/$A$9\"\n\"AVERAGE(C24,C25,C27)*0.571\"\n\"E24*1.716\"\n\"(A47-A46)/C46\"\n\"(A47-A46)/E46\"\n\"C46\"\n\"AVERAGE(C27,C28,C29,C30)*1.21\"\n\"AVERAGE(E$29,E$31,E$32)*1.065\"\n\"AVERAGE(E$35,E$36,E$37)*0.571\"\n\"AVERAGE(C57:C59)\"\n\"AVERAGE(C53:C56)\"\n\"AVERAGE(C50:C52)\"\n\"AVERAGE(C49:C50)\"\n\"AVERAGE(C46:C48)\"\n\"'Input Sheet'!B7\"\n\"'Sp 1.5 Input'!A9\"\n\"'Sp 1.5 Input'!B59\"\n\"'Sp 1.5 Input'!A59\"\n\"'Sp 1.5 Input'!B53\"\n\"'Sp 1.5 Input'!A53\"\n\"'Sp 1.5 Input'!E52\"\n\"'Sp 1.5 Input'!B53\"\n\"'Sp 1.5 Input'!A53\"\n\"'Sp 1.5 Input'!C53\"\n\"'Sp 1.5 Input'!B53\"\n\"'Sp 1.5 Input'!A53\"\n\"'Sp 1.5 Input'!B52\"\n\"'Sp 1.5 Input'!A53\"\n\"'Sp 1.5 Input'!A57\"\n\"'Sp 1.5 Input'!E56\"\n\"'Sp 1.5 Input'!B49\"\n\"'Sp 1.5 Input'!A49\"\n\"'Sp 1.5 Input'!C49\"\n\"'Sp 1.5 Input'!B57\"\n\"'Sp 1.5 Input'!A57\"\n\"'Sp 1.5 Input'!B48\"\n\"'Sp 1.5 Input'!A49\"\n\"'Sp 1.5 Input'!B46\"\n\"'Sp 1.5 Input'!C46\"\n\"C18\"\n\"F26/H26\"\n\"C15\"\n\"D12\"\n\"D18\"\n\"356/(((E12+E15)+((H12-H17)/I12)+(J15+J18)))\"\n\"B26*F26/B33\"\n\"C15-H17\"\n\"D12\"\n\"I15\"\n\"356/((((C12-H17)/D12)+E15)+((H12-H17)/I12)+J15)\"\n\"B26*F26/B40\"\n\"B11*C11\"\n\"E11*$C$3\"\n\"D11+F11+I11\"\n\"B11*O11\"\n\"G11*O11\"\n\"E11\"\n\"SUM(J11:J22)\"\n\"SUM(P11:P17)\"\n\"SUM(Q18:Q22)\"\n\"MIN(P23:Q23)\"\n\"IF(R23>C3,1,R23/C3)\"\n\"J23/C3\"\n\"SUM(P11:P22)\"\n\"T29\"\n\"P24/365\"\n\"C3/P25\"\n\"C3/Q25\"\n\"365/(P26+Q26)\"\n\"IF(SUM(P18:P22,Q11:Q17)=0,0,R26)\"\n\"IF(S26-T23<0,0,S26-T23)\"\n\"SUM(T23:T26)\"\n\"SUM(C4:C42)\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"SUM(C3:C41)\"\n\"C42+E42+G42+I42\"\n\"C42+E42+G42+I42\"\n\"C42+E42+G42+I42\"\n\"C42+E42+G42+I42\"\n\"C42+E42+G42+I42\"\n\"C42+E42+G42+I42\"\n\"D42+F42+H42+J42\"\n\"D42+F42+H42+J42\"\n\"D42+F42+H42+J42\"\n\"D42+F42+H42+J42\"\n\"D42+F42+H42+J42\"\n\"D42+F42+H42+J42\"\n\"E43+E44\"\n\"E43+E44\"\n\"E43+E44\"\n\"E43+E44\"\n\"E43+E44\"\n\"E43+E44\"\n\"SUM(C3:C53)\"\n\"C54+E54+G54+I54\"\n\"C54+E54+G54+I54\"\n\"C54+E54+G54+I54\"\n\"C54+E54+G54+I54\"\n\"C54+E54+G54+I54\"\n\"C54+E54+G54+I54\"\n\"D54+F54+H54+J54\"\n\"D54+F54+H54+J54\"\n\"D54+F54+H54+J54\"\n\"D54+F54+H54+J54\"\n\"D54+F54+H54+J54\"\n\"D54+F54+H54+J54\"\n\"E55+E56\"\n\"E55+E56\"\n\"E55+E56\"\n\"E55+E56\"\n\"E55+E56\"\n\"E55+E56\"\n\"SUM(E3:F3)\"\n\"H3-I3\"\n\"SUM(E3:E22)\"\n\"SUM(H3:H22)\"\n\"SUM(C4:C42)\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"C43+E43+G43+I43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"D43+F43+H43+J43\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"E44+E45\"\n\"SUM(D7:D14)\"\n\"SUM(D21:D27)\"\n\"(D41+D28+D15)\"\n\"('Ending Inventory'!C43)\"\n\"('Ending Inventory'!C43)\"\n\"B3+D3+F3+H3\"\n\"B3+D3+F3+H3\"\n\"('Beginning Inventory'!C43)\"\n\"('Beginning Inventory'!C43)\"\n\"B3-B4\"\n\"B3-B4\"\n\"('Sales and Income'!C42)\"\n\"('Sales and Income'!C42)\"\n\"B5+B6+B7+B8+B9\"\n\"B5+B6+B7+B8+B9\"\n\"B10-B17\"\n\"B10-B17\"\n\"('Ending Inventory'!D43)\"\n\"('Ending Inventory'!D43)\"\n\"('Sales and Income'!D42)\"\n\"('Sales and Income'!D42)\"\n\"('Beginning Inventory'!D43)\"\n\"('Beginning Inventory'!D43)\"\n\"(Expenses!D54)\"\n\"(Expenses!D54)\"\n\"B20+B21-B22-B23\"\n\"B20+B21-B22-B23\"\n\"B18+B24\"\n\"B18+B24\"\n\"F18+H25\"\n\"F18+H25\"\n\"J4\"\n\"J4\"\n\"J3\"\n\"J3\"\n\"H31+H32+H33+H34\"\n\"H31+H32+H33+H34\"\n\"H35+H36\"\n\"H35+H36\"\n\"J22\"\n\"J22\"\n\"J20\"\n\"J20\"\n\"H35+H39\"\n\"H35+H39\"\n\"H42-H57\"\n\"H42-H57\"\n\"J62-H62\"\n\"J62-H62\"\n\"H37-H52\"\n\"H37-H52\"\n\"J52\"\n\"J52\"\n\"H37/H52\"\n\"H37/H52\"\n\"H59/H64\"\n\"H59/H64\"\n\"J62\"\n\"J62\"\n\"('Non-Ag'!D44)\"\n\"('Non-Ag'!D44)\"\n\"J73-J76\"\n\"J73-J76\"\n\"J25\"\n\"J25\"\n\"'Wage Earning'!J24\"\n\"'Wage Earning'!J24\"\n\"('Non-Ag'!D15)\"\n\"('Non-Ag'!D15)\"\n\"J83+J85\"\n\"J83+J85\"\n\"('Non-Ag'!D28)\"\n\"('Non-Ag'!D28)\"\n\"('Non-Ag'!D41)\"\n\"('Non-Ag'!D41)\"\n\"J86+J89\"\n\"J86+J89\"\n\"J90-J94\"\n\"J90-J94\"\n\"J67\"\n\"J67\"\n\"SUM(C24:N24)\"\n\"+'INPUT DATA SHEET'!D13\"\n\"+'INPUT DATA SHEET'!D11\"\n\"+Q31\"\n\"SUM(C18:N18)\"\n\"+C20\"\n\"+P20*O20\"\n\"+B22+C20+C21-C18\"\n\"+'INPUT DATA SHEET'!D10\"\n\"IF(C20>B24*300,C20/300-B24,0)\"\n\"IF(C20<B24*300,B24 - C20/300,0)\"\n\"+(O18-B22+E3)/12\"\n\"+B30/300\"\n\"SUM(Q20:Q30)\"\n\"+Q22\"\n\"+'INPUT DATA SHEET'!C24\"\n\"SUM(C9:N9)\"\n\"+C9-B13\"\n\"+N9-O12+D3\"\n\"+'INPUT DATA SHEET'!D13\"\n\"+P11*O11\"\n\"+B13+C11+C12-C9\"\n\"+'INPUT DATA SHEET'!D17\"\n\"+'INPUT DATA SHEET'!D10\"\n\"+B15+C17-C19\"\n\"IF(C11>B15*300,C11/300-B15,0)\"\n\"IF(C11<B15*300,B15 - C11/300,0)\"\n\"SUM(Q11:Q21)\"\n\"+(O9-B13+D3)/12\"\n\"+B23/300\"\n\"+Q22\"\n\"+'INPUT DATA SHEET'!C24\"\n\"SUM(C9:N9)\"\n\"+E11\"\n\"+'INPUT DATA SHEET'!D13\"\n\"+P11*O11\"\n\"+B13+C11+C12-C9\"\n\"+'INPUT DATA SHEET'!D17\"\n\"+'INPUT DATA SHEET'!D10\"\n\"+B15+C17-C19\"\n\"IF(C11>B15*300,C11/300-B15,0)\"\n\"+'INPUT DATA SHEET'!D15\"\n\"IF(C11<B15*300,B15 - C11/300,0)\"\n\"+'INPUT DATA SHEET'!D16\"\n\"SUM(Q11:Q21)\"\n\"+Q22\"\n\"+'INPUT DATA SHEET'!C24\"\n\"SUM(C9:N9)\"\n\"+E11\"\n\"+'INPUT DATA SHEET'!D13\"\n\"+P11*O11\"\n\"+B13+C11+C12-C9\"\n\"+'INPUT DATA SHEET'!D17\"\n\"+'INPUT DATA SHEET'!D10\"\n\"+B15+C17-C19\"\n\"IF(C11>B15*300,C11/300-B15,0)\"\n\"+'INPUT DATA SHEET'!D15\"\n\"IF(C11<B15*300,B15 - C11/300,0)\"\n\"+'INPUT DATA SHEET'!D16\"\n\"SUM(Q11:Q21)\"\n\"J7\"\n\"C21\"\n\"SUM(C14:N14)\"\n\"C14-C13\"\n\"C15*$J$6\"\n\"8*C17\"\n\"$J$8\"\n\"ROUND((C19*C18)/$J$6,0)\"\n\"C13+C20-C14\"\n\"C26-C27\"\n\"C26*$E$5\"\n\"C27*$E$6\"\n\"C19*C18*$J$5\"\n\"SUM(O26:O31)\"\n\"SUM(C7:C10)\"\n\"SUM(C14:C22)\"\n\"SUM(E11/C23)\"\n\"SUM(C27:C29)\"\n\"SUM(C33:C37)\"\n\"SUM(E38/C11)\"\n\"IF(C14>0,D14/C14,\"\"\"\")\"\n\"SUM(B14:B43)\"\n\"C3*C6+D3*D6\"\n\"E4*E6\"\n\"C5*C6+D5*D6+E5*E6-F5\"\n\"C15+C6-C9\"\n\"C8*C9+D8*D9+E8*E9-C16*H21-D16*I21-E16*J21-C20*F5-H16*H17-I16*I17-J16*J17\"\n\"C17+H17\"\n\"C21\"\n\"C17\"\n\"C32*C33+D32*D33+E32*E33-C40*H45-D40*I45-E40*J45-C20*F29-H40*H41-I40*I41-J40*J41\"\n\"C22+C45\"\n\"C56*C57+D56*D57+E56*E57-C64*H69-D64*I69-E64*J69-C20*F53-H64*H65-I64*I65-J64*J65\"\n\"C65\"\n\"C81*C82+D81*D82+E81*E82-C89*C90-D89*D90-E89*E90-C20*F78\"\n\"C70+C94\"\n\"C3*C6+D3*D6\"\n\"E4*E6\"\n\"C5*C6+D5*D6+E5*E6\"\n\"C15+C6-C9\"\n\"C8*C9+D8*D9+E8*E9-C16*C17-D16*D17-E16*E17\"\n\"C21\"\n\"C17\"\n\"C22+C45\"\n\"C65\"\n\"C70+C94\"\n\"(title1!B11)-(title1!B25)-(title1!B51)\"\n\"(title2!B11)-(title2!B25)-(title2!B51)\"\n\"SUM(B7:B10)\"\n\"SUM(B15:B24)\"\n\"SUM(B29:B36)\"\n\"(title1!B11)-(title1!B25)-(title1!B51)\"\n\"(title2!B11)-(title2!B25)-(title2!B51)\"\n\"SUM(B7:B10)\"\n\"SUM(B15:B24)\"\n\"SUM(B29:B36)\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"SUM(D6:G6)\"\n\"H6-H7\"\n\"SUM(D8:D12)\"\n\"D13-D21\"\n\"((D26+D27)-D28)-D29\"\n\"D22+D30\"\n\"K1\"\n\"IF(N3=8,M1,IF(N3=7,IF(M13=0,M2,M1),M1))\"\n\"COUNTBLANK(D5:K5)\"\n\"IF($N$3=8,$O$4,IF($N$3=7,IF($M$13=0,#REF!,$O$4),$O$4))\"\n\"IF(D$5=\"\"x\"\",IF($N6=0,#REF!,1),0)\"\n\"O6+P6+Q6+R6+S6+T6+U6\"\n\"$K$10+$K$15+$K$23+$K$24+$K$32+$K$35\"\n\"$J$10+$J$15+$J$23+$J$24+$J$32+$J$35\"\n\"$I$10+$I$15+$I$23+$I$24+$I$32+$I$35\"\n\"$H$10+$H$15+$H$23+$H$24+$H$32+$H$35\"\n\"$G$10+$G$15+$G$23+$G$24+$G$32+$G$35\"\n\"$F$10+$F$15+$F$23+$F$24+$F$32+$F$35\"\n\"$E$10+$E$15+$E$23+$E$24+$E$32+$E$35\"\n\"($K$9-$J$8)+($J$9-$I$8)+($I$9-$H$8)+($H$9-$G$8)+($G$9-$F$8)+($F$9-$E$8)+($E$9-$D$8)\"\n\"IF(E$5=\"\"x\"\",IF($N7=0,#REF!,1),0)\"\n\"SUM(F10:K10)\"\n\"'Entre. Yr 1'!H6\"\n\"'Entre. Yr 2'!H6\"\n\"'Entre. Yr 3'!H6\"\n\"'Entre. Yr 4'!H6\"\n\"'Entre. Yr 5'!H6\"\n\"'Entre. Yr 6'!H6\"\n\"'Entre. Yr 7'!H6\"\n\"'Entre. Yr 8'!H6\"\n\"SUM(E8:K8)\"\n\"IF(F$5=\"\"x\"\",IF($N8=0,#REF!,1),0)\"\n\"O8+P8+Q8+R8+S8\"\n\"($K$9-$J$8)+($J$9-$I$8)+($I$9-$H$8)+($G$9-$F$8)+($F$9-$E$8)+($E$9-$D$8)\"\n\"IF(K5=\"\"X\"\",Y8,IF(J5=\"\"X\"\",Y9,IF(I5=\"\"X\"\",Y10,IF(H5=\"\"X\"\",Y11,IF(G5=\"\"X\"\",Y12,IF(F5=\"\"X\"\",Y13,IF(E5=\"\"X\"\",Y14,)))))))\"\n\"D8\"\n\"IF(G$5=\"\"x\"\",IF($N9=0,#REF!,1),0)\"\n\"O9+P9+Q9+R9\"\n\"+($J$9-$I$8)+($I$9-$H$8)+($H$9-$G$8)+($G$9-$F$8)+($F$9-$E$8)+($E$9-$D$8)+K8\"\n\"D8-D9\"\n\"IF(H$5=\"\"x\"\",IF($N10=0,#REF!,1),0)\"\n\"O10+P10+Q10\"\n\"($K$9-$J$8)+($I$9-$H$8)+($H$9-$G$8)+($G$9-$F$8)+($F$9-$E$8)+($E$9-$D$8)\"\n\"IF(I$5=\"\"x\"\",IF($N11=0,#REF!,1),0)\"\n\"O11+P11\"\n\"($K$9-$J$8)+($J$9-$I$8)+($H$9-$G$8)+($G$9-$F$8)+($F$9-$E$8)+($E$9-$D$8)\"\n\"IF(J$5=\"\"x\"\",IF($N12=0,#REF!,1),0)\"\n\"K10+K15+K23+K24+K32+K35\"\n\"SUM(D13:K13)\"\n\"SUM(M6:M12)\"\n\"IF(#REF!+M13=0,#REF!,M5)\"\n\"($K$9-$J$8)+($J$9-$I$8)+($I$9-$H$8)+($H$9-$G$8)+($F$9-$E$8)+($E$9-$D$8)\"\n\"($K$9-$J$8)+($J$9-$I$8)+($I$9-$H$8)+($H$9-$G$8)+($G$9-$F$8)+($E$9-$D$8)\"\n\"SUM(D10:D14)\"\n\"D15-D23\"\n\"($K$30-$J$28)+($J$30-$I$28)+($I$30-$H$28)+($H$30-$G$28)+($G$30-$F$28)+($F$30-$E$28)+($E$30-$D$28)\"\n\"($K$30-$J$28)+($J$30-$I$28)+($I$30-$H$28)+($G$30-$F$28)+($F$30-$E$28)+($E$30-$D$28)\"\n\"IF(K5=\"\"X\"\",Y28,IF(J5=\"\"X\"\",Y29,IF(I5=\"\"X\"\",Y30,IF(H5=\"\"X\"\",Y31,IF(G5=\"\"X\"\",Y32,IF(F5=\"\"X\"\",Y33,IF(E5=\"\"X\"\",Y34,)))))))\"\n\"+($J$30-$I$28)+($I$30-$H$28)+($H$30-$G$28)+($G$30-$F$28)+($F$30-$E$28)+($E$30-$D$28)+$K$28\"\n\"D28\"\n\"($K$30-$J$28)+($I$30-$H$28)+($H$30-$G$28)+($G$30-$F$28)+($F$30-$E$28)+($E$30-$D$28)\"\n\"($K$30-$J$28)+($J$30-$I$28)+($H$30-$G$28)+($G$30-$F$28)+($F$30-$E$28)+($E$30-$D$28)\"\n\"((D28+D29)-D30)-D31\"\n\"($K$30-$J$28)+($J$30-$I$28)+($I$30-$H$28)+($H$30-$G$28)+($F$30-$E$28)+($E$30-$D$28)\"\n\"($K$30-$J$28)+($J$30-$I$28)+($I$30-$H$28)+($H$30-$G$28)+($G$30-$F$28)+($E$30-$D$28)\"\n\"D24+D32\"\n\"D35+E35+F35+G35\"\n\"SUM(D35:K35)\"\n\"year\"\n\"year+1\"\n\"year+2\"\n\"year+3\"\n\"year+4\"\n\"year+5\"\n\"year+6\"\n\"year+7\"\n\"year+8\"\n\"year+9\"\n\"B15-B16-B17-B18\"\n\"B19-B20\"\n\"SUM(B29:B32)\"\n\"B37+B38\"\n\"B33+B39\"\n\"B43+B44+B45\"\n\"B46+B48+B52\"\n\"B15/rev\"\n\"B16/cgs\"\n\"B17/sga\"\n\"B23/ni\"\n\"B32/inv\"\n\"B33/ca\"\n\"B37/equip\"\n\"B40/ta\"\n\"B46/cliab\"\n\"B48/ltd\"\n\"B52/equity\"\n\"B15/B15\"\n\"B16/B15\"\n\"B17/B15\"\n\"B19/B15\"\n\"B21/B15\"\n\"B23/B15\"\n\"B40/B40\"\n\"B29/B40\"\n\"B31/B40\"\n\"B32/B40\"\n\"B39/B40\"\n\"B46/B40\"\n\"B48/B40\"\n\"B52/B40\"\n\"B21\"\n\"B95*B96\"\n\"SUM(B6:B9)\"\n\"SUM(B13)\"\n\"B19-B17\"\n\"B10-B14\"\n\"SUM(B5:B12)\"\n\"SUM(B15:B21)\"\n\"C13-C22\"\n\"'[1]trial balance'!$G$174\"\n\"'[1]trial balance'!G176\"\n\"E7-C7\"\n\"C10-E10\"\n\"SUM(C7:C27)\"\n\"SUM(F7:F27)\"\n\"SUM(D5:D28)\"\n\"-'[1]trial balance'!$G$199\"\n\"E31-C31\"\n\"-'[1]trial balance'!G200\"\n\"C32-E32\"\n\"-'[1]trial balance'!G239\"\n\"-'[1]trial balance'!G242\"\n\"-'[1]trial balance'!G243\"\n\"-'[1]trial balance'!G244\"\n\"-'[1]trial balance'!G248\"\n\"-'[1]trial balance'!G251\"\n\"-'[1]trial balance'!G255\"\n\"SUM(C31:C98)\"\n\"SUM(E31:E98)\"\n\"D29-D99\"\n\"D99+D100\"\n\"D28-D99\"\n\"D28-D99\"\n\"E28-E99\"\n\"F28+F99\"\n\"'[1]trial balance'!$G$174\"\n\"D5\"\n\"'[1]trial balance'!G176\"\n\"E7-C7\"\n\"C10-E10\"\n\"SUM(C7:C27)\"\n\"'[1]trial balance'!G197\"\n\"SUM(G7:G27)\"\n\"SUM(D5:D28)\"\n\"-'[1]trial balance'!$G$199\"\n\"E31-C31\"\n\"-'[1]trial balance'!G200\"\n\"C32-E32\"\n\"-'[1]trial balance'!G239\"\n\"-'[1]trial balance'!G242\"\n\"-'[1]trial balance'!G243\"\n\"-'[1]trial balance'!G244\"\n\"-'[1]trial balance'!G248\"\n\"-'[1]trial balance'!G251\"\n\"-'[1]trial balance'!G255\"\n\"SUM(C31:C98)\"\n\"SUM(G31:G98)\"\n\"D29-D99\"\n\"D99+D100\"\n\"D28-D99\"\n\"D28-D99\"\n\"G28+G99\"\n\"SUM(B5:B9)\"\n\"SUM(B11:B12)\"\n\"SUM(C10:C13)\"\n\"B24+B25\"\n\"SUM(C17:C26)\"\n\"C6\"\n\"108423.06+186511.59+54522.57+25666.32\"\n\"7786.31+23549.91\"\n\"D16\"\n\"209330.97-D16-D17-D18-D19\"\n\"237080.81-C21-C22\"\n\"SUM(C6:C23)\"\n\"SUM(E24:E25)\"\n\"SUM(G24:G27)\"\n\"\"\"   \"\"&$Q$5\"\n\"IF(C6=\"\"yes\"\",(1*F6),IF(C6=\"\"no\"\",(0*F6),\"\"\"\"))\"\n\"IF(SUM(F6:F10)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G6:G10)\"\n\"IF(SUM(F16:F24)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G16:G24)\"\n\"IF(SUM(F30:F40)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G30:G40)\"\n\"IF(C46=\"\"yes\"\",(1*F46),IF(C46=\"\"no\"\",(0*F46),IF(C46=\"\"small extent\"\",(0.33*F46),IF(C46=\"\"large extent\"\",(0.67*F46),\"\"\"\"))))\"\n\"IF(SUM(F46:F73)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G46:G73)\"\n\"L4-L3\"\n\"I4-I5\"\n\"SUM(C3:C23)\"\n\"VLOOKUP($C2,VLOOKUP!$A$2:$D$175,2,FALSE)\"\n\"SUM(C16:C45)\"\n\"VLOOKUP($C2,VLOOKUP!$A$2:$D$175,4,FALSE)\"\n\"D9-D10\"\n\"IF(D11>0.1*(D10),IF(ABS(D11)>1600000,\"\"YES, complete the fluctuation analysis section below.\"\",\"\"NO\"\"),IF(D11<-0.1*(D10),IF(ABS(D11)>1600000,\"\"YES, complete the fluctuation analysis section below.\"\",\"\"NO\"\"),\"\"NO\"\"))\"\n\"'Inventory Attachment'!C2\"\n\"'Inventory Attachment'!C2\"\n\"'Inventory Attachment'!C2\"\n\"'Inventory Attachment'!$C$2\"\n\"'Inventory Attachment'!$C$3\"\n\"'Inventory Attachment'!A16\"\n\"SUM(D2:D175)\"\n\"SUM(D3:D302)\"\n\"1171662+1828338\"\n\"SUM(A1:A22)\"\n\"SUM(D7:E7)\"\n\"SUM(F7:I7)\"\n\"SUM(C7:D7)\"\n\"SUM(E7:H7)\"\n\"ALL!C23\"\n\"ALL!C27\"\n\"ALL!C31\"\n\"ALL!C35\"\n\"B15-C15\"\n\"SUM(E7:H7)\"\n\"SUM(C21:D21)\"\n\"ALL!C24\"\n\"ALL!C28\"\n\"ALL!C32\"\n\"ALL!C36\"\n\"ALL!C40\"\n\"ALL!C44\"\n\"ALL!C48\"\n\"SUM(C7:D7)\"\n\"SUM(E7:H7)\"\n\"ALL!C25\"\n\"ALL!C29\"\n\"ALL!C33\"\n\"ALL!C37\"\n\"ALL!C41\"\n\"ALL!C45\"\n\"ALL!C49\"\n\"SUM(C21:D21)\"\n\"SUM(E21:H21)\"\n\"ALL!C22\"\n\"ALL!C26\"\n\"ALL!C30\"\n\"ALL!C34\"\n\"ALL!C38\"\n\"ALL!C42\"\n\"ALL!C46\"\n\"SUM(C3:C9)\"\n\"SUM(F3:F12)\"\n\"SUM(F12,F7)\"\n\"'Wages-Stipends'!B31\"\n\"C4*C18\"\n\"Supplies!B31\"\n\"C5*C18\"\n\"Publicity!B31\"\n\"C6*C18\"\n\"Security!$B$33\"\n\"Security!$C$33\"\n\"C7*C18\"\n\"Telephone!$B$31\"\n\"Telephone!$C$31\"\n\"C8*C18\"\n\"Transportation!B31\"\n\"Transportation!$C$31\"\n\"C9*C18\"\n\"'Events & Programs'!$B$29\"\n\"'Events & Programs'!$C$29\"\n\"C10*C18\"\n\"Food!B33\"\n\"C11*C18\"\n\"Other!B31\"\n\"C12*C18\"\n\"'Fixed Operating Costs'!B31\"\n\"C13*C18\"\n\"SUM(B4:B13)\"\n\"B15\"\n\"C17*C18\"\n\"C17-D19\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B32)\"\n\"Summary!$C$18\"\n\"C33*C34\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B28)\"\n\"Summary!$C$18\"\n\"C29*C30\"\n\"SUM(B5:B32)\"\n\"Summary!$C$18\"\n\"C33*C34\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(B5:B30)\"\n\"Summary!$C$18\"\n\"C31*C32\"\n\"SUM(F3:F57)\"\n\"SUM(C4:C16)\"\n\"SUM(D9:D16)\"\n\"SUM(E12:E16)\"\n\"SUM(E19:E32)\"\n\"SUM(C17,C33)\"\n\"SUM(F10:F11)\"\n\"SUM(F14:F18)\"\n\"SUM(F20:F22)\"\n\"SUM(F7:F34)-F9-F12-F19-F23-F27\"\n\"SUM(F49:F52)\"\n\"SUM(F106:F112)\"\n\"SUM(F115:F119)\"\n\"SUM(F99:F120)-F40-F44-F48-F56-F60-F65-F68-F71-F77-F82-F89-F94-F99-F105-F114\"\n\"H35-H121\"\n\"H123/H35\"\n\"COUNTA(D2:D285)\"\n\"SUM(F2:F285)\"\n\"SUM(F287:F414)\"\n\"SUM(F416:F589)\"\n\"SUM(F591:F598)\"\n\"+F590+F599\"\n\"+F286+F415+F600\"\n\"COUNTA(D2:D77)\"\n\"SUM(F2:F77)\"\n\"COUNTA(D79:D124)\"\n\"SUM(F79:F124)\"\n\"COUNTA(D126:D242)\"\n\"SUM(F126:F242)\"\n\"COUNTA(D244:D286)\"\n\"SUM(F244:F286)\"\n\"COUNTA(D288:D370)\"\n\"SUM(F288:F370)\"\n\"COUNTA(D372:D494)\"\n\"SUM(F372:F494)\"\n\"COUNTA(D496:D514)\"\n\"SUM(F496:F514)\"\n\"COUNTA(D516:D533)\"\n\"SUM(F516:F533)\"\n\"COUNTA(D535:D598)\"\n\"SUM(F535:F598)\"\n\"+D599+D534+D515+D495+D371+D287+D243+D125+D78\"\n\"COUNTA(D2:D9)\"\n\"SUM(F2:F9)\"\n\"COUNTA(D11:D17)\"\n\"SUM(F11:F17)\"\n\"COUNTA(D19:D29)\"\n\"SUM(F19:F29)\"\n\"COUNTA(D31:D51)\"\n\"SUM(F31:F51)\"\n\"COUNTA(D53:D61)\"\n\"SUM(F53:F61)\"\n\"COUNTA(D63:D95)\"\n\"SUM(F63:F95)\"\n\"COUNTA(D97:D110)\"\n\"SUM(F97:F110)\"\n\"COUNTA(D112:D141)\"\n\"SUM(F112:F141)\"\n\"COUNTA(D143:D159)\"\n\"SUM(F143:F159)\"\n\"SUM(F161:F183)\"\n\"COUNTA(D185:D194)\"\n\"SUM(F185:F194)\"\n\"COUNTA(D196:D220)\"\n\"SUM(F196:F220)\"\n\"COUNTA(D221:D235)\"\n\"COUNTA(D237:D256)\"\n\"SUM(F237:F256)\"\n\"+D280+D265+D257+D236+D221+D195+D184+D160+D142+D111+D96+D62+D52+D30+D18+D10\"\n\"+F10+F18+F30+F52+F62+F96+F111+F142+F160+F184+F195+F221+F236+F257+F265+F280\"\n\"SUM(B7:B9)\"\n\"SUM(B11,B13,B15,B16)\"\n\"SUM(CapEquip!C24)\"\n\"SUM(BeginInv!D28)\"\n\"SUM(Startupcosts!B37)\"\n\"SUM(WorkCap!B38)\"\n\"SUM(B24,B26,B28,B30,B32,B34)\"\n\"SUM(B42:B45)\"\n\"SUM(C6:C23)\"\n\"B7*C7\"\n\"SUM(D6:D26)\"\n\"SUM(B5:B35)\"\n\"IncomeStatement!$A$29\"\n\"IF($B$6=1,IncomeStatement!C29,IF($B$6=2,IncomeStatement!C29+IncomeStatement!D29,IF($B$6=3,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29,IF($B$6=4,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29,IF($B$6=5,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29,IF($B$6=6,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29,IF($B$6=7,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29,IF($B$6=8,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29+IncomeStatement!J29,C8))))))))\"\n\"IF($B$6=9,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29+IncomeStatement!J29+IncomeStatement!K29,IF($B$6=10,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29+IncomeStatement!J29+IncomeStatement!K29+IncomeStatement!L29,IF($B$6=11,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29+IncomeStatement!J29+IncomeStatement!K29+IncomeStatement!L29+IncomeStatement!M29,IF($B$6=12,IncomeStatement!C29+IncomeStatement!D29+IncomeStatement!E29+IncomeStatement!F29+IncomeStatement!G29+IncomeStatement!H29+IncomeStatement!I29+IncomeStatement!J29+IncomeStatement!K29+IncomeStatement!L29+IncomeStatement!M29+IncomeStatement!N29))))\"\n\"IncomeStatement!A30\"\n\"IncomeStatement!$A$58\"\n\"IF($B$6=1,IncomeStatement!C58,IF($B$6=2,IncomeStatement!C58+IncomeStatement!D58,IF($B$6=3,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58,IF($B$6=4,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58,IF($B$6=5,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58,IF($B$6=6,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58,IF($B$6=7,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58,IF($B$6=8,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58+IncomeStatement!J58,C36))))))))\"\n\"IF($B$6=9,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58+IncomeStatement!J58+IncomeStatement!K58,IF($B$6=10,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58+IncomeStatement!J58+IncomeStatement!K58+IncomeStatement!L58,IF($B$6=11,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58+IncomeStatement!J58+IncomeStatement!K58+IncomeStatement!L58+IncomeStatement!M58,IF($B$6=12,IncomeStatement!C58+IncomeStatement!D58+IncomeStatement!E58+IncomeStatement!F58+IncomeStatement!G58+IncomeStatement!H58+IncomeStatement!I58+IncomeStatement!J58+IncomeStatement!K58+IncomeStatement!L58+IncomeStatement!M58+IncomeStatement!N58))))\"\n\"SUM(B8:B36)\"\n\"(((B14*D14)+((B14*1.5))*E14)*F14+C14)\"\n\"G14*$B$6\"\n\"G14*$B$7\"\n\"IF(G14>7000,7000*$B$8,G14*$B$8)\"\n\"SUM(H14:J14)\"\n\"G14*$B$10\"\n\"SUM(G14:G24)\"\n\"SUM(G25,K25)\"\n\"L25\"\n\"SUM(C7:O7)\"\n\"$C$1*C7\"\n\"P13/(P13+P14)\"\n\"P13+(P13*$C$4)\"\n\"R13+(R13*$C$5)\"\n\"$C$2*C7\"\n\"P14/(P13+P14)\"\n\"P15/(P13+P14)\"\n\"(R13+R14)*Q15\"\n\"SUM(C13:C14)-C15\"\n\"P17/$P$17\"\n\"R17/$R$17\"\n\"T17/$T$17\"\n\"C17*$C$3\"\n\"SUM(C21:C22)\"\n\"C17-C21\"\n\"Payroll!$B$27/12\"\n\"P29*1.03\"\n\"Payroll!$L$25/12\"\n\"Amortization!D22\"\n\"Amortization!D23\"\n\"Amortization!D24\"\n\"Amortization!D25\"\n\"Amortization!D26\"\n\"Amortization!D27\"\n\"Amortization!D28\"\n\"Amortization!D29\"\n\"Amortization!D30\"\n\"Amortization!D31\"\n\"Amortization!D32\"\n\"Amortization!D33\"\n\"SUM(C29:C58)\"\n\"C25-C60\"\n\"IncomeStatement!C11\"\n\"SourceFunds!$B$7\"\n\"B60\"\n\"SUM(IncomeStatement!C13)\"\n\"IncomeStatement!C14*0.5\"\n\"(IncomeStatement!D14*0.5)+IncomeStatement!C14*0.5\"\n\"+Amortization!C7\"\n\"SUM(B12,B11,B10,B9,B5)\"\n\"IncomeStatement!$A$29\"\n\"SUM(IncomeStatement!C29)\"\n\"IncomeStatement!A30\"\n\"IncomeStatement!$A$58\"\n\"SUM(IncomeStatement!C58)\"\n\"SUM(B18:B47)\"\n\"+BeginInv!D28\"\n\"SUM(IncomeStatement!C21)\"\n\"Amortization!E22\"\n\"Amortization!E23\"\n\"Amortization!E24\"\n\"Amortization!E25\"\n\"Amortization!E26\"\n\"Amortization!E27\"\n\"Amortization!E28\"\n\"Amortization!E29\"\n\"Amortization!E30\"\n\"Amortization!E31\"\n\"Amortization!E32\"\n\"Amortization!E33\"\n\"+Startupcosts!B37\"\n\"SourceFunds!B24+SourceFunds!B32+SourceFunds!B34\"\n\"SUM(B56,B55,B53,B54,B52,B48)\"\n\"SUM(C56,C55,C53,C52,C48)\"\n\"B14-B58\"\n\"CashFlow!B5\"\n\"CashFlow!$N$60\"\n\"BeginInv!D28\"\n\"Startupcosts!B13+Startupcosts!B15\"\n\"SUM(B8:B12)\"\n\"SourceFunds!B32\"\n\"SourceFunds!B32\"\n\"SourceFunds!B34\"\n\"SourceFunds!B34\"\n\"CapEquip!C24\"\n\"CapEquip!C24\"\n\"IncomeStatement!P57\"\n\"(B17+B18+B19)-B21\"\n\"B13+B23\"\n\"+(Amortization!C7-Amortization!F33)\"\n\"+(Amortization!F34-Amortization!F45)\"\n\"+(Amortization!F46-Amortization!F57)\"\n\"+(Amortization!F58-Amortization!F68)\"\n\"SUM(B32:B35)\"\n\"+Amortization!F33\"\n\"+Amortization!F45\"\n\"+Amortization!F57\"\n\"+Amortization!F68\"\n\"SUM(B37:B39)\"\n\"E37+D39\"\n\"B25-B41\"\n\"B41+B43\"\n\"SUM(B13:B16)\"\n\"SUM(B22:B27)\"\n\"SUM(B33:B42)\"\n\"SUM(B44,B29,B18)\"\n\"SUM(B51:B62)\"\n\"B46-B64\"\n\"B47\"\n\"B42\"\n\"B52\"\n\"B57\"\n\"B62\"\n\"B72\"\n\"B67\"\n\"B97\"\n\"B77\"\n\"B82\"\n\"B87\"\n\"B102\"\n\"B92\"\n\"B107\"\n\"IncomeStatement!P25\"\n\"IncomeStatement!P17\"\n\"B40/B41\"\n\"IncomeStatement!P62\"\n\"IncomeStatement!P17\"\n\"Bizbalsht!B13\"\n\"Bizbalsht!B37\"\n\"Bizbalsht!B8+Bizbalsht!B9+Bizbalsht!B11\"\n\"Bizbalsht!B37\"\n\"Bizbalsht!B43\"\n\"Bizbalsht!B34+Bizbalsht!#REF!+Bizbalsht!#REF!\"\n\"Bizbalsht!C34+Bizbalsht!B35+Bizbalsht!B39\"\n\"IncomeStatement!P23\"\n\"IncomeStatement!P23/12\"\n\"Bizbalsht!B41\"\n\"Bizbalsht!B43\"\n\"IncomeStatement!P17\"\n\"IncomeStatement!R17\"\n\"Bizbalsht!B25\"\n\"IncomeStatement!P62\"\n\"IncomeStatement!R62\"\n\"Bizbalsht!B25\"\n\"IncomeStatement!P17\"\n\"IncomeStatement!R17\"\n\"Bizbalsht!B9\"\n\"IncomeStatement!P23\"\n\"IncomeStatement!R23\"\n\"Bizbalsht!B32\"\n\"B67\"\n\"B87\"\n\"PMT(bill1,bill4,-bill6)\"\n\"IF(bill7=0,bill8,bill7)\"\n\"\"\"Beginning balance at payment \"\"&TEXT(bill9,\"\"0\"\")&\"\":\"\"\"\n\"FV(bill2/bill3,bill9-1,bill10,-bill6)\"\n\"IF(G7=0,IF(G8=0,1,G8),1+C10*(YEAR(G7)-YEAR(C11))+INT(C10*(MONTH(G7)-MONTH(C11))/12)+IF(DAY(G7)>DAY(C11),1))\"\n\"\"\"Cumulative interest prior to payment \"\"&TEXT(bill9,\"\"0\"\")&\"\":\"\"\"\n\"bill10*(bill9-1)-(bill6-bill11)\"\n\"IF(bill9<bill4,bill9,\"\"\"\")\"\n\"bill12\"\n\"IF(A22<>\"\"\"\",IF(bill11<0,0,bill11),\"\"\"\")\"\n\"bill14\"\n\"bill15\"\n\"bill16\"\n\"IF(A22<>\"\"\"\",D22+bill17,\"\"\"\")\"\n\"+F22\"\n\"+G22+D23\"\n\"SUM(D84:D87)\"\n\"SUM(E28*F29%)\"\n\"SUM(J30/12)\"\n\"SUM(F32*J31)\"\n\"SUM(D43:K48)\"\n\"SUM(J33)\"\n\"SUM(K51,K49)\"\n\"C13/C14*C15*C17\"\n\"C13*B25*C15\"\n\"C13*B28*C15\"\n\"C13*B31*C15\"\n\"C13*B34*C15\"\n\"C13*B37*C15\"\n\"C13*((1-B31)-B37-B25-B28-B34)*(C15-C16)\"\n\"SUM(C22:C39)\"\n\"('Your Company'!C13)\"\n\"C4/C5*C6*C8\"\n\"C4*B16*C6\"\n\"C4*B19*C6\"\n\"C4*B22*C6\"\n\"C4*B25*C6\"\n\"C4*B28*C6\"\n\"C9/C10*C11*C13\"\n\"C9*B21*C11\"\n\"C9*B24*C11\"\n\"C9*B27*C11\"\n\"C9*B30*C11\"\n\"C9*B33*C11\"\n\"C9*((1-B27)-B33-B21-B24-B30)*(C11-C12)\"\n\"SUM(C18:C35)\"\n\"SUM(B9:B11)\"\n\"B12-B18\"\n\"SUM(B26:B27)\"\n\"SUM(B31:B37)\"\n\"B28-B38\"\n\"SUM(C65/C19)\"\n\"invtotal\"\n\"1-SUM(B17:B19)\"\n\"wagetot\"\n\"exptotal\"\n\"year-1\"\n\"year\"\n\"year+1\"\n\"D49*collect1\"\n\"C49*collect2\"\n\"B49*collect3\"\n\"SUM(E51:E53)\"\n\"invtotal*_inv1*C49\"\n\"invtotal*_inv2*D49\"\n\"invtotal*_inv3*E49\"\n\"E60*pay0\"\n\"D60*_pay1\"\n\"C60*_pay2\"\n\"B60*_pay3\"\n\"SUM(E63:E66)\"\n\"F49*wagetot*wage1\"\n\"G49*wagetot*wage2\"\n\"SUM(E70:E71)\"\n\"E49*exptotal*exp0\"\n\"F49*exptotal*_exp1\"\n\"G49*exptotal*_exp2\"\n\"E54\"\n\"E67\"\n\"E72\"\n\"E78\"\n\"E84-E85-E86-E87\"\n\"E88-E90-E91-E92\"\n\"cash\"\n\"E96\"\n\"E93+E95\"\n\"SUM(B42)\"\n\"SUM(C6:N6)\"\n\"SUM(B8:B13)\"\n\"SUM(B14)\"\n\"SUM(C6+C14)\"\n\"SUM(B17:B34)\"\n\"SUM(B15-B41)\"\n\"+B42\"\n\"SUM(C10:N10)\"\n\"+B12\"\n\"SUM(C10:C12)\"\n\"+B8+B13\"\n\"SUM(B16:B34)\"\n\"IF(SUM(C35:N35)=SUM(O16:O34),SUM(C35:N35),\"\"Error\"\")\"\n\"+B35+SUM(B36:B40)\"\n\"+B14-B41\"\n\"+IF(C8+O13-O41=N42,\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(O44+B45-O10-O11-O46=N45,\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(O41=SUM(O35:O40),\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(SUM(C13:N13)=SUM(O10:O12),\"\"Verified\"\",\"\"Error\"\")\"\n\"+B42\"\n\"SUM(C10:N10)\"\n\"+B12\"\n\"SUM(C10:C12)\"\n\"+B8+B13\"\n\"SUM(B16:B34)\"\n\"IF(SUM(C35:N35)=SUM(O16:O34),SUM(C35:N35),\"\"Error\"\")\"\n\"+B35+SUM(B36:B40)\"\n\"+B14-B41\"\n\"+IF(C8+O13-O41=N42,\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(O44+B45-O10-O11-O46=N45,\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(O41=SUM(O35:O40),\"\"Verified\"\",\"\"Error\"\")\"\n\"+IF(SUM(C13:N13)=SUM(O10:O12),\"\"Verified\"\",\"\"Error\"\")\"\n\"C33*D33*E33*F33*G33\"\n\"SUM(B55)\"\n\"SUM(C8:N8)\"\n\"+O9/O57\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"+O17/O$57\"\n\"SUM(B24:B46)\"\n\"+B23+B47\"\n\"SUM(B15-B54)\"\n\"+O54-O23\"\n\"1-P23\"\n\"+(O54-O23)/B64\"\n\"'Year 1'!N55\"\n\"B55\"\n\"SUM(C55)\"\n\"SUM(C8:N8)\"\n\"+O9/O57\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"+O17/O57\"\n\"+O18/O57\"\n\"+O19/O57\"\n\"+O22/O57\"\n\"+O23/O57\"\n\"+O24/O57\"\n\"+O25/O57\"\n\"+O26/O57\"\n\"+O27/O57\"\n\"+O28/O57\"\n\"+O29/O57\"\n\"+O30/O57\"\n\"+O31/O57\"\n\"+O32/O57\"\n\"+O33/O57\"\n\"+O34/O57\"\n\"+O35/O57\"\n\"+O36/O57\"\n\"+O37/O57\"\n\"+O38/O57\"\n\"+O39/O57\"\n\"+O40/O57\"\n\"+O41/O57\"\n\"+O42/O57\"\n\"+O46/O57\"\n\"SUM(B24:B46)\"\n\"+O47/O57\"\n\"+B23+B47\"\n\"+O48/O57\"\n\"+O49/O57\"\n\"+O50/O57\"\n\"+O51/O57\"\n\"+O52/O57\"\n\"+O53/O57\"\n\"+O54/O57\"\n\"SUM(B15-B54)\"\n\"+O57/O57\"\n\"1-P23\"\n\"+(O54-O23)/B64\"\n\"SUM(B55)\"\n\"SUM(C55)\"\n\"'Year 1'!C8\"\n\"+(D8-C8)/C8\"\n\"'Year 1'!D8\"\n\"'Year 1'!E8\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"SUM(B24:B46)\"\n\"+B23+B47\"\n\"SUM(B15-B54)\"\n\"'Year 1'!E55\"\n\"SUM(B55)\"\n\"'Year 1'!F8\"\n\"+(C8-B8)/B8\"\n\"'Year 1'!G8\"\n\"'Year 1'!H8\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"SUM(B24:B46)\"\n\"+B23+B47\"\n\"SUM(B15-B54)\"\n\"'Year 1'!H55\"\n\"SUM(B55)\"\n\"'Year 1'!I8\"\n\"+(C8-B8)/B8\"\n\"'Year 1'!J8\"\n\"'Year 1'!K8\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"SUM(B24:B46)\"\n\"+B23+B47\"\n\"SUM(B15-B54)\"\n\"'Year 1'!H55\"\n\"SUM(B55)\"\n\"'Year 1'!L8\"\n\"+(C8-B8)/B8\"\n\"'Year 1'!M8\"\n\"'Year 1'!N8\"\n\"SUM(B8:B13)\"\n\"SUM(B6+B14)\"\n\"SUM(B24:B46)\"\n\"+B23+B47\"\n\"'Year 1'!K49\"\n\"SUM(B15-B54)\"\n\"SUM(E17:E22)\"\n\"SUM(E17:E22)\"\n\"H23-E23\"\n\"SUM(E34:F39)\"\n\"SUM(E34:F39)\"\n\"SUM(H40-E40)\"\n\"SUM(H40-E40)\"\n\"SUM(E57-H57)\"\n\"SUM(E57-H57)\"\n\"IF('RA-1'!C3=\"\"\"\",\"\"\"\",'RA-1'!C3)\"\n\"IF('RA-1'!I3=\"\"\"\",\"\"\"\",'RA-1'!I3)\"\n\"SUM(E13-D13)\"\n\"SUM(F13*G13)\"\n\"SUM(H13:H48)\"\n\"IF('RA-1'!C3=\"\"\"\",\"\"\"\",'RA-1'!C3)\"\n\"IF('RA-1'!I3=\"\"\"\",\"\"\"\",'RA-1'!I3)\"\n\"SUM(C11+F11+G11-H11-I11-J11)\"\n\"SUM(B25+D25+F25-G25-H25+I25-J25)\"\n\"SUM(G39+H39-I39-J39)\"\n\"IF('RA-1'!C3=\"\"\"\",\"\"\"\",'RA-1'!C3)\"\n\"IF('RA-1'!I3=\"\"\"\",\"\"\"\",'RA-1'!I3)\"\n\"SUM(C11+F11+G11-H11-I11-J11)\"\n\"SUM(B25+D25+F25-G25-H25+I25-J25)\"\n\"SUM(G39+H39-I39-J39)\"\n\"IF('RA-1'!C3=\"\"\"\",\"\"\"\",'RA-1'!C3)\"\n\"IF('RA-1'!I3=\"\"\"\",\"\"\"\",'RA-1'!I3)\"\n\"SUM(C11+F11+G11-H11-I11-J11)\"\n\"SUM(B25+D25+F25-G25-H25+I25-J25)\"\n\"SUM(G39+H39-I39-J39)\"\n\"SUM(D10:D12)\"\n\"'RA-1'!I25\"\n\"'RA-1'!H42\"\n\"'RA-1'!H59\"\n\"'RA-2'!H49\"\n\"SUM(D13:D18)\"\n\"SUM(D20*D22)\"\n\"SUM(D24,G24,J24)\"\n\"SUM(J26/3)\"\n\"SUM(B8:B18)\"\n\"(B5-B19)\"\n\"B21+B26\"\n\"B30+B32\"\n\"SUM(B5:B11)\"\n\"B31+B32\"\n\"B29+B34\"\n\"1+A4\"\n\"1+A11\"\n\"1+A4\"\n\"1+A11\"\n\"ROUND(+B2*(1+B3),-3)\"\n\"ROUND(+C17*(1+B3),-3)\"\n\"+C34\"\n\"+C17-C18\"\n\"ROUND($B$9+($B$10*C17),-3)\"\n\"+$B$11\"\n\"+$B$12\"\n\"+$B$13\"\n\"SUM(B21:B24)\"\n\"+C19-C24\"\n\"ROUND(C25*$B$14,-3)\"\n\"+B7\"\n\"+C33\"\n\"ROUND(+C17*$B$6,-3)\"\n\"SUM(C30:C31)\"\n\"ROUND($B$4+($B$5*E17),-3)\"\n\"ROUND($B$4+($B$5*B8),-3)\"\n\"+B16\"\n\"+B16\"\n\"+E38+C37\"\n\"+D42+B41\"\n\"ROUND(+B2*(1+B3),-3)\"\n\"ROUND(+C17*(1+B3),-3)\"\n\"+C34\"\n\"+C17-C18\"\n\"ROUND($B$9+($B$10*C17),-3)\"\n\"+$B$11\"\n\"+$B$12\"\n\"+$B$13\"\n\"SUM(B21:B24)\"\n\"+C19-C24\"\n\"ROUND(C25*$B$14,-3)\"\n\"+B7\"\n\"+C33\"\n\"ROUND(+C17*$B$6,-3)\"\n\"SUM(C30:C31)\"\n\"ROUND($B$4+($B$5*E17),-3)\"\n\"ROUND($B$4+($B$5*B8),-3)\"\n\"+B16\"\n\"+B16\"\n\"+E38+C37\"\n\"+D42+B41\"\n\"SUM(C4:C9)\"\n\"D12*60%\"\n\"SUM(C6:C11)\"\n\"SUM(C15:C19)\"\n\"SUM(C22:C30)\"\n\"+B3\"\n\"+F3-G3\"\n\"+D5-D4-B5+C5\"\n\"40*D5+(E5/4)-I5\"\n\"+F4-G4+I5+H5-J5-F5+G5\"\n\"-E5+10*D5\"\n\"+Sheet1!$B$19*B5\"\n\"+C5*Sheet1!$B$20\"\n\"+D5*Sheet1!$B$22*8*20\"\n\"+E5*Sheet1!$B$23\"\n\"+F5*Sheet1!$B$17\"\n\"+G5*Sheet1!$B$18\"\n\"+H5*Sheet1!$B$24\"\n\"I5*Sheet1!$B$16\"\n\"+E10*Sheet1!B23\"\n\"+SUM(B15:I20)\"\n\"SUMPRODUCT(J5:J10,K5:K10)\"\n\"C24-C22\"\n\"+Sheet1!$B$19*Sheet2!B5\"\n\"+C5*Sheet1!$B$20\"\n\"+D5*Sheet1!$B$22*8*20\"\n\"+E5*Sheet1!B23\"\n\"+F5*Sheet1!$B$17\"\n\"+G5*Sheet1!$B$18\"\n\"+H5*Sheet1!$B$24\"\n\"+SUM(B15:H20)\"\n\"+D5-D4-B5+C5\"\n\"40*D5+(E5/4)-I5\"\n\"+F4-G4+I5+H5-J5-F5+G5\"\n\"-E5+10*D5\"\n\"+Sheet1!$B$19*Sheet2!B5\"\n\"+C5*Sheet1!$B$20\"\n\"+D5*Sheet1!$B$22*8*20\"\n\"+E5*Sheet1!$B$23\"\n\"+F5*Sheet1!$B$17\"\n\"+G5*Sheet1!$B$18\"\n\"+H5*Sheet1!$B$24\"\n\"I5*Sheet1!$B$16\"\n\"+E10*Sheet1!B23\"\n\"+SUM(B15:I20)\"\n\"SUM(J5:J10)*31\"\n\"SQRT(_eoq2(C5,C4,C6,C7))\"\n\"+($C$4/A13)*$C$5\"\n\"+(A13/2)*$C$6*($C$7)\"\n\"+C13+B13\"\n\"+A13+$C$9\"\n\"+(A14/2)*$C$6*$C$7\"\n\"SQRT(C3*C7*$G$9/(2*($G$8+H3)))\"\n\"C3/B14\"\n\"B14*($G$8+H3)\"\n\"(C14/2)*C7*$G$9\"\n\"D14+E14\"\n\"SUM(F14:F16)\"\n\"SQRT((C3*C7*G9+C4*C8*G9+C5*C9*G9)/(2*(G8+SUM(H3:H5))))\"\n\"C3/B22\"\n\"B22*($G$8+H3)\"\n\"(C22/2)*C7*$G$9\"\n\"B22\"\n\"B23*(H4)\"\n\"B22\"\n\"C3/C30\"\n\"C30*($G$8+H3)\"\n\"(D30/2)*C7*$G$9\"\n\"$C$30*B31\"\n\"C31*(H4)\"\n\"C30*B32\"\n\"D13\"\n\"VLOOKUP(A18,B$9:C$11,2,TRUE)\"\n\"(A18/2)*B18*(C$5/100)\"\n\"C$4*12*C$3/A18\"\n\"C$4*12*B18\"\n\"C18+E18+D18\"\n\"A18\"\n\"F18\"\n\"A18+D$14\"\n\"((MINA(5000,A16)*C$9)+(MAXA(0,MINA(10000,A16)-5000)*C$10)+(MAXA(0,A16-10000)*C$11))/A16\"\n\"(A16/2)*B16*(C$5)\"\n\"(C$4*12/A16)*C$3\"\n\"C$4*12*B16\"\n\"C16+E16+D16\"\n\"250+A16\"\n\"B5\"\n\"D6\"\n\"MAX(0,360000-60000*D5)\"\n\"B6*(B5-B4)\"\n\"B7+D7\"\n\"B5\"\n\"D7\"\n\"MAX(0,360000-60000*D5)\"\n\"B7*(B5-B4)+IF(B7>0,B6,0)\"\n\"D7*(D5-D4)-IF(D7>0,B6,0)\"\n\"B8+D8\"\n\"B5\"\n\"IF(C6>=E4,E6,E5)\"\n\"C6\"\n\"MAX(0,360000-60000*C5)\"\n\"B6*(B5-B4)\"\n\"B7+C7\"\n\"D3*D4\"\n\"D5*SQRT(D4)\"\n\"+$D$4*$D$3\"\n\"+A16-$D$4*$D$3\"\n\"NORMDIST(A16,$D$9,$D$10,1)\"\n\"$D$6/2+B16\"\n\"D16/$D$3\"\n\"esc(B16,$D$10)\"\n\"($D$6-F16)/$D$6\"\n\"+A16+$D$12\"\n\"NORMDIST(A205,D9,$D$10,1)\"\n\"D3*D5\"\n\"D4*SQRT(D5)\"\n\"NORMSINV(D6)*D10\"\n\"-D3*(1-NORMSDIST(D3/B3))+B3*NORMDIST(D3/B3,0,1,0)\"\n\"NOW()\"\n\"IF($D$13=0,\"\" \"\",$D$13)\"\n\"VLOOKUP(E21,dept!B:D,3,FALSE)\"\n\"VLOOKUP(E21,dept!B:D,3,FALSE)\"\n\"VLOOKUP(D34,'program  SubProgram'!B:E,3,FALSE)\"\n\"VLOOKUP(D34,'program  SubProgram'!B:E,3,FALSE)\"\n\"VLOOKUP(D34,'program  SubProgram'!B:E,3,FALSE)\"\n\" NOW()\"\n\"+B5\"\n\"+B11\"\n\"+B5\"\n\"IF(ISNUMBER(B47),+B47+TIME(0,E47,0),\"\"…\"\")\"\n\"MAX(C17:C47)\"\n\"+D50\"\n\"MAX(D66,C67)\"\n\"SUM(F81:F83)\"\n\"+I51\"\n\"L2\"\n\"L3-N3\"\n\"L3\"\n\"SUM(L2:L6)\"\n\"'Expense Summary'!F2\"\n\"0.15*Q7\"\n\"SUM(T7:X7)\"\n\"28264\"\n\"N9\"\n\"22000-3000\"\n\"L14-N14\"\n\"SUM(L8:L29)\"\n\"'Expense Summary'!$F$3\"\n\"L31\"\n\"L33\"\n\"L34-N34\"\n\"L44-X44\"\n\"SUM(L31:L81)\"\n\"'Expense Summary'!F4\"\n\"SUM(L83:L88)\"\n\"'Expense Summary'!$F$5\"\n\"L99\"\n\"SUM(L90:L107)\"\n\"'Expense Summary'!$F$6\"\n\"SUM(L109:L111)\"\n\"'Expense Summary'!$F$7\"\n\"2958.98+(8745/5)+468+695\"\n\"L114\"\n\"8745/5\"\n\"2793+2436+2995+495+5164+15522+3*1749\"\n\"L123-N123\"\n\"SUM(Q121:Q135)\"\n\"5500+2175+840\"\n\"SUM(L137:L149)\"\n\"'Expense Summary'!$F$9\"\n\"L7+L30+L82+L89+L108+L112+L136+L150\"\n\"L114-2000+L122+L124\"\n\"L119+L123+L125+L126-4500+L127-4500+L128+L129+L131+L132-7000\"\n\"L134+L135\"\n\"L133\"\n\"Q136-29000\"\n\"SUM(E2:E4)\"\n\"SUM(E7:E10)\"\n\"SUM(E13:E18)\"\n\"SUM(E24:E28)\"\n\"E41/4\"\n\"SUM(E38:E44)\"\n\"SUM(E48:E59)\"\n\"E45+E60\"\n\"SUM(E65:E66)\"\n\"Detail!L7\"\n\"Detail!N7\"\n\"Detail!Q7\"\n\"'Pre-1999'!E29\"\n\"Detail!L30\"\n\"Detail!N30\"\n\"Detail!Q30\"\n\"'Pre-1999'!$E$5\"\n\"Detail!L82\"\n\"Detail!N82\"\n\"Detail!Q82\"\n\"'Pre-1999'!$E$61\"\n\"Detail!L89\"\n\"Detail!N89+G5\"\n\"Detail!Q89\"\n\"'Pre-1999'!$E$34\"\n\"Detail!L108\"\n\"Detail!N108\"\n\"Detail!Q108\"\n\"'Pre-1999'!$E$19+450000\"\n\"Detail!L112\"\n\"Detail!N112\"\n\"Detail!Q112\"\n\"'Pre-1999'!$E$36\"\n\"Detail!L136\"\n\"Detail!N136+G8\"\n\"Detail!Q136\"\n\"'Pre-1999'!$E$11\"\n\"Detail!L150\"\n\"Detail!N150\"\n\"Detail!Q150\"\n\"'Pre-1999'!$E$21+74000\"\n\"SUM(B2:B9)\"\n\"IF(K8>L8,0,G8*(1-K8))\"\n\"IF(K8>L8,0,G8*(1-L8))\"\n\"+M8-N8\"\n\"SUM(O8:O32)\"\n\"SUM(P8:P32)\"\n\"+O33+P34\"\n\"B7-C7\"\n\"O36/M36-1\"\n\"AVERAGE(B102,B90,B78,B66,B54)\"\n\"I102/I117-1\"\n\"B18/1000\"\n\"B30/1000\"\n\"B42/1000\"\n\"B54/1000\"\n\"B66/1000\"\n\"B78/1000\"\n\"B90/1000\"\n\"B102/1000\"\n\"AVERAGE(B144:B148)\"\n\"A2+1\"\n\"$E$2\"\n\"$F$2\"\n\"TODAY()-E8\"\n\"'Sched Value'!$C$42\"\n\"'CO Summary'!$C$20\"\n\"'Sched Value'!$D$42\"\n\"'Sched Value'!$E$42\"\n\"SUM(D14:D15)\"\n\"SUM(E14:E16)\"\n\"D17-E9\"\n\"'Sched Value'!$N$42\"\n\"'Sched Value'!$I$42\"\n\"'Sched Value'!$J$42\"\n\"'Sched Value'!$K$42\"\n\"F16*-1\"\n\"SUM(E19:E22)\"\n\"'Sched Value'!$L$42\"\n\"'Sched Value'!$O$42*-1\"\n\"'Sched Value'!$P$42*-1\"\n\"F26-F27\"\n\"E23/E17\"\n\"SUM(D9:D18)\"\n\"SUM(I10:I18)\"\n\"SUM(C9:C18)\"\n\"D19+E19\"\n\"D19+E19\"\n\"C12+D12+E12+F12+G12\"\n\"I12+J12+K12\"\n\"L12/H12\"\n\"L12*0.1\"\n\"SUM(C11:C30)\"\n\"SUM(N12:N30)\"\n\"-G31\"\n\"C33+D33+G33\"\n\"'Article 8'!$G$68\"\n\"'Article 8'!$H$68\"\n\"'Article 8'!$I$68\"\n\"'Article 8'!$M$68\"\n\"'Article 8'!$K$68\"\n\"'Article 8'!$N$68\"\n\"'Article 7'!$G$54\"\n\"'Article 7'!$H$54\"\n\"'Article 7'!$I$54\"\n\"'Article 7'!$M$54\"\n\"'Article 7'!$K$54\"\n\"'Article 7'!$N$54\"\n\"SUM(C31+C33+C35+C37)\"\n\"D37+D35\"\n\"SUM(I31+I35+I37)\"\n\"K31\"\n\"C41+D41\"\n\"L41-I41\"\n\"M41*H41\"\n\"M38\"\n\"H41-L41\"\n\"C38+C41\"\n\"E31\"\n\"ABS(F31)\"\n\"-G33\"\n\"C42\"\n\"SUM(C43+D43+E43)\"\n\"C12*E12\"\n\"G12+H12\"\n\"J12*E12\"\n\"K12-L12\"\n\"I12-K12\"\n\"D24*SUM(G12:G17,G19:G23)\"\n\"SUM(G12:G24)\"\n\"C28*F28\"\n\"F28*J28\"\n\"SUM(G28:G52)\"\n\"G25+G53\"\n\"G12+H12\"\n\"K12-L12\"\n\"I12-K12\"\n\"SUM(G11:G14)\"\n\"F18\"\n\"SUM(L24:L43)\"\n\"L21+L44\"\n\"SUM(G17:G66)\"\n\"G15+G67\"\n\"SUM(J9:J25)\"\n\"F12-G12\"\n\"SUM(F12:F28)\"\n\"CJ6&BA6&DN6&S6&CF6&DJ6&HL6&IS6\"\n\"IF($M6=\"\"2V\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"2NV\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"3V\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"3NV\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF(SUM(N6:Q6)>0,IF(LEFT(L6,5)=\"\" Aero\"\",E6,0),0)\"\n\"IF(NOT(ISBLANK(M6)),IF($F6=\"\"lbs\"\",\"\" Aero,\"\"&M6,\"\" Aero\"\"&\"\"Error\"\"),\"\"\"\")\"\n\"IF(T6=\"\"X\"\",IF($F6=\"\"cu ft\"\",$E6,#VALUE!),0)\"\n\"IF(U6>0,IF(LEFT($L6,LEN(T$5))=T$5,$E6,),0)\"\n\"(IF(ISBLANK(AO6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AO$5,$AO$5&\"\"Error\"\")))&(IF(ISBLANK(AX6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AX$5,$AX$5&\"\"Error\"\")))&(IF(ISBLANK(Z6),\"\"\"\",IF($F6=\"\"cu ft\"\",$Z$5,$Z$5&\"\"Error\"\")))&(IF(ISBLANK(AU6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AU$5,$AU$5&\"\"Error\"\")))&(IF(ISBLANK(W6),\"\"\"\",IF($F6=\"\"cu ft\"\",$W$5,$W$5&\"\"Error\"\")))&(IF(ISBLANK(T6),\"\"\"\",IF($F6=\"\"cu ft\"\",$T$5,$T$5&\"\"Error\"\")))&(IF(ISBLANK(AF6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AF$5,$AF$5&\"\"Error\"\")))&(IF(ISBLANK(AR6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AR$5,$AR$5&\"\"Error\"\")))&(IF(ISBLANK(AI6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AI$5,$AI$5&\"\"Error\"\")))&(IF(ISBLANK(AL6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AL$5,$AL$5&\"\"Error\"\")))&(IF(ISBLANK(AC6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AC$5,$AC$5&\"\"Error\"\")))\"\n\"IF(BB6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"(IF(ISBLANK(BH6),\"\"\"\",IF($F6=\"\"gal\"\",$BH$5,$BH$5&\"\"Error\"\")))&(IF(ISBLANK(BK6),\"\"\"\",IF($F6=\"\"gal\"\",$BK$5,$BK$5&\"\"Error\"\")))&(IF(ISBLANK(BN6),\"\"\"\",IF($F6=\"\"gal\"\",$BN$5,$BN$5&\"\"Error\"\")))&(IF(ISBLANK(BQ6),\"\"\"\",IF($F6=\"\"gal\"\",$BQ$5,$BQ$5&\"\"Error\"\")))&(IF(ISBLANK(BB6),\"\"\"\",IF($F6=\"\"gal\"\",$BB$5,$BB$5&\"\"Error\"\")))&(IF(ISBLANK(BE6),\"\"\"\",IF($F6=\"\"gal\"\",$BE$5,$BE$5&\"\"Error\"\")))&(IF(ISBLANK(BZ6),\"\"\"\",IF($F6=\"\"gal\"\",$BZ$5,$BZ$5&\"\"Error\"\")))&(IF(ISBLANK(CC6),\"\"\"\",IF($F6=\"\"gal\"\",$CC$5,$CC$5&\"\"Error\"\")))&(IF(ISBLANK(BT6),\"\"\"\",IF($F6=\"\"gal\"\",$BT$5,$BT$5&\"\"Error\"\")))&(IF(ISBLANK(BW6),\"\"\"\",IF($F6=\"\"gal\"\",$BW$5,$BW$5&\"\"Error\"\")))\"\n\"IF(CG6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF(CH6>0,IF(LEFT($L6,LEN(CG$5))=CG$5,$E6,0),0)\"\n\"IF(ISBLANK(CG6),\"\"\"\",IF($F6=\"\"lbs\"\",CG$5,CG$5&\"\"Error\"\"))\"\n\"IF($CK6=\"\"I-A In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-A Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-B In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-B Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-C In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-C Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"II In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"II Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-A In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-A Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-B In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-B Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF(CL6>0,IF(LEFT($L6,11)=\"\" Flamm/Comb\"\",$E6,0),0)\"\n\"IF(ISBLANK(CK6),\"\"\"\",IF($F6=\"\"gal\"\",\"\" Flamm/Comb,\"\"&CK6,\"\" Flamm/Comb,Error\"\"))\"\n\"IF(ISBLANK(DK6),\"\"\"\",IF($F6=\"\"lbs\"\",DK$5,DK$5&\"\",Error\"\"))\"\n\"IF(DP6>0,IF(LEFT($L6,11)=\"\" FlammSolid\"\",$E6,0),0)\"\n\"IF($DR6=\"\"UD\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"UD\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"I\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"I\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"II\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"II\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"III\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"III\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"IV\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"IV\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(DS6>0,IF(LEFT($L6,8)=\"\" OrgPer,\"\",$E6,0),0)\"\n\"IF($EM6=4,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=4,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=3,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=3,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(EN6>0,IF(LEFT($L6,6)=\"\" Oxid,\"\",$E6,0),0)\"\n\"IF($FD6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FD6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(FE6>0,IF(LEFT($L6,5)=\"\" Pyro\"\",$E6,0),0)\"\n\"IF($FI6=4,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=4,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3D\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3D\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3N\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3N\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(FJ6>0,IF(LEFT($L6,10)=\"\" Unstable,\"\",$E6,0),0)\"\n\"IF($GD6=3,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=3,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($GD6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($GD6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(GE6>0,IF(LEFT($L6,10)=\"\" H2OReact,\"\",$E6,0),0)\"\n\"IF(GQ6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF(GQ6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(GR6>0,IF(LEFT($L6,11)=\"\" Carcinogen\"\",$E6,0),0)\"\n\"IF(GW6>0,IF(LEFT($L6,10)=\"\" Corrosive\"\",$E6,0),0)\"\n\"IF(HB6>0,IF(LEFT($L6,9)=\"\" Hi-Toxic\"\",$E6,0),0)\"\n\"IF(HG6>0,IF(LEFT($L6,9)=\"\" Irritant\"\",$E6,0),0)\"\n\"IF(NOT(ISBLANK(HK6)),IF(AND(HK6=\"\"NonSeal-Alpha\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Alpha\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"NonSeal-Beta\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Beta\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6), IF(AND(HK6=\"\"NonSeal-Gamma\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Gamma\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6),CONCATENATE(HL$5,\"\"Error\"\"))))))),\"\"\"\")\"\n\"IF($HK6=\"\"NonSeal-Gamma\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Gamma\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"NonSeal-Beta\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Beta\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"NonSeal-Alpha\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Alpha\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF(HM6>0,IF(LEFT($L6,LEN($HL$5))=$HL$5,$E6,0),0)\"\n\"IF(HZ6>0,IF(LEFT($L6,11)=\"\" Sensitizer\"\",$E6,0),0)\"\n\"IF(IE6>0,IF(LEFT($L6,6)=\"\" Toxic\"\",$E6,0),0)\"\n\"IF(IJ6>0,IF(LEFT($L6,15)=\"\" OtherHealthHaz\"\",$E6,0),0)\"\n\"(IF(DR6=\"\"UD\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,UD\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"I\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,I\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(FI6=4,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,4\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(FI6=\"\"3D\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,3D\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(HA6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Hi-Toxic\"\",\"\" Hi-Toxic,Error\"\"),\"\"\"\"))&(IF(FD6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Pyro\"\",\"\" Pyro,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"II\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,II\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(GD6=3,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,3\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"III\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,III\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(EM6=4,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,4\"\",\"\" Oxid,Error\"\"),\"\"\"\"))&(IF(EM6=3,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,3\"\",\"\" Oxid,Error\"\"),\"\"\"\"))\"\n\"(IF(FI6=\"\"3N\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,3N\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"IV\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,IV\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(FI6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,2\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(GD6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,2\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))\"\n\"(IF(FI6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,1\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(GD6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,1\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))&(IF(EM6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,2\"\",\"\" Oxid,Error\"\"),\"\"\"\"))\"\n\"(IF(ID6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Toxic\"\",\"\" Toxic,Error\"\"),\"\"\"\"))&(IF(EM6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,1\"\",\"\" Oxid,Error\"\"),\"\"\"\"))&(IF(GV6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Corrosive\"\",\"\" Corrosive,Error\"\"),\"\"\"\"))\"\n\"(IF(GQ6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Carcinogen\"\",\"\" Carcinogen,Error\"\"),\"\"\"\"))&(IF(II6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OtherHealthHaz\"\",\"\" OtherHealthHaz,Error\"\"),\"\"\"\"))&(IF(DO6=\"\"X\"\",IF(F6=\"\"lbs\"\",\"\" FlammSolid\"\",\"\" FlammSolid,Error\"\"),\"\"\"\"))&(IF(HF6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Irritant\"\",\"\" Irritant,Error\"\"),\"\"\"\"))&(IF(HY6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Sensitizer\"\",\"\" Sensitizer,Error\"\"),\"\"\"\"))\"\n\"IN6&IO6&IP6&IQ6&IR6\"\n\"SUM(N6:N55)\"\n\"SUM(FL6:FL55)+FN56\"\n\"SUM(IN6:IV55)\"\n\"'Chemical Inventory'!C1\"\n\"'Chemical Inventory'!Q56\"\n\"'Chemical Inventory'!P56\"\n\"'Chemical Inventory'!O56\"\n\"'Chemical Inventory'!N56\"\n\"'Chemical Inventory'!BI56\"\n\"'Chemical Inventory'!BL56\"\n\"'Chemical Inventory'!CA56\"\n\"'Chemical Inventory'!CD56\"\n\"'Chemical Inventory'!CH56\"\n\"'Chemical Inventory'!DP56\"\n\"'Chemical Inventory'!X56\"\n\"'Chemical Inventory'!DL56\"\n\"'Chemical Inventory'!CL56\"\n\"'Chemical Inventory'!CM56\"\n\"'Chemical Inventory'!CN56\"\n\"'Chemical Inventory'!CO56\"\n\"'Chemical Inventory'!CP56\"\n\"'Chemical Inventory'!CQ56\"\n\"'Chemical Inventory'!CR56\"\n\"'Chemical Inventory'!CS56\"\n\"'Chemical Inventory'!CT56\"\n\"'Chemical Inventory'!CU56\"\n\"'Chemical Inventory'!CV56\"\n\"'Chemical Inventory'!CW56\"\n\"'Chemical Inventory'!DT56\"\n\"'Chemical Inventory'!DS56\"\n\"'Chemical Inventory'!DV56\"\n\"'Chemical Inventory'!DU56\"\n\"'Chemical Inventory'!DX56\"\n\"'Chemical Inventory'!DW56\"\n\"'Chemical Inventory'!DZ56\"\n\"'Chemical Inventory'!DY56\"\n\"'Chemical Inventory'!EB56\"\n\"'Chemical Inventory'!EA56\"\n\"'Chemical Inventory'!EO56\"\n\"'Chemical Inventory'!EN56\"\n\"'Chemical Inventory'!EQ56\"\n\"'Chemical Inventory'!EP56\"\n\"'Chemical Inventory'!ES56\"\n\"'Chemical Inventory'!ER56\"\n\"'Chemical Inventory'!EU56\"\n\"'Chemical Inventory'!ET56\"\n\"'Chemical Inventory'!AM56\"\n\"'Chemical Inventory'!FF56\"\n\"'Chemical Inventory'!FE56\"\n\"'Chemical Inventory'!AP56\"\n\"'Chemical Inventory'!FK56\"\n\"'Chemical Inventory'!FJ56\"\n\"'Chemical Inventory'!FM56\"\n\"'Chemical Inventory'!FL56\"\n\"'Chemical Inventory'!FO56\"\n\"'Chemical Inventory'!FN56\"\n\"'Chemical Inventory'!FQ56\"\n\"'Chemical Inventory'!FP56\"\n\"'Chemical Inventory'!FS56\"\n\"'Chemical Inventory'!FR56\"\n\"'Chemical Inventory'!AY56\"\n\"'Chemical Inventory'!GF56\"\n\"'Chemical Inventory'!GE56\"\n\"'Chemical Inventory'!GH56\"\n\"'Chemical Inventory'!GG56\"\n\"'Chemical Inventory'!GJ56\"\n\"'Chemical Inventory'!GI56\"\n\"'Chemical Inventory'!GS56\"\n\"'Chemical Inventory'!GR56\"\n\"'Chemical Inventory'!AD56\"\n\"'Chemical Inventory'!GX56\"\n\"'Chemical Inventory'!GW56\"\n\"'Chemical Inventory'!U56\"\n\"'Chemical Inventory'!BC56\"\n\"'Chemical Inventory'!BF56\"\n\"'Chemical Inventory'!BU56\"\n\"'Chemical Inventory'!BX56\"\n\"'Chemical Inventory'!HC56\"\n\"'Chemical Inventory'!HB56\"\n\"'Chemical Inventory'!AA56\"\n\"'Chemical Inventory'!BO56\"\n\"'Chemical Inventory'!BR56\"\n\"'Chemical Inventory'!HH56\"\n\"'Chemical Inventory'!HG56\"\n\"'Chemical Inventory'!AG56\"\n\"'Chemical Inventory'!IA56\"\n\"'Chemical Inventory'!HZ56\"\n\"'Chemical Inventory'!AS56\"\n\"'Chemical Inventory'!IK56\"\n\"'Chemical Inventory'!IJ56\"\n\"'Chemical Inventory'!AJ56\"\n\"'Chemical Inventory'!IF56\"\n\"'Chemical Inventory'!IE56\"\n\"'Chemical Inventory'!AV56\"\n\"'Chemical Inventory'!HQ56\"\n\"'Chemical Inventory'!HO56\"\n\"'Chemical Inventory'!HM56\"\n\"'Chemical Inventory'!HR56\"\n\"'Chemical Inventory'!HP56\"\n\"'Chemical Inventory'!HN56\"\n\"'Chemical Inventory'!C1\"\n\"'Chemical Inventory'!C2\"\n\"A2\"\n\"'Chemical Inventory'!CI56\"\n\"D13\"\n\"IF(E13<1,0,IF(E13<11,125,IF(E13<51,175,IF(E13<101,225,IF(E13<201,275,IF(E13<501,400,700))))))\"\n\"'Chemical Inventory'!AQ56\"\n\"D17/10\"\n\"'Chemical Inventory'!AZ56\"\n\"'Chemical Inventory'!AB56\"\n\"'Chemical Inventory'!AW56\"\n\"'Chemical Inventory'!Y56\"\n\"D21/200\"\n\"'Chemical Inventory'!V56\"\n\"'Chemical Inventory'!AH56\"\n\"'Chemical Inventory'!AT56\"\n\"'Chemical Inventory'!AK56\"\n\"D25/650\"\n\"'Chemical Inventory'!AN56\"\n\"D26/504\"\n\"'Chemical Inventory'!AE56\"\n\"D27/6000\"\n\"SUM(E17:E27)\"\n\"'Chemical Inventory'!DM56\"\n\"IF(E32<1,0,IF(E32<101,100,IF(E32<301,150,IF(E32<501,200,250))))\"\n\"'Chemical Inventory'!R56\"\n\"IF(E36>500,100,0)\"\n\"'Chemical Inventory'!BJ56\"\n\"'Chemical Inventory'!BM56\"\n\"'Chemical Inventory'!BP56\"\n\"'Chemical Inventory'!BS56\"\n\"'Chemical Inventory'!BD56\"\n\"'Chemical Inventory'!BG56\"\n\"'Chemical Inventory'!CB56\"\n\"D46/50\"\n\"'Chemical Inventory'!CE56\"\n\"'Chemical Inventory'!BV56\"\n\"D48/60\"\n\"'Chemical Inventory'!BY56\"\n\"D49/500\"\n\"SUM(E40:E49)\"\n\"'Chemical Inventory'!CX56\"\n\"D54/30\"\n\"'Chemical Inventory'!CY56\"\n\"'Chemical Inventory'!CZ56\"\n\"'Chemical Inventory'!DA56\"\n\"D57/120\"\n\"'Chemical Inventory'!DB56\"\n\"'Chemical Inventory'!DC56\"\n\"'Chemical Inventory'!DD56\"\n\"'Chemical Inventory'!DE56\"\n\"'Chemical Inventory'!DF56\"\n\"'Chemical Inventory'!DG56\"\n\"'Chemical Inventory'!DH56\"\n\"D64/1000\"\n\"'Chemical Inventory'!DI56\"\n\"SUM(E54:E65)\"\n\"'Chemical Inventory'!HS56+'Chemical Inventory'!HU56+'Chemical Inventory'!HW56\"\n\"'Chemical Inventory'!HT56+'Chemical Inventory'!HV56+'Chemical Inventory'!HX56\"\n\"SUM(E70:E71)\"\n\"'Chemical Inventory'!EC56\"\n\"C76+D76/10\"\n\"'Chemical Inventory'!EE56\"\n\"'Chemical Inventory'!FT56\"\n\"'Chemical Inventory'!FV56\"\n\"'Chemical Inventory'!HD56\"\n\"C80/1+D80/10\"\n\"'Chemical Inventory'!FG56\"\n\"'Chemical Inventory'!EG56\"\n\"'Chemical Inventory'!GK56\"\n\"'Chemical Inventory'!EI56\"\n\"'Chemical Inventory'!EV56\"\n\"'Chemical Inventory'!EX56\"\n\"'Chemical Inventory'!FX56\"\n\"'Chemical Inventory'!EK56\"\n\"C88/2+D88/20\"\n\"'Chemical Inventory'!FZ56\"\n\"C89/5+D89/50\"\n\"'Chemical Inventory'!GM56\"\n\"'Chemical Inventory'!GB56\"\n\"C91/10+D91/100\"\n\"'Chemical Inventory'!GO56\"\n\"'Chemical Inventory'!EZ56\"\n\"'Chemical Inventory'!IG56\"\n\"'Chemical Inventory'!FB56\"\n\"C95/55+D95/500\"\n\"'Chemical Inventory'!GY56\"\n\"'Chemical Inventory'!GT56\"\n\"'Chemical Inventory'!IL56\"\n\"'Chemical Inventory'!DQ56\"\n\"D99/100\"\n\"'Chemical Inventory'!HI56\"\n\"'Chemical Inventory'!IB56\"\n\"SUM(E76:E101)\"\n\"E37+E73+E33+E103+E67+E14+E51+E29\"\n\"+$H$11*H12\"\n\"+$H$11*H12\"\n\"+$H$11*H12\"\n\"+$E$14*(1.1/1000)*(1+H14)\"\n\"+$E$14*1.1/1000\"\n\"+$E$14*(1.1/1000)*(1-H14)\"\n\"+$E$16*0.24*(1+$H$16)\"\n\"+$E$16*0.24\"\n\"+$E$16*0.24*(1-$H$16)\"\n\"+$E$17*0.24*(1+$H$17)\"\n\"+$E$17*0.24\"\n\"+$E$17*0.24*(1-$H$17)\"\n\"+$E$18*0.13*(1+$H$18)\"\n\"+$E$18*0.13\"\n\"+$E$18*0.13*(1-$H$18)\"\n\"+$E$19*(15/2000)*(1+$H$19)\"\n\"+$E$19*(15/2000)\"\n\"+$E$19*(15/2000)*(1-$H$19)\"\n\"+(1+H20)*20\"\n\"+(1-H20)*20\"\n\"+$H$21*130\"\n\"+$H$22*130\"\n\"+L94*1.15\"\n\"+L113*1.15\"\n\"+L132*1.15\"\n\"+N94\"\n\"+N113\"\n\"+N132\"\n\"(SUM(J14:J25)-J21-J22)*$H$26*($F$26/12)\"\n\"SUM(J14:J28)\"\n\"+J29/130\"\n\"+E33*H33\"\n\"+F33*H33\"\n\"+G33*H33\"\n\"+G97\"\n\"+G116\"\n\"+G135\"\n\"F36*J11\"\n\"+G36*K11\"\n\"SUM(J33:J37)\"\n\"+J29+J38\"\n\"+J11-J29\"\n\"+J11-J40\"\n\"+J44+J36+J33\"\n\"+J45*J8\"\n\"+K8*K45\"\n\"0.13*O82*N96\"\n\"0.26*O82\"\n\"+C83*H83\"\n\"+C83*H83\"\n\"1.1*O83*N96\"\n\"0.34*O83\"\n\"0.6*O84*N96\"\n\"0.25*O84\"\n\"0.5*O85*N96\"\n\"1.37*O85\"\n\"0.1*O86*N96\"\n\"0.14*O86\"\n\"0.45*O87*N96\"\n\"0.24*O87\"\n\"1.6*O88*N96\"\n\"7.8*O88\"\n\"0.6*O89*N96\"\n\"0.42*C89\"\n\"1.94*O90\"\n\"2.28*O91\"\n\"3.84*O92\"\n\"+H93*C93\"\n\"+H93*C93\"\n\"0.1*O93*N96\"\n\"0.05*O93\"\n\"SUM(J82:K93)\"\n\"SUM(J82:K93)\"\n\"SUM(L82:L93)\"\n\"+G95*J94\"\n\"+G96/J8\"\n\"9400*C101\"\n\"9400*C101\"\n\"+M101*O101*$N$115\"\n\"1.03*O102\"\n\"1.47*O104\"\n\"0.11*O105\"\n\"4.13*O107\"\n\"0.21*C108\"\n\"1.14*O110\"\n\"SUM(M102:M111)\"\n\"+G115/K8\"\n\"+M120*O120*$N$134\"\n\"0.44*O121\"\n\"0.18*O122\"\n\"2.23*O123\"\n\"0.23*O125\"\n\"3.77*O126\"\n\"0.49*O128\"\n\"1.2*C129\"\n\"2.24*O130\"\n\"SUM(#REF!)\"\n\"+G134/L8\"\n\"+$H$11*H12\"\n\"+$H$11*H12\"\n\"+$H$11*H12\"\n\"+$E$14*(1.1/1000)*(1+H14)\"\n\"+$E$14*1.1/1000\"\n\"+$E$14*(1.1/1000)*(1-H14)\"\n\"+$E16*0.24*(1+H16)\"\n\"+$E16*0.24\"\n\"+$E16*0.24*(1-H16)\"\n\"+$E18*0.13*(1+H18)\"\n\"+$E18*0.13\"\n\"+$E18*0.13*(1-H18)\"\n\"+$E19*(15/2000)*(1+H19)\"\n\"+$E19*15/2000\"\n\"+$E19*(15/2000)*(1-H19)\"\n\"+(1+H20)*32\"\n\"+(1-H20)*32\"\n\"+$H$21*130\"\n\"+$H$22*130\"\n\"+L97*N99*1.15\"\n\"+L112*N114*1.15\"\n\"+L127*N129*1.15\"\n\"+N97\"\n\"+N112\"\n\"+N127\"\n\"(SUM(J14:J25)-J21-J22)*$H$26*($F$26/12)\"\n\"SUM(J14:J28)\"\n\"+J29/130\"\n\"+E33*H33\"\n\"+F33*H33\"\n\"+G33*H33\"\n\"+G100\"\n\"+G115\"\n\"+G130\"\n\"+F36*J11\"\n\"SUM(J33:J37)\"\n\"+J29+J38\"\n\"+J11-J29\"\n\"+J11-J40\"\n\"+J44+J33+J36\"\n\"+L44+L36+L33\"\n\"+J45*J8\"\n\"+K8*K45\"\n\"0.13*O88*N99\"\n\"0.26*O88\"\n\"+C89*H89\"\n\"+C89*H89\"\n\"0.5*O89*N99\"\n\"2*O89\"\n\"0.1*O90*N99\"\n\"0.14*O90\"\n\"1.6*O91*N99\"\n\"7.8*O91\"\n\"0.6*O92*N99\"\n\"0.84*O92\"\n\"1.94*O93\"\n\"2.28*O94\"\n\"0*O95\"\n\"+H96*C96\"\n\"+H96*C96\"\n\"0.05*O96\"\n\"SUM(J88:J96)\"\n\"SUM(J88:J96)\"\n\"+G98*J97\"\n\"+G99/J8\"\n\"2.37*O104\"\n\"0.11*O105\"\n\"4.13*O106\"\n\"0.42*O107\"\n\"1.14*O109\"\n\"3.84*O110\"\n\"SUM(M104:M110)\"\n\"+G114/K8\"\n\"4.12*O119\"\n\"3.77*O121\"\n\"0.23*O122\"\n\"0.49*O123\"\n\"1.2*O124\"\n\"2.24*O125\"\n\"+G129/L8\"\n\"SUM(B8:B9)\"\n\"-B12\"\n\"-B19*0.4\"\n\"+D6\"\n\"-B11\"\n\"+C8*D8\"\n\"+C10\"\n\"+K8/I8\"\n\"+C14\"\n\"SUM(C8:C9)\"\n\"-I10-SUM(C17:C18)\"\n\"+I$8\"\n\"+I10\"\n\"+I$9\"\n\"-I11\"\n\"+D27\"\n\"+I$11\"\n\"-E29\"\n\"+C37+E37\"\n\"SUM(C37:C40)\"\n\"-E47\"\n\"+F39\"\n\"+D39\"\n\"+D53\"\n\"+I8\"\n\"+C17\"\n\"+D71\"\n\"-E72\"\n\"+C55\"\n\"+C18\"\n\"-E79\"\n\"+C13\"\n\"SUM(F72:F76)\"\n\"-E89\"\n\"+D89\"\n\"-E107\"\n\"+F90\"\n\"+B12\"\n\"+E94\"\n\"+B98\"\n\"+B13\"\n\"-E115\"\n\"+B12\"\n\"-E132\"\n\"-E122\"\n\"+D122\"\n\"+E117\"\n\"+E127\"\n\"+B121\"\n\"+F121\"\n\"+B13\"\n\"SUM(B20:B21)\"\n\"+B22\"\n\"-B22*0.4\"\n\"+B20\"\n\"+B25\"\n\"SUM(B32:B34)\"\n\"6000*10\"\n\"-92750-B21\"\n\"+B22/B20\"\n\"+B47/B45\"\n\"SUM(E7:E11)\"\n\"SUM(F12:F20)\"\n\"SUM(E26:E29)\"\n\"SUM(E33:E34)\"\n\"SUM(F30:F35)\"\n\"+F21-F36\"\n\"SUM(F36:F39)\"\n\"+$D$9*E10%\"\n\"+H10/$H$9%\"\n\"+$D$9*E11%\"\n\"+$D$9*E12%\"\n\"+$D$9*E13%\"\n\"+$D$9*E14%\"\n\"+$D$9*E15%\"\n\"+$D$9*E16%\"\n\"+$D$9*E17%\"\n\"SUM(E10:E17)\"\n\"+$D$9*E21%\"\n\"+J21\"\n\"+$D$9*E22%\"\n\"+$D$9*E23%\"\n\"(H23/$H$9)*100\"\n\"+$D$9*E24%\"\n\"+$D$9*E25%\"\n\"($H25/$H$9)*100\"\n\"+$D$9*E26%\"\n\"+$D$9*E27%\"\n\"($H$27/$H$9)*100\"\n\"+$D$9*E28%\"\n\"+H21-H28\"\n\"(I28/$H$9)*100\"\n\"SUM(C21:C27)-C28\"\n\"+$D$9*E31%\"\n\"($H$31/$H$9)*100\"\n\"+$D$9*E32%\"\n\"($H$32/$H$9)*100\"\n\"+$D$9*E33%\"\n\"+$D$9*E34%\"\n\"+$D$9*E35%\"\n\"+$D$9*E36%\"\n\"($H$36/$H$9)*100\"\n\"+$D$9*E37%\"\n\"+$D$9*E38%\"\n\"($H$38/$H$9)*100\"\n\"+$D$9*E39%\"\n\"($H$39/$H$9)*100\"\n\"SUM(C29:D40)\"\n\"SUM(J29:K39)\"\n\"+E9-E41\"\n\"+J9-K41\"\n\"+$D$9*E47%\"\n\"($H$47/$H$9)*100\"\n\"+$D$9*E48%\"\n\"($H$48/$H$9)*100\"\n\"+$D$9*E49%\"\n\"+$D$9*E50%\"\n\"($H$50/$H$9)*100\"\n\"+$D$9*E51%\"\n\"($H$51/$H$9)*100\"\n\"+$D$9*E52%\"\n\"($H$52/$H$9)*100\"\n\"+$D$9*E53%\"\n\"SUM(C47:C53)\"\n\"SUM(E47:E54)\"\n\"+$D$9*E57%\"\n\"($H$57/$H$9)*100\"\n\"+$D$9*E58%\"\n\"($H$58/$H$9)*100\"\n\"+$D$9*E59%\"\n\"($H$59/$H$9)*100\"\n\"+$D$9*E60%\"\n\"+$D$9*E61%\"\n\"+$D$9*E62%\"\n\"+$D$9*E63%\"\n\"SUM(C57:C63)\"\n\"+$D$9*E66%\"\n\"($H$66/$H$9)*100\"\n\"+$D$9*E67%\"\n\"($H$67/$H$9)*100\"\n\"+$D$9*E68%\"\n\"+$D$9*E69%\"\n\"+$D$9*E70%\"\n\"+$D$9*E71%\"\n\"($H$71/$H$9)*100\"\n\"+$D$9*E72%\"\n\"($H$72/$H$9)*100\"\n\"+$D$9*E73%\"\n\"+$D$9*E74%\"\n\"($H$74/$H$9)*100\"\n\"+$D$9*E75%\"\n\"($H$75/$H$9)*100\"\n\"+$D$9*E76%\"\n\"($H$76/$H$9)*100\"\n\"+$D$9*E77%\"\n\"($H$77/$H$9)*100\"\n\"SUM(C66:C78)\"\n\"SUM(H66:H77)\"\n\"+$D$9*E81%\"\n\"+$D$9*E82%\"\n\"SUM(E81:E82)\"\n\"($H$82/$H$9)*100\"\n\"SUM(C47:C82)\"\n\"SUM(F55:F83)\"\n\"+$D$9*F86%\"\n\"+F44-F84\"\n\"+H9*K86%\"\n\"+K44-K84\"\n\"SUM(J21:J86)\"\n\"+'Balance Sheet'!$F$12/'Balance Sheet'!$F$30\"\n\"+'Balance Sheet'!$E$29/('Balance Sheet'!$F$39+'Balance Sheet'!$E$29)\"\n\"+'Balance Sheet'!$F$36/'Balance Sheet'!$F$39\"\n\"+'Current Profit & Loss sheet'!$I$86/'Current Profit & Loss sheet'!$H$9\"\n\"+'Current Profit & Loss sheet'!$H$9/'Balance Sheet'!$F$21\"\n\"+C17*C18\"\n\"+'Balance Sheet'!$F$21/'Balance Sheet'!$F$39\"\n\"+'Current Profit & Loss sheet'!$I$86*2\"\n\"+'Current Profit & Loss sheet'!$I$86*3\"\n\"+'Work out income required'!$D$6/('Current Profit & Loss sheet'!$K$44-'Work out income required'!$C$7)*100\"\n\"+J30/'Current Profit & Loss sheet'!$H$9%\"\n\"+'Current Profit & Loss sheet'!$H$9\"\n\"SUM(G6:G9)\"\n\"+G5/D5%\"\n\"+'Current Profit & Loss sheet'!$M$87\"\n\"+$D$5*C6%\"\n\"+D6\"\n\"+D5\"\n\"+D6\"\n\"+D7\"\n\"+C20\"\n\"+C21\"\n\"SUM(L6:O6)\"\n\"+'Current Profit & Loss sheet'!$N$87-(C8+C9)\"\n\"+$D$5*C7%\"\n\"+P6\"\n\"+L6\"\n\"+K7*$C$7%\"\n\"+'Current Profit & Loss sheet'!$N$77\"\n\"+$D$5*C8%\"\n\"+C20\"\n\"+'Current Profit & Loss sheet'!$N$86\"\n\"+$D$5*C9%\"\n\"+D10/D5%\"\n\"+'Current Profit & Loss sheet'!$H$31\"\n\"+K15\"\n\"(C14/$D$5)*100\"\n\"+C14*$H$23\"\n\"+G14/(A14*A27)\"\n\"+G15/(A15*A27)\"\n\"+G16/(A16*A27)\"\n\"+G17/(A17*A27)\"\n\"+G18/(A18*A27)\"\n\"SUM(C14:C18)\"\n\"+D10-C19\"\n\"+G20/(A20*A27)\"\n\"SUM(G14:G20)\"\n\"SUM(C19:C21)\"\n\"+D8+D10\"\n\"+'Current Profit & Loss sheet'!$J$31+'Current Profit & Loss sheet'!$J$93+'Current Profit & Loss sheet'!$J$77\"\n\"+C20+C19\"\n\"+G12/G23\"\n\"100/H23\"\n\"+D22-D23\"\n\"SUM(A14:A20)\"\n\"+A27*A26\"\n\"+G21/A28\"\n\"+A27\"\n\"+'Current Profit & Loss sheet'!$H$9\"\n\"+'Work out income required'!$D$6\"\n\"+'Work out income required'!$D$7\"\n\"+'Work out income required'!$D$8\"\n\"+'Work out income required'!$D$9\"\n\"+'Work out income required'!$H$5\"\n\"+'Work out income required'!$G$12\"\n\"+'Work out income required'!$B$14\"\n\"+'Work out income required'!$G$14\"\n\"+'Work out income required'!$H$14\"\n\"+'Work out income required'!$B$15\"\n\"+'Work out income required'!$G$15\"\n\"+'Work out income required'!$H$15\"\n\"+'Work out income required'!$B$16\"\n\"+'Work out income required'!$G$16\"\n\"+'Work out income required'!$H$16\"\n\"+'Work out income required'!$B$17\"\n\"+'Work out income required'!$G$17\"\n\"+'Work out income required'!$H$17\"\n\"+'Work out income required'!$B$18\"\n\"+'Work out income required'!$C$18\"\n\"+'Work out income required'!$H$18\"\n\"+'Work out income required'!$G$20\"\n\"+'Work out income required'!$H$20\"\n\"+'Work out income required'!$G$28\"\n\"+'Current Profit & Loss sheet'!$H$9\"\n\"+'Work out income required'!$G$12\"\n\"+'Current Profit & Loss sheet'!$H$10\"\n\"+$G$6*I7%\"\n\"+'Current Profit & Loss sheet'!$J$10\"\n\"+'Current Profit & Loss sheet'!$H$11\"\n\"+$G$6*I8%\"\n\"+'Current Profit & Loss sheet'!$J$11\"\n\"+'Current Profit & Loss sheet'!$H$12\"\n\"+$G$6*I9%\"\n\"+'Current Profit & Loss sheet'!$J$12\"\n\"+'Current Profit & Loss sheet'!$H$13\"\n\"+$G$6*I10%\"\n\"+'Current Profit & Loss sheet'!$J$13\"\n\"+'Current Profit & Loss sheet'!$H$14\"\n\"+$G$6*I11%\"\n\"+'Current Profit & Loss sheet'!$J$14\"\n\"+'Current Profit & Loss sheet'!$H$15\"\n\"+$G$6*I12%\"\n\"+'Current Profit & Loss sheet'!$J$15\"\n\"+'Current Profit & Loss sheet'!$H$16\"\n\"+$G$6*I13%\"\n\"+'Current Profit & Loss sheet'!$J$16\"\n\"+'Current Profit & Loss sheet'!$B$17\"\n\"+'Current Profit & Loss sheet'!$H$17\"\n\"+$G$6*I14%\"\n\"+'Current Profit & Loss sheet'!$J$17\"\n\"SUM(I7:I14)\"\n\"+'Current Profit & Loss sheet'!$H$21\"\n\"+B18\"\n\"+'Current Profit & Loss sheet'!$H$22\"\n\"+$G$6*I19%\"\n\"+'Current Profit & Loss sheet'!$J$22\"\n\"+I19\"\n\"+'Current Profit & Loss sheet'!$H$23\"\n\"+$G$6*I20%\"\n\"+'Current Profit & Loss sheet'!$J$23\"\n\"+'Current Profit & Loss sheet'!$H$24\"\n\"+$G$6*I21%\"\n\"+'Current Profit & Loss sheet'!$J$24\"\n\"+'Current Profit & Loss sheet'!$H$25\"\n\"+$G$6*I22%\"\n\"+'Current Profit & Loss sheet'!$J$25\"\n\"+'Current Profit & Loss sheet'!$H$26\"\n\"+G23/$G$6%\"\n\"+I23\"\n\"+'Current Profit & Loss sheet'!$H$27\"\n\"+$G$6*I24%\"\n\"+'Current Profit & Loss sheet'!$J$27\"\n\"+'Current Profit & Loss sheet'!$H$28\"\n\"+G18-G25\"\n\"+H25/$G$6%\"\n\"+'Current Profit & Loss sheet'!$D$29\"\n\"SUM(G19:G24)+H25\"\n\"+'Current Profit & Loss sheet'!$H$31\"\n\"+'Current Profit & Loss sheet'!$H$32\"\n\"+$G$6*I29%\"\n\"+'Current Profit & Loss sheet'!$J$32\"\n\"+'Current Profit & Loss sheet'!$H$33\"\n\"+$G$6*I30%\"\n\"+'Current Profit & Loss sheet'!$J$33\"\n\"+'Current Profit & Loss sheet'!$H$34\"\n\"+$G$6*I31%\"\n\"+'Current Profit & Loss sheet'!$J$34\"\n\"+'Current Profit & Loss sheet'!$H$35\"\n\"+$G$6*I32%\"\n\"+'Current Profit & Loss sheet'!$J$35\"\n\"+'Current Profit & Loss sheet'!$H$36\"\n\"+'Current Profit & Loss sheet'!$H$37\"\n\"+'Current Profit & Loss sheet'!$H$38\"\n\"+'Current Profit & Loss sheet'!$H$39\"\n\"+'Current Profit & Loss sheet'!$D$41\"\n\"SUM(G28:G37)\"\n\"SUM(I26:J37)\"\n\"+'Current Profit & Loss sheet'!$F$44\"\n\"+I6-J38\"\n\"+'Current Profit & Loss sheet'!$H$47\"\n\"+'Current Profit & Loss sheet'!$H$48\"\n\"+'Current Profit & Loss sheet'!$H$49\"\n\"+'Current Profit & Loss sheet'!$H$50\"\n\"+'Current Profit & Loss sheet'!$H$51\"\n\"+'Current Profit & Loss sheet'!$H$52\"\n\"+'Current Profit & Loss sheet'!$H$53\"\n\"+'Current Profit & Loss sheet'!$D$55\"\n\"SUM(G44:G51)\"\n\"+'Current Profit & Loss sheet'!$H$57\"\n\"+$G$6*I54%\"\n\"+'Current Profit & Loss sheet'!$J$57\"\n\"+'Current Profit & Loss sheet'!$H$58\"\n\"+'Current Profit & Loss sheet'!$H$59\"\n\"+'Current Profit & Loss sheet'!$H$60\"\n\"+'Current Profit & Loss sheet'!$H$61\"\n\"+'Current Profit & Loss sheet'!$H$62\"\n\"+'Current Profit & Loss sheet'!$H$63\"\n\"+'Current Profit & Loss sheet'!$D$64\"\n\"SUM(G54:G60)\"\n\"+'Current Profit & Loss sheet'!$H$66\"\n\"+'Current Profit & Loss sheet'!$H$67\"\n\"+'Current Profit & Loss sheet'!$H$68\"\n\"+'Current Profit & Loss sheet'!$H$69\"\n\"+'Current Profit & Loss sheet'!$H$70\"\n\"+'Current Profit & Loss sheet'!$H$71\"\n\"+'Current Profit & Loss sheet'!$H$72\"\n\"+'Current Profit & Loss sheet'!$H$73\"\n\"+'Current Profit & Loss sheet'!$H$74\"\n\"+'Current Profit & Loss sheet'!$H$75\"\n\"+'Current Profit & Loss sheet'!$H$76\"\n\"+'Current Profit & Loss sheet'!$H$77\"\n\"+'Work out income required'!$C$20\"\n\"+'Current Profit & Loss sheet'!$D$79\"\n\"SUM(G63:G74)\"\n\"+'Current Profit & Loss sheet'!$H$81\"\n\"+'Current Profit & Loss sheet'!$H$82\"\n\"+'Current Profit & Loss sheet'!$D$84\"\n\"SUM(G44:G79)\"\n\"+'Current Profit & Loss sheet'!$D$86\"\n\"+G6*I83%\"\n\"+J41-J81\"\n\"SUM(I19:I83)\"\n\"SUM(L18:L83)\"\n\"SUM(L84:M84)\"\n\"+'Work out income required'!$A$27\"\n\"'Work out income required'!$G$28*M2\"\n\"+N2*R15\"\n\"SUM(B5:L5)\"\n\"P5*O5\"\n\"P5*M5\"\n\"+(Q5/$Q$14)*100\"\n\"+'Work out income required'!$G$12*S5%\"\n\"+'Work out income required'!$G$12*S6%\"\n\"+'Work out income required'!$G$12*S7%\"\n\"+'Work out income required'!$G$12*S8%\"\n\"+'Work out income required'!$G$12*S9%\"\n\"+'Work out income required'!$G$12*S10%\"\n\"+'Work out income required'!$G$12*S11%\"\n\"SUM(T5:T11)\"\n\"+T5/N5\"\n\"SUM(Q5:Q11)\"\n\"+'Work out income required'!$A$28\"\n\"+(T7/N7)\"\n\"+R14/R15%\"\n\"+R15-R14\"\n\"+S20*N5\"\n\"+T21/N6\"\n\"+T12-T20\"\n\"SUM(T20:T21)\"\n\"+N2/R16%\"\n\"+M23*R14\"\n\"+R16\"\n\"+'Work out income required'!$A$27\"\n\"+'Work out income required'!$H$28\"\n\"+'Work out income required'!$G$28\"\n\"+'Time Sheet'!$M$5\"\n\"+I3*H4\"\n\"+'Time Sheet'!$M$6\"\n\"+I3*H5\"\n\"+(D4+E4)/36\"\n\"+(D5+E5)/10\"\n\"+(D5+E5)/12\"\n\"+(D5+E5)/15\"\n\"+(D5+E5)/16\"\n\"+(D5*2)+(E5*2)+(D9*30)\"\n\"+(E20+F20)+(E18*2)\"\n\"+I18*J19\"\n\"+I18+I17\"\n\"+J19*I19\"\n\"SUM(K19:K23)\"\n\"+K24/K18\"\n\"+(E20+F20)*K25\"\n\"+(J26+(J27*2))*J19\"\n\"+E18*K25\"\n\"+(#REF!+#REF!)*#REF!\"\n\"((C33+D33)*E33)+((C33+F33)*G33)\"\n\"H33*#REF!\"\n\"+#REF!*#REF!\"\n\"+((#REF!*12)/16)*#REF!\"\n\"+M34-M35\"\n\"+'The New Profit & Loss Sheet'!$E$4-#REF!\"\n\"SUM(I33:I39)\"\n\"SUM(I33:I38)\"\n\"+M40*#REF!\"\n\"+#REF!\"\n\"+S42+R42\"\n\"+'Work out income required'!$A$27\"\n\"+INT(B5/36)\"\n\"+B6*36\"\n\"+B7*B6\"\n\"+B8*B6\"\n\"+B9\"\n\"+(B11*B10)*2\"\n\"+B14*B15\"\n\"+INT((C6/8)*85%)\"\n\"SUM(B19:L19)\"\n\"+M15*#REF!\"\n\"SUM(C6:C15)\"\n\"+C16+N15+200\"\n\"+J15:J16+N15\"\n\"C23*B23\"\n\"+(C23*B23)/(E22*B23)\"\n\"C23/16\"\n\"#REF!*B23\"\n\"B23\"\n\"+(C24*B24)/(E22*B24)\"\n\"SUM(E23:E24)\"\n\"H2-H1\"\n\"BC331\"\n\"people!C21\"\n\"people!C22\"\n\"people!C23\"\n\"people!C24\"\n\"people!C25\"\n\"people!C26\"\n\"people!C27\"\n\"people!C28\"\n\"people!C29\"\n\"people!C30\"\n\"people!C31\"\n\"people!C32\"\n\"people!C33\"\n\"people!C34\"\n\"people!C35\"\n\"people!C47\"\n\"people!C48\"\n\"people!C49\"\n\"people!C50\"\n\"people!C51\"\n\"people!C52\"\n\"people!C53\"\n\"people!C54\"\n\"people!C55\"\n\"people!C56\"\n\"people!C68\"\n\"people!C69\"\n\"people!C70\"\n\"people!C71\"\n\"people!C72\"\n\"people!C73\"\n\"people!C74\"\n\"people!C75\"\n\"people!C76\"\n\"people!C77\"\n\"people!C89\"\n\"people!C90\"\n\"people!C91\"\n\"people!C92\"\n\"people!C93\"\n\"people!C94\"\n\"people!C95\"\n\"people!C96\"\n\"people!C97\"\n\"people!C98\"\n\"people!C99\"\n\"people!C100\"\n\"people!C101\"\n\"people!C102\"\n\"people!C103\"\n\"people!A21\"\n\"people!A22\"\n\"people!A23\"\n\"people!A24\"\n\"people!A25\"\n\"people!A26\"\n\"people!A27\"\n\"people!A28\"\n\"people!A29\"\n\"people!A30\"\n\"people!A31\"\n\"people!A32\"\n\"people!A33\"\n\"people!A34\"\n\"people!A35\"\n\"people!A47\"\n\"people!A48\"\n\"people!A49\"\n\"people!A50\"\n\"people!A51\"\n\"people!A52\"\n\"people!A53\"\n\"people!A54\"\n\"people!A55\"\n\"people!A56\"\n\"people!A68\"\n\"people!A69\"\n\"people!A70\"\n\"people!A71\"\n\"people!A72\"\n\"people!A73\"\n\"people!A74\"\n\"people!A75\"\n\"people!A76\"\n\"people!A77\"\n\"people!A89\"\n\"people!A90\"\n\"people!A91\"\n\"people!A92\"\n\"people!A93\"\n\"people!A94\"\n\"people!A95\"\n\"people!A96\"\n\"people!A97\"\n\"people!A98\"\n\"people!A99\"\n\"people!A100\"\n\"people!A101\"\n\"people!A102\"\n\"people!A103\"\n\"SUM(D3:BA3)\"\n\"BB3*C3\"\n\"SUM(C3:C330)\"\n\"questions!B1\"\n\"IF(C29<250,5,IF(C29>500,3,4))\"\n\"C29*G29*A29\"\n\"A31*G31\"\n\"A32*G32\"\n\"SUM(J29:J49)\"\n\"J51\"\n\"SUM(H32:H49)\"\n\"H56\"\n\"J51-J56\"\n\"J58\"\n\"B62*F62\"\n\"H62*F64\"\n\"H62+H64\"\n\"J12*K12\"\n\"SUM(L12:L28)\"\n\"((35.25+(1.58 * $B$12))+(0.9*$B$13)+(0.11*$B$14)+2.65*($B$15-32)*0.5555)/8.34\"\n\"$B$18*$B$9\"\n\"$B$24*$B$27\"\n\"$B$33*$B$34\"\n\"$B$37*$B$38\"\n\"$B$41*$B$42\"\n\"$B$45*$B$46\"\n\"$B$49*$B$50\"\n\"$B$53*$B$54\"\n\"$B$57*$B$58\"\n\"$B$35+$B$39+$B$43+$B$47+$B$51+$B$55+$B$59\"\n\"$B$19+$B$28+$B$61\"\n\"SUM(B70:B83)\"\n\"$D$65+$D$87\"\n\"$B$65+$B$87\"\n\"$B$93/0.9\"\n\"$B$93/0.8\"\n\"$B$93/0.7\"\n\"INDEX([1]wcxto_acc_unw_N!$A$1:$HW$16,MATCH($B40, [1]wcxto_acc_unw_N!$A$1:$A$16,0),MATCH(E$1, [1]wcxto_acc_unw_N!$A$1:$HW$1,0))\"\n\"SUM(E22:G22)\"\n\"E22-E23-E24+E25\"\n\"SUM(B21:B27)\"\n\"B31+C31\"\n\"SUM(B31:B34)\"\n\"C38*E38/100\"\n\"'Dairy Description'!A1\"\n\"B10*D10\"\n\"SUM(B10:B12)\"\n\"B22+B23\"\n\"B13+B19+B24\"\n\"B29+D29+F29-H29\"\n\"F11\"\n\"F34+F35-F36-F37+F38-F39\"\n\"L34-H40\"\n\"'Dairy Description'!A1\"\n\"B10*C10\"\n\"SUM(D10:D15)\"\n\"H20-D20\"\n\"SUM(D20:D38)\"\n\"'Dairy Description'!A1\"\n\"C10-B10\"\n\"D10\"\n\"SUM(B10:B18)\"\n\"'Dairy Description'!A1\"\n\"Receivables!F10\"\n\"B9+D9\"\n\"(Livestock!L10-Livestock!F10)+(Livestock!L12-Livestock!F12)\"\n\"SUM(B10:D10)\"\n\"(Livestock!L19-Livestock!F19)\"\n\"B11+C11+D11\"\n\"Livestock!L24-Livestock!F24\"\n\"'Feed and Supply'!I20\"\n\"SUM(B9:B21)\"\n\"'Dairy Description'!A1\"\n\"C10-B10\"\n\"SUM(B10:B21)\"\n\"SUM(F10:F49)\"\n\"'Dairy Description'!A1\"\n\"C10-B10\"\n\"SUM(B10:B50)\"\n\"'Dairy Description'!A1\"\n\"'Prepaid Expenses'!D10\"\n\"Payables!F10\"\n\"B11-C11+D11\"\n\"'Feed and Supply'!I22+'Prepaid Expenses'!D14\"\n\"'Feed and Supply'!I34+'Prepaid Expenses'!D19\"\n\"'Feed and Supply'!I27+'Prepaid Expenses'!D24\"\n\"'Feed and Supply'!I29+'Prepaid Expenses'!D28\"\n\"'Feed and Supply'!I33+'Prepaid Expenses'!D33\"\n\"'Feed and Supply'!I37+'Prepaid Expenses'!D40\"\n\"SUM(B11:B49)\"\n\"'Prepaid Expenses'!D50\"\n\"Payables!F49\"\n\"'Dairy Description'!A1\"\n\"B14+D14\"\n\"SUM(B14:B19)\"\n\"SUM(B28:B30)\"\n\"SUM(B31:D31)\"\n\"D35+D36+D37-D39-D40\"\n\"F35-F41\"\n\"'Dairy Description'!A1\"\n\"SUM(D10:D16)\"\n\"SUM(J11:J16)\"\n\"D26-F26\"\n\"B29*D29\"\n\"F33-F34\"\n\"F33-F34-F36\"\n\"H24+H26+H28-H30-H35\"\n\"J24-J38\"\n\"'Dairy Description'!A1\"\n\"C8*D8\"\n\"H8*I8\"\n\"SUM(C8:C22)\"\n\"F24\"\n\"J24\"\n\"D31-F31\"\n\"F36-F37\"\n\"F36-F37-F39\"\n\"H29+H31+H33-H38\"\n\"J29-J41\"\n\"'Dairy Description'!A1\"\n\"C27+C28+C29\"\n\"E27-D30\"\n\"'Dairy Description'!A1\"\n\"G8*H8\"\n\"SUM(B8:B11)\"\n\"B12+B19+B26+B33+B40\"\n\"B42+B44\"\n\"'Dairy Description'!A1\"\n\"G8*H8\"\n\"SUM(B8:B20)\"\n\"SUM(B25:B30)\"\n\"SUM(B35:B39)\"\n\"B21+B31+B40\"\n\"B42+B44\"\n\"'Dairy Description'!A1\"\n\"Income!E9\"\n\"IF(AND('Dairy Description'!B$11>0),C8/'Dairy Description'!B$11,0)\"\n\"IF(AND('Dairy Description'!B$7>0),C8/('Dairy Description'!B$7/100),0)\"\n\"IF(AND($C$18>0),C8/($C$18),0)\"\n\"Income!E17+Income!E18+Income!E19+Income!E20+Income!E21\"\n\"Livestock!H41\"\n\"SUM(C8:C17)\"\n\"'Dairy Description'!A1\"\n\"Expenses!E11\"\n\"IF(AND('Dairy Description'!B$11>0),C9/'Dairy Description'!B$11,0)\"\n\"IF(AND('Dairy Description'!B$7>0),C9/('Dairy Description'!B$7/100),0)\"\n\"IF(AND('Receipt Summary'!$C$18>0),C9/('Receipt Summary'!$C$18),0)\"\n\"SUM(E13:E16)\"\n\"Expenses!E20\"\n\"Expenses!E50\"\n\"Livestock!F39\"\n\"'Machinery and Equipment'!D40\"\n\"Buildings!H30\"\n\"C52+C53+C54\"\n\"C56+C50\"\n\"'Dairy Description'!A1\"\n\"Assets!C13\"\n\"Assets!E13\"\n\"Payables!B22\"\n\"Liabilities!B40\"\n\"'Feed and Supply'!D39\"\n\"'Feed and Supply'!H39\"\n\"Liabilities!B31\"\n\"Receivables!B19\"\n\"Liabilities!E21\"\n\"Liabilities!I21\"\n\"'Prepaid Expenses'!B52\"\n\"Leases!E42\"\n\"Leases!I12+Leases!I19+Leases!I26+Leases!I33+Leases!I40\"\n\"B10+B12+B13+B14\"\n\"SUM(E10:E14)\"\n\"Livestock!F10\"\n\"Livestock!L10\"\n\"Liabilities!B21-Liabilities!E21\"\n\"Liabilities!C21-Liabilities!I21\"\n\"Leases!B12-Leases!E12\"\n\"Leases!C12-Leases!I12\"\n\"Livestock!F19\"\n\"Livestock!L19\"\n\"Leases!B19-Leases!E19\"\n\"Leases!C19-Leases!I19\"\n\"Livestock!F24\"\n\"Livestock!L24\"\n\"Leases!B26-Leases!E26\"\n\"Leases!C26-Leases!I26\"\n\"'Machinery and Equipment'!D35\"\n\"'Machinery and Equipment'!F35\"\n\"Leases!B33-Leases!E33\"\n\"Leases!C33-Leases!I33\"\n\"Assets!C10\"\n\"Assets!E10\"\n\"Leases!B40-Leases!E40\"\n\"Leases!C40-Leases!I40\"\n\"Assets!C14\"\n\"Assets!E14\"\n\"SUM(E20:E26)\"\n\"Assets!C15+Assets!C16+Assets!C35\"\n\"Assets!E15+Assets!E16+Assets!E35\"\n\"Buildings!H24\"\n\"Buildings!J24\"\n\"Assets!C11\"\n\"Assets!E11\"\n\"'Real Estate'!H29\"\n\"'Real Estate'!J29\"\n\"Assets!C12\"\n\"Assets!E12\"\n\"SUM(B20:B35)\"\n\"B16+B37\"\n\"E16+E28\"\n\"Assets!C17\"\n\"Assets!E17\"\n\"Leases!B44+Liabilities!B44\"\n\"Assets!C27\"\n\"Assets!E27\"\n\"B47-E39-E41-E43\"\n\"B16+B37+B41\"\n\"SUM(E39:E44)\"\n\"'Dairy Description'!A1\"\n\"Income!B9\"\n\"Income!B10\"\n\"Income!C10\"\n\"D9+D10\"\n\"Income!B11\"\n\"Income!C11\"\n\"Income!B12\"\n\"Income!C12\"\n\"Income!B13\"\n\"Income!C13\"\n\"Income!B14\"\n\"(Income!B17+Income!B18+Income!B19+Income!B20+Income!B21)+Income!C17+Income!C18+Income!C19+Income!C20+Income!C21\"\n\"Income!D22\"\n\"Livestock!H41\"\n\"E8+E11+E14+E17+E20+E21+E22+E23+E24+E25+E26\"\n\"Expenses!B11+Expenses!B12+Expenses!B13\"\n\"Expenses!B15+Expenses!B16+Expenses!B17+Expenses!B18\"\n\"Expenses!B20+Expenses!B21+Expenses!B22\"\n\"Expenses!B24+Expenses!B25+Expenses!B26\"\n\"Expenses!B28+Expenses!B29+Expenses!B30+Expenses!B31+Expenses!B32+Expenses!B33+Expenses!B34\"\n\"Expenses!B36+Expenses!B37+Expenses!B38+Expenses!B39\"\n\"Expenses!B41+Expenses!B42+Expenses!B43\"\n\"Expenses!B45+Expenses!B46+Expenses!B48+Expenses!B49\"\n\"SUM(C32:C39)\"\n\"Expenses!C50\"\n\"Expenses!D50\"\n\"'Machinery and Equipment'!D40+Buildings!H30+Livestock!F39\"\n\"D40-D41+D42+D43\"\n\"Expenses!B47\"\n\"E44+E45\"\n\"E28-E46\"\n\"'Dairy Description'!A1\"\n\"IF(AND(SUM(Balance!E16)),(Balance!B16/Balance!E16),0)\"\n\"E8-D8\"\n\"Balance!B16-Balance!E16\"\n\"IF(AND(SUM(Balance!B47)),((Balance!E39+Balance!E41)/Balance!B47),0)\"\n\"IF(AND(SUM(Balance!B47)),((Balance!E44+Balance!E43)/Balance!B47),0)\"\n\"IF(AND(SUM(Balance!E44)),((Balance!E39+Balance!E41)/(Balance!E44+Balance!E43)),0)\"\n\"IF(AND(SUM(Balance!C39)),(('Income Statement'!E48+Expenses!B47-50000)/((Balance!B39+Balance!C39)/2)),0)\"\n\"IF(AND(SUM(Balance!F44)),(('Income Statement'!E48-50000)/(((Balance!E44+Balance!E43)+(Balance!F44+Balance!F43))/2)),0)\"\n\"IF(AND(SUM('Income Statement'!E28)),(('Income Statement'!E48+Expenses!E47-50000)/'Income Statement'!E28),0)\"\n\"IF(AND(SUM(Balance!C39)),('Income Statement'!E28/((Balance!B39+Balance!C39)/2)),0)\"\n\"IF(AND(SUM('Income Statement'!E28)),(('Income Statement'!E44-'Income Statement'!D43)/'Income Statement'!E28),0)\"\n\"IF(AND(SUM('Income Statement'!E28)),('Income Statement'!D43/'Income Statement'!E28),0)\"\n\"IF(AND(SUM('Income Statement'!E28)),('Income Statement'!E45/'Income Statement'!E28),0)\"\n\"IF(AND(SUM('Income Statement'!E28)),('Income Statement'!E48/'Income Statement'!E28),0)\"\n\"'Dairy Description'!A1\"\n\"'Income Statement'!E28\"\n\"'Income Statement'!E46\"\n\"C9-C10\"\n\"C11\"\n\"-('Dairy Description'!B26*2000)\"\n\"((Balance!E44+Balance!F44)/2)*0.07\"\n\"C14+C15-C16\"\n\"C11\"\n\"('Dairy Description'!B26*2000)\"\n\"IF(AND(SUM(Assets!C20)),(Assets!C20),50000)\"\n\"IF(AND(SUM(C20)),(C20-C21-C22),0)\"\n\"((Balance!E44+Balance!F44+Balance!E43+Balance!F43)/2)\"\n\"IF(AND(SUM(C24)),(C23/C24),0)\"\n\"C23\"\n\"'Income Statement'!E45\"\n\"C28+C29\"\n\"((Balance!B47+Balance!C47)/2)\"\n\"'Dairy Description'!A1\"\n\"Balance!E44+Balance!E43\"\n\"'Income Statement'!E48\"\n\"Assets!C22\"\n\"Assets!C20\"\n\"Income!E25+Income!E26\"\n\"Expenses!E52\"\n\"Income!E27+Assets!C37\"\n\"Assets!C23\"\n\"D9-D11-D12+D13-D14+D15-D16\"\n\"'Machinery and Equipment'!F42+Buildings!J40+'Real Estate'!J43\"\n\"Assets!D39\"\n\"E20+E18+E23+E26\"\n\"E7+E29\"\n\"Balance!F44+Balance!F43\"\n\"E31-E33\"\n\"'Dairy Description'!A1\"\n\"Income!B22\"\n\"Expenses!B50-Expenses!B47\"\n\"Expenses!B47\"\n\"C9-C10-C11\"\n\"Assets!C22\"\n\"Income!E25+Income!E26-Expenses!B52\"\n\"D12+D13+D14\"\n\"Livestock!F36\"\n\"'Machinery and Equipment'!D39\"\n\"Buildings!F37\"\n\"'Real Estate'!F40\"\n\"SUM(C20:C23)\"\n\"Livestock!F35\"\n\"'Machinery and Equipment'!D36\"\n\"Buildings!D26\"\n\"'Real Estate'!D31\"\n\"D24-D30\"\n\"Liabilities!F40\"\n\"Liabilities!F31\"\n\"Liabilities!F21\"\n\"Liabilities!F44\"\n\"Liabilities!E40\"\n\"Liabilities!E31\"\n\"Liabilities!E21\"\n\"Liabilities!E44\"\n\"Leases!E46\"\n\"Assets!C20\"\n\"Assets!C23\"\n\"Assets!C28\"\n\"Assets!C27\"\n\"D40-D45-D46-D47-D48-D49+D50\"\n\"D16+D32+D52\"\n\"Assets!C13\"\n\"Assets!E13\"\n\"D56-D55-D54\"\n\"'Dairy Description'!A1\"\n\"Liabilities!B21\"\n\"C8-B8\"\n\"Liabilities!B31\"\n\"Liabilities!B40\"\n\"Payables!B22\"\n\"B8+B9+B10+B11\"\n\"IF(('Dairy Description'!B11+'Dairy Description'!B12)>0,('Debt Analysis'!B13/('Dairy Description'!B11+'Dairy Description'!B12)),0)\"\n\"IF(('Dairy Description'!B11+'Dairy Description'!B12)>0,('Debt Analysis'!C13/('Dairy Description'!B11+'Dairy Description'!B12)),0)\"\n\"B15-C15\"\n\"Liabilities!E21\"\n\"Liabilities!D21\"\n\"Liabilities!E31\"\n\"Liabilities!D31\"\n\"Liabilities!E40\"\n\"Liabilities!D40\"\n\"B19+B20+B21\"\n\"IF(('Dairy Description'!B11+'Dairy Description'!B12)>0,(B23/('Dairy Description'!B11+'Dairy Description'!B12)),0)\"\n\"IF(('Dairy Description'!B11+'Dairy Description'!B12)>0,(C23/('Dairy Description'!B11+'Dairy Description'!B12)),0)\"\n\"IF(('Dairy Description'!B7>0),(100*('Debt Analysis'!B23/'Dairy Description'!B7)),0)\"\n\"IF(('Dairy Description'!B7>0),(100*('Debt Analysis'!C23/'Dairy Description'!B7)),0)\"\n\"IF((Income!B22>0),('Debt Analysis'!B23/Income!B22),0)\"\n\"IF((Income!B22>0),('Debt Analysis'!C23/Income!B22),0)\"\n\"Income!B22\"\n\"Expenses!B50-Expenses!B47\"\n\"Expenses!B47\"\n\"B31-B32-B33\"\n\"Liabilities!I21+Liabilities!C31+Liabilities!C40\"\n\"IF((B36>0),(B35/B36),0)\"\n\"'Income Statement'!E48\"\n\"'Income Statement'!E48\"\n\"Income!E25+Income!E26\"\n\"Income!E25+Income!E26\"\n\"'Income Statement'!D43\"\n\"'Income Statement'!D43\"\n\"Cashflow!D13\"\n\"Liabilities!D21\"\n\"Cashflow!D47\"\n\"Cashflow!D13\"\n\"B41+B42+B43-B44-B45\"\n\"Cashflow!D47\"\n\"E41+E42+E43+E44-E45-E46\"\n\"Liabilities!I21\"\n\"Liabilities!E21\"\n\"Leases!I12+Leases!I19+Leases!I33+Leases!I40+Leases!I44\"\n\"Leases!E46\"\n\"IF((E48+E49)>0,(E47/(E48+E49)),0)\"\n\"B46-B49-B50\"\n\"'Dairy Description'!A1\"\n\"SUM(C3:D3)\"\n\"SUM(B3+E3)\"\n\"SUM(B3:B14)\"\n\"SUM(C4:C7)\"\n\"SUM(C10:C12)\"\n\"SUM(C16:C17)\"\n\"SUM(C18, C23)\"\n\"SUM(C35:F35)\"\n\"SUM(B35/B42)\"\n\"SUM(B36/B42)\"\n\"SUM(B37/B42)\"\n\"SUM(B38/B42)\"\n\"SUM(B39/B42)\"\n\"SUM(B40/B42)\"\n\"SUM(B41/B42)\"\n\"SUM(C35:C41)\"\n\"SUM(C49,C50)\"\n\"SUM(C58,C59,C60,C61)\"\n\"SUM(C66,C67,C68,C69,C70,C71)\"\n\"SUM(C3:C7)\"\n\"SUM(C12:C14)\"\n\"SUM(C15+C20)\"\n\"SUM(C8+C22)\"\n\"SUM(E4:E5)\"\n\"SUM(E12:E29)\"\n\"SUM(E5:E24)\"\n\"SUM(E35:E39)\"\n\"SUM(E40:F40)\"\n\"SUM(E56:E63)\"\n\"SUM(E66:E74)\"\n\"SUM(C3:C6)\"\n\"SUM(C7,C14,C21,C28,C31,C34)\"\n\"SUM(C113:F113)\"\n\"SUM(B113/B120)\"\n\"SUM(B114/B120)\"\n\"SUM(B115/B120)\"\n\"SUM(B116/B120)\"\n\"SUM(B117/B120)\"\n\"SUM(B118/B120)\"\n\"SUM(B119/B120)\"\n\"SUM(C113:C119)\"\n\"SUM(C3:C7)\"\n\"SUM(C10:C13)\"\n\"SUM(C21+C27+C33)\"\n\"SUM(C8+C14+C34+C41+C43+C45)\"\n\"SUM(E8+E14+G34+E34+E41+E43+E45)\"\n\"SUM(C52:C54)\"\n\"SUM(C55+C60+C66+C68+C70)\"\n\"SUM(C47+C72)\"\n\"SUM(B3:B6)\"\n\"SUM(C12,C13)\"\n\"SUM(C14,C18,C22,C26)\"\n\"SUM(C4:C5)\"\n\"SUM(C11:C19)\"\n\"SUM(C6,C20)\"\n\"SUM(C3:C6)\"\n\"SUM(C7:D7)\"\n\"SUM(C5:C7)\"\n\"SUM(C34)\"\n\"SUM(611525+D32)\"\n\"SUM(C31/C34)\"\n\"SUM(C31:C32)\"\n\"SUM(C42:C43)\"\n\"SUM(C42/C41)\"\n\"SUM(C55:C59)\"\n\"SUM(C69:C81)\"\n\"SUM(E70:E81)\"\n\"SUM(C60+C83)\"\n\"SUM(C3:D3)\"\n\"SUM(B3+E3)\"\n\"SUM(B3:B14)\"\n\"SUM(C4:C8)\"\n\"SUM(C9+C16)\"\n\"SUM(C27+C34+C42+C44+C46)\"\n\"SUM(C18+C48)\"\n\"SUM(C59+C68)\"\n\"SUM(C3:D3)\"\n\"SUM(B3+E3)\"\n\"SUM(B3:B14)\"\n\"SUM(C4:C17)\"\n\"IF(IF(NOT(ISBLANK(B6)),1,0)+IF(NOT(ISBLANK(C6)),1,0)+IF(NOT(ISBLANK(D6)),1,0)+IF(NOT(ISBLANK(E6)),1,0)+IF(NOT(ISBLANK(F6)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(H6=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B6)),0,0)+IF(NOT(ISBLANK(C6)),1,0)+IF(NOT(ISBLANK(D6)),2,0)+IF(NOT(ISBLANK(E6)),2,0)+IF(NOT(ISBLANK(F6)),3,0))\"\n\"IF(I6=3,1,0)\"\n\"IF(H12=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B12)),0,0)+IF(NOT(ISBLANK(C12)),1,0)+IF(NOT(ISBLANK(D12)),1,0)+IF(NOT(ISBLANK(E12)),2,0)+IF(NOT(ISBLANK(F12)),3,0))\"\n\"IF(H16=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B16)),0,0)+IF(NOT(ISBLANK(C16)),1,0)+IF(NOT(ISBLANK(D16)),2,0)+IF(NOT(ISBLANK(E16)),3,0)+IF(NOT(ISBLANK(F16)),3,0))\"\n\"IF(IF(NOT(ISBLANK(B20)),1,0)+IF(NOT(ISBLANK(C20)),1,0)+IF(NOT(ISBLANK(D20)),1,0)+IF(NOT(ISBLANK(E20)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(H20=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B20)),0,0)+IF(NOT(ISBLANK(C20)),1,0)+IF(NOT(ISBLANK(D20)),2,0)+IF(NOT(ISBLANK(E20)),2,0))\"\n\"IF(IF(NOT(ISBLANK(B22)),1,0)+IF(NOT(ISBLANK(C22)),1,0)+IF(NOT(ISBLANK(D22)),1,0)+IF(NOT(ISBLANK(E22)),1,0)+IF(NOT(ISBLANK(F22)),1,0)+IF(NOT(ISBLANK(G22)),1,0)=1,\"\"Yes\"\",\"\"No\"\")\"\n\"IF(H22=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B22)),0,0)+IF(NOT(ISBLANK(C22)),1,0)+IF(NOT(ISBLANK(D22)),2,0)+IF(NOT(ISBLANK(E22)),2,0)+IF(NOT(ISBLANK(F22)),2,0)+IF(NOT(ISBLANK(G22)),3,0))\"\n\"IF(H24=\"\"No\"\",\"\"check data\"\",IF(NOT(ISBLANK(B24)),0,0)+IF(NOT(ISBLANK(C24)),1,0)+IF(NOT(ISBLANK(D24)),2,0)+IF(NOT(ISBLANK(E24)),3,0))\"\n\"IF(OR(H6=\"\"No\"\",H8=\"\"No\"\",H10=\"\"No\"\",H12=\"\"No\"\",H14=\"\"No\"\",H16=\"\"No\"\",H18=\"\"No\"\",H20=\"\"No\"\",H22=\"\"No\"\",H24=\"\"No\"\",H26=\"\"No\"\",H28=\"\"No\"\"),\"\"No\"\",IF(OR(H30=\"\"No\"\",H32=\"\"No\"\",H34=\"\"No\"\",H36=\"\"No\"\",H38=\"\"No\"\",H40=\"\"No\"\",H42=\"\"No\"\",H44=\"\"No\"\",H46=\"\"No\"\"),\"\"No\"\",\"\"Yes\"\"))\"\n\"IF(C49=\"\"No\"\",\"\"complete data\"\",SUM(I6:I46))\"\n\"IF(C49=\"\"No\"\",\"\"complete data\"\",C50/21)\"\n\"IF(C49=\"\"No\"\",\"\"complete data\"\",IF(C51<=0.5,\"\"not noticable\"\",IF(C51<1,\"\"borderline\"\",IF(C51<=1.5,\"\"mild\"\",IF(C51<=2,\"\"moderate\"\",IF(C51<2.5,\"\"moderate-to-severe\"\",\"\"severe\"\"))))))\"\n\"IF(C49=\"\"No\"\",\"\":-):-):-)\"\",\"\"depression\"\")\"\n\"IF(C49=\"\"No\"\",\"\"complete data\"\",SUM(J6:J46))\"\n\"ROUNDUP(RAND()*6,0)\"\n\"B18*(IF(B15=1,B3,0)+IF(E15=1,E3,0)+IF(H15=1,H3,0)+IF(K15=1,K3,0)+IF(N15=1,N3,0)+IF(Q15=1,Q3,0))\"\n\"E18*(IF(E15=2,E3,0)+IF(B15=2,B3,0)+IF(H15=2,H3,0)+IF(K15=2,K3,0)+IF(N15=2,N3,0)+IF(Q15=2,Q3,0))\"\n\"H18*(IF(H15=3,H3,0)+IF(B15=3,B3,0)+IF(E15=3,E3,0)+IF(K15=3,K3,0)+IF(N15=3,N3,0)+IF(Q15=3,Q3,0))\"\n\"K18*(IF(K15=4,K3,0)+IF(B15=4,B3,0)+IF(E15=4,E3,0)+IF(H15=4,H3,0)+IF(N15=4,N3,0)+IF(Q15=4,Q3,0))\"\n\"N18*(IF(N15=5,N3,0)+IF(B15=5,B3,0)+IF(E15=5,E3,0)+IF(H15=5,H3,0)+IF(K15=5,K3,0)+IF(Q15=5,Q3,0))\"\n\"Q18*(IF(Q15=6,Q3,0)+IF(B15=6,B3,0)+IF(E15=6,Q3,0)+IF(H15=6,H3,0)+IF(K15=6,K3,0)+IF(N15=6,N3,0))\"\n\"SUM(B26:B1025)\"\n\"SUM(B26:B1025)\"\n\"SUM(B26:B1025)\"\n\"SUM(B26:B1025)\"\n\"SUM(C26:C1025)\"\n\"SUM(C26:C1025)\"\n\"SUM(C26:C1025)\"\n\"SUM(C26:C1025)\"\n\"Q12/Q9\"\n\"Q12/Q9\"\n\"IF($A26>$A$24,0,MAX(MIN(B26,(D$20-D26)),0))\"\n\"MIN(D20,D22)\"\n\"IF($A26>$A$24,0,MAX(MIN(E26,D26,(G$20-G26)),0))\"\n\"IF($A26>$A$24,0,MAX(MIN(Q26,P26),0))\"\n\"IF($A26>$A$24,0,R26)\"\n\"D26+G26+J26+M26+P26\"\n\"AVERAGE(T$26)\"\n\"IF($A27>$A$24,0,D26+C26-F26)\"\n\"IF($A27>$A$24,0,S26+R27)\"\n\"IF($A27>$A$24,0,AVERAGE(T$26:T27))\"\n\"+E21/F21\"\n\"SUM(E21:E22)\"\n\"+F23+F24\"\n\"+H22\"\n\"+$F$25*D26\"\n\"+$E$23-E26\"\n\"+H21\"\n\"+E21\"\n\"+(+F25-F21)*H22\"\n\"+F23+F24\"\n\"+F36/I25*I21\"\n\"-F21\"\n\"+F39*I25/I21\"\n\"+F40*H22\"\n\"+E21\"\n\"+E23-E43\"\n\"+E43\"\n\"+F36\"\n\"+F51/I51*I47\"\n\"-F37\"\n\"+F54*I51/I47\"\n\"+F55*H48\"\n\"+E47\"\n\"+E58\"\n\"+F51\"\n\"+F70*I51/I63\"\n\"+F71*H48\"\n\"+E74\"\n\"+F78\"\n\"-F68\"\n\"+F109/I100*I96\"\n\"-F68\"\n\"+F112*I100/I96\"\n\"+F113*H97\"\n\"+E96\"\n\"+E107-E116\"\n\"+F82\"\n\"-F109\"\n\"+F124*H97\"\n\"I8/I16\"\n\"(J22+J24)/2\"\n\"D17\"\n\"D23\"\n\"D29\"\n\"E23\"\n\"C5+D5+C10+D10\"\n\"C20+D20+C15+D15\"\n\"E5+E10\"\n\"E15+E20\"\n\"B7/9.8\"\n\"B16-B14\"\n\"B3+C3+D3\"\n\"SUM(B3:B14)\"\n\"Types!C15/(Area!D8+Area!E8)\"\n\"SUM(B18:B27)\"\n\"B15+B28\"\n\"C28/Area!F8\"\n\"B13\"\n\"C25/C7\"\n\"B7\"\n\"D7/Area!D17*1000\"\n\"C7/Area!C17*1000\"\n\"D37\"\n\"D43\"\n\"B37\"\n\"E37\"\n\"E43\"\n\"B37\"\n\"F43\"\n\"B37\"\n\"C43\"\n\"(C4+C10)\"\n\"F4+F10\"\n\"F16+F22\"\n\"E4+E10\"\n\"E16+E22\"\n\"J4+J10+O4\"\n\"E9+E10+E12\"\n\"B2\"\n\"A4\"\n\"B7+B8\"\n\"B3+C3+D3\"\n\"SUM(B3:B47)\"\n\"SUM(B3:B47)/COUNTA(B3:B47)\"\n\"R7\"\n\"Q7\"\n\"K7\"\n\"O7+P7\"\n\"N7\"\n\"R6\"\n\"Q6\"\n\"K6\"\n\"O6+P6\"\n\"N6\"\n\"R5\"\n\"Q5\"\n\"K5\"\n\"O5+P5\"\n\"N5\"\n\"R4\"\n\"Q4\"\n\"K4\"\n\"O4+P4\"\n\"N4\"\n\"R3\"\n\"Q3\"\n\"K3\"\n\"O3+P3\"\n\"N3\"\n\"I16\"\n\"L16\"\n\"O16\"\n\"R16\"\n\"O15\"\n\"R15\"\n\"O14\"\n\"R14\"\n\"O13\"\n\"R13\"\n\"O12\"\n\"R12\"\n\"63.3+48.5+16.6\"\n\"27.4+24.1+29.4\"\n\"H6+I6\"\n\"H6+H7+H8\"\n\"D4/C4\"\n\"2263-C4\"\n\"B6+C6+D6+E6\"\n\"C3/C$17\"\n\"C10+C11+C12+C13+C14+C15+C16\"\n\"SUM(C3:C10)\"\n\"C3/C$17\"\n\"C9+C10+C11+C12+C13+C14+C15+C16\"\n\"C4/C$16\"\n\"45241.746+126\"\n\"C11+C12+C13+C14+C15\"\n\"C4+C5+C6+C7+C8+C9+C10\"\n\"C4/C$18\"\n\"4174.312+5061\"\n\"C11+C12+C13+C14+C15+C16+C17\"\n\"C4+C5+C6+C7+C8+C9+C10\"\n\"C4/C$9\"\n\"1008.285+113\"\n\"SUM(C4:C8)\"\n\"G43-C43+L43\"\n\"COUNT(C43)\"\n\"SUM(K43:K50)\"\n\"B5/B$15\"\n\"C5-E5\"\n\"SUM(B5:B14)\"\n\"SUM(C9:C12)\"\n\"SUM(C18:C34)\"\n\"C13-C35\"\n\"C39+C38\"\n\"+C40\"\n\"SUM(D4:D8)\"\n\"D9*D10\"\n\"+D4\"\n\"+D11\"\n\"+D12-D13\"\n\"D14/D12\"\n\"SUM(D5:D7)\"\n\"SUM(E14:E15)\"\n\"SUM(F19:F24)\"\n\"D36-D37\"\n\"F36-F38\"\n\"C5/C6\"\n\"C5/C6\"\n\"SUM(C51:F51)\"\n\"SUM(G4:G21)\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"D7+E7-F7\"\n\"SUM(G7:G27)\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"C7+D7-E7\"\n\"SUM(F7:F26)\"\n\"Cover!C8\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"Cover!G7\"\n\"F6+G6-H6\"\n\"SUM(I6:I21)\"\n\"Cover!C8\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"Cover!G7\"\n\"F6+G6-H6\"\n\"SUM(I6:I21)\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"Cover!G7\"\n\"D6+E6-F6\"\n\"SUM(G6:G22)\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"Cover!G7\"\n\"Cover!C8\"\n\"Cover!C8\"\n\"Cover!D8\"\n\"Cover!D8\"\n\"Cover!F7\"\n\"Cover!G7\"\n\"SUM(F6:F64)\"\n\"3332473002/1000\"\n\"3429000175/1000\"\n\"6373/550\"\n\"3357/1620\"\n\"735/190\"\n\"7417/80/10\"\n\"3382/116/10\"\n\"892/180\"\n\"7554/740\"\n\"3309/1210\"\n\"916/190\"\n\"14285/2020\"\n\"6150/2520\"\n\"698/150\"\n\"17575/2450\"\n\"6851/3000\"\n\"726/160\"\n\"11483/1110\"\n\"4999/1500\"\n\"753/170\"\n\"5873/490\"\n\"13065/2430\"\n\"615/130\"\n\"6483/480\"\n\"12472/2360\"\n\"6764/480\"\n\"7034/490\"\n\"11398/770\"\n\"SUM(B7:B36)\"\n\"B6/C6/8760*100\"\n\"SUM(B39:B41)\"\n\"1990921/8760\"\n\"SUM(B47:B51)\"\n\"SUM(B6:B51)-B6-B38-B46\"\n\"C53+445.327739726027\"\n\"401168+D53\"\n\"395.742123287671+H53\"\n\"74798+I53\"\n\"(SUM(M6:M56)+M44)/2\"\n\"1327+N53\"\n\"R53+R46+R44+R38+R6\"\n\"492086+S53\"\n\"LOOKUP('Activity A'!D8,Units!A3:C8)*C8\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!C4:E43)\"\n\"noerror(E8*G8)\"\n\"noerror(I8/1000,0)\"\n\"LOOKUP('Activity A'!D9,Units!A40:C46)*C9\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:K43)\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:L43)\"\n\"LOOKUP('Activity A'!D10,Units!$A$26:$C$30)*C10\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AE40)\"\n\"noerror(E10*G10*1000)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AD12)\"\n\"LOOKUP('Activity A'!D12,Units!A19:C23)*C12\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:U130) & \"\" \"\"\"\n\"LOOKUP('Activity A'!D13,Units!$A$19:$C$23)*C13\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:U130)\"\n\"LOOKUP('Activity A'!D15,Units!$A$34:$C$36)*C15\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AE40)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AD40)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!$B$7 & \"\"_comingled\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_paper\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_textiles\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_wood\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_garden\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_food\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_medical\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_concrete metal\"\",factors!$AJ$3:$AM$102)\"\n\"C33\"\n\"SUM(J8:K35)\"\n\"SUM(J38:J39)\"\n\"SUM(J40,J36)\"\n\"LOOKUP('Activity B'!D8,Units!A3:C8)*C8\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!C4:E43)\"\n\"noerror(E8*G8)\"\n\"noerror(I8/1000,0)\"\n\"LOOKUP('Activity B'!D9,Units!A40:C46)*C9\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:K43)\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:L43)\"\n\"LOOKUP('Activity B'!D10,Units!$A$26:$C$30)*C10\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AE40)\"\n\"noerror(E10*G10*1000)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AD12)\"\n\"LOOKUP('Activity B'!D12,Units!A19:C23)*C12\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:V130)\"\n\"noerror(E12*G12)*1000\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:U130) & \"\" \"\"\"\n\"LOOKUP('Activity B'!D13,Units!$A$19:$C$23)*C13\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:U130)\"\n\"LOOKUP('Activity A'!D15,Units!$A$34:$C$36)*C15\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AE40)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AD40)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!$B$7 & \"\"_comingled\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_paper\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_textiles\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_wood\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_garden\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_food\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_medical\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_concrete metal\"\",factors!$AJ$3:$AM$102)\"\n\"C33\"\n\"SUM(J8:K35)\"\n\"SUM(J38:J39)\"\n\"SUM(J40,J36)\"\n\"LOOKUP('Activity C'!D8,Units!A3:C8)*C8\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!C4:E43)\"\n\"noerror(E8*G8)\"\n\"noerror(I8/1000,0)\"\n\"LOOKUP('Activity C'!D9,Units!A40:C46)*C9\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:K43)\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:L43)\"\n\"LOOKUP('Activity C'!D10,Units!$A$26:$C$30)*C10\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AE40)\"\n\"noerror(E10*G10*1000)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AD12)\"\n\"LOOKUP('Activity C'!D12,Units!A19:C23)*C12\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:U130) & \"\" \"\"\"\n\"LOOKUP('Activity C'!D13,Units!$A$19:$C$23)*C13\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:U130)\"\n\"LOOKUP('Activity A'!D15,Units!$A$34:$C$36)*C15\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AE40)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AD40)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation turbine\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!$B$7 & \"\"_comingled\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_paper\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_textiles\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_wood\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_garden\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_food\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_medical\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_concrete metal\"\",factors!$AJ$3:$AM$102)\"\n\"C33\"\n\"SUM(J8:K35)\"\n\"SUM(J38:J39)\"\n\"SUM(J40,J36)\"\n\"LOOKUP('Activity D'!D8,Units!A3:C8)*C8\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!C4:E43)\"\n\"noerror(E8*G8)\"\n\"noerror(I8/1000,0)\"\n\"LOOKUP('Activity D'!D9,Units!A40:C46)*C9\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:K43)\"\n\"LOOKUP(cfg!B5 & \"\"_\"\" & D4,factors!I4:L43)\"\n\"LOOKUP('Activity D'!D10,Units!$A$26:$C$30)*C10\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AE40)\"\n\"noerror(E10*G10*1000)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG - non-transport\"\",factors!AA1:AD12)\"\n\"LOOKUP('Activity D'!D12,Units!A19:C23)*C12\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Automotive Gasoline\"\",factors!R3:U130) & \"\" \"\"\"\n\"LOOKUP('Activity D'!D13,Units!$A$19:$C$23)*C13\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_ADO(current fuel)\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_LPG\"\",factors!R3:U130)\"\n\"LOOKUP('Activity A'!D15,Units!$A$34:$C$36)*C15\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas LDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Natural Gas HDV\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AE40)\"\n\"LOOKUP(cfg!B7 & \"\"_Industrial/Marine diesel fuel\"\",factors!AA1:AD40)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Gasoline\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation turbine\"\",factors!R3:V130)\"\n\"LOOKUP(cfg!B7 & \"\"_Aviation Turbine\"\",factors!R3:U130)\"\n\"LOOKUP(cfg!$B$7 & \"\"_comingled\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_paper\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_textiles\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_wood\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_garden\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_food\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_medical\"\",factors!$AJ$3:$AM$102)\"\n\"LOOKUP(cfg!$B$7 & \"\"_concrete metal\"\",factors!$AJ$3:$AM$102)\"\n\"C33\"\n\"SUM(J8:K35)\"\n\"SUM(J38:J39)\"\n\"SUM(J40,J36)\"\n\"'Activity A'!$D$2 & \"\"\"\"\"\n\"'Activity B'!$D$2 & \"\"\"\"\"\n\"'Activity C'!$D$2 & \"\"\"\"\"\n\"'Activity D'!$D$2 & \"\"\"\"\"\n\"'Activity A'!J41\"\n\"'Activity B'!J41\"\n\"'Activity C'!J41\"\n\"'Activity D'!J41\"\n\"E10+F10+G10+H10\"\n\"LOOKUP($C$11,Units!$F$3:$J$32) & \"\":\"\"\"\n\"LOOKUP($C$11,Units!$F$3:$H$32) & \"\"/\"\" & LOOKUP($C$11,Units!$F$3:$K$32) &\"\":\"\"\"\n\"noerror(LOOKUP($C$11,Units!$F$3:$I$32)*E10/(LOOKUP($C$11,Units!$F$3:$L$32)*E11))\"\n\"LOOKUP($C$11,Units!$F$3:$M$32) & \"\" \"\"\"\n\"\"\"  \"\" & 'Activity A'!B8\"\n\"'Activity A'!E8+'Activity B'!E8+'Activity C'!E8+'Activity D'!E8\"\n\"'Activity A'!F8\"\n\"IF($O$13=0,'Activity A'!G8,\"\"various\"\")\"\n\"'Activity A'!J8+'Activity B'!J8+'Activity C'!J8+'Activity D'!J8\"\n\"noerror('Activity A'!J9,0)+noerror('Activity B'!J9,0)+noerror('Activity C'!J9,0)+noerror('Activity D'!J9,0)\"\n\"'Activity A'!J41>0\"\n\"'Activity A'!D4\"\n\"M9*L9\"\n\"NONULL(N9)\"\n\"'Activity A'!B11\"\n\"'Activity B'!J41>0\"\n\"'Activity B'!D4\"\n\"'Activity C'!J41>0\"\n\"'Activity C'!D4\"\n\"'Activity D'!J41>0\"\n\"'Activity D'!D4\"\n\"noerror(AVEDEV(O9:O12),0)\"\n\"NONULL('Activity A'!G31)\"\n\"SUM(G7:G34)\"\n\"SUM(G37:G38)\"\n\"SUM(G39,G35)\"\n\"'Activity A'!D2 & \"\" \"\"\"\n\"'Activity A'!J41\"\n\"'Activity B'!D2 & \"\" \"\"\"\n\"'Activity B'!J41\"\n\"'Activity C'!D2 & \"\" \"\"\"\n\"'Activity C'!J41\"\n\"'Activity D'!D2 & \"\" \"\"\"\n\"'Activity D'!J41\"\n\"SUM(C44:C47)\"\n\"'Activity A'!D2\"\n\"\"\"  \"\" & 'Activity A'!B8\"\n\"'Activity A'!E8\"\n\"'Activity A'!J8\"\n\"noerror('Activity A'!J9,0)\"\n\"'Activity A'!B11\"\n\"noerror('Activity A'!J25,0)+noerror('Activity B'!J25,0)+noerror('Activity C'!J25,0)+noerror('Activity D'!J25,0)\"\n\"NONULL('Activity A'!G31)\"\n\"'Activity A'!H38 & \"\" \"\"\"\n\"'Activity B'!D2\"\n\"\"\"  \"\" & 'Activity B'!B8\"\n\"'Activity B'!E8\"\n\"'Activity B'!J8\"\n\"noerror('Activity B'!J9,0)\"\n\"'Activity B'!B11\"\n\"noerror('Activity B'!J25,0)+noerror('Activity B'!J25,0)+noerror('Activity C'!J25,0)+noerror('Activity D'!J25,0)\"\n\"NONULL('Activity B'!G31)\"\n\"'Activity B'!H38 & \"\" \"\"\"\n\"'Activity C'!D2\"\n\"\"\"  \"\" & 'Activity C'!B8\"\n\"'Activity C'!E8\"\n\"'Activity C'!J8\"\n\"noerror('Activity C'!J9,0)\"\n\"'Activity C'!B11\"\n\"noerror('Activity C'!J25,0)+noerror('Activity B'!J25,0)+noerror('Activity C'!J25,0)+noerror('Activity D'!J25,0)\"\n\"NONULL('Activity C'!G31)\"\n\"'Activity C'!H38 & \"\" \"\"\"\n\"'Activity D'!D2\"\n\"\"\"  \"\" & 'Activity D'!B8\"\n\"'Activity D'!E8\"\n\"'Activity D'!J8\"\n\"noerror('Activity D'!J9,0)\"\n\"'Activity D'!B11\"\n\"noerror('Activity D'!J25,0)+noerror('Activity B'!J25,0)+noerror('Activity C'!J25,0)+noerror('Activity D'!J25,0)\"\n\"NONULL('Activity D'!G31)\"\n\"'Activity D'!H38 & \"\" \"\"\"\n\"38.6*83.3\"\n\"noerror(ROUND(S3,-ROUNDDOWN(LOG(S3)-1,0))/1000)\"\n\"39.6*69.7\"\n\"0.15*0.66*0.5*16/12*0.9*21*1000\"\n\"noerror(ROUND(AK3,-ROUNDDOWN(LOG(AK3)-1,0))/1000)\"\n\"B4&\"\"_\"\" &A4\"\n\"38.6*84.7\"\n\"49.6*68.6\"\n\"38.6*82.4\"\n\"0.15*0.77*0.5*16/12*0.9*21*1000\"\n\"34.2*84.6\"\n\"0.17*0.55*0.5*16/12*0.9*21*1000\"\n\"33.1*81.5\"\n\"0.05*0.77*0.5*16/12*21*0.9*1000\"\n\"36.8*82.4\"\n\"49.6*59.4\"\n\"0.4*0.55*0.5*16/12*21*0.9*1000\"\n\"40.8*86.3\"\n\"39.6*74.9\"\n\"0.4*0.77*0.5*16/12*21*0.9*1000\"\n\"39.6*82.4\"\n\"49.6*64.7\"\n\"0.3*0.55*0.5*16/12*21*0.9*1000\"\n\"25.7*72.5\"\n\"AL11/1000\"\n\"noerror(ROUND(S12,-ROUNDDOWN(LOG(S12)-1,0))/1000,S12)\"\n\"noerror(ROUND(AL12,-ROUNDDOWN(LOG(AL12)-1,0))/1000)\"\n\"39.5*59.7\"\n\"AC16/1000\"\n\"1.2474*1000\"\n\"1000*1.4553\"\n\"1000*1.1781\"\n\"1000*0.4851\"\n\"noerror(ROUND(AK23,-ROUNDDOWN(LOG(AK23)-0,0))/1000)\"\n\"1000*2.772\"\n\"38.6*70.4\"\n\"1000*3.8808\"\n\"1000*2.079\"\n\"noerror(ROUND(#REF!,-ROUNDDOWN(LOG(#REF!)-1,0))/1000)\"\n\"34.2*73.9\"\n\"33.1*69.5\"\n\"36.8*70.4\"\n\"40.8*74.3\"\n\"39.6*70.5\"\n\"25.7*60.5\"\n\"39.5*56.8\"\n\"39.5*60.2\"\n\"38.6*74.9\"\n\"34.2*71.3\"\n\"33.1*73.3\"\n\"43*78.8\"\n\"0.15*0.366*0.9*21*1000\"\n\"25.7*64.7\"\n\"0*0.366*0.9*21*1000\"\n\"0.17*0.366*0.9*21*1000\"\n\"0.05*0.366*0.9*21*1000\"\n\"0.4*0.366*0.9*21*1000\"\n\"0.3*0.366*0.9*21*1000\"\n\"38.6*69.7\"\n\"34.2*66\"\n\"33.1*68\"\n\"36.8*69.7\"\n\"25.7*59.4\"\n\"39.5*50.9\"\n\"0.000001\"\n\"C35/1000\"\n\"1/39.5*1000\"\n\"39.5/1000\"\n\"SUM(C49,G11:G16)\"\n\"SUM(P10:P20)\"\n\"SUM(C11:C48)\"\n\"SUM(G24:G48)\"\n\"SUM(P26:P48)\"\n\"G18+G49+K49+P21+P49\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E4\"\n\"E4\"\n\"E4\"\n\"SUM(G64:G84)\"\n\"SUM(G89:G101)\"\n\"SUM(K90:K101)\"\n\"SUM(P78:P101)\"\n\"C102+G85+G102+K86+K102+P73+P102\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E4\"\n\"E4\"\n\"E4\"\n\"SUM(C154,G116:G123)\"\n\"SUM(K154,P116:P130)\"\n\"SUM(C116:C137)\"\n\"SUM(K116:K143)\"\n\"SUM(K149:K153)\"\n\"SUM(P136:P153)\"\n\"C138+G124+G154+K144+P131+P154\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E2\"\n\"E4\"\n\"E4\"\n\"E4\"\n\"SUM(C169:C188)\"\n\"SUM(C194:C201)\"\n\"SUM(K202,P169:P201)\"\n\"C189+C202+G189+G202+K189+P202\"\n\"SUM(A213:E213)\"\n\"P51+P157+P104+P204\"\n\"P51+P157+P104+P204\"\n\"P51+P157+P104+P204\"\n\"Inputs!$E$4\"\n\"Inputs!$E$6\"\n\"Inputs!$E$7\"\n\"Inputs!$E$8\"\n\"Inputs!$E$9\"\n\"Inputs!$E$10\"\n\"Inputs!D57\"\n\"IF(Inputs!B29=\"\"tons\"\",\"\"T.D.M.\"\",\"\"unknown\"\")\"\n\"IF(Inputs!B30=\"\"tons\"\",\"\"T.D.M.\"\",\"\"unknown\"\")\"\n\"IF(Inputs!B31=\"\"tons\"\",\"\"T.D.M.\"\",\"\"unknown\"\")\"\n\"IF(Inputs!B32=\"\"tons\"\",\"\"T.D.M.\"\",\"\"unknown\"\")\"\n\"Inputs!$B66*Percentages!C3\"\n\"Inputs!C12\"\n\"(Inputs!B43+Inputs!B44+Inputs!B45+Inputs!D46+Inputs!B54+Inputs!B23*Inputs!F38/2)/Inputs!F43\"\n\"Inputs!E36+Inputs!C54/Inputs!F39\"\n\"Inputs!$C28*Inputs!$B$23+Inputs!$D28*Inputs!$C$24+Inputs!D58+Inputs!D59+Inputs!D54/Inputs!E28\"\n\"(Inputs!$C29*Inputs!$B$23+Inputs!$D29*Inputs!$C$24+Inputs!E58+Inputs!E59+Inputs!E54/Inputs!E29)*(1-Inputs!C38)\"\n\"(Inputs!$C30*Inputs!$B$23+Inputs!$D30*Inputs!$C$24+Inputs!F58+Inputs!F59+Inputs!F54/Inputs!E30)*(1-Inputs!C37)\"\n\"(Inputs!$C31*Inputs!$B$23+Inputs!$D31*Inputs!$C$24+Inputs!G58+Inputs!G59+Inputs!G54/Inputs!E31)*(1-0.12)\"\n\"(Inputs!$C32*Inputs!$B$23+Inputs!$D32*Inputs!$C$24+Inputs!H58+Inputs!H59+Inputs!H54/Inputs!E32)*(1-Inputs!C39)\"\n\"Inputs!C12+1/10\"\n\"Inputs!C12+1/15\"\n\"Inputs!$E$5\"\n\"Inputs!C12+1/20\"\n\"Inputs!C12-0.04\"\n\"SUM(B14:B32)\"\n\"Inputs!$B71*Percentages!C9\"\n\"Inputs!F39\"\n\"Inputs!E28\"\n\"Inputs!E29/(1-Inputs!C38)\"\n\"Inputs!E30/(1-Inputs!C37)\"\n\"Inputs!E31/(1-0.12)\"\n\"Inputs!E32/(1-Inputs!C39)\"\n\"Inputs!D60*Inputs!E28+Inputs!E60*Inputs!E29+Inputs!F60*Inputs!E30+Inputs!G60*Inputs!E31+Inputs!E32+Inputs!E61\"\n\"(Inputs!$B$73-$O$11)*Percentages!C11\"\n\"Q5/B4\"\n\"Q7/B4\"\n\"Inputs!$B76*Percentages!C15\"\n\"Q12/B4\"\n\"(Q4+Q15+Q30)/B4\"\n\"Q24/B4\"\n\"Q25/B4\"\n\"Q29/B4\"\n\"(Q22+Q23)/B4\"\n\"Inputs!$B81*Percentages!C21\"\n\"Q28/B4\"\n\"Inputs!$F65*Percentages!C22\"\n\"(Q3+Q31)/B4\"\n\"(SUM(Q3:Q36)-Q3-Q4-Q5-Q7-Q9-Q10-Q11-Q12-Q15-Q17-Q18-Q19-Q21-Q22-Q23-Q24-Q25-Q28-Q29-Q30-Q31-Q37+Q38)/B4\"\n\"Q11/B4\"\n\"Q51/B4\"\n\"(Q10+Q19+Q21)/B4\"\n\"Inputs!$F69*Percentages!C27\"\n\"(Q49+Q50)/B4\"\n\"(C4*Inputs!F39)/B4\"\n\"Inputs!F38*Inputs!B23/2/C4\"\n\"(+Q42+Q43+Q44+Q45+Q46+Q48)/B4\"\n\"(+Q9+Q17+Q18)/B4\"\n\"Inputs!$F74*Percentages!C33\"\n\"Inputs!C9*Y7+Inputs!C7*Y5+Inputs!C6*Y4+Inputs!C8*Y6+Inputs!C5*Y3+Inputs!C4*Inputs!C12\"\n\"Inputs!B71+Inputs!B78+Inputs!B79\"\n\"Inputs!C15+Inputs!C16+Inputs!B72+Inputs!B80+Inputs!B81\"\n\"B4*B8\"\n\"B4*Inputs!F43-E41\"\n\"Inputs!$C4*Inputs!$C12*Percentages!C42\"\n\"Inputs!$C5*$Y3*Percentages!C43\"\n\"B8-B32+B33\"\n\"Inputs!$C9*$Y7*Percentages!C48\"\n\"Inputs!$C15*Percentages!C49\"\n\"Inputs!$C35*Percentages!C51\"\n\"C9+C7+C6+C8+C5+C4\"\n\"E6\"\n\"(+C28+D28)*E28\"\n\"C28*$E28\"\n\"SUM(F28:F32)\"\n\"B23*G33+C24*H33\"\n\"A30\"\n\"A29\"\n\"$E$4\"\n\"$E$5\"\n\"$E$6\"\n\"$E$7\"\n\"$E$8\"\n\"$E$9\"\n\"$A$32\"\n\"SUM(B50:B53)\"\n\"B28\"\n\"B29\"\n\"B30\"\n\"B31\"\n\"B32\"\n\"54*-150\"\n\"SUM(F65:F77)+SUM(B66:B81)\"\n\"Inputs!$E$4\"\n\"Inputs!$E$6\"\n\"Inputs!$E$7\"\n\"Inputs!$E$8\"\n\"Inputs!$E$9\"\n\"Inputs!$E$10\"\n\"1-C3-D3-E3-F3-G3-H3-I3\"\n\"D2\"\n\"Inputs!G33/Inputs!F33\"\n\"Inputs!H33/Inputs!F33\"\n\"E6\"\n\"$E$6\"\n\"A32\"\n\"$E$4\"\n\"$E$5\"\n\"$E$7\"\n\"$E$8\"\n\"$E$9\"\n\"$A$32\"\n\"Inputs!$E$4\"\n\"Inputs!$E$5\"\n\"Inputs!$E$6\"\n\"Inputs!$E$7\"\n\"Inputs!$E$8\"\n\"Inputs!$E$9\"\n\"Inputs!$E$10\"\n\"SUM(B11:F11)\"\n\"SUM(B11:B22)\"\n\"SUM(C33:D33)-(E33)\"\n\"SUM(B33*F33)\"\n\"SUM(G33:G47)\"\n\"+C9-E9\"\n\"+C12\"\n\"SUM(C12:C17)\"\n\"+E24\"\n\"+C25+E25\"\n\"SUM(C22:C25)\"\n\"-E22-E23+E24+E25\"\n\"+C9+C19-C27\"\n\"+E9+E27\"\n\"SUM(G43:G45)\"\n\"+C32+C40-C47\"\n\"+C29+C49\"\n\"+E29\"\n\"SUM(E3:E75)\"\n\"G9*F9\"\n\"SUM(F9:F13)\"\n\"SUM(H21:H22)\"\n\"+F33*G33\"\n\"SUM(D5:D29)\"\n\"D30+E30\"\n\"D30+E30\"\n\"D30+F30+H30+J30+L30+N30\"\n\"D30+F30+H30+J30+L30+N30\"\n\"D30+F30+H30+J30+L30+N30\"\n\"E30+G30+I30+K30+M30+O30\"\n\"E30+G30+I30+K30+M30+O30\"\n\"E30+G30+I30+K30+M30+O30\"\n\"G32+G33\"\n\"G32+G33\"\n\"G32+G33\"\n\"SUM(C5:C97)\"\n\"+SUM(M5:M97)\"\n\"C98+D98\"\n\"C98+D98\"\n\"C98+E98+G98+I98+K98+M98\"\n\"C98+E98+G98+I98+K98+M98\"\n\"F98+H98+J98+L98+N98+D98\"\n\"F98+H98+J98+L98+N98+D98\"\n\"G100+G101\"\n\"G100+G101\"\n\"SUM(C5:C24)\"\n\"+SUM(M5:M24)\"\n\"C25+D25\"\n\"C25+D25\"\n\"C25+E25+G25+I25+K25+M25\"\n\"C25+E25+G25+I25+K25+M25\"\n\"D25+F25+H25+J25+L25+N25\"\n\"D25+F25+H25+J25+L25+N25\"\n\"G27+G28\"\n\"G27+G28\"\n\"SUM(E5:E109)\"\n\"E110+F110+G110+H110+I110+J110\"\n\"E110+F110+G110+H110+I110+J110\"\n\"E110+F110+G110+H110+I110+J110\"\n\"E110+F110+G110+H110+I110+J110\"\n\"E110+F110+G110+H110+I110+J110\"\n\"E110+F110+G110+H110+I110+J110\"\n\"SUM(D4:D9)\"\n\"AVERAGE(E4:E9)\"\n\"SUM(D6:D6)\"\n\"SUM(D9:D13)\"\n\"SUM(D16:D19)\"\n\"D7+D14+D20\"\n\"D27+D33\"\n\"SUM(D5:D31)\"\n\"D32+E32\"\n\"D32+E32\"\n\"D32+F32+H32+J32+L32+N32\"\n\"D32+F32+H32+J32+L32+N32\"\n\"D32+F32+H32+J32+L32+N32\"\n\"E32+G32+I32+K32+M32+O32\"\n\"E32+G32+I32+K32+M32+O32\"\n\"E32+G32+I32+K32+M32+O32\"\n\"G34+G35\"\n\"G34+G35\"\n\"G34+G35\"\n\"'Ending Inventory'!D32\"\n\"'Ending Inventory'!F32\"\n\"'Ending Inventory'!H32\"\n\"'Ending Inventory'!J32\"\n\"'Ending Inventory'!L32\"\n\"'Ending Inventory'!N32\"\n\"B4+C4+D4+E4+F4+G4\"\n\"'Beginning Inventory'!D30\"\n\"'Beginning Inventory'!F30\"\n\"'Beginning Inventory'!H30\"\n\"'Beginning Inventory'!J30\"\n\"'Beginning Inventory'!L30\"\n\"'Beginning Inventory'!N30\"\n\"B4-B5\"\n\"'Sales and Income'!C25\"\n\"'Sales and Income'!E25\"\n\"'Sales and Income'!G25\"\n\"'Sales and Income'!I25\"\n\"'Sales and Income'!K25\"\n\"'Sales and Income'!M25\"\n\"B10+C10+D10+E10+F10+G10\"\n\"SUM(B6:B10)\"\n\"SUM(B14:B18)\"\n\"B12-B19\"\n\"'Ending Inventory'!E32\"\n\"'Ending Inventory'!G32\"\n\"'Ending Inventory'!I32\"\n\"'Ending Inventory'!K32\"\n\"'Ending Inventory'!M32\"\n\"'Ending Inventory'!O32\"\n\"'Sales and Income'!F25\"\n\"'Sales and Income'!H25\"\n\"'Sales and Income'!J25\"\n\"'Sales and Income'!L25\"\n\"'Sales and Income'!N25\"\n\"'Beginning Inventory'!E30\"\n\"'Beginning Inventory'!G30\"\n\"'Beginning Inventory'!I30\"\n\"'Beginning Inventory'!K30\"\n\"'Beginning Inventory'!M30\"\n\"'Beginning Inventory'!O30\"\n\"Expenses!D98\"\n\"Expenses!F98\"\n\"Expenses!H98\"\n\"Expenses!J98\"\n\"Expenses!L98\"\n\"Expenses!N98\"\n\"B22+B23-B24-B25\"\n\"B20+B26\"\n\"G46+G47\"\n\"SUM(G50:G55)\"\n\"G46+SUM(G50:G54)\"\n\"G47+G55\"\n\"+G65+G66\"\n\"SUM(G69:G71)\"\n\"G65+G72\"\n\"G57-G75\"\n\"H79-G79\"\n\"G48-G67\"\n\"H79\"\n\"'Financial Records'!D21\"\n\"H90-H93\"\n\"H27\"\n\"'Wage Earning'!F10\"\n\"'Financial Records'!D7\"\n\"H100+H102\"\n\"'Financial Records'!D14\"\n\"'Financial Records'!D20\"\n\"H103+H106\"\n\"'Financial Records'!D27\"\n\"'Financial Records'!D33\"\n\"H107-H111\"\n\"H84\"\n\"H113<=H112\"\n\"vE1ReducedExpense\"\n\"vE2ReducedExpenses\"\n\"vE3ReducedExpense\"\n\"vE4ReducedExpense\"\n\"vR1AdditionalRevenue\"\n\"vR2AdditionalRevenue\"\n\"vR3AdditionalRevenue\"\n\"SUM(C30:C37)\"\n\"vWWOuts*vNewProductPct/vDesignWins*vWorkWeeks\"\n\"(vGDPW * vPf) / 2\"\n\"365/vRDCTBaseline\"\n\"365/(vRDCTBaseline * (1-vRDCTImprovement))\"\n\"(C9-B9)*vDesignWinFactorLearningCycles * vDesignWins\"\n\"C10 * vNewProductVolume\"\n\"C11 * vGDPW\"\n\"C12*vPf\"\n\"vRDCTImprovement*vRDCTBaseline*vDesignWinFactorRDCycleTime*vDesignWins\"\n\"vRDCTImprovement * vRDCTBaseline * vPricingFactorRDCycleTime\"\n\"vWWOuts*vNewProductPct*vGDPW*vPf*vWorkWeeks\"\n\"vWWOuts*vNewProductPct*vGDPW * vPf * (1 + C26)*vWorkWeeks\"\n\"C27-B27\"\n\"vProdCTImprovement * vFabCTBaseline * vYieldFactorProdCycleTime\"\n\"vWWOuts * vWorkWeeks / vLineYield\"\n\"vWWOuts * vWorkWeeks / (vLineYield + C33)\"\n\"B34-C34\"\n\"C35*vRawWaferCost\"\n\"vFabCTBaseline / 7\"\n\"vFabCTBaseline * (1 - vProdCTImprovement) / 7\"\n\"vWWOuts / vLineYield\"\n\"B42 * B41\"\n\"vECNPct * B43\"\n\"B44 * vWorkWeeks\"\n\"B45* vECNCost\"\n\"vhcp*vPf\"\n\"vWWOuts*vGDPW*52\"\n\"vVolatility*vD_Avg/3\"\n\"vVolatility*vD_avgImproved/3\"\n\"vD_Avg*vPf\"\n\"vD_avgImproved*vPf\"\n\"vFabCTBaseline/365\"\n\"vFabCTBaseline*(1-vProdCTImprovement)/365\"\n\"vR/365\"\n\"vFabCTY+vRY\"\n\"vFabCTYImproved+vRYImproved\"\n\"vD_Avg*vCTPlusR\"\n\"vD_avgImproved*vCTPlusRImproved\"\n\"SQRT(vCTPlusR)*vD_stdDev\"\n\"SQRT(vCTPlusRImproved)*vD_stdDevImproved\"\n\"(vRY * vh) / (vRY * vh + vLP)\"\n\"(vRYImproved * vhImproved) / (vRYImproved * vhImproved + vLP)\"\n\"1-vRHS\"\n\"1-vRHSImproved\"\n\"NORMINV(vOneMinusRHS,0,1)\"\n\"NORMINV(vOneMinusRHSImproved,0,1)\"\n\"vNormInv*vD2_stdDev+vD2_avg\"\n\"vNormInvImproved*vD2_stdDevImproved+vD2_avgImproved\"\n\"vOrderUpTo*vLossPct\"\n\"vOrderUpToImproved*vLossPct\"\n\"vLossQty*vPf\"\n\"vLossQtyImproved*vPf\"\n\"vWriteOff/vDTYears\"\n\"vWriteOffImproved/vDTYears\"\n\"vWriteOffAnnual-vWriteOffAnnualImproved\"\n\"B74 * vMidLineWIPValue\"\n\"B75 * vhcp\"\n\"SUM(F5:F580)\"\n\"SUM(I21:I28)\"\n\"I30\"\n\"SUM(K30:K57)\"\n\"K58\"\n\"SUM(G90:G91)\"\n\"SUM(I62:I92)\"\n\"SUM(I93:I95)\"\n\"(K60-K96)\"\n\"(K100*K18/100)\"\n\"K101-K102\"\n\"$B$52+$B$56-$B$53-$B$54\"\n\"(B4+B65)/B60\"\n\"B4/(B60-B61-B62)\"\n\"(B60-B61-B62)/B60\"\n\"(B53+B54-B57-B58-B67)/((B52+B56)-(B57+B58))\"\n\"B53/B52\"\n\"(B4+B65)/B65\"\n\"(B52-B53-B54)+B66-B63-B64+B67\"\n\"B15-B67\"\n\"B4\"\n\"B52+B56-B53-B54+((B52+B56)*B20)\"\n\"B52+B56-(B53+(B53*B21))-B54\"\n\"B4\"\n\"B52+B56-(B53+(B53*B21))-B54+((B52+B56)*B20)\"\n\"B10\"\n\"(B53+B54-B57-B58-B67)/((B52+((B52+B56)*B20)+B56)-(B57+B58))\"\n\"((B53+B54-B57-B58)*(1+B21)-B67)/((B52+B56)-((B57+B58)*(1+B21)))\"\n\"(B53+B54-B57-B58-B67)/((B52+B56)-(B57+B58))\"\n\"B10-((B10-C26)+(B10-D26))\"\n\"B53/(B52+(B52*B20))\"\n\"(B53+(B53*B21))/B52\"\n\"B53/B52\"\n\"(B53+(B53*B21))/(B52+(B52*B20))\"\n\"B15\"\n\"((B52+(B52*B20))-B53-B54)+B66-B63-B64+B67\"\n\"(B52-(B53+(B53*B21))-B54)+B66-B63-B64+B67\"\n\"(B52-B53-B54)+B66-(B63+(B63*B22))-B64+B67\"\n\"((B52+(B52*B20))-(B53+(B53*B21))-B54)+B66-(B63+(B63*B22))-B64+B67\"\n\"C29-B67\"\n\"D29-B67\"\n\"E29-B67\"\n\"+F29-B67\"\n\"B52\"\n\"B53+B54-B67\"\n\"SUM(B34-B35)\"\n\"B65\"\n\"B63\"\n\"B36+B37+B38-B39\"\n\"B64+B65\"\n\"B40-B41\"\n\"B67\"\n\"B42-B44\"\n\"'Income Tax Input'!K58\"\n\"'Income Tax Input'!K96-'Income Tax Input'!I95-'Income Tax Input'!I94-'Income Tax Input'!I89-'Income Tax Input'!I88-'Income Tax Input'!I75-'Income Tax Input'!I74-'Income Tax Input'!I70-'Income Tax Input'!I69\"\n\"'Income Tax Input'!I70+'Income Tax Input'!I69+'Income Tax Input'!I74+'Income Tax Input'!I75+'Income Tax Input'!I94+'Income Tax Input'!I95\"\n\"'Income Tax Input'!I111\"\n\"'Income Tax Input'!I80\"\n\"'Income Tax Input'!I83\"\n\"'Income Tax Input'!I112\"\n\"'Income Tax Input'!I123\"\n\"'Income Tax Input'!I70\"\n\"'Income Tax Input'!I125\"\n\"'Income Tax Input'!I94+'Income Tax Input'!I95\"\n\"B8*C8\"\n\"SUM(B8-E8)\"\n\"SUM(B8:B11)\"\n\"SUM(B15:B16)\"\n\"SUM(B21:B29)\"\n\"SUM(B30+B17)\"\n\"SUM(D31+E31)\"\n\"SUM(B39-B40)\"\n\"B41+B42+B43-B44\"\n\"E33\"\n\"B45-B46\"\n\"B47-B49\"\n\"'Income Tax Input'!K58\"\n\"'Income Tax Input'!I93\"\n\"E6-E7\"\n\"'Income Tax Input'!I115\"\n\"'Income Tax Input'!I118\"\n\"'Income Tax Input'!I124\"\n\"'Income Tax Input'!I123\"\n\"E11+E12-E13+E14-E15\"\n\"'Income Tax Input'!I121\"\n\"E8+E16+E21\"\n\"'Income Tax Input'!I120\"\n\"'Income Tax Input'!I119\"\n\"-E28+E23\"\n\"B3\"\n\"SUM(B5:B6)\"\n\"SUM(B5:B6)\"\n\"SUMIF(C4:C6,\"\"P\"\",B4:B6)\"\n\"SUM(B8:D13)\"\n\"SUM(B8:D13)\"\n\"SUM(B8:D13)\"\n\"SUM(B8:D13)\"\n\"SUM(B8:D13)\"\n\"SUM(B8:D13)\"\n\"SUMIF(C8:C13,\"\"P\"\",B8:B13)\"\n\"G15*B15\"\n\"SUMIF(C14:C20,\"\"P\"\",B14:B20)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUM(B22:D42)\"\n\"SUMIF(C21:C42,\"\"P\"\",B21:B42)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUM(B44:D55)\"\n\"SUMIF(C43:C55,\"\"P\"\",B43:B55)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUM(B57:B66)\"\n\"SUMIF(C56:C66,\"\"P\"\",B56:B66)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B68:D80)\"\n\"SUM(B82:D84)\"\n\"SUM(B82:D84)\"\n\"SUM(B82:D84)\"\n\"SUMIF(C81:C84,\"\"P\"\",B81:B84)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUM(C106:D107)\"\n\"SUMIF(C96:C107,\"\"P\"\",B96:B107)\"\n\"+C27\"\n\"+A3\"\n\"+A1\"\n\"+D104\"\n\"+A1\"\n\"SUM(J191:J192)\"\n\"SUM(J195:J198)\"\n\"SUM(J242:J244)\"\n\"123175+6375+1000+2000\"\n\"+C228-15000\"\n\"123175+2000\"\n\"5000+3000+25000+7375+4000\"\n\"25000+5000+2500+2000+5000+3000\"\n\"5000+3000+25000+10000+4000\"\n\"+B14\"\n\"+H66-H67\"\n\"300000*0.07\"\n\"203300*0.07\"\n\"+G161+G162\"\n\"SUM(G164:G167)\"\n\"+G160+G163\"\n\"SUM(G171:G172)\"\n\"SUM(G176:G178)\"\n\"+G170+G174+G175\"\n\"+I170+I175\"\n\"+A156\"\n\"+G158\"\n\"+H183+H184\"\n\"H185+H186+H187\"\n\"+A3\"\n\"+A3\"\n\"35100*2.487\"\n\"+(35100*2.487)+36000\"\n\"141300*0.1\"\n\"123294*0.1\"\n\"105300*0.1\"\n\"SUM(I185:I192)\"\n\"ROUND(G29,)\"\n\"F29\"\n\"Forecast!A1\"\n\"Forecast!H29\"\n\"Forecast!H30\"\n\"Forecast!H31\"\n\"Forecast!H32\"\n\"Forecast!H33\"\n\"Forecast!H34\"\n\"Forecast!H35\"\n\"Forecast!H36\"\n\"Forecast!H37\"\n\"Forecast!H38\"\n\"Forecast!H39\"\n\"Forecast!H40\"\n\"Forecast!H41\"\n\"Forecast!H42\"\n\"SUM(C25:N25)\"\n\"Forecast!A1\"\n\"MRP!O25\"\n\"MRP!O34\"\n\"B13/12\"\n\"Forecast!A1\"\n\"EOQ!B6\"\n\"EOQ!B14\"\n\"MRP!C25\"\n\"EOQ!B15\"\n\"B7\"\n\"Forecast!A1\"\n\"EOQ!D6\"\n\"EOQ!D14\"\n\"MRP!C34\"\n\"EOQ!D15\"\n\"B7\"\n\"Year\"\n\"Cash_Beg\"\n\"Cash_End\"\n\"AR_Beg\"\n\"AR_End\"\n\"Equip_Beg\"\n\"Equip_End\"\n\"Inv_Beg\"\n\"Inv_End\"\n\"SUM(D9:D13)\"\n\"AP_Beg\"\n\"AP_End\"\n\"SUM(D18:D21)\"\n\"Assets_Beg - Liables_Beg\"\n\"Assets_End - Liables_End\"\n\"Worth_Beg\"\n\"Worth_End - Worth_Beg\"\n\"Chapter_Name\"\n\"Year\"\n\"SUM('Income Add'!D7:D9)\"\n\"Dues\"\n\"Interest\"\n\"SUM('Income Add'!D11:D12)\"\n\"SUM('Income Add'!D14)\"\n\"D12 - D13\"\n\"SUM('Income Add'!D16:D17)\"\n\"SUM('Income Add'!D19:D20)\"\n\"SUM('Income Add'!D21:D24)\"\n\"SUM(F7:F19)\"\n\"SUM('Inv Flow'!F40:F46)\"\n\"SUM('Income Add'!D29:D55)\"\n\"SUM(F23:F27)\"\n\"Assets_End - Liables_End\"\n\"\"\"INCOME STATEMENT ADDENDUM for:  \"\" & Chapter_Name\"\n\"Year\"\n\"288+25\"\n\"93.65\"\n\"Year\"\n\"\"\"BEGINNING YEAR (BALANCE ON 1 JAN \"\"&Year&\"\")\"\"\"\n\"SUM(C7:C10)\"\n\"\"\"ENDING YEAR (BALANCE ON 31 DEC \"\"&Year&\"\")\"\"\"\n\"Cash_Beg\"\n\"Cash_End\"\n\"Cash_End - Cash_Beg\"\n\"Year\"\n\"288+25\"\n\"SUM(D7:D22)\"\n\"144.1 + 1.28\"\n\"52.55 + 7.56\"\n\"58.77\"\n\"14.03+93.65\"\n\"SUM(D27:D59)\"\n\"Cash_In\"\n\"Cash_Out\"\n\"Cash_In - Cash_Out\"\n\"Cash_Beg\"\n\"Cash_End\"\n\"Cash_End - Cash_Beg\"\n\"Year\"\n\"\"\"BEGINNING YEAR (BALANCE ON 1 JAN \"\"&Year&\"\")\"\"\"\n\"SUM(D7:D8)\"\n\"\"\"ENDING YEAR (BALANCE ON 31 DEC \"\"&Year&\"\")\"\"\"\n\"SUM(D13:D17)\"\n\"Equip_Beg\"\n\"Equip_End\"\n\"Equip_End - Equip_Beg\"\n\"Year\"\n\"SUM(E6:E9)\"\n\"Equip_In\"\n\"Equip_Out\"\n\"Equip_In - Equip_Out\"\n\"Equip_Beg\"\n\"Equip_End\"\n\"Equip_End - Equip_Beg\"\n\"Year\"\n\"\"\"BEGINNING YEAR (BALANCE ON 1 JAN \"\"&Year&\"\")\"\"\"\n\"\"\"Total from \"\"&Year-1&\"\" Inventory Balance Sheet\"\"\"\n\"SUM(E6:E23)\"\n\"\"\"ENDING YEAR (BALANCE ON 31 DEC \"\"&Year&\"\")\"\"\"\n\"3+12+28+23+1\"\n\"15.55+46.65+108.85+89.41\"\n\"16.19 + 14.03\"\n\"SUM(E28:E76)\"\n\"Inv_Beg\"\n\"Inv_End\"\n\"Inv_End - Inv_Beg\"\n\"Year\"\n\"15 + 12.5\"\n\"10 + 12.5\"\n\"SUM(F6:F29)\"\n\"130 + 217\"\n\" 2.8 + 11.72\"\n\"7.12 + 3.07\"\n\"SUM(F34:F65)\"\n\"Inv_In\"\n\"Inv_Out\"\n\"Inv_In - Inv_Out\"\n\"Inv_Beg\"\n\"Inv_End\"\n\"Inv_End - Inv_Beg\"\n\"Year\"\n\"\"\"BEGINNING YEAR (BALANCE ON 1 JAN \"\"&Year&\"\")\"\"\"\n\"SUM(C7:C7)\"\n\"\"\"ENDING YEAR (BALANCE ON 31 DEC \"\"&Year&\"\")\"\"\"\n\"SUM(C13:C14)\"\n\"AR_Beg\"\n\"AR_End\"\n\"AR_End - AR_Beg\"\n\"Year\"\n\"SUM(C6:C16)\"\n\"SUM(C21:C30)\"\n\"AR_In\"\n\"AR_Out\"\n\"AR_In - AR_Out\"\n\"AR_Beg\"\n\"AR_End\"\n\"AR_End - AR_Beg\"\n\"Year\"\n\"\"\"BEGINNING YEAR (BALANCE ON 1 JAN \"\"&Year&\"\")\"\"\"\n\"SUM(C7:C7)\"\n\"\"\"ENDING YEAR (BALANCE ON 31 DEC \"\"&Year&\"\")\"\"\"\n\"AP_Beg\"\n\"AP_End\"\n\"AP_End - AP_Beg\"\n\"Year\"\n\"SUM(C6:C11)\"\n\"AP_In\"\n\"AP_Out\"\n\"AP_In - AP_Out\"\n\"AP_Beg\"\n\"AP_End\"\n\"AP_End - AP_Beg\"\n\"D15\"\n\"200*500\"\n\"SUM(D15:D38)\"\n\"SUM(D42:D50)\"\n\"SUM(D54:D56)\"\n\"0.2913*20000-0.14*20000\"\n\"0.14*20000\"\n\"SUM(D62:D79)\"\n\"20000-3026\"\n\"C89*(E51-D51)/100\"\n\"SUM(D85:D87)\"\n\"SUM(E85:E89)\"\n\"200000-1220\"\n\"C96*(E57-D57)/100\"\n\"D39+D51+D57\"\n\"D80+D90+D97\"\n\"D101-D102\"\n\"D102/D101\"\n\"100*D103/D101\"\n\"D102/D103\"\n\"D39-D80\"\n\"D39/D80\"\n\"135*525\"\n\"+D19/$D$30\"\n\"70*500\"\n\"17*800\"\n\"45*1100\"\n\"SUM(F19:F23)\"\n\"SUM(D19:D29)\"\n\"SUM(D33:D78)\"\n\"D30-D79\"\n\"B84-C84\"\n\"C102-B102\"\n\"SUM(D84:D103)\"\n\"100000-6200\"\n\"22000-2600\"\n\"16*2000+300*650+65*500\"\n\"3400-100\"\n\"SUM(D107:D111)+SUM(D114:D118)\"\n\"D81+D104+D119\"\n\"D124*0.05\"\n\"D122-D125\"\n\"100*D79*G19/F19\"\n\"+(D79-D104-D119)*100*G19/F19\"\n\"100*G19*(D79-D104-D119+D125)/F19\"\n\"SUM(B24:E24)\"\n\"SUM(B24:B38)\"\n\"SUM(B43:B94)\"\n\"B107\"\n\"B100\"\n\"B39\"\n\"B95\"\n\"B101-B102\"\n\"B100+B103+B104-B106\"\n\"(F8*F9/100*8760)/1000\"\n\"(1-F11/100)*F10\"\n\"F12*F13/100\"\n\"G12*G13/100+G21\"\n\"F17*F25/100\"\n\"F30/100*F10+F26\"\n\"F32/100*F58\"\n\"F34/100*F58\"\n\"F31+F33+F35\"\n\"F59\"\n\"F37/100*F58\"\n\"F31+F33+F35+F38\"\n\"F14-F39\"\n\"H155+H150\"\n\"F40-F41\"\n\"F43/100*F42\"\n\"F42-F44\"\n\"IRR(F47:S47,0.17)\"\n\"F48/100*F75\"\n\"F45-F49\"\n\"I58+I63\"\n\"F60\"\n\"F61+G60\"\n\"F58-F61\"\n\"H135\"\n\"H63+I135\"\n\"F62+F63\"\n\"F68+G119\"\n\"F66+F67+F68\"\n\"F64+F69\"\n\"G75+H134\"\n\"F76+G50\"\n\"F79-G154-G147\"\n\"G79-H154+H133-H147\"\n\"F79+F77\"\n\"F84-G103\"\n\"F70-F86\"\n\"F40\"\n\"F38\"\n\"E67-F67\"\n\"E66-F66\"\n\"F83-E83\"\n\"H134\"\n\"H133\"\n\"F97+F103+F104+F105\"\n\"F156+F152\"\n\"E84-F84\"\n\"H132/100*E125\"\n\"I132/100*E125\"\n\"F44\"\n\"F49\"\n\"F110+F111+F112+F113+F114\"\n\"SUM(H110:H114)\"\n\"G106-G117\"\n\"E127/100*E125\"\n\"E125-E128\"\n\"E128*H132/100\"\n\"E128*I132/100\"\n\"H132/100*E130\"\n\"I132/100*E130\"\n\"E128/(E137-E138)\"\n\"E128\"\n\"J148\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E140\"\n\"E141/100*J146\"\n\"E141/100*K146\"\n\"J147+J150\"\n\"F45/F77*100\"\n\"F40/F79*100\"\n\"F67/F14\"\n\"F165*12\"\n\"F36/F66\"\n\"F69/F85\"\n\"F68/F85\"\n\"F79/F77\"\n\"SUM(B4:M4)\"\n\"SUM(B4:B6)\"\n\"SUM(B9:B9)\"\n\"B10/B7\"\n\"SUM(B7-B10)\"\n\"B13/B7\"\n\"SUM(N17:N30)\"\n\"B31/B7\"\n\"SUM(B13-B31)\"\n\"B33/B7\"\n\"SUM(B33+B36-B37)\"\n\"SUM(B38-B39)\"\n\"B40/B7\"\n\"B42\"\n\"B3\"\n\"SUM(B5:M5)\"\n\"SUM(B5:B11)\"\n\"SUM(B14:B32)\"\n\"SUM(B12-B33)\"\n\"SUM(B34-B36-B37-B38-B39-B40)\"\n\"SUM(C34-C36-C37-C38-C40)\"\n\"SUM(H34-H36-H37-H38+H39-H40)\"\n\"SUM(B3,B41)\"\n\"SUM(M42)\"\n\"B47\"\n\"SUM(B44+B45-B46)\"\n\"SUM(B4:B10)\"\n\"B13/B11\"\n\"SUM(B11-B13)\"\n\"B16/B11\"\n\"SUM(B21:B40)\"\n\"B41/B11\"\n\"SUM(B16-B41)\"\n\"SUM(B43+B45-B46)\"\n\"SUM(B43+B45-B46-B48)\"\n\"B50/B11\"\n\"SUM(B5:F5)\"\n\"SUM(B5:B13)\"\n\"SUM(B14:B16)\"\n\"SUM(B20:B44)\"\n\"SUM(B17-B45)\"\n\"(B51)\"\n\"SUM(B49)\"\n\"(B47)\"\n\"SUM(B49:B50)\"\n\"SUM(B6:B11)\"\n\"SUM(B15:B20)-B21\"\n\"SUM(B12+B22+B24)\"\n\"SUM(B29:B32)\"\n\"SUM(B33+B35)\"\n\"SUM(B25-B36)\"\n\"SUM(B36+B42)\"\n\"B12/B33\"\n\"SUM(B6+B8)/B33\"\n\"SUM(B36/B25)\"\n\"SUM(B36/B42)\"\n\"SUM(D8:D14)\"\n\"SUM(D18:D22)\"\n\"SUM(D27:D32)\"\n\"SUM(D15+D23+D33)\"\n\"SUM(D35-H35)\"\n\"B5\"\n\"B5*A10\"\n\"A10-B10\"\n\"C29\"\n\"E32\"\n\"B5*A11\"\n\"C29\"\n\"B5*A12\"\n\"C29\"\n\"B5*A13\"\n\"C29\"\n\"B5*A14\"\n\"C29\"\n\"B5*A15\"\n\"C29\"\n\"B5*A16\"\n\"C29\"\n\"B5*A17\"\n\"C29\"\n\"B5*A18\"\n\"C29\"\n\"B5*A19\"\n\"C29\"\n\"B5*A20\"\n\"C29\"\n\"B5*A21\"\n\"C29\"\n\"B5*A22\"\n\"C29\"\n\"C26-C27+C28\"\n\"C29\"\n\"100%-B5\"\n\"C29/C32\"\n\"+B7-B8\"\n\"+B9-B11\"\n\"+B12-B14+B15\"\n\"SUM(B8:B16)\"\n\"SUM(B19:B21)\"\n\"+B22-B23\"\n\"SUM(B26:B27)\"\n\"+B17+B24+B30+B31\"\n\"SUM(B37:B40)\"\n\"+B41+B42+B43+B44\"\n\"SUM(B48:B53)\"\n\"+B45+B54\"\n\"-207-96+792-926\"\n\"42-229-3-65\"\n\"8-71+561+503\"\n\"SUM(B10:B14)\"\n\"SUM(B18:B21)\"\n\"689+986\"\n\"1315+1970\"\n\"-160+224\"\n\"212-2533\"\n\"158-1929\"\n\"134-1652\"\n\"B7+B15+B22+B29+B31\"\n\"SUM(B9:B15)\"\n\"+B7-B16\"\n\"+B18-B19\"\n\"SUM(B9:B13)\"\n\"SUM(B19:B22)\"\n\"+B23-B24\"\n\"+B14+B16+B25+B26+B28\"\n\"29.7+5920.5\"\n\"5614.5+29.7\"\n\"23447.9+8.1\"\n\"20186.7-21.3\"\n\"+B47+B48-B49\"\n\"+B38+B40+B42+B44+B50\"\n\"-752.9-223+404.5-150.9+69.9\"\n\"-579.1-409.5+250.1-13+9.8\"\n\"+F15-F8-F11-F12-F13\"\n\"SUM(B8:B14)\"\n\"+B15+B16\"\n\"SUM(B20:B24)\"\n\"2137.9+11.6\"\n\"-457.2+2379.5\"\n\"322.9-152.5\"\n\"490.1-114.1\"\n\"+F35-F28-F29-F30-F31-F32-F33\"\n\"B8-B9\"\n\"B11-B15\"\n\"B19+B21+B22\"\n\"B25-B28\"\n\"B28-B29-B33\"\n\"223.283-23.955\"\n\"222.646-21.71\"\n\"209.243-19.748\"\n\"193.428-7.446\"\n\"165.564-19.567\"\n\"SUM(B8:B12)\"\n\"B16-B17\"\n\"B14+B19+B21+B23+B25+B27+B29\"\n\"B41+B43+B44+B45+B46+B47\"\n\"SUM(B52:B53)\"\n\"B57+B58+B59-B60\"\n\"B55+B62\"\n\"B49+B64\"\n\"SUM(B8:B12)\"\n\"SUM(B15:B18)\"\n\"+B13-B19\"\n\"+B30-B31\"\n\"+(B30+B32)/2\"\n\"+B37*B38\"\n\"SUM(B39:B40)\"\n\"+B21\"\n\"+B23\"\n\"+B33\"\n\"+B41-B44-B45-B46\"\n\"+C5-C6\"\n\"+(C7+D7)/2\"\n\"(1176+375+1787+1225+343+1716)/2\"\n\"(12058+12236)/2\"\n\"(12626+12180)/2\"\n\"(32113+30966)/2\"\n\"(2940+2781)/2\"\n\"11358/10761\"\n\"(2294+2940)/10761\"\n\"21206/C10\"\n\"6231/12058\"\n\"(6231+362+2701)/12058\"\n\"(5838+650)/650\"\n\"(3763+650)/C13\"\n\"3764/C11\"\n\"16919/38125\"\n\"3763/38125\"\n\"38125/2940\"\n\"38125/C14\"\n\"38125/(1176+375+1787)\"\n\"38125/C10\"\n\"38125/12626\"\n\"109.5/2.75\"\n\"2.75/109.5\"\n\"1.14/109.5\"\n\"1.14/2.75\"\n\"SUM(G10:G12)\"\n\"SUM(E16:E17)\"\n\"E18-E19\"\n\"G13+G20\"\n\"SUM(E24:E32)\"\n\"G21+G33\"\n\"SUM(G35:G36)\"\n\"'Annual Leave'!F20\"\n\"((C45+G10)*0.156/1.156)-G13\"\n\"SUM(C44:C53)\"\n\"SUM(C54:E54)\"\n\"G38\"\n\"C54+E54+G55\"\n\"ROUND(B4/173.33,2)\"\n\"C4*D4*E4\"\n\"SUM(F4:F18)\"\n\"A4+0.01\"\n\"A257+0.01\"\n\"+E5-D5\"\n\"+J7+J8+J9\"\n\"SUM(P10:P16)\"\n\"+(V8/U8-1)*100\"\n\"SUM(J13:J18)\"\n\"+D10+D8+D5\"\n\"+D12+D14\"\n\"SUM(P22:P27)\"\n\"+J11+J5\"\n\"+J20-J22-1\"\n\"+D20+D25+D24+D23+D22\"\n\"+J30+J31\"\n\"SUM(P31:P38)\"\n\"+D31+D30+D28\"\n\"+J33+J36+J37\"\n\"+J39+J28+1\"\n\"+K39+K28\"\n\"+P40+P29+P19+P8\"\n\"+P42+P5\"\n\"SUM(J57:J60)\"\n\"+K57+K58+K59+K60\"\n\"SUM(P61:P67)\"\n\"+D61+D58+D55\"\n\"+J62+J55\"\n\"+J71-J73\"\n\"SUM(P82:P91)\"\n\"+D82+D81+D79\"\n\"+J91+J79-1\"\n\"+K91+K79\"\n\"+P93+P80+P70+P58\"\n\"+P95+P55\"\n\"VLOOKUP(D5,sort0,2,FALSE)\"\n\"TEXT(DATA!E5,\"\"#,##0\"\")\"\n\"SUM(E16:E25)\"\n\"Dec!$M$3\"\n\"Jan!$J$25\"\n\"Jan!$L$25\"\n\"Jan!$J$19\"\n\"Jan!$L$19\"\n\"Jan!$J$21\"\n\"Jan!$L$21\"\n\"Jan!$J$23\"\n\"Jan!$L$23\"\n\"Jan!$J$16\"\n\"Jan!$L$16\"\n\"Jan!H31\"\n\"Jan!$J$31\"\n\"Jan!$L$31\"\n\"Jan!H33\"\n\"Jan!$J$33\"\n\"Jan!$L$33\"\n\"Feb!$J$25\"\n\"Feb!$L$25\"\n\"Feb!$J$19\"\n\"Feb!$L$19\"\n\"Feb!$J$21\"\n\"Feb!$L$21\"\n\"Feb!$J$23\"\n\"Feb!$L$23\"\n\"Feb!$J$16\"\n\"Feb!$L$16\"\n\"Feb!H47\"\n\"Feb!$J$31\"\n\"Feb!$L$31\"\n\"Feb!H49\"\n\"Feb!$J$33\"\n\"Feb!$L$33\"\n\"Mar!$J$25\"\n\"Mar!$L$25\"\n\"Mar!$J$19\"\n\"Mar!$L$19\"\n\"Mar!$J$21\"\n\"Mar!$L$21\"\n\"Mar!$J$23\"\n\"Mar!$L$23\"\n\"Mar!$J$16\"\n\"Mar!$L$16\"\n\"Mar!H63\"\n\"Mar!$J$31\"\n\"Mar!$L$31\"\n\"Mar!H65\"\n\"Mar!$J$33\"\n\"Mar!$L$33\"\n\"Apr!$J$25\"\n\"Apr!$L$25\"\n\"Apr!$J$19\"\n\"Apr!$L$19\"\n\"Apr!$J$21\"\n\"Apr!$L$21\"\n\"Apr!$J$23\"\n\"Apr!$L$23\"\n\"Apr!$J$16\"\n\"Apr!$L$16\"\n\"Apr!H79\"\n\"Apr!$J$31\"\n\"Apr!$L$31\"\n\"Apr!H81\"\n\"Apr!$J$33\"\n\"Apr!$L$33\"\n\"May!$J$25\"\n\"May!$L$25\"\n\"May!$J$19\"\n\"May!$L$19\"\n\"May!$J$21\"\n\"May!$L$21\"\n\"May!$J$23\"\n\"May!$L$23\"\n\"May!$J$16\"\n\"May!$L$16\"\n\"May!H95\"\n\"May!$J$31\"\n\"May!$L$31\"\n\"May!H97\"\n\"May!$J$33\"\n\"May!$L$33\"\n\"Jun!$J$25\"\n\"Jun!$L$25\"\n\"Jun!$J$19\"\n\"Jun!$L$19\"\n\"Jun!$J$21\"\n\"Jun!$L$21\"\n\"Jun!$J$23\"\n\"Jun!$L$23\"\n\"Jun!$J$16\"\n\"Jun!$L$16\"\n\"Jun!H111\"\n\"Jun!$J$31\"\n\"Jun!$L$31\"\n\"Jun!H113\"\n\"Jun!$J$33\"\n\"Jun!$L$33\"\n\"Jul!$J$25\"\n\"Jul!$L$25\"\n\"Jul!$J$19\"\n\"Jul!$L$19\"\n\"Jul!$J$21\"\n\"Jul!$L$21\"\n\"Jul!$J$23\"\n\"Jul!$L$23\"\n\"Jul!$J$16\"\n\"Jul!$L$16\"\n\"Jul!H127\"\n\"Jul!$J$31\"\n\"Jul!$L$31\"\n\"Jul!H129\"\n\"Jul!$J$33\"\n\"Jul!$L$33\"\n\"Aug!$J$25\"\n\"Aug!$L$25\"\n\"Aug!$J$19\"\n\"Aug!$L$19\"\n\"Aug!$J$21\"\n\"Aug!$L$21\"\n\"Aug!$J$23\"\n\"Aug!$L$23\"\n\"Aug!$J$16\"\n\"Aug!$L$16\"\n\"Aug!H143\"\n\"Aug!$J$31\"\n\"Aug!$L$31\"\n\"Aug!H145\"\n\"Aug!$J$33\"\n\"Aug!$L$33\"\n\"Sep!$J$25\"\n\"Sep!$L$25\"\n\"Sep!$J$19\"\n\"Sep!$L$19\"\n\"Sep!$J$21\"\n\"Sep!$L$21\"\n\"Sep!$J$23\"\n\"Sep!$L$23\"\n\"Sep!$J$16\"\n\"Sep!$L$16\"\n\"Sep!H159\"\n\"Sep!$J$31\"\n\"Sep!$L$31\"\n\"Sep!H161\"\n\"Sep!$J$33\"\n\"Sep!$L$33\"\n\"Oct!$J$25\"\n\"Oct!$L$25\"\n\"Oct!$J$19\"\n\"Oct!$L$19\"\n\"Oct!$J$21\"\n\"Oct!$L$21\"\n\"Oct!$J$23\"\n\"Oct!$L$23\"\n\"Oct!$J$16\"\n\"Oct!$L$16\"\n\"Oct!H175\"\n\"Oct!$J$31\"\n\"Oct!$L$31\"\n\"Oct!H177\"\n\"Oct!$J$33\"\n\"Oct!$L$33\"\n\"Nov!$J$25\"\n\"Nov!$L$25\"\n\"Nov!$J$19\"\n\"Nov!$L$19\"\n\"Nov!$J$21\"\n\"Nov!$L$21\"\n\"Nov!$J$23\"\n\"Nov!$L$23\"\n\"Nov!$J$16\"\n\"Nov!$L$16\"\n\"Nov!H191\"\n\"Nov!$J$31\"\n\"Nov!$L$31\"\n\"Nov!H193\"\n\"Nov!$J$33\"\n\"Nov!$L$33\"\n\"Dec!$J$25\"\n\"Dec!$L$25\"\n\"Dec!$J$19\"\n\"Dec!$L$19\"\n\"Dec!$J$21\"\n\"Dec!$L$21\"\n\"Dec!$J$23\"\n\"Dec!$L$23\"\n\"Dec!$J$16\"\n\"Dec!$L$16\"\n\"Dec!H207\"\n\"Dec!$J$31\"\n\"Dec!$L$31\"\n\"Dec!H209\"\n\"Dec!$J$33\"\n\"Dec!$L$33\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J19+J21+J23\"\n\"J22+J23\"\n\"H26+H27\"\n\"J28+J29+J31+J32+J33+J34+J35+J36+J37\"\n\"J38-J42\"\n\"J24+J43\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!J13\"\n\"H5+H6+H8+H9\"\n\"H12+H14+H15\"\n\"J10+J16+J17+J18+J19+J20\"\n\"J21+J22+J23\"\n\"J24+J26+J27\"\n\"'Page 1'!J43\"\n\"'Page 1'!J35\"\n\"'Page 1'!J35\"\n\"IF('Page 1'!J44='Page 2'!J28,\"\"Line 17 equals Line 30, this report is in balance.\"\",\"\"Line 17 does not equal Line 30, this report is out of balance!\"\")\"\n\"IF('Page 1'!J44='Page 2'!J28,\"\"Line 17 equals Line 30, this report is in balance.\"\",\"\"Line 17 does not equal Line 30, this report is out of balance!\"\")\"\n\"IF('Page 1'!J44='Page 2'!J28,\"\"Line 17 equals Line 30, this report is in balance.\"\",\"\"Line 17 does not equal Line 30, this report is out of balance!\"\")\"\n\"H31+H32+H33\"\n\"J30-J34\"\n\"J35*0.01125\"\n\"J35*0.01125\"\n\"H36-H37\"\n\"H36-H37\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!J13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!J13\"\n\"J8+J9+J10+J11+J12+J13+J14+J15+J16\"\n\"J17+J30+J31\"\n\"J17+J30+J31\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!D13:H13\"\n\"'Page 1'!J13\"\n\"H10+H11+H13\"\n\"J8+J14\"\n\"H17+H18+H19\"\n\"J15-J20\"\n\"J26+J27+J28+J29+J30+J31+J32+J33+J34+J35+J36+J37\"\n\"E12-G12\"\n\"H12+E13-G13\"\n\"IF(ISBLANK(A21),CHAR(32),IF(K21>0.01,IF((G21+H21-I21-J21)<=0,\"\"Limit CIA in Col. 9\"\",IF((G21+H21-I21-J21-K21)>=0,(G21+H21-I21-J21-K21),\"\"Limit CIA in Col. 9\"\")),(G21+H21-I21-J21)))\"\n\"IF(ISBLANK('Data Input'!D2),CHAR(32),'Data Input'!D2)\"\n\"IF(ISBLANK('Data Input'!D2),CHAR(32),'Data Input'!D2)\"\n\"IF(ISBLANK('Data Input'!D3),CHAR(32),'Data Input'!D3)\"\n\"IF(ISBLANK('Data Input'!D3),CHAR(32),'Data Input'!D3)\"\n\"IF(ISBLANK('Data Input'!D3),CHAR(32),'Data Input'!D3)\"\n\"IF(ISBLANK('Data Input'!D4),CHAR(32),'Data Input'!D4)\"\n\"IF(ISBLANK('Data Input'!D4),CHAR(32),'Data Input'!D4)\"\n\"IF(ISBLANK('Data Input'!D4),CHAR(32),'Data Input'!D4)\"\n\"IF(ISBLANK('Data Input'!D5),CHAR(32),'Data Input'!D5)\"\n\"IF(ISBLANK('Data Input'!D5),CHAR(32),'Data Input'!D5)\"\n\"IF(ISBLANK('Data Input'!D5),CHAR(32),'Data Input'!D5)\"\n\"IF(ISBLANK('Data Input'!D5),CHAR(32),'Data Input'!D5)\"\n\"IF(ISBLANK('Data Input'!D5),CHAR(32),'Data Input'!D5)\"\n\"SUBTOTAL(9,L17:L53)\"\n\"IF(ISBLANK('Data Input'!H6),CHAR(32),'Data Input'!H6)\"\n\"IF(ISBLANK('Data Input'!H6),CHAR(32),'Data Input'!H6)\"\n\"IF(ISBLANK('Data Input'!H6),CHAR(32),'Data Input'!H6)\"\n\"IF(ISBLANK('Data Input'!H6),CHAR(32),'Data Input'!H6)\"\n\"IF(ISBLANK('Data Input'!D6),CHAR(32),'Data Input'!D6)\"\n\"IF(ISBLANK('Data Input'!D6),CHAR(32),'Data Input'!D6)\"\n\"IF(ISBLANK('Data Input'!D6),CHAR(32),'Data Input'!D6)\"\n\"IF(ISBLANK('Data Input'!D6),CHAR(32),'Data Input'!D6)\"\n\"IF(ISBLANK('Data Input'!H7),CHAR(32),'Data Input'!H7)\"\n\"IF(ISBLANK('Data Input'!H7),CHAR(32),'Data Input'!H7)\"\n\"IF(ISBLANK('Data Input'!H7),CHAR(32),'Data Input'!H7)\"\n\"IF(ISBLANK('Data Input'!H7),CHAR(32),'Data Input'!H7)\"\n\"IF(ISBLANK('Data Input'!D7),CHAR(32),'Data Input'!D7)\"\n\"IF(ISBLANK('Data Input'!D7),CHAR(32),'Data Input'!D7)\"\n\"IF(ISBLANK('Data Input'!D7),CHAR(32),'Data Input'!D7)\"\n\"IF(ISBLANK('Data Input'!D7),CHAR(32),'Data Input'!D7)\"\n\"IF(ISBLANK('Data Input'!E8),CHAR(32),'Data Input'!E8)\"\n\"IF(ISBLANK('Data Input'!E8),CHAR(32),'Data Input'!E8)\"\n\"IF(ISBLANK('Data Input'!E8),CHAR(32),'Data Input'!E8)\"\n\"IF(ISBLANK('Data Input'!E8),CHAR(32),'Data Input'!E8)\"\n\"IF(ISBLANK('Data Input'!D9),CHAR(32),'Data Input'!D9)\"\n\"IF(ISBLANK('Data Input'!D9),CHAR(32),'Data Input'!D9)\"\n\"IF(ISBLANK('Data Input'!D9),CHAR(32),'Data Input'!D9)\"\n\"IF(ISBLANK('Data Input'!D9),CHAR(32),'Data Input'!D9)\"\n\"IF(ISBLANK('Data Input'!D10),CHAR(32),'Data Input'!D10)\"\n\"IF(ISBLANK(A17),CHAR(32),IF(J17>0.01,IF((F17+G17-H17-I17)<=0,\"\"Limit CIA in Col. 9\"\",IF((F17+G17-H17-I17-J17)>=0,(F17+G17-H17-I17-J17),\"\"Limit CIA in Col. 9\"\")),(F17+G17-H17-I17)))\"\n\"SUM(F17:F45)\"\n\"K46\"\n\"C66\"\n\"IF(ISBLANK(H11), CHAR(32),H11+I11+K11)\"\n\"L11\"\n\"SUM(H11:H18)\"\n\"IF(ISBLANK(H21),CHAR(32),SUM(H21:K21))\"\n\"IF(ISERROR(L21+M21),CHAR(32),L21+M21)\"\n\"SUM(H31:H39)\"\n\"L19+L29+L40\"\n\"IF(ISBLANK(D10),CHAR(32),H10-I10)\"\n\"IF(ISBLANK(K10),CHAR(32),K10+L10)\"\n\"IF(ISERROR(I10+M10),CHAR(32),I10+M10)\"\n\"IF(ISERROR(N10/D10),CHAR(32),N10/D10)\"\n\"SUM(H10:H41)\"\n\"SUM(I10:I41)\"\n\"SUM(J10:J41)\"\n\"SUM(K10:K41)\"\n\"SUM(L10:L41)\"\n\"SUM(M10:M41)\"\n\"SUM(N10:N41)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"SUM(V18:Y21)\"\n\"C10-1\"\n\"E19*$C$11\"\n\"C10-1\"\n\"C10-1\"\n\"SUM(H53:H57)\"\n\"C22\"\n\"D23+1\"\n\"C10-1\"\n\"$C$6\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C26=0,0,E26*$C$11)\"\n\"C$10\"\n\"C$10\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"$C$5\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF($C$7=0,0,IF($C$10-5<$C$7,0,VLOOKUP($C$36,STD.TBLE.THINNED!$B$11:$L$60,11)))\"\n\"IF($C$8=0,0,IF($C$10-5<$C$8,0,VLOOKUP($C$8,STD.TBLE.THINNED!B11:L60,11)-VLOOKUP($C$7,STD.TBLE.THINNED!$B$11:$L$60,11)))\"\n\"IF($C$9=0,0,IF($C$10-5<$C$9,0,VLOOKUP($C$9,STD.TBLE.THINNED!$B$11:$L$60,11)-VLOOKUP($C$8,STD.TBLE.THINNED!$B$11:$L$60,11)))\"\n\"VLOOKUP($C$10,STD.TBLE.THINNED!$B$11:$L$60,6)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C6=0,0,IF(C6<=$C$10-5,E53*$C$12,0))\"\n\"IF(C7<C$10-4,C7,0)\"\n\"IF(C7<C$10-4,C7,0)\"\n\"E57*C12\"\n\"D73*$C$81*C$114\"\n\"E73*$C$81*C$115\"\n\"F73*$C$81*C$116\"\n\"G73*$C$81*C$117\"\n\"H73*$C$81*C$118\"\n\"I73*$C$81*C$119\"\n\"D76*$C$81*C$126\"\n\"E76*$C$81*C$127\"\n\"F76*$C$81*C$128\"\n\"G76*$C$81*C$129\"\n\"H76*$C$81*C$130\"\n\"I76*$C$81*C$131\"\n\"-CASH.FLOW!R137\"\n\"D93*$C$101*C$120\"\n\"D96*$C$101*C$132\"\n\"-CASH.FLOW!X137\"\n\"CASH.FLOW!AC137\"\n\"CASH.FLOW!AA137\"\n\"CASH.FLOW!$Y$137\"\n\"C141-D143\"\n\"CASH.FLOW!AE137\"\n\"C147/STAND.PARAMS!C19\"\n\"IF(IO.CONTROL!$C$14>$B78,0,STAND.PARAMS!$K$166*IO.CONTROL!$F$19)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,STAND.PARAMS!$K$166*IO.CONTROL!$F$20)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,7)+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,8)+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,9)+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,10)+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,11))*IO.CONTROL!$F$21)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,6)*IO.CONTROL!$F$22)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(STAND.PARAMS!$C$19/IO.CONTROL!$C$10)*10*IO.CONTROL!$F$23)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(STAND.PARAMS!$C$19-(STAND.PARAMS!$C$19/IO.CONTROL!$C$10)*10)*IO.CONTROL!$F$24)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,3)*IO.CONTROL!$F$26+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,4)*IO.CONTROL!$F$27+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,5)*IO.CONTROL!$F$28+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,6)*IO.CONTROL!$F$29))\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,3)*IO.CONTROL!$F$31+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,4)*IO.CONTROL!$F$32+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,5)*IO.CONTROL!$F$33+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,6)*IO.CONTROL!$F$34))\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,8)*IO.CONTROL!$F$36+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,9)*IO.CONTROL!$F$37+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,10)*IO.CONTROL!$F$38+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,11)*IO.CONTROL!$F$39))\"\n\"IF(IO.CONTROL!$C$14>$B78,0,(VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,2)*IO.CONTROL!$F$41+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,3)*IO.CONTROL!$F$42+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,4)*IO.CONTROL!$F$43+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,5)*IO.CONTROL!$F$44+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,6)*IO.CONTROL!$F$45))\"\n\"IF(IO.CONTROL!$C$14>$B78,0,((VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,7)*IO.CONTROL!$F$53*IO.CONTROL!$F$45+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,8)*IO.CONTROL!$F$54*IO.CONTROL!$F$46+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,9)*IO.CONTROL!$F$55*IO.CONTROL!$F$47+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,10)*IO.CONTROL!$F$56*IO.CONTROL!$F$48+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,11)*IO.CONTROL!$F$57*IO.CONTROL!$F$49)))\"\n\"SUM(C78:M78)\"\n\"IF(IO.CONTROL!$C$14>$B78,0,((VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,7)*IO.CONTROL!$F$53+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,8)*IO.CONTROL!$F$54+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,9)*IO.CONTROL!$F$55+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,10)*IO.CONTROL!$F$56+VLOOKUP($B78-IO.CONTROL!$C$14,STAND.PARAMS!$K$209:$U$264,11)*IO.CONTROL!$F$57)))\"\n\"-IO.CONTROL!E62\"\n\"IO.CONTROL!D62\"\n\"-IO.CONTROL!D84\"\n\"-IO.CONTROL!D104\"\n\"SUM(R78:X78)\"\n\"P78+Y78\"\n\"Z78/(1+IO.CONTROL!$C$13)^AF78\"\n\"Q78\"\n\"AB78/(1+IO.CONTROL!$C$13)^AF78\"\n\"Z78+AB78\"\n\"AD78/(1+IO.CONTROL!$C$13)^B78\"\n\"IF(IO.CONTROL!$C$14=2,N82,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P81))\"\n\"IF(IO.CONTROL!$C$14=2,O82,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q81))\"\n\"IF(IO.CONTROL!$C$14<=3,N83,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P82))\"\n\"IF(IO.CONTROL!$C$14<=3,O83,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q82))\"\n\"IF(IO.CONTROL!$C$14<=4,N84,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P83))\"\n\"IF(IO.CONTROL!$C$14<=4,O84,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q83))\"\n\"IF(IO.CONTROL!$C$14<=5,N85,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P84))\"\n\"IF(IO.CONTROL!$C$14<=5,O85,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q84))\"\n\"IF(IO.CONTROL!$C$14<=6,N86,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P85))\"\n\"IF(IO.CONTROL!$C$14<=6,O86,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q85))\"\n\"IF(IO.CONTROL!$C$14<=7,N87,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P86))\"\n\"IF(IO.CONTROL!$C$14<=7,O87,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q86))\"\n\"IF(IO.CONTROL!$C$14<=8,N88,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P87))\"\n\"IF(IO.CONTROL!$C$14<=8,O88,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q87))\"\n\"IF(IO.CONTROL!$C$14<=9,N89,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P88))\"\n\"IF(IO.CONTROL!$C$14<=9,O89,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q88))\"\n\"IF(IO.CONTROL!$C$14<=10,N90,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P89))\"\n\"IF(IO.CONTROL!$C$14<=10,O90,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q89))\"\n\"IF(IO.CONTROL!$C$14<=11,N91,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,13)-$P$81)/(IO.CONTROL!$C$14-1))+P90))\"\n\"IF(IO.CONTROL!$C$14<=11,O91,(((VLOOKUP(IO.CONTROL!$C$14,CASH.FLOW!$B$80:$AE$135,14)-$Q$81)/(IO.CONTROL!$C$14-1))+Q90))\"\n\"N92\"\n\"($Z$124/IO.CONTROL!$C$13)/(((1+IO.CONTROL!$C$13)^($B$124+1))-1)\"\n\"($AB$124/IO.CONTROL!$C$13)/(((1+IO.CONTROL!$C$13)^($B$124+1))-1)\"\n\"($AD$124/IO.CONTROL!$C$13)/(((1+IO.CONTROL!$C$13)^($B$124+1))-1)\"\n\"R78/(1+IO.CONTROL!$C$13)^$AF78+R79/(1+IO.CONTROL!$C$13)^$AF79+R80/(1+IO.CONTROL!$C$13)^$AF80+R81/(1+IO.CONTROL!$C$13)^$AF81+R82/(1+IO.CONTROL!$C$13)^$AF82\"\n\"SUM(AA78:AA136)\"\n\"(C19/IO.CONTROL!C10)*5\"\n\"E7*C$21\"\n\"IF(AND(D$7/5>=0,D$7/5<=I7),C$7,IF(AND(D$8/5>=0,D$8/5<=I7),C$8,0))\"\n\"K25-L25\"\n\"IF(P5*5<=IO.CONTROL!$C$10,O25-P25,VLOOKUP((IO.CONTROL!$C$10/5),$I7:$T24,2+P5))\"\n\"IF(AND(D$7/5>I7,D$7/5<=I8),C$7,IF(AND(D$8/5>I7,D$8/5<=I8),C$8,0))\"\n\"IF($J$3-L$122-L$99-L$76-L$53-L$30-K8-K9-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23>0,K7-MIN($J$3-L$122-L$99-L$76-L$53-L$30-K8-K9-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23,K7),K7)\"\n\"L7\"\n\"IF($J$3-L$122-L$99-L$76-L$53-L$30-K9-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23>0,K8-MIN($J$3-L$122-L$99-L$76-L$53-L$30-K9-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23,K8),K8)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-L$30-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23>0,K9-MIN($J$3-L$122-L$99-L$76-L$53-L$30-K10-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23,K9),K9)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-L$30-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23>0,K10-MIN($J$3-L$122-L$99-L$76-L$53-L$30-K11-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23,K10),K10)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-L$30-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23>0,K11-MIN($J$3-L$122-L$99-L$76-L$53-L$30-K12-K13-K14-K15-K16-K17-K18-K19-K20-K21-K22-K23,K11),K11)\"\n\"IF($I12*5<=IO.CONTROL!$C$10,P11,0)\"\n\"IF($J$3-M$122-M$99-M$76-M$53-M$30-L13-L14-L15-L16-L17-L18-L19-L20-L21-L22-L23>0,L12-MIN($J$3-M$122-M$99-M$76-M$53-M$30-L13-L14-L15-L16-L17-L18-L19-L20-L21-L22-L23,L12),L12)\"\n\"IF($J$3-N$122-N$99-N$76-N$53-N$30-M14-M15-M16-M17-M18-M19-M20-M21-M22-M23>0,M13-MIN($J$3-N$122-N$99-N$76-N$53-N$30-M14-M15-M16-M17-M18-M19-M20-M21-M22-M23,M13),M13)\"\n\"IF($J$3-O$122-O$99-O$76-O$53-O$30-N15-N16-N17-N18-N19-N20-N21-N22-N23>0,N14-MIN($J$3-O$122-O$99-O$76-O$53-O$30-N15-N16-N17-N18-N19-N20-N21-N22-N23,N14),N14)\"\n\"IF($J$3-P$122-P$99-P$76-P$53-P$30-O16-O17-O18-O19-O20-O21-O22-O23>0,O15-MIN($J$3-P$122-P$99-P$76-P$53-P$30-O16-O17-O18-O19-O20-O21-O22-O23,O15),O15)\"\n\"IF($J$3-Q$122-Q$99-Q$76-Q$53-Q$30-P17-P18-P19-P20-P21-P22-P23>0,P16-MIN($J$3-Q$122-Q$99-Q$76-Q$53-Q$30-P17-P18-P19-P20-P21-P22-P23,P16),P16)\"\n\"IF($J$3-R$122-R$99-R$76-R$53-R$30-Q18-Q19-Q20-Q21-Q22-Q23>0,Q17-MIN($J$3-R$122-R$99-R$76-R$53-R$30-Q18-Q19-Q20-Q21-Q22-Q23,Q17),Q17)\"\n\"SUM(C7:C17)\"\n\"IF($J$3-S$122-S$99-S$76-S$53-S$30-R19-R20-R21-R22-R23>0,R18-MIN($J$3-S$122-S$99-S$76-S$53-S$30-R19-R20-R21-R22-R23,R18),R18)\"\n\"IF($J$3-T$122-T$99-T$76-T$53-T$30-S20-S21-S22-S23>0,S19-MIN($J$3-T$122-T$99-T$76-T$53-T$30-S20-S21-S22-S23,S19),S19)\"\n\"SUM(K7:K24)\"\n\"SUM(L8:L24)\"\n\"SUM(M9:M24)\"\n\"SUM(N10:N24)\"\n\"SUM(O11:O24)\"\n\"SUM(P12:P24)\"\n\"SUM(Q13:Q24)\"\n\"SUM(R14:R24)\"\n\"SUM(S15:S24)\"\n\"SUM(T16:T24)\"\n\"C30-$C$26\"\n\"IF(AND(D$9/5>=0,D$9/5<=I30),C$9,IF(AND(D$10/5>=0,D$10/5<=I30),C$10,0))\"\n\"IF(L28*5<=IO.CONTROL!$C$10,K48-L48,VLOOKUP((IO.CONTROL!$C$10/5)+1,$I30:$T47,3+L28))\"\n\"IF(AND(D$9/5>I30,D$9/5<=I31),C$9,IF(AND(D$10/5>I30,D$10/5<=I31),C$10,0))\"\n\"IF($J$3-L$122-L$99-L$76-L$53-K31-K32-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46>0,K30-MIN($J$3-L$122-L$99-L$76-L$53-K31-K32-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46,K30),K30)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-K32-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46>0,K31-MIN($J$3-L$122-L$99-L$76-L$53-K32-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46,K31),K31)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46>0,K32-MIN($J$3-L$122-L$99-L$76-L$53-K33-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46,K32),K32)\"\n\"IF($J$3-L$122-L$99-L$76-L$53-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46>0,K33-MIN($J$3-L$122-L$99-L$76-L$53-K34-K35-K36-K37-K38-K39-K40-K41-K42-K43-K44-K45-K46,K33),K33)\"\n\"IF($J$3-M$122-M$99-M$76-M$53-L35-L36-L37-L38-L39-L40-L41-L42-L43-L44-L45-L46>0,L34-MIN($J$3-M$122-M$99-M$76-M$53-L35-L36-L37-L38-L39-L40-L41-L42-L43-L44-L45-L46,L34),L34)\"\n\"IF($J$3-N$122-N$99-N$76-N$53-M36-M37-M38-M39-M40-M41-M42-M43-M44-M45-M46>0,M35-MIN($J$3-N$122-N$99-N$76-N$53-M36-M37-M38-M39-M40-M41-M42-M43-M44-M45-M46,M35),M35)\"\n\"IF($J$3-O$122-O$99-O$76-O$53-N37-N38-N39-N40-N41-N42-N43-N44-N45-N46>0,N36-MIN($J$3-O$122-O$99-O$76-O$53-N37-N38-N39-N40-N41-N42-N43-N44-N45-N46,N36),N36)\"\n\"IF($J$3-P$122-P$99-P$76-P$53-O38-O39-O40-O41-O42-O43-O44-O45-O46>0,O37-MIN($J$3-P$122-P$99-P$76-P$53-O38-O39-O40-O41-O42-O43-O44-O45-O46,O37),O37)\"\n\"IF($J$3-Q$122-Q$99-Q$76-Q$53-P39-P40-P41-P42-P43-P44-P45-P46>0,P38-MIN($J$3-Q$122-Q$99-Q$76-Q$53-P39-P40-P41-P42-P43-P44-P45-P46,P38),P38)\"\n\"IF($J$3-R$122-R$99-R$76-R$53-Q40-Q41-Q42-Q43-Q44-Q45-Q46>0,Q39-MIN($J$3-R$122-R$99-R$76-R$53-Q40-Q41-Q42-Q43-Q44-Q45-Q46,Q39),Q39)\"\n\"IF($J$3-S$122-S$99-S$76-S$53-R41-R42-R43-R44-R45-R46>0,R40-MIN($J$3-S$122-S$99-S$76-S$53-R41-R42-R43-R44-R45-R46,R40),R40)\"\n\"IF($J$3-T$122-T$99-T$76-T$53-S42-S43-S44-S45-S46>0,S41-MIN($J$3-T$122-T$99-T$76-T$53-S42-S43-S44-S45-S46,S41),S41)\"\n\"C45-C$26\"\n\"VLOOKUP(IO.CONTROL!C10,STD.TBLE.THINNED!B11:O60,6)\"\n\"IF(AND(D$11/5>I53,D$11/5<=I54),C$11,IF(AND(D$12/5>I53,D$12/5<=I54),C$12,0))\"\n\"IF($J$3-L$122-L$99-L$76-K55-K56-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69>0,K54-MIN($J$3-L$122-L$99-L$76-K55-K56-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69,K54),K54)\"\n\"IF($J$3-L$122-L$99-L$76-K56-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69>0,K55-MIN($J$3-L$122-L$99-L$76-K56-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69,K55),K55)\"\n\"IF($J$3-L$122-L$99-L$76-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69>0,K56-MIN($J$3-L$122-L$99-L$76-K57-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69,K56),K56)\"\n\"IF($J$3-L$122-L$76-L$99-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69>0,K57-MIN($J$3-L$122-L$99-L$76-K58-K59-K60-K61-K62-K63-K64-K65-K66-K67-K68-K69,K57),K57)\"\n\"IF($J$3-M$122-M$99-M$76-L59-L60-L61-L62-L63-L64-L65-L66-L67-L68-L69>0,L58-MIN($J$3-M$122-M$99-M$76-L59-L60-L61-L62-L63-L64-L65-L66-L67-L68-L69,L58),L58)\"\n\"IF($J$3-N$122-N$99-N$76-M60-M61-M62-M63-M64-M65-M66-M67-M68-M69>0,M59-MIN($J$3-N$122-N$99-N$76-M60-M61-M62-M63-M64-M65-M66-M67-M68-M69,M59),M59)\"\n\"IF($J$3-O$122-O$99-O$76-N61-N62-N63-N64-N65-N66-N67-N68-N69>0,N60-MIN($J$3-O$122-O$99-O$76-N61-N62-N63-N64-N65-N66-N67-N68-N69,N60),N60)\"\n\"IF($J$3-P$122-P$99-P$76-O62-O63-O64-O65-O66-O67-O68-O69>0,O61-MIN($J$3-P$122-P$99-P$76-O62-O63-O64-O65-O66-O67-O68-O69,O61),O61)\"\n\"IF($J$3-Q$122-Q$99-Q$76-P63-P64-P65-P66-P67-P68-P69>0,P62-MIN($J$3-Q$122-Q$99-Q$76-P63-P64-P65-P66-P67-P68-P69,P62),P62)\"\n\"IF($J$3-R$122-R$99-R$76-Q64-Q65-Q66-Q67-Q68-Q69>0,Q63-MIN($J$3-R$122-R$99-R$76-Q64-Q65-Q66-Q67-Q68-Q69,Q63),Q63)\"\n\"IF($J$3-S$122-S$99-S$76-R65-R66-R67-R68-R69>0,R64-MIN($J$3-S$122-S$99-S$76-R65-R66-R67-R68-R69,R64),R64)\"\n\"IF($J$3-T$122-T$99-T$76-S66-S67-S68-S69>0,S65-MIN($J$3-T$122-T$99-T$76-S66-S67-S68-S69,S65),S65)\"\n\"SUM(T63:T70)\"\n\"IF(AND(D$13/5>I78,D$13/5<=I79),C$13,IF(AND(D$14/5>I78,D$14/5<=I79),C$14,0))\"\n\"IF($J$3-L$122-L$99-K80-K81-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92>0,K79-MIN($J$3-L$122-L$99-K80-K81-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92,K79),K79)\"\n\"IF($J$3-L$122-L$99-K81-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92>0,K80-MIN($J$3-L$122-L$99-K81-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92,K80),K80)\"\n\"IF($J$3-L$122-L$99-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92>0,K81-MIN($J$3-L$122-L$99-K82-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92,K81),K81)\"\n\"IF($J$3-L$122-L$99-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92>0,K82-MIN($J$3-L$122-L$99-K83-K84-K85-K86-K87-K88-K89-K90-K91-K92,K82),K82)\"\n\"IF($J$3-L$122-L$99-K84-K85-K86-K87-K88-K89-K90-K91-K92>0,K83-MIN($J$3-L$122-L$99-K84-K85-K86-K87-K88-K89-K90-K91-K92,K83),K83)\"\n\"IF($J$3-L$122-L$99-K85-K86-K87-K88-K89-K90-K91-K92>0,K84-MIN($J$3-L$122-L$99-K85-K86-K87-K88-K89-K90-K91-K92,K84),K84)\"\n\"IF($J$3-L$122-L$99-K86-K87-K88-K89-K90-K91-K92>0,K85-MIN($J$3-L$122-L$99-K86-K87-K88-K89-K90-K91-K92,K85),K85)\"\n\"IF($J$3-L$122-L$99-K87-K88-K89-K90-K91-K92>0,K86-MIN($J$3-L$122-L$99-K87-K88-K89-K90-K91-K92,K86),K86)\"\n\"IF($J$3-L$122-L$99-K88-K89-K90-K91-K92>0,K87-MIN($J$3-L$122-L$99-K88-K89-K90-K91-K92,K87),K87)\"\n\"IF($J$3-L$122-L$99-K89-K90-K91-K92>0,K88-MIN($J$3-L$122-L$99-K89-K90-K91-K92,K88),K88)\"\n\"IF($J$3-L$122-L$99-K90-K91-K92>0,K89-MIN($J$3-L$122-L$99-K90-K91-K92,K89),K89)\"\n\"IF($J$3-L$122-L$99-K91-K92>0,K90-MIN($J$3-L$122-L$99-K91-K92,K90),K90)\"\n\"IF($J$3-L$122-L$99-K92>0,K91-MIN($J$3-L$122-L$99-K92,K91),K91)\"\n\"IF($J$3-L$122-L$99>0,K92-MIN($J$3-L$122-L$99,K92),K92)\"\n\"SUM(S87:S93)\"\n\"SUM(T88:T93)\"\n\"IF(AND(D$15/5>I105,D$15/5<=I106),C$15,IF(AND(D$16/5>I105,D$16/5<=I106),C$16,0))\"\n\"IF($J$3-L$122-K107-K108-K109-K110-K111-K112-K113-K114-K115>0,K106-MIN($J$3-L$122-K107-K108-K109-K110-K111-K112-K113-K114-K115,K106),K106)\"\n\"IF($J$3-L$122-K108-K109-K110-K111-K112-K113-K114-K115>0,K107-MIN($J$3-L$122-K108-K109-K110-K111-K112-K113-K114-K115,K107),K107)\"\n\"IF($J$3-L$122-K109-K110-K111-K112-K113-K114-K115>0,K108-MIN($J$3-L$122-K109-K110-K111-K112-K113-K114-K115,K108),K108)\"\n\"IF($J$3-L$122-K110-K111-K112-K113-K114-K115>0,K109-MIN($J$3-L$122-K110-K111-K112-K113-K114-K115,K109),K109)\"\n\"IF($J$3-L$122-K111-K112-K113-K114-K115>0,K110-MIN($J$3-L$122-K111-K112-K113-K114-K115,K110),K110)\"\n\"IF($J$3-L$122-K112-K113-K114-K115>0,K111-MIN($J$3-L$122-K112-K113-K114-K115,K111),K111)\"\n\"IF($J$3-L$122-K113-K114-K115>0,K112-MIN($J$3-L$122-K113-K114-K115,K112),K112)\"\n\"IF($J$3-L$122-K114-K115>0,K113-MIN($J$3-L$122-K114-K115,K113),K113)\"\n\"IF($J$3-L$122-K115>0,K114-MIN($J$3-L$122-K115,K114),K114)\"\n\"IF($J$3-L$122>0,K115-MIN($J$3-L$122,K115),K115)\"\n\"SUM(Q112:Q116)\"\n\"SUM(R113:R116)\"\n\"SUM(S114:S116)\"\n\"SUM(T115:T116)\"\n\"IF(AND(D$17/5>I126,D$17/5<=I127),C$17,IF(AND(D$18/5>I126,D$18/5<=I127),C$18,0))\"\n\"MAX(K127-$K127/4,0)\"\n\"MAX(L128-$K127/4,0)\"\n\"MAX(M129-$K127/4,0)\"\n\"MAX(N130-$K127/4,0)\"\n\"MAX(O131-$K127/4,0)\"\n\"MAX(P132-$K127/4,0)\"\n\"MAX(Q133-$K127/4,0)\"\n\"MAX(R134-$K127/4,0)\"\n\"MAX(S135-$K127/4,0)\"\n\"K122+K99+K76+K53+K30+K7\"\n\"IF(IO.CONTROL!$C$6/5=1,$K$148*$C$26,IF(IO.CONTROL!$C$6/5=2,$K$149*$C$26,IF(IO.CONTROL!$C$6/5=3,$K$150*$C$26,0)))\"\n\"IF(IO.CONTROL!$C$6/5=1,L148*$C$26,IF(IO.CONTROL!$C$6/5=2,K148*$C$26,IF(IO.CONTROL!$C$6/5=3,K149*$C$26,0)))\"\n\"IF(IO.CONTROL!$C$6/5=1,M148*$C$26,IF(IO.CONTROL!$C$6/5=2,L148*$C$26,IF(IO.CONTROL!$C$6/5=3,K148*$C$26,0)))\"\n\"IF(OR(IO.CONTROL!$C$7+5>IO.CONTROL!$C$10,IO.CONTROL!$C$7=0),0,(L$102+L$79+L$56+L$33+L$10)*$C$49)\"\n\"IF(OR(IO.CONTROL!$C$8+5>IO.CONTROL!$C$10,IO.CONTROL!$C$8=0),0,(L103+L80+L57+L34+L11)*$C$50)\"\n\"IF(OR(IO.CONTROL!$C$9+5>IO.CONTROL!$C$10,IO.CONTROL!$C$9=0),0,(L$105+L$82+L$59+L$36+L$13)*$C$51)\"\n\"IF(OR(IO.CONTROL!$C$9+5>IO.CONTROL!$C$10,IO.CONTROL!$C$9=0),0,(M105+M82+M59+M36+M13)*$C$51)\"\n\"L$122*$D$40+L$99*$D$38+L$76*$D$36+L$53*$D$34+L$30*$D$32+L$7*$D$30\"\n\"IF(L$140=0,M$122*$D$45,M$122*$D$40)+IF(L$117=0,M$99*$D$46,M$99*$D$38)+IF(L$94=0,M$76*$D$46,M$76*$D$36)+IF(L$71=0,M$53*$D$46,M$53*$D$34)+IF(L$48=0,M$30*$D$46,M$30*$D$32)+IF(L$25=0,M$7*$D$46,M$7*$D$30)\"\n\"IF(M140=0,N122*$D$45,N122*$D$40)+IF(M117=0,N99*$D$46,N99*$D$38)+IF(M94=0,N76*$D$46,N76*$D$36)+IF(M71=0,N53*$D$46,N53*$D$34)+IF(M48=0,N30*$D$46,N30*$D$32)+IF(M25=0,N7*$D$46,N7*$D$30)\"\n\"IF(IO.CONTROL!$C$6/5=1,K$148,IF(IO.CONTROL!$C$6/5=2,K$149,IF(IO.CONTROL!$C$6/5=3,K$150,0)))\"\n\"IF(OR(IO.CONTROL!$C7+5>IO.CONTROL!$C$10,IO.CONTROL!$C7=0),0,(L102+L79+L56+L33+L10))\"\n\"IF(OR(IO.CONTROL!$C$9+5>IO.CONTROL!$C$10,IO.CONTROL!$C$9=0),0,(L$105+L$82+L$59+L$36+L$13))\"\n\"L$122+L$99+L$76+L$53+L$30+L$7\"\n\"IF(L$140=0,M$122,M$122)+IF(L$117=0,M$99,M$99)+IF(L$94=0,M$76,M$76)+IF(L$71=0,M$53,M$53)+IF(L$48=0,M$30,M$30)+IF(L$25=0,M$7,M$7)\"\n\"HLOOKUP(1+TRUNC($K209/5),$L$185:$T$191,L$208+2)/5\"\n\"HLOOKUP(1+TRUNC($K209/5),$L$172:$T$178,Q$208+2)/5\"\n\"IO.CONTROL!C4\"\n\"IF(B$3=1,24.8,IF(B$3=2,21.6,IF(B$3=3,18.4,IF(B$3=4,15.2,IF(B$3=5,12,0)))))\"\n\"IF(B$3=1,0.77667,IF(B$3=2,0.90332,IF(B$3=3,1.10192,IF(B$3=4,1.40869,IF(B$3=5,1.89171,0)))))\"\n\"IF(B$3=1,0.16197,IF(B$3=2,0.17,IF(B$3=3,0.17803,IF(B$3=4,0.18606,IF(B$3=5,0.194,0)))))\"\n\"EXP(6.375-0.0356*B11+0.0381*$B$5)\"\n\"200*SQRT(F11/(3.1416*C11))\"\n\"(B11/(B$6+B$7*B11))^2\"\n\"EXP(2.013*LN(B11)-0.0464*B11+0.0611*$B$5-3.445)\"\n\"(0.1315*B11+0.335*$B$5-3.4)*F11\"\n\"C11-C12\"\n\"G11/C11\"\n\"H12*I12\"\n\"J12/2\"\n\"K12+L11\"\n\"IO.CONTROL!C4\"\n\"IF(B$3=1,24.8,IF(B$3=2,21.6,IF(B$3=3,18.4,IF(B$3=4,15.2,IF(B$3=5,12,0)))))\"\n\"IF(B$3=1,0.77667,IF(B$3=2,0.90332,IF(B$3=3,1.10192,IF(B$3=4,1.40869,IF(B$3=5,1.89171,0)))))\"\n\"IF(B$3=1,0.16197,IF(B$3=2,0.17,IF(B$3=3,0.17803,IF(B$3=4,0.18606,IF(B$3=5,0.194,0)))))\"\n\"EXP(7.1033-0.0333*B11+0.0281*$B$5)\"\n\"200*SQRT(F11/(3.1416*C11))\"\n\"(B11/(B$6+B$7*B11))^2\"\n\"EXP(1.674*LN(B11)-0.03514*B11+0.0611*$B$5-2.438)\"\n\"(0.1315*B11+0.335*$B$5-3.4)*F11\"\n\"C24\"\n\"0.04\"\n\"C15-C16\"\n\"C25\"\n\"0.25*C17\"\n\"G15*G16*G17\"\n\"C19*C18\"\n\"C20+C27+C34+C41+G18\"\n\"C24\"\n\"0.085\"\n\"4\"\n\"C30*C31*C32/C33\"\n\"C24\"\n\"0.15\"\n\"C25\"\n\"0.3\"\n\"C37*C38*C39*C40\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B3:H3)\"\n\"SUM(B3:B12)\"\n\"SUM(I13:I14)\"\n\"SUM(B19:B29)\"\n\"I15\"\n\"C13\"\n\"H30\"\n\"D13\"\n\"E13\"\n\"F30\"\n\"G30\"\n\"F39\"\n\"I14+I31\"\n\"SUM(B13:B44)\"\n\"SUM(B25:B27)\"\n\"SUM(B25:B27)\"\n\"SUM(B25:B29)\"\n\"SUM(B25:B29)\"\n\"SUM(B25:B28)\"\n\"SUM(B6-D6)+F6\"\n\"I6/C6\"\n\"SUM(B6:B10)\"\n\"+SUM(F5:F14)\"\n\"+SUM(F19:F56)\"\n\"+SUM(F61:F77)\"\n\"SUM(F82:F108)\"\n\"SUM(F113:F120)\"\n\"SUM(F125:F131)\"\n\"+F133+F122+F110+F79+F58+F16\"\n\"+SUM(F5:F10)\"\n\"+SUM(F16:F53)\"\n\"+SUM(F57:F67)\"\n\"+F12+F55+F69+F78\"\n\"'BALANCE SHEET'!J15\"\n\"'BALANCE SHEET'!J37\"\n\"'BALANCE SHEET'!J65\"\n\"'BALANCE SHEET'!J73\"\n\"+'STMT OF CASH REC AND DISB'!F17\"\n\"+'STMT OF CASH REC AND DISB'!H17\"\n\"+'STMT OF CASH REC AND DISB'!F47\"\n\"+'STMT OF CASH REC AND DISB'!H47\"\n\"F20-F21\"\n\"F22+F23\"\n\"'STMT OF OPERATIONS'!A53\"\n\"'BALANCE SHEET'!J9\"\n\"'BALANCE SHEET'!J67\"\n\"'SCHEDULES PG1'!L8\"\n\"A6-C6\"\n\"C7-A7\"\n\"A6-A7\"\n\"+'SCHEDULES PG1'!L31\"\n\"SUM(A10:A14)\"\n\"SUM(A17:A40)\"\n\"A15-A41\"\n\"SUM(A43:A49)\"\n\"A42+A50\"\n\"+A51-C51\"\n\"'SCHEDULES PG1'!H12\"\n\"'SCHEDULES PG1'!F32\"\n\"SUM(J7:J14)\"\n\"'SCHEDULES PG2'!G9\"\n\"'SCHEDULES PG2'!G18\"\n\"'SCHEDULES PG2'!G24\"\n\"'SCHEDULES PG2'!G29\"\n\"'SCHEDULES PG2'!G35\"\n\"'SCHEDULES PG2'!G41\"\n\"SUM(J17:J27)\"\n\"SUM(J30:J35)\"\n\"J15+J28+J36\"\n\"'SCHEDULES PG1'!J10\"\n\"SUM(J51:J64)\"\n\"J65+J66\"\n\"'SCHEDULE PG3'!I29\"\n\"'SCHEDULE PG3'!I30+'SCHEDULE PG3'!I31\"\n\"'SCHEDULE PG3'!I32\"\n\"SUM(J69:J71)\"\n\"J67+J72\"\n\"SUM(J75:J81)\"\n\"J73+J82\"\n\"SUM(J7:J9)\"\n\"SUM(H6:H9)\"\n\"H10-H11\"\n\"SUM(L16:L24)-SUM(L27:L29)\"\n\"F19+F22+F25+F26+F27+F29\"\n\"SUM(E3:E8)\"\n\"SUM(E14:E17)\"\n\"SUM(E26:E28)\"\n\"C6+E6+G6+I6\"\n\"SUM(C6:C11)\"\n\"SUM(C14:C23)\"\n\"C12+C24\"\n\"C45+E45+G45+I45\"\n\"SUM(F6:F16)\"\n\"SUM(F19:F46)\"\n\"F17-F47\"\n\"F49+F48\"\n\"G5+G6+G7-SUM(G8:G33)\"\n\"G36-G37-G38-G39\"\n\"G34+G40\"\n\"-G43+G44-G45\"\n\"G48+G49+G50-G51-G52\"\n\"G41+G46+G53\"\n\"G54+G55\"\n\"G100 & H100\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l61.xls\"\",\"\"3L61\"\")\"\n\"INDIRECT(\"\"T4\"\")+INDIRECT(\"\"AB4\"\")+INDIRECT(\"\"AJ4\"\")+INDIRECT(\"\"AR4\"\")+INDIRECT(\"\"AZ4\"\")+INDIRECT(\"\"BH4\"\")\"\n\"INDIRECT(\"\"U4\"\")+INDIRECT(\"\"AC4\"\")+INDIRECT(\"\"AK4\"\")+INDIRECT(\"\"AS4\"\")+INDIRECT(\"\"BA4\"\")+INDIRECT(\"\"BI4\"\")\"\n\"INDIRECT(\"\"V4\"\")+INDIRECT(\"\"AD4\"\")+INDIRECT(\"\"AL4\"\")+INDIRECT(\"\"AT4\"\")+INDIRECT(\"\"BB4\"\")+INDIRECT(\"\"BJ4\"\")\"\n\"INDIRECT(\"\"W4\"\")+INDIRECT(\"\"AE4\"\")+INDIRECT(\"\"AM4\"\")+INDIRECT(\"\"AU4\"\")+INDIRECT(\"\"BC4\"\")+INDIRECT(\"\"BK4\"\")\"\n\"INDIRECT(\"\"X4\"\")+INDIRECT(\"\"AF4\"\")+INDIRECT(\"\"AN4\"\")+INDIRECT(\"\"AV4\"\")+INDIRECT(\"\"BD4\"\")+INDIRECT(\"\"BL4\"\")\"\n\"INDIRECT(\"\"Y4\"\")+INDIRECT(\"\"AG4\"\")+INDIRECT(\"\"AO4\"\")+INDIRECT(\"\"AW4\"\")+INDIRECT(\"\"BE4\"\")+INDIRECT(\"\"BM4\"\")\"\n\"INDIRECT(\"\"Z4\"\")+INDIRECT(\"\"AH4\"\")+INDIRECT(\"\"AP4\"\")+INDIRECT(\"\"AX4\"\")+INDIRECT(\"\"BF4\"\")+INDIRECT(\"\"BN4\"\")\"\n\"INDIRECT(\"\"AA4\"\")+INDIRECT(\"\"AI4\"\")+INDIRECT(\"\"AQ4\"\")+INDIRECT(\"\"AY4\"\")+INDIRECT(\"\"BG4\"\")+INDIRECT(\"\"BO4\"\")\"\n\"INDIRECT(\"\"T4\"\")+INDIRECT(\"\"U4\"\")+INDIRECT(\"\"V4\"\")+INDIRECT(\"\"W4\"\")+INDIRECT(\"\"X4\"\")+INDIRECT(\"\"Y4\"\")+INDIRECT(\"\"Z4\"\")+INDIRECT(\"\"AA4\"\")\"\n\"INDIRECT(\"\"AB4\"\")+INDIRECT(\"\"AC4\"\")+INDIRECT(\"\"AD4\"\")+INDIRECT(\"\"AE4\"\")+INDIRECT(\"\"AF4\"\")+INDIRECT(\"\"AG4\"\")+INDIRECT(\"\"AH4\"\")+INDIRECT(\"\"AI4\"\")\"\n\"INDIRECT(\"\"AJ4\"\")+INDIRECT(\"\"AK4\"\")+INDIRECT(\"\"AL4\"\")+INDIRECT(\"\"AM4\"\")+INDIRECT(\"\"AN4\"\")+INDIRECT(\"\"AO4\"\")+INDIRECT(\"\"AP4\"\")+INDIRECT(\"\"AQ4\"\")\"\n\"INDIRECT(\"\"AR4\"\")+INDIRECT(\"\"AS4\"\")+INDIRECT(\"\"AT4\"\")+INDIRECT(\"\"AU4\"\")+INDIRECT(\"\"AV4\"\")+INDIRECT(\"\"AW4\"\")+INDIRECT(\"\"AX4\"\")+INDIRECT(\"\"AY4\"\")\"\n\"INDIRECT(\"\"AZ4\"\")+INDIRECT(\"\"BA4\"\")+INDIRECT(\"\"BB4\"\")+INDIRECT(\"\"BC4\"\")+INDIRECT(\"\"BD4\"\")+INDIRECT(\"\"BE4\"\")+INDIRECT(\"\"BF4\"\")+INDIRECT(\"\"BG4\"\")\"\n\"INDIRECT(\"\"BH4\"\")+INDIRECT(\"\"BI4\"\")+INDIRECT(\"\"BJ4\"\")+INDIRECT(\"\"BK4\"\")+INDIRECT(\"\"BL4\"\")+INDIRECT(\"\"BM4\"\")+INDIRECT(\"\"BN4\"\")+INDIRECT(\"\"BO4\"\")\"\n\"INDIRECT(\"\"T4\"\")+2*INDIRECT(\"\"AB4\"\")+3*INDIRECT(\"\"AJ4\"\")+4*INDIRECT(\"\"AR4\"\")+5*INDIRECT(\"\"AZ4\"\")+6*INDIRECT(\"\"BH4\"\")\"\n\"INDIRECT(\"\"U4\"\")+2*INDIRECT(\"\"AC4\"\")+3*INDIRECT(\"\"AK4\"\")+4*INDIRECT(\"\"AS4\"\")+5*INDIRECT(\"\"BA4\"\")+6*INDIRECT(\"\"BI4\"\")\"\n\"INDIRECT(\"\"V4\"\")+2*INDIRECT(\"\"AD4\"\")+3*INDIRECT(\"\"AL4\"\")+4*INDIRECT(\"\"AT4\"\")+5*INDIRECT(\"\"BB4\"\")+6*INDIRECT(\"\"BJ4\"\")\"\n\"INDIRECT(\"\"W4\"\")+2*INDIRECT(\"\"AE4\"\")+3*INDIRECT(\"\"AM4\"\")+4*INDIRECT(\"\"AU4\"\")+5*INDIRECT(\"\"BC4\"\")+6*INDIRECT(\"\"BK4\"\")\"\n\"INDIRECT(\"\"X4\"\")+2*INDIRECT(\"\"AF4\"\")+3*INDIRECT(\"\"AN4\"\")+4*INDIRECT(\"\"AV4\"\")+5*INDIRECT(\"\"BD4\"\")+6*INDIRECT(\"\"BL4\"\")\"\n\"INDIRECT(\"\"Y4\"\")+2*INDIRECT(\"\"AG4\"\")+3*INDIRECT(\"\"AO4\"\")+4*INDIRECT(\"\"AW4\"\")+5*INDIRECT(\"\"BE4\"\")+6*INDIRECT(\"\"BM4\"\")\"\n\"INDIRECT(\"\"Z4\"\")+2*INDIRECT(\"\"AH4\"\")+3*INDIRECT(\"\"AP4\"\")+4*INDIRECT(\"\"AX4\"\")+5*INDIRECT(\"\"BF4\"\")+6*INDIRECT(\"\"BN4\"\")\"\n\"INDIRECT(\"\"AA4\"\")+2*INDIRECT(\"\"AI4\"\")+3*INDIRECT(\"\"AQ4\"\")+4*INDIRECT(\"\"AY4\"\")+5*INDIRECT(\"\"BG4\"\")+6*INDIRECT(\"\"BO4\"\")\"\n\"INDIRECT(\"\"T4\"\")+2*INDIRECT(\"\"U4\"\")+3*INDIRECT(\"\"V4\"\")+4*INDIRECT(\"\"W4\"\")+5*INDIRECT(\"\"X4\"\")+6*INDIRECT(\"\"Y4\"\")+7*INDIRECT(\"\"Z4\"\")+8*INDIRECT(\"\"AA4\"\")\"\n\"INDIRECT(\"\"AB4\"\")+2*INDIRECT(\"\"AC4\"\")+3*INDIRECT(\"\"AD4\"\")+4*INDIRECT(\"\"AE4\"\")+5*INDIRECT(\"\"AF4\"\")+6*INDIRECT(\"\"AG4\"\")+7*INDIRECT(\"\"AH4\"\")+8*INDIRECT(\"\"AI4\"\")\"\n\"INDIRECT(\"\"AJ4\"\")+2*INDIRECT(\"\"AK4\"\")+3*INDIRECT(\"\"AL4\"\")+4*INDIRECT(\"\"AM4\"\")+5*INDIRECT(\"\"AN4\"\")+6*INDIRECT(\"\"AO4\"\")+7*INDIRECT(\"\"AP4\"\")+8*INDIRECT(\"\"AQ4\"\")\"\n\"INDIRECT(\"\"AR4\"\")+2*INDIRECT(\"\"AS4\"\")+3*INDIRECT(\"\"AT4\"\")+4*INDIRECT(\"\"AU4\"\")+5*INDIRECT(\"\"AV4\"\")+6*INDIRECT(\"\"AW4\"\")+7*INDIRECT(\"\"AX4\"\")+8*INDIRECT(\"\"AY4\"\")\"\n\"INDIRECT(\"\"AZ4\"\")+2*INDIRECT(\"\"BA4\"\")+3*INDIRECT(\"\"BB4\"\")+4*INDIRECT(\"\"BC4\"\")+5*INDIRECT(\"\"BD4\"\")+6*INDIRECT(\"\"BE4\"\")+7*INDIRECT(\"\"BF4\"\")+8*INDIRECT(\"\"BG4\"\")\"\n\"INDIRECT(\"\"BH4\"\")+2*INDIRECT(\"\"BI4\"\")+3*INDIRECT(\"\"BJ4\"\")+4*INDIRECT(\"\"BK4\"\")+5*INDIRECT(\"\"BL4\"\")+6*INDIRECT(\"\"BM4\"\")+7*INDIRECT(\"\"BN4\"\")+8*INDIRECT(\"\"BO4\"\")\"\n\"SUM(F4:F4)\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l62.xls\"\",\"\"3L62\"\")\"\n\"INDIRECT(\"\"T7\"\")+INDIRECT(\"\"AB7\"\")+INDIRECT(\"\"AJ7\"\")+INDIRECT(\"\"AR7\"\")+INDIRECT(\"\"AZ7\"\")+INDIRECT(\"\"BH7\"\")\"\n\"INDIRECT(\"\"U7\"\")+INDIRECT(\"\"AC7\"\")+INDIRECT(\"\"AK7\"\")+INDIRECT(\"\"AS7\"\")+INDIRECT(\"\"BA7\"\")+INDIRECT(\"\"BI7\"\")\"\n\"INDIRECT(\"\"V7\"\")+INDIRECT(\"\"AD7\"\")+INDIRECT(\"\"AL7\"\")+INDIRECT(\"\"AT7\"\")+INDIRECT(\"\"BB7\"\")+INDIRECT(\"\"BJ7\"\")\"\n\"INDIRECT(\"\"W7\"\")+INDIRECT(\"\"AE7\"\")+INDIRECT(\"\"AM7\"\")+INDIRECT(\"\"AU7\"\")+INDIRECT(\"\"BC7\"\")+INDIRECT(\"\"BK7\"\")\"\n\"INDIRECT(\"\"X7\"\")+INDIRECT(\"\"AF7\"\")+INDIRECT(\"\"AN7\"\")+INDIRECT(\"\"AV7\"\")+INDIRECT(\"\"BD7\"\")+INDIRECT(\"\"BL7\"\")\"\n\"INDIRECT(\"\"Y7\"\")+INDIRECT(\"\"AG7\"\")+INDIRECT(\"\"AO7\"\")+INDIRECT(\"\"AW7\"\")+INDIRECT(\"\"BE7\"\")+INDIRECT(\"\"BM7\"\")\"\n\"INDIRECT(\"\"Z7\"\")+INDIRECT(\"\"AH7\"\")+INDIRECT(\"\"AP7\"\")+INDIRECT(\"\"AX7\"\")+INDIRECT(\"\"BF7\"\")+INDIRECT(\"\"BN7\"\")\"\n\"INDIRECT(\"\"AA7\"\")+INDIRECT(\"\"AI7\"\")+INDIRECT(\"\"AQ7\"\")+INDIRECT(\"\"AY7\"\")+INDIRECT(\"\"BG7\"\")+INDIRECT(\"\"BO7\"\")\"\n\"INDIRECT(\"\"T7\"\")+INDIRECT(\"\"U7\"\")+INDIRECT(\"\"V7\"\")+INDIRECT(\"\"W7\"\")+INDIRECT(\"\"X7\"\")+INDIRECT(\"\"Y7\"\")+INDIRECT(\"\"Z7\"\")+INDIRECT(\"\"AA7\"\")\"\n\"INDIRECT(\"\"AB7\"\")+INDIRECT(\"\"AC7\"\")+INDIRECT(\"\"AD7\"\")+INDIRECT(\"\"AE7\"\")+INDIRECT(\"\"AF7\"\")+INDIRECT(\"\"AG7\"\")+INDIRECT(\"\"AH7\"\")+INDIRECT(\"\"AI7\"\")\"\n\"INDIRECT(\"\"AJ7\"\")+INDIRECT(\"\"AK7\"\")+INDIRECT(\"\"AL7\"\")+INDIRECT(\"\"AM7\"\")+INDIRECT(\"\"AN7\"\")+INDIRECT(\"\"AO7\"\")+INDIRECT(\"\"AP7\"\")+INDIRECT(\"\"AQ7\"\")\"\n\"INDIRECT(\"\"AR7\"\")+INDIRECT(\"\"AS7\"\")+INDIRECT(\"\"AT7\"\")+INDIRECT(\"\"AU7\"\")+INDIRECT(\"\"AV7\"\")+INDIRECT(\"\"AW7\"\")+INDIRECT(\"\"AX7\"\")+INDIRECT(\"\"AY7\"\")\"\n\"INDIRECT(\"\"AZ7\"\")+INDIRECT(\"\"BA7\"\")+INDIRECT(\"\"BB7\"\")+INDIRECT(\"\"BC7\"\")+INDIRECT(\"\"BD7\"\")+INDIRECT(\"\"BE7\"\")+INDIRECT(\"\"BF7\"\")+INDIRECT(\"\"BG7\"\")\"\n\"INDIRECT(\"\"BH7\"\")+INDIRECT(\"\"BI7\"\")+INDIRECT(\"\"BJ7\"\")+INDIRECT(\"\"BK7\"\")+INDIRECT(\"\"BL7\"\")+INDIRECT(\"\"BM7\"\")+INDIRECT(\"\"BN7\"\")+INDIRECT(\"\"BO7\"\")\"\n\"INDIRECT(\"\"T7\"\")+2*INDIRECT(\"\"AB7\"\")+3*INDIRECT(\"\"AJ7\"\")+4*INDIRECT(\"\"AR7\"\")+5*INDIRECT(\"\"AZ7\"\")+6*INDIRECT(\"\"BH7\"\")\"\n\"INDIRECT(\"\"U7\"\")+2*INDIRECT(\"\"AC7\"\")+3*INDIRECT(\"\"AK7\"\")+4*INDIRECT(\"\"AS7\"\")+5*INDIRECT(\"\"BA7\"\")+6*INDIRECT(\"\"BI7\"\")\"\n\"INDIRECT(\"\"V7\"\")+2*INDIRECT(\"\"AD7\"\")+3*INDIRECT(\"\"AL7\"\")+4*INDIRECT(\"\"AT7\"\")+5*INDIRECT(\"\"BB7\"\")+6*INDIRECT(\"\"BJ7\"\")\"\n\"INDIRECT(\"\"W7\"\")+2*INDIRECT(\"\"AE7\"\")+3*INDIRECT(\"\"AM7\"\")+4*INDIRECT(\"\"AU7\"\")+5*INDIRECT(\"\"BC7\"\")+6*INDIRECT(\"\"BK7\"\")\"\n\"INDIRECT(\"\"X7\"\")+2*INDIRECT(\"\"AF7\"\")+3*INDIRECT(\"\"AN7\"\")+4*INDIRECT(\"\"AV7\"\")+5*INDIRECT(\"\"BD7\"\")+6*INDIRECT(\"\"BL7\"\")\"\n\"INDIRECT(\"\"Y7\"\")+2*INDIRECT(\"\"AG7\"\")+3*INDIRECT(\"\"AO7\"\")+4*INDIRECT(\"\"AW7\"\")+5*INDIRECT(\"\"BE7\"\")+6*INDIRECT(\"\"BM7\"\")\"\n\"INDIRECT(\"\"Z7\"\")+2*INDIRECT(\"\"AH7\"\")+3*INDIRECT(\"\"AP7\"\")+4*INDIRECT(\"\"AX7\"\")+5*INDIRECT(\"\"BF7\"\")+6*INDIRECT(\"\"BN7\"\")\"\n\"INDIRECT(\"\"AA7\"\")+2*INDIRECT(\"\"AI7\"\")+3*INDIRECT(\"\"AQ7\"\")+4*INDIRECT(\"\"AY7\"\")+5*INDIRECT(\"\"BG7\"\")+6*INDIRECT(\"\"BO7\"\")\"\n\"INDIRECT(\"\"T7\"\")+2*INDIRECT(\"\"U7\"\")+3*INDIRECT(\"\"V7\"\")+4*INDIRECT(\"\"W7\"\")+5*INDIRECT(\"\"X7\"\")+6*INDIRECT(\"\"Y7\"\")+7*INDIRECT(\"\"Z7\"\")+8*INDIRECT(\"\"AA7\"\")\"\n\"INDIRECT(\"\"AB7\"\")+2*INDIRECT(\"\"AC7\"\")+3*INDIRECT(\"\"AD7\"\")+4*INDIRECT(\"\"AE7\"\")+5*INDIRECT(\"\"AF7\"\")+6*INDIRECT(\"\"AG7\"\")+7*INDIRECT(\"\"AH7\"\")+8*INDIRECT(\"\"AI7\"\")\"\n\"INDIRECT(\"\"AJ7\"\")+2*INDIRECT(\"\"AK7\"\")+3*INDIRECT(\"\"AL7\"\")+4*INDIRECT(\"\"AM7\"\")+5*INDIRECT(\"\"AN7\"\")+6*INDIRECT(\"\"AO7\"\")+7*INDIRECT(\"\"AP7\"\")+8*INDIRECT(\"\"AQ7\"\")\"\n\"INDIRECT(\"\"AR7\"\")+2*INDIRECT(\"\"AS7\"\")+3*INDIRECT(\"\"AT7\"\")+4*INDIRECT(\"\"AU7\"\")+5*INDIRECT(\"\"AV7\"\")+6*INDIRECT(\"\"AW7\"\")+7*INDIRECT(\"\"AX7\"\")+8*INDIRECT(\"\"AY7\"\")\"\n\"INDIRECT(\"\"AZ7\"\")+2*INDIRECT(\"\"BA7\"\")+3*INDIRECT(\"\"BB7\"\")+4*INDIRECT(\"\"BC7\"\")+5*INDIRECT(\"\"BD7\"\")+6*INDIRECT(\"\"BE7\"\")+7*INDIRECT(\"\"BF7\"\")+8*INDIRECT(\"\"BG7\"\")\"\n\"INDIRECT(\"\"BH7\"\")+2*INDIRECT(\"\"BI7\"\")+3*INDIRECT(\"\"BJ7\"\")+4*INDIRECT(\"\"BK7\"\")+5*INDIRECT(\"\"BL7\"\")+6*INDIRECT(\"\"BM7\"\")+7*INDIRECT(\"\"BN7\"\")+8*INDIRECT(\"\"BO7\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l63.xls\"\",\"\"3L63\"\")\"\n\"INDIRECT(\"\"T10\"\")+INDIRECT(\"\"AB10\"\")+INDIRECT(\"\"AJ10\"\")+INDIRECT(\"\"AR10\"\")+INDIRECT(\"\"AZ10\"\")+INDIRECT(\"\"BH10\"\")\"\n\"INDIRECT(\"\"U10\"\")+INDIRECT(\"\"AC10\"\")+INDIRECT(\"\"AK10\"\")+INDIRECT(\"\"AS10\"\")+INDIRECT(\"\"BA10\"\")+INDIRECT(\"\"BI10\"\")\"\n\"INDIRECT(\"\"V10\"\")+INDIRECT(\"\"AD10\"\")+INDIRECT(\"\"AL10\"\")+INDIRECT(\"\"AT10\"\")+INDIRECT(\"\"BB10\"\")+INDIRECT(\"\"BJ10\"\")\"\n\"INDIRECT(\"\"W10\"\")+INDIRECT(\"\"AE10\"\")+INDIRECT(\"\"AM10\"\")+INDIRECT(\"\"AU10\"\")+INDIRECT(\"\"BC10\"\")+INDIRECT(\"\"BK10\"\")\"\n\"INDIRECT(\"\"X10\"\")+INDIRECT(\"\"AF10\"\")+INDIRECT(\"\"AN10\"\")+INDIRECT(\"\"AV10\"\")+INDIRECT(\"\"BD10\"\")+INDIRECT(\"\"BL10\"\")\"\n\"INDIRECT(\"\"Y10\"\")+INDIRECT(\"\"AG10\"\")+INDIRECT(\"\"AO10\"\")+INDIRECT(\"\"AW10\"\")+INDIRECT(\"\"BE10\"\")+INDIRECT(\"\"BM10\"\")\"\n\"INDIRECT(\"\"Z10\"\")+INDIRECT(\"\"AH10\"\")+INDIRECT(\"\"AP10\"\")+INDIRECT(\"\"AX10\"\")+INDIRECT(\"\"BF10\"\")+INDIRECT(\"\"BN10\"\")\"\n\"INDIRECT(\"\"AA10\"\")+INDIRECT(\"\"AI10\"\")+INDIRECT(\"\"AQ10\"\")+INDIRECT(\"\"AY10\"\")+INDIRECT(\"\"BG10\"\")+INDIRECT(\"\"BO10\"\")\"\n\"INDIRECT(\"\"T10\"\")+INDIRECT(\"\"U10\"\")+INDIRECT(\"\"V10\"\")+INDIRECT(\"\"W10\"\")+INDIRECT(\"\"X10\"\")+INDIRECT(\"\"Y10\"\")+INDIRECT(\"\"Z10\"\")+INDIRECT(\"\"AA10\"\")\"\n\"INDIRECT(\"\"AB10\"\")+INDIRECT(\"\"AC10\"\")+INDIRECT(\"\"AD10\"\")+INDIRECT(\"\"AE10\"\")+INDIRECT(\"\"AF10\"\")+INDIRECT(\"\"AG10\"\")+INDIRECT(\"\"AH10\"\")+INDIRECT(\"\"AI10\"\")\"\n\"INDIRECT(\"\"AJ10\"\")+INDIRECT(\"\"AK10\"\")+INDIRECT(\"\"AL10\"\")+INDIRECT(\"\"AM10\"\")+INDIRECT(\"\"AN10\"\")+INDIRECT(\"\"AO10\"\")+INDIRECT(\"\"AP10\"\")+INDIRECT(\"\"AQ10\"\")\"\n\"INDIRECT(\"\"AR10\"\")+INDIRECT(\"\"AS10\"\")+INDIRECT(\"\"AT10\"\")+INDIRECT(\"\"AU10\"\")+INDIRECT(\"\"AV10\"\")+INDIRECT(\"\"AW10\"\")+INDIRECT(\"\"AX10\"\")+INDIRECT(\"\"AY10\"\")\"\n\"INDIRECT(\"\"AZ10\"\")+INDIRECT(\"\"BA10\"\")+INDIRECT(\"\"BB10\"\")+INDIRECT(\"\"BC10\"\")+INDIRECT(\"\"BD10\"\")+INDIRECT(\"\"BE10\"\")+INDIRECT(\"\"BF10\"\")+INDIRECT(\"\"BG10\"\")\"\n\"INDIRECT(\"\"BH10\"\")+INDIRECT(\"\"BI10\"\")+INDIRECT(\"\"BJ10\"\")+INDIRECT(\"\"BK10\"\")+INDIRECT(\"\"BL10\"\")+INDIRECT(\"\"BM10\"\")+INDIRECT(\"\"BN10\"\")+INDIRECT(\"\"BO10\"\")\"\n\"INDIRECT(\"\"T10\"\")+2*INDIRECT(\"\"AB10\"\")+3*INDIRECT(\"\"AJ10\"\")+4*INDIRECT(\"\"AR10\"\")+5*INDIRECT(\"\"AZ10\"\")+6*INDIRECT(\"\"BH10\"\")\"\n\"INDIRECT(\"\"U10\"\")+2*INDIRECT(\"\"AC10\"\")+3*INDIRECT(\"\"AK10\"\")+4*INDIRECT(\"\"AS10\"\")+5*INDIRECT(\"\"BA10\"\")+6*INDIRECT(\"\"BI10\"\")\"\n\"INDIRECT(\"\"V10\"\")+2*INDIRECT(\"\"AD10\"\")+3*INDIRECT(\"\"AL10\"\")+4*INDIRECT(\"\"AT10\"\")+5*INDIRECT(\"\"BB10\"\")+6*INDIRECT(\"\"BJ10\"\")\"\n\"INDIRECT(\"\"W10\"\")+2*INDIRECT(\"\"AE10\"\")+3*INDIRECT(\"\"AM10\"\")+4*INDIRECT(\"\"AU10\"\")+5*INDIRECT(\"\"BC10\"\")+6*INDIRECT(\"\"BK10\"\")\"\n\"INDIRECT(\"\"X10\"\")+2*INDIRECT(\"\"AF10\"\")+3*INDIRECT(\"\"AN10\"\")+4*INDIRECT(\"\"AV10\"\")+5*INDIRECT(\"\"BD10\"\")+6*INDIRECT(\"\"BL10\"\")\"\n\"INDIRECT(\"\"Y10\"\")+2*INDIRECT(\"\"AG10\"\")+3*INDIRECT(\"\"AO10\"\")+4*INDIRECT(\"\"AW10\"\")+5*INDIRECT(\"\"BE10\"\")+6*INDIRECT(\"\"BM10\"\")\"\n\"INDIRECT(\"\"Z10\"\")+2*INDIRECT(\"\"AH10\"\")+3*INDIRECT(\"\"AP10\"\")+4*INDIRECT(\"\"AX10\"\")+5*INDIRECT(\"\"BF10\"\")+6*INDIRECT(\"\"BN10\"\")\"\n\"INDIRECT(\"\"AA10\"\")+2*INDIRECT(\"\"AI10\"\")+3*INDIRECT(\"\"AQ10\"\")+4*INDIRECT(\"\"AY10\"\")+5*INDIRECT(\"\"BG10\"\")+6*INDIRECT(\"\"BO10\"\")\"\n\"INDIRECT(\"\"T10\"\")+2*INDIRECT(\"\"U10\"\")+3*INDIRECT(\"\"V10\"\")+4*INDIRECT(\"\"W10\"\")+5*INDIRECT(\"\"X10\"\")+6*INDIRECT(\"\"Y10\"\")+7*INDIRECT(\"\"Z10\"\")+8*INDIRECT(\"\"AA10\"\")\"\n\"INDIRECT(\"\"AB10\"\")+2*INDIRECT(\"\"AC10\"\")+3*INDIRECT(\"\"AD10\"\")+4*INDIRECT(\"\"AE10\"\")+5*INDIRECT(\"\"AF10\"\")+6*INDIRECT(\"\"AG10\"\")+7*INDIRECT(\"\"AH10\"\")+8*INDIRECT(\"\"AI10\"\")\"\n\"INDIRECT(\"\"AJ10\"\")+2*INDIRECT(\"\"AK10\"\")+3*INDIRECT(\"\"AL10\"\")+4*INDIRECT(\"\"AM10\"\")+5*INDIRECT(\"\"AN10\"\")+6*INDIRECT(\"\"AO10\"\")+7*INDIRECT(\"\"AP10\"\")+8*INDIRECT(\"\"AQ10\"\")\"\n\"INDIRECT(\"\"AR10\"\")+2*INDIRECT(\"\"AS10\"\")+3*INDIRECT(\"\"AT10\"\")+4*INDIRECT(\"\"AU10\"\")+5*INDIRECT(\"\"AV10\"\")+6*INDIRECT(\"\"AW10\"\")+7*INDIRECT(\"\"AX10\"\")+8*INDIRECT(\"\"AY10\"\")\"\n\"INDIRECT(\"\"AZ10\"\")+2*INDIRECT(\"\"BA10\"\")+3*INDIRECT(\"\"BB10\"\")+4*INDIRECT(\"\"BC10\"\")+5*INDIRECT(\"\"BD10\"\")+6*INDIRECT(\"\"BE10\"\")+7*INDIRECT(\"\"BF10\"\")+8*INDIRECT(\"\"BG10\"\")\"\n\"INDIRECT(\"\"BH10\"\")+2*INDIRECT(\"\"BI10\"\")+3*INDIRECT(\"\"BJ10\"\")+4*INDIRECT(\"\"BK10\"\")+5*INDIRECT(\"\"BL10\"\")+6*INDIRECT(\"\"BM10\"\")+7*INDIRECT(\"\"BN10\"\")+8*INDIRECT(\"\"BO10\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l64.xls\"\",\"\"3L64\"\")\"\n\"INDIRECT(\"\"T13\"\")+INDIRECT(\"\"AB13\"\")+INDIRECT(\"\"AJ13\"\")+INDIRECT(\"\"AR13\"\")+INDIRECT(\"\"AZ13\"\")+INDIRECT(\"\"BH13\"\")\"\n\"INDIRECT(\"\"U13\"\")+INDIRECT(\"\"AC13\"\")+INDIRECT(\"\"AK13\"\")+INDIRECT(\"\"AS13\"\")+INDIRECT(\"\"BA13\"\")+INDIRECT(\"\"BI13\"\")\"\n\"INDIRECT(\"\"V13\"\")+INDIRECT(\"\"AD13\"\")+INDIRECT(\"\"AL13\"\")+INDIRECT(\"\"AT13\"\")+INDIRECT(\"\"BB13\"\")+INDIRECT(\"\"BJ13\"\")\"\n\"INDIRECT(\"\"W13\"\")+INDIRECT(\"\"AE13\"\")+INDIRECT(\"\"AM13\"\")+INDIRECT(\"\"AU13\"\")+INDIRECT(\"\"BC13\"\")+INDIRECT(\"\"BK13\"\")\"\n\"INDIRECT(\"\"X13\"\")+INDIRECT(\"\"AF13\"\")+INDIRECT(\"\"AN13\"\")+INDIRECT(\"\"AV13\"\")+INDIRECT(\"\"BD13\"\")+INDIRECT(\"\"BL13\"\")\"\n\"INDIRECT(\"\"Y13\"\")+INDIRECT(\"\"AG13\"\")+INDIRECT(\"\"AO13\"\")+INDIRECT(\"\"AW13\"\")+INDIRECT(\"\"BE13\"\")+INDIRECT(\"\"BM13\"\")\"\n\"INDIRECT(\"\"Z13\"\")+INDIRECT(\"\"AH13\"\")+INDIRECT(\"\"AP13\"\")+INDIRECT(\"\"AX13\"\")+INDIRECT(\"\"BF13\"\")+INDIRECT(\"\"BN13\"\")\"\n\"INDIRECT(\"\"AA13\"\")+INDIRECT(\"\"AI13\"\")+INDIRECT(\"\"AQ13\"\")+INDIRECT(\"\"AY13\"\")+INDIRECT(\"\"BG13\"\")+INDIRECT(\"\"BO13\"\")\"\n\"INDIRECT(\"\"T13\"\")+INDIRECT(\"\"U13\"\")+INDIRECT(\"\"V13\"\")+INDIRECT(\"\"W13\"\")+INDIRECT(\"\"X13\"\")+INDIRECT(\"\"Y13\"\")+INDIRECT(\"\"Z13\"\")+INDIRECT(\"\"AA13\"\")\"\n\"INDIRECT(\"\"AB13\"\")+INDIRECT(\"\"AC13\"\")+INDIRECT(\"\"AD13\"\")+INDIRECT(\"\"AE13\"\")+INDIRECT(\"\"AF13\"\")+INDIRECT(\"\"AG13\"\")+INDIRECT(\"\"AH13\"\")+INDIRECT(\"\"AI13\"\")\"\n\"INDIRECT(\"\"AJ13\"\")+INDIRECT(\"\"AK13\"\")+INDIRECT(\"\"AL13\"\")+INDIRECT(\"\"AM13\"\")+INDIRECT(\"\"AN13\"\")+INDIRECT(\"\"AO13\"\")+INDIRECT(\"\"AP13\"\")+INDIRECT(\"\"AQ13\"\")\"\n\"INDIRECT(\"\"AR13\"\")+INDIRECT(\"\"AS13\"\")+INDIRECT(\"\"AT13\"\")+INDIRECT(\"\"AU13\"\")+INDIRECT(\"\"AV13\"\")+INDIRECT(\"\"AW13\"\")+INDIRECT(\"\"AX13\"\")+INDIRECT(\"\"AY13\"\")\"\n\"INDIRECT(\"\"AZ13\"\")+INDIRECT(\"\"BA13\"\")+INDIRECT(\"\"BB13\"\")+INDIRECT(\"\"BC13\"\")+INDIRECT(\"\"BD13\"\")+INDIRECT(\"\"BE13\"\")+INDIRECT(\"\"BF13\"\")+INDIRECT(\"\"BG13\"\")\"\n\"INDIRECT(\"\"BH13\"\")+INDIRECT(\"\"BI13\"\")+INDIRECT(\"\"BJ13\"\")+INDIRECT(\"\"BK13\"\")+INDIRECT(\"\"BL13\"\")+INDIRECT(\"\"BM13\"\")+INDIRECT(\"\"BN13\"\")+INDIRECT(\"\"BO13\"\")\"\n\"INDIRECT(\"\"T13\"\")+2*INDIRECT(\"\"AB13\"\")+3*INDIRECT(\"\"AJ13\"\")+4*INDIRECT(\"\"AR13\"\")+5*INDIRECT(\"\"AZ13\"\")+6*INDIRECT(\"\"BH13\"\")\"\n\"INDIRECT(\"\"U13\"\")+2*INDIRECT(\"\"AC13\"\")+3*INDIRECT(\"\"AK13\"\")+4*INDIRECT(\"\"AS13\"\")+5*INDIRECT(\"\"BA13\"\")+6*INDIRECT(\"\"BI13\"\")\"\n\"INDIRECT(\"\"V13\"\")+2*INDIRECT(\"\"AD13\"\")+3*INDIRECT(\"\"AL13\"\")+4*INDIRECT(\"\"AT13\"\")+5*INDIRECT(\"\"BB13\"\")+6*INDIRECT(\"\"BJ13\"\")\"\n\"INDIRECT(\"\"W13\"\")+2*INDIRECT(\"\"AE13\"\")+3*INDIRECT(\"\"AM13\"\")+4*INDIRECT(\"\"AU13\"\")+5*INDIRECT(\"\"BC13\"\")+6*INDIRECT(\"\"BK13\"\")\"\n\"INDIRECT(\"\"X13\"\")+2*INDIRECT(\"\"AF13\"\")+3*INDIRECT(\"\"AN13\"\")+4*INDIRECT(\"\"AV13\"\")+5*INDIRECT(\"\"BD13\"\")+6*INDIRECT(\"\"BL13\"\")\"\n\"INDIRECT(\"\"Y13\"\")+2*INDIRECT(\"\"AG13\"\")+3*INDIRECT(\"\"AO13\"\")+4*INDIRECT(\"\"AW13\"\")+5*INDIRECT(\"\"BE13\"\")+6*INDIRECT(\"\"BM13\"\")\"\n\"INDIRECT(\"\"Z13\"\")+2*INDIRECT(\"\"AH13\"\")+3*INDIRECT(\"\"AP13\"\")+4*INDIRECT(\"\"AX13\"\")+5*INDIRECT(\"\"BF13\"\")+6*INDIRECT(\"\"BN13\"\")\"\n\"INDIRECT(\"\"AA13\"\")+2*INDIRECT(\"\"AI13\"\")+3*INDIRECT(\"\"AQ13\"\")+4*INDIRECT(\"\"AY13\"\")+5*INDIRECT(\"\"BG13\"\")+6*INDIRECT(\"\"BO13\"\")\"\n\"INDIRECT(\"\"T13\"\")+2*INDIRECT(\"\"U13\"\")+3*INDIRECT(\"\"V13\"\")+4*INDIRECT(\"\"W13\"\")+5*INDIRECT(\"\"X13\"\")+6*INDIRECT(\"\"Y13\"\")+7*INDIRECT(\"\"Z13\"\")+8*INDIRECT(\"\"AA13\"\")\"\n\"INDIRECT(\"\"AB13\"\")+2*INDIRECT(\"\"AC13\"\")+3*INDIRECT(\"\"AD13\"\")+4*INDIRECT(\"\"AE13\"\")+5*INDIRECT(\"\"AF13\"\")+6*INDIRECT(\"\"AG13\"\")+7*INDIRECT(\"\"AH13\"\")+8*INDIRECT(\"\"AI13\"\")\"\n\"INDIRECT(\"\"AJ13\"\")+2*INDIRECT(\"\"AK13\"\")+3*INDIRECT(\"\"AL13\"\")+4*INDIRECT(\"\"AM13\"\")+5*INDIRECT(\"\"AN13\"\")+6*INDIRECT(\"\"AO13\"\")+7*INDIRECT(\"\"AP13\"\")+8*INDIRECT(\"\"AQ13\"\")\"\n\"INDIRECT(\"\"AR13\"\")+2*INDIRECT(\"\"AS13\"\")+3*INDIRECT(\"\"AT13\"\")+4*INDIRECT(\"\"AU13\"\")+5*INDIRECT(\"\"AV13\"\")+6*INDIRECT(\"\"AW13\"\")+7*INDIRECT(\"\"AX13\"\")+8*INDIRECT(\"\"AY13\"\")\"\n\"INDIRECT(\"\"AZ13\"\")+2*INDIRECT(\"\"BA13\"\")+3*INDIRECT(\"\"BB13\"\")+4*INDIRECT(\"\"BC13\"\")+5*INDIRECT(\"\"BD13\"\")+6*INDIRECT(\"\"BE13\"\")+7*INDIRECT(\"\"BF13\"\")+8*INDIRECT(\"\"BG13\"\")\"\n\"INDIRECT(\"\"BH13\"\")+2*INDIRECT(\"\"BI13\"\")+3*INDIRECT(\"\"BJ13\"\")+4*INDIRECT(\"\"BK13\"\")+5*INDIRECT(\"\"BL13\"\")+6*INDIRECT(\"\"BM13\"\")+7*INDIRECT(\"\"BN13\"\")+8*INDIRECT(\"\"BO13\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l65.xls\"\",\"\"3L65\"\")\"\n\"INDIRECT(\"\"T16\"\")+INDIRECT(\"\"AB16\"\")+INDIRECT(\"\"AJ16\"\")+INDIRECT(\"\"AR16\"\")+INDIRECT(\"\"AZ16\"\")+INDIRECT(\"\"BH16\"\")\"\n\"INDIRECT(\"\"U16\"\")+INDIRECT(\"\"AC16\"\")+INDIRECT(\"\"AK16\"\")+INDIRECT(\"\"AS16\"\")+INDIRECT(\"\"BA16\"\")+INDIRECT(\"\"BI16\"\")\"\n\"INDIRECT(\"\"V16\"\")+INDIRECT(\"\"AD16\"\")+INDIRECT(\"\"AL16\"\")+INDIRECT(\"\"AT16\"\")+INDIRECT(\"\"BB16\"\")+INDIRECT(\"\"BJ16\"\")\"\n\"INDIRECT(\"\"W16\"\")+INDIRECT(\"\"AE16\"\")+INDIRECT(\"\"AM16\"\")+INDIRECT(\"\"AU16\"\")+INDIRECT(\"\"BC16\"\")+INDIRECT(\"\"BK16\"\")\"\n\"INDIRECT(\"\"X16\"\")+INDIRECT(\"\"AF16\"\")+INDIRECT(\"\"AN16\"\")+INDIRECT(\"\"AV16\"\")+INDIRECT(\"\"BD16\"\")+INDIRECT(\"\"BL16\"\")\"\n\"INDIRECT(\"\"Y16\"\")+INDIRECT(\"\"AG16\"\")+INDIRECT(\"\"AO16\"\")+INDIRECT(\"\"AW16\"\")+INDIRECT(\"\"BE16\"\")+INDIRECT(\"\"BM16\"\")\"\n\"INDIRECT(\"\"Z16\"\")+INDIRECT(\"\"AH16\"\")+INDIRECT(\"\"AP16\"\")+INDIRECT(\"\"AX16\"\")+INDIRECT(\"\"BF16\"\")+INDIRECT(\"\"BN16\"\")\"\n\"INDIRECT(\"\"AA16\"\")+INDIRECT(\"\"AI16\"\")+INDIRECT(\"\"AQ16\"\")+INDIRECT(\"\"AY16\"\")+INDIRECT(\"\"BG16\"\")+INDIRECT(\"\"BO16\"\")\"\n\"INDIRECT(\"\"T16\"\")+INDIRECT(\"\"U16\"\")+INDIRECT(\"\"V16\"\")+INDIRECT(\"\"W16\"\")+INDIRECT(\"\"X16\"\")+INDIRECT(\"\"Y16\"\")+INDIRECT(\"\"Z16\"\")+INDIRECT(\"\"AA16\"\")\"\n\"INDIRECT(\"\"AB16\"\")+INDIRECT(\"\"AC16\"\")+INDIRECT(\"\"AD16\"\")+INDIRECT(\"\"AE16\"\")+INDIRECT(\"\"AF16\"\")+INDIRECT(\"\"AG16\"\")+INDIRECT(\"\"AH16\"\")+INDIRECT(\"\"AI16\"\")\"\n\"INDIRECT(\"\"AJ16\"\")+INDIRECT(\"\"AK16\"\")+INDIRECT(\"\"AL16\"\")+INDIRECT(\"\"AM16\"\")+INDIRECT(\"\"AN16\"\")+INDIRECT(\"\"AO16\"\")+INDIRECT(\"\"AP16\"\")+INDIRECT(\"\"AQ16\"\")\"\n\"INDIRECT(\"\"AR16\"\")+INDIRECT(\"\"AS16\"\")+INDIRECT(\"\"AT16\"\")+INDIRECT(\"\"AU16\"\")+INDIRECT(\"\"AV16\"\")+INDIRECT(\"\"AW16\"\")+INDIRECT(\"\"AX16\"\")+INDIRECT(\"\"AY16\"\")\"\n\"INDIRECT(\"\"AZ16\"\")+INDIRECT(\"\"BA16\"\")+INDIRECT(\"\"BB16\"\")+INDIRECT(\"\"BC16\"\")+INDIRECT(\"\"BD16\"\")+INDIRECT(\"\"BE16\"\")+INDIRECT(\"\"BF16\"\")+INDIRECT(\"\"BG16\"\")\"\n\"INDIRECT(\"\"BH16\"\")+INDIRECT(\"\"BI16\"\")+INDIRECT(\"\"BJ16\"\")+INDIRECT(\"\"BK16\"\")+INDIRECT(\"\"BL16\"\")+INDIRECT(\"\"BM16\"\")+INDIRECT(\"\"BN16\"\")+INDIRECT(\"\"BO16\"\")\"\n\"INDIRECT(\"\"T16\"\")+2*INDIRECT(\"\"AB16\"\")+3*INDIRECT(\"\"AJ16\"\")+4*INDIRECT(\"\"AR16\"\")+5*INDIRECT(\"\"AZ16\"\")+6*INDIRECT(\"\"BH16\"\")\"\n\"INDIRECT(\"\"U16\"\")+2*INDIRECT(\"\"AC16\"\")+3*INDIRECT(\"\"AK16\"\")+4*INDIRECT(\"\"AS16\"\")+5*INDIRECT(\"\"BA16\"\")+6*INDIRECT(\"\"BI16\"\")\"\n\"INDIRECT(\"\"V16\"\")+2*INDIRECT(\"\"AD16\"\")+3*INDIRECT(\"\"AL16\"\")+4*INDIRECT(\"\"AT16\"\")+5*INDIRECT(\"\"BB16\"\")+6*INDIRECT(\"\"BJ16\"\")\"\n\"INDIRECT(\"\"W16\"\")+2*INDIRECT(\"\"AE16\"\")+3*INDIRECT(\"\"AM16\"\")+4*INDIRECT(\"\"AU16\"\")+5*INDIRECT(\"\"BC16\"\")+6*INDIRECT(\"\"BK16\"\")\"\n\"INDIRECT(\"\"X16\"\")+2*INDIRECT(\"\"AF16\"\")+3*INDIRECT(\"\"AN16\"\")+4*INDIRECT(\"\"AV16\"\")+5*INDIRECT(\"\"BD16\"\")+6*INDIRECT(\"\"BL16\"\")\"\n\"INDIRECT(\"\"Y16\"\")+2*INDIRECT(\"\"AG16\"\")+3*INDIRECT(\"\"AO16\"\")+4*INDIRECT(\"\"AW16\"\")+5*INDIRECT(\"\"BE16\"\")+6*INDIRECT(\"\"BM16\"\")\"\n\"INDIRECT(\"\"Z16\"\")+2*INDIRECT(\"\"AH16\"\")+3*INDIRECT(\"\"AP16\"\")+4*INDIRECT(\"\"AX16\"\")+5*INDIRECT(\"\"BF16\"\")+6*INDIRECT(\"\"BN16\"\")\"\n\"INDIRECT(\"\"AA16\"\")+2*INDIRECT(\"\"AI16\"\")+3*INDIRECT(\"\"AQ16\"\")+4*INDIRECT(\"\"AY16\"\")+5*INDIRECT(\"\"BG16\"\")+6*INDIRECT(\"\"BO16\"\")\"\n\"INDIRECT(\"\"T16\"\")+2*INDIRECT(\"\"U16\"\")+3*INDIRECT(\"\"V16\"\")+4*INDIRECT(\"\"W16\"\")+5*INDIRECT(\"\"X16\"\")+6*INDIRECT(\"\"Y16\"\")+7*INDIRECT(\"\"Z16\"\")+8*INDIRECT(\"\"AA16\"\")\"\n\"INDIRECT(\"\"AB16\"\")+2*INDIRECT(\"\"AC16\"\")+3*INDIRECT(\"\"AD16\"\")+4*INDIRECT(\"\"AE16\"\")+5*INDIRECT(\"\"AF16\"\")+6*INDIRECT(\"\"AG16\"\")+7*INDIRECT(\"\"AH16\"\")+8*INDIRECT(\"\"AI16\"\")\"\n\"INDIRECT(\"\"AJ16\"\")+2*INDIRECT(\"\"AK16\"\")+3*INDIRECT(\"\"AL16\"\")+4*INDIRECT(\"\"AM16\"\")+5*INDIRECT(\"\"AN16\"\")+6*INDIRECT(\"\"AO16\"\")+7*INDIRECT(\"\"AP16\"\")+8*INDIRECT(\"\"AQ16\"\")\"\n\"INDIRECT(\"\"AR16\"\")+2*INDIRECT(\"\"AS16\"\")+3*INDIRECT(\"\"AT16\"\")+4*INDIRECT(\"\"AU16\"\")+5*INDIRECT(\"\"AV16\"\")+6*INDIRECT(\"\"AW16\"\")+7*INDIRECT(\"\"AX16\"\")+8*INDIRECT(\"\"AY16\"\")\"\n\"INDIRECT(\"\"AZ16\"\")+2*INDIRECT(\"\"BA16\"\")+3*INDIRECT(\"\"BB16\"\")+4*INDIRECT(\"\"BC16\"\")+5*INDIRECT(\"\"BD16\"\")+6*INDIRECT(\"\"BE16\"\")+7*INDIRECT(\"\"BF16\"\")+8*INDIRECT(\"\"BG16\"\")\"\n\"INDIRECT(\"\"BH16\"\")+2*INDIRECT(\"\"BI16\"\")+3*INDIRECT(\"\"BJ16\"\")+4*INDIRECT(\"\"BK16\"\")+5*INDIRECT(\"\"BL16\"\")+6*INDIRECT(\"\"BM16\"\")+7*INDIRECT(\"\"BN16\"\")+8*INDIRECT(\"\"BO16\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l66.xls\"\",\"\"3L66\"\")\"\n\"INDIRECT(\"\"T19\"\")+INDIRECT(\"\"AB19\"\")+INDIRECT(\"\"AJ19\"\")+INDIRECT(\"\"AR19\"\")+INDIRECT(\"\"AZ19\"\")+INDIRECT(\"\"BH19\"\")\"\n\"INDIRECT(\"\"U19\"\")+INDIRECT(\"\"AC19\"\")+INDIRECT(\"\"AK19\"\")+INDIRECT(\"\"AS19\"\")+INDIRECT(\"\"BA19\"\")+INDIRECT(\"\"BI19\"\")\"\n\"INDIRECT(\"\"V19\"\")+INDIRECT(\"\"AD19\"\")+INDIRECT(\"\"AL19\"\")+INDIRECT(\"\"AT19\"\")+INDIRECT(\"\"BB19\"\")+INDIRECT(\"\"BJ19\"\")\"\n\"INDIRECT(\"\"W19\"\")+INDIRECT(\"\"AE19\"\")+INDIRECT(\"\"AM19\"\")+INDIRECT(\"\"AU19\"\")+INDIRECT(\"\"BC19\"\")+INDIRECT(\"\"BK19\"\")\"\n\"INDIRECT(\"\"X19\"\")+INDIRECT(\"\"AF19\"\")+INDIRECT(\"\"AN19\"\")+INDIRECT(\"\"AV19\"\")+INDIRECT(\"\"BD19\"\")+INDIRECT(\"\"BL19\"\")\"\n\"INDIRECT(\"\"Y19\"\")+INDIRECT(\"\"AG19\"\")+INDIRECT(\"\"AO19\"\")+INDIRECT(\"\"AW19\"\")+INDIRECT(\"\"BE19\"\")+INDIRECT(\"\"BM19\"\")\"\n\"INDIRECT(\"\"Z19\"\")+INDIRECT(\"\"AH19\"\")+INDIRECT(\"\"AP19\"\")+INDIRECT(\"\"AX19\"\")+INDIRECT(\"\"BF19\"\")+INDIRECT(\"\"BN19\"\")\"\n\"INDIRECT(\"\"AA19\"\")+INDIRECT(\"\"AI19\"\")+INDIRECT(\"\"AQ19\"\")+INDIRECT(\"\"AY19\"\")+INDIRECT(\"\"BG19\"\")+INDIRECT(\"\"BO19\"\")\"\n\"INDIRECT(\"\"T19\"\")+INDIRECT(\"\"U19\"\")+INDIRECT(\"\"V19\"\")+INDIRECT(\"\"W19\"\")+INDIRECT(\"\"X19\"\")+INDIRECT(\"\"Y19\"\")+INDIRECT(\"\"Z19\"\")+INDIRECT(\"\"AA19\"\")\"\n\"INDIRECT(\"\"AB19\"\")+INDIRECT(\"\"AC19\"\")+INDIRECT(\"\"AD19\"\")+INDIRECT(\"\"AE19\"\")+INDIRECT(\"\"AF19\"\")+INDIRECT(\"\"AG19\"\")+INDIRECT(\"\"AH19\"\")+INDIRECT(\"\"AI19\"\")\"\n\"INDIRECT(\"\"AJ19\"\")+INDIRECT(\"\"AK19\"\")+INDIRECT(\"\"AL19\"\")+INDIRECT(\"\"AM19\"\")+INDIRECT(\"\"AN19\"\")+INDIRECT(\"\"AO19\"\")+INDIRECT(\"\"AP19\"\")+INDIRECT(\"\"AQ19\"\")\"\n\"INDIRECT(\"\"AR19\"\")+INDIRECT(\"\"AS19\"\")+INDIRECT(\"\"AT19\"\")+INDIRECT(\"\"AU19\"\")+INDIRECT(\"\"AV19\"\")+INDIRECT(\"\"AW19\"\")+INDIRECT(\"\"AX19\"\")+INDIRECT(\"\"AY19\"\")\"\n\"INDIRECT(\"\"AZ19\"\")+INDIRECT(\"\"BA19\"\")+INDIRECT(\"\"BB19\"\")+INDIRECT(\"\"BC19\"\")+INDIRECT(\"\"BD19\"\")+INDIRECT(\"\"BE19\"\")+INDIRECT(\"\"BF19\"\")+INDIRECT(\"\"BG19\"\")\"\n\"INDIRECT(\"\"BH19\"\")+INDIRECT(\"\"BI19\"\")+INDIRECT(\"\"BJ19\"\")+INDIRECT(\"\"BK19\"\")+INDIRECT(\"\"BL19\"\")+INDIRECT(\"\"BM19\"\")+INDIRECT(\"\"BN19\"\")+INDIRECT(\"\"BO19\"\")\"\n\"INDIRECT(\"\"T19\"\")+2*INDIRECT(\"\"AB19\"\")+3*INDIRECT(\"\"AJ19\"\")+4*INDIRECT(\"\"AR19\"\")+5*INDIRECT(\"\"AZ19\"\")+6*INDIRECT(\"\"BH19\"\")\"\n\"INDIRECT(\"\"U19\"\")+2*INDIRECT(\"\"AC19\"\")+3*INDIRECT(\"\"AK19\"\")+4*INDIRECT(\"\"AS19\"\")+5*INDIRECT(\"\"BA19\"\")+6*INDIRECT(\"\"BI19\"\")\"\n\"INDIRECT(\"\"V19\"\")+2*INDIRECT(\"\"AD19\"\")+3*INDIRECT(\"\"AL19\"\")+4*INDIRECT(\"\"AT19\"\")+5*INDIRECT(\"\"BB19\"\")+6*INDIRECT(\"\"BJ19\"\")\"\n\"INDIRECT(\"\"W19\"\")+2*INDIRECT(\"\"AE19\"\")+3*INDIRECT(\"\"AM19\"\")+4*INDIRECT(\"\"AU19\"\")+5*INDIRECT(\"\"BC19\"\")+6*INDIRECT(\"\"BK19\"\")\"\n\"INDIRECT(\"\"X19\"\")+2*INDIRECT(\"\"AF19\"\")+3*INDIRECT(\"\"AN19\"\")+4*INDIRECT(\"\"AV19\"\")+5*INDIRECT(\"\"BD19\"\")+6*INDIRECT(\"\"BL19\"\")\"\n\"INDIRECT(\"\"Y19\"\")+2*INDIRECT(\"\"AG19\"\")+3*INDIRECT(\"\"AO19\"\")+4*INDIRECT(\"\"AW19\"\")+5*INDIRECT(\"\"BE19\"\")+6*INDIRECT(\"\"BM19\"\")\"\n\"INDIRECT(\"\"Z19\"\")+2*INDIRECT(\"\"AH19\"\")+3*INDIRECT(\"\"AP19\"\")+4*INDIRECT(\"\"AX19\"\")+5*INDIRECT(\"\"BF19\"\")+6*INDIRECT(\"\"BN19\"\")\"\n\"INDIRECT(\"\"AA19\"\")+2*INDIRECT(\"\"AI19\"\")+3*INDIRECT(\"\"AQ19\"\")+4*INDIRECT(\"\"AY19\"\")+5*INDIRECT(\"\"BG19\"\")+6*INDIRECT(\"\"BO19\"\")\"\n\"INDIRECT(\"\"T19\"\")+2*INDIRECT(\"\"U19\"\")+3*INDIRECT(\"\"V19\"\")+4*INDIRECT(\"\"W19\"\")+5*INDIRECT(\"\"X19\"\")+6*INDIRECT(\"\"Y19\"\")+7*INDIRECT(\"\"Z19\"\")+8*INDIRECT(\"\"AA19\"\")\"\n\"INDIRECT(\"\"AB19\"\")+2*INDIRECT(\"\"AC19\"\")+3*INDIRECT(\"\"AD19\"\")+4*INDIRECT(\"\"AE19\"\")+5*INDIRECT(\"\"AF19\"\")+6*INDIRECT(\"\"AG19\"\")+7*INDIRECT(\"\"AH19\"\")+8*INDIRECT(\"\"AI19\"\")\"\n\"INDIRECT(\"\"AJ19\"\")+2*INDIRECT(\"\"AK19\"\")+3*INDIRECT(\"\"AL19\"\")+4*INDIRECT(\"\"AM19\"\")+5*INDIRECT(\"\"AN19\"\")+6*INDIRECT(\"\"AO19\"\")+7*INDIRECT(\"\"AP19\"\")+8*INDIRECT(\"\"AQ19\"\")\"\n\"INDIRECT(\"\"AR19\"\")+2*INDIRECT(\"\"AS19\"\")+3*INDIRECT(\"\"AT19\"\")+4*INDIRECT(\"\"AU19\"\")+5*INDIRECT(\"\"AV19\"\")+6*INDIRECT(\"\"AW19\"\")+7*INDIRECT(\"\"AX19\"\")+8*INDIRECT(\"\"AY19\"\")\"\n\"INDIRECT(\"\"AZ19\"\")+2*INDIRECT(\"\"BA19\"\")+3*INDIRECT(\"\"BB19\"\")+4*INDIRECT(\"\"BC19\"\")+5*INDIRECT(\"\"BD19\"\")+6*INDIRECT(\"\"BE19\"\")+7*INDIRECT(\"\"BF19\"\")+8*INDIRECT(\"\"BG19\"\")\"\n\"INDIRECT(\"\"BH19\"\")+2*INDIRECT(\"\"BI19\"\")+3*INDIRECT(\"\"BJ19\"\")+4*INDIRECT(\"\"BK19\"\")+5*INDIRECT(\"\"BL19\"\")+6*INDIRECT(\"\"BM19\"\")+7*INDIRECT(\"\"BN19\"\")+8*INDIRECT(\"\"BO19\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-0l09.xls\"\",\"\"0L09\"\")\"\n\"INDIRECT(\"\"T22\"\")+INDIRECT(\"\"AB22\"\")+INDIRECT(\"\"AJ22\"\")+INDIRECT(\"\"AR22\"\")+INDIRECT(\"\"AZ22\"\")+INDIRECT(\"\"BH22\"\")\"\n\"INDIRECT(\"\"U22\"\")+INDIRECT(\"\"AC22\"\")+INDIRECT(\"\"AK22\"\")+INDIRECT(\"\"AS22\"\")+INDIRECT(\"\"BA22\"\")+INDIRECT(\"\"BI22\"\")\"\n\"INDIRECT(\"\"V22\"\")+INDIRECT(\"\"AD22\"\")+INDIRECT(\"\"AL22\"\")+INDIRECT(\"\"AT22\"\")+INDIRECT(\"\"BB22\"\")+INDIRECT(\"\"BJ22\"\")\"\n\"INDIRECT(\"\"W22\"\")+INDIRECT(\"\"AE22\"\")+INDIRECT(\"\"AM22\"\")+INDIRECT(\"\"AU22\"\")+INDIRECT(\"\"BC22\"\")+INDIRECT(\"\"BK22\"\")\"\n\"INDIRECT(\"\"X22\"\")+INDIRECT(\"\"AF22\"\")+INDIRECT(\"\"AN22\"\")+INDIRECT(\"\"AV22\"\")+INDIRECT(\"\"BD22\"\")+INDIRECT(\"\"BL22\"\")\"\n\"INDIRECT(\"\"Y22\"\")+INDIRECT(\"\"AG22\"\")+INDIRECT(\"\"AO22\"\")+INDIRECT(\"\"AW22\"\")+INDIRECT(\"\"BE22\"\")+INDIRECT(\"\"BM22\"\")\"\n\"INDIRECT(\"\"Z22\"\")+INDIRECT(\"\"AH22\"\")+INDIRECT(\"\"AP22\"\")+INDIRECT(\"\"AX22\"\")+INDIRECT(\"\"BF22\"\")+INDIRECT(\"\"BN22\"\")\"\n\"INDIRECT(\"\"AA22\"\")+INDIRECT(\"\"AI22\"\")+INDIRECT(\"\"AQ22\"\")+INDIRECT(\"\"AY22\"\")+INDIRECT(\"\"BG22\"\")+INDIRECT(\"\"BO22\"\")\"\n\"INDIRECT(\"\"T22\"\")+INDIRECT(\"\"U22\"\")+INDIRECT(\"\"V22\"\")+INDIRECT(\"\"W22\"\")+INDIRECT(\"\"X22\"\")+INDIRECT(\"\"Y22\"\")+INDIRECT(\"\"Z22\"\")+INDIRECT(\"\"AA22\"\")\"\n\"INDIRECT(\"\"AB22\"\")+INDIRECT(\"\"AC22\"\")+INDIRECT(\"\"AD22\"\")+INDIRECT(\"\"AE22\"\")+INDIRECT(\"\"AF22\"\")+INDIRECT(\"\"AG22\"\")+INDIRECT(\"\"AH22\"\")+INDIRECT(\"\"AI22\"\")\"\n\"INDIRECT(\"\"AJ22\"\")+INDIRECT(\"\"AK22\"\")+INDIRECT(\"\"AL22\"\")+INDIRECT(\"\"AM22\"\")+INDIRECT(\"\"AN22\"\")+INDIRECT(\"\"AO22\"\")+INDIRECT(\"\"AP22\"\")+INDIRECT(\"\"AQ22\"\")\"\n\"INDIRECT(\"\"AR22\"\")+INDIRECT(\"\"AS22\"\")+INDIRECT(\"\"AT22\"\")+INDIRECT(\"\"AU22\"\")+INDIRECT(\"\"AV22\"\")+INDIRECT(\"\"AW22\"\")+INDIRECT(\"\"AX22\"\")+INDIRECT(\"\"AY22\"\")\"\n\"INDIRECT(\"\"AZ22\"\")+INDIRECT(\"\"BA22\"\")+INDIRECT(\"\"BB22\"\")+INDIRECT(\"\"BC22\"\")+INDIRECT(\"\"BD22\"\")+INDIRECT(\"\"BE22\"\")+INDIRECT(\"\"BF22\"\")+INDIRECT(\"\"BG22\"\")\"\n\"INDIRECT(\"\"BH22\"\")+INDIRECT(\"\"BI22\"\")+INDIRECT(\"\"BJ22\"\")+INDIRECT(\"\"BK22\"\")+INDIRECT(\"\"BL22\"\")+INDIRECT(\"\"BM22\"\")+INDIRECT(\"\"BN22\"\")+INDIRECT(\"\"BO22\"\")\"\n\"INDIRECT(\"\"T22\"\")+2*INDIRECT(\"\"AB22\"\")+3*INDIRECT(\"\"AJ22\"\")+4*INDIRECT(\"\"AR22\"\")+5*INDIRECT(\"\"AZ22\"\")+6*INDIRECT(\"\"BH22\"\")\"\n\"INDIRECT(\"\"U22\"\")+2*INDIRECT(\"\"AC22\"\")+3*INDIRECT(\"\"AK22\"\")+4*INDIRECT(\"\"AS22\"\")+5*INDIRECT(\"\"BA22\"\")+6*INDIRECT(\"\"BI22\"\")\"\n\"INDIRECT(\"\"V22\"\")+2*INDIRECT(\"\"AD22\"\")+3*INDIRECT(\"\"AL22\"\")+4*INDIRECT(\"\"AT22\"\")+5*INDIRECT(\"\"BB22\"\")+6*INDIRECT(\"\"BJ22\"\")\"\n\"INDIRECT(\"\"W22\"\")+2*INDIRECT(\"\"AE22\"\")+3*INDIRECT(\"\"AM22\"\")+4*INDIRECT(\"\"AU22\"\")+5*INDIRECT(\"\"BC22\"\")+6*INDIRECT(\"\"BK22\"\")\"\n\"INDIRECT(\"\"X22\"\")+2*INDIRECT(\"\"AF22\"\")+3*INDIRECT(\"\"AN22\"\")+4*INDIRECT(\"\"AV22\"\")+5*INDIRECT(\"\"BD22\"\")+6*INDIRECT(\"\"BL22\"\")\"\n\"INDIRECT(\"\"Y22\"\")+2*INDIRECT(\"\"AG22\"\")+3*INDIRECT(\"\"AO22\"\")+4*INDIRECT(\"\"AW22\"\")+5*INDIRECT(\"\"BE22\"\")+6*INDIRECT(\"\"BM22\"\")\"\n\"INDIRECT(\"\"Z22\"\")+2*INDIRECT(\"\"AH22\"\")+3*INDIRECT(\"\"AP22\"\")+4*INDIRECT(\"\"AX22\"\")+5*INDIRECT(\"\"BF22\"\")+6*INDIRECT(\"\"BN22\"\")\"\n\"INDIRECT(\"\"AA22\"\")+2*INDIRECT(\"\"AI22\"\")+3*INDIRECT(\"\"AQ22\"\")+4*INDIRECT(\"\"AY22\"\")+5*INDIRECT(\"\"BG22\"\")+6*INDIRECT(\"\"BO22\"\")\"\n\"INDIRECT(\"\"T22\"\")+2*INDIRECT(\"\"U22\"\")+3*INDIRECT(\"\"V22\"\")+4*INDIRECT(\"\"W22\"\")+5*INDIRECT(\"\"X22\"\")+6*INDIRECT(\"\"Y22\"\")+7*INDIRECT(\"\"Z22\"\")+8*INDIRECT(\"\"AA22\"\")\"\n\"INDIRECT(\"\"AB22\"\")+2*INDIRECT(\"\"AC22\"\")+3*INDIRECT(\"\"AD22\"\")+4*INDIRECT(\"\"AE22\"\")+5*INDIRECT(\"\"AF22\"\")+6*INDIRECT(\"\"AG22\"\")+7*INDIRECT(\"\"AH22\"\")+8*INDIRECT(\"\"AI22\"\")\"\n\"INDIRECT(\"\"AJ22\"\")+2*INDIRECT(\"\"AK22\"\")+3*INDIRECT(\"\"AL22\"\")+4*INDIRECT(\"\"AM22\"\")+5*INDIRECT(\"\"AN22\"\")+6*INDIRECT(\"\"AO22\"\")+7*INDIRECT(\"\"AP22\"\")+8*INDIRECT(\"\"AQ22\"\")\"\n\"INDIRECT(\"\"AR22\"\")+2*INDIRECT(\"\"AS22\"\")+3*INDIRECT(\"\"AT22\"\")+4*INDIRECT(\"\"AU22\"\")+5*INDIRECT(\"\"AV22\"\")+6*INDIRECT(\"\"AW22\"\")+7*INDIRECT(\"\"AX22\"\")+8*INDIRECT(\"\"AY22\"\")\"\n\"INDIRECT(\"\"AZ22\"\")+2*INDIRECT(\"\"BA22\"\")+3*INDIRECT(\"\"BB22\"\")+4*INDIRECT(\"\"BC22\"\")+5*INDIRECT(\"\"BD22\"\")+6*INDIRECT(\"\"BE22\"\")+7*INDIRECT(\"\"BF22\"\")+8*INDIRECT(\"\"BG22\"\")\"\n\"INDIRECT(\"\"BH22\"\")+2*INDIRECT(\"\"BI22\"\")+3*INDIRECT(\"\"BJ22\"\")+4*INDIRECT(\"\"BK22\"\")+5*INDIRECT(\"\"BL22\"\")+6*INDIRECT(\"\"BM22\"\")+7*INDIRECT(\"\"BN22\"\")+8*INDIRECT(\"\"BO22\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l72.xls\"\",\"\"3L72\"\")\"\n\"INDIRECT(\"\"T25\"\")+INDIRECT(\"\"AB25\"\")+INDIRECT(\"\"AJ25\"\")+INDIRECT(\"\"AR25\"\")+INDIRECT(\"\"AZ25\"\")+INDIRECT(\"\"BH25\"\")\"\n\"INDIRECT(\"\"U25\"\")+INDIRECT(\"\"AC25\"\")+INDIRECT(\"\"AK25\"\")+INDIRECT(\"\"AS25\"\")+INDIRECT(\"\"BA25\"\")+INDIRECT(\"\"BI25\"\")\"\n\"INDIRECT(\"\"V25\"\")+INDIRECT(\"\"AD25\"\")+INDIRECT(\"\"AL25\"\")+INDIRECT(\"\"AT25\"\")+INDIRECT(\"\"BB25\"\")+INDIRECT(\"\"BJ25\"\")\"\n\"INDIRECT(\"\"W25\"\")+INDIRECT(\"\"AE25\"\")+INDIRECT(\"\"AM25\"\")+INDIRECT(\"\"AU25\"\")+INDIRECT(\"\"BC25\"\")+INDIRECT(\"\"BK25\"\")\"\n\"INDIRECT(\"\"X25\"\")+INDIRECT(\"\"AF25\"\")+INDIRECT(\"\"AN25\"\")+INDIRECT(\"\"AV25\"\")+INDIRECT(\"\"BD25\"\")+INDIRECT(\"\"BL25\"\")\"\n\"INDIRECT(\"\"Y25\"\")+INDIRECT(\"\"AG25\"\")+INDIRECT(\"\"AO25\"\")+INDIRECT(\"\"AW25\"\")+INDIRECT(\"\"BE25\"\")+INDIRECT(\"\"BM25\"\")\"\n\"INDIRECT(\"\"Z25\"\")+INDIRECT(\"\"AH25\"\")+INDIRECT(\"\"AP25\"\")+INDIRECT(\"\"AX25\"\")+INDIRECT(\"\"BF25\"\")+INDIRECT(\"\"BN25\"\")\"\n\"INDIRECT(\"\"AA25\"\")+INDIRECT(\"\"AI25\"\")+INDIRECT(\"\"AQ25\"\")+INDIRECT(\"\"AY25\"\")+INDIRECT(\"\"BG25\"\")+INDIRECT(\"\"BO25\"\")\"\n\"INDIRECT(\"\"T25\"\")+INDIRECT(\"\"U25\"\")+INDIRECT(\"\"V25\"\")+INDIRECT(\"\"W25\"\")+INDIRECT(\"\"X25\"\")+INDIRECT(\"\"Y25\"\")+INDIRECT(\"\"Z25\"\")+INDIRECT(\"\"AA25\"\")\"\n\"INDIRECT(\"\"AB25\"\")+INDIRECT(\"\"AC25\"\")+INDIRECT(\"\"AD25\"\")+INDIRECT(\"\"AE25\"\")+INDIRECT(\"\"AF25\"\")+INDIRECT(\"\"AG25\"\")+INDIRECT(\"\"AH25\"\")+INDIRECT(\"\"AI25\"\")\"\n\"INDIRECT(\"\"AJ25\"\")+INDIRECT(\"\"AK25\"\")+INDIRECT(\"\"AL25\"\")+INDIRECT(\"\"AM25\"\")+INDIRECT(\"\"AN25\"\")+INDIRECT(\"\"AO25\"\")+INDIRECT(\"\"AP25\"\")+INDIRECT(\"\"AQ25\"\")\"\n\"INDIRECT(\"\"AR25\"\")+INDIRECT(\"\"AS25\"\")+INDIRECT(\"\"AT25\"\")+INDIRECT(\"\"AU25\"\")+INDIRECT(\"\"AV25\"\")+INDIRECT(\"\"AW25\"\")+INDIRECT(\"\"AX25\"\")+INDIRECT(\"\"AY25\"\")\"\n\"INDIRECT(\"\"AZ25\"\")+INDIRECT(\"\"BA25\"\")+INDIRECT(\"\"BB25\"\")+INDIRECT(\"\"BC25\"\")+INDIRECT(\"\"BD25\"\")+INDIRECT(\"\"BE25\"\")+INDIRECT(\"\"BF25\"\")+INDIRECT(\"\"BG25\"\")\"\n\"INDIRECT(\"\"BH25\"\")+INDIRECT(\"\"BI25\"\")+INDIRECT(\"\"BJ25\"\")+INDIRECT(\"\"BK25\"\")+INDIRECT(\"\"BL25\"\")+INDIRECT(\"\"BM25\"\")+INDIRECT(\"\"BN25\"\")+INDIRECT(\"\"BO25\"\")\"\n\"INDIRECT(\"\"T25\"\")+2*INDIRECT(\"\"AB25\"\")+3*INDIRECT(\"\"AJ25\"\")+4*INDIRECT(\"\"AR25\"\")+5*INDIRECT(\"\"AZ25\"\")+6*INDIRECT(\"\"BH25\"\")\"\n\"INDIRECT(\"\"U25\"\")+2*INDIRECT(\"\"AC25\"\")+3*INDIRECT(\"\"AK25\"\")+4*INDIRECT(\"\"AS25\"\")+5*INDIRECT(\"\"BA25\"\")+6*INDIRECT(\"\"BI25\"\")\"\n\"INDIRECT(\"\"V25\"\")+2*INDIRECT(\"\"AD25\"\")+3*INDIRECT(\"\"AL25\"\")+4*INDIRECT(\"\"AT25\"\")+5*INDIRECT(\"\"BB25\"\")+6*INDIRECT(\"\"BJ25\"\")\"\n\"INDIRECT(\"\"W25\"\")+2*INDIRECT(\"\"AE25\"\")+3*INDIRECT(\"\"AM25\"\")+4*INDIRECT(\"\"AU25\"\")+5*INDIRECT(\"\"BC25\"\")+6*INDIRECT(\"\"BK25\"\")\"\n\"INDIRECT(\"\"X25\"\")+2*INDIRECT(\"\"AF25\"\")+3*INDIRECT(\"\"AN25\"\")+4*INDIRECT(\"\"AV25\"\")+5*INDIRECT(\"\"BD25\"\")+6*INDIRECT(\"\"BL25\"\")\"\n\"INDIRECT(\"\"Y25\"\")+2*INDIRECT(\"\"AG25\"\")+3*INDIRECT(\"\"AO25\"\")+4*INDIRECT(\"\"AW25\"\")+5*INDIRECT(\"\"BE25\"\")+6*INDIRECT(\"\"BM25\"\")\"\n\"INDIRECT(\"\"Z25\"\")+2*INDIRECT(\"\"AH25\"\")+3*INDIRECT(\"\"AP25\"\")+4*INDIRECT(\"\"AX25\"\")+5*INDIRECT(\"\"BF25\"\")+6*INDIRECT(\"\"BN25\"\")\"\n\"INDIRECT(\"\"AA25\"\")+2*INDIRECT(\"\"AI25\"\")+3*INDIRECT(\"\"AQ25\"\")+4*INDIRECT(\"\"AY25\"\")+5*INDIRECT(\"\"BG25\"\")+6*INDIRECT(\"\"BO25\"\")\"\n\"INDIRECT(\"\"T25\"\")+2*INDIRECT(\"\"U25\"\")+3*INDIRECT(\"\"V25\"\")+4*INDIRECT(\"\"W25\"\")+5*INDIRECT(\"\"X25\"\")+6*INDIRECT(\"\"Y25\"\")+7*INDIRECT(\"\"Z25\"\")+8*INDIRECT(\"\"AA25\"\")\"\n\"INDIRECT(\"\"AB25\"\")+2*INDIRECT(\"\"AC25\"\")+3*INDIRECT(\"\"AD25\"\")+4*INDIRECT(\"\"AE25\"\")+5*INDIRECT(\"\"AF25\"\")+6*INDIRECT(\"\"AG25\"\")+7*INDIRECT(\"\"AH25\"\")+8*INDIRECT(\"\"AI25\"\")\"\n\"INDIRECT(\"\"AJ25\"\")+2*INDIRECT(\"\"AK25\"\")+3*INDIRECT(\"\"AL25\"\")+4*INDIRECT(\"\"AM25\"\")+5*INDIRECT(\"\"AN25\"\")+6*INDIRECT(\"\"AO25\"\")+7*INDIRECT(\"\"AP25\"\")+8*INDIRECT(\"\"AQ25\"\")\"\n\"INDIRECT(\"\"AR25\"\")+2*INDIRECT(\"\"AS25\"\")+3*INDIRECT(\"\"AT25\"\")+4*INDIRECT(\"\"AU25\"\")+5*INDIRECT(\"\"AV25\"\")+6*INDIRECT(\"\"AW25\"\")+7*INDIRECT(\"\"AX25\"\")+8*INDIRECT(\"\"AY25\"\")\"\n\"INDIRECT(\"\"AZ25\"\")+2*INDIRECT(\"\"BA25\"\")+3*INDIRECT(\"\"BB25\"\")+4*INDIRECT(\"\"BC25\"\")+5*INDIRECT(\"\"BD25\"\")+6*INDIRECT(\"\"BE25\"\")+7*INDIRECT(\"\"BF25\"\")+8*INDIRECT(\"\"BG25\"\")\"\n\"INDIRECT(\"\"BH25\"\")+2*INDIRECT(\"\"BI25\"\")+3*INDIRECT(\"\"BJ25\"\")+4*INDIRECT(\"\"BK25\"\")+5*INDIRECT(\"\"BL25\"\")+6*INDIRECT(\"\"BM25\"\")+7*INDIRECT(\"\"BN25\"\")+8*INDIRECT(\"\"BO25\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l73.xls\"\",\"\"3L73\"\")\"\n\"INDIRECT(\"\"T28\"\")+INDIRECT(\"\"AB28\"\")+INDIRECT(\"\"AJ28\"\")+INDIRECT(\"\"AR28\"\")+INDIRECT(\"\"AZ28\"\")+INDIRECT(\"\"BH28\"\")\"\n\"INDIRECT(\"\"U28\"\")+INDIRECT(\"\"AC28\"\")+INDIRECT(\"\"AK28\"\")+INDIRECT(\"\"AS28\"\")+INDIRECT(\"\"BA28\"\")+INDIRECT(\"\"BI28\"\")\"\n\"INDIRECT(\"\"V28\"\")+INDIRECT(\"\"AD28\"\")+INDIRECT(\"\"AL28\"\")+INDIRECT(\"\"AT28\"\")+INDIRECT(\"\"BB28\"\")+INDIRECT(\"\"BJ28\"\")\"\n\"INDIRECT(\"\"W28\"\")+INDIRECT(\"\"AE28\"\")+INDIRECT(\"\"AM28\"\")+INDIRECT(\"\"AU28\"\")+INDIRECT(\"\"BC28\"\")+INDIRECT(\"\"BK28\"\")\"\n\"INDIRECT(\"\"X28\"\")+INDIRECT(\"\"AF28\"\")+INDIRECT(\"\"AN28\"\")+INDIRECT(\"\"AV28\"\")+INDIRECT(\"\"BD28\"\")+INDIRECT(\"\"BL28\"\")\"\n\"INDIRECT(\"\"Y28\"\")+INDIRECT(\"\"AG28\"\")+INDIRECT(\"\"AO28\"\")+INDIRECT(\"\"AW28\"\")+INDIRECT(\"\"BE28\"\")+INDIRECT(\"\"BM28\"\")\"\n\"INDIRECT(\"\"Z28\"\")+INDIRECT(\"\"AH28\"\")+INDIRECT(\"\"AP28\"\")+INDIRECT(\"\"AX28\"\")+INDIRECT(\"\"BF28\"\")+INDIRECT(\"\"BN28\"\")\"\n\"INDIRECT(\"\"AA28\"\")+INDIRECT(\"\"AI28\"\")+INDIRECT(\"\"AQ28\"\")+INDIRECT(\"\"AY28\"\")+INDIRECT(\"\"BG28\"\")+INDIRECT(\"\"BO28\"\")\"\n\"INDIRECT(\"\"T28\"\")+INDIRECT(\"\"U28\"\")+INDIRECT(\"\"V28\"\")+INDIRECT(\"\"W28\"\")+INDIRECT(\"\"X28\"\")+INDIRECT(\"\"Y28\"\")+INDIRECT(\"\"Z28\"\")+INDIRECT(\"\"AA28\"\")\"\n\"INDIRECT(\"\"AB28\"\")+INDIRECT(\"\"AC28\"\")+INDIRECT(\"\"AD28\"\")+INDIRECT(\"\"AE28\"\")+INDIRECT(\"\"AF28\"\")+INDIRECT(\"\"AG28\"\")+INDIRECT(\"\"AH28\"\")+INDIRECT(\"\"AI28\"\")\"\n\"INDIRECT(\"\"AJ28\"\")+INDIRECT(\"\"AK28\"\")+INDIRECT(\"\"AL28\"\")+INDIRECT(\"\"AM28\"\")+INDIRECT(\"\"AN28\"\")+INDIRECT(\"\"AO28\"\")+INDIRECT(\"\"AP28\"\")+INDIRECT(\"\"AQ28\"\")\"\n\"INDIRECT(\"\"AR28\"\")+INDIRECT(\"\"AS28\"\")+INDIRECT(\"\"AT28\"\")+INDIRECT(\"\"AU28\"\")+INDIRECT(\"\"AV28\"\")+INDIRECT(\"\"AW28\"\")+INDIRECT(\"\"AX28\"\")+INDIRECT(\"\"AY28\"\")\"\n\"INDIRECT(\"\"AZ28\"\")+INDIRECT(\"\"BA28\"\")+INDIRECT(\"\"BB28\"\")+INDIRECT(\"\"BC28\"\")+INDIRECT(\"\"BD28\"\")+INDIRECT(\"\"BE28\"\")+INDIRECT(\"\"BF28\"\")+INDIRECT(\"\"BG28\"\")\"\n\"INDIRECT(\"\"BH28\"\")+INDIRECT(\"\"BI28\"\")+INDIRECT(\"\"BJ28\"\")+INDIRECT(\"\"BK28\"\")+INDIRECT(\"\"BL28\"\")+INDIRECT(\"\"BM28\"\")+INDIRECT(\"\"BN28\"\")+INDIRECT(\"\"BO28\"\")\"\n\"INDIRECT(\"\"T28\"\")+2*INDIRECT(\"\"AB28\"\")+3*INDIRECT(\"\"AJ28\"\")+4*INDIRECT(\"\"AR28\"\")+5*INDIRECT(\"\"AZ28\"\")+6*INDIRECT(\"\"BH28\"\")\"\n\"INDIRECT(\"\"U28\"\")+2*INDIRECT(\"\"AC28\"\")+3*INDIRECT(\"\"AK28\"\")+4*INDIRECT(\"\"AS28\"\")+5*INDIRECT(\"\"BA28\"\")+6*INDIRECT(\"\"BI28\"\")\"\n\"INDIRECT(\"\"V28\"\")+2*INDIRECT(\"\"AD28\"\")+3*INDIRECT(\"\"AL28\"\")+4*INDIRECT(\"\"AT28\"\")+5*INDIRECT(\"\"BB28\"\")+6*INDIRECT(\"\"BJ28\"\")\"\n\"INDIRECT(\"\"W28\"\")+2*INDIRECT(\"\"AE28\"\")+3*INDIRECT(\"\"AM28\"\")+4*INDIRECT(\"\"AU28\"\")+5*INDIRECT(\"\"BC28\"\")+6*INDIRECT(\"\"BK28\"\")\"\n\"INDIRECT(\"\"X28\"\")+2*INDIRECT(\"\"AF28\"\")+3*INDIRECT(\"\"AN28\"\")+4*INDIRECT(\"\"AV28\"\")+5*INDIRECT(\"\"BD28\"\")+6*INDIRECT(\"\"BL28\"\")\"\n\"INDIRECT(\"\"Y28\"\")+2*INDIRECT(\"\"AG28\"\")+3*INDIRECT(\"\"AO28\"\")+4*INDIRECT(\"\"AW28\"\")+5*INDIRECT(\"\"BE28\"\")+6*INDIRECT(\"\"BM28\"\")\"\n\"INDIRECT(\"\"Z28\"\")+2*INDIRECT(\"\"AH28\"\")+3*INDIRECT(\"\"AP28\"\")+4*INDIRECT(\"\"AX28\"\")+5*INDIRECT(\"\"BF28\"\")+6*INDIRECT(\"\"BN28\"\")\"\n\"INDIRECT(\"\"AA28\"\")+2*INDIRECT(\"\"AI28\"\")+3*INDIRECT(\"\"AQ28\"\")+4*INDIRECT(\"\"AY28\"\")+5*INDIRECT(\"\"BG28\"\")+6*INDIRECT(\"\"BO28\"\")\"\n\"INDIRECT(\"\"T28\"\")+2*INDIRECT(\"\"U28\"\")+3*INDIRECT(\"\"V28\"\")+4*INDIRECT(\"\"W28\"\")+5*INDIRECT(\"\"X28\"\")+6*INDIRECT(\"\"Y28\"\")+7*INDIRECT(\"\"Z28\"\")+8*INDIRECT(\"\"AA28\"\")\"\n\"INDIRECT(\"\"AB28\"\")+2*INDIRECT(\"\"AC28\"\")+3*INDIRECT(\"\"AD28\"\")+4*INDIRECT(\"\"AE28\"\")+5*INDIRECT(\"\"AF28\"\")+6*INDIRECT(\"\"AG28\"\")+7*INDIRECT(\"\"AH28\"\")+8*INDIRECT(\"\"AI28\"\")\"\n\"INDIRECT(\"\"AJ28\"\")+2*INDIRECT(\"\"AK28\"\")+3*INDIRECT(\"\"AL28\"\")+4*INDIRECT(\"\"AM28\"\")+5*INDIRECT(\"\"AN28\"\")+6*INDIRECT(\"\"AO28\"\")+7*INDIRECT(\"\"AP28\"\")+8*INDIRECT(\"\"AQ28\"\")\"\n\"INDIRECT(\"\"AR28\"\")+2*INDIRECT(\"\"AS28\"\")+3*INDIRECT(\"\"AT28\"\")+4*INDIRECT(\"\"AU28\"\")+5*INDIRECT(\"\"AV28\"\")+6*INDIRECT(\"\"AW28\"\")+7*INDIRECT(\"\"AX28\"\")+8*INDIRECT(\"\"AY28\"\")\"\n\"INDIRECT(\"\"AZ28\"\")+2*INDIRECT(\"\"BA28\"\")+3*INDIRECT(\"\"BB28\"\")+4*INDIRECT(\"\"BC28\"\")+5*INDIRECT(\"\"BD28\"\")+6*INDIRECT(\"\"BE28\"\")+7*INDIRECT(\"\"BF28\"\")+8*INDIRECT(\"\"BG28\"\")\"\n\"INDIRECT(\"\"BH28\"\")+2*INDIRECT(\"\"BI28\"\")+3*INDIRECT(\"\"BJ28\"\")+4*INDIRECT(\"\"BK28\"\")+5*INDIRECT(\"\"BL28\"\")+6*INDIRECT(\"\"BM28\"\")+7*INDIRECT(\"\"BN28\"\")+8*INDIRECT(\"\"BO28\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-3l74.xls\"\",\"\"3L74\"\")\"\n\"INDIRECT(\"\"T31\"\")+INDIRECT(\"\"AB31\"\")+INDIRECT(\"\"AJ31\"\")+INDIRECT(\"\"AR31\"\")+INDIRECT(\"\"AZ31\"\")+INDIRECT(\"\"BH31\"\")\"\n\"INDIRECT(\"\"U31\"\")+INDIRECT(\"\"AC31\"\")+INDIRECT(\"\"AK31\"\")+INDIRECT(\"\"AS31\"\")+INDIRECT(\"\"BA31\"\")+INDIRECT(\"\"BI31\"\")\"\n\"INDIRECT(\"\"V31\"\")+INDIRECT(\"\"AD31\"\")+INDIRECT(\"\"AL31\"\")+INDIRECT(\"\"AT31\"\")+INDIRECT(\"\"BB31\"\")+INDIRECT(\"\"BJ31\"\")\"\n\"INDIRECT(\"\"W31\"\")+INDIRECT(\"\"AE31\"\")+INDIRECT(\"\"AM31\"\")+INDIRECT(\"\"AU31\"\")+INDIRECT(\"\"BC31\"\")+INDIRECT(\"\"BK31\"\")\"\n\"INDIRECT(\"\"X31\"\")+INDIRECT(\"\"AF31\"\")+INDIRECT(\"\"AN31\"\")+INDIRECT(\"\"AV31\"\")+INDIRECT(\"\"BD31\"\")+INDIRECT(\"\"BL31\"\")\"\n\"INDIRECT(\"\"Y31\"\")+INDIRECT(\"\"AG31\"\")+INDIRECT(\"\"AO31\"\")+INDIRECT(\"\"AW31\"\")+INDIRECT(\"\"BE31\"\")+INDIRECT(\"\"BM31\"\")\"\n\"INDIRECT(\"\"Z31\"\")+INDIRECT(\"\"AH31\"\")+INDIRECT(\"\"AP31\"\")+INDIRECT(\"\"AX31\"\")+INDIRECT(\"\"BF31\"\")+INDIRECT(\"\"BN31\"\")\"\n\"INDIRECT(\"\"AA31\"\")+INDIRECT(\"\"AI31\"\")+INDIRECT(\"\"AQ31\"\")+INDIRECT(\"\"AY31\"\")+INDIRECT(\"\"BG31\"\")+INDIRECT(\"\"BO31\"\")\"\n\"INDIRECT(\"\"T31\"\")+INDIRECT(\"\"U31\"\")+INDIRECT(\"\"V31\"\")+INDIRECT(\"\"W31\"\")+INDIRECT(\"\"X31\"\")+INDIRECT(\"\"Y31\"\")+INDIRECT(\"\"Z31\"\")+INDIRECT(\"\"AA31\"\")\"\n\"INDIRECT(\"\"AB31\"\")+INDIRECT(\"\"AC31\"\")+INDIRECT(\"\"AD31\"\")+INDIRECT(\"\"AE31\"\")+INDIRECT(\"\"AF31\"\")+INDIRECT(\"\"AG31\"\")+INDIRECT(\"\"AH31\"\")+INDIRECT(\"\"AI31\"\")\"\n\"INDIRECT(\"\"AJ31\"\")+INDIRECT(\"\"AK31\"\")+INDIRECT(\"\"AL31\"\")+INDIRECT(\"\"AM31\"\")+INDIRECT(\"\"AN31\"\")+INDIRECT(\"\"AO31\"\")+INDIRECT(\"\"AP31\"\")+INDIRECT(\"\"AQ31\"\")\"\n\"INDIRECT(\"\"AR31\"\")+INDIRECT(\"\"AS31\"\")+INDIRECT(\"\"AT31\"\")+INDIRECT(\"\"AU31\"\")+INDIRECT(\"\"AV31\"\")+INDIRECT(\"\"AW31\"\")+INDIRECT(\"\"AX31\"\")+INDIRECT(\"\"AY31\"\")\"\n\"INDIRECT(\"\"AZ31\"\")+INDIRECT(\"\"BA31\"\")+INDIRECT(\"\"BB31\"\")+INDIRECT(\"\"BC31\"\")+INDIRECT(\"\"BD31\"\")+INDIRECT(\"\"BE31\"\")+INDIRECT(\"\"BF31\"\")+INDIRECT(\"\"BG31\"\")\"\n\"INDIRECT(\"\"BH31\"\")+INDIRECT(\"\"BI31\"\")+INDIRECT(\"\"BJ31\"\")+INDIRECT(\"\"BK31\"\")+INDIRECT(\"\"BL31\"\")+INDIRECT(\"\"BM31\"\")+INDIRECT(\"\"BN31\"\")+INDIRECT(\"\"BO31\"\")\"\n\"INDIRECT(\"\"T31\"\")+2*INDIRECT(\"\"AB31\"\")+3*INDIRECT(\"\"AJ31\"\")+4*INDIRECT(\"\"AR31\"\")+5*INDIRECT(\"\"AZ31\"\")+6*INDIRECT(\"\"BH31\"\")\"\n\"INDIRECT(\"\"U31\"\")+2*INDIRECT(\"\"AC31\"\")+3*INDIRECT(\"\"AK31\"\")+4*INDIRECT(\"\"AS31\"\")+5*INDIRECT(\"\"BA31\"\")+6*INDIRECT(\"\"BI31\"\")\"\n\"INDIRECT(\"\"V31\"\")+2*INDIRECT(\"\"AD31\"\")+3*INDIRECT(\"\"AL31\"\")+4*INDIRECT(\"\"AT31\"\")+5*INDIRECT(\"\"BB31\"\")+6*INDIRECT(\"\"BJ31\"\")\"\n\"INDIRECT(\"\"W31\"\")+2*INDIRECT(\"\"AE31\"\")+3*INDIRECT(\"\"AM31\"\")+4*INDIRECT(\"\"AU31\"\")+5*INDIRECT(\"\"BC31\"\")+6*INDIRECT(\"\"BK31\"\")\"\n\"INDIRECT(\"\"X31\"\")+2*INDIRECT(\"\"AF31\"\")+3*INDIRECT(\"\"AN31\"\")+4*INDIRECT(\"\"AV31\"\")+5*INDIRECT(\"\"BD31\"\")+6*INDIRECT(\"\"BL31\"\")\"\n\"INDIRECT(\"\"Y31\"\")+2*INDIRECT(\"\"AG31\"\")+3*INDIRECT(\"\"AO31\"\")+4*INDIRECT(\"\"AW31\"\")+5*INDIRECT(\"\"BE31\"\")+6*INDIRECT(\"\"BM31\"\")\"\n\"INDIRECT(\"\"Z31\"\")+2*INDIRECT(\"\"AH31\"\")+3*INDIRECT(\"\"AP31\"\")+4*INDIRECT(\"\"AX31\"\")+5*INDIRECT(\"\"BF31\"\")+6*INDIRECT(\"\"BN31\"\")\"\n\"INDIRECT(\"\"AA31\"\")+2*INDIRECT(\"\"AI31\"\")+3*INDIRECT(\"\"AQ31\"\")+4*INDIRECT(\"\"AY31\"\")+5*INDIRECT(\"\"BG31\"\")+6*INDIRECT(\"\"BO31\"\")\"\n\"INDIRECT(\"\"T31\"\")+2*INDIRECT(\"\"U31\"\")+3*INDIRECT(\"\"V31\"\")+4*INDIRECT(\"\"W31\"\")+5*INDIRECT(\"\"X31\"\")+6*INDIRECT(\"\"Y31\"\")+7*INDIRECT(\"\"Z31\"\")+8*INDIRECT(\"\"AA31\"\")\"\n\"INDIRECT(\"\"AB31\"\")+2*INDIRECT(\"\"AC31\"\")+3*INDIRECT(\"\"AD31\"\")+4*INDIRECT(\"\"AE31\"\")+5*INDIRECT(\"\"AF31\"\")+6*INDIRECT(\"\"AG31\"\")+7*INDIRECT(\"\"AH31\"\")+8*INDIRECT(\"\"AI31\"\")\"\n\"INDIRECT(\"\"AJ31\"\")+2*INDIRECT(\"\"AK31\"\")+3*INDIRECT(\"\"AL31\"\")+4*INDIRECT(\"\"AM31\"\")+5*INDIRECT(\"\"AN31\"\")+6*INDIRECT(\"\"AO31\"\")+7*INDIRECT(\"\"AP31\"\")+8*INDIRECT(\"\"AQ31\"\")\"\n\"INDIRECT(\"\"AR31\"\")+2*INDIRECT(\"\"AS31\"\")+3*INDIRECT(\"\"AT31\"\")+4*INDIRECT(\"\"AU31\"\")+5*INDIRECT(\"\"AV31\"\")+6*INDIRECT(\"\"AW31\"\")+7*INDIRECT(\"\"AX31\"\")+8*INDIRECT(\"\"AY31\"\")\"\n\"INDIRECT(\"\"AZ31\"\")+2*INDIRECT(\"\"BA31\"\")+3*INDIRECT(\"\"BB31\"\")+4*INDIRECT(\"\"BC31\"\")+5*INDIRECT(\"\"BD31\"\")+6*INDIRECT(\"\"BE31\"\")+7*INDIRECT(\"\"BF31\"\")+8*INDIRECT(\"\"BG31\"\")\"\n\"INDIRECT(\"\"BH31\"\")+2*INDIRECT(\"\"BI31\"\")+3*INDIRECT(\"\"BJ31\"\")+4*INDIRECT(\"\"BK31\"\")+5*INDIRECT(\"\"BL31\"\")+6*INDIRECT(\"\"BM31\"\")+7*INDIRECT(\"\"BN31\"\")+8*INDIRECT(\"\"BO31\"\")\"\n\"HYPERLINK(\"\"http://www.dot.ca.gov/hq/transprog/stip2004/ff_sheets/03-0092b.xls\"\",\"\"0092B\"\")\"\n\"INDIRECT(\"\"T34\"\")+INDIRECT(\"\"AB34\"\")+INDIRECT(\"\"AJ34\"\")+INDIRECT(\"\"AR34\"\")+INDIRECT(\"\"AZ34\"\")+INDIRECT(\"\"BH34\"\")\"\n\"INDIRECT(\"\"U34\"\")+INDIRECT(\"\"AC34\"\")+INDIRECT(\"\"AK34\"\")+INDIRECT(\"\"AS34\"\")+INDIRECT(\"\"BA34\"\")+INDIRECT(\"\"BI34\"\")\"\n\"INDIRECT(\"\"V34\"\")+INDIRECT(\"\"AD34\"\")+INDIRECT(\"\"AL34\"\")+INDIRECT(\"\"AT34\"\")+INDIRECT(\"\"BB34\"\")+INDIRECT(\"\"BJ34\"\")\"\n\"INDIRECT(\"\"W34\"\")+INDIRECT(\"\"AE34\"\")+INDIRECT(\"\"AM34\"\")+INDIRECT(\"\"AU34\"\")+INDIRECT(\"\"BC34\"\")+INDIRECT(\"\"BK34\"\")\"\n\"INDIRECT(\"\"X34\"\")+INDIRECT(\"\"AF34\"\")+INDIRECT(\"\"AN34\"\")+INDIRECT(\"\"AV34\"\")+INDIRECT(\"\"BD34\"\")+INDIRECT(\"\"BL34\"\")\"\n\"INDIRECT(\"\"Y34\"\")+INDIRECT(\"\"AG34\"\")+INDIRECT(\"\"AO34\"\")+INDIRECT(\"\"AW34\"\")+INDIRECT(\"\"BE34\"\")+INDIRECT(\"\"BM34\"\")\"\n\"INDIRECT(\"\"Z34\"\")+INDIRECT(\"\"AH34\"\")+INDIRECT(\"\"AP34\"\")+INDIRECT(\"\"AX34\"\")+INDIRECT(\"\"BF34\"\")+INDIRECT(\"\"BN34\"\")\"\n\"INDIRECT(\"\"AA34\"\")+INDIRECT(\"\"AI34\"\")+INDIRECT(\"\"AQ34\"\")+INDIRECT(\"\"AY34\"\")+INDIRECT(\"\"BG34\"\")+INDIRECT(\"\"BO34\"\")\"\n\"INDIRECT(\"\"T34\"\")+INDIRECT(\"\"U34\"\")+INDIRECT(\"\"V34\"\")+INDIRECT(\"\"W34\"\")+INDIRECT(\"\"X34\"\")+INDIRECT(\"\"Y34\"\")+INDIRECT(\"\"Z34\"\")+INDIRECT(\"\"AA34\"\")\"\n\"INDIRECT(\"\"AB34\"\")+INDIRECT(\"\"AC34\"\")+INDIRECT(\"\"AD34\"\")+INDIRECT(\"\"AE34\"\")+INDIRECT(\"\"AF34\"\")+INDIRECT(\"\"AG34\"\")+INDIRECT(\"\"AH34\"\")+INDIRECT(\"\"AI34\"\")\"\n\"INDIRECT(\"\"AJ34\"\")+INDIRECT(\"\"AK34\"\")+INDIRECT(\"\"AL34\"\")+INDIRECT(\"\"AM34\"\")+INDIRECT(\"\"AN34\"\")+INDIRECT(\"\"AO34\"\")+INDIRECT(\"\"AP34\"\")+INDIRECT(\"\"AQ34\"\")\"\n\"INDIRECT(\"\"AR34\"\")+INDIRECT(\"\"AS34\"\")+INDIRECT(\"\"AT34\"\")+INDIRECT(\"\"AU34\"\")+INDIRECT(\"\"AV34\"\")+INDIRECT(\"\"AW34\"\")+INDIRECT(\"\"AX34\"\")+INDIRECT(\"\"AY34\"\")\"\n\"INDIRECT(\"\"AZ34\"\")+INDIRECT(\"\"BA34\"\")+INDIRECT(\"\"BB34\"\")+INDIRECT(\"\"BC34\"\")+INDIRECT(\"\"BD34\"\")+INDIRECT(\"\"BE34\"\")+INDIRECT(\"\"BF34\"\")+INDIRECT(\"\"BG34\"\")\"\n\"INDIRECT(\"\"BH34\"\")+INDIRECT(\"\"BI34\"\")+INDIRECT(\"\"BJ34\"\")+INDIRECT(\"\"BK34\"\")+INDIRECT(\"\"BL34\"\")+INDIRECT(\"\"BM34\"\")+INDIRECT(\"\"BN34\"\")+INDIRECT(\"\"BO34\"\")\"\n\"INDIRECT(\"\"T34\"\")+2*INDIRECT(\"\"AB34\"\")+3*INDIRECT(\"\"AJ34\"\")+4*INDIRECT(\"\"AR34\"\")+5*INDIRECT(\"\"AZ34\"\")+6*INDIRECT(\"\"BH34\"\")\"\n\"INDIRECT(\"\"U34\"\")+2*INDIRECT(\"\"AC34\"\")+3*INDIRECT(\"\"AK34\"\")+4*INDIRECT(\"\"AS34\"\")+5*INDIRECT(\"\"BA34\"\")+6*INDIRECT(\"\"BI34\"\")\"\n\"INDIRECT(\"\"V34\"\")+2*INDIRECT(\"\"AD34\"\")+3*INDIRECT(\"\"AL34\"\")+4*INDIRECT(\"\"AT34\"\")+5*INDIRECT(\"\"BB34\"\")+6*INDIRECT(\"\"BJ34\"\")\"\n\"INDIRECT(\"\"W34\"\")+2*INDIRECT(\"\"AE34\"\")+3*INDIRECT(\"\"AM34\"\")+4*INDIRECT(\"\"AU34\"\")+5*INDIRECT(\"\"BC34\"\")+6*INDIRECT(\"\"BK34\"\")\"\n\"INDIRECT(\"\"X34\"\")+2*INDIRECT(\"\"AF34\"\")+3*INDIRECT(\"\"AN34\"\")+4*INDIRECT(\"\"AV34\"\")+5*INDIRECT(\"\"BD34\"\")+6*INDIRECT(\"\"BL34\"\")\"\n\"INDIRECT(\"\"Y34\"\")+2*INDIRECT(\"\"AG34\"\")+3*INDIRECT(\"\"AO34\"\")+4*INDIRECT(\"\"AW34\"\")+5*INDIRECT(\"\"BE34\"\")+6*INDIRECT(\"\"BM34\"\")\"\n\"INDIRECT(\"\"Z34\"\")+2*INDIRECT(\"\"AH34\"\")+3*INDIRECT(\"\"AP34\"\")+4*INDIRECT(\"\"AX34\"\")+5*INDIRECT(\"\"BF34\"\")+6*INDIRECT(\"\"BN34\"\")\"\n\"INDIRECT(\"\"AA34\"\")+2*INDIRECT(\"\"AI34\"\")+3*INDIRECT(\"\"AQ34\"\")+4*INDIRECT(\"\"AY34\"\")+5*INDIRECT(\"\"BG34\"\")+6*INDIRECT(\"\"BO34\"\")\"\n\"INDIRECT(\"\"T34\"\")+2*INDIRECT(\"\"U34\"\")+3*INDIRECT(\"\"V34\"\")+4*INDIRECT(\"\"W34\"\")+5*INDIRECT(\"\"X34\"\")+6*INDIRECT(\"\"Y34\"\")+7*INDIRECT(\"\"Z34\"\")+8*INDIRECT(\"\"AA34\"\")\"\n\"INDIRECT(\"\"AB34\"\")+2*INDIRECT(\"\"AC34\"\")+3*INDIRECT(\"\"AD34\"\")+4*INDIRECT(\"\"AE34\"\")+5*INDIRECT(\"\"AF34\"\")+6*INDIRECT(\"\"AG34\"\")+7*INDIRECT(\"\"AH34\"\")+8*INDIRECT(\"\"AI34\"\")\"\n\"INDIRECT(\"\"AJ34\"\")+2*INDIRECT(\"\"AK34\"\")+3*INDIRECT(\"\"AL34\"\")+4*INDIRECT(\"\"AM34\"\")+5*INDIRECT(\"\"AN34\"\")+6*INDIRECT(\"\"AO34\"\")+7*INDIRECT(\"\"AP34\"\")+8*INDIRECT(\"\"AQ34\"\")\"\n\"INDIRECT(\"\"AR34\"\")+2*INDIRECT(\"\"AS34\"\")+3*INDIRECT(\"\"AT34\"\")+4*INDIRECT(\"\"AU34\"\")+5*INDIRECT(\"\"AV34\"\")+6*INDIRECT(\"\"AW34\"\")+7*INDIRECT(\"\"AX34\"\")+8*INDIRECT(\"\"AY34\"\")\"\n\"INDIRECT(\"\"AZ34\"\")+2*INDIRECT(\"\"BA34\"\")+3*INDIRECT(\"\"BB34\"\")+4*INDIRECT(\"\"BC34\"\")+5*INDIRECT(\"\"BD34\"\")+6*INDIRECT(\"\"BE34\"\")+7*INDIRECT(\"\"BF34\"\")+8*INDIRECT(\"\"BG34\"\")\"\n\"INDIRECT(\"\"BH34\"\")+2*INDIRECT(\"\"BI34\"\")+3*INDIRECT(\"\"BJ34\"\")+4*INDIRECT(\"\"BK34\"\")+5*INDIRECT(\"\"BL34\"\")+6*INDIRECT(\"\"BM34\"\")+7*INDIRECT(\"\"BN34\"\")+8*INDIRECT(\"\"BO34\"\")\"\n\"SUMIF($BQ4:$BQ36,\"\"=RIP\"\",F4:F36)\"\n\"SUMIF($BT4:$BT36,\"\"=GARVEE\"\",F4:F36)\"\n\"SUMIF($BR4:$BR36,\"\"=X\"\",F4:F36)\"\n\"SUMIF($BU4:$BU36,\"\"=X\"\",AJ4:AJ36) + SUMIF($BU4:$BU36,\"\"=X\"\",AR4:AR36) + SUMIF($BU4:$BU36,\"\"=X\"\",AZ4:AZ36) + SUMIF($BU4:$BU36,\"\"=X\"\",BH4:BH36)\"\n\"SUMIF($BU4:$BU36,\"\"=X\"\",T4:T36)\"\n\"F39-F40-F41-F42-F43\"\n\"SUM(F44:I44)\"\n\"J44\"\n\"PRODUCT(B2:C2)\"\n\"SUM(D2:D50)\"\n\"D6\"\n\"D6*C3\"\n\"F6*H6\"\n\"D6 + D7\"\n\"C3*D7\"\n\" K7+K6\"\n\"E7 + D8\"\n\" C3*D8\"\n\"K8+L7\"\n\"C3*D9\"\n\"C3*D10\"\n\"SUM(D6:D10)\"\n\" I6 + I7 + I8 + I9 + I10\"\n\"K6+K7+K8+K9+K10\"\n\" J15*L15\"\n\" L8\"\n\"N16-N15\"\n\"IF(M17>=0,M17,0)\"\n\"N17*K18\"\n\"L48\"\n\"H9+H142+H228+H353+H452+H653\"\n\"H10+H20+H38+H54+H66+H78+H102+H108+H127\"\n\"SUM(H11:H19)\"\n\"SUM(H21:H37)\"\n\"SUM(H39:H53)\"\n\"SUM(H55:H65)\"\n\"SUM(H79:H101)\"\n\"SUM(H103:H107)\"\n\"SUM(H109:H126)\"\n\"SUM(H128:H141)\"\n\"H143+H149+H159+H171+H180+H198+H217\"\n\"SUM(H172:H179)\"\n\"SUM(H218:H227)\"\n\"H229+H242+H254+H280+H290+H300+H310+H323+H333+H339+H349\"\n\"SUM(H230:H241)\"\n\"SUM(H255:H279)\"\n\"SUM(H350:H352)\"\n\"H354+H360+H365+H369+H374+H378+H383+H388+H393+H399+H404+H420+H440\"\n\"SUM(H361:H364)\"\n\"SUM(H421:H439)\"\n\"H453+H461+H469+H489+H503+H513+H525+H539+H554+H572+H589+H593+H600+H605+H610+H622+H627+H644\"\n\"SUM(H454:H460)\"\n\"SUM(H490:H502)\"\n\"SUM(H573:H588)\"\n\"SUM(H594:H599)\"\n\"H654+H699+H723+H731+H792+H798+H810+H822\"\n\"SUM(H655:H698)\"\n\"SUM(H732:H791)\"\n\"F11/1000000\"\n\"SUM(C11:D11)\"\n\"B11+C11+D11\"\n\"A11+1\"\n\"(R11-R23)/R11\"\n\"SUM(B46:K46)/1000000\"\n\"SUM(B14:D14)\"\n\"L46-M46\"\n\"N46/L46\"\n\"N55*1000000\"\n\"B55\"\n\"C55\"\n\"D55\"\n\"E55\"\n\"F55\"\n\"G55\"\n\"H55\"\n\"I55\"\n\"J55\"\n\"K55\"\n\"SUM(B60:B70)\"\n\"E4-B4\"\n\"F9/1000000\"\n\"A9+1\"\n\"B4\"\n\"B9\"\n\"[2]Sheet1!$F$39-[2]Sheet1!$F$30-[2]Sheet1!$F$31\"\n\"B16+B10*B19+B11*B20+B12*B21+B13*B22+B14*B23\"\n\"F16+F15*F24\"\n\"SUM(B32:F32)\"\n\"B6*B33\"\n\"G34\"\n\"G34/12\"\n\"[2]Sheet1!$G$224/12\"\n\"D38*D36/12+D40-D41\"\n\"12*D42\"\n\"MAX(0,E38+E42)\"\n\"MIN(E26*[2]Sheet1!$G$12,[2]Sheet1!$F$257*E27/[2]Sheet1!$C$74)\"\n\"0.1*E46\"\n\"[2]Sheet1!$G$8\"\n\"MIN(E46,E47)-E48+E48*[2]Sheet1!$C$75\"\n\"[2]Sheet1!$D$53\"\n\"E52*([2]Sheet1!$C$72+[2]Sheet1!$C$73)\"\n\"[2]Sheet1!$F$259\"\n\"0.9*E52\"\n\"E52+E53+E54-E55\"\n\"MAX(0,B32-B33)\"\n\"B60/B32\"\n\"IF(B61>$E29,B60*B5/1000,0)\"\n\"$E50*B62\"\n\"B63*$E49/$G63\"\n\"B62-B64\"\n\"B65*$E56/$G65\"\n\"B64+B66\"\n\"1000*B67/B5\"\n\"B68+B33\"\n\"B71/B32\"\n\"(B72^(B71/G71))*(C72^(C71/G71))*(D72^(D71/G71))*(F72^(F71/G71))\"\n\"B67\"\n\"[2]Sheet1!$D$52\"\n\"-E77/[2]Sheet1!$G$80\"\n\"G67\"\n\"E77+E78+E79\"\n\"[1]Sheet1!$G$49\"\n\"-E82*[2]Sheet1!$C$75\"\n\"G64\"\n\"E94\"\n\"(1+[2]Sheet1!$C$72+[2]Sheet1!$C$78)*G94\"\n\"E95*E94\"\n\"F95\"\n\"G95*(1+[2]Sheet1!$C$72+0.75*([2]Sheet1!$D$116+[2]Sheet1!$C$116))\"\n\"E96*E94\"\n\"G96*(1+[2]Sheet1!$C$72+0.5*([2]Sheet1!$D$116+[2]Sheet1!$C$116))\"\n\"[3]Initial_Conds!$BF$1238\"\n\"1000*G112/G105\"\n\"[3]Initial_Conds!$BG$1238\"\n\"E101+0.015\"\n\"G101-0.004\"\n\"E100*E101+22\"\n\"G102+G116\"\n\"E94*E102/1000\"\n\"E100*E101\"\n\"G101*G100\"\n\"MIN(E102,E104)\"\n\"E99*E105/1000\"\n\"([2]Sheet1!$C$74+[2]Sheet1!$C$75)*G121\"\n\"([2]Sheet1!$C$74+[2]Sheet1!$C$75)*G121\"\n\"F95*E102/1000\"\n\"E$113*E110\"\n\"G102*G95/1000\"\n\"F96*E105/1000\"\n\"G105*G96/1000\"\n\"(E106-E109)/(E112-E109)\"\n\"G104-G105\"\n\"IF(AND(E90>0,G115/G104>E93),G115,0)\"\n\"G116*G94/1000\"\n\"G102*G94/1000\"\n\"G120+G117\"\n\"[2]Sheet1!$G$51\"\n\"G121*(1-[2]Sheet1!$C$75)+G117\"\n\"PRODUCT(C3,K3)\"\n\"SUM(A3,1)\"\n\"SUM(N3:N66)\"\n\"SUM(B10:B25)\"\n\"SUM(B29:B37)\"\n\"SUM(B41:B48)\"\n\"SUM(D53:D67)\"\n\"SUM(D72:D78)\"\n\"SUM(B100:B102)\"\n\"SUM(B106:B110)\"\n\"A26\"\n\"A38\"\n\"A49\"\n\"A68\"\n\"A79\"\n\"A97\"\n\"A103\"\n\"A111\"\n\"A117\"\n\"A129\"\n\"A140\"\n\"A148\"\n\"SUM(B153:B164)\"\n\"SUM(D172:D177)\"\n\"#REF!\"\n\"B10+B11+B12+B13+B14\"\n\"B16+B18+B19+B20\"\n\"B25+B26+B27+B28+B29+B30\"\n\"B32+B34+B35+B36+B37+B38\"\n\"B42+B43\"\n\"B40+B44\"\n\"#REF!\"\n\"B10-B11\"\n\"B13-B15\"\n\"B17+B19+B20-B21\"\n\"#REF!\"\n\"BalanceSheets!C10-BalanceSheets!B10\"\n\"C10+C11+C12+C13+C14\"\n\"C16+C18+C19+C20\"\n\"C32+C34+C35+C36+C37+C38\"\n\"C40+C44\"\n\"#REF!\"\n\"BalanceSheets!B10/BalanceSheets!B$22\"\n\"BalanceSheets!C10/BalanceSheets!C22\"\n\"BalanceSheets!B25/BalanceSheets!B$46\"\n\"#REF!\"\n\"Income!B10/Income!B$10\"\n\"Income!B26/BalanceSheets!B44\"\n\"Income!B26/BalanceSheets!B22\"\n\"((Income!B23+Income!B21)*(1-Income!B24/Income!B23))/(BalanceSheets!B25+BalanceSheets!B26+BalanceSheets!B30+BalanceSheets!B34+BalanceSheets!B37+BalanceSheets!B44)\"\n\"Income!B26/Income!B10\"\n\"Income!B13/Income!B10\"\n\"BalanceSheets!B22/BalanceSheets!B44\"\n\"(BalanceSheets!B40/BalanceSheets!B22)\"\n\"(BalanceSheets!B40/BalanceSheets!B44)\"\n\"(BalanceSheets!B34+BalanceSheets!B30)/BalanceSheets!B44\"\n\"(Income!B23+Income!B21)/Income!B21\"\n\"(Income!B23+Income!B21)/(Income!B21+BalanceSheets!B30/(1-Income!B24/Income!B23))\"\n\"(BalanceSheets!B16/BalanceSheets!B32)\"\n\"(BalanceSheets!B16-BalanceSheets!B13)/BalanceSheets!B32\"\n\"(Income!B10/BalanceSheets!B22)\"\n\"Income!B11/BalanceSheets!B13\"\n\"BalanceSheets!B12/(Income!B10/365)\"\n\"BalanceSheets!B10/(Income!B10/365)\"\n\"BalanceSheets!B27/(Income!B11/365)\"\n\"Income!B10/BalanceSheets!B18\"\n\"B11\"\n\"1-(Income!B34/Income!B32)\"\n\"B25\"\n\"(BalanceSheets!C22/BalanceSheets!B44)\"\n\"C36*C37*C38*C39\"\n\"(Income!C10-Income!B10)/Income!B10\"\n\"C7*D7\"\n\"C9*D9\"\n\"SUM(E7:E15)\"\n\"+F16\"\n\"-C38\"\n\"SUM(H18:H20)\"\n\"SUM(C18:C21)\"\n\"H21/H18\"\n\"+E22/C22\"\n\"400+700+500+600+400\"\n\"+C28-C29\"\n\"+E24\"\n\"C30*C31\"\n\"+E22\"\n\"-C32\"\n\"SUM(C36:C37)\"\n\"+F16\"\n\"C41*B41\"\n\"-C45\"\n\"+C36\"\n\"-D41\"\n\"+F16\"\n\"+C43\"\n\"-D50\"\n\"E61/C61\"\n\"SUM(H58:H62)\"\n\"+H48\"\n\"-H63\"\n\"SUM(E76:E77)\"\n\"SUM(H74:H80)\"\n\"H65\"\n\"-H81\"\n\"SUM(E106:E107)\"\n\"SUM(H105:H110)\"\n\"SUM(E114:E116)\"\n\"+H65\"\n\"SUM(E117:E119)\"\n\"C137\"\n\"D137\"\n\"B139/B140\"\n\"+C140\"\n\"D143*C144\"\n\"+C145\"\n\"-C159*0.4\"\n\"SUM(C159:C160)\"\n\"+D157-D161\"\n\"+C3/C2\"\n\"SUM(C4:C6)/C2\"\n\"+C11/C10\"\n\"(C10+C11)*C8\"\n\"+C14*0.2\"\n\"+C14+C16\"\n\"+C3/C2\"\n\"SUM(C4:C6)/C2\"\n\"+C11/C10\"\n\"(C10+C11)*C8\"\n\"+C14*0.2\"\n\"+C14+C16\"\n\"SUM(C4:C5)\"\n\"SUM(G8:G11)\"\n\"+E4+G6\"\n\"+F14\"\n\"+G9+G10+G11\"\n\"SUM(C4:C5)\"\n\"SUM(G8:G11)\"\n\"+E4+G6\"\n\"+F14\"\n\"+G9+G10+G11\"\n\"20*15\"\n\"10*19\"\n\"375/250\"\n\"+F14*H10\"\n\"30*9\"\n\"12*12\"\n\"40*18\"\n\"SUM(D10:D13)\"\n\"SUM(F10:F12)\"\n\"+I10+F14+D14\"\n\"+D14\"\n\"+F16\"\n\"+F14\"\n\"+I10\"\n\"I14\"\n\"50*110\"\n\"+F25\"\n\"20*15\"\n\"10*19\"\n\"375/250\"\n\"+F14*H10\"\n\"30*9\"\n\"12*12\"\n\"40*18\"\n\"SUM(D10:D13)\"\n\"SUM(F10:F12)\"\n\"+I10+F14+D14\"\n\"+D14\"\n\"+F16\"\n\"+F14\"\n\"+I10\"\n\"I14\"\n\"50*110\"\n\"+F25\"\n\"SUM(C5:C41)\"\n\"SUM(B4:B15)\"\n\"SUM(D50:D75)\"\n\"SUM(B7:B20)\"\n\"SUM(B7:J7)\"\n\"IF(E6=\"\"\"\",\"\"\"\",E6-F6)\"\n\"IF(E6=\"\"\"\",\"\"\"\",IF(AND(E6=0, F6>0),ROUND(ABS(0.01-F6),0),ABS(E6-F6)))\"\n\"IF(E7=\"\"\"\",\"\"\"\",IF(AND(E7=0, F7>0),ROUND(ABS(0.1-F7),0),ABS(E7-F7)))\"\n\"IF(COUNTBLANK(B6:B30)=25,\"\" \"\",COUNTA(B6:B30))\"\n\"IF(COUNTBLANK(D6:D30)=25,\"\" \"\",SUM(D6:D30))\"\n\"IF(COUNTBLANK(H6:H30)=25,\"\" \"\",COUNTIF(H6:H30,\"\"0\"\"))\"\n\"IF(COUNTBLANK(plusminus)=25,\"\"\"\",COUNTIF(plusminus,\"\"<0\"\"))\"\n\"IF(COUNTBLANK(F6:F30)=25,\"\" \"\",COUNTIF(F6:F30,\"\">0\"\"))\"\n\"IF(COUNTBLANK(plusminus)=25,\"\"\"\",COUNTIF(plusminus,\"\">0\"\"))\"\n\"H30\"\n\"H34\"\n\"IF(ISERROR(('C. Collection&Calculation'!E34)/('C. Collection&Calculation'!B32)),\"\"\"\",ROUND(('C. Collection&Calculation'!E34)/('C. Collection&Calculation'!B32),4))\"\n\"IF(ISNUMBER(X14), X14, 100%)\"\n\"H11\"\n\"IF(ISERROR(('C. Collection&Calculation'!E35)/('C. Collection&Calculation'!B32)),\"\"\"\",('C. Collection&Calculation'!E35)/('C. Collection&Calculation'!B32))\"\n\"IF(ISNUMBER(X15),X15,0%)\"\n\"H15\"\n\"H20\"\n\"H24\"\n\"IF(ISERROR(('C. Collection&Calculation'!E36)/('C. Collection&Calculation'!B32)),\"\" \"\",('C. Collection&Calculation'!E36)/('C. Collection&Calculation'!B32))\"\n\"IF(ISERROR(('C. Collection&Calculation'!H32)/('C. Collection&Calculation'!F32)),\"\" \"\",ROUND(('C. Collection&Calculation'!H32)/('C. Collection&Calculation'!F32),4))\"\n\"IF(ISERROR(('C. Collection&Calculation'!H35)/('C. Collection&Calculation'!B32)),\"\" \"\",ROUND(('C. Collection&Calculation'!H35)/('C. Collection&Calculation'!B32),4))\"\n\"IF(ISERROR(('C. Collection&Calculation'!D32)/('C. Collection&Calculation'!B32*100)),\"\"\"\",ROUND((('C. Collection&Calculation'!D32)/('C. Collection&Calculation'!B32*100)),4))\"\n\"'D. Results'!H11\"\n\"'D. Results'!H15\"\n\"'D. Results'!H20\"\n\"'D. Results'!H24\"\n\"'D. Results'!H30\"\n\"'D. Results'!H34\"\n\"+SUM(I22+I27+I31+I35+I41+I47)/6\"\n\"+F11*2\"\n\"+ROUND(F13*F14,0)\"\n\"+F12+F14\"\n\"+ROUND(F15*F13,0)\"\n\"+IF(AND(E19=\"\"\"\",F19=\"\"\"\"),\"\"\"\",SUM(G18+E19-F19))\"\n\"+SUM(F19:F22)\"\n\"+SUM(F23:F27)\"\n\"+SUM(F36:F41)\"\n\"+IF(AND(E45=\"\"\"\",F45=\"\"\"\"),\"\"\"\",SUM(G43+E45-F45))\"\n\"G8*F8\"\n\"SUM(I11:I12)\"\n\"SUM(I14:I19)\"\n\"SUM(I21:I23)\"\n\"SUM(I8:I35)-I10-I13-I20-I28\"\n\"SUM(I38:I42)\"\n\"G8-G9\"\n\"SUM(E13:E17)\"\n\"E18-E19\"\n\"G10-G20\"\n\"SUM(E25:E53)\"\n\"G22-G54\"\n\"SUM(E59:E60)\"\n\"G56+G61\"\n\"IF(E18=0,D18,D18*(F18/E18))\"\n\"G18*H18\"\n\"J18/$M$16\"\n\"SUM(K18:K29)\"\n\"NOW()\"\n\"IF((B10=\"\"\"\"),\"\"X\"\",SUM(B10,E10,-H10))\"\n\"IF(OR(B10=\"\"\"\",O10=\"\"\"\"),\"\"X\"\",SUM(O10,-K10))\"\n\"LastNonZero(11,O10:O10)\"\n\"LastNonZero(12,O10:O11)\"\n\"LastNonZero(13,O10:O12)\"\n\"LastNonZero(14,O10:O13)\"\n\"LastNonZero(15,O10:O14)\"\n\"LastNonZero(16,O10:O15)\"\n\"LastNonZero(17,O10:O16)\"\n\"LastNonZero(18,O10:O17)\"\n\"LastNonZero(19,O10:O18)\"\n\"LastNonZero(20,O10:O19)\"\n\"LastNonZero(21,O10:O20)\"\n\"LastNonZero(22,O10:O21)\"\n\"LastNonZero(23,O10:O22)\"\n\"LastNonZero(24,O10:O23)\"\n\"LastNonZero(25,O10:O24)\"\n\"LastNonZero(26,O10:O25)\"\n\"LastNonZero(27,O10:O26)\"\n\"LastNonZero(28,O10:O27)\"\n\"LastNonZero(29,O10:O28)\"\n\"LastNonZero(30,O10:O29)\"\n\"LastNonZero(31,O10:O30)\"\n\"LastNonZero(32,O10:O31)\"\n\"LastNonZero(33,O10:O32)\"\n\"LastNonZero(34,O10:O33)\"\n\"LastNonZero(35,O10:O34)\"\n\"LastNonZero(36,O10:O35)\"\n\"LastNonZero(37,O10:O36)\"\n\"LastNonZero(38,O10:O37)\"\n\"LastNonZero(39,O10:O38)\"\n\"LastNonZero(40,O10:O39)\"\n\"SUM(E10:E40)\"\n\"FirstNonZero(41,B10:B40)\"\n\"$E$41\"\n\"$H$41\"\n\"SUM(B45,E45,-H45)\"\n\"SUM(O45,-Q45)\"\n\"LastNonZero(41,O10:O40)\"\n\"$Q$41\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"ABS(Q45)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"IF((B10=\"\"\"\"),\"\"X\"\",SUM(B10,E10,-H10))\"\n\"IF(OR(B10=\"\"\"\",O10=\"\"\"\"),\"\"X\"\",SUM(O10,-K10))\"\n\"LastNonZero(11,O10:O11)\"\n\"LastNonZero(12,O10:O12)\"\n\"LastNonZero(14,O10:O14)\"\n\"LastNonZero(15,O10:O15)\"\n\"LastNonZero(16,O10:O16)\"\n\"LastNonZero(17,O10:O17)\"\n\"LastNonZero(18,O10:O18)\"\n\"LastNonZero(19,O10:O19)\"\n\"LastNonZero(20,O10:O20)\"\n\"LastNonZero(21,O10:O21)\"\n\"LastNonZero(22,O10:O22)\"\n\"LastNonZero(23,O10:O23)\"\n\"LastNonZero(24,O10:O24)\"\n\"LastNonZero(25,O10:O25)\"\n\"LastNonZero(26,O10:O26)\"\n\"LastNonZero(27,O10:O27)\"\n\"LastNonZero(28,O10:O28)\"\n\"LastNonZero(29,O10:O29)\"\n\"LastNonZero(30,O10:O30)\"\n\"LastNonZero(31,O10:O31)\"\n\"LastNonZero(32,O10:O32)\"\n\"LastNonZero(33,O10:O33)\"\n\"LastNonZero(34,O10:O34)\"\n\"LastNonZero(35,O10:O35)\"\n\"LastNonZero(36,O10:O36)\"\n\"LastNonZero(37,O10:O37)\"\n\"LastNonZero(38,O10:O38)\"\n\"LastNonZero(39,O10:O39)\"\n\"LastNonZero(40,O10:O40)\"\n\"SUM(E10:E40)\"\n\"FirstNonZero(41,B10:B40)\"\n\"$E$41\"\n\"$H$41\"\n\"SUM(B45,E45,-H45)\"\n\"SUM(O45,-Q45)\"\n\"LastNonZero(41,O10:O40)\"\n\"$Q$41\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"ABS(Q45)\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"IF(Q49>M48,\"\"YES\"\",\"\"No\"\")\"\n\"SUM(B10,E10,-H10)\"\n\"IF(OR(B10=\"\"\"\",O10=\"\"\"\"),0,SUM(O10,-K10))\"\n\"IF(AND(E11=0,H11=0,O11=\"\"\"\"),\"\"\"\",IF($O$10<>\"\"\"\",$O$10,#REF!))\"\n\"IF(OR(K11=0,O11=\"\"\"\"),0,SUM(O11,-K11))\"\n\"IF(AND(E12=0,H12=0,O12=\"\"\"\"),\"\"\"\",IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))\"\n\"IF(AND(E13=0,H13=0,O13=\"\"\"\"),\"\"\"\",IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))\"\n\"IF(AND(E14=0,H14=0,O14=\"\"\"\"),\"\"\"\",IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))))\"\n\"IF(AND(E15=0,H15=0,O15=\"\"\"\"),\"\"\"\",IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))))\"\n\"IF(AND(E16=0,H16=0,O16=\"\"\"\"),\"\"\"\",IF($O$15<>\"\"\"\",$O$15,IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))))))\"\n\"IF(AND(E17=0,H17=0,O17=\"\"\"\"),\"\"\"\",IF($O$16<>\"\"\"\",$O$16,IF($O$15<>\"\"\"\",$O$15,IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))))))\"\n\"IF(AND(E18=0,H18=0,O18=\"\"\"\"),\"\"\"\",IF(O17<>\"\"\"\",O17,IF(O16<>\"\"\"\",O16,IF(O15<>\"\"\"\",O15,IF(O14<>\"\"\"\",O14,IF(O13<>\"\"\"\",O13,IF(O12<>\"\"\"\",O12,IF(O11<>\"\"\"\",O11,O10))))))))\"\n\"SUM(E10:E40)\"\n\"$B$10\"\n\"$E$41\"\n\"$H$41\"\n\"SUM(O45,-Q45)\"\n\"IF($O$40<>\"\"\"\",$O$40,IF(O39<>\"\"\"\",O39,IF(O38<>\"\"\"\",O38,IF(O37<>\"\"\"\",O37,IF(O36<>\"\"\"\",O36,IF(O35<>\"\"\"\",O35,IF(O34<>\"\"\"\",O34,IF(O33<>\"\"\"\",O33,O32))))))))\"\n\"$Q$41\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"ABS(Q45)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"SUM(B10,E10,-H10)\"\n\"IF(OR(B10=\"\"\"\",O10=\"\"\"\"),0,SUM(O10,-K10))\"\n\"IF(AND(E11=0,H11=0,O11=\"\"\"\"),\"\"\"\",IF($O$10<>\"\"\"\",$O$10,#REF!))\"\n\"IF(OR(K11=0,O11=\"\"\"\"),0,SUM(O11,-K11))\"\n\"IF(AND(E12=0,H12=0,O12=\"\"\"\"),\"\"\"\",IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))\"\n\"IF(AND(E13=0,H13=0,O13=\"\"\"\"),\"\"\"\",IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))\"\n\"IF(AND(E14=0,H14=0,O14=\"\"\"\"),\"\"\"\",IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))))\"\n\"IF(AND(E15=0,H15=0,O15=\"\"\"\"),\"\"\"\",IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))))\"\n\"IF(AND(E16=0,H16=0,O16=\"\"\"\"),\"\"\"\",IF($O$15<>\"\"\"\",$O$15,IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!)))))))\"\n\"IF(AND(E17=0,H17=0,O17=\"\"\"\"),\"\"\"\",IF($O$16<>\"\"\"\",$O$16,IF($O$15<>\"\"\"\",$O$15,IF($O$14<>\"\"\"\",$O$14,IF($O$13<>\"\"\"\",$O$13,IF($O$12<>\"\"\"\",$O$12,IF($O$11<>\"\"\"\",$O$11,IF($O$10<>\"\"\"\",$O$10,#REF!))))))))\"\n\"IF(AND(E18=0,H18=0,O18=\"\"\"\"),\"\"\"\",IF(O17<>\"\"\"\",O17,IF(O16<>\"\"\"\",O16,IF(O15<>\"\"\"\",O15,IF(O14<>\"\"\"\",O14,IF(O13<>\"\"\"\",O13,IF(O12<>\"\"\"\",O12,IF(O11<>\"\"\"\",O11,O10))))))))\"\n\"SUM(E10:E40)\"\n\"$B$10\"\n\"$E$41\"\n\"$H$41\"\n\"SUM(O45,-Q45)\"\n\"IF($O$40<>\"\"\"\",$O$40,IF(O39<>\"\"\"\",O39,IF(O38<>\"\"\"\",O38,IF(O37<>\"\"\"\",O37,IF(O36<>\"\"\"\",O36,IF(O35<>\"\"\"\",O35,IF(O34<>\"\"\"\",O34,IF(O33<>\"\"\"\",O33,O32))))))))\"\n\"$Q$41\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"PRODUCT(H45,0.01)\"\n\"SUM(H48,K48)\"\n\"ABS(Q45)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"Conclusion(Q49,M48)\"\n\"C5*E5\"\n\"SUM(G5:G8)\"\n\"F1+G9\"\n\"SUM(A4:A6)\"\n\"C7+G7\"\n\"SUM(A4:A6)\"\n\"C7+G7\"\n\"G8/700\"\n\"400*$E$10\"\n\"300*$E$10\"\n\"SUM(E8:E9)\"\n\"F9-E9\"\n\"F12-F13\"\n\"G12/AVERAGE(F8:G8)\"\n\"(1/D18)*365\"\n\"H12/AVERAGE(G8:H8)\"\n\"G14/AVERAGE(F10:G10)\"\n\"H14/AVERAGE(G10:H10)\"\n\"G12/AVERAGE(F10:G10)\"\n\"H12/AVERAGE(G10:H10)\"\n\"SUM(E4:E5)\"\n\"D10-D11\"\n\"(D10-D12)/D12\"\n\"B7+D7-F7\"\n\"I7-H7\"\n\"I7\"\n\"SUM(F7:F37)\"\n\"SUM(J7:J37)\"\n\"F38\"\n\"E41*G41+I41\"\n\"IF(N38>K41,\"\"YES\"\",\"\"NO\"\")\"\n\"B11\"\n\"B8+B9\"\n\"B10-B11\"\n\"C6-C12\"\n\"C13-C14\"\n\"B11\"\n\"SUM(B20:B23)\"\n\"SUM(B27:B28)\"\n\"C15\"\n\"SUM(C29:C34)\"\n\"B11\"\n\"B8+B9\"\n\"179800+17000\"\n\"147200-25000\"\n\"B10-B11\"\n\"C6-C12\"\n\"C13-C14\"\n\"B11\"\n\"SUM(B20:B23)\"\n\"SUM(B27:B28)\"\n\"C15\"\n\"SUM(C29:C34)\"\n\"B13\"\n\"B10+B11\"\n\"179800+17000\"\n\"147200-25000\"\n\"B12-B13\"\n\"C8-C14\"\n\"C15-C16\"\n\"B13\"\n\"SUM(B22:B25)\"\n\"SUM(B29:B30)\"\n\"C17\"\n\"E17+17000\"\n\"G17-25000\"\n\"SUM(C31:C36)\"\n\"IF(OR(ISBLANK(B4),ISBLANK(B6),ISBLANK(B7),ISBLANK(B8),ISBLANK(B9),ISBLANK(B10),ISBLANK(B11),ISBLANK(B12),ISBLANK(B13),ISBLANK(B14),ISBLANK(B15),ISBLANK(B16),ISBLANK(B17)),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B20=\"\"No\"\",\"\"complete data\"\",AVERAGE(B6:B17))\"\n\"IF(B20=\"\"No\"\",\"\"complete data\"\",B4/B21)\"\n\"IF(B20=\"\"No\"\",\"\"complete data\"\",IF(B22<6,\"\"low\"\",IF(B22<10,\"\"a bit low\"\",IF(B22<=13,\"\"good\"\",IF(B22<18,\"\"a bit high\"\",\"\"high\"\")))))\"\n\"CJ6&BA6&DN6&S6&CF6&DJ6&HL6&IS6\"\n\"IF($M6=\"\"2V\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"2NV\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"3V\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF($M6=\"\"3NV\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF(SUM(N6:Q6)>0,IF(LEFT(L6,5)=\"\" Aero\"\",E6,0),0)\"\n\"IF(NOT(ISBLANK(M6)),IF($F6=\"\"lbs\"\",\"\" Aero,\"\"&M6,\"\" Aero\"\"&\"\"Error\"\"),\"\"\"\")\"\n\"IF(T6=\"\"X\"\",IF($F6=\"\"cu ft\"\",$E6,#VALUE!),0)\"\n\"IF(U6>0,IF(LEFT($L6,LEN(T$5))=T$5,$E6,),0)\"\n\"(IF(ISBLANK(AO6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AO$5,$AO$5&\"\"Error\"\")))&(IF(ISBLANK(AX6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AX$5,$AX$5&\"\"Error\"\")))&(IF(ISBLANK(Z6),\"\"\"\",IF($F6=\"\"cu ft\"\",$Z$5,$Z$5&\"\"Error\"\")))&(IF(ISBLANK(AU6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AU$5,$AU$5&\"\"Error\"\")))&(IF(ISBLANK(W6),\"\"\"\",IF($F6=\"\"cu ft\"\",$W$5,$W$5&\"\"Error\"\")))&(IF(ISBLANK(T6),\"\"\"\",IF($F6=\"\"cu ft\"\",$T$5,$T$5&\"\"Error\"\")))&(IF(ISBLANK(AF6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AF$5,$AF$5&\"\"Error\"\")))&(IF(ISBLANK(AR6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AR$5,$AR$5&\"\"Error\"\")))&(IF(ISBLANK(AI6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AI$5,$AI$5&\"\"Error\"\")))&(IF(ISBLANK(AL6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AL$5,$AL$5&\"\"Error\"\")))&(IF(ISBLANK(AC6),\"\"\"\",IF($F6=\"\"cu ft\"\",$AC$5,$AC$5&\"\"Error\"\")))\"\n\"IF(BB6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"(IF(ISBLANK(BH6),\"\"\"\",IF($F6=\"\"gal\"\",$BH$5,$BH$5&\"\"Error\"\")))&(IF(ISBLANK(BK6),\"\"\"\",IF($F6=\"\"gal\"\",$BK$5,$BK$5&\"\"Error\"\")))&(IF(ISBLANK(BN6),\"\"\"\",IF($F6=\"\"gal\"\",$BN$5,$BN$5&\"\"Error\"\")))&(IF(ISBLANK(BQ6),\"\"\"\",IF($F6=\"\"gal\"\",$BQ$5,$BQ$5&\"\"Error\"\")))&(IF(ISBLANK(BB6),\"\"\"\",IF($F6=\"\"gal\"\",$BB$5,$BB$5&\"\"Error\"\")))&(IF(ISBLANK(BE6),\"\"\"\",IF($F6=\"\"gal\"\",$BE$5,$BE$5&\"\"Error\"\")))&(IF(ISBLANK(BZ6),\"\"\"\",IF($F6=\"\"gal\"\",$BZ$5,$BZ$5&\"\"Error\"\")))&(IF(ISBLANK(CC6),\"\"\"\",IF($F6=\"\"gal\"\",$CC$5,$CC$5&\"\"Error\"\")))&(IF(ISBLANK(BT6),\"\"\"\",IF($F6=\"\"gal\"\",$BT$5,$BT$5&\"\"Error\"\")))&(IF(ISBLANK(BW6),\"\"\"\",IF($F6=\"\"gal\"\",$BW$5,$BW$5&\"\"Error\"\")))\"\n\"IF(CG6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,#VALUE!),0)\"\n\"IF(CH6>0,IF(LEFT($L6,LEN(CG$5))=CG$5,$E6,0),0)\"\n\"IF(ISBLANK(CG6),\"\"\"\",IF($F6=\"\"lbs\"\",CG$5,CG$5&\"\"Error\"\"))\"\n\"IF($CK6=\"\"I-A In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-A Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-B In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-B Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-C In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"I-C Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"II In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"II Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-A In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-A Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-B In\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF($CK6=\"\"III-B Out\"\",IF($F6=\"\"gal\"\",$E6,#VALUE!),0)\"\n\"IF(CL6>0,IF(LEFT($L6,11)=\"\" Flamm/Comb\"\",$E6,0),0)\"\n\"IF(ISBLANK(CK6),\"\"\"\",IF($F6=\"\"gal\"\",\"\" Flamm/Comb,\"\"&CK6,\"\" Flamm/Comb,Error\"\"))\"\n\"IF(ISBLANK(DK6),\"\"\"\",IF($F6=\"\"lbs\"\",DK$5,DK$5&\"\",Error\"\"))\"\n\"IF(DP6>0,IF(LEFT($L6,11)=\"\" FlammSolid\"\",$E6,0),0)\"\n\"IF($DR6=\"\"UD\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"UD\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"I\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"I\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"II\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"II\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"III\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"III\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"IV\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($DR6=\"\"IV\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(DS6>0,IF(LEFT($L6,8)=\"\" OrgPer,\"\",$E6,0),0)\"\n\"IF($EM6=4,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=4,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=3,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=3,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($EM6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($EM6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(EN6>0,IF(LEFT($L6,6)=\"\" Oxid,\"\",$E6,0),0)\"\n\"IF($FD6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FD6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(FE6>0,IF(LEFT($L6,5)=\"\" Pyro\"\",$E6,0),0)\"\n\"IF($FI6=4,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=4,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3D\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3D\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3N\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=\"\"3N\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($FI6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($FI6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(FJ6>0,IF(LEFT($L6,10)=\"\" Unstable,\"\",$E6,0),0)\"\n\"IF($GD6=3,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=3,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($GD6=2,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=2,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF($GD6=1,IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF($GD6=1,IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(GE6>0,IF(LEFT($L6,10)=\"\" H2OReact,\"\",$E6,0),0)\"\n\"IF(GQ6=\"\"X\"\",IF($F6=\"\"gal\"\",$E6,IF($F6=\"\"lbs\"\",0,#VALUE!)),0)\"\n\"IF(GQ6=\"\"X\"\",IF($F6=\"\"lbs\"\",$E6,IF($F6=\"\"gal\"\",0,#VALUE!)),0)\"\n\"IF(GR6>0,IF(LEFT($L6,11)=\"\" Carcinogen\"\",$E6,0),0)\"\n\"IF(GW6>0,IF(LEFT($L6,10)=\"\" Corrosive\"\",$E6,0),0)\"\n\"IF(HB6>0,IF(LEFT($L6,9)=\"\" Hi-Toxic\"\",$E6,0),0)\"\n\"IF(HG6>0,IF(LEFT($L6,9)=\"\" Irritant\"\",$E6,0),0)\"\n\"IF(NOT(ISBLANK(HK6)),IF(AND(HK6=\"\"NonSeal-Alpha\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Alpha\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"NonSeal-Beta\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Beta\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6), IF(AND(HK6=\"\"NonSeal-Gamma\"\",$F6=\"\"microCi\"\"),CONCATENATE(HL$5,HK6),IF(AND(HK6=\"\"Seal-Gamma\"\",$F6=\"\"milliCi\"\"),CONCATENATE(HL$5,HK6),CONCATENATE(HL$5,\"\"Error\"\"))))))),\"\"\"\")\"\n\"IF($HK6=\"\"NonSeal-Gamma\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Gamma\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"NonSeal-Beta\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Beta\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"NonSeal-Alpha\"\",IF($F6=\"\"microCi\"\",$E6,#VALUE!),0)\"\n\"IF($HK6=\"\"Seal-Alpha\"\",IF($F6=\"\"milliCi\"\",$E6,#VALUE!),0)\"\n\"IF(HM6>0,IF(LEFT($L6,LEN($HL$5))=$HL$5,$E6,0),0)\"\n\"IF(HZ6>0,IF(LEFT($L6,11)=\"\" Sensitizer\"\",$E6,0),0)\"\n\"IF(IE6>0,IF(LEFT($L6,6)=\"\" Toxic\"\",$E6,0),0)\"\n\"IF(IJ6>0,IF(LEFT($L6,15)=\"\" OtherHealthHaz\"\",$E6,0),0)\"\n\"(IF(DR6=\"\"UD\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,UD\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"I\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,I\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(FI6=4,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,4\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(FI6=\"\"3D\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,3D\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(HA6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Hi-Toxic\"\",\"\" Hi-Toxic,Error\"\"),\"\"\"\"))&(IF(FD6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Pyro\"\",\"\" Pyro,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"II\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,II\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(GD6=3,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,3\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"III\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,III\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(EM6=4,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,4\"\",\"\" Oxid,Error\"\"),\"\"\"\"))&(IF(EM6=3,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,3\"\",\"\" Oxid,Error\"\"),\"\"\"\"))\"\n\"(IF(FI6=\"\"3N\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,3N\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(DR6=\"\"IV\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OrgPer,IV\"\",\"\" OrgPer,Error\"\"),\"\"\"\"))&(IF(FI6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,2\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(GD6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,2\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))\"\n\"(IF(FI6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Unstable,1\"\",\"\" Unstable,Error\"\"),\"\"\"\"))&(IF(GD6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" H2OReact,1\"\",\"\" H2OReact,Error\"\"),\"\"\"\"))&(IF(EM6=2,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,2\"\",\"\" Oxid,Error\"\"),\"\"\"\"))\"\n\"(IF(ID6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Toxic\"\",\"\" Toxic,Error\"\"),\"\"\"\"))&(IF(EM6=1,IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Oxid,1\"\",\"\" Oxid,Error\"\"),\"\"\"\"))&(IF(GV6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Corrosive\"\",\"\" Corrosive,Error\"\"),\"\"\"\"))\"\n\"(IF(GQ6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Carcinogen\"\",\"\" Carcinogen,Error\"\"),\"\"\"\"))&(IF(II6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" OtherHealthHaz\"\",\"\" OtherHealthHaz,Error\"\"),\"\"\"\"))&(IF(DO6=\"\"X\"\",IF(F6=\"\"lbs\"\",\"\" FlammSolid\"\",\"\" FlammSolid,Error\"\"),\"\"\"\"))&(IF(HF6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Irritant\"\",\"\" Irritant,Error\"\"),\"\"\"\"))&(IF(HY6=\"\"X\"\",IF(OR(F6=\"\"lbs\"\",F6=\"\"gal\"\"),\"\" Sensitizer\"\",\"\" Sensitizer,Error\"\"),\"\"\"\"))\"\n\"IN6&IO6&IP6&IQ6&IR6\"\n\"SUM(N6:N105)\"\n\"SUM(FL6:FL105)+FN106\"\n\"SUM(IN6:IV105)\"\n\"'Chemical Inventory'!C1\"\n\"'Chemical Inventory'!Q106\"\n\"'Chemical Inventory'!P106\"\n\"'Chemical Inventory'!O106\"\n\"'Chemical Inventory'!N106\"\n\"'Chemical Inventory'!BI106\"\n\"'Chemical Inventory'!BL106\"\n\"'Chemical Inventory'!CA106\"\n\"'Chemical Inventory'!CD106\"\n\"'Chemical Inventory'!CH106\"\n\"'Chemical Inventory'!DP106\"\n\"'Chemical Inventory'!X106\"\n\"'Chemical Inventory'!DL106\"\n\"'Chemical Inventory'!CL106\"\n\"'Chemical Inventory'!CM106\"\n\"'Chemical Inventory'!CN106\"\n\"'Chemical Inventory'!CO106\"\n\"'Chemical Inventory'!CP106\"\n\"'Chemical Inventory'!CQ106\"\n\"'Chemical Inventory'!CR106\"\n\"'Chemical Inventory'!CS106\"\n\"'Chemical Inventory'!CT106\"\n\"'Chemical Inventory'!CU106\"\n\"'Chemical Inventory'!CV106\"\n\"'Chemical Inventory'!CW106\"\n\"'Chemical Inventory'!DT106\"\n\"'Chemical Inventory'!DS106\"\n\"'Chemical Inventory'!DV106\"\n\"'Chemical Inventory'!DU106\"\n\"'Chemical Inventory'!DX106\"\n\"'Chemical Inventory'!DW106\"\n\"'Chemical Inventory'!DZ106\"\n\"'Chemical Inventory'!DY106\"\n\"'Chemical Inventory'!EB106\"\n\"'Chemical Inventory'!EA106\"\n\"'Chemical Inventory'!EO106\"\n\"'Chemical Inventory'!EN106\"\n\"'Chemical Inventory'!EQ106\"\n\"'Chemical Inventory'!EP106\"\n\"'Chemical Inventory'!ES106\"\n\"'Chemical Inventory'!ER106\"\n\"'Chemical Inventory'!EU106\"\n\"'Chemical Inventory'!ET106\"\n\"'Chemical Inventory'!AM106\"\n\"'Chemical Inventory'!FF106\"\n\"'Chemical Inventory'!FE106\"\n\"'Chemical Inventory'!AP106\"\n\"'Chemical Inventory'!FK106\"\n\"'Chemical Inventory'!FJ106\"\n\"'Chemical Inventory'!FM106\"\n\"'Chemical Inventory'!FL106\"\n\"'Chemical Inventory'!FO106\"\n\"'Chemical Inventory'!FN106\"\n\"'Chemical Inventory'!FQ106\"\n\"'Chemical Inventory'!FP106\"\n\"'Chemical Inventory'!FS106\"\n\"'Chemical Inventory'!FR106\"\n\"'Chemical Inventory'!AY106\"\n\"'Chemical Inventory'!GF106\"\n\"'Chemical Inventory'!GE106\"\n\"'Chemical Inventory'!GH106\"\n\"'Chemical Inventory'!GG106\"\n\"'Chemical Inventory'!GJ106\"\n\"'Chemical Inventory'!GI106\"\n\"'Chemical Inventory'!GS106\"\n\"'Chemical Inventory'!GR106\"\n\"'Chemical Inventory'!AD106\"\n\"'Chemical Inventory'!GX106\"\n\"'Chemical Inventory'!GW106\"\n\"'Chemical Inventory'!U106\"\n\"'Chemical Inventory'!BC106\"\n\"'Chemical Inventory'!BF106\"\n\"'Chemical Inventory'!BU106\"\n\"'Chemical Inventory'!BX106\"\n\"'Chemical Inventory'!HC106\"\n\"'Chemical Inventory'!HB106\"\n\"'Chemical Inventory'!AA106\"\n\"'Chemical Inventory'!BO106\"\n\"'Chemical Inventory'!BR106\"\n\"'Chemical Inventory'!HH106\"\n\"'Chemical Inventory'!HG106\"\n\"'Chemical Inventory'!AG106\"\n\"'Chemical Inventory'!IA106\"\n\"'Chemical Inventory'!HZ106\"\n\"'Chemical Inventory'!AS106\"\n\"'Chemical Inventory'!IK106\"\n\"'Chemical Inventory'!IJ106\"\n\"'Chemical Inventory'!AJ106\"\n\"'Chemical Inventory'!IF106\"\n\"'Chemical Inventory'!IE106\"\n\"'Chemical Inventory'!AV106\"\n\"'Chemical Inventory'!HQ106\"\n\"'Chemical Inventory'!HO106\"\n\"'Chemical Inventory'!HM106\"\n\"'Chemical Inventory'!HR106\"\n\"'Chemical Inventory'!HP106\"\n\"'Chemical Inventory'!HN106\"\n\"'Chemical Inventory'!C1\"\n\"'Chemical Inventory'!C2\"\n\"A2\"\n\"'Chemical Inventory'!CI106\"\n\"D13\"\n\"IF(E13<1,0,IF(E13<11,125,IF(E13<51,175,IF(E13<101,225,IF(E13<201,275,IF(E13<501,400,700))))))\"\n\"'Chemical Inventory'!AQ106\"\n\"D17/10\"\n\"'Chemical Inventory'!AZ106\"\n\"'Chemical Inventory'!AB106\"\n\"'Chemical Inventory'!AW106\"\n\"'Chemical Inventory'!Y106\"\n\"D21/200\"\n\"'Chemical Inventory'!V106\"\n\"'Chemical Inventory'!AH106\"\n\"'Chemical Inventory'!AT106\"\n\"'Chemical Inventory'!AK106\"\n\"D25/650\"\n\"'Chemical Inventory'!AN106\"\n\"D26/504\"\n\"'Chemical Inventory'!AE106\"\n\"D27/6000\"\n\"SUM(E17:E27)\"\n\"'Chemical Inventory'!DM106\"\n\"IF(E32<1,0,IF(E32<101,100,IF(E32<301,150,IF(E32<501,200,250))))\"\n\"'Chemical Inventory'!R106\"\n\"IF(E36>500,100,0)\"\n\"'Chemical Inventory'!BJ106\"\n\"'Chemical Inventory'!BM106\"\n\"'Chemical Inventory'!BP106\"\n\"'Chemical Inventory'!BS106\"\n\"'Chemical Inventory'!BD106\"\n\"'Chemical Inventory'!BG106\"\n\"'Chemical Inventory'!CB106\"\n\"D46/50\"\n\"'Chemical Inventory'!CE106\"\n\"'Chemical Inventory'!BV106\"\n\"D48/60\"\n\"'Chemical Inventory'!BY106\"\n\"D49/500\"\n\"SUM(E40:E49)\"\n\"'Chemical Inventory'!CX106\"\n\"D54/30\"\n\"'Chemical Inventory'!CY106\"\n\"'Chemical Inventory'!CZ106\"\n\"'Chemical Inventory'!DA106\"\n\"D57/120\"\n\"'Chemical Inventory'!DB106\"\n\"'Chemical Inventory'!DC106\"\n\"'Chemical Inventory'!DD106\"\n\"'Chemical Inventory'!DE106\"\n\"'Chemical Inventory'!DF106\"\n\"'Chemical Inventory'!DG106\"\n\"'Chemical Inventory'!DH106\"\n\"D64/1000\"\n\"'Chemical Inventory'!DI106\"\n\"SUM(E54:E65)\"\n\"'Chemical Inventory'!HS106+'Chemical Inventory'!HU106+'Chemical Inventory'!HW106\"\n\"'Chemical Inventory'!HT106+'Chemical Inventory'!HV106+'Chemical Inventory'!HX106\"\n\"SUM(E70:E71)\"\n\"'Chemical Inventory'!EC106\"\n\"C76+D76/10\"\n\"'Chemical Inventory'!EE106\"\n\"'Chemical Inventory'!FT106\"\n\"'Chemical Inventory'!FV106\"\n\"'Chemical Inventory'!HD106\"\n\"C80/1+D80/10\"\n\"'Chemical Inventory'!FG106\"\n\"'Chemical Inventory'!EG106\"\n\"'Chemical Inventory'!GK106\"\n\"'Chemical Inventory'!EI106\"\n\"'Chemical Inventory'!EV106\"\n\"'Chemical Inventory'!EX106\"\n\"'Chemical Inventory'!FX106\"\n\"'Chemical Inventory'!EK106\"\n\"C88/2+D88/20\"\n\"'Chemical Inventory'!FZ106\"\n\"C89/5+D89/50\"\n\"'Chemical Inventory'!GM106\"\n\"'Chemical Inventory'!GB106\"\n\"C91/10+D91/100\"\n\"'Chemical Inventory'!GO106\"\n\"'Chemical Inventory'!EZ106\"\n\"'Chemical Inventory'!IG106\"\n\"'Chemical Inventory'!FB106\"\n\"C95/55+D95/500\"\n\"'Chemical Inventory'!GY106\"\n\"'Chemical Inventory'!GT106\"\n\"'Chemical Inventory'!IL106\"\n\"'Chemical Inventory'!DQ106\"\n\"D99/100\"\n\"'Chemical Inventory'!HI106\"\n\"'Chemical Inventory'!IB106\"\n\"SUM(E76:E101)\"\n\"E37+E73+E33+E103+E67+E14+E51+E29\"\n\"ROWS(A$4:A4)\"\n\"TODAY()\"\n\"VLOOKUP(B3,CLubdetails,2,FALSE)\"\n\"VLOOKUP(B3,CLubdetails,2,FALSE)\"\n\"VLOOKUP(B3,CLubdetails,2,FALSE)\"\n\"VLOOKUP(B3,CLubdetails,3,FALSE)\"\n\"VLOOKUP(B3,CLubdetails,3,FALSE)\"\n\"VLOOKUP(B3,CLubdetails,3,FALSE)\"\n\"D13*D14\"\n\"SQRT((2*D16*D11)/(D15))\"\n\"IF($D$26=0,0,0.5*D26*D15)\"\n\"IF(($D$26=0),0,(D16*D11/D26))\"\n\"IF($D$11=0,0,D11*D13)\"\n\"SUM(D27:D29)\"\n\"IF(D22>0,(1-D23)*D26/D22,\"\"N/A\"\")\"\n\"IF(ISNA(z),\"\"N/A\"\",z)\"\n\"D17*D26/D11\"\n\"D11/D26\"\n\"IF(D32=\"\"N/A\"\",\"\"N/A\"\",IF(D24>0,(D18*D21+D24),(D18*D21+D22*D32)))\"\n\"IF($D$32=\"\"N/A\"\", \"\"N/A\"\",D32*D22)\"\n\"IF($D$12=0,\"\"N/A\"\",$D$26*$D$17/$D$12)\"\n\"IF($D$12=0,\"\"N/A\"\",$D$33-$D$37)\"\n\"IF($D$22=0,\"\"N/A\"\",$D$26*(1-$D$23)/$D$22)\"\n\"VLOOKUP(D43,TABLE,2)\"\n\"VLOOKUP($D$44,$F$51:$G$141,2)\"\n\"$F$44-$D$43\"\n\"$D$44-0.1\"\n\"VLOOKUP($D$45,$F$51:$G$141,2)\"\n\"$H$44/$F$46\"\n\"$D$44-$D$45\"\n\"$F$44-$F$45\"\n\"($D$44-($D$46*$H$45))\"\n\"D4/250\"\n\"SQRT((2*D9*D4)/(D8))\"\n\"0.5*D20*D8\"\n\"D9*D4/D20\"\n\"SUM(D21:D22)\"\n\"IF(D15>0,(1-D16)*D20/D15,\"\"N/A\"\")\"\n\"D10*D20/D4\"\n\"D4/D20\"\n\"D11*D14\"\n\"I8\"\n\"J11*K11\"\n\"SUM(L11:L29)\"\n\"SUM(C16:C19)\"\n\"+D12*E12\"\n\"+D12*G12\"\n\"SUM(F12:F24)\"\n\"+F25-H25\"\n\"SUM(B10:B50)\"\n\"B51 + SUM(B65:B105)\"\n\"[1]!Inv_WIP(Change_1_Inst,Change_1)\"\n\"[1]!Inv_WIP(Change_2_Inst,Change_2)\"\n\"[1]!Inv_WIP(Change_3_Inst,Change_3)\"\n\"[1]!Inv_WIPCycle(B10,Change_1)\"\n\"[1]!Inv_WIPCycle(C10,Change_2)\"\n\"[1]!Inv_WIPCycle(D10,Change_3)\"\n\"[1]!Inv_WIP(Inv2_1_Inst,Inv2_1)\"\n\"[1]!Inv_WIP(Inv2_2_Inst,Inv2_2)\"\n\"[1]!Inv_WIP(Inv2_3_Inst,Inv2_3)\"\n\"[1]!Inv_WIP(Inv3_1_Inst,Inv3_1)\"\n\"[1]!Inv_WIP(Inv3_2_Inst,Inv3_2)\"\n\"[1]!Inv_WIP(Inv3_3_Inst,Inv3_3)\"\n\"[1]!Inv_WIPCost(Change_1_Inst,Change_1)\"\n\"[1]!Inv_WIPCost(Change_2_Inst,Change_2)\"\n\"[1]!Inv_WIPCost(Change_3_Inst,Change_3)\"\n\"[1]!Inv_WIPCycle(G11,Inv2_1)\"\n\"[1]!Inv_WIPCycle(H11,Inv2_2)\"\n\"[1]!Inv_WIPCycle(I11,Inv2_3)\"\n\"[1]!Inv_WIPCycle(L11,Inv3_1)\"\n\"[1]!Inv_WIPCycle(M11,Inv3_2)\"\n\"[1]!Inv_WIPCycle(N11,Inv3_3)\"\n\"[1]!Inv_WIPCost(Inv2_1_Inst,Inv2_1)\"\n\"[1]!Inv_WIPCost(Inv2_2_Inst,Inv2_2)\"\n\"[1]!Inv_WIPCost(Inv2_3_Inst,Inv2_3)\"\n\"[1]!Inv_WIPCost(Inv3_1_Inst,Inv3_1)\"\n\"[1]!Inv_WIPCost(Inv3_2_Inst,Inv3_2)\"\n\"[1]!Inv_WIPCost(Inv3_3_Inst,Inv3_3)\"\n\"[1]!Inv_WIP(Inv4_1_Inst,Inv4_1)\"\n\"[1]!Inv_WIP(Inv4_2_Inst,Inv4_2)\"\n\"[1]!Inv_WIP(Inv4_3_Inst,Inv4_3)\"\n\"[1]!Inv_WIP(Inv5_Inst,_Inv5)\"\n\"[1]!Inv_WIP(Inv6_Inst,_Inv6)\"\n\"[1]!Inv_WIP(Inv7_1_Inst,Inv7_1)\"\n\"[1]!Inv_WIP(Inv7_2_Inst,Inv7_2)\"\n\"[1]!Inv_WIP(Inv7_3_Inst,Inv7_3)\"\n\"[1]!Inv_WIPCycle(Q15,Inv4_1)\"\n\"[1]!Inv_WIPCycle(R15,Inv4_2)\"\n\"[1]!Inv_WIPCycle(S15,Inv4_3)\"\n\"[1]!Inv_WIPCycle(V15,_Inv5)\"\n\"[1]!Inv_WIPCycle(Y15,_Inv6)\"\n\"[1]!Inv_WIPCycle(AB15,Inv7_1)\"\n\"[1]!Inv_WIPCycle(AC15,Inv7_2)\"\n\"[1]!Inv_WIPCycle(AD15,Inv7_3)\"\n\"[1]!Inv_WIPCost(Inv4_1_Inst,Inv4_1)\"\n\"[1]!Inv_WIPCost(Inv4_2_Inst,Inv4_2)\"\n\"[1]!Inv_WIPCost(Inv4_3_Inst,Inv4_3)\"\n\"[1]!Inv_WIPCost(Inv5_Inst,_Inv5)\"\n\"[1]!Inv_WIPCost(Inv6_Inst,_Inv6)\"\n\"[1]!Inv_WIPCost(Inv7_1_Inst,Inv7_1)\"\n\"[1]!Inv_WIPCost(Inv7_2_Inst,Inv7_2)\"\n\"[1]!Inv_WIPCost(Inv7_3_Inst,Inv7_3)\"\n\"[1]!Inv_Utilization(Inv4_1_Inst,Inv4_1)\"\n\"[1]!Inv_Utilization(Inv4_2_Inst,Inv4_2)\"\n\"[1]!Inv_Utilization(Inv4_3_Inst,Inv4_3)\"\n\"[1]!Inv_Utilization(Inv5_Inst,_Inv5)\"\n\"[1]!Inv_Utilization(Inv6_Inst,_Inv6)\"\n\"[1]!Inv_Utilization(Inv7_1_Inst,Inv7_1)\"\n\"[1]!Inv_Utilization(Inv7_2_Inst,Inv7_2)\"\n\"[1]!Inv_Utilization(Inv7_3_Inst,Inv7_3)\"\n\"[1]!Inv_Mach_Used(Inv4_1_Inst,Inv4_1)\"\n\"[1]!Inv_Mach_Used(Inv4_2_Inst,Inv4_2)\"\n\"[1]!Inv_Mach_Used(Inv4_3_Inst,Inv4_3)\"\n\"[1]!Inv_Mach_Used(Inv5_Inst,_Inv5)\"\n\"[1]!Inv_Mach_Used(Inv6_Inst,_Inv6)\"\n\"[1]!Inv_Mach_Used(Inv7_1_Inst,Inv7_1)\"\n\"[1]!Inv_Mach_Used(Inv7_2_Inst,Inv7_2)\"\n\"[1]!Inv_Mach_Used(Inv7_3_Inst,Inv7_3)\"\n\"30*24\"\n\"B4\"\n\"J4/J3\"\n\"B14\"\n\"[1]!Inv_WIP(High_1_Inst,High_1)\"\n\"[1]!Inv_WIP(High_2_Inst,High_2)\"\n\"[1]!Inv_WIP(High_3_Inst,High_3)\"\n\"[1]!Inv_WIP(High_4_Inst,High_4)\"\n\"[1]!Inv_WIP(High_5_Inst,High_5)\"\n\"SUM(B15:F15)\"\n\"[1]!Inv_WIPCycle(B15,High_1)\"\n\"[1]!Inv_WIPCycle(C15,High_2)\"\n\"[1]!Inv_WIPCycle(D15,High_3)\"\n\"[1]!Inv_WIPCycle(E15,High_4)\"\n\"[1]!Inv_WIPCycle(F15,High_5)\"\n\"G16/J3\"\n\"[1]!Inv_WIPCost(High_1_Inst,High_1)\"\n\"[1]!Inv_WIPCost(High_2_Inst,High_2)\"\n\"[1]!Inv_WIPCost(High_3_Inst,High_3)\"\n\"[1]!Inv_WIPCost(High_4_Inst,High_4)\"\n\"[1]!Inv_WIPCost(High_5_Inst,High_5)\"\n\"[1]!Inv_Utilization(High_1_Inst,High_1)\"\n\"[1]!Inv_Utilization(High_2_Inst,High_2)\"\n\"[1]!Inv_Utilization(High_3_Inst,High_3)\"\n\"[1]!Inv_Utilization(High_4_Inst,High_4)\"\n\"[1]!Inv_Utilization(High_5_Inst,High_5)\"\n\"[1]!Inv_Mach_Used(High_1_Inst,High_1)\"\n\"[1]!Inv_Mach_Used(High_2_Inst,High_2)\"\n\"[1]!Inv_Mach_Used(High_3_Inst,High_3)\"\n\"[1]!Inv_Mach_Used(High_4_Inst,High_4)\"\n\"[1]!Inv_Mach_Used(High_5_Inst,High_5)\"\n\"[1]!Inv_WIP(Low_1_Inst,Low_1)\"\n\"[1]!Inv_WIP(Low_2_Inst,Low_2)\"\n\"[1]!Inv_WIP(Low_3_Inst,Low_3)\"\n\"[1]!Inv_WIP(Low_4_Inst,Low_4)\"\n\"[1]!Inv_WIP(Low_5_Inst,Low_5)\"\n\"[1]!Inv_WIPCycle(B36,Low_1)\"\n\"[1]!Inv_WIPCycle(C36,Low_2)\"\n\"[1]!Inv_WIPCycle(D36,Low_3)\"\n\"[1]!Inv_WIPCycle(E36,Low_4)\"\n\"[1]!Inv_WIPCycle(F36,Low_5)\"\n\"G37/J3\"\n\"[1]!Inv_WIPCost(Low_1_Inst,Low_1)\"\n\"[1]!Inv_WIPCost(Low_2_Inst,Low_2)\"\n\"[1]!Inv_WIPCost(Low_3_Inst,Low_3)\"\n\"[1]!Inv_WIPCost(Low_4_Inst,Low_4)\"\n\"[1]!Inv_WIPCost(Low_5_Inst,Low_5)\"\n\"[1]!Inv_Utilization(Low_1_Inst,Low_1)\"\n\"[1]!Inv_Utilization(Low_2_Inst,Low_2)\"\n\"[1]!Inv_Utilization(Low_3_Inst,Low_3)\"\n\"[1]!Inv_Utilization(Low_4_Inst,Low_4)\"\n\"[1]!Inv_Utilization(Low_5_Inst,Low_5)\"\n\"[1]!Inv_Mach_Used(Low_1_Inst,Low_1)\"\n\"[1]!Inv_Mach_Used(Low_2_Inst,Low_2)\"\n\"[1]!Inv_Mach_Used(Low_3_Inst,Low_3)\"\n\"[1]!Inv_Mach_Used(Low_4_Inst,Low_4)\"\n\"[1]!Inv_Mach_Used(Low_5_Inst,Low_5)\"\n\"SUM(C2:F2)\"\n\"SUM(B7:B11)\"\n\"SUM(B15:B16)\"\n\"(B12-B17)\"\n\"SUM(B21:B26)\"\n\"(B18-B27)\"\n\"(B28-B30)\"\n\"F28-F30\"\n\"B32-B33\"\n\"(D32-D33)\"\n\"SUM(B7:B11)\"\n\"SUM(B15:B18)\"\n\"B4-(B12+B19)\"\n\"(B21-B22)\"\n\"F21-F22\"\n\"SUM(D12:N12)\"\n\"SUM(C14:C22)\"\n\"SUM(C12/C23)/100\"\n\"C26/$C$31\"\n\"SUM(C26:C30)\"\n\"SUM(C38/$C$12)\"\n\"C12\"\n\"SUM(B41,B64)\"\n\"SUM(B9:B40)\"\n\"SUM(B43:B63)\"\n\"SUM(B73:B76)\"\n\"SUM(B80)\"\n\"SUM(B8,B72,B79,B83)\"\n\"C10+C19+C31+C34+C37\"\n\"C7/B7*100\"\n\"C13+C16\"\n\"C22+C25+C28\"\n\"O40-O43\"\n\"B47*B7/1000000\"\n\"C19+C31+C37\"\n\"C37/B40\"\n\"C22/C13*100\"\n\"C25/C16*100\"\n\"SUM(F4:F52)\"\n\"SUM(C4:J4)\"\n\"AVERAGE(C4:J4)\"\n\"SUM(B4:B7)/4\"\n\"SUM(B18:B20)/3\"\n\"SUM(B31:B36)/6\"\n\"SUM(B63:B67)/5\"\n\"SUM(C5:J5)\"\n\"C11\"\n\"C10\"\n\"C13\"\n\"C14\"\n\"C15\"\n\"C16\"\n\"C17\"\n\"C18\"\n\"C19\"\n\"C20\"\n\"C21\"\n\"C23\"\n\"C22\"\n\"C24\"\n\"C25\"\n\"C27\"\n\"C26\"\n\"C28\"\n\"C30\"\n\"C29\"\n\"C31\"\n\"C33\"\n\"C32\"\n\"F10+F11+F12+F13+F14+F15+F16+F17\"\n\"C15*32\"\n\"D15-F15\"\n\"D19/10\"\n\"E19*1\"\n\"E20*2\"\n\"E21*3\"\n\"E22*4\"\n\"+E23*5\"\n\"+E24*6\"\n\"+E25*7\"\n\"+E26*8\"\n\"+E27*9\"\n\"+E28*10\"\n\"SUM(C18:C28)\"\n\"C15-C30\"\n\"D32\"\n\"SUM(C30:C32)\"\n\"-C15\"\n\"SUM(C55:C57)\"\n\"D32\"\n\"C32\"\n\"D32/C32\"\n\"C15\"\n\"+F34\"\n\"D66-E66\"\n\"C58\"\n\"C68*F60\"\n\"D68\"\n\"+E86\"\n\"-E69\"\n\"SUM(C66:C69)\"\n\"SUM(C75:C79)\"\n\"SUM(D75:D85)\"\n\"SUM(E75:E84)\"\n\"+F34\"\n\"+F66\"\n\"D67\"\n\"D67\"\n\"+-E68\"\n\"+-D68\"\n\"+E86\"\n\"+E86\"\n\"'Known Value - 1st year'!C71\"\n\"D17-F17\"\n\"'Known Value - 1st year'!C67\"\n\"D21*1/10\"\n\"E21*1\"\n\"E22*2\"\n\"E23*3\"\n\"E24*4\"\n\"E25*5\"\n\"E26*6\"\n\"E27*7\"\n\"E28*8\"\n\"E29*9\"\n\"E30*10\"\n\"SUM(C20:C30)\"\n\"'Known Value - 1st year'!C32+'Known Value - 1st year'!C28+'Known Value - 1st year'!C58\"\n\"'Known Value - 1st year'!D32+'Known Value - 1st year'!D28+'Known Value - 1st year'!D68\"\n\"D34\"\n\"SUM(C32:C34)\"\n\"-C17\"\n\"SUM(C55:C57)\"\n\"D34\"\n\"C34\"\n\"D34/C34\"\n\"C17\"\n\"F36\"\n\"D66-E66\"\n\"C58\"\n\"C68*F60\"\n\"D68\"\n\"+E86\"\n\"-E69\"\n\"SUM(C66:C69)\"\n\"D75/10\"\n\"SUM(C75:C79)\"\n\"SUM(D75:D85)\"\n\"SUM(E75:E84)\"\n\"D66\"\n\"F36\"\n\"+F66\"\n\"D67\"\n\"D67\"\n\"+-E68\"\n\"+-D68\"\n\"+E86\"\n\"+E86\"\n\"531250*32\"\n\"D15-F15\"\n\"C18*32\"\n\"D19/10\"\n\"E19*1\"\n\"E20*2\"\n\"E21*3\"\n\"E22*4\"\n\"+E23*5\"\n\"+E24*6\"\n\"+E25*7\"\n\"+E26*8\"\n\"+E27*9\"\n\"+E28*10\"\n\"SUM(C18:C28)\"\n\"C15-C30\"\n\"D32\"\n\"SUM(C30:C32)\"\n\"SUM(C55:C57)\"\n\"D32\"\n\"C32\"\n\"D32/C32\"\n\"C15\"\n\"+F34\"\n\"D66-E66\"\n\"C58\"\n\"C68*F60\"\n\"D68\"\n\"+E86\"\n\"-E69\"\n\"SUM(C66:C69)\"\n\"SUM(C75:C79)\"\n\"SUM(D75:D85)\"\n\"SUM(E75:E84)\"\n\"D66\"\n\"E66\"\n\"+F66\"\n\"D67\"\n\"D67\"\n\"+-E68\"\n\"+-D68\"\n\"+E86\"\n\"+E86\"\n\"'Constant Value - 1st Year'!C71\"\n\"'Constant Value - 1st Year'!E71\"\n\"D17-F17\"\n\"'Constant Value - 1st Year'!C67\"\n\"C21*32\"\n\"D21/10\"\n\"E21*1\"\n\"E22*2\"\n\"E23*3\"\n\"E24*4\"\n\"+E25*5\"\n\"+E26*6\"\n\"+E27*7\"\n\"+E28*8\"\n\"+E29*9\"\n\"+E30*10\"\n\"SUM(C20:C30)\"\n\"'Constant Value - 1st Year'!C32+'Constant Value - 1st Year'!C28+'Constant Value - 1st Year'!C58\"\n\"'Constant Value - 1st Year'!D32+'Constant Value - 1st Year'!D28+'Constant Value - 1st Year'!D68\"\n\"D34\"\n\"SUM(C32:C34)\"\n\"-C36\"\n\"SUM(C54:C56)\"\n\"D34\"\n\"C34\"\n\"D34/C34\"\n\"C17\"\n\"+F36\"\n\"D65-E65\"\n\"C57\"\n\"C67*F59\"\n\"D67\"\n\"+E85\"\n\"-E68\"\n\"SUM(C65:C68)\"\n\"SUM(C74:C78)\"\n\"SUM(D74:D84)\"\n\"SUM(E74:E83)\"\n\"D65\"\n\"E65\"\n\"D66\"\n\"D66\"\n\"+-E67\"\n\"+-D67\"\n\"+E85\"\n\"+E85\"\n\"A2\"\n\"A9\"\n\"IF(H2>G2,\"\"Out of compliance\"\",\"\"Good!\"\")\"\n\"A2\"\n\"C6*D6\"\n\"SUM(E6:E11)\"\n\"-C14*D14\"\n\"SUM(E12:E17)\"\n\"C6*D6\"\n\"SUM(E6:E16)\"\n\"-C19*D19\"\n\"SUM(E17:E24)\"\n\"C6*D6\"\n\"SUM(E6:E16)\"\n\"-C19*D19\"\n\"SUM(E17:E24)\"\n\"C6*D6\"\n\"SUM(E6:E16)\"\n\"-C19*D19\"\n\"SUM(E17:E24)\"\n\"C6*D6\"\n\"SUM(E6:E18)\"\n\"-C21*D21\"\n\"SUM(E19:E26)\"\n\"C5*D5\"\n\"SUM(E5:E15)\"\n\"-C18*D18\"\n\"SUM(E16:E23)\"\n\"B6-C6\"\n\"IF(F29<>\"\"\"\",VLOOKUP($F29,'Wattage Lookup'!$A$2:$C$897,3,FALSE)/1000,0)\"\n\"G29*I29\"\n\"J29*M29\"\n\"IF(N29<>\"\"\"\",VLOOKUP($N29,'Wattage Lookup'!$A$2:$C$897,3,FALSE)/1000,0)\"\n\"P29*O29\"\n\"Q29*U29\"\n\"M29*T29\"\n\"(J29-Q29)*E29\"\n\"K29-R29\"\n\"A29+1\"\n\"SUM(G29:G49)\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",(B13-B12)/(B14*2220000))))))))\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",B16*100)))))))\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",(B12-B11)/B16)))))))\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",B17/B8)))))))\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",B18*B9/2220000000)))))))\"\n\"IF(B8=0,\"\"\"\",IF(B9=0,\"\"\"\",IF(B10=0,\"\"\"\",IF(B11=0,\"\"\"\",IF(B12=0,\"\"\"\",IF(B13=0,\"\"\"\",IF(B14=0,\"\"\"\",100*(B10-B19)/B19)))))))\"\n\"IF(B14=0,\"\"\"\",(B13-B12)/(B14*2220000))\"\n\"IF(B16=0,\"\"\"\",B16*100)\"\n\"IF(B16=0,\"\"\"\",(B12-B11)/B16)\"\n\"IF(B8=0,\"\"\"\",B17/B8)\"\n\"IF(B18=0,\"\"\"\",B18*B9/2220000000)\"\n\"IF(B19=0,\"\"\"\",100*(B10-B19)/B19)\"\n\"SUM(G12:G13)\"\n\"SUM(G19:G21)\"\n\"G15+G23\"\n\"SUM(G28:G31)\"\n\"G35*0.08\"\n\"(40+20+61+10+515)*1000\"\n\"G49+G41+G33+G25\"\n\"D3\"\n\"G41/$G$7\"\n\"G49/$G$7\"\n\"G33/$G$7\"\n\"G25/$G$7\"\n\"G51/$G$7\"\n\"B53\"\n\"SUM(E54:E57)\"\n\"(E58-E205)\"\n\"(E58-E205)*G7\"\n\"(E58-E215)\"\n\"(E58-E215)*G7\"\n\"(E58-E228)\"\n\"(E58-E228)*G7\"\n\"D3\"\n\"E54\"\n\"E201\"\n\"E211\"\n\"E224\"\n\"(E54-E201)\"\n\"(E54-E201)*G7\"\n\"(E54-E211)\"\n\"(E54-E211)*G7\"\n\"(E54-E224)\"\n\"(E54-E224)*G7\"\n\"D3\"\n\"E55\"\n\"E202\"\n\"E212\"\n\"E225\"\n\"(E55-E202)\"\n\"(E55-E202)*G7\"\n\"(E55-E212)\"\n\"(E55-E212)*G7\"\n\"(E55-E225)\"\n\"(E55-E225)*G7\"\n\"D3\"\n\"E56\"\n\"E203\"\n\"E213\"\n\"E226\"\n\"(E56-E203)\"\n\"(E56-E203)*G7\"\n\"(E56-E213)\"\n\"(E56-E213)*G7\"\n\"(E56-E226)\"\n\"(E56-E226)*(G7)\"\n\"D3\"\n\"E57\"\n\"E204\"\n\"E214\"\n\"E227\"\n\"(E57-E204)\"\n\"(E57-E204)*G7\"\n\"(E57-E214)\"\n\"(E57-E214)*G7\"\n\"(E57-E227)\"\n\"(E57-E227)*G7\"\n\"SUM(E201:E204)\"\n\"SUM(E201:E204)\"\n\"E211+E212+E213+E214\"\n\"A3\"\n\"A18\"\n\"A58\"\n\"A128\"\n\"13641000/(930000+2000000+27250)\"\n\"A3\"\n\"13945000/(1000000+2000000+25000)\"\n\"14431000/(960000+2100000+20000)\"\n\"14592000/(1050000+2200000+20000)\"\n\"A31\"\n\"A71\"\n\"D134+D141+D149+D156+D164\"\n\"A303\"\n\"D9*0.47\"\n\"D9*0.47\"\n\"D9*0.06\"\n\"A48\"\n\"A123\"\n\"A136\"\n\"A306\"\n\"A55\"\n\"A68\"\n\"A79\"\n\"A94\"\n\"IF(SUM(I7:I8),I7+I8,\"\"\"\")\"\n\"IF(SUM(E7:E9),E7-E8-E9,\"\"\"\")\"\n\"IF(SUM(I9),I9-I10,\"\"\"\")\"\n\"IF(E16,E16-E17,\"\"\"\")\"\n\"IF(E16,E18/E16,\"\"\"\")\"\n\"IF(I17,I16/I17,\"\"\"\")\"\n\"IF(SUM(E26:E27),E25/AVERAGE(E26:E27),\"\"\"\")\"\n\"IF(E35,E34/E35,\"\"\"\")\"\n\"400000\"\n\"B8*0.75\"\n\"B8*0.25\"\n\"0.7*B8\"\n\"B25+B26\"\n\"0.5*B25\"\n\"B27-B28\"\n\"N35\"\n\"M36\"\n\"ROUND(O11,2)\"\n\"+C11\"\n\"+K11\"\n\"O12-P13\"\n\"+C12-D13\"\n\"+(E11+H11)-(F11+J11)\"\n\"K11\"\n\"O14\"\n\"+C14\"\n\"+AA7-AA8-AA9\"\n\"+O15\"\n\"+(F13+J13)-(E13+H13)\"\n\"ROUND(L13,2)\"\n\"+C14\"\n\"ROUND(SUM(W9:W12),2)\"\n\"+J39-H40-H41\"\n\"+J42\"\n\"+O16-P17\"\n\"+C16-D17\"\n\"SUM(Z13:Z15)\"\n\"ROUND(SUM(W14:W16),2)\"\n\"+O14\"\n\"+L22\"\n\"Z17-Z18\"\n\"AA11-AA20\"\n\"P20\"\n\"+D20\"\n\"P27\"\n\"ROUND(M46,2)\"\n\"P22+P23+P24+P25\"\n\"SUM(D22:D25)\"\n\"+P26\"\n\"+D26\"\n\"L31\"\n\"+L32+M58\"\n\"SUM(W25:W29)\"\n\"ROUND(M54,2)\"\n\"SUM(T10:T32)\"\n\"ROUND(M55,2)\"\n\"ROUND(L35,2)\"\n\"W31+W33\"\n\"+X31+X33\"\n\"SUM(AA26:AA34)\"\n\"+P31\"\n\"+D31\"\n\"AA23-AA36\"\n\"+P32+P58\"\n\"ROUND(SUM(N43:N45),2)\"\n\"W38+W39\"\n\"SUM(X38:X39)\"\n\"W35+W41\"\n\"+X41+X35\"\n\"+M52\"\n\"AA42-AA44\"\n\"+D32\"\n\"SUM(M11:M55)\"\n\"N57-M57\"\n\"+M58\"\n\"SUM(C11:C55)\"\n\"M57+M58\"\n\"V12*Y12\"\n\"C15*E15\"\n\"G15\"\n\"G19\"\n\"C22/E22\"\n\"C14/E14\"\n\"G14\"\n\"C17*E17\"\n\"D18*F18\"\n\"H18\"\n\"H29\"\n\"H24+H33\"\n\"D18*F18\"\n\"D16*F16\"\n\"+H16+H20+H24+H47+H32+H36\"\n\"D19*F19\"\n\"H19\"\n\"H66+H53+H40+H27\"\n\"1-SUM(G19:G27)\"\n\"(G19*(1-'Waste Defaults'!B21)*'Waste Defaults'!C21)+(G20*(1-'Waste Defaults'!B22)*'Waste Defaults'!C22)+(G21*(1-'Waste Defaults'!B23)*'Waste Defaults'!C23)+(G22*(1-'Waste Defaults'!B24)*'Waste Defaults'!C24)+(G23*(1-'Waste Defaults'!B25)*'Waste Defaults'!C25)+(G24*(1-'Waste Defaults'!B26)*'Waste Defaults'!C26)+(G25*(1-'Waste Defaults'!B27)*'Waste Defaults'!C27)+(G26*(1-'Waste Defaults'!B28)*'Waste Defaults'!C28)+(G27*(1-'Waste Defaults'!B29)*'Waste Defaults'!C29)\"\n\"G30*G17*(1-G32)*'Waste Defaults'!C31*(1-'Waste Defaults'!C32)*1.16*16*0.000001102\"\n\"G34*'Waste Defaults'!D41\"\n\"E17*G17\"\n\"I17+I20+I23+I26+I29+I32\"\n\"Commuting!G25\"\n\"'Company Vehicles'!G17\"\n\"'Other Employee Travel'!H36\"\n\"Electricity!H30\"\n\"'On-Site Fuel'!H43\"\n\"'Product Transport'!H69\"\n\"'Waste Emissions'!G36\"\n\"'Direct Emissions '!I35\"\n\"D12+F12+H12+D14+F14+H14+D16+F16\"\n\"J16/2204.6\"\n\"MMULT(eT,z)\"\n\"MMULT(F,z)\"\n\"MMULT(dT,v)\"\n\"MMULT(D,v)\"\n\"NOW()\"\n\"SUM(I4:I14)\"\n\"SUM(I18:I23)\"\n\"TODAY()\"\n\"- Mike is difficult to deal with.\"\n\"SUM(F12*G12)\"\n\"SUM(H12:H49)\"\n\"SUM(H53:H99)\"\n\"SUM(H50+H100)\"\n\"SUM(H50+H100)\"\n\"B7+C8-C9\"\n\"SUM(C7:F7)\"\n\"B10+C7-C4\"\n\"SUMPRODUCT(I2:I5,G7:G10)\"\n\"B7+C8-C9\"\n\"SUM(C7:F7)\"\n\"B10+C7-C4\"\n\"SUMPRODUCT(I2:I5,G7:G10)\"\n\"B7+C8-C9\"\n\"SUM(C7:F7)\"\n\"B10+C7-C4\"\n\"C10+C11\"\n\"SUMPRODUCT(I2:I4,G7:G9)+I5*G12+I6*G11\"\n\"B7+C8-C9\"\n\"SUM(C7:F7)\"\n\"B10+C7-C4\"\n\"C10+C11\"\n\"SUMPRODUCT(I2:I4,G7:G9)+I5*G12+I6*G11\"\n\"B3/B4\"\n\"MIN(B5:M5)\"\n\"MAX(B5:M5)\"\n\"AVERAGE(B5:M5)\"\n\"STDEV(B5:M5)\"\n\"B11-B15\"\n\"B59/B64\"\n\"VLOOKUP(E7,Supplier Master!$A$4:$B$10,2,FALSE)\"\n\"VLOOKUP(B7,Item Master!$A$7:$I$31,2,FALSE)\"\n\"VLOOKUP(A7,Item Master!$A$6:$H$31,2,FALSE)\"\n\"VLOOKUP(C7,Supplier Master!$A$4:$B$10,2,FALSE)\"\n\"70*60/VLOOKUP(J7,The Business!$A$8:$D$15,3,FALSE)\"\n\"VLOOKUP(J7,The Business!$A$8:$D$15,4,FALSE)\"\n\"SUM(G17:G40)/SUM(G17:G40,E17:E40)\"\n\"D7\"\n\"VLOOKUP(J7,Item Master!$A$6:$H$31,8,FALSE)\"\n\"IF(A17=\"\"Idle\"\",0,IF(ISBLANK(C16),D$9,IF(ISBLANK(D17),ROUND(AE16,0),D17)))\"\n\"I16\"\n\"H17+((G17+E17)/24)\"\n\"MIN(P17:U17)\"\n\"MATCH(V17,P17:U17,0)\"\n\"INDEX(P$7:U$7,1,W17)\"\n\"INDEX(J17:O17,1,W17)\"\n\"INDEX(J$8:O$8,1,W17)\"\n\"INDEX(J$9:O$9,1,W17)\"\n\"INDEX(J$10:O$10,1,W17)\"\n\"INDEX(J$12:O$12,1,W17)\"\n\"INDEX(J$13:O$13,1,W17)\"\n\"AD17-Y17+AA17*(AD17-Y17)/(Z17-AA17/168)/168\"\n\"IF(D6,B6&\"\"/\"\"&F6,\"\"\"\")\"\n\"IF(D6,IF(ISBLANK(C6),B5,C6),\"\"\"\")\"\n\"IF(D6,IF(B6=B5,F5+1,1),\"\"\"\")\"\n\"'Bill of Materials'!A7&\"\"/1\"\"\"\n\"'Bill of Materials'!B7\"\n\"MATCH(A5,Production Runs!$A$1:$A$26,FALSE)\"\n\"IF(ISERROR($D5),0,INT(INDEX(Production Runs!$A$1:$G$26,$D5,4)))\"\n\"IF(ISERROR($D5),0,INDEX(Production Runs!$A$1:$G$26,$D5,5))\"\n\"F5*C5\"\n\"'Bill of Materials'!A7&\"\"/2\"\"\"\n\"'Bill of Materials'!B7\"\n\"'Bill of Materials'!A7&\"\"/3\"\"\"\n\"'Bill of Materials'!B7\"\n\"MATCH(H6,Item Master!$A$6:$AA$6,FALSE)\"\n\"IF(D7,IF(ISBLANK(A7),E6,A7),\"\"\"\")\"\n\"IF(D7,IF(ISBLANK(B7),F6,B7),\"\"\"\")\"\n\"MATCH(E7,Item Master!$A$1:$A$31,FALSE)\"\n\"INDEX(Item Master!$A$1:$H$31,$G7,H$4)\"\n\"IF(E7=E6,L6,K7)-D7\"\n\"IF(L7>0,0,MIN(D7,L7*-1))\"\n\"IF(RIGHT(B12,5)=\"\"Total\"\",0,G11+F12-E12)\"\n\"MATCH(\"\"Inventory\"\",Item Master!$A$6:$Z$6,FALSE)\"\n\"'Bill of Materials'!A7\"\n\"VLOOKUP(A5,The Business!$A$8:$D$14,4,FALSE)\"\n\"VLOOKUP(A5,Item Master!$A$6:$H$31,F$1,FALSE)\"\n\"IF(E5,F5/E5,0)\"\n\"MAX(VLOOKUP(B5,Components Pivot!$A$3:$G$25,2,FALSE),E5*C5)\"\n\"VLOOKUP(B5,Item Master!$A$6:$H$31,J$1,FALSE)\"\n\"F5*C5*N5\"\n\"VLOOKUP(B5,Components Pivot!$A$3:$C$25,3,FALSE)\"\n\"IF(I5,(L5+J5)/I5,0)\"\n\"AND(O5,G5<M5)\"\n\"VLOOKUP(A5,Products Pivot!$A$4:$C$12,2,FALSE)\"\n\"MAX(O5-G5,0)\"\n\"P5*E5\"\n\"VLOOKUP(B5,Components Pivot!$A$3:$D$25,4,FALSE)\"\n\"F5+Q5\"\n\"IF(E5,T5/E5,0)\"\n\"MAX(VLOOKUP(B5,Components Pivot!$A$3:$G$25,5,FALSE),E5*C5)\"\n\"T5*C5*AB5\"\n\"VLOOKUP(B5,Components Pivot!$A$3:$G$25,6,FALSE)\"\n\"AC5>U5\"\n\"VLOOKUP(A5,Products Pivot!$A$4:$C$12,3,FALSE)\"\n\"AD5*E5\"\n\"AE5*C5\"\n\"VLOOKUP(B5,Components Pivot!$A$3:$G$25,7,FALSE)\"\n\"X5-AG5\"\n\"ROUND(Q5+AE5,0)\"\n\"IF(C4>0,C4/C5/15,0)\"\n\"IF(PropaneRpt!I5>0,PropaneRpt!I5,\"\" \"\")\"\n\"IF(PropaneRpt!N5>0,PropaneRpt!N5,\"\" \"\")\"\n\"SUM(B13:B30)\"\n\"IF(ButaneRpt!N5>0,ButaneRpt!N5,\"\" \"\")\"\n\"SUM(B37:B46)\"\n\"SUM(C9:M9)\"\n\"SUM(C9:C16)-SUM(C17:C27)\"\n\"\"\"Reporting Month:   \"\"&PropaneRpt!I5\"\n\"SUM(C5:C67)\"\n\"SUM(C9:M9)\"\n\"SUM(C9:C16)-SUM(C17:C27)\"\n\"\"\"Reporting Month:   \"\"&ButaneRpt!I5\"\n\"SUM(C5:C67)\"\n\"D5*F5\"\n\"D5*H5\"\n\"SUM(D5:D6)\"\n\"(D11*C11)*H11\"\n\"(D24*C24)*F24\"\n\"SUM(D11:D40)\"\n\"SUM(D45:D97)\"\n\"D98+D41\"\n\"IF(M32>0,SUM(C6:C20)/M32,0)\"\n\"IF(M32>0,SUM(D6:D20)/M32,0)\"\n\"IF(M32>0,SUM(E6:E20)/M32,0)\"\n\"IF(M32>0,SUM(F6:F20)/M32,0)\"\n\"IF(M32>0,SUM(G6:G20)/M32,0)\"\n\"IF(M32>0,SUM(H6:H20)/M32,0)\"\n\"IF(M32>0,SUM(I6:I20)/M32,0)\"\n\"IF(M32>0,SUM(J6:J20)/M32,0)\"\n\"IF(M32>0,SUM(K6:K20)/M32,0)\"\n\"IF(M32>0,SUM(L6:L20)/M32,0)\"\n\"IF(M32>0,SUM(M6:M20)/M32,0)\"\n\"IF(M32>0,SUM(N6:N20)/M32,0)\"\n\"IF(M32>0,SUM(O6:O20)/M32,0)\"\n\"IF(M32>0,SUM(P6:P20)/M32,0)\"\n\"IF(M32>0,SUM(Q6:Q20)/M32,0)\"\n\"E21-D21\"\n\"COUNT(E6:E20)\"\n\"1+A7\"\n\"SUM(G215:G370)\"\n\"SUM(G5:G214)\"\n\"SUM(G5:G370)\"\n\"SUM(F2:F98)\"\n\"B15+C15-D15\"\n\"F15-E15\"\n\"F15\"\n\"SUM(D15:D45)\"\n\"D46\"\n\"0.01*E50+130\"\n\"IF(G50>ABS(G46),\"\"Pass\"\",\"\"Fail\"\")\"\n\"A10+1\"\n\"+J4+O4+T4+Y4+AD4+AI4+AN4+AS4+AX4+BC4+BH4+BM4+BR4+BW4+CB4+CG4+CL4+CQ4+CV4+DA4+DF4+DK4+DP4+DU4+DZ4+EE4+EJ4+EO4+ET4+EY4+FD4+FI4+FN4+FS4+FX4+GC4+GH4+GM4+GR4+GW4+HB4+HG4+HL4+HQ4+HV4+IA4+IF4+IK4+Sheet2!D4+Sheet2!I4+Sheet2!N4+Sheet2!S4+Sheet2!X4+Sheet2!AC4+Sheet2!AH4+Sheet2!AM4+Sheet2!AR4+Sheet2!AW4+Sheet2!BG4+Sheet2!BB4+Sheet2!BL4+Sheet2!BQ4\"\n\"+I4+N4+S4+X4+AC4+AH4+AM4+AR4+AW4+BB4+BG4+BL4+BQ4+BV4+CA4+CF4+CK4+CP4+CU4+CZ4+DE4+DJ4+DO4+DT4+DY4+ED4+EI4+EN4+ES4+EX4+FC4+FH4+FM4+FR4+FW4+GB4+GG4+GL4+GQ4+GV4+HA4+HF4+HK4+HP4+HU4+HZ4+IE4+IJ4+Sheet2!C4+Sheet2!H4+Sheet2!M4+Sheet2!R4+Sheet2!W4+Sheet2!AB4+Sheet2!AG4+Sheet2!AL4+Sheet2!AQ4+Sheet2!AV4+Sheet2!BA4+Sheet2!BF4+Sheet2!BK4+Sheet2!BP4\"\n\"+H4+M4+R4+W4+AB4+AG4+AL4+AQ4+AV4+BA4+BF4+BK4+BP4+BU4+BZ4+CE4+CJ4+CO4+CT4+CY4+DD4+DI4+DN4+DS4+DX4+EC4+EH4+EM4+ER4+EW4+FB4+FG4+FL4+FQ4+FV4+GA4+GF4+GK4+GP4+GU4+GZ4+HE4+HJ4+HO4+HT4+HY4+ID4+II4+Sheet2!G4+Sheet2!B4+Sheet2!L4+Sheet2!Q4+Sheet2!V4+Sheet2!AA4+Sheet2!AF4+Sheet2!AK4+Sheet2!AP4+Sheet2!AU4+Sheet2!AZ4+Sheet2!BE4+Sheet2!BJ4+Sheet2!BO4\"\n\"SUM(B4:E4)\"\n\"+Sheet1!L4+Sheet1!Q4+Sheet1!V4+Sheet1!AA4+Sheet1!AF4+Sheet1!AK4+Sheet1!AP4+Sheet1!AU4+Sheet1!AZ4+Sheet1!BE4+Sheet1!BJ4+Sheet1!BO4+Sheet1!BT4+Sheet1!BY4+Sheet1!CD4+Sheet1!CI4+Sheet1!CN4+Sheet1!CS4+Sheet1!CX4+Sheet1!DC4+Sheet1!DH4+Sheet1!DM4+Sheet1!DR4+Sheet1!DW4+Sheet1!EB4+Sheet1!EG4+Sheet1!EL4+Sheet1!EQ4+Sheet1!EV4+Sheet1!FA4+Sheet1!FF4+Sheet1!FK4+Sheet1!FP4+Sheet1!FU4+Sheet1!FZ4+Sheet1!GE4+Sheet1!GJ4+Sheet1!GO4+Sheet1!GT4+Sheet1!GY4+Sheet1!HD4+Sheet1!HI4+Sheet1!HN4+Sheet1!HS4+Sheet1!HX4+Sheet1!IC4+Sheet1!IH4+Sheet1!IM4+Sheet2!F4+Sheet2!K4+Sheet2!P4+Sheet2!U4+Sheet2!Z4+Sheet2!AE4+Sheet2!AJ4+Sheet2!AO4+Sheet2!AT4+Sheet2!AY4+Sheet2!BD4+Sheet2!BI4+Sheet2!BN4+Sheet2!BS4\"\n\"SUM(B4:E4)\"\n\"SUMPRODUCT(C9:H9,C11:H11)\"\n\"SUMPRODUCT($C$9:$H$9,C14:H14)\"\n\"J14-K14\"\n\"SUMPRODUCT(C8:H8,C10:H10)\"\n\"SUMPRODUCT($C$8:$H$8,C13:H13)\"\n\"J13-K13\"\n\"SUMPRODUCT(C7:H7,C9:H9)\"\n\"SUMPRODUCT($C$7:$H$7,C12:H12)\"\n\"J12-K12\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(G10+B10)\"\n\"SUM(H10-I10+J10)\"\n\"SUM(H7:H715)\"\n\"SUM(H7:H2038)\"\n\"1+A9\"\n\"+B6/C6\"\n\"5236875\"\n\"9318146\"\n\"+B23-B24\"\n\"+B27*0.35\"\n\"+B29/200000\"\n\"SUM(F24:F29)\"\n\"2000000-4476\"\n\"SUM(F33:F35)\"\n\"B2\"\n\"B3\"\n\"B4\"\n\"B5\"\n\"B6\"\n\"B7\"\n\"B8\"\n\"B9\"\n\"B10\"\n\"B11\"\n\"B12\"\n\"B2\"\n\"(E2/E$13)+(F2/F$13)+(G2/G$13)+(H2/H$13)+(I2/I$13)+(J2/J$13)+(K2/K$13)+(L2/L$13)+(M2/M$13)+(N2/N$13)+(O2/O$13)\"\n\"P2/P$13\"\n\"1/F$2\"\n\"1/G$2\"\n\"1/$G3\"\n\"1/H$2\"\n\"1/$H3\"\n\"1/$H4\"\n\"1/I$2\"\n\"1/$I3\"\n\"1/$I4\"\n\"1/$I5\"\n\"1/J$2\"\n\"1/$J3\"\n\"1/$J4\"\n\"1/$J5\"\n\"1/$J6\"\n\"1/K$2\"\n\"1/$K3\"\n\"1/$K4\"\n\"1/$K5\"\n\"1/$K6\"\n\"1/$K7\"\n\"1/L$2\"\n\"1/$L3\"\n\"1/$L4\"\n\"1/$L5\"\n\"1/$L6\"\n\"1/$L7\"\n\"1/$L8\"\n\"1/M$2\"\n\"1/$M3\"\n\"1/$M4\"\n\"1/$M5\"\n\"1/$M6\"\n\"1/$M7\"\n\"1/$M8\"\n\"1/$M9\"\n\"1/N$2\"\n\"1/$N3\"\n\"1/$N4\"\n\"1/$N5\"\n\"1/$N6\"\n\"1/$N7\"\n\"1/$N8\"\n\"1/$N9\"\n\"1/$N10\"\n\"1/O$2\"\n\"1/$O3\"\n\"1/$O4\"\n\"1/$O5\"\n\"1/$O6\"\n\"1/$O7\"\n\"1/$O8\"\n\"1/$O9\"\n\"1/$O10\"\n\"1/$O11\"\n\"SUM(E2:E12)\"\n\"Q21\"\n\"AF21\"\n\"AN21\"\n\"AV21\"\n\"B19*B20\"\n\"SUM(B21:C21)\"\n\"SUM(K21:O21)\"\n\"SUM(U21:W21)\"\n\"C9+Table1s2!C19\"\n\"'[1]1-2overview'!$AT$48\"\n\"D10+D14+Table1s2!D7+Table1s2!D14+Table1s2!D18\"\n\"+'[1]1-4s1'!$J$36\"\n\"'[1]1-2overview'!$AT$35\"\n\"'[1]1-3s2-3CH4'!$S$16\"\n\"'[1]1-3s2-3N2O'!$S$16\"\n\"'[1]1-3s2-3NOX'!$S$16\"\n\"'[1]1-3s2-3CO'!$S$16\"\n\"'[1]1-3s2-3NMVOC'!$S$16\"\n\"SUM(I11:I13)\"\n\"'[1]1-2overview'!$AT$36\"\n\"'[1]1-3s2-3CH4'!$S$18\"\n\"'[1]1-3s2-3N2O'!$S$18\"\n\"'[1]1-3s2-3NOX'!$S$18\"\n\"'[1]1-3s2-3CO'!$S$18\"\n\"'[1]1-3s2-3NMVOC'!$S$18\"\n\"SUM(I15:I20)\"\n\"SUM(C8:C13)\"\n\"SUM(I8:I12)\"\n\"IF('[1]1-5s3CO2'!$G$31>0,'[1]1-5s3CO2'!$G$31,'[1]1-2overview'!$AT$37)\"\n\"IF('[1]1-5s3CH4'!$G$30>0,'[1]1-5s3CH4'!$G$30,'[1]1-3s2-3CH4'!$S$19)\"\n\"IF('[1]1-5s3N2O'!$G$30>0,'[1]1-5s3N2O'!$G$30,'[1]1-3s2-3N2O'!$S$19)\"\n\"IF('[1]1-5s3NOX'!$G$31>0,'[1]1-5s3NOX'!$G$31,'[1]1-3s2-3NOX'!$S$19)\"\n\"IF('[1]1-5s3CO'!$G$31>0,'[1]1-5s3CO'!$G$31,'[1]1-3s2-3CO'!$S$19)\"\n\"IF('[1]1-5s3NMVOC'!$G$31>0,'[1]1-5s3NMVOC'!$G$31,'[1]1-3s2-3NMVOC'!$S$19)\"\n\"'[1]1-2overview'!$AT$38\"\n\"'[1]1-3s2-3CH4'!$S$21\"\n\"'[1]1-3s2-3N2O'!$S$21\"\n\"'[1]1-3s2-3NOX'!$S$21\"\n\"'[1]1-3s2-3CO'!$S$21\"\n\"'[1]1-3s2-3NMVOC'!$S$21\"\n\"'[1]1-2overview'!$AT$39\"\n\"'[1]1-3s2-3CH4'!$S$22\"\n\"'[1]1-3s2-3N2O'!$S$22\"\n\"'[1]1-3s2-3NOX'!$S$22\"\n\"'[1]1-3s2-3CO'!$S$22\"\n\"'[1]1-3s2-3NMVOC'!$S$22\"\n\"'[1]1-2overview'!$AT$40\"\n\"'[1]1-3s2-3CH4'!$S$23\"\n\"'[1]1-3s2-3N2O'!$S$23\"\n\"'[1]1-3s2-3NOX'!$S$23\"\n\"'[1]1-3s2-3CO'!$S$23\"\n\"'[1]1-3s2-3NMVOC'!$S$23\"\n\"C13\"\n\"SUM(C15:C17)\"\n\"'[1]1-2overview'!$AT$42\"\n\"'[1]1-3s2-3CH4'!$S$24\"\n\"'[1]1-3s2-3N2O'!$S$24\"\n\"'[1]1-3s2-3NOX'!$S$24\"\n\"'[1]1-3s2-3CO'!$S$24\"\n\"'[1]1-3s2-3NMVOC'!$S$24\"\n\"'[1]1-2overview'!$AT$43\"\n\"'[1]1-3s2-3CH4'!$S$25\"\n\"'[1]1-3s2-3N2O'!$S$25\"\n\"'[1]1-3s2-3NOX'!$S$25\"\n\"'[1]1-3s2-3CO'!$S$25\"\n\"'[1]1-3s2-3NMVOC'!$S$25\"\n\"'[1]1-3s2-3NOX'!$S$26+'[1]1-3s2-3NOX'!$S$27\"\n\"'[1]1-3s2-3CO'!$S$26+'[1]1-3s2-3CO'!$S$27\"\n\"'[1]1-3s2-3NMVOC'!$S$26+'[1]1-3s2-3NMVOC'!$S$27\"\n\"'[1]1-2overview'!$AT$49\"\n\"'[1]1-3s2-3CH4'!$S$29\"\n\"'[1]1-3s2-3N2O'!$S$28\"\n\"'[1]1-3s2-3NOX'!$S$28\"\n\"'[1]1-3s2-3CO'!$S$28\"\n\"'[1]1-3s2-3NMVOC'!$S$28\"\n\"C20+C24\"\n\"'[1]1-6s1'!$H$21\"\n\"'[1]1-7s1'!$G$27\"\n\"IF('[1]1-8s2'!$G$17>0,'[1]1-8s2'!$G$17,'[1]1-8s1'!$G$16)\"\n\"IF('[1]1-8s2'!$G$16>0,'[1]1-8s2'!$G$16,'[1]1-8s1'!$G$15)\"\n\"IF('[1]1-8s2'!$G$18>0,'[1]1-8s2'!$G$18,'[1]1-8s1'!$G$17)+SUM('[1]1-8s4'!$G$16:$G$18)\"\n\"IF('[1]1-8s2'!$G$19>0,'[1]1-8s2'!$G$19,'[1]1-8s1'!$G$18)+'[1]1-8s3'!$F$14\"\n\"'[1]1-7s1'!$G$40\"\n\"'[1]1-7s1'!$G$48\"\n\"SUM(F10:F11)\"\n\"IF('[1]1-5s3NOX'!$G$50>0,'[1]1-5s3NOX'!$G$50,'[1]1-3s2-3NOX'!$S$32)\"\n\"IF('[1]1-5s3CO'!$G$50>0,'[1]1-5s3CO'!$G$50,'[1]1-3s2-3CO'!$S$32)\"\n\"IF('[1]1-5s3NMVOC'!$G$50>0,'[1]1-5s3NMVOC'!$G$50,'[1]1-3s2-3NMVOC'!$S$32)\"\n\"IF('[1]1-5s3SO2'!$G$50>0,'[1]1-5s3SO2'!$G$50,'[1]1-4s1'!$J$39/1000)\"\n\"'[1]1-3s2-3NOX'!$S$31\"\n\"'[1]1-3s2-3CO'!$S$31\"\n\"'[1]1-3s2-3NMVOC'!$S$31\"\n\"'[1]1-4s1'!$J$38/1000\"\n\"'[1]1-2overview'!$BA$48\"\n\"C9+C19+C25+Table2s2!C8+Table2s2!C11+Table2s2!C15+Table2s2!C22\"\n\"SUM(C10:C16)\"\n\"'[2]2-1s1'!$E$17\"\n\"'[2]2-1s2'!$E$17\"\n\"'[2]2-2s1'!$F$20\"\n\"'[2]2-3s1'!$F$20\"\n\"'[2]2-4s1'!$E$17+'[2]2-4s2'!$E$17\"\n\"'[2]2-5s2'!$E$16\"\n\"'[2]2-5s1'!$F$20\"\n\"'[2]2-5s3'!$F$20\"\n\"SUM(C17:C18)\"\n\"'[2]2-5s4'!$F$19\"\n\"'[2]2-5s5'!$E$18\"\n\"SUM(C20:C24)\"\n\"IF('[2]2-6s1'!$F$17>0,'[2]2-6s1'!$F$17,'[2]2-6s2'!$E$17)\"\n\"'[2]2-6s3'!$G$18\"\n\"'[2]2-6s3'!$G$17\"\n\"'[2]2-6s3'!$G$19\"\n\"'[2]2-7s1'!$G$16\"\n\"'[2]2-7s1'!$G$17\"\n\"'[2]2-8s1'!$G$18\"\n\"'[2]2-8s1'!$G$19\"\n\"'[2]2-8s1'!$G$21\"\n\"'[2]2-8s1'!$G$20\"\n\"'[2]2-9s1'!$F$18+'[2]2-9s4'!$E$20\"\n\"IF('[2]2-9s2'!$E$17>0,'[2]2-9s2'!$E$17,'[2]2-9s3'!$E$17)\"\n\"'[2]2-10s1'!$F$25\"\n\"'[2]2-10s2'!$F$25\"\n\"'[2]2-10s4'!$F$24\"\n\"'[2]2-10s3'!$F$25\"\n\"'[2]2-10s5'!$F$25\"\n\"IF('[2]2-11s1'!$G$19>0,'[2]2-11s1'!$G$19,'[2]2-11s2'!$E$18)\"\n\"'[2]2-11s3'!$G$16\"\n\"'[2]2-11s3'!$G$18\"\n\"'[2]2-11s3'!$G$17\"\n\"'[2]2-11s3'!$G$19\"\n\"IF('[2]2-11s1'!$G$20>0,'[2]2-11s1'!$G$20,'[2]2-11s4'!$E$18)\"\n\"IF('[2]2-11s1'!$G$21>0,'[2]2-11s1'!$G$21,'[2]2-11s5'!$E$17)\"\n\"'[2]2-11s10'!$G$17\"\n\"'[2]2-11s10'!$G$18\"\n\"'[2]2-11s10'!$G$19\"\n\"IF(('[2]2-11s6'!$J$20+'[2]2-11s7'!$J$20)>0,'[2]2-11s6'!$J$20+'[2]2-11s7'!$J$20,'[2]2-11s8'!$E$17+'[2]2-11s9'!$D$17)\"\n\"'[2]2-15s13'!$G$19+'[2]2-11s11'!$D$17\"\n\"+'[2]2-11s1'!$G$22\"\n\"SUM(C9:C10)\"\n\"'[2]2-12s1'!$H$16\"\n\"'[2]2-12s1'!$H$18\"\n\"'[2]2-12s1'!$H$17\"\n\"'[2]2-12s2'!$F$22\"\n\"'[2]2-13s1'!$F$24+'[2]2-13s2'!$F$24\"\n\"SUM(C12:C14)\"\n\"'[2]2-14s1'!$G$22\"\n\"'[2]2-14s1'!$G$26\"\n\"'[2]2-14s2'!$G$22\"\n\"'[2]2-14s2'!$G$26\"\n\"SUM(C16:C21)\"\n\"'[2]2-15s3'!$F$17\"\n\"'[2]2-15s3'!$F$18\"\n\"'[2]2-15s7'!$F$18\"\n\"'[2]2-15s7'!$F$19\"\n\"'[2]2-15s8'!$I$16+'[2]2-15s8'!$I$18\"\n\"'[2]2-15s8'!$I$17+'[2]2-15s8'!$I$19\"\n\"'[2]2-15s9'!$G$19+'[2]2-15s9'!$G$22\"\n\"'[2]2-15s9'!$G$20+'[2]2-15s9'!$G$23\"\n\"'[2]2-15s9'!$G$21+'[2]2-15s9'!$G$24\"\n\"'[2]2-15s10'!$G$15\"\n\"'[2]2-15s10'!$G$16\"\n\"'[2]2-15s11'!$G$15\"\n\"'[2]2-15s11'!$G$16\"\n\"'[2]2-15s12'!$G$16\"\n\"'[2]2-15s12'!$G$17\"\n\"'[2]2-15s13'!$G$19\"\n\"SUM(C8:C11)\"\n\"C8+C19+Table4s2!C12+Table4s2!C17+Table4s2!C18+Table4s2!C19+Table4s2!C25\"\n\"'[3]4-1s1'!$E$28/1000\"\n\"('[3]4-1s1'!$E$18+'[3]4-1s1'!$E$19)/1000\"\n\"'[3]4-1s1'!$E$20/1000\"\n\"'[3]4-1s1'!$E$21/1000\"\n\"'[3]4-1s1'!$E$22/1000\"\n\"'[3]4-1s1'!$E$23/1000\"\n\"'[3]4-1s1'!$E$24/1000\"\n\"'[3]4-1s1'!$E$25/1000\"\n\"'[3]4-1s1'!$E$26/1000\"\n\"'[3]4-1s1'!$E$27/1000\"\n\"'[3]4-1s1'!$G$28/1000\"\n\"'[3]4-1s2'!$E$26\"\n\"('[3]4-1s1'!$G$18+'[3]4-1s1'!$G$19)/1000\"\n\"'[3]4-1s1'!$G$20/1000\"\n\"'[3]4-1s1'!$G$21/1000\"\n\"'[3]4-1s1'!$G$22/1000\"\n\"'[3]4-1s1'!$G$23/1000\"\n\"'[3]4-1s1'!$G$24/1000\"\n\"'[3]4-1s1'!$G$25/1000\"\n\"'[3]4-1s1'!$G$26/1000\"\n\"'[3]4-1s1'!$G$27/1000\"\n\"'[3]4-1s2'!$E$20\"\n\"'[3]4-1s2'!$E$21\"\n\"'[3]4-1s2'!$E$23\"\n\"'[3]4-1s2'!$E$25\"\n\"'[3]4-2s1'!$I$23\"\n\"'[3]4-2s1'!$I$16+'[3]4-2s1'!$I$17+'[3]4-2s1'!$I$18\"\n\"'[3]4-2s1'!$I$19+'[3]4-2s1'!$I$20\"\n\"'[3]4-2s1'!$I$21+'[3]4-2s1'!$I$22\"\n\"'[3]4-5s5'!$I$18\"\n\"'[3]4-3s3'!$I$16\"\n\"'[3]4-3s3'!$I$19\"\n\"'[3]4-3s3'!$I$20\"\n\"'[3]4-3s3'!$I$17\"\n\"'[3]4-4s3'!$F$20\"\n\"'[3]4-4s3'!$F$23\"\n\"'[3]4-4s3'!$F$24\"\n\"'[3]4-4s3'!$F$21\"\n\"IF((D8+D14+D20+D26+D27)+(F8+F14+F20+F26+F27)>0,(D8+D14+D20+D26+D27)+(F8+F14+F20+F26+F27),0)\"\n\"IF((D8+D14+D20+D26+D27)+(F8+F14+F20+F26+F27)<0,(D8+D14+D20+D26+D27)+(F8+F14+F20+F26+F27),0)\"\n\"G8+G14+G20+G26+G27\"\n\"IF('[4]5-1s3'!$E$19<0,(-1)*'[4]5-1s3'!$E$19,0)\"\n\"IF('[4]5-1s3'!$E$19>0,(-1)*'[4]5-1s3'!$E$19,0)\"\n\"SUM(D15:D19)\"\n\"'[4]5-3s1'!$I$17\"\n\"'[4]5-3s1'!$I$21\"\n\"'[4]5-3s1'!$I$22\"\n\"'[4]5-3s1'!$I$18\"\n\"(44/12)*(SUM('[4]5-2s3'!$J$16:$J$21)+SUM('[4]5-2s4'!$L$16:$L$21))\"\n\"(44/12)*(SUM('[4]5-2s3'!$J$24:$J$25)+SUM('[4]5-2s4'!$L$24:$L$25))\"\n\"(44/12)*(SUM('[4]5-2s3'!$J$27:$J$29)+SUM('[4]5-2s4'!$L$27:$L$29))\"\n\"(44/12)*('[4]5-2s3'!$J$23+'[4]5-2s3'!$J$26+'[4]5-2s3'!$J$30+'[4]5-2s4'!$L$23+'[4]5-2s4'!$L$26+'[4]5-2s4'!$L$30)\"\n\"(44/12)*('[4]5-2s3'!$J$31+'[4]5-2s4'!$L$31)\"\n\" -(44/12)*(SUM('[4]5-4s1'!$H$16:$H$21)+SUM('[4]5-4s2'!$H$16:$H$21))\"\n\" -(44/12)*(SUM('[4]5-4s1'!$H$23:$H$24)+SUM('[4]5-4s2'!$H$23:$H$24))\"\n\" -(44/12)*(SUM('[4]5-4s1'!$H$26:$H$28)+SUM('[4]5-4s2'!$H$27:$H$29))\"\n\" -(44/12)*('[4]5-4s1'!$H$22+'[4]5-4s1'!$H$25+'[4]5-4s1'!$H$29+'[4]5-4s2'!$H$22+'[4]5-4s2'!$H$25+'[4]5-4s2'!$H$30)\"\n\" -(44/12)*('[4]5-4s1'!$H$30+'[4]5-4s2'!$H$31)\"\n\"IF('[4]5-5s4'!$F$22>0,'[4]5-5s4'!$F$22,0)\"\n\"IF('[4]5-5s4'!$F$22<0,'[4]5-5s4'!$F$22,0)\"\n\"C8+C12+C16+C17\"\n\"SUM(C9:C11)\"\n\"SUM('[5]6-1s1'!$N$23:$N$25)\"\n\"'[5]6-3s4'!$G$20\"\n\"'[5]6-2s4'!$G$21\"\n\"'[5]6-4s1'!$G$18\"\n\"C10+C21+Table7As2!D10+Table7As2!D11+Table7As2!D19+Table7As2!D27+Table7As2!D32\"\n\"D10+D21+Table7As2!F10+Table7As2!F11+Table7As2!F19+Table7As2!F27+Table7As2!F32\"\n\"Table7As1!K21\"\n\"C11+C18\"\n\"SUM(C12:C17)\"\n\"Table1s1!C10\"\n\"Table1s1!D10\"\n\"Table1s1!C14\"\n\"Table1s1!D14\"\n\"Table1s2!C7\"\n\"Table1s2!D7\"\n\"Table1s2!C14\"\n\"Table1s2!D14\"\n\"Table1s2!C18\"\n\"Table1s2!D18\"\n\"SUM(C19:C20)\"\n\"Table1s2!D24\"\n\"Table2s1!C8\"\n\"SUM(D22:D30)\"\n\"Table2s1!D8\"\n\"Table2s1!C19\"\n\"Table2s1!D19\"\n\"Table2s1!C25\"\n\"Table2s1!D25\"\n\"Table2s2!C8\"\n\"Table2s2!F8\"\n\"Table2s2!$J$11\"\n\"Table2s2!$J$15\"\n\"Table2s2!$K$15\"\n\"Table2s2!C22\"\n\"Table2s2!D22\"\n\"Table3s1!C7\"\n\"Table3s1!D7\"\n\"Table3s1!E7\"\n\"SUM(G12:G18)\"\n\"Table4s1!C8\"\n\"Table4s1!C19\"\n\"Table4s2!C12\"\n\"Table4s2!D17\"\n\"Table4s2!C25\"\n\"+Table5s1!D7\"\n\"SUM(G21:G23,G25:G26)\"\n\"Table5s1!D8\"\n\"Table5s1!D14\"\n\"Table5s1!F20\"\n\"Table5s1!D26\"\n\"SUM(G28:G31)\"\n\"Table6s1!D8\"\n\"Table6s1!D12\"\n\"+Table6s1!E12\"\n\"Table6s1!D17\"\n\"SUM(C12:C13)\"\n\"Table1s3!C10\"\n\"Table1s3!D10\"\n\"IF(Table7As1!C11>0, SUM(E11,E14,E15,E16,E17,E18,E19),SUM(E10,E14,E15,E16,E17,E18,E19))\"\n\"Table7As1!D9\"\n\"+'[1]1-1s1-3'!$T$45+Table7As1!C18\"\n\"Table7As1!C10\"\n\"Table7As1!E10\"\n\"+Table7As1!C18\"\n\"Table7As1!E18\"\n\"Table7As1!C21\"\n\"Table7As1!E21\"\n\"Table7As2!D10\"\n\"Table7As2!D19\"\n\"Table7As2!G27\"\n\"Table7As2!D32\"\n\"Table7As3!C11\"\n\"Table7As3!E11\"\n\"PAJ_MAD(X4:X13)\"\n\"AVERAGE($G$9:$G$18)\"\n\"AVERAGE($L$8:$U$8)\"\n\"PAJ_AVERAGE($G$9:$G$18,10)\"\n\"PAJ_AVERAGE($L$8:$U$8,10)\"\n\"PAJ_AVERAGE($G$9:$G$18,5)\"\n\"PAJ_AVERAGE($L$8:$U$8,5)\"\n\"PAJ_RAND(B6)\"\n\"PAJ_SimNORM(B7,$D$2,$D$3)\"\n\"PAJ_AVERAGE($G$9:$G$18,H6)\"\n\"PAJ_AVERAGE($L$8:$U$8,K6)\"\n\"PAJ_findname(\"\"Paul\"\")\"\n\"PAJ_REG_A($G$9:$G$18,10)\"\n\"PAJ_REG_B($G$9:$G$18,10)\"\n\"PAJ_REG_A($G$9:$G$18,5)\"\n\"PAJ_REG_B($G$9:$G$18,5)\"\n\"PAJ_REG_A($G$9:$G$18,H22)\"\n\"PAJ_REG_B($G$9:$G$18,H22)\"\n\"PAJ_LINEAR($H$20,$I$20,I23)\"\n\"PAJ_LINEAR($H$23:H24,$I$23:I24,G24)\"\n\"PAJ_REG_A($K$32:$T$32,10)\"\n\"PAJ_REG_B($K$32:$T$32,10)\"\n\"[1]!Q_Lq(K3:O3)\"\n\"[1]!Q_type($D$2:$D$4)\"\n\"[1]!Q_type(F3:H3)\"\n\"[1]!Q_L(D2:D4)\"\n\"[1]!Q_L(F3:H3)\"\n\"[1]!Q_W(D2:D4)\"\n\"[1]!Q_W(F3:H3)\"\n\"[1]!Q_Lq(D2:D4)\"\n\"[1]!Q_Lq(F3:H3)\"\n\"[1]!Q_Wq(D2:D4)\"\n\"[1]!Q_Wq(F3:H3)\"\n\"[1]!Q_Ls(D2:D4)\"\n\"[1]!Q_Ls(F3:H3)\"\n\"[1]!Q_Lq(K8:K12)\"\n\"[1]!Q_Ws(D2:D4)\"\n\"[1]!Q_Ws(F3:H3)\"\n\"[1]!Q_LamB(D2:D4)\"\n\"[1]!Q_LamB(F3:H3)\"\n\"[1]!Q_Eff(D2:D4)\"\n\"[1]!Q_Eff(F3:H3)\"\n\"[1]!Q_P0(D2:D4)\"\n\"[1]!Q_P0(F3:H3)\"\n\"[1]!Q_PB(D2:D4)\"\n\"[1]!Q_PB(F3:H3)\"\n\"[1]!Q_PF(D2:D4)\"\n\"[1]!Q_PF(F3:H3)\"\n\"[1]!Q_PTq(D20,D2:D4)\"\n\"[1]!Q_PTq(G20,F3:H3)\"\n\"[1]!Q_P0(D2:D4)\"\n\"[1]!Q_P0(F3:H3)\"\n\"[1]!Q_FNEXT(1,D2:D4)*D22\"\n\"[1]!Q_FNEXT(1,F3:H3)*G22\"\n\"[1]!Q_FNEXT(2,D2:D4)*D23\"\n\"[1]!Q_FNEXT(2,F3:H3)*G23\"\n\"[1]!Q_FNEXT(3,D2:D4)*D24\"\n\"[1]!Q_FNEXT(3,F3:H3)*G24\"\n\"[1]!Q_FNEXT(4,D2:D4)*D25\"\n\"[1]!Q_FNEXT(4,F3:H3)*G25\"\n\"[1]!Q_FNEXT(5,D2:D4)*D26\"\n\"[1]!Q_FNEXT(5,F3:H3)*G26\"\n\"[1]!Q_FNEXT(6,D2:D4)*D27\"\n\"[1]!Q_FNEXT(6,F3:H3)*G27\"\n\"[1]!Q_FNEXT(7,D2:D4)*D28\"\n\"[1]!Q_FNEXT(7,F3:H3)*G28\"\n\"[1]!Q_FNEXT(8,D2:D4)*D29\"\n\"[1]!Q_FNEXT(8,F3:H3)*G29\"\n\"[1]!Q_FNEXT(9,D2:D4)*D30\"\n\"[1]!Q_FNEXT(9,F3:H3)*G30\"\n\"[1]!Q_FNEXT(10,D2:D4)*D31\"\n\"[1]!Q_FNEXT(10,F3:H3)*G31\"\n\"PAJ_GCD(B2,C2)\"\n\"B2/D2\"\n\"C2/D2\"\n\"PAJ_LCM(B2,C2)\"\n\"[3]!Inv_TotProfit(F4,_Inv2)\"\n\"[3]!Inv_EOQ(_Inv2)\"\n\"[3]!Inv_TotProfit(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_InvCost(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_Level(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_Max(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_Reorder(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_CycleTime(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_ResTime(Inv1_Inst,_Inv1)\"\n\"[3]!Inv_EOQ(_Inv1)\"\n\"[3]!Inv_TotProfit(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_InvCost(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_Level(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_Max(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_Reorder(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_CycleTime(Inv1_Opt,_Inv1)\"\n\"[3]!Inv_ResTime(Inv1_Opt,_Inv1)\"\n\"[2]!RV_MEAN($H$3:$H$6)\"\n\"[2]!RV_VAR($H$3:$H$6)\"\n\"[2]!RV_SKEW($H$3:$H$6)\"\n\"[2]!RV_KURT($H$3:$H$6)\"\n\"[2]!RV_MEAN(_RV3)\"\n\"[2]!RV_VAR(_RV3)\"\n\"[2]!RV_SKEW(_RV3)\"\n\"[2]!RV_KURT(_RV3)\"\n\"[2]!RV_MEAN($F$17:$H$17)\"\n\"[2]!RV_VAR($F$17:$H$17)\"\n\"[2]!RV_SKEW($F$17:$H$17)\"\n\"[2]!RV_KURT($F$17:$H$17)\"\n\"F4/E4\"\n\"H4/2.2\"\n\"D2/2.2\"\n\"E20*2.2\"\n\"E27*F27\"\n\"SUM(G27:G28,G31,G32,G33,G34,G35,G36,G38,G39,G40,G41,G44,G45)\"\n\"SUM(B9:L9)\"\n\"SUM(B9:B17)-SUM(B19:B37)\"\n\"NOW()\"\n\"B6*C6\"\n\"B6\"\n\"D7/B7\"\n\"D9\"\n\"F9+D6\"\n\"B7+B9\"\n\"E10\"\n\"D12\"\n\"F9+D15\"\n\"H9+D15\"\n\"SUM(B13:B15)\"\n\"SUM(D10:D15)\"\n\"G12+D18\"\n\"D6\"\n\"F21\"\n\"SUM(B27:B28)\"\n\"-B25*E22\"\n\"B29+B30\"\n\"B6*C6\"\n\"H6\"\n\"B6\"\n\"B7+B9\"\n\"SUM(H9:H10)\"\n\"SUM(B13:B15)\"\n\"SUM(B16:B19)\"\n\"155-75\"\n\"D6\"\n\"SUM(D9:D29)\"\n\"SUM(B36:B37)\"\n\"I28\"\n\"B38-B39\"\n\"SUM(M5:M30)\"\n\"B6*C6\"\n\"H6\"\n\"B6\"\n\"B7+B9\"\n\"SUM(H9:H10)\"\n\"SUM(B13:B15)\"\n\"SUM(H15:H17)\"\n\"SUM(B16:B19)\"\n\"200-155\"\n\"SUM(B20:B24)\"\n\"SUM(H24:H27)\"\n\"SUM(B25:B30)\"\n\"D6\"\n\"SUM(D9:D33)\"\n\"SUM(B40:B41)\"\n\"I33\"\n\"B42-B43\"\n\"SUM(M5:M34)\"\n\"'Perpetual WeightedAverage'!B27\"\n\"'Perpetual FIFO'!B36\"\n\"'Perpetual LIFO'!B40\"\n\"0.05*B6\"\n\"SUMPRODUCT(B6:G6,B16:G16)\"\n\"SUMPRODUCT(B7:G7,B20:G20)\"\n\"B10+B11\"\n\"B2+B16-B5\"\n\"B20+C16-C5\"\n\"0.05*B6\"\n\"SUMPRODUCT(B6:G6,B16:G16)\"\n\"SUMPRODUCT(B7:G7,B20:G20)\"\n\"B10+B11\"\n\"B2+B16-B5\"\n\"B20+C16-C5\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"M4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"N4\"\n\"SUBTOTAL(9,L4:L14)\"\n\"SUBTOTAL(9,L19:L22)\"\n\"SUBTOTAL(9,L27:L29)\"\n\"SUBTOTAL(9,L34:L38)\"\n\"SUBTOTAL(9,L43:L71)\"\n\"SUBTOTAL(9,L81:L88)\"\n\"SUBTOTAL(9,L109:L110)\"\n\"SUBTOTAL(9,L122:L122)\"\n\"SUBTOTAL(9,L127:L132)\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"M171\"\n\"N171\"\n\"SUBTOTAL(9,L160:L177)\"\n\"SUBTOTAL(9,L4:L177)\"\n\"D7+D8+D9-D10-D11\"\n\"A103\"\n\"IF(A104=0,\"\"\"\",A104)\"\n\"C155\"\n\"B155\"\n\"B11*C11\"\n\"IF(D20=0,\"\"\"\",D11/D20)\"\n\"IF(D20=0,\"\"\"\",D12/D20)\"\n\"IF(D20=0,\"\"\"\",D13/D20)\"\n\"IF(D20=0,\"\"\"\",D14/D20)\"\n\"IF(D20=0,\"\"\"\",D15/D20)\"\n\"IF(D20=0,\"\"\"\",D16/D20)\"\n\"B161\"\n\"IF(D20=0,\"\"\"\",D17/D20)\"\n\"IF(D20=0,\"\"\"\",D18/D20)\"\n\"IF(D20=0,\"\"\"\",D19/D20)\"\n\"SUM(D11:D19)\"\n\"C137\"\n\"IF(D24=0,\"\"\"\",D24/D39)\"\n\"IF(D24=0,\"\"\"\",D24/E86)\"\n\"IF(D25=0,\"\"\"\",D25/D39)\"\n\"IF(D25=0,\"\"\"\",D25/E86)\"\n\"IF(D26=0,\"\"\"\",D26/D39)\"\n\"IF(D26=0,\"\"\"\",D26/E86)\"\n\"IF(D27=0,\"\"\"\",D27/D39)\"\n\"IF(D27=0,\"\"\"\",D27/E86)\"\n\"IF(D28=0,\"\"\"\",D28/D39)\"\n\"IF(D28=0,\"\"\"\",D28/E86)\"\n\"IF(D29=0,\"\"\"\",D29/D39)\"\n\"IF(D29=0,\"\"\"\",D29/E86)\"\n\"IF(D30=0,\"\"\"\",D30/D39)\"\n\"IF(D30=0,\"\"\"\",D30/E86)\"\n\"IF(D31=0,\"\"\"\",D31/D39)\"\n\"IF(D31=0,\"\"\"\",D31/E86)\"\n\"IF(D32=0,\"\"\"\",D32/D39)\"\n\"IF(D32=0,\"\"\"\",D32/E86)\"\n\"IF(A146=0,\"\"\"\",A146)\"\n\"IF(D33=0,\"\"\"\",D33/D39)\"\n\"IF(D33=0,\"\"\"\",D33/E86)\"\n\"IF(D34=0,\"\"\"\",D34/D39)\"\n\"IF(D34=0,\"\"\"\",D34/E86)\"\n\"IF(D35=0,\"\"\"\",D35/D39)\"\n\"IF(D35=0,\"\"\"\",D35/E86)\"\n\"IF(D36=0,\"\"\"\",D36/D39)\"\n\"IF(D36=0,\"\"\"\",D36/E86)\"\n\"IF(D37=0,\"\"\"\",D37/D39)\"\n\"IF(D37=0,\"\"\"\",D37/E86)\"\n\"IF(D38=0,\"\"\"\",D38/D39)\"\n\"IF(D38=0,\"\"\"\",D38/E86)\"\n\"SUM(D24:D38)\"\n\"B182\"\n\"B181\"\n\"IF(D42=0,\"\"\"\",D42/D58)\"\n\"IF(D42=0,\"\"\"\",D42/E86)\"\n\"B183\"\n\"IF(D43=0,\"\"\"\",D43/E86)\"\n\"IF(D44=0,\"\"\"\",D44/E86)\"\n\"IF(D45=0,\"\"\"\",D45/E86)\"\n\"IF(D46=0,\"\"\"\",D46/E86)\"\n\"IF(D47=0,\"\"\"\",D47/E86)\"\n\"IF(D48=0,\"\"\"\",D48/E86)\"\n\"IF(D49=0,\"\"\"\",D49/E86)\"\n\"IF(D50=0,\"\"\"\",D50/E86)\"\n\"IF(D51=0,\"\"\"\",D51/E86)\"\n\"B127*B128\"\n\"IF(D52=0,\"\"\"\",D52/E86)\"\n\"B129*B130\"\n\"IF(D53=0,\"\"\"\",D53/E86)\"\n\"B193\"\n\"IF(D54=0,\"\"\"\",D54/E86)\"\n\"IF(D55=0,\"\"\"\",D55/E86)\"\n\"IF(D56=0,\"\"\"\",D56/E86)\"\n\"IF(D57=0,\"\"\"\",D57/E86)\"\n\"SUM(D42:D57)\"\n\"IF(D58=0,\"\"\"\",D58/E86)\"\n\"((D39+D58)/2*B197)/100*B122\"\n\"IF(D59=0,\"\"\"\",D59/E86)\"\n\"D39+D58+D59\"\n\"IF(D60=0,\"\"\"\",D60/E86)\"\n\"IF(ISBLANK(OR(B111,B112)),0,B111)\"\n\"IF(OR(F211=0,ISBLANK(F211)),0,F211)\"\n\"B63*C63*E63\"\n\"B122\"\n\"IF(D63=0,\"\"\"\",D63/D70)\"\n\"B122\"\n\"IF(D64=0,\"\"\"\",D64/D70)\"\n\"B122\"\n\"IF(D65=0,\"\"\"\",D65/D70)\"\n\"B122\"\n\"IF(D66=0,\"\"\"\",D66/D70)\"\n\"B122\"\n\"IF(D67=0,\"\"\"\",D67/D70)\"\n\"IF(ISBLANK(OR(B116,B117)),0,B116*B117)\"\n\"B122\"\n\"IF(D68=0,\"\"\"\",D68/D70)\"\n\"IF(ISBLANK(OR(B118,B119)),0,B118*B119)\"\n\"B122\"\n\"IF(D69=0,\"\"\"\",D69/D70)\"\n\"SUM(B63:B69)\"\n\"IF(D70=0,\"\"\"\",D70/E86)\"\n\"B166\"\n\"B167\"\n\"B166*B167\"\n\"IF(D75=0,\"\"\"\",D75/E86)\"\n\"B168\"\n\"B169\"\n\"B168*B169\"\n\"IF(D76=0,\"\"\"\",D76/E86)\"\n\"B170\"\n\"B171\"\n\"IF(D77=0,\"\"\"\",D77/E86)\"\n\"B172\"\n\"B173\"\n\"B172*B173\"\n\"IF(D78=0,\"\"\"\",D78/E86)\"\n\"B174\"\n\"B175\"\n\"B174*B175\"\n\"IF(D79=0,\"\"\"\",D79/E86)\"\n\"B176\"\n\"B177\"\n\"B177*B176\"\n\"IF(D80=0,\"\"\"\",D80/E86)\"\n\"SUM(B75:B80)\"\n\"D81/D83\"\n\"D81/E86\"\n\"B178/100\"\n\"F90*C82\"\n\"D82/D83\"\n\"D82/E86\"\n\"D81+D82\"\n\"D60+D70+D81\"\n\"D85+D82\"\n\"IF(F90=0,\"\"\"\",F90/(B117+B119))\"\n\"IF(F90=0,\"\"\"\",F90/C155)\"\n\"IF(F90=0,\"\"\"\",(F90/(B128+B130)))\"\n\"IF(F90=0,\"\"\"\",F90/C157)\"\n\"D20\"\n\"IF(D39=0,\"\"\"\",D39/(B117+B119))\"\n\"IF(D39=0,\"\"\"\",D39/C155)\"\n\"+IF(D39=0,\"\"\"\",(D39/(B128+B130)))\"\n\"IF(D39=0,\"\"\"\",D39/C157)\"\n\"D39\"\n\"B90-B91\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B117+B119))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C155)\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B128+B130))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C157)\"\n\"D58+D59\"\n\"IF(D70=0,\"\"\"\",D70/(B117+B119))\"\n\"IF(D70=0,\"\"\"\",D70/C155)\"\n\"IF(D70=0,\"\"\"\",(D70/(B128+B130)))\"\n\"IF(D70=0,\"\"\"\",D70/C157)\"\n\"D70\"\n\"B94-C95\"\n\"IF(D81=0,\"\"\"\",D81/(B117+B119))\"\n\"IF(D81=0,\"\"\"\",D81/C155)\"\n\"IF(D81=0,\"\"\"\",(D81/B128+B130))\"\n\"IF(D81=0,\"\"\"\",D81/C157)\"\n\"D81\"\n\"IF(B120+B121=0,\"\"\"\",(1-(B120+B121)/(B117+B119)))\"\n\"IF(B130+B131=0,\"\"\"\",(1-((B131+B132)/(B128+B130))))\"\n\"((B131*B133)+(B132*B133))-((B128*C128)+(B130*C130))\"\n\"B127*B128\"\n\"B111\"\n\"B116*B117\"\n\"B118*B119\"\n\"IF(OR(D202<>0, E202<>0),E202*(1+E202)^D202/((1+E202)^D202-1),0)\"\n\"IF(OR(E202<>0, B202<>0),(((B202-C202)*(E202*(1+E202)^D202/((1+E202)^D202-1))+(C202*F202))/B202),0)\"\n\"(A211+B211+C211+E211)\"\n\"(B216+C216+E216)\"\n\"IF(A103=0,\"\"\"\",A103)\"\n\"C155\"\n\"B155\"\n\"B11*C11\"\n\"IF(D20=0,\"\"\"\",D11/D20)\"\n\"IF(D20=0,\"\"\"\",D12/D20)\"\n\"IF(D20=0,\"\"\"\",D13/D20)\"\n\"IF(D20=0,\"\"\"\",D14/D20)\"\n\"IF(D20=0,\"\"\"\",D15/D20)\"\n\"IF(D20=0,\"\"\"\",D16/D20)\"\n\"B161\"\n\"IF(D20=0,\"\"\"\",D17/D20)\"\n\"IF(D20=0,\"\"\"\",D18/D20)\"\n\"IF(D20=0,\"\"\"\",D19/D20)\"\n\"SUM(D11:D19)\"\n\"C137\"\n\"IF(D24=0,\"\"\"\",D24/D39)\"\n\"IF(D24=0,\"\"\"\",D24/E86)\"\n\"IF(D25=0,\"\"\"\",D25/D39)\"\n\"IF(D25=0,\"\"\"\",D25/E86)\"\n\"IF(D26=0,\"\"\"\",D26/D39)\"\n\"IF(D26=0,\"\"\"\",D26/E86)\"\n\"IF(D27=0,\"\"\"\",D27/D39)\"\n\"IF(D27=0,\"\"\"\",D27/E86)\"\n\"IF(D28=0,\"\"\"\",D28/D39)\"\n\"IF(D28=0,\"\"\"\",D28/E86)\"\n\"IF(D29=0,\"\"\"\",D29/D39)\"\n\"IF(D29=0,\"\"\"\",D29/E86)\"\n\"IF(D30=0,\"\"\"\",D30/D39)\"\n\"IF(D30=0,\"\"\"\",D30/E86)\"\n\"IF(D31=0,\"\"\"\",D31/D39)\"\n\"IF(D31=0,\"\"\"\",D31/E86)\"\n\"IF(D32=0,\"\"\"\",D32/D39)\"\n\"IF(D32=0,\"\"\"\",D32/E86)\"\n\"IF(A146=0,\"\"\"\",A146)\"\n\"IF(D33=0,\"\"\"\",D33/D39)\"\n\"IF(D33=0,\"\"\"\",D33/E86)\"\n\"IF(D34=0,\"\"\"\",D34/D39)\"\n\"IF(D34=0,\"\"\"\",D34/E86)\"\n\"IF(D35=0,\"\"\"\",D35/D39)\"\n\"IF(D35=0,\"\"\"\",D35/E86)\"\n\"IF(D36=0,\"\"\"\",D36/D39)\"\n\"IF(D36=0,\"\"\"\",D36/E86)\"\n\"IF(D37=0,\"\"\"\",D37/D39)\"\n\"IF(D37=0,\"\"\"\",D37/E86)\"\n\"IF(D38=0,\"\"\"\",D38/D39)\"\n\"IF(D38=0,\"\"\"\",D38/E86)\"\n\"SUM(D24:D38)\"\n\"B182\"\n\"B181\"\n\"IF(D42=0,\"\"\"\",D42/D58)\"\n\"IF(D42=0,\"\"\"\",D42/E86)\"\n\"B183\"\n\"IF(D43=0,\"\"\"\",D43/E86)\"\n\"IF(D44=0,\"\"\"\",D44/E86)\"\n\"IF(D45=0,\"\"\"\",D45/E86)\"\n\"IF(D46=0,\"\"\"\",D46/E86)\"\n\"IF(D47=0,\"\"\"\",D47/E86)\"\n\"IF(D48=0,\"\"\"\",D48/E86)\"\n\"IF(D49=0,\"\"\"\",D49/E86)\"\n\"IF(D50=0,\"\"\"\",D50/E86)\"\n\"IF(D51=0,\"\"\"\",D51/E86)\"\n\"B127*B128\"\n\"IF(D52=0,\"\"\"\",D52/E86)\"\n\"B129*B130\"\n\"IF(D53=0,\"\"\"\",D53/E86)\"\n\"B193\"\n\"IF(D54=0,\"\"\"\",D54/E86)\"\n\"IF(D55=0,\"\"\"\",D55/E86)\"\n\"IF(D56=0,\"\"\"\",D56/E86)\"\n\"IF(D57=0,\"\"\"\",D57/E86)\"\n\"SUM(D42:D57)\"\n\"IF(D58=0,\"\"\"\",D58/E86)\"\n\"((D39+D58)/2*B197)/100*B122\"\n\"IF(D59=0,\"\"\"\",D59/E86)\"\n\"D39+D58+D59\"\n\"IF(D60=0,\"\"\"\",D60/E86)\"\n\"IF(ISBLANK(OR(B111,B112)),0,B111)\"\n\"IF(OR(F211=0,ISBLANK(F211)),0,F211)\"\n\"B63*C63*E63\"\n\"B122\"\n\"IF(D63=0,\"\"\"\",D63/D70)\"\n\"B122\"\n\"IF(D64=0,\"\"\"\",D64/D70)\"\n\"B122\"\n\"IF(D65=0,\"\"\"\",D65/D70)\"\n\"B122\"\n\"IF(D66=0,\"\"\"\",D66/D70)\"\n\"B122\"\n\"IF(D67=0,\"\"\"\",D67/D70)\"\n\"IF(ISBLANK(OR(B116,B117)),0,B116*B117)\"\n\"B122\"\n\"IF(D68=0,\"\"\"\",D68/D70)\"\n\"IF(ISBLANK(OR(B118,B119)),0,B118*B119)\"\n\"B122\"\n\"IF(D69=0,\"\"\"\",D69/D70)\"\n\"SUM(B63:B69)\"\n\"IF(D70=0,\"\"\"\",D70/E86)\"\n\"B166\"\n\"B167\"\n\"B166*B167\"\n\"IF(D75=0,\"\"\"\",D75/E86)\"\n\"B168\"\n\"B169\"\n\"B168*B169\"\n\"IF(D76=0,\"\"\"\",D76/E86)\"\n\"B170\"\n\"B171\"\n\"IF(D77=0,\"\"\"\",D77/E86)\"\n\"B172\"\n\"B173\"\n\"B172*B173\"\n\"IF(D78=0,\"\"\"\",D78/E86)\"\n\"B174\"\n\"B175\"\n\"B174*B175\"\n\"IF(D79=0,\"\"\"\",D79/E86)\"\n\"B176\"\n\"B177\"\n\"B177*B176\"\n\"IF(D80=0,\"\"\"\",D80/E86)\"\n\"SUM(B75:B80)\"\n\"D81/D83\"\n\"D81/E86\"\n\"B178/100\"\n\"F90*C82\"\n\"D82/D83\"\n\"D82/E86\"\n\"D81+D82\"\n\"D60+D70+D81\"\n\"D85+D82\"\n\"IF(F90=0,\"\"\"\",F90/(B117+B119))\"\n\"IF(F90=0,\"\"\"\",F90/C155)\"\n\"IF(F90=0,\"\"\"\",(F90/(B128+B130)))\"\n\"IF(F90=0,\"\"\"\",F90/C157)\"\n\"D20\"\n\"IF(D39=0,\"\"\"\",D39/(B117+B119))\"\n\"IF(D39=0,\"\"\"\",D39/C155)\"\n\"+IF(D39=0,\"\"\"\",(D39/(B128+B130)))\"\n\"IF(D39=0,\"\"\"\",D39/C157)\"\n\"D39\"\n\"B90-B91\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B117+B119))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C155)\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B128+B130))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C157)\"\n\"D58+D59\"\n\"IF(D70=0,\"\"\"\",D70/(B117+B119))\"\n\"IF(D70=0,\"\"\"\",D70/C155)\"\n\"IF(D70=0,\"\"\"\",(D70/(B128+B130)))\"\n\"IF(D70=0,\"\"\"\",D70/C157)\"\n\"D70\"\n\"B94-C95\"\n\"IF(D81=0,\"\"\"\",D81/(B117+B119))\"\n\"IF(D81=0,\"\"\"\",D81/C155)\"\n\"IF(D81=0,\"\"\"\",(D81/(B128+B130)))\"\n\"IF(D81=0,\"\"\"\",D81/C157)\"\n\"D81\"\n\"IF(B120+B121=0,\"\"\"\",(1-(B120+B121)/(B117+B119)))\"\n\"IF(B130+B131=0,\"\"\"\",(1-((B131+B132)/(B128+B130))))\"\n\"((B131*B133)+(B132*B133))-((B128*C128)+(B130*C130))\"\n\"B127*B128\"\n\"B111\"\n\"B116*B117\"\n\"B118*B119\"\n\"IF(OR(D202<>0, E202<>0),E202*(1+E202)^D202/((1+E202)^D202-1),0)\"\n\"IF(OR(E202<>0, B202<>0),(((B202-C202)*(E202*(1+E202)^D202/((1+E202)^D202-1))+(C202*F202))/B202),0)\"\n\"(A211+B211+C211+E211)\"\n\"(B216+C216+E216)\"\n\"IF(A103=0,\"\"\"\",A103)\"\n\"C155\"\n\"B155\"\n\"B11*C11\"\n\"IF(D20=0,\"\"\"\",D11/D20)\"\n\"IF(D20=0,\"\"\"\",D12/D20)\"\n\"IF(D20=0,\"\"\"\",D13/D20)\"\n\"IF(D20=0,\"\"\"\",D14/D20)\"\n\"IF(D20=0,\"\"\"\",D15/D20)\"\n\"IF(D20=0,\"\"\"\",D16/D20)\"\n\"B161\"\n\"IF(D20=0,\"\"\"\",D17/D20)\"\n\"IF(D20=0,\"\"\"\",D18/D20)\"\n\"IF(D20=0,\"\"\"\",D19/D20)\"\n\"SUM(D11:D19)\"\n\"C137\"\n\"IF(D24=0,\"\"\"\",D24/D39)\"\n\"IF(D24=0,\"\"\"\",D24/E86)\"\n\"IF(D25=0,\"\"\"\",D25/D39)\"\n\"IF(D25=0,\"\"\"\",D25/E86)\"\n\"IF(D26=0,\"\"\"\",D26/D39)\"\n\"IF(D26=0,\"\"\"\",D26/E86)\"\n\"IF(D27=0,\"\"\"\",D27/D39)\"\n\"IF(D27=0,\"\"\"\",D27/E86)\"\n\"IF(D28=0,\"\"\"\",D28/D39)\"\n\"IF(D28=0,\"\"\"\",D28/E86)\"\n\"IF(D29=0,\"\"\"\",D29/D39)\"\n\"IF(D29=0,\"\"\"\",D29/E86)\"\n\"IF(D30=0,\"\"\"\",D30/D39)\"\n\"IF(D30=0,\"\"\"\",D30/E86)\"\n\"IF(D31=0,\"\"\"\",D31/D39)\"\n\"IF(D31=0,\"\"\"\",D31/E86)\"\n\"IF(D32=0,\"\"\"\",D32/D39)\"\n\"IF(D32=0,\"\"\"\",D32/E86)\"\n\"IF(A146=0,\"\"\"\",A146)\"\n\"IF(D33=0,\"\"\"\",D33/D39)\"\n\"IF(D33=0,\"\"\"\",D33/E86)\"\n\"IF(D34=0,\"\"\"\",D34/D39)\"\n\"IF(D34=0,\"\"\"\",D34/E86)\"\n\"IF(D35=0,\"\"\"\",D35/D39)\"\n\"IF(D35=0,\"\"\"\",D35/E86)\"\n\"IF(D36=0,\"\"\"\",D36/D39)\"\n\"IF(D36=0,\"\"\"\",D36/E86)\"\n\"IF(D37=0,\"\"\"\",D37/D39)\"\n\"IF(D37=0,\"\"\"\",D37/E86)\"\n\"IF(D38=0,\"\"\"\",D38/D39)\"\n\"IF(D38=0,\"\"\"\",D38/E86)\"\n\"SUM(D24:D38)\"\n\"B182\"\n\"B181\"\n\"IF(D42=0,\"\"\"\",D42/D58)\"\n\"IF(D42=0,\"\"\"\",D42/E86)\"\n\"B183\"\n\"IF(D43=0,\"\"\"\",D43/E86)\"\n\"IF(D44=0,\"\"\"\",D44/E86)\"\n\"IF(D45=0,\"\"\"\",D45/E86)\"\n\"IF(D46=0,\"\"\"\",D46/E86)\"\n\"IF(D47=0,\"\"\"\",D47/E86)\"\n\"IF(D48=0,\"\"\"\",D48/E86)\"\n\"IF(D49=0,\"\"\"\",D49/E86)\"\n\"IF(D50=0,\"\"\"\",D50/E86)\"\n\"IF(D51=0,\"\"\"\",D51/E86)\"\n\"B127*B128\"\n\"IF(D52=0,\"\"\"\",D52/E86)\"\n\"B129*B130\"\n\"IF(D53=0,\"\"\"\",D53/E86)\"\n\"B193\"\n\"IF(D54=0,\"\"\"\",D54/E86)\"\n\"IF(D55=0,\"\"\"\",D55/E86)\"\n\"IF(D56=0,\"\"\"\",D56/E86)\"\n\"IF(D57=0,\"\"\"\",D57/E86)\"\n\"SUM(D42:D57)\"\n\"IF(D58=0,\"\"\"\",D58/E86)\"\n\"((D39+D58)/2*B197)/100*B122\"\n\"IF(D59=0,\"\"\"\",D59/E86)\"\n\"D39+D58+D59\"\n\"IF(D60=0,\"\"\"\",D60/E86)\"\n\"IF(ISBLANK(OR(B111,B112)),0,B111)\"\n\"IF(OR(F211=0,ISBLANK(F211)),0,F211)\"\n\"B63*C63*E63\"\n\"B122\"\n\"IF(D63=0,\"\"\"\",D63/D70)\"\n\"B122\"\n\"IF(D64=0,\"\"\"\",D64/D70)\"\n\"B122\"\n\"IF(D65=0,\"\"\"\",D65/D70)\"\n\"B122\"\n\"IF(D66=0,\"\"\"\",D66/D70)\"\n\"B122\"\n\"IF(D67=0,\"\"\"\",D67/D70)\"\n\"IF(ISBLANK(OR(B116,B117)),0,B116*B117)\"\n\"B122\"\n\"IF(D68=0,\"\"\"\",D68/D70)\"\n\"IF(ISBLANK(OR(B118,B119)),0,B118*B119)\"\n\"B122\"\n\"IF(D69=0,\"\"\"\",D69/D70)\"\n\"SUM(B63:B69)\"\n\"IF(D70=0,\"\"\"\",D70/E86)\"\n\"B166\"\n\"B167\"\n\"B166*B167\"\n\"IF(D75=0,\"\"\"\",D75/E86)\"\n\"B168\"\n\"B169\"\n\"B168*B169\"\n\"IF(D76=0,\"\"\"\",D76/E86)\"\n\"B170\"\n\"B171\"\n\"IF(D77=0,\"\"\"\",D77/E86)\"\n\"B172\"\n\"B173\"\n\"B172*B173\"\n\"IF(D78=0,\"\"\"\",D78/E86)\"\n\"B174\"\n\"B175\"\n\"B174*B175\"\n\"IF(D79=0,\"\"\"\",D79/E86)\"\n\"B176\"\n\"B177\"\n\"B177*B176\"\n\"IF(D80=0,\"\"\"\",D80/E86)\"\n\"SUM(B75:B80)\"\n\"D81/D83\"\n\"D81/E86\"\n\"B178/100\"\n\"F90*C82\"\n\"D82/D83\"\n\"D82/E86\"\n\"D81+D82\"\n\"D60+D70+D81\"\n\"D85+D82\"\n\"IF(F90=0,\"\"\"\",F90/(B117+B119))\"\n\"IF(F90=0,\"\"\"\",F90/C155)\"\n\"IF(F90=0,\"\"\"\",(F90/(B128+B130)))\"\n\"IF(F90=0,\"\"\"\",F90/C157)\"\n\"D20\"\n\"IF(D39=0,\"\"\"\",D39/(B117+B119))\"\n\"IF(D39=0,\"\"\"\",D39/C155)\"\n\"+IF(D39=0,\"\"\"\",(D39/(B128+130)))\"\n\"IF(D39=0,\"\"\"\",D39/C157)\"\n\"D39\"\n\"B90-B91\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B117+B119))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C155)\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B128+B130))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C157)\"\n\"D58+D59\"\n\"IF(D70=0,\"\"\"\",D70/(B117+B119))\"\n\"IF(D70=0,\"\"\"\",D70/C155)\"\n\"IF(D70=0,\"\"\"\",(D70/(B128+B130)))\"\n\"IF(D70=0,\"\"\"\",D70/C157)\"\n\"D70\"\n\"B94-C95\"\n\"IF(D81=0,\"\"\"\",D81/(B117+B119))\"\n\"IF(D81=0,\"\"\"\",D81/C155)\"\n\"IF(D81=0,\"\"\"\",(D81/B128+B130))\"\n\"IF(D81=0,\"\"\"\",D81/C157)\"\n\"D81\"\n\"IF(B120+B121=0,\"\"\"\",(1-(B120+B121)/(B117+B119)))\"\n\"IF(B130+B131=0,\"\"\"\",(1-((B131+B132)/(B128+B130))))\"\n\"((B131*B133)+(B132*B133))-((B128*C128)+(B130*C130))\"\n\"B127*B128\"\n\"B111\"\n\"B116*B117\"\n\"B118*B119\"\n\"IF(OR(D202<>0, E202<>0),E202*(1+E202)^D202/((1+E202)^D202-1),0)\"\n\"IF(OR(E202<>0, B202<>0),(((B202-C202)*(E202*(1+E202)^D202/((1+E202)^D202-1))+(C202*F202))/B202),0)\"\n\"(A211+B211+C211+E211)\"\n\"(B216+C216+E216)\"\n\"IF(A103=0,\"\"\"\",A103)\"\n\"C155\"\n\"B155\"\n\"B11*C11\"\n\"IF(D20=0,\"\"\"\",D11/D20)\"\n\"IF(D20=0,\"\"\"\",D12/D20)\"\n\"IF(D20=0,\"\"\"\",D13/D20)\"\n\"IF(D20=0,\"\"\"\",D14/D20)\"\n\"IF(D20=0,\"\"\"\",D15/D20)\"\n\"IF(D20=0,\"\"\"\",D16/D20)\"\n\"B161\"\n\"IF(D20=0,\"\"\"\",D17/D20)\"\n\"IF(D20=0,\"\"\"\",D18/D20)\"\n\"IF(D20=0,\"\"\"\",D19/D20)\"\n\"SUM(D11:D19)\"\n\"C137\"\n\"IF(D24=0,\"\"\"\",D24/D39)\"\n\"IF(D24=0,\"\"\"\",D24/E86)\"\n\"IF(D25=0,\"\"\"\",D25/D39)\"\n\"IF(D25=0,\"\"\"\",D25/E86)\"\n\"IF(D26=0,\"\"\"\",D26/D39)\"\n\"IF(D26=0,\"\"\"\",D26/E86)\"\n\"IF(D27=0,\"\"\"\",D27/D39)\"\n\"IF(D27=0,\"\"\"\",D27/E86)\"\n\"IF(D28=0,\"\"\"\",D28/D39)\"\n\"IF(D28=0,\"\"\"\",D28/E86)\"\n\"IF(D29=0,\"\"\"\",D29/D39)\"\n\"IF(D29=0,\"\"\"\",D29/E86)\"\n\"IF(D30=0,\"\"\"\",D30/D39)\"\n\"IF(D30=0,\"\"\"\",D30/E86)\"\n\"IF(D31=0,\"\"\"\",D31/D39)\"\n\"IF(D31=0,\"\"\"\",D31/E86)\"\n\"IF(D32=0,\"\"\"\",D32/D39)\"\n\"IF(D32=0,\"\"\"\",D32/E86)\"\n\"IF(A146=0,\"\"\"\",A146)\"\n\"IF(D33=0,\"\"\"\",D33/D39)\"\n\"IF(D33=0,\"\"\"\",D33/E86)\"\n\"IF(D34=0,\"\"\"\",D34/D39)\"\n\"IF(D34=0,\"\"\"\",D34/E86)\"\n\"IF(D35=0,\"\"\"\",D35/D39)\"\n\"IF(D35=0,\"\"\"\",D35/E86)\"\n\"IF(D36=0,\"\"\"\",D36/D39)\"\n\"IF(D36=0,\"\"\"\",D36/E86)\"\n\"IF(D37=0,\"\"\"\",D37/D39)\"\n\"IF(D37=0,\"\"\"\",D37/E86)\"\n\"IF(D38=0,\"\"\"\",D38/D39)\"\n\"IF(D38=0,\"\"\"\",D38/E86)\"\n\"SUM(D24:D38)\"\n\"B182\"\n\"B181\"\n\"IF(D42=0,\"\"\"\",D42/D58)\"\n\"IF(D42=0,\"\"\"\",D42/E86)\"\n\"B183\"\n\"IF(D43=0,\"\"\"\",D43/E86)\"\n\"IF(D44=0,\"\"\"\",D44/E86)\"\n\"IF(D45=0,\"\"\"\",D45/E86)\"\n\"IF(D46=0,\"\"\"\",D46/E86)\"\n\"IF(D47=0,\"\"\"\",D47/E86)\"\n\"IF(D48=0,\"\"\"\",D48/E86)\"\n\"IF(D49=0,\"\"\"\",D49/E86)\"\n\"IF(D50=0,\"\"\"\",D50/E86)\"\n\"IF(D51=0,\"\"\"\",D51/E86)\"\n\"B127*B128\"\n\"IF(D52=0,\"\"\"\",D52/E86)\"\n\"B129*B130\"\n\"IF(D53=0,\"\"\"\",D53/E86)\"\n\"B193\"\n\"IF(D54=0,\"\"\"\",D54/E86)\"\n\"IF(D55=0,\"\"\"\",D55/E86)\"\n\"IF(D56=0,\"\"\"\",D56/E86)\"\n\"IF(D57=0,\"\"\"\",D57/E86)\"\n\"SUM(D42:D57)\"\n\"IF(D58=0,\"\"\"\",D58/E86)\"\n\"((D39+D58)/2*B197)/100*B122\"\n\"IF(D59=0,\"\"\"\",D59/E86)\"\n\"D39+D58+D59\"\n\"IF(D60=0,\"\"\"\",D60/E86)\"\n\"IF(ISBLANK(OR(B111,B112)),0,B111)\"\n\"IF(OR(F211=0,ISBLANK(F211)),0,F211)\"\n\"B63*C63*E63\"\n\"B122\"\n\"IF(D63=0,\"\"\"\",D63/D70)\"\n\"B122\"\n\"IF(D64=0,\"\"\"\",D64/D70)\"\n\"B122\"\n\"IF(D65=0,\"\"\"\",D65/D70)\"\n\"B122\"\n\"IF(D66=0,\"\"\"\",D66/D70)\"\n\"B122\"\n\"IF(D67=0,\"\"\"\",D67/D70)\"\n\"IF(ISBLANK(OR(B116,B117)),0,B116*B117)\"\n\"B122\"\n\"IF(D68=0,\"\"\"\",D68/D70)\"\n\"IF(ISBLANK(OR(B118,B119)),0,B118*B119)\"\n\"B122\"\n\"IF(D69=0,\"\"\"\",D69/D70)\"\n\"SUM(B63:B69)\"\n\"IF(D70=0,\"\"\"\",D70/E86)\"\n\"B166\"\n\"B167\"\n\"B166*B167\"\n\"IF(D75=0,\"\"\"\",D75/E86)\"\n\"B168\"\n\"B169\"\n\"B168*B169\"\n\"IF(D76=0,\"\"\"\",D76/E86)\"\n\"B170\"\n\"B171\"\n\"IF(D77=0,\"\"\"\",D77/E86)\"\n\"B172\"\n\"B173\"\n\"B172*B173\"\n\"IF(D78=0,\"\"\"\",D78/E86)\"\n\"B174\"\n\"B175\"\n\"B174*B175\"\n\"IF(D79=0,\"\"\"\",D79/E86)\"\n\"B176\"\n\"B177\"\n\"B177*B176\"\n\"IF(D80=0,\"\"\"\",D80/E86)\"\n\"SUM(B75:B80)\"\n\"D81/D83\"\n\"D81/E86\"\n\"B178/100\"\n\"F90*C82\"\n\"D82/D83\"\n\"D82/E86\"\n\"D81+D82\"\n\"D60+D70+D81\"\n\"D85+D82\"\n\"IF(F90=0,\"\"\"\",F90/(B117+B119))\"\n\"IF(F90=0,\"\"\"\",F90/C155)\"\n\"IF(F90=0,\"\"\"\",(F90/(B128+B130)))\"\n\"IF(F90=0,\"\"\"\",F90/C157)\"\n\"D20\"\n\"IF(D39=0,\"\"\"\",D39/(B117+B119))\"\n\"IF(D39=0,\"\"\"\",D39/C155)\"\n\"+IF(D39=0,\"\"\"\",(D39/(B128+B130)))\"\n\"IF(D39=0,\"\"\"\",D39/C157)\"\n\"D39\"\n\"B90-B91\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B117+B119))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C155)\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/(B128+B130))\"\n\"IF(D60=0,\"\"\"\",(D58+D59)/C157)\"\n\"D58+D59\"\n\"IF(D70=0,\"\"\"\",D70/(B117+B119))\"\n\"IF(D70=0,\"\"\"\",D70/C155)\"\n\"IF(D70=0,\"\"\"\",(D70/(B128+B130)))\"\n\"IF(D70=0,\"\"\"\",D70/C157)\"\n\"D70\"\n\"B94-C95\"\n\"IF(D81=0,\"\"\"\",D81/(B117+B119))\"\n\"IF(D81=0,\"\"\"\",D81/C155)\"\n\"IF(D81=0,\"\"\"\",(D81/B128+B130))\"\n\"IF(D81=0,\"\"\"\",D81/C157)\"\n\"D81\"\n\"IF(B120+B121=0,\"\"\"\",(1-(B120+B121)/(B117+B119)))\"\n\"IF(B130+B131=0,\"\"\"\",(1-((B131+B132)/(B128+B130))))\"\n\"((B131*B133)+(B132*B133))-((B128*C128)+(B130*C130))\"\n\"B127*B128\"\n\"B111\"\n\"B116*B117\"\n\"B118*B119\"\n\"IF(OR(D202<>0, E202<>0),E202*(1+E202)^D202/((1+E202)^D202-1),0)\"\n\"IF(OR(E202<>0, B202<>0),(((B202-C202)*(E202*(1+E202)^D202/((1+E202)^D202-1))+(C202*F202))/B202),0)\"\n\"(A211+B211+C211+E211)\"\n\"(B216+C216+E216)\"\n\"IF(H12=\"\"\"\",\"\"\"\",(G12*H12))\"\n\"IF(H12=\"\"\"\",\"\"\"\",(G12*H12))\"\n\"SUM(O12:P21)\"\n\"SUM(O12:P21)\"\n\"'Modelling Uncertainty'!C6\"\n\"B12\"\n\"C19\"\n\"B12\"\n\"K19+J12\"\n\"MIN(C19,C16)\"\n\"MIN(C21+D19,D18)\"\n\"C19-C20\"\n\"D19+C21-D20\"\n\"$B$9+C19*$B$10\"\n\"B7+B8*C19\"\n\"B7+B8*K19\"\n\"J7+J8*J12\"\n\"-B28\"\n\"C20*C24-C19*C25-C26-C27\"\n\"G20*G24-G19*G25-G26-G27+G29\"\n\"-J28\"\n\"K20*K24-K19*K25-K26-K27-K29\"\n\"L20*L24-L19*L25-L26-L27\"\n\"O20*O24-O19*O25-O26-O27+O30\"\n\"B30\"\n\"C30*(1+$B$33)^-C15\"\n\"B33\"\n\"SUM(B34:G34)\"\n\"K31*(1+$B$33)^-K15\"\n\"'NPV Workbook'!C16\"\n\"[1]!gen_triang((1-4*I14),1,(1+4*I14))*D13\"\n\"I11\"\n\"'NPV Workbook'!D17\"\n\"[1]!gen_triang((1-$I16),1,(1+$I16))*E15\"\n\"I11\"\n\"E16*D17\"\n\"IF(D14>C7,\"\"expand\"\",\"\"don't expand\"\")\"\n\"'NPV Workbook'!C19\"\n\"IF(D19=\"\"expand\"\",D20+C6,D20)\"\n\"E20\"\n\"MIN(D20,D17)\"\n\"MIN(D22+E20,E17)\"\n\"D20-D21\"\n\"E20+D22-E21\"\n\"'NPV Workbook'!C22\"\n\"[1]!gen_triang((1-I25),1,(1+I25))*D24\"\n\"I11\"\n\"'NPV Workbook'!D23\"\n\"I11\"\n\"'NPV Workbook'!C25\"\n\"I11\"\n\"'NPV Workbook'!C26\"\n\"I11\"\n\"'NPV Workbook'!C27\"\n\"4000000+100*D20\"\n\"IF(D19=\"\"expand\"\",'NPV Workbook'!J7+'Modelling Uncertainty'!C6*'NPV Workbook'!J8,0)\"\n\"'NPV Workbook'!G29\"\n\"I11\"\n\"-C35\"\n\"D21*D28-D20*D31-D34-D33-D36\"\n\"E21*E28-E20*E31-E34-E33\"\n\"H21*H28-H20*H31-H34-H33+H38\"\n\"'NPV Workbook'!B33\"\n\"C39\"\n\"D39/(1+$C$42)^D12\"\n\"SUM(C43:H43)\"\n\"1.25*B4\"\n\"B6*B5\"\n\"2*$B$5\"\n\"B5\"\n\"E19\"\n\"E23\"\n\"B7\"\n\"B5\"\n\"E25\"\n\"2*$B$10\"\n\"+E32\"\n\"IF((D31+D15)-((D15+D18+D24+D31)/6*4)>0,1521.3,1523.1)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Inventory Held for Repair\"\", \"\"Inventory Purchased for Resale\"\")\"\n\"ROUNDUP(IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,((E32+E16)-((E16+E19+E25+E32)/6*4))/2,(-((E32+E16)-((E16+E19++E25+E32)/6*4)))/2),0)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Inventory Purchased for Resale\"\", \"\"Inventory Held for Repair\"\")\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,6790.1, 1529)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Other Exp Not Requiring Budgetary Resources - DLR\"\", \"\"Inventory - Allowance\"\")\"\n\"ROUNDUP(E38*B6,0)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,1529,6790)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,\"\"Inventory - Allowance for Impaired Inventory\"\", \"\"Other Exp Not Requiring Budgetary Resources - DLR\"\")\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,1524.1,1521.3)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Excess,Obsolete, and Unserviceable\"\", \"\"Inventory Purchased for Resale\"\")\"\n\"ROUNDUP(IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,((E32+E16)-((E16+E19+E25+E32)/6*4))/2,(-((E32+E16)-((E16+E19++E25+E32)/6*4)))/2),0)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,1521.3,1524.1)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Inventory Purchased for Resale\"\", \"\"Excess, Obsolete, and Unserviceable\"\")\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,6790.1, 1529)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0, \"\"Other Exp Not Requiring Budgetary Resources - DLR\"\", \"\"Inventory - Allowance\"\")\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,1529,6790)\"\n\"IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,\"\"Inventory - Allowance for Unserviceable Inventory\"\", \"\"Other Exp Not Requiring Budgetary Resources - DLR\"\")\"\n\"E44\"\n\"B3\"\n\"ROUNDUP(IF((E32+E16)-((E16+E19+E25+E32)/6*4)>0,((+$E$16+$E$32-E38-E45)/4),((+$E$16+$E$32+E38+E45)/4)),0)\"\n\"B2\"\n\"B2\"\n\"+E54\"\n\"ROUNDUP(B6*E72,0)\"\n\"B3\"\n\"B2-B3\"\n\"+E60\"\n\"+E60\"\n\"+E72\"\n\"B8\"\n\"+E84\"\n\"E64\"\n\"E63\"\n\"IF(E72>B7, \"\" \"\", 6100.31)\"\n\"E79\"\n\"E80\"\n\"IF(B9-B8>0,6100.12,(IF(B9-B8=0,\"\"\"\",2110.99)))\"\n\"IF(B9-B8>0,\"\"Operating Exp - DLR Repair Cost - Organic\"\",(IF(B9-B8=0,\"\"\"\",\"\"Goods Receipt/Invoice Receipt\"\")))\"\n\"IF(B9-B8>0,B9-B8,(IF(B9-B8=0,\"\"\"\",B8-B9)))\"\n\"IF(B9-B8>0,2110.99,(IF(B9-B8=0,\"\"\"\",6100.12)))\"\n\"IF(B9-B8>0,\"\"Goods Receipt/Invoice Receipt\"\",(IF(B9-B8=0,\"\"\"\",\"\"Operating Exp - DLR Repair Cost - Organic\"\")))\"\n\"B9\"\n\"IF(B96=6100.12,4610.3, IF(B96=2110.99,4901.32,\"\"\"\"))\"\n\"IF(B96=6100.12,\"\"Allotments - Realized Resources\"\",IF(B96=2110.99,\"\"Delivered Orders - Obligations Unpaid - Repair\"\",\"\"\"\"))\"\n\"E96\"\n\"IF(B96=6100.12,4901.32, IF(B96=2110.99,4610.3,\"\"\"\"))\"\n\"IF(B96=6100.12,\"\"Delivered Orders, Obligations Unpaid - Repair\"\",IF(B96=2110.99,\"\"Allotments - Realized Resources\"\",\"\"\"\"))\"\n\"+E33\"\n\"+E100\"\n\"IF(B9-B8>0,+E93+E103,(IF(B9-B8=0,E93,E93-E102)))\"\n\"+E36\"\n\"E66\"\n\"E66\"\n\"SUM(D7:O8)\"\n\"'Business Case Transactions'!E124\"\n\"-'Business Case Transactions'!E111\"\n\"-'Business Case Transactions'!E118\"\n\"SUM(D10:O10)\"\n\"'Business Case Transactions'!E57\"\n\"-'Business Case Transactions'!E70\"\n\"-'Business Case Transactions'!E125\"\n\"'Business Case Transactions'!E16\"\n\"IF(('Business Case Transactions'!E32+'Business Case Transactions'!E16)-(('Business Case Transactions'!E16+'Business Case Transactions'!E19+'Business Case Transactions'!E25+'Business Case Transactions'!E32)/6*4)>0,'Business Case Transactions'!E32-'Business Case Transactions'!E38-'Business Case Transactions'!E44,'Business Case Transactions'!E32+'Business Case Transactions'!E38+'Business Case Transactions'!E38)\"\n\"-'Business Case Transactions'!E55\"\n\"'Business Case Transactions'!E83\"\n\"'Business Case Transactions'!E19\"\n\"IF(('Business Case Transactions'!E32+'Business Case Transactions'!E16)-(('Business Case Transactions'!E16+'Business Case Transactions'!E19+'Business Case Transactions'!E25+'Business Case Transactions'!E32)/6*4)>0,'Business Case Transactions'!E38,-'Business Case Transactions'!E38)\"\n\"'Business Case Transactions'!E72\"\n\"-'Business Case Transactions'!E84\"\n\"'Business Case Transactions'!E60\"\n\"-'Business Case Transactions'!E73\"\n\"'Business Case Transactions'!E25\"\n\"IF(('Business Case Transactions'!E32+'Business Case Transactions'!E16)-(('Business Case Transactions'!E16+'Business Case Transactions'!E19+'Business Case Transactions'!E25+'Business Case Transactions'!E32)/6*4)>0,'Business Case Transactions'!E44,-'Business Case Transactions'!E44)\"\n\"SUM(D16:O16)\"\n\"-'Business Case Transactions'!E23-'Business Case Transactions'!E29\"\n\"IF(('Business Case Transactions'!E32+'Business Case Transactions'!E16)-(('Business Case Transactions'!E16+'Business Case Transactions'!E19+'Business Case Transactions'!E25+'Business Case Transactions'!E32)/6*4)>0,-'Business Case Transactions'!E42-'Business Case Transactions'!E48,'Business Case Transactions'!E42+'Business Case Transactions'!E48)\"\n\"-'Business Case Transactions'!E64\"\n\"'Business Case Transactions'!E86\"\n\"SUM(D22:O24)\"\n\"-'Business Case Transactions'!E100\"\n\"'Business Case Transactions'!E110\"\n\"-'Business Case Transactions'!E107\"\n\"'Business Case Transactions'!E117\"\n\"-'Business Case Transactions'!E33\"\n\"-'Business Case Transactions'!E90\"\n\"IF('Business Case Transactions'!B9-'Business Case Transactions'!B8=0,0,'Business Case Transactions'!B8-'Business Case Transactions'!B9)+'Business Case Transactions'!E99\"\n\"'Business Case Transactions'!E106\"\n\"-'Business Case Transactions'!E51\"\n\"'Business Case Transactions'!E50\"\n\"-'Business Case Transactions'!E67\"\n\"'Business Case Transactions'!E66\"\n\"-'Business Case Transactions'!E128\"\n\"'Business Case Transactions'!E127\"\n\"IF('Business Case Transactions'!B9-'Business Case Transactions'!B8=0,\"\"\"\",'Business Case Transactions'!B9-'Business Case Transactions'!B8)\"\n\"'Business Case Transactions'!E79\"\n\"'Business Case Transactions'!E35\"\n\"-'Business Case Transactions'!E80\"\n\"'Business Case Transactions'!E92\"\n\"-'Business Case Transactions'!E36\"\n\"IF('Business Case Transactions'!B9-'Business Case Transactions'!B8=0,\"\"\"\",'Business Case Transactions'!B8-'Business Case Transactions'!B9)\"\n\"'Business Case Transactions'!E120\"\n\"-'Business Case Transactions'!E93\"\n\"'Business Case Transactions'!E113\"\n\"-'Business Case Transactions'!E121\"\n\"-'Business Case Transactions'!E114\"\n\"-'Business Case Transactions'!E58\"\n\"'Business Case Transactions'!E69\"\n\"-'Business Case Transactions'!E17-'Business Case Transactions'!E20-'Business Case Transactions'!E26\"\n\"'Business Case Transactions'!E89\"\n\"IF('Business Case Transactions'!B9-'Business Case Transactions'!B8=0,\"\"\"\",'Business Case Transactions'!B9-'Business Case Transactions'!B8)\"\n\"'Business Case Transactions'!E54-'Business Case Transactions'!E61\"\n\"IF(('Business Case Transactions'!E32+'Business Case Transactions'!E16)-(('Business Case Transactions'!E16+'Business Case Transactions'!E19+'Business Case Transactions'!E25+'Business Case Transactions'!E32)/6*4)>0,'Business Case Transactions'!E41+'Business Case Transactions'!E47,-'Business Case Transactions'!E41-'Business Case Transactions'!E47)\"\n\"'Business Case Transactions'!E63\"\n\"-'Business Case Transactions'!E87\"\n\"'Business Case Transactions'!E22+'Business Case Transactions'!E28\"\n\"SUM(D6:D66)\"\n\"'Trial Balance Postings'!P6\"\n\"'Trial Balance Postings'!P9\"\n\"'Trial Balance Postings'!P11\"\n\"'Trial Balance Postings'!P13\"\n\"'Trial Balance Postings'!P16\"\n\"'Trial Balance Postings'!P21\"\n\"E23\"\n\"'Trial Balance Postings'!P51\"\n\"'Trial Balance Postings'!P53\"\n\"'Trial Balance Postings'!P55\"\n\"'Trial Balance Postings'!P57\"\n\"'Trial Balance Postings'!P60\"\n\"'Trial Balance Postings'!P62\"\n\"'Trial Balance Postings'!P64\"\n\"SUM(E13:E20)\"\n\"E21+E22\"\n\"'Trial Balance Postings'!P27\"\n\"'Trial Balance Postings'!P29\"\n\"'Trial Balance Postings'!P33\"\n\"'Trial Balance Postings'!P42\"\n\"'Trial Balance Postings'!P48\"\n\"SUM(D5:D10)\"\n\"100%-E17\"\n\"+F17*D17\"\n\"+G17*D17\"\n\"+H$22*H17\"\n\"+J17+K17\"\n\"6000-2000\"\n\"E18\"\n\"E18\"\n\"SUM(H17:H19)\"\n\"12480+8320\"\n\"SUM(J17:J19)\"\n\"+H21/H20\"\n\"+I25+I26\"\n\"+J25/K25\"\n\"+L17\"\n\"+I27\"\n\"+L19\"\n\"+C21\"\n\"1-D7\"\n\"+C7*E7\"\n\"+G7*C7\"\n\"+H7*-H13\"\n\"+J7*J13\"\n\"+K7+M7\"\n\"+C18\"\n\"+E8*C8\"\n\"+H8*H13\"\n\"+C17\"\n\"+D9\"\n\"+H9*H13\"\n\"SUM(K7:K9)\"\n\"SUM(H7:H10)\"\n\"+H12/H11\"\n\"+C16-C17\"\n\"+M7\"\n\"+M17+M18\"\n\"+N8\"\n\"+M19+M21\"\n\"+N9\"\n\"+M19\"\n\"+C21\"\n\"+M28/M29\"\n\"+C8\"\n\"1.13+7.735\"\n\"0.145+0.203\"\n\"3.93+0.145\"\n\"0.19+0.026\"\n\"0.88+0.79+0.2\"\n\"IF(I4=\"\"\"\",\"\"  \"\",H4*I4)\"\n\"SUM(I4:I32)\"\n\"SUM(B14:E14)\"\n\"SUM(B14:B16)\"\n\"SUMPRODUCT(B8:E10,B14:E16)\"\n\"SUM(B14:E14)\"\n\"SUM(B14:B16)\"\n\"B20*15\"\n\"B20*$G$14\"\n\"SUMPRODUCT(B8:E10,B14:E16)\"\n\"(2*E6*D6/B6)^0.5\"\n\"B6*B13/2+E6*D6/B13\"\n\"B13*C6/2\"\n\"SUM(E13:E16)\"\n\"(2*E6*D6/B6)^0.5\"\n\"B6*B15/2+E6*D6/B15\"\n\"B15*C6/2\"\n\"SUMPRODUCT(B15:B18,G6:G9)\"\n\"SUM(E15:E18)\"\n\"SUM(B14:E14)\"\n\"B$14/B$9\"\n\"B$14/B$9*B$8\"\n\"SUM(B18:F18)\"\n\"SUM(B18:B21)\"\n\"SUM(B18:B21)*B7\"\n\"SUMPRODUCT(B11:B14,B18:B21)\"\n\"SUM(G25:G26)\"\n\"60250*4\"\n\"L5\"\n\"+J5-O5\"\n\"O8-J8\"\n\"Q9/12*11\"\n\"M10+((Q10-M10)/12*7)\"\n\"Q11/12*5\"\n\"(L12/12*5)+(Q12/12*7)\"\n\"Q13/12*9\"\n\"Q14/12*10\"\n\"(L15/12*9)+(Q15/12*3)\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B3\"\n\"'CHARGEBACKS (FY02)'!B4\"\n\"'CHARGEBACKS (FY02)'!C5\"\n\"'CHARGEBACKS (FY02)'!D5\"\n\"'CHARGEBACKS (FY02)'!E5\"\n\"'CHARGEBACKS (FY02)'!F5\"\n\"'CHARGEBACKS (FY02)'!G5\"\n\"'CHARGEBACKS (FY02)'!I5\"\n\"'CHARGEBACKS (FY02)'!K5\"\n\"'CHARGEBACKS (FY02)'!L5\"\n\"K5\"\n\"(60250*4)\"\n\"+J5-M5\"\n\"N6-K6\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B3\"\n\"'CHARGEBACKS (FY02)'!B4\"\n\"'CHARGEBACKS (FY02)'!C5\"\n\"'CHARGEBACKS (FY02)'!D5\"\n\"'CHARGEBACKS (FY02)'!E5\"\n\"'CHARGEBACKS (FY02)'!F5\"\n\"'CHARGEBACKS (FY02)'!G5\"\n\"+'FY02'!H5\"\n\"+'FY02'!L5*1.03\"\n\"+J5-M5\"\n\"N6-K6\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B3\"\n\"'CHARGEBACKS (FY02)'!B4\"\n\"'CHARGEBACKS (FY02)'!C5\"\n\"'CHARGEBACKS (FY02)'!D5\"\n\"'CHARGEBACKS (FY02)'!E5\"\n\"'CHARGEBACKS (FY02)'!F5\"\n\"'CHARGEBACKS (FY02)'!G5\"\n\"+'FY03'!H5\"\n\"+'FY03'!L5*1.021\"\n\"+J5-M5\"\n\"N6-K6\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B3\"\n\"'CHARGEBACKS (FY02)'!B4\"\n\"'CHARGEBACKS (FY02)'!C5\"\n\"'CHARGEBACKS (FY02)'!D5\"\n\"'CHARGEBACKS (FY02)'!E5\"\n\"'CHARGEBACKS (FY02)'!F5\"\n\"'CHARGEBACKS (FY02)'!G5\"\n\"+'FY04'!H5\"\n\"+'FY04'!L5*1.021\"\n\"+'FY03'!M5\"\n\"+J5-M5\"\n\"N6-K6\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'FY02'!$B$2\"\n\"'FY02'!$B$3\"\n\"'FY02'!$B$4\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'CHARGEBACKS (FY02)'!B2\"\n\"'FY02'!K5\"\n\"'FY02'!L5/1000\"\n\"'FY03'!$K$5\"\n\"'FY03'!$L$5/1000\"\n\"'FY04'!$K$5\"\n\"'FY04'!$L$5/1000\"\n\"'CHARGEBACKS (FY02)'!$T$25\"\n\"'CHARGEBACKS (FY02)'!$V$25/1000\"\n\"'CHARGEBACKS (FY02)'!$T$25\"\n\"'CHARGEBACKS (FY02)'!$U$25/1000*(1+$K$15)\"\n\"'CHARGEBACKS (FY02)'!$T$25\"\n\"K20*(1+N15)\"\n\"'CHARGEBACKS (FY02)'!$T$25\"\n\"TEXT(('FY02'!S5/1000)*-1,\"\"0.00\"\")\"\n\"TEXT(('FY03'!$S$5/1000)*-1,\"\"0.00\"\")\"\n\"TEXT(('FY04'!$S$5/1000)*-1,\"\"0.00\"\")\"\n\"TEXT(('FY05'!$S$5/1000)*-1,\"\"0.00\"\")\"\n\"'FY02'!$R$25\"\n\"'FY02'!$T$25/1000\"\n\"'FY02'!$S$25/1000*(1+$K$15)\"\n\"J24\"\n\"K24*(1+N15)\"\n\"J24\"\n\"'FY03'!$R$25\"\n\"'FY03'!$T$25/1000\"\n\"'FY03'!$S$25/1000*(1+$N$15)\"\n\"N25*(1+Q15)\"\n\"'FY04'!$R$25\"\n\"'FY04'!$T$25/1000\"\n\"'FY04'!S25/1000*(1+Q15)\"\n\"'FY05'!$R$25\"\n\"'FY05'!$T$25/1000\"\n\"'FY03'!$R$45\"\n\"'FY03'!$T$45/1000\"\n\"'FY03'!$S$45/1000*(1+$N$15)\"\n\"N29*(1+Q15)\"\n\"'FY04'!$R$45\"\n\"'FY04'!$T$45/1000\"\n\"'FY04'!$S$45/1000*(1+$Q$15)\"\n\"'FY05'!$R$45\"\n\"'FY05'!$T$45/1000\"\n\"SUM(G18:G31)\"\n\"+H33\"\n\"SUM(H38:H45)\"\n\"SUM(H50:H55)\"\n\"H56+H46\"\n\"H58-H33\"\n\"+G19\"\n\"+H21\"\n\"G64+G63\"\n\"D4*E4\"\n\"SUM(D4:D5)\"\n\"30*D20*D21\"\n\"F4/C10+E10*D6\"\n\"R2*1000*'Initial Stand'!$D$20*'Initial Stand'!$D$21\"\n\"SUM(N7:N14)\"\n\"SUM(F7:F14)\"\n\"$C7*H7\"\n\"L7-N7\"\n\"D7-F7\"\n\"SUM(D8:D14)\"\n\"SUM(H7:H14)\"\n\"SUM(P6:P14)\"\n\"$C9*D9\"\n\"SUM(D8:D10)\"\n\"SUM(E9:E10)\"\n\"B3-C3-D3\"\n\"B4*$B$1/($B$1+$D$1+$F$1)+D4*$D$1/($B$1+$D$1+$F$1)+F4*$F$1/($B$1+$D$1+$F$1)\"\n\"H4*$H$1+I4*$I$1\"\n\"100*J4/$J$14\"\n\"100*L4/$L$14\"\n\"100*N4/$N$14\"\n\"K4/(M4*$L$1+O4*$N$1)\"\n\"SUM(B4:B13)\"\n\"B4*$B$1+C4*$C$1\"\n\"100*D4/$D$14\"\n\"100*F4/$F$14\"\n\"100*H4/$H$14\"\n\"E4/(G4*$F$1+I4*$H$1)\"\n\"SUM(B4:B13)\"\n\"B4*$B$1+C4*$C$1\"\n\"100*D4/$D$8\"\n\"100*F4/$F$8\"\n\"100*H4/$H$8\"\n\"E4/(G4*$F$1+I4*$H$1)\"\n\"SUM(B4:B7)\"\n\"COUNTA(A5:A39)\"\n\"SUM(L11*M11)\"\n\"D11*F11\"\n\"D11*K11\"\n\"D11*N11\"\n\"H11+I11+J11-K11-M11-N11\"\n\"D11*P11\"\n\"A11+1\"\n\"SUM(G11:G55)\"\n\"1+A7\"\n\"SUMPRODUCT(Inputs!C21:C27,Inputs!D21:D27)+SUMPRODUCT(Inputs!C33:C36,Inputs!D33:D36)\"\n\"D4-C4\"\n\"'StockPoint Statistics'!E4\"\n\"'RLV Delays'!A7\"\n\"Inputs!C21\"\n\"Inputs!C3\"\n\"Inputs!C33\"\n\"IF(VALUE(D3)=0,\"\"First Index Rule\"\",IF(VALUE(D3)=1,\"\"Runout Rule\"\",\"\"Rule?\"\"))\"\n\"C11*D11\"\n\"SUM(Z21:Z27)\"\n\"SUM(Z33:Z36)\"\n\"F21/B$7\"\n\"IF(G21=0,S21,0)\"\n\"IF(G21>0,S21,0)\"\n\"U21*J21\"\n\"U21*(1-L21)\"\n\"W21*M21\"\n\"(V21+X21)/60\"\n\"IF(G21=1,Y21,0)\"\n\"SUMPRODUCT(C$43:C$49,W$21:W$27)*F33\"\n\"SUMPRODUCT(D$43:D$49,W$21:W$27)*F34\"\n\"SUMPRODUCT(E$43:E$49,W$21:W$27)*F35\"\n\"SUMPRODUCT(F$43:F$49,W$21:W$27)*F36\"\n\"OFFSET(Data_SRU_Parts,C41-1,1)\"\n\"OFFSET(Data_LRU_Parts,A43-1,1)\"\n\"PRODUCT(B14:C14)\"\n\"SUM(D2:D50)\"\n\"A12+1\"\n\"SUM(B13-1)\"\n\"SUM(F2:F12)\"\n\"SUM(C11:C25)\"\n\"SUM(E11:F24)\"\n\"SUM(E11:F24)\"\n\"SUM(G11:G24)\"\n\"SUM(C11:C19)\"\n\"SUM(E11:F19)\"\n\"SUM(E11:F19)\"\n\"SUM(C11:C19)\"\n\"SUM(E11:F19)\"\n\"SUM(E11:F19)\"\n\"SUM(C11:C18)\"\n\"SUM(E11:F18)\"\n\"SUM(E11:F18)\"\n\"SUM(C11:C24)\"\n\"SUM(E11:F24)\"\n\"SUM(E11:F24)\"\n\"SUM(C11:C18)\"\n\"SUM(E11:F18)\"\n\"SUM(E11:F18)\"\n\"'Page 2'!D26\"\n\"'Page 2'!$E$26:$F$26\"\n\"'Page 2'!$G$26\"\n\"'Page 3'!D20\"\n\"'Page 4'!$E$20:$F$20\"\n\"'Page 4'!$G$20\"\n\"'Page 4'!D20\"\n\"'Page 3'!$E$20:$F$20\"\n\"'Page 3'!$G$20\"\n\"'Page 5'!D19\"\n\"'Page 5'!E19:F19\"\n\"'Page 5'!G19\"\n\"'Page 5'!G19\"\n\"'Page 5'!G19\"\n\"'Page 6'!D25\"\n\"'Page 6'!E25:F25\"\n\"'Page 6'!G25\"\n\"'Page 6'!G25\"\n\"'Page 6'!G25\"\n\"'Page 7'!D19\"\n\"'Page 7'!E19:F19\"\n\"'Page 7'!G19\"\n\"'Page 7'!G19\"\n\"'Page 7'!G19\"\n\"SUM(D9:D14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"SUM(F9:I14)\"\n\"+K6\"\n\"SUM(C5:C10)\"\n\"+P6+P7+P8-Q9\"\n\"SUM(G6:G10)-SUM(H7:H10)\"\n\"+B5+B6-SUM(C5:C10)-C11\"\n\"+P6*1.4\"\n\"+F21+I21+L21\"\n\"SUM(Q16:Q18)\"\n\"+P10\"\n\"+Q22-Q23\"\n\"SUM(I21:I24)\"\n\"SUM(L30:L33)\"\n\"+F4+F5\"\n\"+SUM(F6:F8)\"\n\"SUM(G9:G13)\"\n\"4625+3230+4100\"\n\"-(6410+3730)\"\n\"+SUM(G15:G18)\"\n\"9375+6820+6175+5775\"\n\"5775+6820\"\n\"+G27-G28\"\n\"1375+2500+1800+1290\"\n\"+E31-F31\"\n\"+G29+G31\"\n\"SUM(F36:F38)\"\n\"+D19+F19\"\n\"+#REF!\"\n\"#REF!\"\n\"+F44*F6\"\n\"+H45+H44\"\n\"+H46+H47\"\n\"SUBTOTAL(9,F5:F6)\"\n\"SUBTOTAL(9,F8:F8)\"\n\"SUBTOTAL(9,I14:I14)\"\n\"D9+1\"\n\" SUM(A4:A18)\"\n\"SUM(A4:A24)\"\n\"SUM(B4:B16)\"\n\"SUM(B5:B15)\"\n\"SUM(A4:A12)\"\n\"SUM(D13+F13+H13+J13+L13+M13)\"\n\"SUM(O13+P13+R13+S13+U13+V13+W13+X13+Y13+Z13+AA13+AB13+AC13)\"\n\"SUM(AE13+AF13+AH13+AI13+AJ13)\"\n\"SUM(AD13+AK13)\"\n\"SUM(BD13+BE13+BF13+BG13)\"\n\"D7/C7\"\n\"SUM(B7:B22)\"\n\"SUM(B30:B44)\"\n\"D7/C7\"\n\"SUM(B7:B13)\"\n\"D7/C7\"\n\"SUM(B7:B19)\"\n\"D7/C7\"\n\"SUM(B7:B22)\"\n\"2+9\"\n\"93826+124675\"\n\"60536+87393\"\n\"D7/C7\"\n\"2561+7661\"\n\"10893+13131\"\n\"7+4\"\n\"238310+70535\"\n\"155291+46818\"\n\"9111+7318\"\n\"29769+8534\"\n\"11+7\"\n\"287524+134101\"\n\"191270+89118\"\n\"12689+13094\"\n\"35281+14988\"\n\"3+3\"\n\"209524+61644\"\n\"6755+7008\"\n\"26989+7029\"\n\"9+6\"\n\"236982+259655\"\n\"160061+183602\"\n\"7670+21974\"\n\"23432+21974\"\n\"3+5\"\n\"159235+162626\"\n\"104613+107625\"\n\"5109+9769\"\n\"19452+11259\"\n\"SUM(B7:B26)\"\n\"4229+59601\"\n\"94226+39639\"\n\"183602+56120\"\n\"D7/C7\"\n\"SUM(B7:B8)\"\n\"SUM(B8:N8)\"\n\"SUM(B8:B20)\"\n\"SUM(B8:N8)\"\n\"SUM(B8:B20)\"\n\"SUM(B8:N8)\"\n\"SUM(B8:B20)\"\n\"SUM(B8:N8)\"\n\"SUM(B8:B16)\"\n\"SUM(B8:I8)\"\n\"SUM(B8:B20)\"\n\"SUM(B29:J29)\"\n\"SUM(B29:B39)\"\n\"SUM(B8:M8)\"\n\"SUM(B8:B20)\"\n\"SUM(B8:L8)\"\n\"SUM(B8:B20)\"\n\"SUM(B8:J8)\"\n\"SUM(2+3+3)\"\n\"SUM(B8:B20)\"\n\"98645-1361\"\n\"SUM(B8:B11)\"\n\"602269+200\"\n\"SUM(B12:B16)\"\n\"69041+12956\"\n\"71265-1\"\n\"387853+41723\"\n\"303801+594-768+200\"\n\"1176170-1361-594+768+1\"\n\"B6\"\n\"+B9/C9-1\"\n\"-456892+1\"\n\"SUM(B9:B10)\"\n\"-496544-473667\"\n\"-57659-455-80171-102996+6246+2049+64-18095-B15\"\n\"-87616-90761\"\n\"-18095-1304\"\n\"SUM(B13:B15)\"\n\"3172+2739\"\n\"-82299+1957+1\"\n\"-27151-27141\"\n\"SUM(B16:B19)\"\n\"-ROUND(B20*36%,0)\"\n\"-ROUND(C20*39.3%,0)\"\n\"SUM(C20:C21)\"\n\"ROUND((B24)/B32,2)\"\n\"ROUND(C24/C32,2)\"\n\"ROUND(B22/B33,2)\"\n\"454679-1\"\n\"+B38+B39\"\n\"B40+B44\"\n\"17574+22808+16491+30292-130+7640+(11024+3510+16827+18095+1304)+1\"\n\"-29553+9244\"\n\"-11024-3510-16827-9244-18095-1304\"\n\"'Inc. Stmt - Reported - YTD'!B6\"\n\"+B9/C9-1\"\n\"-456892+1\"\n\"SUM(B9:B10)\"\n\"C9+C10\"\n\"-1234249+11024+3510+16827\"\n\"-57659-455-80171-102996+6246+2049+64-18095-B15+9244+18095+1304\"\n\"-18095-1304+19399\"\n\"SUM(B13:B15)\"\n\"1181-1181\"\n\"-82299+1957+1+1658\"\n\"SUM(B16:B19)\"\n\"-ROUND(B20*36%,0)\"\n\"'Inc. Stmt - Reported - YTD'!B21-4444\"\n\"SUM(C20:C21)\"\n\"ROUND((B24)/B32,2)\"\n\"ROUND(C24/C32,2)\"\n\"ROUND(B22/B33,2)\"\n\"454679-1\"\n\"+B38+B39\"\n\"B40+B44\"\n\"17574+22808+16491+30292-130+7640+(11024+3510+16827+18095+1304)+1\"\n\"-29553+9244\"\n\"(-11024-3510-16827-9244-18095-1304)*0\"\n\"B6\"\n\"'Inc. Stmt - Reported - YTD'!B7\"\n\"+B9/C9-1\"\n\"B9+B10\"\n\"SUM(B11:B12)\"\n\"-16104-979\"\n\"SUM(B13:B15)\"\n\"-ROUND(B19*36%,0)\"\n\"SUM(C19:C20)\"\n\"ROUND((B23)/B31,2)\"\n\"ROUND(C23/C31,2)\"\n\"ROUND(B21/B32,2)\"\n\"+B37+B38\"\n\"B39+B43\"\n\"SUM(B47:B50)\"\n\"'Inc. Stmt - Reported QTR'!B6\"\n\"+B9/C9-1\"\n\"B9+B10\"\n\"-670532+9017+16827\"\n\"SUM(B11:B12)\"\n\"-124989+5209\"\n\"-16104-979+17083\"\n\"SUM(B13:B15)\"\n\"-ROUND(B19*36%,0)\"\n\"'Inc. Stmt - Reported - YTD'!B21-4444\"\n\"SUM(C19:C20)\"\n\"ROUND((B23)/B31,2)\"\n\"ROUND(C23/C31,2)\"\n\"ROUND(B21/B32,2)\"\n\"+B37+B38\"\n\"B39+B43\"\n\"-48136*0\"\n\"SUM(B47:B50)\"\n\"'Inc. Stmt - Reported - YTD'!B7\"\n\"B9\"\n\"B9\"\n\"B9\"\n\"'Inc. Stmt - Reported QTR'!B11\"\n\"B12/B12\"\n\"'Inc. Stmt - Reported QTR'!C11\"\n\"D12/D12\"\n\"+'Inc. Stmt - Reported - YTD'!B11\"\n\"+'Inc. Stmt - Reported - YTD'!C11\"\n\"B14/$B$12\"\n\"B14-D14\"\n\"B14/D14-1\"\n\"D14/$D$12\"\n\"I14/$I$12\"\n\"K14/$K$12\"\n\"+B15+[1]Reconciliation!$B$20\"\n\"+B16\"\n\"SUM(B14:B16)\"\n\"'Inc. Stmt - Reported QTR'!B16\"\n\"'Inc. Stmt - Reported QTR'!C16\"\n\"+'Inc. Stmt - Reported - YTD'!B16\"\n\"+'Inc. Stmt - Reported - YTD'!C16\"\n\"+B15\"\n\"B16\"\n\"B22/$B$12-0.001\"\n\"B23+[1]Reconciliation!$B$21\"\n\"-'Inc. Stmt - Reported QTR'!B15\"\n\"-'Inc. Stmt - Reported QTR'!C15\"\n\"+B24+[1]Reconciliation!$B$22\"\n\"SUM(B20:B24)\"\n\"'Inc. Stmt - Reported QTR'!B21\"\n\"'Inc. Stmt - Reported QTR'!C21\"\n\"'Inc. Stmt - Reported - YTD'!B22\"\n\"+'Inc. Stmt - Reported - YTD'!C22\"\n\"ROUND((B21)*(1-$B$48),0)\"\n\"ROUND((I21)*(1-$I$48),0)\"\n\"ROUND((I24)*(1-$I$48),0)+1\"\n\"+B33+[1]Reconciliation!$B$30\"\n\"+B34+[1]Reconciliation!$B$31\"\n\"SUM(B28:B34)\"\n\"+'Inc. Stmt - Reported QTR'!B28\"\n\"+'Inc. Stmt - Reported QTR'!C28\"\n\"+'Inc. Stmt - Reported - YTD'!B29\"\n\"+'Inc. Stmt - Reported - YTD'!C29\"\n\"ROUND(B29/$B$47,2)\"\n\"ROUND(I29/$I$47,2)\"\n\"ROUND(I30/$I$47,2)+0.01\"\n\"ROUND(B32/$B$47,2)+0.01\"\n\"+'Inc. Stmt - Reported QTR'!B32\"\n\"+B16-B15-B14-B13-B12-B11-B10\"\n\"B10\"\n\"H11/F11\"\n\"SUM(F11:F12)\"\n\"+F13+F17+F19\"\n\"+F29+F32\"\n\"+F42+F47\"\n\"SUM(F63:F65)\"\n\"F21+F34+F49+F66+F75\"\n\"SUM(D13+F13+H13+J13+L13+M13)\"\n\"SUM(O13+P13+R13+S13+U13+V13+W13+X13+Y13+Z13+AA13+AB13+AC13)\"\n\"SUM(AE13+AF13+AH13+AI13+AJ13)\"\n\"SUM(AD13+AK13)\"\n\"SUM(BD13+BE13+BF13+BG13)\"\n\"3+B18-B19\"\n\"B20+C18-C19\"\n\"B37+B47\"\n\"IF(((B21-B20)>0),\"\"No\"\", \"\"Yes\"\")\"\n\"IF((B27>4),\"\"N0\"\",\"\"Yes\"\")\"\n\"IF(((B29)>4),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B37=0,0,(IF(B37=1,800,(IF(B37=2,1800,(IF(B37=3,3000,(IF(B37=4,4000,(IF(B37=5,4800,\"\"Error\"\")))))))))))\"\n\"B38*(22+B27)\"\n\"+B9\"\n\"B39\"\n\"+F39\"\n\"IF(((B41- B39)<= 0),\"\"Yes\"\",\"\"No\"\")\"\n\"IF((B47 <=  4), (B47*200), \"\"Error\"\")\"\n\"B48*(22+B29)\"\n\"+B10\"\n\"IF(((B51-B49) > 0),\"\"No\"\",\"\"Yes\"\")\"\n\"3000+B41-B9\"\n\"B56+C41-C9\"\n\"300+B51-B10\"\n\"B57+C51-C10\"\n\"IF(((0.5*B56+B57)<= 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF(((0.5*D56+D57)< 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF((B56 >= 0), (0.25*B56), \"\"BAD\"\")\"\n\"IF((B57 >= 0), (0.75*B57), \"\"BAD\"\")\"\n\"B18*1000\"\n\"B19*250\"\n\"B20*22*8*10\"\n\"B20*(B27+B29)*8*15\"\n\"B75+B76\"\n\"B67+B68+B71+B72+B75+B76\"\n\"SUM(B79:M79)\"\n\"3+B18-B19\"\n\"B20+C18-C19\"\n\"B37+B47\"\n\"IF(((B21-B20)>0),\"\"No\"\", \"\"Yes\"\")\"\n\"IF((B27>4),\"\"N0\"\",\"\"Yes\"\")\"\n\"IF(((B29)>4),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B37=0,0,(IF(B37=1,800,(IF(B37=2,1800,(IF(B37=3,3000,(IF(B37=4,4000,(IF(B37=5,4800,\"\"Error\"\")))))))))))\"\n\"+G9\"\n\"IF(((B41- B39)<= 0),\"\"Yes\"\",\"\"No\"\")\"\n\"IF((B47 <=  4), (B47*200), \"\"Error\"\")\"\n\"B48*(22+B29)\"\n\"+B10\"\n\"IF(((B51-B49) > 0),\"\"No\"\",\"\"Yes\"\")\"\n\"3000+B41-B9\"\n\"B56+C41-C9\"\n\"300+B51-B10\"\n\"B57+C51-C10\"\n\"IF(((0.5*B56+B57)<= 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF(((0.5*D56+D57)< 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF((B56 >= 0), (0.25*B56), \"\"BAD\"\")\"\n\"IF((B57 >= 0), (0.75*B57), \"\"BAD\"\")\"\n\"B18*1000\"\n\"B19*250\"\n\"B20*22*8*10\"\n\"B20*(B27+B29)*8*15\"\n\"B75+B76\"\n\"B67+B68+B71+B72+B75+B76\"\n\"SUM(B79:M79)\"\n\"3+B18-B19\"\n\"B20+C18-C19\"\n\"B37+B47\"\n\"IF(((B21-B20)>0),\"\"No\"\", \"\"Yes\"\")\"\n\"IF((B27>4),\"\"N0\"\",\"\"Yes\"\")\"\n\"IF(((B29)>4),\"\"No\"\",\"\"Yes\"\")\"\n\"IF(B37=0,0,(IF(B37=1,800,(IF(B37=2,1800,(IF(B37=3,3000,(IF(B37=4,4000,(IF(B37=5,4800,\"\"Error\"\")))))))))))\"\n\"B38*(22+B27)\"\n\"+B9\"\n\"IF(((B41- B39)<= 0),\"\"Yes\"\",\"\"No\"\")\"\n\"IF((B47 <=  4), (B47*200), \"\"Error\"\")\"\n\"B48*(22+B29)\"\n\"+B10\"\n\"IF(((B51-B49) > 0),\"\"No\"\",\"\"Yes\"\")\"\n\"3000+B41-B9\"\n\"B56+C41-C9\"\n\"300+B51-B10\"\n\"B57+C51-C10\"\n\"IF(((0.5*B56+B57)<= 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF(((0.5*D56+D57)< 60000), \"\"Yes\"\", \"\"No\"\")\"\n\"IF((B56 >= 0), (0.25*B56), \"\"BAD\"\")\"\n\"IF((B57 >= 0), (0.75*B57), \"\"BAD\"\")\"\n\"B18*1000\"\n\"B19*250\"\n\"B20*22*8*10\"\n\"B20*(B27+B29)*8*15\"\n\"B75+B76\"\n\"B67+B68+B71+B72+B75+B76\"\n\"SUM(B79:M79)\"\n\"SUM(F12:F28)\"\n\"SUM(C319,C308,C301,C266,C211,C134,C130,C123,C119,C94,C82,C58,C54)\"\n\"B7-C7-D7-E7\"\n\"SUM(C120:F120)\"\n\"463.1+168.7\"\n\"422.9+174.6\"\n\"B155-SUM(C155:E155)\"\n\"SUM(B9:B15)\"\n\"C11/130273\"\n\"D11/3988\"\n\"E11/74\"\n\"F11/10\"\n\"G11/134344\"\n\"C11/130273\"\n\"D11/3988\"\n\"E11/74\"\n\"F11/10\"\n\"G11/134344\"\n\"C11/130273\"\n\"D11/3988\"\n\"E11/74\"\n\"F11/10\"\n\"G11/134344\"\n\"C11/130273\"\n\"D11/3988\"\n\"E11/74\"\n\"F11/10\"\n\"G11/134344\"\n\"C11/130273\"\n\"D11/3988\"\n\"E11/74\"\n\"F11/10\"\n\"G11/134344\"\n\"11288.45+12557.01+10569.33+11018.95+5911.65+5111.8\"\n\"104943.6+40056.4+24712.14+3213.97+6443.96+35374.35+1482.42\"\n\"8912+4576\"\n\"11500+3114\"\n\"76977-3114\"\n\"16000+72499\"\n\"14153.51+1229.63+617+31350.06+29655.11+11051.04\"\n\"64992-34600\"\n\"57500+2100\"\n\"153427.95+47041.49+76113.68+63400.57+47950.2+61575.32+66971.59+8384.71\"\n\"650965+24035\"\n\"200000-24035\"\n\"477.79+1006.68+172.71+3420.55+1902.12+4199.45+4140.27\"\n\"55227+59870-5722+17302+12500\"\n\"125000+29795+27545-16\"\n\"48226.69+19701.59+19767.3+18610.75+20054.31\"\n\"31692+15169\"\n\"28750*3\"\n\"255+1530.92\"\n\"366.48+310.68+219+164.7+498\"\n\"5319.43+4799.78\"\n\"SUM(C5:C88)\"\n\"220184.62+180000\"\n\"56530.9+139334.47+75969.15\"\n\"49419+40000\"\n\"18879.48+20000\"\n\"350153.65+117023.9\"\n\"218043+240000\"\n\"SUM(C93:C98)\"\n\"+C89+D89\"\n\"+E89\"\n\"+C100+C99\"\n\"+E99+E89\"\n\"273196-38834\"\n\"49945.1+15479.68+4756.14\"\n\"151505.05+11492.07+5567.9\"\n\"101116.99+15822.05+7387.2+7894.47+2452.81\"\n\"99280.2+390.38\"\n\"41661+12866+36274.81+27959.95\"\n\"165445.99+9790.17+7699.59+8264.25\"\n\"206537.9+15923.44+38880.56\"\n\"488711.1+10300.9\"\n\"129974.46+39550.41+21721\"\n\"214211+10009.64+13819.48+16393.81\"\n\"72399-7794\"\n\"40336.26+3030.95+2934.95+2434.95+3044.95\"\n\"16798.01+1754.23+2120+497.2+600+1087.58+400+297.5+318.75\"\n\"SUM(B5:B48)\"\n\"SUM(B54:B59)\"\n\"+B49\"\n\"+B61+B49\"\n\"C20*D38*G29\"\n\"C20*D24*G24\"\n\"F31\"\n\"D20*D38*G16\"\n\"D13-G9-G10-G12\"\n\"SUM(D9:D12)\"\n\"A1\"\n\"+D12+F12-H12\"\n\"+I12*J12\"\n\"SUM(K12:K16)\"\n\"SUM(D23*D24)\"\n\"SUM(G18:G24)\"\n\"+K17-K25\"\n\"+D2+1\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"+'2000 Total'!D3\"\n\"IF($C3=E$2,$D3,0)\"\n\"SUM(E3:J3)/$D$54\"\n\"SUM(D3:D53)\"\n\"+E54/$D$54\"\n\"SUM(E55:J55)\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(E3:P3)\"\n\"+'January 2000'!L3\"\n\"+'February 2000'!L3\"\n\"+'March 2000'!N3\"\n\"+'April 2000'!L3\"\n\"+'May 2000'!L3\"\n\"+'June 2000'!N3\"\n\"+'July 2000'!L3\"\n\"+'August 2000'!L3\"\n\"+'September 2000'!N3\"\n\"+'October 2000'!L3\"\n\"+'November 2000'!L3\"\n\"+'December 2000'!M3\"\n\"SUM(D3:D53)\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"SUM(D3:D53)\"\n\"+'January 2000'!J2+7\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"SUM(D3:D53)\"\n\"+'February 2000'!J2+7\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:M3)\"\n\"SUM(D3:D53)\"\n\"7+'March 2000'!L2\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"SUM(D3:D53)\"\n\"7+'April 2000'!J2\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'May 2000'!J2\"\n\"+D2+7\"\n\"+E2\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:M3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'June 2000'!L2\"\n\"+D2+7\"\n\"+E2\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'July 2000'!J2\"\n\"+D2+7\"\n\"+E2\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'August 2000'!J2\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:L3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'September 2000'!L2\"\n\"+D2+7\"\n\"+E2\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'October 2000'!J2\"\n\"+D2+7\"\n\"+E2\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:K3)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"7+'November 2000'!J2\"\n\"+D2+7\"\n\"IF(+Timesheet!A3=\"\"\"\",\"\"\"\",+Timesheet!A3)\"\n\"SUM(D3:L3)\"\n\"SUM(D4:J4)\"\n\"+Timesheet!A46\"\n\"SUM(D3:D53)\"\n\"H5*C5\"\n\"G5/H5\"\n\"J5/2000\"\n\"A5+1\"\n\"AVERAGE(J5:J20)\"\n\"SUMPRODUCT(J5:J20,$H$5:$H$20)/SUM($H$5:$H$20)\"\n\"'[1]ES&Prime Yrly $'!$D5+PMT('[3]Cost Info'!$G$3,'[3]Cost Info'!$C$2,-([2]Sheet1!$G$13)*C5)\"\n\"'[1]ES&Prime Yrly $'!$E5+([2]Sheet1!$I$13+[2]Sheet1!$I$27)*(B5-2)+[2]Sheet1!$I$29\"\n\"AVERAGE(H5:H20)*2000\"\n\"(D5+F5)/2\"\n\"H5*C5\"\n\"G5/H5\"\n\"J5/2000\"\n\"M5*C5\"\n\"G5/M5\"\n\"A5+1\"\n\"AVERAGE(J5:J20)\"\n\"SUMPRODUCT(J5:J20,$I$5:$I$20)/SUM($I$5:$I$20)\"\n\"SUMPRODUCT(O5:O20,$M$5:$M$20)/SUM($M$5:$M$20)\"\n\"(D5+F5)/2\"\n\"H5*C5\"\n\"G5/H5\"\n\"J5/2000\"\n\"418.180499999999+164.7\"\n\"'Inventory PM & NOx'!M5\"\n\"164.7\"\n\"(N5/M5)*U5\"\n\"(O5/M5)*U5\"\n\"G5/M5\"\n\"A5+1\"\n\"305.943+156.9\"\n\"156.9\"\n\"389.0535+149.1\"\n\"149.1\"\n\"455.009+141.3\"\n\"141.3\"\n\"529.542+133.4\"\n\"133.4\"\n\"352.0425+125.6\"\n\"125.6\"\n\"678.608000000001+117.8\"\n\"117.8\"\n\"753.141000000001+110\"\n\"110\"\n\"827.674+102.2\"\n\"102.2\"\n\"902.207+94.4\"\n\"94.4\"\n\"896.659+86.6\"\n\"86.6\"\n\"1051.273+78.8\"\n\"78.8\"\n\"1125.806+71\"\n\"71\"\n\"1200.339+63.1\"\n\"63.1\"\n\"1274.872+55.3\"\n\"55.3\"\n\"1484.893+47.5\"\n\"47.5\"\n\"AVERAGE(J5:J20)\"\n\"SUMPRODUCT(J5:J20,$H$5:$H$20)/SUM($H$5:$H$20)\"\n\"SUMPRODUCT(Q5:Q20,$M$5:$M$20)/SUM($M$5:$M$20)\"\n\"Inventory!A5\"\n\"Inventory!G5\"\n\"Inventory!I5\"\n\"'Inventory PM & NOx+ROG'!A5\"\n\"'Inventory PM & NOx+ROG'!G5\"\n\"'Inventory PM & NOx+ROG'!O5\"\n\"'Inventory PM & NOx+ROG'!N5\"\n\"'Inventory PM & NOx+ROG'!M5\"\n\"'Inventory PM & NOx+ROG'!U5\"\n\"SUMPRODUCT(D8:D23,$C$8:$C$23)/SUM($C$8:$C$23)\"\n\"SUMPRODUCT(M8:M23,$L$8:$L$23)/SUM($L$8:$L$23)\"\n\"Cover!$B$49\"\n\"Cover!$B$50\"\n\"Cover!$B$51\"\n\"IF(Cover!$B$29<>\"\"\"\",Cover!$B$29,\"\"#N/A\"\")\"\n\"Cover!$B$7\"\n\"IF(Cover!$B$8<>\"\"\"\",Cover!$B$8,\"\"#N/A\"\")\"\n\"IF(Cover!$B$9<>\"\"\"\",Cover!$B$9,\"\"#N/A\"\")\"\n\"IF(Cover!$B$5<>\"\"\"\",TEXT(Cover!$B$5,\"\"YYYYMMDD\"\"),#N/A)\"\n\"IF(Cover!$B$4<>\"\"\"\",TEXT(Cover!$B$4,\"\"YYYYMMDD\"\"),#N/A)\"\n\"IF(Cover!$B$27<>\"\"\"\",Cover!$B$27,\"\"#N/A\"\")\"\n\"IF(Cover!$B$28<>\"\"\"\",Cover!B$28,\"\"\"\")\"\n\"Cover!$B$48\"\n\"IF(Cover!$B$21=\"\"1\"\",Cover!$B$21,\"\"\"\")\"\n\"Cover!$B$23\"\n\"Cover!$B$24\"\n\"Cover!$B$25\"\n\"Cover!$B$26\"\n\"Cover!$B$29\"\n\"IF(Cover!$B$48<>\"\"\"\",VLOOKUP(Cover!$B$48,Table!$E$4:$F$11,2,FALSE),\"\"\"\")\"\n\"IF(Cover!$B$10<>\"\"\"\", Cover!$B$10, \"\"\"\")\"\n\"IF(Cover!$B$11<>\"\"\"\", Cover!$B$11, \"\"\"\")\"\n\"IF(Cover!$B$12<>\"\"\"\", Cover!$B$12, \"\"\"\")\"\n\"IF(Cover!$B$13<>\"\"\"\", Cover!$B$13, \"\"\"\")\"\n\"IF(Cover!$B$14<>\"\"\"\", Cover!$B$14, \"\"\"\")\"\n\"IF(Cover!$B$15<>\"\"\"\", Cover!$B$15, \"\"\"\")\"\n\"IF(Cover!$B$16<>\"\"\"\", Cover!$B$16, \"\"\"\")\"\n\"IF(Cover!$B$17<>\"\"\"\", Cover!$B$17, \"\"\"\")\"\n\"IF(Cover!$B$18<>\"\"\"\", Cover!$B$18, \"\"\"\")\"\n\"IF(Cover!$B$31<>\"\"\"\",Cover!$B$31, \"\"\"\")\"\n\"IF(Cover!$B$32<>\"\"\"\",Cover!$B$32, \"\"\"\")\"\n\"IF(Cover!$B$33<>\"\"\"\",Cover!$B$33, \"\"\"\")\"\n\"IF(Cover!$B$34<>\"\"\"\",Cover!$B$34, \"\"\"\")\"\n\"IF(Cover!$B$35<>\"\"\"\",Cover!$B$35, \"\"\"\")\"\n\"IF(Cover!$B$36<>\"\"\"\",Cover!$B$36, \"\"\"\")\"\n\"IF(Cover!$B$37<>\"\"\"\",Cover!$B$37, \"\"\"\")\"\n\"IF(Cover!$B$38<>\"\"\"\",Cover!$B$38, \"\"\"\")\"\n\"IF(Cover!$B$39<>\"\"\"\",Cover!$B$39, \"\"\"\")\"\n\"IF(Cover!$B$40<>\"\"\"\",Cover!$B$40, \"\"\"\")\"\n\"IF(Cover!$B$41<>\"\"\"\",Cover!$B$41, \"\"\"\")\"\n\"IF(Cover!$B$42<>\"\"\"\",Cover!$B$42, \"\"\"\")\"\n\"IF(Cover!$B$43<>\"\"\"\",Cover!$B$43, \"\"\"\")\"\n\"IF(Cover!$B$44<>\"\"\"\",Cover!$B$44, \"\"\"\")\"\n\"IF(Cover!$B$45<>\"\"\"\",Cover!$B$45, \"\"\"\")\"\n\"IF(Cover!$B$46<>\"\"\"\",Cover!$B$46, \"\"'\"\")\"\n\"IF(Schedule!A3<>\"\"\"\",IF(VLOOKUP(Schedule!A3,Table!$A$4:$D$39,3,FALSE)=\"\"\"\",\"\"FS\"\",\"\"FI\"\"),\"\"Unused Row\"\")\"\n\"IF(A3<>\"\"\"\",IF(Cover!$B$7<>\"\"\"\",Cover!$B$7,\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(A3<>\"\"\"\",IF(Cover!$B$8<>\"\"\"\",Cover!$B$8,\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(A3<>\"\"\"\",IF(Cover!$B$9<>\"\"\"\",Cover!$B$9,\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(A3<>\"\"\"\",IF(Cover!$B$5<>\"\"\"\",TEXT(Cover!$B$5, \"\"YYYYMMDD\"\"),\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(B3<>\"\"\"\",IF(Cover!$B$4<>\"\"\"\",TEXT(Cover!$B$4, \"\"YYYYMMDD\"\"),\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(A3<>\"\"\"\",IF(Cover!$B$27<>\"\"\"\",Cover!$B$27,\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(A3<>\"\"\"\",Cover!$B$48,\"\"\"\")\"\n\"IF(A3<>\"\"\"\",IF(Schedule!A3<>\"\"\"\",Schedule!A3,\"\"#N/A\"\"),\"\"\"\")\"\n\"IF(Schedule!B3<>\"\"\"\",Schedule!B3,\"\"#N/A\"\")\"\n\"IF(A3=\"\"FI\"\",IF(VLOOKUP(J3,Table!$A$4:$D$39,3,FALSE)=\"\"I\"\",\"\"I\"\",\"\"S\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FI\"\",IF(L3=\"\"S\"\",\"\"#N/A\"\",\"\"\"\"),IF(A3=\"\"FS\"\",IF(I3=\"\"TOR\"\",IF(J3=\"\"TD\"\",IF(Schedule!H3<>\"\"\"\",Schedule!H3,\"\"\"\"),\"\"\"\"),\"\"\"\")))\"\n\"IF(A3=\"\"FI\"\",IF(L3=\"\"I\"\",\"\"GA\"\",\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FI\"\",IF(L3=\"\"I\"\",IF(Schedule!K3<>\"\"\"\",Schedule!K3,\"\"\"\"),\"\"\"\"),IF(A3=\"\"FS\"\",IF(I3=\"\"CCR\"\",IF(Schedule!D3<>\"\"\"\",Schedule!D3,\"\"\"\"),\"\"\"\"),\"\"\"\") )\"\n\"IF(A3=\"\"FI\"\",IF(L3=\"\"I\"\",TEXT(Cover!$B$5, \"\"YYYYMMDD\"\"),\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(Schedule!D3<>\"\"\"\",Schedule!D3,\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FI\"\",IF(L3=\"\"I\"\",Cover!$B$21,\"\"\"\"),IF(A3=\"\"FS\"\",Schedule!E3,\"\"\"\"))\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"CA\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(Schedule!F3<>\"\"\"\",IF(LEN(Schedule!$F3)=2,Schedule!F3,\"\"\"\"),IF(J3=\"\"TD\"\",\"\"#N/A\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(Schedule!F3<>\"\"\"\",IF(LEN(Schedule!$F3)>2,Schedule!F3,\"\"\"\"),IF(J3=\"\"TD\"\",\"\"#N/A\"\",\"\"\"\")),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(H3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(VLOOKUP(Schedule!A3,Table!$A$4:$D$39,4,FALSE)=\"\"B\"\",IF(Schedule!H3<>\"\"\"\",Schedule!H3,\"\"\"\"),\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",TEXT(IF(Schedule!I3<>\"\"\"\",Schedule!I3,\"\"\"\"), \"\"YYYYMMDD\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(Schedule!J3<>\"\"\"\",Schedule!J3,\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"GA\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(Schedule!K3<>\"\"\"\",Schedule!K3,\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"GA\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(J3=\"\"TD\"\",IF(Schedule!L3<>\"\"\"\",Schedule!L3,\"\"\"\"),\"\"\"\"),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",IF(LEN(Cover!$B$29)>9,\"\"#N/A\"\",Cover!$B$29),\"\"\"\")\"\n\"IF(A3=\"\"FS\"\",\"\"\"\",\"\"\"\")\"\n\"IF(A3=\"\"FI\"\",\"\"\"\",IF(A3=\"\"FS\"\",IF(I3=\"\"TOR\"\",IF(J3=\"\"TD\"\",Schedule!G3,\"\"\"\"),\"\"\"\")))\"\n\"IF(A3=\"\"FI\"\",\"\"\"\",IF(A3=\"\"FS\"\",IF(I3=\"\"CCR\"\",Schedule!C3,\"\"\"\"),\"\"\"\") )\"\n\"IF(A3=\"\"FI\"\",\"\"\"\",IF(A3=\"\"FS\"\",IF(I3=\"\"CCR\"\",\"\"\"\",Schedule!C3),\"\"\"\") )\"\n\"IF(A3=\"\"FS\"\",\"\"'\"\",\"\"\"\")\"\n\"SUM(G3:G158)\"\n\"SUM(F160)/5280\"\n\"SUM(C8,C66,C82,C129,C160,C195,C212,C225,C261,C291)/10\"\n\"SUM(C10,C19,C40,C53)/46*100\"\n\"SUM(C10,C19,C40,C53)/46*100\"\n\"SUM(F11,F13,F15,F17)\"\n\"SUM(C10,C19,C40,C53)/46*100\"\n\"IF(D11,3,0)\"\n\"IF(E11,1,0)\"\n\"SUM(C69)/10*100\"\n\"SUM(C85,C96,C103,C112,C119)/31*100\"\n\"SUM(C131,C148)/27*100\"\n\"SUM(C163,C174,C185)/32*100\"\n\"SUM(C198)/16*100\"\n\"SUM(C215)/9*100\"\n\"SUM(C228,C243)/30*100\"\n\"SUM(C264,C275)/31*100\"\n\"SUM(F20,F22,F24,F26,F28,F30,F32,F34,F36,F38)\"\n\"SUM(C294)/13*100\"\n\"IF(D26,2,0)\"\n\"SUM(F41,F43,F45,F47,F49,F51)\"\n\"SUM(F54,F56,F58,F60,F62)\"\n\"SUM(F70,F72,F74,F76,F78)/10*100\"\n\"SUM(F70,F72,F74,F76,F78)/10*100\"\n\"SUM(F70,F72,F74,F76,F78)/10*100\"\n\"SUM(C85,C96,C103,C112,C119)/31*100\"\n\"SUM(C85,C96,C103,C112,C119)/31*100\"\n\"SUM(C85,C96,C103,C112,C119)/31*100\"\n\"SUM(F97,F99,F101)\"\n\"SUM(C131,C148)/27*100\"\n\"SUM(C131,C148)/27*100\"\n\"SUM(F132,F134,F136,F138,F140,F142,F144,F146)\"\n\"SUM(C163,C174,C185)/32*100\"\n\"SUM(C163,C174,C185)/32*100\"\n\"SUM(C163,C174,C185)/32*100\"\n\"SUM(F199,F201,F203,F205,F207,F209)/16*100\"\n\"SUM(F199,F201,F203,F205,F207,F209)/16*100\"\n\"SUM(F199,F201,F203,F205,F207,F209)/16*100\"\n\"SUM(F216,F218,F220,F222)/9*100\"\n\"SUM(F216,F218,F220,F222)/9*100\"\n\"SUM(F216,F218,F220,F222)/9*100\"\n\"SUM(C228,C243)/30*100\"\n\"SUM(C228,C243)/30*100\"\n\"SUM(C228,C243)/30*100\"\n\"SUM(F229,F231,F233,F235,F237,F239,F241)\"\n\"SUM(C264,C275)/31*100\"\n\"SUM(C264,C275)/31*100\"\n\"SUM(C264,C275)/31*100\"\n\"SUM(F295,F297,F299,F301,F303,F305,F307,F309)/13*100\"\n\"SUM(F295,F297,F299,F301,F303,F305,F307,F309)/13*100\"\n\"'Data Input'!$C6\"\n\"'Data Input'!$C8\"\n\"'Data Input'!$C66\"\n\"'Data Input'!$C82\"\n\"'Data Input'!$C129\"\n\"'Data Input'!$C160\"\n\"'Data Input'!$C195\"\n\"'Data Input'!$C212\"\n\"'Data Input'!$C225\"\n\"'Data Input'!$C261\"\n\"'Data Input'!$C291\"\n\"'Prob1 solution'!A3\"\n\"SUM(C3:H3)-SUM(I3:N3)-O3+SUM(P3:V3)\"\n\"-C5\"\n\"-C6\"\n\"-C7\"\n\"E8\"\n\"D9\"\n\"-E9\"\n\"-C10\"\n\"-C11\"\n\"D9\"\n\"-D9\"\n\"C15\"\n\"C6/12\"\n\"((H7-1000)/5)/12\"\n\"I18\"\n\"K4*0.12/12\"\n\"SUM(C3:C19)\"\n\"O2\"\n\"O20\"\n\"C2\"\n\"C20\"\n\"J2\"\n\"J20\"\n\"P2\"\n\"P20\"\n\"D2\"\n\"D20\"\n\"K2\"\n\"K20\"\n\"E2\"\n\"E20\"\n\"L2\"\n\"L20\"\n\"C25-C26\"\n\"F2\"\n\"F20\"\n\"G2\"\n\"G20\"\n\"M2\"\n\"M20\"\n\"Q2\"\n\"Q20\"\n\"H2\"\n\"H20\"\n\"N2\"\n\"N20+C37\"\n\"R2\"\n\"R20\"\n\"I2\"\n\"I20\"\n\"S20\"\n\"T2\"\n\"T20\"\n\"SUM(G25:G30)-G31\"\n\"SUM(K25:K30)\"\n\"U2\"\n\"U20\"\n\"IF(V2=\"\"\"\",\"\"\"\",V2)\"\n\"V20\"\n\"C28-C30-C31-C32-C33-C34-C35\"\n\"SUM(D8:D18)\"\n\"D4+D19-D34\"\n\"SUM(C8:C29)\"\n\"SUM(B15:B26)\"\n\"D12+B27-C27\"\n\"F3+F4\"\n\"SUM(F9:F18)\"\n\"F19\"\n\"F33\"\n\"F3+F37-F38\"\n\"E7+SUM(D9:D11)-SUM(D13:D15)\"\n\"SUM(D8:D18)\"\n\"E4+D19-D34\"\n\"E4+E19-E34\"\n\"NOW()\"\n\"IF('Tufts Summary Data'!B2=\"\"Enter Entity Name Here\"\",\"\"*****\"\",'Tufts Summary Data'!B2)\"\n\"'Energy Use Emissions'!K8*'Conversion Factors'!B$26*(12/44)\"\n\"('Agriculture Emissions'!H8+'Agriculture Emissions'!H25)*'Conversion Factors'!B$27*(12/44)\"\n\"SUM(B8:F8)\"\n\"B8*0.9072\"\n\"IF('Tufts Summary Data'!B72 > 0, G24/'Tufts Summary Data'!B72)\"\n\"IF('Tufts Summary Data'!D72 > 0, G24/'Tufts Summary Data'!D72)\"\n\"G24\"\n\"I24\"\n\"H24\"\n\"G32\"\n\"C41-C43\"\n\"D41/C41\"\n\"I32\"\n\"H32\"\n\"FORECAST(2010,C40:C41,$B40:$B41)\"\n\"C42-C43\"\n\"G24*0.93\"\n\"('Tufts Summary Data'!B8*'Conversion Factors'!B8)/2000*(12/44)*0.9072\"\n\"('Agriculture Emissions'!H8+'Agriculture Emissions'!H25)*'Conversion Factors'!B$27*(12/44)*0.9072\"\n\"SUM(B51:J51)\"\n\"('Tufts Summary Data'!B16*'Conversion Factors'!B16)/2000*(12/44)*0.9072\"\n\"('Agriculture Emissions'!H16+'Agriculture Emissions'!H33)*'Conversion Factors'!B$27*(12/44)*0.9072\"\n\"B51\"\n\"SUM(C51:G51)\"\n\"SUM(H51:I51)\"\n\"J51\"\n\"SUM(B59:E59)\"\n\"FORECAST(2010,B59:B60,{1990,1998})\"\n\"B59*0.93\"\n\"B59/$F59\"\n\"NOW()\"\n\"SUM('Medford Data:Boston Data'!B8)\"\n\"D72+E72/2\"\n\"NOW()\"\n\"NOW()\"\n\"NOW()\"\n\"NOW()\"\n\"('Tufts Summary Data'!B8*'Conversion Factors'!B8)/2000\"\n\"SUM(B8:J8)\"\n\"NOW()\"\n\"('Tufts Summary Data'!B57*'Conversion Factors'!E26)\"\n\"SUM(B8:G8)\"\n\"('Tufts Summary Data'!B57*'Conversion Factors'!E43)\"\n\"NOW()\"\n\"IF('Tufts Summary Data'!B2=\"\"Enter Entity Name Here\"\",\"\"*****\"\",'Tufts Summary Data'!B2)\"\n\"0.1258/0.9072\"\n\"0.0615/0.9072\"\n\"0.008/0.9072\"\n\"0.005/0.9072\"\n\"0.018/0.9072\"\n\"0.0015/0.9072\"\n\"0.089/0.9072\"\n\"0.00169/0.9072\"\n\"IF(A8=\"\"Inventory\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A9=\"\"   Accounts payable\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A17=\"\"   Cash\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A20=\"\"Accounts receivable\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A21=\"\"   Sales\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A23=\"\"Cost of merchandise sold\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A39=\"\"   Inventory\"\", \"\"Correct\"\",\"\"Not correct\"\")\"\n\"IF(A57=\"\"Sales returns and allowances\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A61=\"\"Sales discounts\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A67=\"\"Credit card expense\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"IF(A74=\"\"   Purchase discounts\"\", \"\"Correct\"\",\"\"not correct\"\")\"\n\"SUM(B8:B74)\"\n\"IF(B75=C75, \"\"In balance\"\", \"\"Not in balance\"\")\"\n\"SUM(C21+C28+C36+C44)\"\n\"B57\"\n\"B61\"\n\"C80-B81-B82\"\n\"B23+B30+B38+B46\"\n\"C83-C84\"\n\"C85/C83\"\n\"C84/C83\"\n\"IF(C89=100%,\"\"Equals 100%\"\",\"\"Does not equal 100\"\"%)\"\n\"C87+C88\"\n\"B8-C13+B16-C24-C31-C39-C47\"\n\"B8+B16\"\n\"-B12\"\n\"-C84\"\n\"C95+C96+C97\"\n\"IF(C92=C98,\"\"Reconciled\"\", \"\"Not Reconciled\"\")\"\n\"ROUND(SUM(D2:D290),5)\"\n\"ROUND(SUM(D292:D460),5)\"\n\"ROUND(SUM(D462:D813),5)\"\n\"ROUND(SUM(D815:D899),5)\"\n\"ROUND(SUM(D901:D905),5)\"\n\"ROUND(SUM(D907:D932),5)\"\n\"ROUND(SUM(D934:D936),5)\"\n\"ROUND(SUM(D942:D1591),5)\"\n\"ROUND(SUM(D1593:D1622),5)\"\n\"ROUND(SUM(D1624:D1625),5)\"\n\"A$9\"\n\"A$10\"\n\"A$11\"\n\"I12\"\n\"I12\"\n\"I12\"\n\"I12\"\n\"H12\"\n\"A5+1\"\n\"C6+1\"\n\"D19*G19\"\n\"J19/1000\"\n\"SQRT((F19*F19)+(I19*I19))\"\n\"IF(I19<=0.0504,\"\"High\"\",IF(I19<=0.1504,\"\"Good\"\",IF(I19>0.304,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"K19*L19\"\n\"N19^2\"\n\"IF(L21<=0.0504,\"\"High\"\",IF(L21<=0.1504,\"\"Good\"\",IF(L21>0.304,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"IF(L44<=0.05,\"\"High\"\",IF(L44<=0.15,\"\"Good\"\",IF(L44>0.3,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"IF(SUM(J21:J44)>0, SUM(J21:J44),0.000001)\"\n\"SUM(K21:K44)\"\n\"IF(K46>0,SQRT(SUM(O21:O44))/K46,0.0000000001)\"\n\"IF(F19<=0.05,\"\"High\"\",IF(F19<=0.15,\"\"Good\"\",IF(F19>0.3,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"IF(N(E19)>0,E19*F19,IF(N(D19)>0,D19/1000*F19,0))\"\n\"H19^2\"\n\"IF(F20<=0.0504,\"\"High\"\",IF(F20<=0.1504,\"\"Good\"\",IF(F20>0.304,\"\"Poor\"\",\"\"Fair\"\")))\"\n\" E20*F20\"\n\"D22*F22\"\n\"IF(SUM(D22:D45)>0,SUM(D22:D45),0.00000001)\"\n\"IF(D47>0,SQRT(SUM(I22:I45))/D47,0.0000000001)\"\n\"IF(F49<=0.05,\"\"High\"\",IF(F49<=0.15,\"\"Good\"\",IF(F49<0.3,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"SQRT((('1 aggregation - indirect measur'!J46*'1 aggregation - indirect measur'!L48)^2)+(('2 aggregation - direct measur'!D47)*'2 aggregation - direct measur'!F49)^2)/('1 aggregation - indirect measur'!J46+'2 aggregation - direct measur'!D47)\"\n\"IF(C6<=0.05,\"\"High\"\",IF(C6<=0.15,\"\"Good\"\",IF(C6>0.3,\"\"Poor\"\",\"\"Fair\"\")))\"\n\"E9\"\n\"E9\"\n\"D6\"\n\"D6\"\n\"SUM(A46:A82)\"\n\"E9\"\n\"E9\"\n\"'unclassified pd'!H40:I40\"\n\"'unclassified pd'!H40:I40\"\n\"'unclassified pd'!A84+SUM('extra pages for duties'!A7:A44)\"\n\"'unclassified pd'!H40:I40\"\n\"'unclassified pd'!H40:I40\"\n\"E9\"\n\"E9\"\n\"D6\"\n\"D6\"\n\"SUM(A46:A77)\"\n\"SUM(A80:A87) + A79\"\n\"NOW()\"\n\"+[1]VEHICLEINFO!L26\"\n\"+[1]VEHICLEINFO!D26\"\n\"+[1]VEHICLEINFO!N26\"\n\"+[1]VEHICLEINFO!Q26\"\n\"+[1]VEHICLEINFO!O26\"\n\"+[1]VEHICLEINFO!L34\"\n\"+[1]VEHICLEINFO!D34\"\n\"+[1]VEHICLEINFO!N34\"\n\"+[1]VEHICLEINFO!Q34\"\n\"+[1]VEHICLEINFO!O34\"\n\"+[1]VEHICLEINFO!L62\"\n\"+[1]VEHICLEINFO!D62\"\n\"+[1]VEHICLEINFO!N62\"\n\"+[1]VEHICLEINFO!Q62\"\n\"+[1]VEHICLEINFO!O62\"\n\"+[1]VEHICLEINFO!L10\"\n\"+[1]VEHICLEINFO!D10\"\n\"+[1]VEHICLEINFO!N10\"\n\"+[1]VEHICLEINFO!Q10\"\n\"+[1]VEHICLEINFO!O10\"\n\"+[1]VEHICLEINFO!L66\"\n\"+[1]VEHICLEINFO!D66\"\n\"+[1]VEHICLEINFO!N66\"\n\"+[1]VEHICLEINFO!Q66\"\n\"+[1]VEHICLEINFO!O66\"\n\"+[1]VEHICLEINFO!L73\"\n\"+[1]VEHICLEINFO!D73\"\n\"+[1]VEHICLEINFO!N73\"\n\"+[1]VEHICLEINFO!Q73\"\n\"+[1]VEHICLEINFO!O73\"\n\"+[1]VEHICLEINFO!$L$203\"\n\"+[1]VEHICLEINFO!$M$203\"\n\"+[1]VEHICLEINFO!$D$203\"\n\"+[1]VEHICLEINFO!$N$203\"\n\"+[1]VEHICLEINFO!$Q$203\"\n\"+[1]VEHICLEINFO!$O$203\"\n\"+[1]VEHICLEINFO!$K$203\"\n\"+[1]VEHICLEINFO!L119\"\n\"+[1]VEHICLEINFO!D119\"\n\"+[1]VEHICLEINFO!N119\"\n\"+[1]VEHICLEINFO!Q119\"\n\"+[1]VEHICLEINFO!O119\"\n\"+[1]VEHICLEINFO!L165\"\n\"+[1]VEHICLEINFO!D165\"\n\"+[1]VEHICLEINFO!N165\"\n\"+[1]VEHICLEINFO!Q165\"\n\"+[1]VEHICLEINFO!O165\"\n\"SUM(C6:C7)\"\n\"C8/B8\"\n\"D8/B8\"\n\"E8/B8\"\n\"F8/B8\"\n\"G8/B8\"\n\"H8/B8\"\n\"I8/B8\"\n\"J8/B8\"\n\"K8/B8\"\n\"L8/B8\"\n\"SUM(C14:C20)\"\n\"SUM(C21,C12,C8)\"\n\"NOW()\"\n\"C4/B4\"\n\"SUM(B4:B5)\"\n\"C6/B6\"\n\"D6/B6\"\n\"E6/B6\"\n\"F6/B6\"\n\"G6/B6\"\n\"H6/B6\"\n\"I6/B6\"\n\"J6/B6\"\n\"K6/B6\"\n\"L6/B6\"\n\"SUM(B12:B18)\"\n\"B6+B10+B19\"\n\"G8\"\n\"SUM(G5:R5)\"\n\"SUM(G10:G210)\"\n\"G4+G5-G6-G7\"\n\"G4+S5-S6-S7\"\n\"E10*C10\"\n\"F10-S10\"\n\"IF(T10>-1,0,IF(T10<1,(S10-F10)/F10,0))\"\n\"G8\"\n\"SUM(G5:R5)\"\n\"SUM(G10:G210)\"\n\"G4+G5-G6-G7\"\n\"G4+S5-S6-S7\"\n\"E10*C10\"\n\"F10-S10\"\n\"IF(T10>-1,0,IF(T10<1,(S10-F10)/F10,0))\"\n\"Financials!B14\"\n\"Financials!C41\"\n\"Financials!C46\"\n\"C12+(C11*C13)\"\n\"(D9*D15*(1-D18))+(D10*D14)\"\n\"IF(D6>0,D6/(1-D18),D16/(1-D18))\"\n\"C22/$C$3\"\n\"D23+D22\"\n\"SUM(D26:D29)\"\n\"E19+E23+E29+E35\"\n\"C12*$B$28\"\n\"B12\"\n\"E12/E$28\"\n\"B12\"\n\"B12\"\n\"B12\"\n\"B14*0.8\"\n\"SUM(B12:B15)\"\n\"B16/$B$28\"\n\"2*C21\"\n\"-C21\"\n\"0.75*$C$25\"\n\"SUM(E19:E20)\"\n\"0.25*$C$25\"\n\"0.75*$C$27\"\n\"E24+E21\"\n\"0.25*$C$27\"\n\"E26+E21+E24\"\n\"B3\"\n\"E27+E16\"\n\"C31*$B$48\"\n\"0.75*0.259\"\n\"(B31-(B14-E14))\"\n\"0.25*0.259\"\n\"0.25*0.081\"\n\"0.75*0.081\"\n\"SUM(B31:B35)\"\n\"0.75*$C$40\"\n\"0.25*$C$40\"\n\"(C41-C36)\"\n\"(B5/(1+B5))\"\n\"E40+E36\"\n\"0.01*$C$46\"\n\"0.2*$C$46\"\n\"0.79*$C$46\"\n\"C48-C41\"\n\"SUM(E43:E45)\"\n\"B28\"\n\"IF(B46+B41<>B28,\"\"ERROR\"\",\"\"\"\")\"\n\"B53+B52\"\n\"B51/B53\"\n\"E51/$E$53\"\n\"H51/H$53\"\n\"C52*B53\"\n\"B28*B4\"\n\"B53/$B$53\"\n\"E51-E52\"\n\"C55*$B$53\"\n\"(0.98*($C$53-$C$57))\"\n\"(0.02*($C$53-$C$57))\"\n\"B56*0.8\"\n\"B53-SUM(B55:B56)\"\n\"B6\"\n\"IF(B57/B53<>C57,\"\"ERROR\"\",\"\"\"\")\"\n\"C57-C76-SUM(C61:C75)\"\n\"B60*0.8\"\n\"SUM('Inv CC'!C26:C29)\"\n\"E14*SUM('Inv CC'!D26:D29)\"\n\"B63-(0.1*(E61/B61))\"\n\"'Inv CC'!C23\"\n\"$E$14*'Inv CC'!D23\"\n\"'Inv CC'!C32\"\n\"$E$14*'Inv CC'!D32\"\n\"(B56/0.3)*0.7\"\n\"B7\"\n\"E57-SUM(E60:E75)\"\n\"IF(ABS(B76-(B57-SUM(B60:B75)))>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"C82*B53\"\n\"B8\"\n\"E76-SUM(E78:E81)\"\n\"IF(B76-SUM(B78:B81)<>B82,\"\"ERROR\"\",\"\"\"\")\"\n\"B82*'Inv CC'!$D$18\"\n\"(B14*'Inv CC'!$D$22)\"\n\"B82-SUM(B84:B86)\"\n\"IF(B82-SUM(B84:B86)<>B87,\"\"ERROR\"\",\"\"\"\")\"\n\"(B55+B56)/B14\"\n\"B98\"\n\"B87/B28\"\n\"B87/B46\"\n\"B53/B13\"\n\"SUM(B97:B99)\"\n\"-365/(SUM(B55:B56)/B31)\"\n\"365/B90\"\n\"365/B95\"\n\"(B82/B53)*(B53/B28)*(B28/B46)\"\n\"E87-$B87\"\n\"(SUM($B31:$B32)-SUM(E31:E32))\"\n\"E14*H8*K9\"\n\"G6*K9\"\n\"IF(G3<>Financials!B87/Financials!B46,\"\"ERROR\"\",\"\"\"\")\"\n\"IF(G3<>(Financials!B87/Financials!B46),\"\"ERROR\"\",\"\"\"\")\"\n\"E9*H8\"\n\"IF(G6<>(Financials!B87/Financials!B28),\"\"ERROR\"\",\"\"\"\")\"\n\"E43/H13\"\n\"Financials!C87\"\n\"IF((E43/H13)<>H8,\"\"ERROR\"\",\"\"\"\")\"\n\"H13/K11\"\n\"IF(E14-E11<>E9,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(Financials!C84:C86)\"\n\"Financials!B46\"\n\"IF(ABS(E44-E37-E32-E27-E23-E18-E16-E14)>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!B28\"\n\"Financials!C82\"\n\"Financials!C28\"\n\"IF(H14<>(H17+K17),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!C81\"\n\"Financials!C27\"\n\"Financials!C16\"\n\"SUM(C19:C21)\"\n\"IF(K17<>(K19+K21+K23+K25),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!C78\"\n\"Financials!C26\"\n\"Financials!C14\"\n\"Financials!C25\"\n\"Financials!C13\"\n\"IF(H21<>(H25+H26+H28+H29),\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C24:C25)\"\n\"Financials!C74\"\n\"Financials!C19\"\n\"Financials!C12\"\n\"Financials!C70\"\n\"IF((E44-E37)<>E35,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C33:C37)\"\n\"Financials!C60\"\n\"Financials!C63\"\n\"E44-E37\"\n\"SUM(Financials!C65:C68)\"\n\"SUM(C39:C40)\"\n\"Financials!C55\"\n\"Financials!C51\"\n\"Financials!B53\"\n\"Financials!C53\"\n\"E14*H8*K9\"\n\"G6*K9\"\n\"IF(G3<>Financials!E87/Financials!E46,\"\"ERROR\"\",\"\"\"\")\"\n\"E9*H8\"\n\"IF(G6<>(Financials!E87/Financials!E28),\"\"ERROR\"\",\"\"\"\")\"\n\"E43/H13\"\n\"Financials!F87\"\n\"IF((E43/H13)<>H8,\"\"ERROR\"\",\"\"\"\")\"\n\"H13/K11\"\n\"IF(E14-E11<>E9,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(Financials!F84:F86)\"\n\"Financials!E46\"\n\"IF(ABS(E44-E37-E32-E27-E23-E18-E16-E14)>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!E28\"\n\"Financials!F82\"\n\"Financials!F28\"\n\"IF(H14<>(H17+K17),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!F81\"\n\"Financials!F27\"\n\"Financials!F16\"\n\"SUM(C19:C21)\"\n\"IF(K17<>(K19+K21+K23+K25),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!F78\"\n\"Financials!F26\"\n\"Financials!F14\"\n\"Financials!F25\"\n\"Financials!F13\"\n\"IF(H21<>(H25+H26+H28+H29),\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C24:C25)\"\n\"Financials!F74\"\n\"Financials!F19\"\n\"Financials!F12\"\n\"Financials!F70\"\n\"IF((E44-E37)<>E35,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C33:C37)\"\n\"Financials!F60\"\n\"Financials!F63\"\n\"E44-E37\"\n\"SUM(Financials!F65:F68)\"\n\"SUM(C39:C40)\"\n\"Financials!F55\"\n\"Financials!F51\"\n\"Financials!E53\"\n\"Financials!F53\"\n\"E14*H8*K9\"\n\"G6*K9\"\n\"IF(G3<>Financials!H87/Financials!H46,\"\"ERROR\"\",\"\"\"\")\"\n\"E9*H8\"\n\"IF(G6<>(Financials!H87/Financials!H28),\"\"ERROR\"\",\"\"\"\")\"\n\"E43/H13\"\n\"Financials!I87\"\n\"IF((E43/H13)<>H8,\"\"ERROR\"\",\"\"\"\")\"\n\"H13/K11\"\n\"IF(E14-E11<>E9,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(Financials!I84:I86)\"\n\"Financials!H46\"\n\"IF(ABS(E44-E37-E32-E27-E23-E18-E16-E14)>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!H28\"\n\"Financials!I82\"\n\"Financials!I28\"\n\"IF(H14<>(H17+K17),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!I81\"\n\"Financials!I27\"\n\"Financials!I16\"\n\"SUM(C19:C21)\"\n\"IF(K17<>(K19+K21+K23+K25),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!I78\"\n\"Financials!I26\"\n\"Financials!I14\"\n\"Financials!I25\"\n\"Financials!I13\"\n\"IF(H21<>(H25+H26+H28+H29),\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C24:C25)\"\n\"Financials!I74\"\n\"Financials!I19\"\n\"Financials!I12\"\n\"Financials!I70\"\n\"IF((E44-E37)<>E35,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C33:C37)\"\n\"Financials!I60\"\n\"Financials!I63\"\n\"E44-E37\"\n\"SUM(Financials!I65:I68)\"\n\"SUM(C39:C40)\"\n\"Financials!I55\"\n\"Financials!I51\"\n\"Financials!H53\"\n\"Financials!I53\"\n\"E14*H8*K9\"\n\"G6*K9\"\n\"IF(G3<>Financials!K87/Financials!K46,\"\"ERROR\"\",\"\"\"\")\"\n\"E9*H8\"\n\"IF(G6<>(Financials!K87/Financials!K28),\"\"ERROR\"\",\"\"\"\")\"\n\"E43/H13\"\n\"Financials!L87\"\n\"IF((E43/H13)<>H8,\"\"ERROR\"\",\"\"\"\")\"\n\"H13/K11\"\n\"IF(E14-E11<>E9,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(Financials!L84:L86)\"\n\"Financials!K46\"\n\"IF(ABS(E44-E37-E32-E27-E23-E18-E16-E14)>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!K28\"\n\"Financials!L82\"\n\"Financials!L28\"\n\"IF(H14<>(H17+K17),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!L81\"\n\"Financials!L27\"\n\"Financials!L16\"\n\"SUM(C19:C21)\"\n\"IF(K17<>(K19+K21+K23+K25),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!L78\"\n\"Financials!L26\"\n\"Financials!L14\"\n\"Financials!L25\"\n\"Financials!L13\"\n\"IF(H21<>(H25+H26+H28+H29),\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C24:C25)\"\n\"Financials!L74\"\n\"Financials!L19\"\n\"Financials!L12\"\n\"Financials!L70\"\n\"IF((E44-E37)<>E35,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C33:C37)\"\n\"Financials!L60\"\n\"Financials!L63\"\n\"E44-E37\"\n\"SUM(Financials!L65:L68)\"\n\"SUM(C39:C40)\"\n\"Financials!L55\"\n\"Financials!L51\"\n\"Financials!K53\"\n\"Financials!L53\"\n\"E14*H8*K9\"\n\"G6*K9\"\n\"IF(G3<>Financials!N87/Financials!N46,\"\"ERROR\"\",\"\"\"\")\"\n\"E9*H8\"\n\"IF(G6<>(Financials!N87/Financials!N28),\"\"ERROR\"\",\"\"\"\")\"\n\"E43/H13\"\n\"Financials!O87\"\n\"IF((E43/H13)<>H8,\"\"ERROR\"\",\"\"\"\")\"\n\"H13/K11\"\n\"IF(E14-E11<>E9,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(Financials!O84:O86)\"\n\"Financials!N46\"\n\"IF(ABS(E44-E37-E32-E27-E23-E18-E16-E14)>0.0001,\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!N28\"\n\"Financials!O82\"\n\"Financials!O28\"\n\"IF(H14<>(H17+K17),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!O81\"\n\"Financials!O27\"\n\"Financials!O16\"\n\"SUM(C19:C21)\"\n\"IF(K17<>(K19+K21+K23+K25),\"\"ERROR\"\",\"\"\"\")\"\n\"Financials!O78\"\n\"Financials!O26\"\n\"Financials!O14\"\n\"Financials!O25\"\n\"Financials!O13\"\n\"IF(H21<>(H25+H26+H28+H29),\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C24:C25)\"\n\"Financials!O74\"\n\"Financials!O19\"\n\"Financials!O12\"\n\"Financials!O70\"\n\"IF((E44-E37)<>E35,\"\"ERROR\"\",\"\"\"\")\"\n\"SUM(C33:C37)\"\n\"Financials!O60\"\n\"Financials!O63\"\n\"E44-E37\"\n\"SUM(Financials!O65:O68)\"\n\"SUM(C39:C40)\"\n\"Financials!O55\"\n\"Financials!O51\"\n\"Financials!N53\"\n\"Financials!O53\"\n\"Financials!C12\"\n\"SUM(Financials!C25:C26)\"\n\"SUM(B3:B7)\"\n\"Financials!B51\"\n\"SUM(Financials!B55:B56)\"\n\"C11-C12\"\n\"C14/$C$13\"\n\"Financials!B52\"\n\"Financials!B60\"\n\"SUM(Financials!B63:B65)\"\n\"SUM(Financials!B70:B72)\"\n\"SUM(Financials!B74:B75)\"\n\"SUM(Financials!B78:B81)\"\n\"Financials!B82\"\n\"Financials!C51\"\n\"SUM(Financials!C55:C56)\"\n\"SUM(Financials!C60:C61)\"\n\"SUM(Financials!C63:C68)\"\n\"SUM(Financials!C70:C72)\"\n\"SUM(Financials!C74:C75)\"\n\"SUM(Financials!C78:C81)\"\n\"Financials!C82\"\n\"C9*C10*C11*0.16\"\n\"C9*C10*C11*0.25\"\n\"(E9+G9)/2\"\n\"C9*C10*C11*C12\"\n\"(C15/C16)*2.1\"\n\"(C15/C16)*4\"\n\"(C15/C16)*C17\"\n\"C20*C21*C22*0\"\n\"C20*C21*C22*1\"\n\"C26*C27*0\"\n\"C26*C27*0.25\"\n\"C26*C27*C28\"\n\"SUM(E9:E41)\"\n\"(C48/C49)*C50*2.1\"\n\"(C48/C49)*C50*4\"\n\"(C48/C49)*C50*C51\"\n\"SUM(E48:E94)\"\n\"(C110+C111)*C112*0.16\"\n\"(C110+C111)*C112*0.44\"\n\"(C110+C111)*C112*C113\"\n\"C116*C117*C118*C119*0\"\n\"C116*C117*C118*C119*1\"\n\"C116*C117*C118*C119*C120\"\n\"C130*0.04*0.18\"\n\"C130*0.06*0.25\"\n\"C130*C131*C133\"\n\"C135*C137\"\n\"C135*C137\"\n\"C135*C137\"\n\"E104+E110+E116+E123+E133+E140+E146\"\n\"E42+E95+E149\"\n\"E9\"\n\"E15\"\n\"E20\"\n\"E26\"\n\"+E31\"\n\"E38\"\n\"SUM(C210:C215)\"\n\"E48\"\n\"E54\"\n\"E60\"\n\"+E66\"\n\"+E74\"\n\"+E80\"\n\"E86\"\n\"E92\"\n\"SUM(C219:C226)\"\n\"E104\"\n\"E110\"\n\"E116\"\n\"+E123\"\n\"E133\"\n\"+E135\"\n\"E140\"\n\"E146\"\n\"C216\"\n\"C227\"\n\"C238\"\n\"SUM(C252:C254)\"\n\"C257\"\n\"C257\"\n\"C257\"\n\"((C257+C258)/C255)*12\"\n\"(C255*C259)/(C257+C258)\"\n\"C255/12\"\n\"TODAY()\"\n\"TODAY()\"\n\"'Page 1'!B1\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"'Page 1'!A53:U53\"\n\"194.75+19\"\n\"3172878-6750-52367-71636-50837-27351-10373-54373-44962-1555-23613-4440-166095-6202-24800-29314-41755-58927-18073-12599-5671-1920-4637-10229-21208-6173-5209-41748-11725-533655-24958-10985-89166-8549-24026-206150-26152-12855-1040-5915-3024-4292-5638-19895-61813-57534-145677-211321-12158-1778-18945\"\n\"(8900029-567629-324937-403097-37878-174898-74529-285812-14688-47362-261864-65542-70358-225994-72033-432469-66083-1431875-168899-78511-39053-21402-31621-359257)*4\"\n\"K5\"\n\"18628000+497000\"\n\"Q5-L5\"\n\"P16*20\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B3\"\n\"'CHARGEBACKS (FY00)'!B4\"\n\"'CHARGEBACKS (FY00)'!K5\"\n\"'CHARGEBACKS (FY00)'!P5\"\n\"'CHARGEBACKS (FY00)'!Q5\"\n\"O5-L5\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B3\"\n\"'CHARGEBACKS (FY00)'!B4\"\n\"23312000+650/10000\"\n\"K5\"\n\"O5-L5\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"N8*72.45\"\n\"(((N9*33.46)/12)*8)+44\"\n\"SUM(K6:K24)\"\n\"7252176*0.06\"\n\"+O25-L25\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B3\"\n\"'CHARGEBACKS (FY00)'!B4\"\n\"'FY03'!K5+13520\"\n\"('FY03'!L5*1.02)+2043460+650+66000\"\n\"K5\"\n\"O5-L5\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B3\"\n\"'CHARGEBACKS (FY00)'!B4\"\n\"'FY04'!K5\"\n\"('FY04'!L5*1.02)-2328761\"\n\"K5\"\n\"O5-L5\"\n\"S6/12*(IF(P6,IF(P6-$P$5>365,0,INT((365+$P$5-P6+(365/24))/(365/12))),0))\"\n\"SUM(K6:K24)\"\n\"FY00!$B$2\"\n\"FY00!$B$3\"\n\"FY00!$B$4\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"'CHARGEBACKS (FY00)'!B2\"\n\"FY00!K5\"\n\"FY00!L5/1000\"\n\"'FY03'!$K$5\"\n\"'FY03'!O5/1000\"\n\"'FY04'!$K$5\"\n\"'FY04'!O5/1000\"\n\"'FY05'!$K$5\"\n\"'FY05'!O5/1000\"\n\"'CHARGEBACKS (FY00)'!$T$25\"\n\"'CHARGEBACKS (FY00)'!$V$25/1000\"\n\"'CHARGEBACKS (FY00)'!$T$25\"\n\"'CHARGEBACKS (FY00)'!$U$25/1000*(1+$K$15)\"\n\"'CHARGEBACKS (FY00)'!$T$25\"\n\"K20*(1+N15)\"\n\"'CHARGEBACKS (FY00)'!$T$25\"\n\"FY00!$R$25\"\n\"FY00!$T$25/1000\"\n\"FY00!$S$25/1000*(1+$K$15)\"\n\"J24\"\n\"K24*(1+N15)\"\n\"J24\"\n\"'FY03'!N25\"\n\"'FY05'!$R$25\"\n\"'FY05'!$S$25/1000*(1+$N$15)\"\n\"N25*(1+Q15)\"\n\"'FY04'!$R$25\"\n\"'FY04'!$S$25/1000\"\n\"'FY05'!$R$45\"\n\"'FY05'!$T$45/1000\"\n\"'FY05'!$S$45/1000*(1+$N$15)\"\n\"N29*(1+Q15)\"\n\"'FY04'!$R$45\"\n\"'FY04'!$T$45/1000\"\n\"'FY04'!$S$45/1000*(1+$Q$15)\"\n\"'FY03'!$R$45\"\n\"'FY03'!$T$45/1000\"\n\"SUM(G18:G31)\"\n\"H33\"\n\"0+K33\"\n\"SUM(H38:H45)\"\n\"SUM(H50:H55)\"\n\"H56+H46\"\n\"H58-H33\"\n\"FY00!S5/1000\"\n\"G64+G63\"\n\"SUM(D12:F12)\"\n\"SUM(D15:F15)\"\n\"SUM(F14:F49)\"\n\"+F51\"\n\"+F52-F53\"\n\"ROUND(B12*B19,2)\"\n\"SUM(B21:B32)\"\n\"+B33-B35\"\n\"AVERAGE(D10:D71)\"\n\"STDEV(D10:D71)\"\n\"H5/$H$17\"\n\"I5\"\n\"MAX(D10:D71)\"\n\"I6+J5\"\n\"MIN(D10:D71)\"\n\"D3\"\n\"LN(1+D10)\"\n\"QUARTILE($E$10:$E$71,G21)\"\n\"0.25*G21\"\n\"DATE(1996,2,2)\"\n\"MONTH(B33)\"\n\"YEAR(B33)\"\n\"C4\"\n\"IF($B11<C$6,C$5,IF($B11=C$6, 100+C$5,0))\"\n\"C$18*C9\"\n\"SUM(C21:G21)\"\n\"EXP(C5)-1\"\n\"$C$4*EXP($C$5*$C$7)\"\n\"$C$4*EXP(-$C$5*$C$7)\"\n\"C10\"\n\"C11\"\n\"J15&C5\"\n\"C11\"\n\"BSOptionValue(1,C4,C5,C6,C7,C8,C9)\"\n\"G8-G4\"\n\"LINEST(ShareA,Index,,1)\"\n\"TRANSPOSE(C4:C5)\"\n\"TRANSPOSE(C7:D7)\"\n\"MMULT(C4:C5,C7:D7)\"\n\"TRANSPOSE(C10:D11)\"\n\"MMULT(C7:D7,C4:C5)\"\n\"TRANSPOSE(C13)\"\n\"MINVERSE(C17:E19)\"\n\"MMULT(A,invA)\"\n\"MMULT(I17:K19,C21:C23)\"\n\"-LN(D5)/B5\"\n\"F5\"\n\"EXP(F5)-1\"\n\"ROUND(M5,3)\"\n\"-LN(N5)/B5\"\n\"-LN(D6/D5)\"\n\"SUM(F25:F34)\"\n\"LN(1+IRR(H24:H34))\"\n\"-F20\"\n\"D5\"\n\"H25*D25\"\n\"$B$21\"\n\"H25*EXP(-$H$20*B25)\"\n\"B20+B21\"\n\"1-B39\"\n\"($B$39*B52+$B$40*B53)/EXP(B46)\"\n\"$B$20\"\n\"B61*INDEX(D5:D14,B69)\"\n\"IF(E61=1,\"\"call\"\",\"\"put\"\")\"\n\"B61*INDEX(D5:D14,B71)\"\n\"B61*(B63/B62)\"\n\"EXP(-B66*B70)*E61*(B64*E69-B65*E72)\"\n\"BlackBondOptionValue(E61,B64,B65,B66,B70,B73)\"\n\"(LN(B64/B65)+0.5*(B73^2)*B70)/(B73*SQRT(B70))\"\n\"NORMSDIST(E61*E68)\"\n\"B69-B68\"\n\"(LN(B64/B65)-0.5*(B73^2)*B70)/(B73*SQRT(B70))\"\n\"NORMSDIST(E61*E71)\"\n\"B20\"\n\"B21/B20\"\n\"B18\"\n\"IF(E80<$B$81,$B$85,$B$78+$B$85)\"\n\"1/(1+$B$83)^E80\"\n\"F80*G80\"\n\"E80*H80\"\n\"EXP(H20)-1\"\n\"B78*B79/B82\"\n\"H91\"\n\"I91/H91\"\n\"ChuaBondDuration(0,B78,B79,B80,B81,B82,B83)\"\n\"SUM(H80:H89)\"\n\"ChuaBondDuration(1,B78,B79,B80,B81,B82,B83)\"\n\"B83+B99\"\n\"BlakeOrszagBondConvexity(B78,B79,B80,B81,B82,B83)\"\n\"F80\"\n\"1/(1+$G$95)^E99\"\n\"-B95*B99+0.5*B97*B99^2\"\n\"B86*(1+B101)\"\n\"E10\"\n\"E17\"\n\"0.0154/B5\"\n\"B14*EXP(-B13*B7)\"\n\"VasicekCIRZeroValue(1,B5,B6,B7,B8,B9,B11)\"\n\"B9-B8\"\n\"IF(B10>0,-LN(E6)/B10,B7)\"\n\"VasicekCIRSpotRate(1,B5,B6,B7,B8,B9,B11)\"\n\"IF(B5=0,B10,(1-EXP(-B5*B10))/B5)\"\n\"IF(B5=0,EXP(B11^2*B10^3/6),EXP(((B13-B10)*(B5^2*B6-0.5*B11^2))/B5^2-(B11^2*B13^2)/(4*B5)))\"\n\"B6-0.5*(B11/B5)^2\"\n\"B11*IF(B10>0,(1-EXP(-B5*B10))/(B5*B10),1)\"\n\"B5\"\n\"IF(H23=1,\"\"call\"\",\"\"put\"\")\"\n\"E27*H23*(EXP(H29+0.5*H30)*H35-E24*H36)\"\n\"VasicekCIRZeroValue(1,B23,B24,B25,B27,B28,B31)\"\n\"VasicekZeroOptionValue(H23,E23,E24,B23,B24,B25,B27,B28,B29,B31)\"\n\"VasicekCIRZeroValue(1,B23,B24,B25,B27,B29,B31)\"\n\"IF(NOT(B23=0),B31*SQRT((1-EXP(-2*B23*(B28-B27)))/(2*B23)),B31*SQRT((B28-B27)))\"\n\"LN(E23*E28/E27)-0.5*E31^2\"\n\"IF(NOT(B23=0),(1-EXP(-B23*(B29-B28)))/B23,(B29-B28))\"\n\"E31^2\"\n\"B11\"\n\"IF(NOT(B23=0),E29*E30,B31*(B29-B28)*SQRT(B28-B27))\"\n\"H33+SQRT(H30)\"\n\"(H29-LN(E24))/SQRT(H30)\"\n\"NORMSDIST(H23*H32)\"\n\"NORMSDIST(H23*H33)\"\n\"B5\"\n\"SUM(H51:H60)\"\n\"B28\"\n\"VasicekCIRBondOptionValue(1,H41,E41,E42,E43,B41,B42,B43,B44,B45,B46,B47,B48)\"\n\"Jamshidianrstar(1,E41,E42,E43,B41,B42,B43,B45,B46,B47,B48,0.001)\"\n\"B11\"\n\"SUM(F51:F56)\"\n\"$B$45\"\n\"B51+$B$47\"\n\"VasicekCIRZeroValue(1,$B$41,$B$42,E$47,B51,C51,$B$48)\"\n\"$E$42+IF(C51=$B$46,$E$41,0)\"\n\"D51*E51\"\n\"VasicekZeroOptionValue($H$41,E51,F51,$B$41,$B$42,$B$43,$B$44,B51,C51,$B$48)\"\n\"C51+$B$47\"\n\"E10\"\n\"E17\"\n\"0.0189/B5\"\n\"B16*EXP(-B15*B7)\"\n\"VasicekCIRZeroValue(2,B5,B6,B7,B8,B9,B11)\"\n\"B9-B8\"\n\"IF(B10>0,-LN(E6)/B10,B7)\"\n\"SQRT(0.0073)\"\n\"VasicekCIRSpotRate(2,B5,B6,B7,B8,B9,B11)\"\n\"SQRT(B5^2+2*B11^2)\"\n\"EXP(B13*B10)-1\"\n\"2*B5*B6/(B13+B5)\"\n\"2*B14/((B13+B5)*B14+2*B13)\"\n\"POWER((2*B13*EXP((B13+B5)*0.5*B10))/((B13+B5)*B14+2*B13),2*B5*B6/(B11^2))\"\n\"B11*SQRT(B7)*IF(B10>0,B15/B10,1)\"\n\"B5\"\n\"IF(H23=1,\"\"call\"\",\"\"put\"\")\"\n\"IF(E24>=E23*E31,0,IF(H23=1,E23*E28*H29-E24*E27*H30,E24*E27*(1-H30)-E23*E28*(1-H29)))\"\n\"VasicekCIRZeroValue(2,B23,B24,B25,B27,B28,B31)\"\n\"CIRZeroOptionValue(H23,E23,E24,B23,B24,B25,B27,B28,B29,B31)\"\n\"VasicekCIRZeroValue(2,B23,B24,B25,B27,B29,B31)\"\n\"1-CIRSankaranQ(H31,H32,H33)\"\n\"(B33+B23)*(EXP(B33*(B29-B28))-1)+2*B33\"\n\"1-CIRSankaranQ(H34,H35,H36)\"\n\"B11\"\n\"(2*B33*EXP(0.5*(B33+B23)*(B29-B28))/E30)^(2*B23*B24/(B31^2))\"\n\"2*E35*(E33+E34+E32)\"\n\"2*(EXP(B33*(B29-B28))-1)/E30\"\n\"4*B23*B24/(B31^2)\"\n\"SQRT(B23^2+2*B31^2)\"\n\"2*B33/((B31^2)*(EXP(B33*(B28-B27))-1))\"\n\"2*(E33^2)*B25*EXP(B33*(B28-B27))/(E33+E34+E32)\"\n\"(B33+B23)/(B31^2)\"\n\"2*E35*(E33+E34)\"\n\"LN(E23*E31/E24)/E32\"\n\"4*B23*B24/(B31^2)\"\n\"2*(E33^2)*B25*EXP(B33*(B28-B27))/(E33+E34)\"\n\"B5\"\n\"SUM(H51:H60)\"\n\"B28\"\n\"SQRT(B41^2+2*B48^2)\"\n\"VasicekCIRBondOptionValue(2,H41,E41,E42,E43,B41,B42,B43,B44,B45,B46,B47,B48)\"\n\"Jamshidianrstar(2,E41,E42,E43,B41,B42,B43,B45,B46,B47,B48,0.001)\"\n\"B11\"\n\"SUM(F51:F56)\"\n\"$B$45\"\n\"B51+$B$47\"\n\"VasicekCIRZeroValue(2,$B$41,$B$42,$E$47,B51,C51,$B$48)\"\n\"$E$42+IF(C51=$B$46,$E$41,0)\"\n\"D51*E51\"\n\"CIRZeroOptionValue($H$41,E51,F51,$B$41,$B$42,$B$43,B$44,B51,C51,$B$48)\"\n\"C51+$B$47\"\n\"-LN(D6/$K$5)/B6\"\n\"1-K7\"\n\"F6\"\n\"C12*EXP(-2*$H$7)\"\n\"($K$7*C16+$K$8*C17)/EXP(B12)\"\n\"$K$5\"\n\"100*(B16-D7)\"\n\"B12\"\n\"D22*EXP(-2*$H$8)\"\n\"($K$7*C27+$K$8*C28)/EXP(B22)\"\n\"100*(B27-D8)\"\n\"B22\"\n\"E34*EXP(-2*$H$9)\"\n\"($K$7*C40+$K$8*C41)/EXP(B34)\"\n\"100*(B40-D9)\"\n\"BinZeroRateTree(2,D6:D9,H7:H9,K5,K6)\"\n\"BinZeroPrice($K$5,$B$48,G48,$K$6)\"\n\"0.5*LN(C48/C49)/SQRT($K$6)\"\n\"0.5*LN(D48/D49)/SQRT($K$6)\"\n\"0.5*LN(E48/E49)/SQRT($K$6)\"\n\"-LN(D6/$K$5)/B6\"\n\"1-K7\"\n\"F6\"\n\"C12-2*$H$7\"\n\"($K$7*C16+$K$8*C17)/EXP(B12)\"\n\"$K$5\"\n\"B16-D7\"\n\"B12\"\n\"D22-2*$H$8\"\n\"($K$7*C27+$K$8*C28)/EXP(B22)\"\n\"B27-D8\"\n\"B22\"\n\"E34-2*$H$9\"\n\"($K$7*C40+$K$8*C41)/EXP(B34)\"\n\"B40-D9\"\n\"BinZeroRateTree(1,$D$6:$D$9,$H$7:$H$9,$K$5,$K$6)\"\n\"BinZeroPrice($K$5,$B$48,G48,$K$6)\"\n\"0.5*(C48-C49)/SQRT($K$6)\"\n\"0.5*(D48-D49)/SQRT($K$6)\"\n\"0.5*(E48-E49)/SQRT($K$6)\"\n\"(1+E5)^-((D3+1)*$B$3)\"\n\"BDTPuvec(E5,F5:H5,F15:H15,B3)\"\n\"2*F7*(1+$E$5)-F9\"\n\"2*F7*(1+$E$5)-M9\"\n\"0.5*(F9+F10)/(1+$E$5)\"\n\"(F9^-(1/(E3*$B$3)))-1\"\n\"(M9^-(1/(E3*$B$3)))-1\"\n\"(F10^-(1/(E3*$B$3)))-1\"\n\"(M10^-(1/(E3*$B$3)))-1\"\n\"0.5*LN(F17/F18)/SQRT($B$3)\"\n\"1000*(F15-F20)\"\n\"(1/F9-1)/(1/F10-1)\"\n\"(F9/G9-1)/(F10/G10-1)\"\n\"BDTKvec(F9:H9,F10:H10)\"\n\"((1/(0.5*(F9+F10)))-1)/(0.5*(1+1/F25))\"\n\"(((F9+F10)/(G9+G10))-1)/((0.5*(1+1/G25))^F3)\"\n\"BDTXvec(F9:H9,F10:H10,F26:H26)\"\n\"E5\"\n\"F28\"\n\"E5\"\n\"M29\"\n\"F32/F25\"\n\"M32/M26\"\n\"G33/G25\"\n\"H34/H25\"\n\"0.5*(F38+F39)/(1+E32)\"\n\"$I$38\"\n\"(1+C8)^B4-1\"\n\"BDTPuvec(B5,D8:L8,D9:L9,B4)\"\n\"2*D13*(1+$B$5)-D11\"\n\"(1+C8)^-(C20*$B$4)\"\n\"BDTKvec(D11:L11,D12:L12)\"\n\"BDTXvec(D11:L11,D12:L12,C15:K15)\"\n\"B5\"\n\"IF($A21<=C$20,C$16/(C$15^$A21),\"\"\"\")\"\n\"IF($A36<=B$35,0.5*(C36+C37)/(1+B21),\"\"\"\")\"\n\"IF($A51<=B$50,0.5*(C51+C52)/(1+B21),\"\"\"\")\"\n\"IF($A51<=F$50,MAX($F$5*(F36-$F$4),0),\"\"\"\")\"\n\"IF($A62<=B$61,MAX($F$5*(B36-$F$4),0.5*(C62+C63)/(1+B21)),\"\"\"\")\"\n\"IF($A62<=F$61,MAX($F$5*(F36-$F$4),0),\"\"\"\")\"\n\"D10\"\n\"E10\"\n\"1-SUM(I10:I11)\"\n\"C10*VLOOKUP(C$14,$B$5:$D$7,3,FALSE)*VLOOKUP($B15,$B$5:$D$7,3,FALSE)\"\n\"SUMPRODUCT(C5:C7,I10:I12)\"\n\"SQRT(I18)\"\n\"MMULT(TRANSPOSE(I10:I12),MMULT(C15:E17,I10:I12))\"\n\"1-SUM(I11:I12)\"\n\"D10\"\n\"E10\"\n\"C10*VLOOKUP(C$14,$B$5:$D$7,3,FALSE)*VLOOKUP($B15,$B$5:$D$7,3,FALSE)\"\n\"PortfolioReturn(C5:C7,I10:I12)\"\n\"SQRT(PortfolioVariance(I10:I12,C15:E17))\"\n\"1-SUM(I6:I7)\"\n\"1/3\"\n\"MMULT(TRANSPOSE(I5:I7),C5:C7)\"\n\"PortfolioReturn(C5:C7,I5:I7)\"\n\"D10\"\n\"MMULT(TRANSPOSE(I5:I7),MMULT(C15:E17,I5:I7))\"\n\"E10\"\n\"SQRT(I11)\"\n\"SQRT(PortfolioVariance(I5:I7,C15:E17))\"\n\"C10*VLOOKUP(C$14,$B$5:$D$7,3,FALSE)*VLOOKUP($B15,$B$5:$D$7,3,FALSE)\"\n\"MINVERSE(C15:E17)\"\n\"MMULT(TRANSPOSE(A24:A26),C24:C26)\"\n\"MMULT(H15:J17,C5:C7)\"\n\"MMULT(H15:J17,A24:A26)\"\n\"MMULT(TRANSPOSE(C5:C7),C24:C26)\"\n\"(1/G26)*(MMULT(D24:D26,G24)-MMULT(C24:C26,G23))\"\n\"(1/G26)*(MMULT(C24:C26,G25)-MMULT(D24:D26,G23))\"\n\"I24+J24\"\n\"MMULT(TRANSPOSE(A24:A26),D24:D26)\"\n\"G24*G25-G23^2\"\n\"PortfolioReturn($C$5:$C$7,I24:I26)\"\n\"SQRT(PortfolioVariance(I24:I26,$C$15:$E$17))\"\n\"I24+J24*$D$33\"\n\"TRANSPOSE(HLPortfolioWeights(D33,-1,C5:C7,C15:E17))\"\n\"PortfolioReturn(C5:C7,D36:D38)\"\n\"SQRT(PortfolioVariance(D36:D38,C15:E17))\"\n\"G23/G25\"\n\"I24+J24*$D$43\"\n\"TRANSPOSE(HLPortfolioWeights(-1,-1,C5:C7,C15:E17))\"\n\"PortfolioReturn(C5:C7,D46:D48)\"\n\"SQRT(PortfolioVariance(D46:D48,C15:E17))\"\n\"(G23/G25)-(G26/G25^2)/(D53-(G23/G25))\"\n\"I24+J24*$D$55\"\n\"TRANSPOSE(HLPortfolioWeights(-1,D53,C5:C7,C15:E17))\"\n\"PortfolioReturn(C5:C7,D58:D60)\"\n\"SQRT(PortfolioVariance(D58:D60,C15:E17))\"\n\"1-SUM(I8:J8)\"\n\"D10\"\n\"PortfolioReturn(C5:C7,H8:J8)\"\n\"E10\"\n\"SQRT(PortfolioVariance(H8:J8,C15:E17))\"\n\"C10*VLOOKUP(C$14,$B$5:$D$7,3,FALSE)*VLOOKUP($B15,$B$5:$D$7,3,FALSE)\"\n\"SQRT(PortfolioVariance(D24:F24,$C$15:$E$17))\"\n\"PortfolioReturn($C$5:$C$7,D24:F24)\"\n\"K13-0.5*K6*K14^2\"\n\"D11\"\n\"1-H14\"\n\"PortfolioReturn(C7:C8,H13:H14)\"\n\"(C8-C7)/(K6*D8^2)\"\n\"SQRT(PortfolioVariance(H13:H14,C15:D16))\"\n\"C11*D7^2\"\n\"D11*D7*D8\"\n\"Prob1OptimalRiskyWeight(C8,C7,D8,K6)\"\n\"D12*D8^2\"\n\"K24-0.5*K20*K25^2\"\n\"(D22^2-D29)/(D21^2+D22^2-2*D29)\"\n\"PortfolioReturn(C21:C22,H24:H25)\"\n\"1-H24\"\n\"SQRT(PortfolioVariance(H24:H25,C29:D30))\"\n\"K29-0.5*K20*K30^2\"\n\"H24+(C21-C22)/($K$20*(D21^2+D22^2-2*D29))\"\n\"PortfolioReturn(C21:C22,H29:H30)\"\n\"SQRT(PortfolioVariance(H29:H30,C29:D30))\"\n\"Prob2OptimalRiskyWeight1(C21,C22,0,D21,D22,D25,K20)\"\n\"C37-$C$36\"\n\"K41-0.5*K45*K42^2\"\n\"(E37*D38^2-E38*E47)/(E37*D38^2+E38*D37^2-(E37+E38)*E47)\"\n\"PortfolioReturn(C37:C38,H41:H42)\"\n\"SQRT(PortfolioVariance(H41:H42,D47:E48))\"\n\"E41\"\n\"Prob2OptimalRiskyWeight1(C37,C38,C36,D37,D38,E42,0)\"\n\"C41*D36^2\"\n\"D41*D36*D37\"\n\"E41*D36*D38\"\n\"K52-0.5*K45*K53^2\"\n\"D42*D37^2\"\n\"E42*D37*D38\"\n\"E43*D38^2\"\n\"1-H50\"\n\"(K41-C36)/(K45*K42^2)\"\n\"Prob1OptimalRiskyWeight(K41,C36,K42,K45)\"\n\"H48\"\n\"TRANSPOSE(Prob3OptimalWeightsVec(C37,C38,C36,D37,D38,E42,K45))\"\n\"PortfolioReturn(C36:C38,H52:H54)\"\n\"$H$50*H43\"\n\"SQRT(PortfolioVariance(H52:H54,C46:E48))\"\n\"$H$50*H42\"\n\"E12\"\n\"C12\"\n\"B13*$C$6+B14*$C$7\"\n\"SQRT((B13*$E$6)^2+(B14*$E$7)^2+2*B13*B14*$C$9)\"\n\"C12-0.5*$G$5*E12^2\"\n\"1-B14\"\n\"(C7-C6)/(G5*E7^2)\"\n\"Prob1OptimalRiskyWeight(C7,C6,E7,G5)\"\n\"E18\"\n\"C18\"\n\"B23\"\n\"C8*E6*E7\"\n\"B13*$C$6+B14*$C$7\"\n\"SQRT((B13*$E$6)^2+(B14*$E$7)^2+2*B13*B14*$C$9)\"\n\"C12-0.5*$G$5*E12^2\"\n\"1-B13\"\n\"E12\"\n\"C12\"\n\"(E7^2-C9)/(E6^2+E7^2-2*C9)\"\n\"B18+(C6-C7)/(G5*(E6^2+E7^2-2*C9))\"\n\"C8-C7\"\n\"C9-C7\"\n\"C10*E8*E9\"\n\"B18*$C$8+B19*$C$9\"\n\"SQRT((B18*$E$8)^2+(B19*$E$9)^2+2*B18*B19*$C$11)\"\n\"C16-0.5*$G$5*E16^2\"\n\"E16\"\n\"C16\"\n\"1-B18\"\n\"C22-C7\"\n\"(D8*E9^2-D9*C11)/(D8*E9^2+D9*E8^2-(D8+D9)*C11)\"\n\"B32*C7+(1-B32)*C22\"\n\"SQRT((B32*E7)^2+((1-B32)*E22)^2+2*B32*(1-B32)*C27)\"\n\"E31\"\n\"C31\"\n\"B24*(1-B32)\"\n\"B25*(1-B32)\"\n\"B38*C7+(1-B38)*C22\"\n\"SQRT((B38*E7)^2+((1-B38)*E22)^2+2*B38*(1-B38)*C27)\"\n\"1-D22/(G5*E22^2)\"\n\"B24*(1-B38)\"\n\"B25*(1-B38)\"\n\"K17\"\n\"M17\"\n\"K33\"\n\"L33\"\n\"M33\"\n\"$I$6+$I$7*C6\"\n\"B6-E6\"\n\"INTERCEPT(B6:B65,C6:C65)\"\n\"LINEST(B6:B65,C6:C65,TRUE,TRUE)\"\n\"ZNplotmat(B6:B65)\"\n\"SLOPE(B6:B65,C6:C65)\"\n\"RSQ(B6:B65,C6:C65)\"\n\"STEYX(B6:B65,C6:C65)\"\n\"INDEX(LINEST(B6:B65,C6:C65,TRUE,TRUE),1,2)\"\n\"INDEX(LINEST(B6:B65,C6:C65,TRUE,TRUE),2,2)\"\n\"INDEX(LINEST(B6:B65,C6:C65,TRUE,TRUE),1,1)\"\n\"INDEX(LINEST(B6:B65,C6:C65,TRUE,TRUE),2,1)\"\n\"I9\"\n\"I9*SQRT(12)\"\n\"PortfolioSpecificRisk(B6:B65,C6:C65,12)\"\n\"SQRT(SUMSQ(F6:F65)/(COUNT(F6:F65)-2))*SQRT(12)\"\n\"I14\"\n\"K35*K29+(1-K35)*O29\"\n\"O35^2\"\n\"PortfolioAdjustedBeta(B6:B65,C6:C65,K30)\"\n\"K30^2\"\n\"K32/(K32+K33)\"\n\"I15\"\n\"SQRT(K35*K33)\"\n\"PortfolioAdjustedBetaStdError(B6:B65,C6:C65,K30)\"\n\"CorrMatrix(C13:J72)\"\n\"PortfolioAlpha(C13:C72,$B13:$B72)\"\n\"PortfolioAlphaStdError(C13:C72,$B13:$B72)\"\n\"PortfolioBeta(C13:C72,$B13:$B72)\"\n\"AVERAGE(C13:C72)\"\n\"PortfolioBetaStdError(C13:C72,$B13:$B72)\"\n\"STDEV(B13:B72)*SQRT(12)\"\n\"VARP(C13:C72)\"\n\"PortfolioSpecificRisk(C13:C72,$B13:$B72,12)\"\n\"EXP(W8+0.5*W10)-1\"\n\"VCVMatrix(C13:J72)\"\n\"-NORMSINV(1-W17)\"\n\"W6*$W$19*SQRT(W10*$W$15)\"\n\"VaRAssetNormRel(W6,W10,$W$15,$W$17)\"\n\"W21-W6*W12*$W$15\"\n\"VaRAssetNormAbs(W6,W12,W10,$W$15,$W$17)\"\n\"SQRT(MMULT(MMULT(W21:AD21,M5:T12),TRANSPOSE(W21:AD21)))\"\n\"VaRPortfolio(W21:AD21,M5:T12)\"\n\"PortfolioBeta(C13:C72,$B$13:$B$72)\"\n\"SQRT(MMULT(MMULT(W24:AD24,M5:T12),TRANSPOSE(W24:AD24)))\"\n\"PortfolioSpecificRisk(C13:C72,$B$13:$B$72,1)\"\n\"VaRPortfolio(W24:AD24,M5:T12)\"\n\"VAR(B13:B72)\"\n\"$M$36*HLOOKUP($L41,$M$32:$T$34,2,FALSE)*HLOOKUP(M$40,$M$32:$T$34,2,FALSE)+IF($L41=M$40,HLOOKUP($L41,$M$32:$T$34,3,FALSE)^2,0)\"\n\"VCVSingleIndexMatrix(C13:J72,B13:B72)\"\n\"M19-M55\"\n\"AVERAGE(B26:B95)\"\n\"2*LN(B6)-0.5*LN(B7)\"\n\"SUMSQ(B26:B95)/COUNT(B26:B95)\"\n\"-2*LN(B6)+LN(B7)\"\n\"B6-1\"\n\"EXP(E6+0.5*E7)-1\"\n\"NORMSINV(K8)\"\n\"B6*(B7/B6^2)^(0.5*((1/K7)-1))-1\"\n\"EXP(E6+0.5*E7/K7)-1\"\n\"K6*EXP(E6*K7+K11*SQRT(E7*K7))\"\n\"ISForecastWealth(K6,B26:B95,K7,K8)\"\n\"(B6^2)/SQRT(B7)-1\"\n\"EXP(E6)-1\"\n\"EXP(E6+K11*SQRT(E7/K7))-1\"\n\"ISForecastReturn(B26:B95,K7,K8)\"\n\"E26*B26\"\n\"ISForecastWealth($E$96,$B$26:$B$95,$D97-$D$96,H$25)\"\n\"AVERAGE(C20:C79)\"\n\"PortfolioSharpeRatio(M20:M79)\"\n\"PortfolioTreynorRatio(M20:M79,$M20:$M79)\"\n\"STDEV(C20:C79)\"\n\"C6/C8\"\n\"D6/D8\"\n\"PortfolioAlpha(M20:M79,$M20:$M79)\"\n\"SQRT(C8^2-(C13*D8)^2)\"\n\"PortfolioAppraisalRatio(N20:N79,$M20:$M79)\"\n\"C6/C13\"\n\"D6/D13\"\n\"INTERCEPT(C20:C79,$D$20:$D$79)\"\n\"C11\"\n\"D11\"\n\"SLOPE(C20:C79,$D$20:$D$79)\"\n\"C11/C9\"\n\"CORREL(C20:C79,D20:D79)\"\n\"E4*$H$4\"\n\"B12/(E12^2)\"\n\"G12/$G$17\"\n\"SUMPRODUCT(B12:B15,$I$12:$I$15)\"\n\"SQRT(SUMSQ(E12*I12,E13*I13,E14*I14,E15*I15))\"\n\"SUM(G12:G15)\"\n\"M32\"\n\"M28\"\n\"B17\"\n\"E24-B4\"\n\"Prob2OptimalRiskyWeight1(B24,E24,B4,B29,E29,B31,B7)\"\n\"B4+B26*B5+B23\"\n\"B4+E26*B5\"\n\"1-I23\"\n\"D17\"\n\"I29+I30*B5\"\n\"M29+M30*B5\"\n\"E17\"\n\"B4+I27\"\n\"B4+M27\"\n\"SQRT((B26*B6)^2+B28^2)\"\n\"E26*B6\"\n\"I23*B23\"\n\"M23*B23\"\n\"I23*B26+I24*E26\"\n\"M23*B26+M24*E26\"\n\"B26*B6/B29\"\n\"I23*B28\"\n\"M23*B28\"\n\"SQRT((I30*B6)^2+I31^2)\"\n\"SQRT((M30*B6)^2+M31^2)\"\n\"E23/E29\"\n\"I27/I32\"\n\"1-B41\"\n\"Prob1OptimalRiskyWeight(I28,B4,I32,B7)\"\n\"B40\"\n\"I45-B4\"\n\"M45-B4\"\n\"I12*$I$23*$B$41\"\n\"B40*B4+B41*(B4+I27)\"\n\"M40*B4+M41*(B4+I27)\"\n\"B41*I29\"\n\"M41*I29\"\n\"B41*I30\"\n\"M41*I30\"\n\"B41*I31\"\n\"M41*I31\"\n\"I24*B41\"\n\"B41*I32\"\n\"M41*I32\"\n\"P23\"\n\"P40\"\n\"Q40\"\n\"AVERAGE(M21:M80)\"\n\"M6*10000\"\n\"VAR(M21:M80)\"\n\"SQRT(M6)\"\n\"VAR(B21:B80)\"\n\"1-(M6/L9)\"\n\"1-SUM(D16:J16)\"\n\"SUMPRODUCT($C$16:$J$16,C21:J21)\"\n\"B21-L21\"\n\"J6+J5-1\"\n\"M23*10000\"\n\"VAR(INDEX($M$38:$M$97,J6,1):INDEX($M$38:$M$97,J7,1))\"\n\"SQRT(M23)\"\n\"VAR(INDEX($B$38:$B$97,J6,1):INDEX($B$38:$B$97,J7,1))\"\n\"1-(M23/L26)\"\n\"1-SUM(D33:J33)\"\n\"SUMPRODUCT($C$33:$J$33,C38:J38)\"\n\"B38-L38\"\n\"M6*10000\"\n\"VAR(M21:M80)\"\n\"CorrMatrix(P21:W80)\"\n\"COUNT(P21:P80)\"\n\"SQRT(M6)\"\n\"SUM(AB12:AI12)\"\n\"VAR(B21:B80)\"\n\"1-(M6/L9)\"\n\"IF(AB11>0,1,0)\"\n\"1-SUM(E14:J14)\"\n\"$AD$5/(AB14*SQRT($AD$6-$AD$7-1))\"\n\"AB11/AB16\"\n\"INDEX($P$21:$W$80,A21,$B$9)\"\n\"StyleSubMatrix(P21:W80,B9)\"\n\"SUMPRODUCT($D$14:$J$14,D21:J21)\"\n\"B21-L21\"\n\"1/SQRT(C4)\"\n\"IF($A9<K$8,OFFSET(K9,0,-1)-$C$5,OFFSET(K9,1,-1)+$C$5)\"\n\"(2*C22-$C$4)/SQRT($C$4)\"\n\"COMBIN($C$4,C22)\"\n\"G22*$C$6^$C$4\"\n\"SUMPRODUCT(E22:E31,I22:I31)\"\n\"SQRT(SUMPRODUCT(I22:I31,(E22:E31)^2)-I33^2)\"\n\"D12/D15\"\n\"LN(D4)+(D6-D8-0.5*D13^2)*D12\"\n\"2*LN(K9)-0.5*LN(K10)\"\n\"EXP(D6*G6)\"\n\"D13^2*D12\"\n\"LN(K10)-2*LN(K9)\"\n\"EXP((D6-D8-0.5*D13^2)*G6+D13*SQRT(G6))\"\n\"EXP(J6+0.5*J7)\"\n\"SUMPRODUCT(K35:K44,K$21:K$30)\"\n\"EXP((D6-D8-0.5*D13^2)*G6-D13*SQRT(G6))\"\n\"EXP(2*J6+2*J7)\"\n\"SUMPRODUCT(K35:K44,(K$21:K$30)^2)\"\n\"0.5\"\n\"D11-D10\"\n\"1-G11\"\n\"EXP(-D6*D12)*SUMPRODUCT(K35:K44,K49:K58)\"\n\"IF(D16=1,\"\"Call\"\",\"\"Put\"\")\"\n\"BSOptionValue(D16,D4,D5,D6,D8,D12,D13)\"\n\"IF($A21<C$20,$G$10*OFFSET(C21,0,-1),IF($A21=C$20,$G$9*OFFSET(C21,1,-1),\"\"\"\"))\"\n\"BinTree(0,D4,D6,D8,D12,D13,D15)\"\n\"$D$4\"\n\"IF($A35<=B$34,COMBIN(B$34,$A35)*$G$11^$A35*$G$12^(B$34-$A35),\"\"\"\")\"\n\"COMBIN($D$15,A35)*$G$11^$D$15\"\n\"BinTreeProbs(0,D6,D8,D12,D13,D15)\"\n\"MAX($D$16*(K21-$D$5),0)\"\n\"D12/D15\"\n\"LN(D4)+(D6-D8-0.5*D13^2)*D12\"\n\"2*LN(K9)-0.5*LN(K10)\"\n\"EXP(D6*G6)\"\n\"D13^2*D12\"\n\"LN(K10)-2*LN(K9)\"\n\"EXP((D6-D8)*G6)\"\n\"EXP(D13*SQRT(G6))\"\n\"EXP(J6+0.5*J7)\"\n\"SUMPRODUCT(K$35:K$44,K$21:K$30)\"\n\"1/G9\"\n\"EXP(2*J6+2*J7)\"\n\"SUMPRODUCT(K$35:K$44,(K$21:K$30)^2)\"\n\"(G8-G10)/(G9-G10)\"\n\"D11-D10\"\n\"1-G11\"\n\"EXP(-D6*D12)*SUMPRODUCT(K35:K44,K49:K58)\"\n\"IF(D16=1,\"\"Call\"\",\"\"Put\"\")\"\n\"BSOptionValue(D16,D4,D5,D6,D8,D12,D13)\"\n\"IF($A21<C$20,$G$10*OFFSET(C21,0,-1),IF($A21=C$20,$G$9*OFFSET(C21,1,-1),\"\"\"\"))\"\n\"BinTree(1,D4,D6,D8,D12,D13,D15)\"\n\"$D$4\"\n\"IF($A35<=B$34,COMBIN(B$34,$A35)*$G$11^$A35*$G$12^(B$34-$A35),\"\"\"\")\"\n\"BinTreeProbs(1,D6,D8,D12,D13,D15)\"\n\"MAX($D$16*(K21-$D$5),0)\"\n\"B12/B15\"\n\"EXP(B6*E6)\"\n\"EXP((B6-B8)*E6)\"\n\"EXP(B13*SQRT(E6))\"\n\"1/E9\"\n\"(E8-E10)/(E9-E10)\"\n\"B11-B10\"\n\"(E9/E8)*E11\"\n\"MAX(0,1+INT(LN(B5/(B4*E10^B15))/LN(E9/E10)))\"\n\"BSDOne(B4,B5,B6,B8,B12,B13)\"\n\"1-BINOMDIST(E14-1,B15,E12,TRUE)\"\n\"NORMSDIST(H15)\"\n\"IF(E14<=B15,B4*EXP(-B8*B12)*E16-B5*EXP(-B6*B12)*E18,0)\"\n\"BSDTwo(B4,B5,B6,B8,B12,B13)\"\n\"BinEuroOptionValue(1,1,B4,B5,B6,B8,B12,B13,B15)\"\n\"1-BINOMDIST(E14-1,B15,E11,TRUE)\"\n\"BSOptionValue(1,B4,B5,B6,B8,B12,B13)\"\n\"D12/D15\"\n\"EXP(D6*G4)\"\n\"EXP((D6-D8)*G4)\"\n\"LN(D4)+(D6-D8-0.5*D13^2)*D12\"\n\"2*LN(K9)-0.5*LN(K10)\"\n\"BSDOne(D4,D5,D6,D8,D12,D13)\"\n\"D13^2*D12\"\n\"LN(K10)-2*LN(K9)\"\n\"BSDTwo(D4,D5,D6,D8,D12,D13)\"\n\"PPNormInv(G8,D15)\"\n\"EXP(J6+0.5*J7)\"\n\"SUMPRODUCT(K$35:K$44,K$21:K$30)\"\n\"1-G9\"\n\"EXP(2*J6+2*J7)\"\n\"SUMPRODUCT(K$35:K$44,(K$21:K$30)^2)\"\n\"PPNormInv(G7,D15)\"\n\"D11-D10\"\n\"G6*G11/G9\"\n\"(D15+1)/2\"\n\"G6*(1-G11)/(1-G9)\"\n\"1-BINOMDIST(K12-1,D15,G11,TRUE)\"\n\"NORMSDIST(G7)\"\n\"EXP(-D6*D12)*SUMPRODUCT(K35:K44,K49:K58)\"\n\"1-BINOMDIST(K12-1,D15,G9,TRUE)\"\n\"NORMSDIST(G8)\"\n\"IF(D16=1,\"\"Call\"\",\"\"Put\"\")\"\n\"BSOptionValue(D16,D4,D5,D6,D8,D12,D13)\"\n\"IF($A21<C$20,$G$13*OFFSET(C21,0,-1),IF($A21=C$20,$G$12*OFFSET(C21,1,-1),\"\"\"\"))\"\n\"$D$4\"\n\"IF($A35<=B$34,COMBIN(B$34,$A35)*$G$9^$A35*$G$10^(B$34-$A35),\"\"\"\")\"\n\"MAX($D$16*(K21-$D$5),0)\"\n\"BSOptionValue(B15,B4,B5,B6,B8,B12,B13)\"\n\"BinOptionValue(1,B15,1,B4,B5,B6,B8,B12,B13,E5)\"\n\"BinOptionValue(2,B15,1,B4,B5,B6,B8,B12,B13,E5)\"\n\"BSOptionValue($B$15,$B$4,$B$5,$B$6,$B$8,$B$12,$B$13)\"\n\"BinOptionValue(1,$B$15,1,$B$4,$B$5,$B$6,$B$8,$B$12,$B$13,E10)\"\n\"BinOptionValue(2,$B$15,1,$B$4,$B$5,$B$6,$B$8,$B$12,$B$13,E10)\"\n\"B11-B10\"\n\"IF(B15=1,\"\"Call\"\",\"\"Put\"\")\"\n\"D12/D15\"\n\"EXP(D6*G6)\"\n\"EXP((D6-D8)*G6)\"\n\"EXP(D13*SQRT(G6))\"\n\"1/G9\"\n\"(G8-G10)/(G9-G10)\"\n\"D11-D10\"\n\"1-G11\"\n\"EXP(-D6*D12)*SUMPRODUCT(K35:K44,K49:K58)\"\n\"BSOptionValue(D16,D4,D5,D6,D8,D12,D13)\"\n\"IF(D16=1,\"\"Call\"\",\"\"Put\"\")\"\n\"B86\"\n\"IF($A21<C$20,$G$10*OFFSET(C21,0,-1),IF($A21=C$20,$G$9*OFFSET(C21,1,-1),\"\"\"\"))\"\n\"$D$4\"\n\"IF($A35<=B$34,COMBIN(B$34,$A35)*$G$11^$A35*$G$12^(B$34-$A35),\"\"\"\")\"\n\"BinTreeProbs(1,D6,D8,D12,D13,D15)\"\n\"IF($A49<=B$48,MAX($D$16*(B21-$D$5),0),\"\"\"\")\"\n\"IF($A63<=B$62,($G$11*C62+$G$12*C63)/$G$7,\"\"\"\")\"\n\"K49\"\n\"IF($A77<=B$76,MAX(($G$11*C76+$G$12*C77)/$G$7,B49),\"\"\"\")\"\n\"K49\"\n\"B4*B16*E11-B5*B15*E16\"\n\"B4*B16*(E11-1)-B5*B15*(E16-1)\"\n\"BSOptionValue(E7,B4,B5,B6,B8,B11,B12)\"\n\"BSOptionValue(H7,B4,B5,B6,B8,B11,B12)\"\n\"(LN(B4/B5)+B14*B11)/(B12*SQRT(B11))\"\n\"BSDOne(B4,B5,B6,B8,B11,B12)\"\n\"B10-B9\"\n\"NORMSDIST(E10)\"\n\"B6-B8+0.5*B12^2\"\n\"EXP(-B6*B11)\"\n\"E10-B12*SQRT(B11)\"\n\"BSDTwo(B4,B5,B6,B8,B11,B12)\"\n\"EXP(-B8*B11)\"\n\"LN(B4)+(B6-B8-0.5*B12^2)*B11\"\n\"(B24+B25-LN(B5))/SQRT(B25)\"\n\"(B12^2)*B11\"\n\"E24-SQRT(B25)\"\n\"EXP(B24+0.5*B25)\"\n\"EXP(B24+0.5*B25)\"\n\"EXP(2*B24+2*B25)\"\n\"EXP(-$B$6*$B$11)*E7*($E$26*NORMSDIST(E7*$E$24)-$B$5*NORMSDIST(E7*$E$25))\"\n\"B28-B27^2\"\n\"LNOptionValue0(E7,$B$24,$B$25,$B$5,$B$6,$B$11)\"\n\"B4*EXP((B6-B8)*B11)\"\n\"(LN(E4/B5)+0.5*(B12^2)*B11)/(B12*SQRT(B11))\"\n\"E5-B12*SQRT(B11)\"\n\"B10-B9\"\n\"BSOptionValue(E9,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"EXP(-B6*B11)*(E4*NORMSDIST(E5)-B5*NORMSDIST(E6))\"\n\"(B5*(1-NORMSDIST(E6))-E4*(1-NORMSDIST(E5)))*EXP(-B6*B11)\"\n\"BlackOptionValue(E9,$E$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"BlackOptionValue(E5,$B$4,$B$5,$B$6,$B$6,$B$11,$B$12)\"\n\"BSOptionValue(E5,$B$4,$B$5,$B$6,$B$6,$B$11,$B$12)\"\n\"BlackFuturesOptionValue(E5,$B$4,$B$5,$B$6,$B$11,$B$12)\"\n\"B10-B9\"\n\"(LN(B4/B5)+B14*B11)/(B12*SQRT(B11))\"\n\"NORMSDIST(E4)\"\n\"NORMDIST(E4,0,1,FALSE)\"\n\"EXP(B6)-1\"\n\"E4-B12*SQRT(B11)\"\n\"IF(G8=1,\"\"Call\"\",\"\"Put\"\")\"\n\"B10-B9\"\n\"B4*B16*E5-B5*B15*E8\"\n\"BSOptionValue(G8,B4,B5,B6,B8,B11,B12)\"\n\"B16*E5\"\n\"BSOptionDelta($G$8,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"B6-B8+0.5*B12^2\"\n\"(B16*E6)/(B4*B12*SQRT(B11))\"\n\"BSOptionGamma($G$8,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"EXP(-B6*B11)\"\n\"B5*B11*B15*E8\"\n\"BSOptionRho($G$8,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"EXP(-B8*B11)\"\n\"B6*E11-(B6-B8)*B4*E13-0.5*(B12^2)*(B4^2)*E14\"\n\"BSOptionTheta($G$8,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"B4*B16*SQRT(B11)*E6\"\n\"BSOptionVega($G$8,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12)\"\n\"-E21*E13\"\n\"E21*(E13*B4-E11)\"\n\"E21*E11\"\n\"E21*BSOptionValue(1,H21,B5,B6,B8,B11-1/52,B12)\"\n\"E22*B4\"\n\"E22*H21\"\n\"E23\"\n\"E27+SIGN(E27)*ABS(E27)*B7/52\"\n\"SUM(E25:E27)\"\n\"H21\"\n\"-E35*E13-E37*B42\"\n\"-E35*E14/B43\"\n\"-(E35*E11+E36*B4+E37*B40)\"\n\"BSOptionValue(1,B4,B37,B6,B8,B38,B12)\"\n\"E35*E11\"\n\"E35*BSOptionValue(1,H35,B5,B6,B8,B11-1/52,B12)\"\n\"BSOptionDelta(1,$B$4,$B$37,$B$6,$B$8,$B$38,$B$12)\"\n\"E36*B4\"\n\"E36*H35\"\n\"BSOptionGamma(1,$B$4,$B$37,$B$6,$B$8,$B$38,$B$12)\"\n\"E37*B40\"\n\"E37*BSOptionValue(1,H35,B37,B6,B8,B38-1/52,B12)\"\n\"BSOptionRho(1,$B$4,$B$37,$B$6,$B$8,$B$38,$B$12)\"\n\"E38\"\n\"E44+SIGN(E44)*ABS(E44)*B7/365\"\n\"BSOptionTheta(1,$B$4,$B$37,$B$6,$B$8,$B$38,$B$12)\"\n\"BSOptionVega(1,$B$4,$B$37,$B$6,$B$8,$B$38,$B$12)\"\n\"SUM(E41:E44)\"\n\"H29\"\n\"H46\"\n\"IF(E4=1,\"\"call\"\",\"\"put\"\")\"\n\"BSOptionValue(E4,B4,B5,B6,B8,B11,B12)\"\n\"B18*AVERAGE(H22:H57)\"\n\"B18*STDEV(H22:H57)/SQRT(B14)\"\n\"B10-B9\"\n\"(B6-B8-0.5*B12^2)*B11\"\n\"B12*SQRT(B11)\"\n\"B18*SUMPRODUCT(J22:J57,H22:H57)\"\n\"EXP(-B6*B11)\"\n\"RAND()\"\n\"NORMSINV(B22)\"\n\"$B$4*EXP($B$16+C22*$B$17)\"\n\"MAX($E$4*(E22-$B$5),0)\"\n\"1/$B$14\"\n\"IF(E4=1,\"\"call\"\",\"\"put\"\")\"\n\"BSOptionValue(E4,B4,B5,B6,B8,B11,B12)\"\n\"B18*AVERAGE(H22:H57)\"\n\"B18*STDEV(H22:H57)/SQRT(B14)\"\n\"B10-B9\"\n\"(B6-B8-0.5*B12^2)*B11\"\n\"B12*SQRT(B11)\"\n\"EXP(-B6*B11)\"\n\"RAND()\"\n\"NORMSINV(B22)\"\n\"$B$4*EXP($B$16+C22*$B$17)\"\n\"$B$4*EXP($B$16-C22*$B$17)\"\n\"MAX($E$4*(D22-$B$5),0)\"\n\"0.5*(F22+G22)\"\n\"IF(E4=1,\"\"call\"\",\"\"put\"\")\"\n\"BSOptionValue(E4,B4,B5,B6,B8,B11,B12)\"\n\"B18*AVERAGE(H22:H57)\"\n\"B18*STDEV(H22:H57)/SQRT(B14)\"\n\"B10-B9\"\n\"(B6-B8-0.5*B12^2)*B11\"\n\"B12*SQRT(B11)\"\n\"EXP(-B6*B11)\"\n\"FaureBase2(A22)\"\n\"MoroNormSInv(B22)\"\n\"$B$4*EXP($B$16+C22*$B$17)\"\n\"MAX($E$4*(E22-$B$5),0)\"\n\"$B$15\"\n\"MCOptionValue(1,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12,E6)\"\n\"QMCOptionValue(1,$B$4,$B$5,$B$6,$B$8,$B$11,$B$12,E6)\"\n\"B10-B9\"\n\"BSOptionValue(1,B4,B5,B6,B8,B11,B12)\"\n\"IF(H4=1,\"\"call\"\",\"\"put\"\")\"\n\"D11/M14\"\n\"BSOptionValue(H4,D4,D5,D6,D8,D11,D12)\"\n\"EXP(D6*M6)\"\n\"EXP((D6-D8)*M6)\"\n\"EXP(-D6*D11)*SUM(H21:H56)\"\n\"EXP(-D6*D11)*SUMPRODUCT(F21:F56,E21:E56)\"\n\"EXP(D12*SQRT(M6))\"\n\"NIOptionValue(H4,D4,D5,D6,D8,D11,D12,H12,H15)\"\n\"1/M9\"\n\"(M8-M10)/(M9-M10)\"\n\"1-M11\"\n\"-H12\"\n\"(D6-D8-0.5*D12^2)*D11\"\n\"EXP(-D6*D11)*SUM(S21:S56)\"\n\"EXP(-D6*D11)*SUMPRODUCT(Q21:Q56,P21:P56)\"\n\"D12*SQRT(D11)\"\n\"(H12-H13)/H15\"\n\"$H$13+(A21+0.5)*$H$17\"\n\"$D$4*EXP($D$15+$D$17*B21)\"\n\"MAX(C21-$D$5,0)\"\n\"$H$17*NORMDIST(B21,0,1,FALSE)\"\n\"E21*F21\"\n\"(LN(N21/$D$4)-$D$15)/$D$17\"\n\"$D$4*$M$10^($M$14-L21)*$M$9^(L21)\"\n\"MAX($H$4*(N21-$D$5),0)\"\n\"COMBIN($M$14,L21)*$M$11^L21*$M$12^($M$14-L21)\"\n\"LN(B4)+(B6-B8-0.5*B12^2)*B11\"\n\"EXP(E4+0.5*E5)\"\n\"(B12^2)*B11\"\n\"EXP(2*E4+2*E5)\"\n\"E8+SQRT(E5)\"\n\"(2*H5-H4^2)/(H5-H4^2)\"\n\"(E4-LN(B5))/SQRT(E5)\"\n\"(H5-H4^2)/(H4*H5)\"\n\"NORMSDIST(B14*E7)\"\n\"IF(B14=1,GAMMADIST(1/B5,H7-1,H8,TRUE),1-GAMMADIST(1/B5,H7-1,H8,TRUE))\"\n\"B10-B9\"\n\"NORMSDIST(B14*E8)\"\n\"IF(B14=1,GAMMADIST(1/B5,H7,H8,TRUE),1-GAMMADIST(1/B5,H7,H8,TRUE))\"\n\"EXP(-B6*B11)*B14*(EXP(E4+0.5*E5)*E10-B5*E11)\"\n\"EXP(-B6*B11)*B14*(H4*H10-B5*H11)\"\n\"LNOptionValue0(B14,E4,E5,B5,B6,B11)\"\n\"RGOptionValue(B14,H4,H5,B5,B6,B11)\"\n\"IF(B14=1,\"\"call\"\",\"\"put\"\")\"\n\"BSOptionValue(B14,B4,B5,B6,B8,B11,B12)\"\n\"LNOptionValue(B14,H4,H5,B5,B6,B11)\"\n\"E14\"\n\"H14\"\n\"F20/E20\"\n\"SQRT(2*PI()/B11)*H10/(H6+H7)\"\n\"B4*EXP(-B8*B11)\"\n\"B5*EXP(-B6*B11)\"\n\"B17-B14*0.5*(H6-H7)\"\n\"(H8^2)-((H6-H7)^2)/PI()\"\n\"H8+SQRT(H9)\"\n\"B10-B9\"\n\"SQRT(2*ABS(LN(B4/B5)+(B6-B8)*B11)/B11)\"\n\"BSOptionValue(B14,B4,B5,B6,B8,B11,B12)\"\n\"BSOptionISDGoalSeekNR(B14,B4,B5,B6,B8,B11,B17)\"\n\"H17\"\n\"H4\"\n\"H13\"\n\"(LN($B$4/$B$5)+($B$6-$B$8+0.5*D22^2)*$B$11)/(D22*SQRT($B$11))\"\n\"NORMSDIST(D24)\"\n\"(LN($B$4/$B$5)+($B$6-$B$8-0.5*D22^2)*$B$11)/(D22*SQRT($B$11))\"\n\"$H$6*D25-$H$7*D28\"\n\"PDFmoment(1,$H$14:$H$30,$B$14:$B$30)\"\n\"PDFmoment(1,$H$14:$H$30,$J$14:$J$30)\"\n\"J14\"\n\"H14\"\n\"PDFnonneg(F14:F32)\"\n\"PDFmoment(2,$H$14:$H$30,$B$14:$B$30)\"\n\"PDFmoment(2,$H$14:$H$30,$J$14:$J$30)\"\n\"PDFmoment(3,$H$14:$H$30,$B$14:$B$30)\"\n\"PDFmoment(3,$H$14:$H$30,$J$14:$J$30)\"\n\"PDFmodes(F14:F32)\"\n\"PDFmoment(4,$H$14:$H$30,$B$14:$B$30)\"\n\"PDFmoment(4,$H$14:$H$30,$J$14:$J$30)\"\n\"SUM(F14:F30)\"\n\"(A14-($B$4-A14))/SQRT($B$4)\"\n\"COMBIN($B$4,A14)*(0.5^$B$4)\"\n\"1+$B$6*(B14^3-3*B14)/6+($B$7-3)*(B14^4-6*B14^2+3)/24+($B$6^2)*(B14^6-15*B14^4+45*B14^2-15)/72\"\n\"E14*D14\"\n\"F14/$F$10\"\n\"(B14-$H$4)/SQRT($H$5)\"\n\"B14\"\n\"EXP(-D37*D41)*SUM(J49:J65)\"\n\"EdgeworthEuroOptionValue(1,D35,D36,D37,D38,D41,D42,B6,B7,B4)\"\n\"BSOptionValue(1,D35,D36,D37,D38,D41,D42)\"\n\"D40-D39\"\n\"D37-D38-0.5*D42^2\"\n\"D37-D38-LN(SUM(B49:B65))/D41\"\n\"H14*EXP($D$42*SQRT($D$41)*J14)\"\n\"J14\"\n\"$D$35*EXP($D$45*$D$41+D49*$D$42*SQRT($D$41))\"\n\"MAX(E49-$D$36,0)\"\n\"H14\"\n\"F49*H49\"\n\"BSOptionValue(J4,D4,D5,D6,D8,D11,D12)\"\n\"EdgeworthEuroOptionValue(J4,D4,D5,D6,D8,D11,D12,D14,D15,J6)\"\n\"D10-D9\"\n\"BSOptionISDGoalSeekNR(J4,D4,D5,D6,D8,D11,J10)\"\n\"BSOptionValue(J4,D4,D5,D6,D8,D11,J12)\"\n\"D5*EXP(-(D6-D8)*D11)\"\n\"$B$22*EXP(D24*$D$12*SQRT($D$11))\"\n\"BSOptionValue($J$4,$D$4,E24,$D$6,$D$8,$D$11,$D$12)\"\n\"EdgeworthEuroOptionValue($J$4,$D$4,E24,$D$6,$D$8,$D$11,$D$12,$D$14,$D$15,$J$6)\"\n\"$D$12\"\n\"BSOptionISDGoalSeekNR($J$4,$D$4,E24,$D$6,$D$8,$D$11,G24)\"\n\"B22*EXP(B24*D12*SQRT(D11))\"\n\"BSOptionValue(J4,D4,B26,D6,D8,D11,D12)\"\n\"EdgeworthEuroOptionValue(J4,D4,B26,D6,D8,D11,D12,D14,D15,J6)\"\n\"BSOptionISDGoalSeekNR(J4,D4,B26,D6,D8,D11,B30)\"\n\"BSOptionValue(J4,D4,B26,D6,D8,D11,B32)\"\n\"TRANSPOSE(MAvec(B11:B34,D3))\"\n\"TRANSPOSE(ESvec(B11:B34,F5,F3))\"\n\"TRANSPOSE(Holtvec(I11:I34,I6,I7,I3,I4))\"\n\"TRANSPOSE(Wintervec(I11:I34,I6,I7,L4:L15,I3,I4,I5))\"\n\"TRANSPOSE(Wintervec(O11:O34,O6,O7,R4:R15,O3,O4,O5))\"\n\"$F$5\"\n\"(1-$F$3)^(A$66-A42)\"\n\"$I$6\"\n\"$I$7\"\n\"$F$3*(1-$F$3)^(A$66-A43)\"\n\"$I$3*G43+(1-$I$3)*(H42+I42)\"\n\"$I$4*(H43-H42)+(1-$I$4)*I42\"\n\"H42+I42\"\n\"SUMPRODUCT(E42:E66,D42:D66)\"\n\"ACFk($D$34:$D$133,A7)\"\n\"PACFk($D$34:$D$133,A7)\"\n\"ACFk($G$34:$G$133,A7)\"\n\"PACFk($G$34:$G$133,A7)\"\n\"ACFk($N$34:$N$133,A7)\"\n\"PACFk($N$34:$N$133,A7)\"\n\"TRANSPOSE(ARpvec(D34:D133,D23))\"\n\"ARMAcnst0(G34:G133,G23,G24)\"\n\"TRANSPOSE(MAqvec0(G34:G133,G24))\"\n\"TRANSPOSE(ARMApqvec0(N34:N133,N23,N24))\"\n\"ARMArss(D34:D133,D23,D24,D26,D27,0)\"\n\"ARMArss(G34:G133,G23,G24,G26,0,G27:G28)\"\n\"SUMSQ(I34:I133)\"\n\"ARMArss(N34:N133,N23,N24,N26,N27,N28)\"\n\"G34-($I$26+$I$27*I33+$I$28*I32)\"\n\"N35-($P$26+$P$27*N34+$P$28*P34)\"\n\"CubicSplineValuey(E2,B8:B27,C8:C27)\"\n\"CubicBSplineValuei(I2,I3,H9:I18)\"\n\"TRANSPOSE(CubicSplinezvec(B8:B27,C8:C27))\"\n\"CubicSplinevvec(B8:B27,C8:C27)\"\n\"CubicSplineValuey(B31,$B$8:$B$27,$C$8:$C$27)\"\n\"CubicSplineTmat(B8:B27)\"\n\"MMULT(F29:W29,MINVERSE(F31:W48))\"\n\"B8\"\n\"C8\"\n\"Eigenvaluesevec(B3:I10,B26)\"\n\"EigenvectorsEmat(B3:I10,B26)\"\n\"IF(AND(A5>=0,A5<10000),A5*0.08,IF(AND(A5>=10000,A5<20000),A5*0.105,A5*0.12))\"\n\"Commission(A13)\"\n\"Commission1(A14,$D$5:$E$7)\"\n\"D4*D16*G9-D5*D15*G12\"\n\"D4*D16*(G9-1)-D5*D15*(G12-1)\"\n\"BSCallValue(D4,D5,D6,D8,D12,D13)\"\n\"BSOptValue(-1,D4,D5,D6,D8,D12,D13)\"\n\"(LN(D4/D5)+(D6-D8+0.5*D13^2)*D12)/(D13*SQRT(D12))\"\n\"NORMSDIST(G8)\"\n\"G8-D13*SQRT(D12)\"\n\"D11-D10\"\n\"EXP(-D6*D12)\"\n\"EXP(-D8*D12)\"\n\"B5-$D$10\"\n\"A5*B5\"\n\"A5*C5^2\"\n\"SUM(D5:D9)\"\n\"SUM(E5:E9)\"\n\"SQRT(E11)\"\n\"ExpVal(B5:B9,A5:A9)\"\n\"WVariance(B5:B9,A5:A9)\"\n\"StdDev(B5:B9,A5:A9)\"\n\"ExpVal(B5:B8,A5:A9)\"\n\"1/3\"\n\"SUMPRODUCT(C5:C7,E5:E7)\"\n\"SQRT(G17)\"\n\"SUM(E5:E7)\"\n\"C11\"\n\"C12\"\n\"C10*VLOOKUP(C$14,lookup,3,FALSE)*VLOOKUP( $B15,lookup,3,FALSE)\"\n\"MMULT(TRANSPOSE(E5:E7),MMULT(C15:E17,E5:E7))\"\n\"COUNT($A$9:$A$128)\"\n\"AVERAGE($A$9:$A$128)\"\n\"VAR($A$9:$A$128)\"\n\"DecilesMat(A9:A128)\"\n\"ZNplotmat(dvec)\"\n\"TRANSPOSE(C3:C5)\"\n\"ArrayDemo1(C7:E9,C11:E13)\"\n\"ArrayDemo2a(C3:C5,C7:E9)\"\n\"ArrayDemo2b(C3:C5,C7:E9)\"\n\"ArrayDemo3(C3:C5)\"\n\"ArrayDemo3(G3:I3)\"\n\"ArrayDemo4(C7:E9)\"\n\"ArrayDemo5(C7:E9)\"\n\"D12/D15\"\n\"EXP(D6*G6)\"\n\"EXP((D6-D8)*G6)\"\n\"EXP(D13*SQRT(G6))\"\n\"1/G9\"\n\"(G8-G10)/(G9-G10)\"\n\"D11-D10\"\n\"1-G11\"\n\"B58\"\n\"BinOptVal(D16,1,D4,D5,D6,D8,D12,D13,D15)\"\n\"BinOptVal(D16,2,D4,D5,D6,D8,D12,D13,D15)\"\n\"IF(D16=1,\"\"Call\"\",\"\"Put\"\")\"\n\"BSOptValue(D16,D4,D5,D6,D8,D12,D13)\"\n\"IF($A21<C$20,$G$10*OFFSET(C21,0,-1),IF($A21=C$20,$G$9*OFFSET(C21,1,-1),\"\"\"\"))\"\n\"$D$4\"\n\"MAX($D$16*(K21-$D$5),0)\"\n\"IF($A49<=B$48,($G$11*C48+$G$12*C49)/$G$7,\"\"\"\")\"\n\"K35\"\n\"COMBIN($D$15,A49)*$G$11^A49*$G$12^($D$15-A49)\"\n\"M49*K49\"\n\"SUM(M49:M58)\"\n\"SUM(N49:N58)*EXP(-D6*D12)\"\n\"B6\"\n\"B7+C6\"\n\"60\"\n\"SUM(B6:B11)\"\n\"B6+NPV($C$17,B7:B11)\"\n\"IRR(B6:B11,$C$17)\"\n\"PayBack(cflow1)\"\n\"PayBack(cflow2)\"\n\"NetPV(cflow1,C17)\"\n\"FACT(B6)\"\n\"AVERAGE(D10:D71)\"\n\"STDEV(D10:D71)\"\n\"FREQUENCY(E10:E71,G5:G14)\"\n\"H5/$H$17\"\n\"I5\"\n\"MAX(D10:D71)\"\n\"I6+K5\"\n\"MIN(D10:D71)\"\n\"D3\"\n\"LN(1+D10)\"\n\"SUM(H5:H15)\"\n\"QUARTILE(LnReturns,G21)\"\n\"0.25*G21\"\n\"1-SUM(I11:I12)\"\n\"D10\"\n\"E10\"\n\"C10*VLOOKUP(C$14,$B$5:$D$7,3,FALSE)*VLOOKUP($B15,$B$5:$D$7,3,FALSE)\"\n\"SUMPRODUCT($C$5:$C$7,I10:I12)\"\n\"SQRT(MMULT(MMULT(TRANSPOSE($I$10:$I$12),$C$15:$E$17),$I$10:$I$12))\"\n\"SQRT(MMULT(MMULT(TRANSPOSE($C$22:$C$24),$C$15:$E$17),$C$22:$C$24))\"\n\"-3/6032\"\n\"IF($AE2=\"\"IRP\"\",\"\"X\"\",IF($AF2=\"\"IRP\"\",\"\"X\"\",IF($AG2=\"\"IRP\"\",\"\"X\"\",IF($AH2=\"\"IRP\"\",\"\"X\"\",IF($AI2=\"\"IRP\"\",\"\"X\"\",IF($AJ2=\"\"IRP\"\",\"\"X\"\",IF($AK2=\"\"IRP\"\",\"\"X\"\",IF($AL2=\"\"IRP\"\",\"\"X\"\",\"\"\"\"))))))))\"\n\"IF(AO31=\"\"IRP\"\",\"\"X\"\",IF(AP31=\"\"IRP\"\",\"\"X\"\",IF(AQ31=\"\"IRP\"\",\"\"X\"\",IF(AR31=\"\"IRP\"\",\"\"X\"\",IF(AS31=\"\"IRP\"\",\"\"X\"\",IF(AT31=\"\"IRP\"\",\"\"X\"\",IF(AU31=\"\"IRP\"\",\"\"X\"\",IF(AV31=\"\"IRP\"\",\"\"X\"\",\"\"\"\"))))))))\"\n\"IF($AE87=\"\"IRP\"\",\"\"X\"\",IF($AF87=\"\"IRP\"\",\"\"X\"\",IF($AG87=\"\"IRP\"\",\"\"X\"\",IF($AH87=\"\"IRP\"\",\"\"X\"\",IF($AI87=\"\"IRP\"\",\"\"X\"\",IF($AJ87=\"\"IRP\"\",\"\"X\"\",IF($AM87=\"\"IRP\"\",\"\"X\"\",IF($AL87=\"\"IRP\"\",\"\"X\"\",\"\"\"\"))))))))\"\n\"SUM(H46:H120)\"\n\"SUM(C2:C179)\"\n\"SUM(C3:C40)\"\n\"SUM(C3:C42)\"\n\"SUM(C35:G35)\"\n\"SUM(C35:C40)\"\n\"SUM(C43:C47)\"\n\"D53*E53\"\n\"bchmk2!L24\"\n\"IF(N8>=65,\"\"You may be an 'Energy Star', check www.epa.gov/building/label\"\",\"\"\"\")\"\n\"IF(bchmk2!Q7=1,\"\"\"\",\"\"Warning: Input data problem suspected: check values, units, etc.\"\")\"\n\"+(H14+I14)/B14\"\n\"+(H14+I14)/B14\"\n\"IF(bchmk2!Q$7=1,bchmk2!N$19,\"\"required data missing\"\")\"\n\"IF(bchmk2!Q$7=1,bchmk2!N$19,\"\"required data missing\"\")\"\n\"+bchmk2!D22\"\n\"IF(($K$16-L20>0),(($K$16-L20)/$K$16),\"\"NA\"\")\"\n\"IF(($K$16-L20)>0,($B$14*($K$16-L20)),\"\"NA\"\")\"\n\"+(B11>999)*(D11>300)*(G11>=0)*(I11>=0)*(J11>399)\"\n\"'CO-SchoolTool'!B14\"\n\"'CO-SchoolTool'!C14\"\n\"IF('CO-SchoolTool'!F14=\"\"y\"\",1,0)\"\n\"IF('CO-SchoolTool'!G14=\"\"y\"\",1,0)\"\n\"+'CO-SchoolTool'!H14\"\n\"100*'CO-SchoolTool'!H14/'CO-SchoolTool'!C14\"\n\"IF(I5=6,\"\"not used\"\",\"\"\"\")\"\n\"IF(I5=9,\"\"not used\"\",\"\"\"\")\"\n\"+'CO-SchoolTool'!C14*10.3\"\n\"+'CO-SchoolTool'!D14*100\"\n\"+R15/(R15+S15)\"\n\"R15/'CO-SchoolTool'!B14\"\n\"S15/'CO-SchoolTool'!B14\"\n\"+'CO-SchoolTool'!N8\"\n\"+'CO-SchoolTool'!K16\"\n\"+'CO-SchoolTool'!K16\"\n\"+(O100+O101)/2\"\n\"100*'CO-SchoolTool'!H14/R15\"\n\"+(O104+O105)/2\"\n\"+(E$17-D20)/E$17\"\n\"+'CO-SchoolTool'!$B$14*($E$17-D20)\"\n\"+(O102+O103)/2\"\n\"100*('CO-SchoolTool'!H14+'CO-SchoolTool'!I14)/(R15+S15)\"\n\"+(O100+O101)/2\"\n\"+(O98+O99)/2\"\n\"+(O96+O97)/2\"\n\"+(L19>=O109)*5+(L19<O109)*(L19>=O108)*10+(L19<O108)*(L19>=O107)*15+(L19<O107)*(L19>=O106)*20+(L19<O106)*(L19>=O105)*25+(L19<O105)*(L19>=O104)*30+(L19<O104)*(L19>=O103)*35+(L19<O103)*(L19>=O102)*40+(L19<O102)*(L19>=O101)*45+(L19<O101)*(L19>=O100)*50+(L19<O100)*(L19>=O99)*55+(L19<O99)*(L19>=O98)*60+(L19<O98)*(L19>=O97)*65+(L19<O97)*(L19>=O96)*70+(L19<O96)*(L19>=O95)*75+(L19<O95)*(L19>=O94)*80+(L19<O94)*(L19>=O93)*85+(L19<O93)*(L19>=O92)*90+(L19<O92)*95\"\n\"+G11\"\n\"+I11\"\n\"+N56 + N57 * C67 +N58 * D67 + N59 * F67 + N60 * G67 + N61 * H67 + N62 * I67\"\n\"+B57 + 2*C57*C$67   +         2*D57*D$67  +          2*F57*F$67  +          2*G57*G$67  +            2*H57*H$67  +            2*I57*I$67\"\n\"+             C58*C$67*C$67 +  2*D58*C$67*D$67 +  2*F58*C$67*F$67 +   2*G58*C$67*G$67   +  2*H58*C$67*H$67   +  2*I58*C$67*I$67\"\n\"+D59*D$67*D$67 +  2*F59*D$67*F$67  +  2*G59*D$67*G$67   +  2*H59*D$67*H$67   +  2*I59*D$67*I$67\"\n\"+F60*F$67*F$67 +  2*G60*F$67*G$67 +  2*H60*F$67*H$67 +  2*I60*F$67*I$67\"\n\"+G61*G$67*G$67 +  2*H61*G$67*H$67 +  2*I61*G$67*I$67\"\n\"+                                                                                                                                      H62*H$67*H$67 +  2*I62*H$67*I$67\"\n\"+                                                                                                                                                                     I63*I$67*I$67\"\n\"+SUM(A81:A87)\"\n\"+SQRT($N$64+$A$88)\"\n\"+B91*C91\"\n\"+$M$70+D91\"\n\"+(F91)\"\n\"100-2.5\"\n\"+R21\"\n\"+G91*$L$91/100\"\n\"+H91\"\n\"100-7.5\"\n\"100-12.5\"\n\"100-17.5\"\n\"100-22.5\"\n\"100-27.5\"\n\"+(O96+O97)/2\"\n\"100-32.5\"\n\"100-37.5\"\n\"100-42.5\"\n\"+'CO-SchoolTool'!$K$16\"\n\"100-47.5\"\n\"100-52.5\"\n\"100-57.5\"\n\"100-62.5\"\n\"100-67.5\"\n\"100-72.5\"\n\"100-77.5\"\n\"100-82.5\"\n\"100-87.5\"\n\"100-92.5\"\n\"100-97.5\"\n\"+'A CollaborativeProcesses'!B6\"\n\"CONCATENATE(A$6,A7,C7)\"\n\"LOOKUP(E7,CriteriaLookupTable!A2:B127)\"\n\"+'A CollaborativeProcesses'!B8\"\n\"+'A CollaborativeProcesses'!B10\"\n\"+C7+C8+C9\"\n\"AVERAGE(C7,C8,C9)\"\n\"VLOOKUP(C11,CriteriaLookupTable!A$129:B$134,2)\"\n\"+B.IntPlanFcstProcesses!B6\"\n\"CONCATENATE(A$12,A13,C13)\"\n\"+B.IntPlanFcstProcesses!B8\"\n\"+B.IntPlanFcstProcesses!B10\"\n\"+B.IntPlanFcstProcesses!B12\"\n\"AVERAGE(C13,C14,C15)\"\n\"+'C Replenishment'!B6\"\n\"CONCATENATE(A$19,A20,C20)\"\n\"+'C Replenishment'!B6\"\n\"+'C Replenishment'!B10\"\n\"+'C Replenishment'!B12\"\n\"+'C Replenishment'!B14\"\n\"+'C Replenishment'!B16\"\n\"+'C Replenishment'!B18\"\n\"SUM(C20:C27)\"\n\"AVERAGE(C20,C21,C22,C23,C24,C25,C26,C27)\"\n\"+'D SupplyChainMgt'!B6\"\n\"CONCATENATE(A$30,A31,C31)\"\n\"+'D SupplyChainMgt'!B8\"\n\"+'D SupplyChainMgt'!B10\"\n\"+'D SupplyChainMgt'!B12\"\n\"+'D SupplyChainMgt'!B14\"\n\"+'D SupplyChainMgt'!B16\"\n\"SUM(C31:C36)\"\n\"AVERAGE(C31,C32,C33,C34,C35,C36)\"\n\"+C37+C28+C17+C10\"\n\"+C39/21\"\n\"'Total Scorecard'!$C$2\"\n\"'Total Scorecard'!$C$3\"\n\"'Total Scorecard'!$C$4\"\n\"'Total Scorecard'!$C$2\"\n\"'Total Scorecard'!$C$3\"\n\"'Total Scorecard'!$C$4\"\n\"'Total Scorecard'!$C$2\"\n\"'Total Scorecard'!$C$3\"\n\"'Total Scorecard'!$C$4\"\n\"'Total Scorecard'!$C$2\"\n\"'Total Scorecard'!$C$3\"\n\"'Total Scorecard'!$C$4\"\n\"'Total Scorecard'!C$2\"\n\"'Total Scorecard'!C$3\"\n\"'Total Scorecard'!C$4\"\n\"'Total Scorecard'!E7\"\n\"'Total Scorecard'!D7\"\n\"'Total Scorecard'!E13\"\n\"'Total Scorecard'!D13\"\n\"'Total Scorecard'!E20\"\n\"'Total Scorecard'!D20\"\n\"'Total Scorecard'!E31\"\n\"'Total Scorecard'!D31\"\n\"SUM(E4:E67)\"\n\"SUM(E73:E86)\"\n\"SUM(E91:E125)\"\n\"IF(C6=\"\"yes\"\",(1*F6),IF(C6=\"\"no\"\",(0*F6),\"\"\"\"))\"\n\"IF(SUM(F6:F10)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G6:G10)\"\n\"IF(SUM(F16:F22)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G16:G22)\"\n\"SUM(F28+F29+F30+F31+F32+F33+F34+F35+F36+F37+F38)\"\n\"SUM(G28:G38)\"\n\"IF(C44=\"\"yes\"\",(1*F44),IF(C44=\"\"no\"\",(0*F44),IF(C44=\"\"small extent\"\",(0.33*F44),IF(C44=\"\"large extent\"\",(0.67*F44),\"\"\"\"))))\"\n\"SUM(F44+F58+F81+F83)\"\n\"SUM(G44:G83)\"\n\"IF(OR(H10=\"\"error\"\",H27=\"\"error\"\",H43=\"\"error\"\",H66=\"\"error\"\",H78=\"\"error\"\",H55=\"\"error\"\",H90=\"\"error\"\",H101=\"\"error\"\",H111=\"\"error\"\"),\"\"error\"\",(2*H10+H27+H43+H66+H78+H55+H90+H101+H111)/10)\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.9,\"\"below basic level\"\",IF(H6<1.8,\"\"basic level\"\",IF(H6<3.4,\"\"intermediate level\"\",\"\"comprehensive level\"\"))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(H6=\"\"error\"\",\"\"error\"\",IF(H6<0.8,\"\"move to minimal level\"\",IF(H6<1.8,\"\"move to intermediate level\"\", IF(AND(H6>1.8, OR(F45=\"\"n\"\",F80=\"\"n\"\")),\"\"add/integrate CAM\"\",IF(AND(H6>1.8, OR(F57=\"\"n\"\",F92=\"\"n\"\")),\"\"add/integrate PDM\"\",IF(AND(H6>1.8, F103=\"\"n\"\"),\"\"add/integrate catalog facility\"\",\"\"none identified\"\"))))))\"\n\"IF(OR(H11=\"\"error\"\",H16=\"\"error\"\",H20=\"\"error\"\"),\"\"error\"\",(H11+H16)*H20/10)\"\n\"IF(OR(G12=\"\"error\"\",G13=\"\"error\"\",G14=\"\"error\"\",G15=\"\"error\"\"),\"\"error\"\",IF(G12=0,0,IF(G12=1,SUM(G13:G15)*5/6)))\"\n\"IF(F12=\"\"y\"\",1,IF(F12=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(F14=\"\"y\"\",2,IF(F14=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(F15=\"\"y\"\",3,IF(F15=\"\"n\"\",0,\"\"error\"\"))\"\n\"IF(OR(G17=\"\"error\"\",G18=\"\"error\"\",G19=\"\"error\"\"),\"\"error\"\",SUM(G17:G19))\"\n\"IF(OR(G21=\"\"error\"\",G22=\"\"error\"\",G23=\"\"error\"\",G24=\"\"error\"\",G25=\"\"error\"\"),\"\"error\"\",SUM(G21:G25)/5)\"\n\"IF(F21=\"\"\"\",\"\"error\"\",(IF(F21<10,1,IF(F21<20,2,IF(F21<30,3,IF(F21<50,4,IF(F21<=100,5,\"\"error\"\")))))))\"\n\"IF(F29=\"\"n\"\",0,IF(OR(H28=\"\"error\"\",H34=\"\"error\"\"),\"\"error\"\",(H28*H34)/5))\"\n\"IF(OR(G31=\"\"error\"\",G32=\"\"error\"\",G33=\"\"error\"\"),\"\"error\"\",(G31*G32*G33)/4)\"\n\"IF(F29=\"\"n\"\",0,IF(AND(F29=\"\"y\"\",F30=\"\"y\"\",F31=\"\"n\"\"),2,IF(AND(F29=\"\"y\"\",F30=\"\"n\"\",F31=\"\"y\"\"),3,IF(AND(F29=\"\"y\"\",F30=\"\"y\"\",F31=\"\"y\"\"),5,\"\"error\"\"))))\"\n\"IF(F32=\"\"y\"\",2,IF(F32=\"\"n\"\",1,\"\"error\"\"))\"\n\"IF(F29=\"\"n\"\",0,IF(OR(G35=\"\"error\"\",G36=\"\"error\"\",G37=\"\"error\"\",G38=\"\"error\"\",G39=\"\"error\"\",G40=\"\"error\"\",G41=\"\"error\"\"),\"\"error\"\",5*SUM(G35:G41)/31))\"\n\"IF(F37=\"\"\"\",\"\"error\"\",(IF(F37<0,\"\"error\"\",(IF(F37<10,5,IF(F37<20,4,IF(F37<30,3,IF(F37<50,2,IF(F37<=100,1,\"\"error\"\")))))))))\"\n\"IF(F39=\"\"y\"\",3,IF(OR(F39=\"\"n\"\",F39=\"\"\"\"),0,\"\"error\"\"))\"\n\"IF(F41=\"\"\"\",\"\"error\"\",IF(AND(F41>0,F41<25),MIN(F41,5),\"\"error\"\"))\"\n\"IF(F45=\"\"n\"\",0,IF(OR(H44=\"\"error\"\",H49=\"\"error\"\"),\"\"error\"\",(H44*H49)/5))\"\n\"IF(OR(F45=\"\"n\"\",F45=\"\"\"\"),0,IF(AND(F46=\"\"y\"\",F47=\"\"n\"\",F48=\"\"n\"\"),1,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"y\"\",F48=\"\"n\"\"),2,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"n\"\",F48=\"\"y\"\"),3,IF(AND(OR(F46=\"\"y\"\",F46=\"\"n\"\",F46=\"\"\"\"),F47=\"\"y\"\",F48=\"\"y\"\"),5,\"\"error\"\")))))\"\n\"IF(OR(F45=\"\"n\"\",F45=\"\"\"\"),0,IF(OR(G50=\"\"error\"\",G51=\"\"error\"\",G52=\"\"error\"\",G53=\"\"error\"\",G49),\"\"error\"\",SUM(G50:G53)/4))\"\n\"IF(OR(F57=\"\"n\"\",F57=\"\"\"\"),0,IF(OR(G62=\"\"error\"\",G63=\"\"error\"\",G64=\"\"error\"\"),\"\"error\"\",(G62+G63+G64)/3))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(H67=\"\"error\"\",H73=\"\"error\"\"),\"\"error\"\",IF(F29=\"\"n\"\",0,(H67*H73)/5)))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(G68=\"\"error\"\",G69=\"\"error\"\",G70=\"\"error\"\",G71=\"\"error\"\",G72=\"\"error\"\"),\"\"error\"\",(G68*G69*G70*G71*G72/1.0125)))\"\n\"IF(F69=\"\"y\"\",1.5,IF(F69=\"\"n\"\",1,\"\"error\"\"))\"\n\"IF(OR(F29=\"\"n\"\",F68=\"\"n\"\"),0,IF(OR(G74=\"\"error\"\",G75=\"\"error\"\",G76=\"\"error\"\"),\"\"error\"\",(G74+G75+G76)/3))\"\n\"IF(F74=\"\"\"\",\"\"error\"\",IF(F74<20,1,IF(F74<40,2,IF(F74<60,3,IF(F74<80,4,IF(F74<=100,5,\"\"error\"\"))))))\"\n\"IF(OR(F45=\"\"n\"\",F80=\"\"n\"\"),0,IF(OR(H79=\"\"error\"\",H85=\"\"error\"\"),\"\"error\"\",(H79*H85)/5))\"\n\"IF(OR(F45=\"\"n\"\",F80=\"\"n\"\"),0,IF(G86=\"\"error\"\",\"\"error\"\",(G86+G87+G88)/3))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(OR(H91=\"\"error\"\",H96=\"\"error\"\"),\"\"error\"\",(H91*H96)/5))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(OR(G92=\"\"error\"\",G93=\"\"error\"\",G94=\"\"error\"\",G95=\"\"error\"\"),\"\"error\"\",(G92*G93*G94*G95*5/6)))\"\n\"IF(OR(F57=\"\"n\"\",F92=\"\"n\"\"),0,IF(G97=\"\"error\"\",\"\"error\"\",(G97+G98+G99)/3))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(OR(H102=\"\"error\"\",H106=\"\"error\"\"),\"\"error\"\",(H102*H106)/5))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(AND(F104=\"\"y\"\",F105=\"\"n\"\"),3,IF(AND(OR(F104=\"\"n\"\",F104=\"\"y\"\"),F105=\"\"y\"\"),5,\"\"error\"\")))\"\n\"IF(OR(F103=\"\"n\"\",F103=\"\"\"\"),0,IF(OR(G107=\"\"error\"\",G108=\"\"error\"\",G109=\"\"error\"\"),\"\"error\"\",SUM(G107:G109)/3))\"\n\"IF(OR(F113=\"\"n\"\",F113=\"\"\"\"),0,IF(H112=\"\"error\"\",\"\"error\"\",(H112*H116)/5))\"\n\"IF(OR(F113=\"\"n\"\",F113=\"\"\"\"),0,IF(OR(G117=\"\"error\"\",G118=\"\"error\"\",G119=\"\"error\"\",G120=\"\"error\"\",G121=\"\"error\"\"),\"\"error\"\",SUM(G117:G121)/5))\"\n\"SUM(M43:S43)\"\n\"(M45*$M$43/100)+(N45*$N$43/100)+(O45*$O$43/100)+(P45*$P$43/100)+(Q45*$Q$43/100)+(R45*$R$43/100) +(S45*$S$43/100)\"\n\"(M49*$M$44/100)+(N49*$N$44/100)+(O49*$O$44/100)+(P49*$P$44/100)+(Q49*$Q$44/100)+(R49*$R$44/100) +(S49*$S$44/100)\"\n\"SUM(D6:H6)\"\n\"I6+O6\"\n\"SUM(D6:D131)\"\n\"+I132+O132\"\n\"SUM(D134:D164)\"\n\"SUM(D167:D239)\"\n\"SUM(D242:D308)\"\n\"SUM(D311:D370)\"\n\"SUM(D373:D379)\"\n\"SUM(D382:D383)\"\n\"+I386\"\n\"SUM(D389:D391)\"\n\"SUM(D392,D387,D384,D380,D371,D309,D240,D165,D132)\"\n\"SUM(R6:R392)\"\n\"SUM(D6:H6)\"\n\"SUM(O6,I6)\"\n\"SUM(D6:D131)\"\n\"+I132+O132\"\n\"SUM(D134:D162)\"\n\"SUM(D165:D241)\"\n\"SUM(D244:D307)\"\n\"SUM(D376:D383)\"\n\"SUM(D386:D387)\"\n\"I390+O390\"\n\"+I390\"\n\"SUM(D393:D395)\"\n\"SUM(D396,D391,D388,D384,D374,D308,D242,D163,D132)\"\n\"SUM(R6:R396)\"\n\"B50\"\n\"CONCATENATE(\"\"M-\"\",C85)\"\n\"CONCATENATE(\"\"M-\"\",C12)\"\n\"CONCATENATE(\"\"M-\"\",C57)\"\n\"CONCATENATE(\"\"M-\"\",C135)\"\n\"CONCATENATE(\"\"M-\"\",C16)\"\n\"CONCATENATE(\"\"M-\"\",C13)\"\n\"SUM(E13/1.22)\"\n\"SUM(F13*0.94)\"\n\"SUM(F16*0.9)\"\n\"SUM(F22*0.8)\"\n\"SUM(C4:C12)\"\n\"2404310/1000\"\n\"2003286/1000\"\n\"2997988/1000\"\n\"3000000/1000\"\n\"2999998/1000\"\n\"2867270/1000\"\n\"2999644/1000\"\n\"1959013/1000\"\n\"1618084/1000\"\n\"SUM(C14:C23)\"\n\"SUM(C25:C30)\"\n\"C3+C13+C24\"\n\"COUNTIF(E4:E30,\"\"T\"\")\"\n\"COUNTIF(E4:E30,\"\"T\"\")\"\n\"COUNTIF(E4:E30,\"\"FC\"\")\"\n\"COUNTIF(E4:E30,\"\"FC\"\")\"\n\"COUNTIF(E4:E30,\"\"H\"\")\"\n\"COUNTIF(E4:E30,\"\"H\"\")\"\n\"COUNTIF(E4:E30,\"\"R\"\")\"\n\"COUNTIF(E4:E30,\"\"R\"\")\"\n\"COUNTIF(E4:E30,\"\"O\"\")\"\n\"COUNTIF(E4:E30,\"\"O\"\")\"\n\"SUM(B38:B42)\"\n\"SUM(B38:B42)\"\n\"+SUM(F5:F14)\"\n\"+SUM(F19:F56)\"\n\"+SUM(F61:F77)\"\n\"SUM(F82:F108)\"\n\"SUM(F113:F120)\"\n\"SUM(F125:F131)\"\n\"+F133+F122+F110+F79+F58+F16\"\n\"+SUM(F5:F10)\"\n\"+SUM(F16:F53)\"\n\"+SUM(F57:F67)\"\n\"+F12+F55+F69+F78\"\n\"-5618\"\n\"-1242.53\"\n\"-26809\"\n\"-26809\"\n\"-5618\"\n\"-1242.53\"\n\"SUM(F4:F448)\"\n\"-6831\"\n\"-7710\"\n\"-6000\"\n\"-6831\"\n\"-7710\"\n\"-6000\"\n\"SUM(F4:F519)\"\n\"+E3+4000\"\n\"+E3+8000\"\n\"+E3+2000\"\n\"ROUND(E3*0.827,0)\"\n\"E11+4000\"\n\"E11+8000\"\n\"E11+2000\"\n\"D19*5500\"\n\"E19\"\n\"D20*4500\"\n\"D22*5000\"\n\"D99*4300\"\n\"D100*2800\"\n\"ROUND(E155*0.83,0)\"\n\"($B$11*A16)/($B$12+A16)\"\n\"($C$11*A16)/($C$12+A16)\"\n\"1/A16\"\n\"C5*$C$12\"\n\"INT(RAND()*35 + 1)\"\n\"-140*B2+5000\"\n\"RAND()\"\n\"NORMINV(D2,0,144)\"\n\"C2+E2\"\n\"book_price*books_sold*rights\"\n\"Cost_per_book*books_sold\"\n\"publish_cost+salary\"\n\"revenue-total_cost\"\n\"IF(profit>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"IF(approx_books_sold<0,\"\"Book Price too high!\"\",\"\"\"\")\"\n\"approx_demand_price*approx_demand_slope+approx_demand_intercept\"\n\"approx_books_sold*approx_demand_price*rights\"\n\"Cost_per_book*approx_books_sold\"\n\"approx_publish_cost+salary\"\n\"approx_revenue-approx_total_cost\"\n\"IF(profit>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"IF(approx_books_sold<0,\"\"Book Price too high!\"\",\"\"\"\")\"\n\"approx_demand_price*approx_demand_slope+approx_demand_intercept\"\n\"VLOOKUP(approx_books_sold,Publication_Costs!B5:D10,3)\"\n\"approx_books_sold*approx_demand_price*rights\"\n\"pubcost_per_book*approx_books_sold\"\n\"approx_publish_cost+salary\"\n\"approx_revenue-approx_total_cost\"\n\"IF(profit>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"INT(RAND()*35 + 1)\"\n\"-140*B2+5000\"\n\"RAND()\"\n\"NORMINV(D2,0,144)\"\n\"C2+E2\"\n\"SLOPE(I2:I31,H2:H31)\"\n\"INTERCEPT(I2:I31,H2:H31)\"\n\"'Cost vs. Demand'!L6\"\n\"'Cost vs. Demand'!L5\"\n\"IF(dm_books_sold<0,\"\"Book Price too high!\"\",\"\"\"\")\"\n\"book_price*demand_slope+demand_intercept\"\n\"VLOOKUP(dm_books_sold,Publication_Costs!B5:D10,3)\"\n\"dm_books_sold*book_price*rights\"\n\"pubcost_per_book*dm_books_sold\"\n\"publish_cost+salary\"\n\"revenue-total_cost\"\n\"IF(profit>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"SUM(K7:K36)\"\n\"B24+1\"\n\"11288.45+12557.01+10569.33+11018.95+5911.65+5111.8\"\n\"104943.6+40056.4+24712.14+3213.97+6443.96+35374.35+1482.42\"\n\"8912+4576\"\n\"11500+3114\"\n\"76977-3114\"\n\"16000+72499\"\n\"14153.51+1229.63+617+31350.06+29655.11+11051.04\"\n\"64992-34600\"\n\"57500+2100\"\n\"153427.95+47041.49+76113.68+63400.57+47950.2+61575.32+66971.59+8384.71\"\n\"650965+24035\"\n\"200000-24035\"\n\"477.79+1006.68+172.71+3420.55+1902.12+4199.45+4140.27\"\n\"55227+59870-5722+17302+12500\"\n\"125000+29795+27545-16\"\n\"48226.69+19701.59+19767.3+18610.75+20054.31\"\n\"31692+15169\"\n\"28750*3\"\n\"255+1530.92\"\n\"366.48+310.68+219+164.7+498\"\n\"5319.43+4799.78\"\n\"SUM(C5:C88)\"\n\"220184.62+180000\"\n\"56530.9+139334.47+75969.15\"\n\"49419+40000\"\n\"18879.48+20000\"\n\"350153.65+117023.9\"\n\"218043+240000\"\n\"SUM(C93:C98)\"\n\"+C89+D89\"\n\"+E89\"\n\"+C100+C99\"\n\"+E99+E89\"\n\"SUM(B6:B16)\"\n\"$C9/2\"\n\"+P12-C16-C17\"\n\"+J17+J29+J31\"\n\"+C5-C9-C12-C15-C21\"\n\"+L6-$L9-$L11-$L12-$L15-$L21-$L27-($L30/2)\"\n\"+P13-3.125-K15\"\n\"+K6-$L9-$L11-$L12-$L15-$L21-$L27-($L30/2)\"\n\"+P14+3.125-K15\"\n\"+$P$13-$P$11\"\n\"+P15-3.125\"\n\"+$P$14-$P$11\"\n\"+P16+3.125\"\n\"+P$15-3.125+$J$36+$J$37-J16-J19-J22-$J$23-$J$20-$J$28-$J13-(J30/2)\"\n\"+Q$15+$J$36+$J$37-J16-J19-J22-$J$23-$J$20-$J$28-$J13-(J30/2)\"\n\"+P$15-3.125+$J$36+$J$37-J16-J19-J22-$J$23-$J$20-$J$28-$J13-(J30/2)\"\n\"+Q$15+$J$36+$J$37-J16-J19-J22-$J$23-$J$20-$J$28-$J13-(J30/2)\"\n\"+$P$13-$P$11-$K$13-$K$16-$K$19-$K$20-$K$28-($K$30/2)\"\n\"+$P$13-$P$11-$K$13-$K$16-$K$19-$K$20-$K$28-($K$30/2)-3.125\"\n\"+Q21+5.4-0.4\"\n\"+$P$14-$P$11-$K$13-$K16-$K$19-$K$20-$K$28-($K$30/2)\"\n\"+$P$14-$P$11-$K$13-$K16-$K$19-$K$20-$K$28-($K$30/2)+3.125\"\n\"+P10-C13-C19\"\n\"14.8-3.125\"\n\"SUM(B9:B24)\"\n\"+P24-P11-2\"\n\"$C27\"\n\"SUM(B27:B34)\"\n\"+$C36/2\"\n\"+$C37\"\n\"SUM(C36:C37)\"\n\"+B25+B35\"\n\"+B39-B38\"\n\"+B5-B40\"\n\"+J6-J40\"\n\"+K6-K40+3.125\"\n\"+L6-L40-3.125\"\n\"(L6/61)\"\n\"(L11/6)\"\n\"(L13/73)\"\n\"(L29/55)\"\n\"AVERAGE(G6:G33)\"\n\"SUM(L6:L33)/1640\"\n\"(O6/61)\"\n\"(O11/6)\"\n\"(O13/73)\"\n\"(O29/55)\"\n\"AVERAGE(G6:G33)\"\n\"SUM(O6:O33)/1762\"\n\"(M6/8784)\"\n\"AVERAGE(M6:M8)\"\n\"(SUM(M6:M8)/26352)\"\n\"G6*1.15*1000\"\n\"J6*1.15*1000\"\n\"(P6/8784)\"\n\"(P14/8400)\"\n\"AVERAGE(G6:G16)\"\n\"G6*2632\"\n\"K6*2632\"\n\"(J6/8784)\"\n\"(J11/4272)\"\n\"(J13/8400)\"\n\"(J14/6960)\"\n\"AVERAGE(G6:G15)\"\n\"(SUM(J6:J14)/70536)\"\n\"L6/225\"\n\"L7/235\"\n\"L8/145\"\n\"L9/319\"\n\"L10/366\"\n\"L11/285\"\n\"L12/307\"\n\"L14/321\"\n\"L15/234\"\n\"L16/239\"\n\"L19/83\"\n\"L21/294\"\n\"L22/311\"\n\"L23/290\"\n\"L26/286\"\n\"L27/365\"\n\"L29/230\"\n\"AVERAGE(K6:K29)\"\n\"L39/5400\"\n\"L40/5642\"\n\"L41/3480\"\n\"L42/7656\"\n\"L43/8784\"\n\"L44/6840\"\n\"L45/7368\"\n\"L47/7704\"\n\"L48/5616\"\n\"L49/5736\"\n\"L52/1992\"\n\"L55/7464\"\n\"L56/6960\"\n\"L58/7056\"\n\"L59/6864\"\n\"L62/5520\"\n\"SUM(L39:L62)/163586\"\n\"M7/61\"\n\"M9/366\"\n\"M21/5\"\n\"M23/56\"\n\"AVERAGE(G7:G26)\"\n\"SUM(M7:M26)/2684\"\n\"M5/166\"\n\"M6/121\"\n\"M8/366\"\n\"M11/18\"\n\"M17/4\"\n\"M24/165\"\n\"AVERAGE(G5:G26)\"\n\"AVERAGE(N6:N26)\"\n\"AVERAGE(G5:P5)\"\n\"AVERAGE(G5:G13)\"\n\"SUM(M11:Q11)\"\n\"(M46*$M$45/100)+(N46*$N$45/100)+(O46*$O$45/100)+(P46*$P$45/100) +(Q46*$Q$45/100)\"\n\"(M13*ACTIVE!$M$11/100)+(N13*ACTIVE!$N$11/100)+(O13*ACTIVE!$O$11/100)+(P13*ACTIVE!$P$11/100) +(Q13*ACTIVE!$Q$11/100)\"\n\"TIME(10,30,0)\"\n\"G5+TIME(0,F5,0)\"\n\"G7+TIME(0,F7,0)\"\n\"TIME(8,0,0)\"\n\"G5+TIME(0,F5,0)\"\n\"TIME(10,30,0)\"\n\"TIME(13,0,0)\"\n\"TIME(8,0,0)\"\n\"G6+TIME(0,F6,0)\"\n\"TIME(16,0,0)\"\n\"TIME(8,0,0)\"\n\"G5+TIME(0,F5,0)\"\n\"TIME(10,30,0)\"\n\"TIME(13,0,0)\"\n\"TIME(15,30,0)\"\n\"(G6/61)\"\n\"(G13/73)\"\n\"(G24/1)\"\n\"(G30/18)\"\n\"AVERAGE(B6:B33)\"\n\"SUM(G6:G33)/1605\"\n\"MAX(C6:F33)\"\n\"COUNTA(A6:A33)\"\n\"SUM(B6,D6,F6,H6)\"\n\"(J6/61)\"\n\"(J13/73)\"\n\"(J24/1)\"\n\"(J30/18)\"\n\"AVERAGE(B6:B33)\"\n\"SUM(J6:J33)/1605\"\n\"COUNTA(A5:A32)\"\n\"(H6/8760)\"\n\"AVERAGE(H6:H8)\"\n\"(SUM(H6:H8)/(COUNT(H6:H8)*8760))\"\n\"MAX(B6:C8)\"\n\"COUNTA(A6:A8)\"\n\"B6*1.15*1000\"\n\"(K6/8760)\"\n\"(K16/2088)\"\n\"AVERAGE(B6:B16)\"\n\"SUM(K6:K16)/89688\"\n\"MAX(C6:D16)\"\n\"COUNTA(A6:A16)\"\n\"B6*2632\"\n\"(E6/8760)\"\n\"(E11/5112)\"\n\"(E14/2064)\"\n\"AVERAGE(B6:B15)\"\n\"(SUM(E6:E15)/68496)\"\n\"MAX(C6:C13)\"\n\"COUNTA(A6:A14)\"\n\"B6*1887\"\n\"G6/239\"\n\"G7/236\"\n\"G8/365\"\n\"G9/235\"\n\"G12/233\"\n\"G14/295\"\n\"G15/237\"\n\"G16/251\"\n\"G21/302\"\n\"G23/305\"\n\"G24/87\"\n\"G25/318\"\n\"G26/309\"\n\"G27/254\"\n\"G28/224\"\n\"AVERAGE(F6:F28)\"\n\"MAX(B6:E28)\"\n\"COUNTA(A6:A28)\"\n\"G6/5712\"\n\"G7/5640\"\n\"G8/8760\"\n\"G9/5616\"\n\"G12/5563\"\n\"G14/7080\"\n\"G15/5664\"\n\"G16/6000\"\n\"G21/7248\"\n\"G23/7320\"\n\"G24/2088\"\n\"G25/7632\"\n\"G26/7416\"\n\"G27/6072\"\n\"G28/5352\"\n\"AVERAGE(F6:F28)\"\n\"SUM(G6:G28)/160147\"\n\"MAX(B6:E28)\"\n\"COUNTA(A6:A28)\"\n\"I7/61\"\n\"I9/365\"\n\"I12/1\"\n\"AVERAGE(B7:B25)\"\n\"SUM(I7:I25)/2559\"\n\"MAX(C7:F25)\"\n\"COUNTA(A7:A25)\"\n\"I7/365\"\n\"I8/121\"\n\"I17/48\"\n\"AVERAGE(B7:B28)\"\n\"AVERAGE(J8:J28)\"\n\"MAX(C7:F28)\"\n\"COUNTA(A7:A28)\"\n\"AVERAGE(B5:K5)\"\n\"AVERAGE(B7:J7)\"\n\"AVERAGE(B5:B14)\"\n\"AVERAGE(B5:K14)\"\n\"COUNT(K5:K14)\"\n\"SUM(C11:C28)\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"' High School Courses'!$A$1\"\n\"' High School Courses'!$G$1\"\n\"SUM(G12:G186)\"\n\"SUM(G194)\"\n\"SUM(G200:G219)\"\n\"SUM(G224:G241)\"\n\"SUM(G254:G267)\"\n\"SUM(G272:G277)\"\n\"SUM(G282:G288)\"\n\"SUM(G295:G305)\"\n\"SUM(G310:G335)\"\n\"SUM(G339:G388)\"\n\"SUM(G393:G394)\"\n\"SUM(L4+K4)\"\n\"SUM(H3:H16)\"\n\"SUM(I4:I16)\"\n\"SUM(H19:H22)\"\n\"SUM(H25:H26)\"\n\"SUM(H29:H33)\"\n\"SUM(H42:H44)\"\n\"SUM(H57:H77)\"\n\"SUM(H80:H91)\"\n\"SUM(H126:H135)\"\n\"SUM(H176:H200)\"\n\"TEXT(A2+1,\"\"0.\"\")\"\n\"+A28+1\"\n\"SUM(L5:L24)\"\n\"SUM(F5:F1000)\"\n\"A5\"\n\"B13*$A$3*(1-B13/$A$4)+norm(0,$A$6*B13*B13)\"\n\"B14/B13\"\n\"(B14-B13)/B13\"\n\"B13+C13\"\n\"SLOPE(F13:F37,B13:B37)\"\n\"INTERCEPT(F13:F37,B13:B37)\"\n\"H46\"\n\"-H46/H45\"\n\"SUM(E3:E6)\"\n\"SUM(E8:E26)\"\n\"SUM(E30:E32)\"\n\"SUM(E58:E71)\"\n\"E7+E27+E29+E33+E53+E57+E72\"\n\"SUM(E3:E7)\"\n\"SUM(E9:E16)\"\n\"E8+E17+E26+E28\"\n\"SUM(A3:A19)\"\n\"SUM(A23:A58)\"\n\"SUM(A63:A87)\"\n\"SUM(A88+A59+A20)\"\n\"SUM(F11)\"\n\"170000-45633\"\n\"SUM(F16:F31)\"\n\"11288.45+12557.01+10569.33+11018.95+5911.65+5111.8\"\n\"104943.6+40056.4+24712.14+3213.97+6443.96+35374.35+1482.42\"\n\"SUM(F38:F43)\"\n\"SUM(F47)\"\n\"16000+72499\"\n\"14153.51+1229.63+617+31350.06+29655.11+11051.04\"\n\"SUM(F49:F51)\"\n\"100000-34600\"\n\"64992-34600\"\n\"SUM(F56)\"\n\"57500+2100\"\n\"SUM(F61:F63)\"\n\"361096-261342\"\n\"153427.95+47041.49+76113.68+63400.57+47950.2+61575.32+66971.59+8384.71\"\n\"650965+24035\"\n\"200000-24035\"\n\"SUM(F72:F79)\"\n\"477.79+1006.68+172.71+3420.55+1902.12+4199.45+4140.27\"\n\"SUM(F83:F86)\"\n\"55227+59870-5722+17302+12500\"\n\"SUM(F92:F93)\"\n\"125000+29795+27545-16\"\n\"SUM(F96)\"\n\"48226.69+19701.59+19767.3+18610.75+20054.31\"\n\"SUM(F103:F111)\"\n\"31692+15169\"\n\"28750*3\"\n\"SUM(F113:F122)\"\n\"5319.43+4799.78\"\n\"255+1530.92\"\n\"366.48+310.68+219+164.7+498\"\n\"SUM(B6:B122)\"\n\"SUM(G6+G12+G33+G44+G48+G52+G58+G64+G69+G80+G87+G94+G99+G102+G112)\"\n\"220184.62+180000\"\n\"129925*12/11\"\n\"49419+40000\"\n\"21238*1.09090909090909\"\n\"75716.32+50000\"\n\"58426*1.09090909090909\"\n\"18879.48+20000\"\n\"10054*1.09090909090909\"\n\"355752+770+370000\"\n\"285541*1.09090909090909\"\n\"218043+240000\"\n\"158866*1.09090909090909\"\n\"SUM(B126:B131)\"\n\"SUM(G126:G132)\"\n\"+B123+C123\"\n\"+D123\"\n\"(B133+C123)/B137\"\n\"+B135+B133\"\n\"+C133+D123\"\n\"+C137/B137\"\n\"+G133+G135+SUM(F7:F122)\"\n\"+G137-G139\"\n\"+B5+2\"\n\"+B6+5\"\n\"CONCATENATE(A5,\"\" \"\",B5,\"\" (\"\",C5,\"\")\"\")\"\n\"B12+2\"\n\"B12+7\"\n\"+B15+2\"\n\"'Year 2'!N6\"\n\"'Year 2'!A9\"\n\"'Year 2'!X13\"\n\"+'Year 2'!P13\"\n\"'Year 2'!X6\"\n\"'Year 2'!A9\"\n\"'Year Two'!B7\"\n\"+'Year Two'!B8\"\n\"'Year Two'!B10\"\n\"+'Year Two'!M6\"\n\"'Year Two'!G7\"\n\"'Year Two'!M9\"\n\"'Year Two'!A20\"\n\"+'Year Two'!A42\"\n\"'Year Two'!M6\"\n\"'Year Two'!K9\"\n\"'Year Two'!A10\"\n\"+'Year Two'!L14\"\n\"'Year Two'!R10\"\n\"+'Year Two'!R13\"\n\"IF(SUM(G4,K4,O4,S4,W4,AA4,AE4,AI4)>0,AVERAGE(G4,K4,O4,S4,W4,AA4,AE4,AI4), \"\" \"\")\"\n\"TODAY()\"\n\"TODAY()\"\n\"TODAY()\"\n\"TODAY()\"\n\"RANK(D2,D2:D16)\"\n\"PRODUCT(E2,0.5)\"\n\"RANK(I2,I2:I15)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K13,1)\"\n\"RANK(D3,D2:D16)\"\n\"RANK(I3,I2:I15)\"\n\"RANK(K3,K2:K13,1)\"\n\"RANK(D4,D2:D16)\"\n\"RANK(I4,I2:I15)\"\n\"RANK(K4,K2:K13,1)\"\n\"RANK(D2,D2:D30)\"\n\"PRODUCT(E2,0.5)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K5,1)\"\n\"RANK(D3,D2:D30)\"\n\"RANK(K3,K2:K5,1)\"\n\"RANK(D4,D2:D30)\"\n\"RANK(K4,K2:K5,1)\"\n\"RANK(D5,D2:D30)\"\n\"RANK(K5,K2:K5,1)\"\n\"RANK(D2,D2:D30)\"\n\"PRODUCT(E2,0.5)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K8,1)\"\n\"RANK(D3,D2:D30)\"\n\"RANK(K3,K2:K8,1)\"\n\"RANK(C2,C2:C25)\"\n\"PRODUCT(D2,0.5)\"\n\"SUM(E2,G2,I2)\"\n\"RANK(J2,J2:J2,1)\"\n\"RANK(C3,C2:C25)\"\n\"RANK(J3,J2:J6,1)\"\n\"SUM(D11:D15)\"\n\"SUM(D19:D28)\"\n\"E16+E29\"\n\"+E36/$E$62\"\n\"SUM(K37:R37)\"\n\"69500*0.6811\"\n\"69500*0.01\"\n\"69500*0.0109\"\n\"69500*0.2194\"\n\"#REF!*0.0547\"\n\"#REF!*0.0109\"\n\"#REF!*0.0065\"\n\"#REF!*0.713\"\n\"#REF!*0.2297\"\n\"#REF!*0.0573\"\n\"($D$21-23000)*0.713\"\n\"($D$21-23000)*0.2297\"\n\"($D$21-23000)*0.0573\"\n\"#REF!\"\n\"SUM(F36:F44)\"\n\"N45/N44\"\n\"(O45/100)*#REF!\"\n\"SUM(S44:S44)\"\n\"SUM(N45:N45)\"\n\"N51/N49\"\n\"SUM(N50:N51)\"\n\"P52-#REF!\"\n\"5.73*0.1828\"\n\"SUM(F47:F59)\"\n\"SUM(E36:E57)\"\n\"+F60+F45\"\n\"SUM(C67:C71)\"\n\"SUM(D84:D95)\"\n\"SUM(E99:E109)\"\n\"+A64+1\"\n\"COUNTA(E5:E225)\"\n\"'(1) Dielectric Constants'!B26\"\n\"'(1) Dielectric Constants'!B21\"\n\"'(1) Dielectric Constants'!B8\"\n\"D14\"\n\"C9\"\n\"C10\"\n\"($D$14/100*$D$22/100*($D$12)^0.5+(1-$D$14/100)*$D$22/100*($D$11)^0.5+(1-$D$22/100)*B23/100*($D$9)^0.5+(1-$D$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$E$22/100*($D$12)^0.5+(1-$D$14/100)*$E$22/100*($D$11)^0.5+(1-$E$22/100)*B23/100*($D$9)^0.5+(1-$E$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$F$22/100*($D$12)^0.5+(1-$D$14/100)*$F$22/100*($D$11)^0.5+(1-$F$22/100)*B23/100*($D$9)^0.5+(1-$F$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$G$22/100*($D$12)^0.5+(1-$D$14/100)*$G$22/100*($D$11)^0.5+(1-$G$22/100)*B23/100*($D$9)^0.5+(1-$G$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$H$22/100*($D$12)^0.5+(1-$D$14/100)*$H$22/100*($D$11)^0.5+(1-$H$22/100)*B23/100*($D$9)^0.5+(1-$H$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$I$22/100*($D$12)^0.5+(1-$D$14/100)*$I$22/100*($D$11)^0.5+(1-$I$22/100)*B23/100*($D$9)^0.5+(1-$I$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$J$22/100*($D$12)^0.5+(1-$D$14/100)*$J$22/100*($D$11)^0.5+(1-$J$22/100)*B23/100*($D$9)^0.5+(1-$J$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$K$22/100*($D$12)^0.5+(1-$D$14/100)*$K$22/100*($D$11)^0.5+(1-$K$22/100)*B23/100*($D$9)^0.5+(1-$K$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$L$22/100*($D$12)^0.5+(1-$D$14/100)*$L$22/100*($D$11)^0.5+(1-$L$22/100)*B23/100*($D$9)^0.5+(1-$L$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$M$22/100*($D$12)^0.5+(1-$D$14/100)*$M$22/100*($D$11)^0.5+(1-$M$22/100)*B23/100*($D$9)^0.5+(1-$M$22/100)*C23/100*($D$10)^0.5)^2\"\n\"($D$14/100*$N$22/100*($D$12)^0.5+(1-$D$14/100)*$N$22/100*($D$11)^0.5+(1-$N$22/100)*B23/100*($D$9)^0.5+(1-$N$22/100)*C23/100*($D$10)^0.5)^2\"\n\"D15\"\n\"B22\"\n\"($D$15/100*$D$22/100*($D$12)^0.5+(1-$D$15/100)*$D$22/100*($D$11)^0.5+(1-$D$22/100)*B50/100*($D$9)^0.5+(1-$D$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$E$22/100*($D$12)^0.5+(1-$D$15/100)*$E$22/100*($D$11)^0.5+(1-$E$22/100)*B50/100*($D$9)^0.5+(1-$E$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$F$22/100*($D$12)^0.5+(1-$D$15/100)*$F$22/100*($D$11)^0.5+(1-$F$22/100)*B50/100*($D$9)^0.5+(1-$F$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$G$22/100*($D$12)^0.5+(1-$D$15/100)*$G$22/100*($D$11)^0.5+(1-$G$22/100)*B50/100*($D$9)^0.5+(1-$G$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$H$22/100*($D$12)^0.5+(1-$D$15/100)*$H$22/100*($D$11)^0.5+(1-$H$22/100)*B50/100*($D$9)^0.5+(1-$H$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$I$22/100*($D$12)^0.5+(1-$D$15/100)*$I$22/100*($D$11)^0.5+(1-$I$22/100)*B50/100*($D$9)^0.5+(1-$I$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$J$22/100*($D$12)^0.5+(1-$D$15/100)*$J$22/100*($D$11)^0.5+(1-$J$22/100)*B50/100*($D$9)^0.5+(1-$J$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$K$22/100*($D$12)^0.5+(1-$D$15/100)*$K$22/100*($D$11)^0.5+(1-$K$22/100)*B50/100*($D$9)^0.5+(1-$K$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$L$22/100*($D$12)^0.5+(1-$D$15/100)*$L$22/100*($D$11)^0.5+(1-$L$22/100)*B50/100*($D$9)^0.5+(1-$L$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$M$22/100*($D$12)^0.5+(1-$D$15/100)*$M$22/100*($D$11)^0.5+(1-$M$22/100)*B50/100*($D$9)^0.5+(1-$M$22/100)*C50/100*($D$10)^0.5)^2\"\n\"($D$15/100*$N$22/100*($D$12)^0.5+(1-$D$15/100)*$N$22/100*($D$11)^0.5+(1-$N$22/100)*B50/100*($D$9)^0.5+(1-$N$22/100)*C50/100*($D$10)^0.5)^2\"\n\"D17\"\n\"($D$16/100*$D$22/100*($D$12)^0.5+(1-$D$16/100)*$D$22/100*($D$11)^0.5+(1-$D$22/100)*B77/100*($D$9)^0.5+(1-$D$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$E$22/100*($D$12)^0.5+(1-$D$16/100)*$E$22/100*($D$11)^0.5+(1-$E$22/100)*B77/100*($D$9)^0.5+(1-$E$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$F$22/100*($D$12)^0.5+(1-$D$16/100)*$F$22/100*($D$11)^0.5+(1-$F$22/100)*B77/100*($D$9)^0.5+(1-$F$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$G$22/100*($D$12)^0.5+(1-$D$16/100)*$G$22/100*($D$11)^0.5+(1-$G$22/100)*B77/100*($D$9)^0.5+(1-$G$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$H$22/100*($D$12)^0.5+(1-$D$16/100)*$H$22/100*($D$11)^0.5+(1-$H$22/100)*B77/100*($D$9)^0.5+(1-$H$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$I$22/100*($D$12)^0.5+(1-$D$16/100)*$I$22/100*($D$11)^0.5+(1-$I$22/100)*B77/100*($D$9)^0.5+(1-$I$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$J$22/100*($D$12)^0.5+(1-$D$16/100)*$J$22/100*($D$11)^0.5+(1-$J$22/100)*B77/100*($D$9)^0.5+(1-$J$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$K$22/100*($D$12)^0.5+(1-$D$16/100)*$K$22/100*($D$11)^0.5+(1-$K$22/100)*B77/100*($D$9)^0.5+(1-$K$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$L$22/100*($D$12)^0.5+(1-$D$16/100)*$L$22/100*($D$11)^0.5+(1-$L$22/100)*B77/100*($D$9)^0.5+(1-$L$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$M$22/100*($D$12)^0.5+(1-$D$16/100)*$M$22/100*($D$11)^0.5+(1-$M$22/100)*B77/100*($D$9)^0.5+(1-$M$22/100)*C77/100*($D$10)^0.5)^2\"\n\"($D$16/100*$N$22/100*($D$12)^0.5+(1-$D$16/100)*$N$22/100*($D$11)^0.5+(1-$N$22/100)*B77/100*($D$9)^0.5+(1-$N$22/100)*C77/100*($D$10)^0.5)^2\"\n\"C12\"\n\"C11\"\n\"((1-$D$14/100)*(1-D$22/100)*($D$9)^0.5+($D$14/100)*(1-D$22/100)*($D$10)^0.5+(D$22/100)*$C23/100*($D$11)^0.5+(D$22/100)*$B23/100*($D$12)^0.5)^2\"\n\"C12\"\n\"C11\"\n\"((1-$D$15/100)*(1-D$49/100)*($D$9)^0.5+($D$15/100)*(1-D$49/100)*($D$10)^0.5+(D$49/100)*$C50/100*($D$11)^0.5+(D$49/100)*$B50/100*($D$12)^0.5)^2\"\n\"C12\"\n\"C11\"\n\"((1-$D$16/100)*(1-D$76/100)*($D$9)^0.5+($D$16/100)*(1-D$76/100)*($D$10)^0.5+(D$76/100)*$C77/100*($D$11)^0.5+(D$76/100)*$B77/100*($D$12)^0.5)^2\"\n\"ABS((C9)^0.5-(D9)^0.5)/((C9)^0.5+(D9)^0.5)\"\n\"(0.1/T9)^2\"\n\"C$9\"\n\"P7\"\n\"P8\"\n\"P9\"\n\"P10\"\n\"C11\"\n\"D10-C10\"\n\"'(2)TP model-Porosity-Mineralogy'!K22\"\n\"100-G10\"\n\"((1-$H10/100)*(1-F10/100)*($Q$7)^0.5+($H10/100)*(1-F10/100)*($Q$8)^0.5+(F10/100)*$I10/100*($Q$9)^0.5+(F10/100)*$J10/100*($Q$10)^0.5)^2\"\n\"(2*(D10-C10)*(K10)^0.5)/(3*10^8)*(1*10^9)\"\n\"((K10)^0.5-(K11)^0.5)/((K10)^0.5+(K11)^0.5)\"\n\"(2*(D11-C11)*(K11)^0.5)/(3*10^8)*(1*10^9)+L10\"\n\"B10\"\n\"K10\"\n\"D10\"\n\"K10\"\n\"C39\"\n\"M10\"\n\"B11\"\n\"L10\"\n\"D11\"\n\"M11\"\n\"B12\"\n\"C42\"\n\"L11\"\n\"C12\"\n\"D12\"\n\"K12\"\n\"(3*(10^8))/((H11)^(0.5))/(10^9)\"\n\"I11/0.3048\"\n\"J11*(10^9)/(G11*(10^6))\"\n\"K11*0.3048\"\n\"K11/4\"\n\"H11\"\n\"H11\"\n\"H11\"\n\"(3*10^8)/($F$4*10^6*($F$3^0.5)*4)+(C8/($F$3-1)^0.5)\"\n\"D8/2\"\n\"SUM(F5:F7)\"\n\"SUM(F12:F13)\"\n\"SUM(F12:F13)\"\n\"SUM(F41:F44)\"\n\"SUM(F59:F59)\"\n\"SUM(F56+F60+F62+F64)\"\n\"SUM(F75:F77)\"\n\"SUM(F78:F82)+F72\"\n\"SUM(F89+F87)\"\n\"SUM(F95)\"\n\"SUM(+F103+F101+F96+F105)\"\n\"SUM(+F120+F118+F116+F114)\"\n\"SUM(F127:F147)\"\n\"SUM(F151:F163)\"\n\"SUM(F168+F166+F164+F148)\"\n\"SUM(F174:F197)\"\n\"SUM(F201)\"\n\"SUM(F207+F205+F203+F198)\"\n\"F214+F203+F48+F164+F116+F31+F101+F60+F41+F36+F24+F19+F14+F5+F78+F87\"\n\"SUM(F214+F209+F170+F122+F33+F107+F91+F84+F66+F50+F45+F38+F28+F21+F16+F9)\"\n\"3428981\"\n\"+F250+F243+F236+F231+F226+F221+F257+F249\"\n\"SUM(F254+F245+F240+F233+F228+F223+F257)\"\n\"SUM(F268)+F264\"\n\"SUM(F276:F280)\"\n\"SUM(F281+F273)\"\n\"SUM(F300+F298+F296+F294)\"\n\"+F264+F286+F296+F310\"\n\"SUM(F312+F307+F302+F288+F283+F270)\"\n\"SUM(F348+F346+F344)\"\n\"+F363+F358+F353+F344+F339+F331\"\n\"SUM(F365+F360+F355+F350+F341+F333)\"\n\"SUM(F403)+F405+F407\"\n\"+F376+F398+F403\"\n\"SUM(F409+F400+F395+F390+F382)\"\n\"SUM(F437+F439+F441)\"\n\"SUM(F462:F466)\"\n\"SUM(F475+F477+F479+F473)\"\n\"+F452+F464+F475+F486+F495\"\n\"SUM(F492+F481+F468+F456+F495)\"\n\"SUM(F505+F510+F512)\"\n\"SUM(+F526+F524+F520+F528)\"\n\"SUM(+F553+F551+F555)\"\n\"+F571+F569\"\n\"+F581+F582\"\n\"SUM(+F586+F584+F588+F579)\"\n\"SUM(F584+F569+F560+F551+F540+F533+F524)\"\n\"SUM(F590+F573+F566+F557+F546+F535+F530)\"\n\"+F617+F615+F613+F611\"\n\"SUM(F646+F654+F656)\"\n\"SUM(F681+F669+F661+F646+F631+F622+F613+F597)\"\n\"SUM(F685+F673+F663+F658+F637+F628+F619+F603)\"\n\"97112944-260990\"\n\"SUM(F740)+F745+F747+F749\"\n\"SUM(F745+F731+F720+F713+F705+F692)\"\n\"SUM(F751+F735+F724+F717+F707+F694)\"\n\"+F822+F820+F818+F824\"\n\"SUM(F860)+F847+F838+F829+F820+F811+F806+F799\"\n\"SUM(F866+F849+F844+F831+F826+F813+F808+F803)\"\n\"1139853+50000\"\n\"SUM(F877:F886)\"\n\"SUM(F887)+F874+F872\"\n\"+F912+F910+F908\"\n\"SUM(F920+F922+F926)\"\n\"531953+2581\"\n\"SUM(F936)+F934+F932\"\n\"SUM(+F972+F963+F954+F979)\"\n\"SUM(F981+F976+F969+F960)\"\n\"SUM(F1003:F1014)\"\n\"109390855+130000\"\n\"SUM(F1021)+F1019+F1017+F1015\"\n\"SUM(F1026+F1017+F995+F988)\"\n\"SUM(F1030+F1023+F999+F992)\"\n\"SUM(F1051)+F1049+F1047+F1042\"\n\"SUM(F1081+F1072+F1063+F1056+F1091+F1047)\"\n\"SUM(F1088+F1083+F1078+F1069+F1060+F1093+F1053)\"\n\"SUM(F1101:F1107)\"\n\"SUM(F1115+F1113+F1108)\"\n\"SUM(F1120+F1113)\"\n\"SUM(F1126+F1117)\"\n\"SUM(F1158:F1163)\"\n\"SUM(F1216:F1223)\"\n\"SUM(F1239+F1226+F1206)\"\n\"SUM(F1245+F1232+F1212)\"\n\"SUM(F1305+F1312+F1291+F1284)\"\n\"SUMIF(A5:A1314,A1317,F5:F1314)\"\n\"'The Model'!H44/'The Model'!A36\"\n\"A15+'The Model'!I50\"\n\"SUM('The Model'!B5:B6)/SUM('The Model'!B5:B6)*100\"\n\"('The Model'!I52+'The Model'!I53)/SUM('The Model'!B5:B6)*100\"\n\"'The Model'!H51/'The Model'!H51*100\"\n\"'The Model'!I51/'The Model'!H51*100\"\n\"$A$41=0\"\n\"COUNT($I$40:$I$44)\"\n\"$A$40=0\"\n\"SUM(B4:B6)\"\n\"$A$42=0\"\n\"$A$43=0\"\n\"$A$44=0\"\n\"{600,1000,0.00001,0.1,FALSE,FALSE,FALSE,2,1,1,0.001,FALSE}\"\n\"(B4)\"\n\"(B5)*(((1+B15+B20))^(B11))\"\n\"(1+B15+B20)*G31\"\n\"(1/((1+B15+B20)))\"\n\"(B4/A$31)^(1/B$13)\"\n\"1/(1-Y31)\"\n\"(((A32)^B13)+((A33)^B13)+((A34)^B13))^(-1/(B13-1))\"\n\"1/B10+1\"\n\"M35/A35\"\n\"(1-M34)*100\"\n\"B9\"\n\"(B4/B9)^(-1/B10)\"\n\"(G35*(B4^G34)+G36*((B9-B4)^G34))^(1/G34)\"\n\"B7/(B9+B5*(B15/(1+B15))+B6*(B16/(1+B16)))\"\n\"((B9-B4)/B9)^(-1/B10)\"\n\"(((A32/I40)^(B$13))*(I$44)*(I$43^(B$13-1)))-(A28*(I40^B10))\"\n\"I40/H40\"\n\"(((A33/I41)^(B$13))*(I$44)*(I$43^(B$13-1)))-(A29*(((I41/((1+B17+B22)))^B11)))\"\n\"(((A32)^(B$13))*(I40^(1-B$13))+((A33)^(B$13))*(I41^(1-B$13))+((A34)^(B$13))*(I42^(1-B$13)))^(1/(1-B13))-I43\"\n\"(I45+A28*(I40^(B10+1))+A29*(((I41/((1+B17+B22)))^(B11+1)))*(B17)+A30*(((I42/((1+B18+B23)))^(B12+1)))*B18)*A36-I44\"\n\"$A$35-($G$35*((($A$32/$I$40)^($B$13))*($I$44)*($I$43^($B$13-1)))^($G$34)+$G$36*$I$45^$G$34)^(1/$G$34)\"\n\"B9-B4\"\n\"100\"\n\"100*(I44/H44)*(H43/I43)^A36\"\n\"(H44/A36)*(I49/H49-1)\"\n\"B4\"\n\"A28*(I40^B10)\"\n\"A29*(((I41/((1+B17+B22)))^B11))\"\n\"A29*(((H41/((1+B17+B22)))^(B11+1)))*(B15)+A30*(((H42/((1+B18+B23)))^(B12+1)))*B16\"\n\"A29*(((I41/((1+B17+B22)))^(B11+1)))*(B17)+A30*(((I42/((1+B18+B23)))^(B12+1)))*B18\"\n\"'imperfect substutes model'!G50\"\n\"SUM(B3:B6)\"\n\"$A$41=0\"\n\"COUNT($I$40:$I$44)\"\n\"$A$40=0\"\n\"SUM(B4:B6)\"\n\"$A$42=0\"\n\"$A$43=0\"\n\"$A$44=0\"\n\"{600,1000,0.00001,0.1,FALSE,FALSE,FALSE,2,1,1,0.001,FALSE}\"\n\"(B4)\"\n\"(B5)*(((1+B15+B20))^(B11))\"\n\"(1+B15+B20)*G31\"\n\"(1/((1+B15+B20)))\"\n\"(B4/A$31)^(1/B$13)\"\n\"(((A32)^B13)+((A33)^B13)+((A34)^B13))^(-1/(B13-1))\"\n\"(((A32/I40)^(B$13))*(I$44)*(I$43^(B$13-1)))-(A28*(I40^B10))\"\n\"(((A32/H40)^(B$13))*(H$44)*(H$43^(B$13-1)))-(A28*(H40^B10))\"\n\"(((A33/I41)^(B$13))*(I$44)*(I$43^(B$13-1)))-(A29*(((I41/((1+B17+B22)))^B11)))\"\n\"(((A33/H41)^(B$13))*(H$44)*(H$43^(B$13-1)))-(A29*(((H41/((1)*(1)))^B11)))\"\n\"(((A34/H42)^(B$13))*(H$44)*(H$43^(B$13-1)))-(A30*(((H42/((1+B18+B23)))^B12)))\"\n\"(((A32)^(B$13))*(I40^(1-B$13))+((A33)^(B$13))*(I41^(1-B$13))+((A34)^(B$13))*(I42^(1-B$13)))^(1/(1-B13))-I43\"\n\"(((A32)^(B$13))*(H40^(1-B$13))+((A33)^(B$13))*(H41^(1-B$13))+((A34)^(B$13))*(H42^(1-B$13)))^(1/(1-B13))-H43\"\n\"(A31)*(I43^(-B9+1))-I44\"\n\"(A31)*(H43^(-B9+1))-H44\"\n\"(B7)\"\n\"(((B5)-(((A33/H41)^(B$13))*(H$44)*(H$43^(B$13-1))))*(1/H41))*0.5\"\n\"(((B5*(1+I64))-(((A33/H41)^(B$13))*(H$44)*(H$43^(B$13-1))))*(I41/H41))*0.5\"\n\"(H50-G50)\"\n\"(H41-G31)*B5\"\n\"(H41-(I41/(1+B22+B17)))*(1+I64)*B5\"\n\"-((1/(1+B20+B15)))*B20*B5\"\n\"-(I41/(1+B22+B17))*B22*B5*(1+I64)\"\n\"(G32*(1+I68)*B6*B18)-(B6*G32*B16)\"\n\"(H53)\"\n\"SUM(I50:I53)\"\n\"(I40-1)\"\n\"((((A32/I40)^(B$13))*(I$44)*(I$43^(B$13-1)))-B4)/B4\"\n\"((I41/((1+B17+B22)))-G31)/G31\"\n\"(I41-1)\"\n\"((((A33/I41)^(B$13))*(I$44)*(I$43^(B$13-1)))-B5)/B5\"\n\"((I42/((1+B18+B23)))-G32)/G32\"\n\"(I42-1)\"\n\"((((A34/I42)^(B$13))*(I$44)*(I$43^(B$13-1)))-B6)/B6\"\n\"((1+I62)*G31*(1+I64)*B5*B17)-(B5*G31*B15)\"\n\"((1+I66)*G32*(1+I68)*B6*B18)-(B6*G32*B16)\"\n\"SUM(I71:I72)\"\n\"SUM(B10:B17)\"\n\"SUM(B10:B17)\"\n\"SUM(B10:B17)\"\n\"AVERAGE(C5:AD5)\"\n\"SUM(C5:C19)\"\n\"AVERAGE(C5:C19)\"\n\"'Mathematical Thinking'!C4\"\n\"AVERAGE(C5:AD5)\"\n\"SUM(C5:C18)\"\n\"AVERAGE(C5:C18)\"\n\"'Mathematical Thinking'!C4\"\n\"AVERAGE(C5:AD5)\"\n\"SUM(C5:C20)\"\n\"AVERAGE(C5:C20)\"\n\"'Mathematical Thinking'!C4\"\n\"AVERAGE(C6:AD6)\"\n\"SUM(C5:C28)\"\n\"AVERAGE(C5:C28)\"\n\"'Mathematical Thinking'!C4\"\n\"AVERAGE(C5:AD5)\"\n\"SUM(C5:C25)\"\n\"AVERAGE(C5:C25)\"\n\"'Mathematical Thinking'!C4\"\n\"AVERAGE(C6:AD6)\"\n\"SUM(C5:C24)\"\n\"AVERAGE(C5:C24)\"\n\"D16\"\n\"SUM(D12:D15)\"\n\"IF(D18=0,0,D16/D18)\"\n\"E23*D23\"\n\"F25+F23\"\n\"D16-F27\"\n\"-1*((0.03*A33)+(0.06*B33)+(0.12*C33)+(0.2*D33))\"\n\"IF(F33=0,F30,F33)\"\n\"F29+F34\"\n\"D18-F27\"\n\"F37+F34\"\n\"IF(F37=0,0,F29/F37)\"\n\"IF( F38=0,0,F35/F38)\"\n\"IF(H10=0,0,(H10-F35)/H10)\"\n\"IF(H57=0,\"\"\"\",(H57-H70)/H57)\"\n\"IF(H52=0,\"\"\"\",(H52-H65)/H52)\"\n\"4500000*0.75\"\n\"4500000*0.25\"\n\"4500000*0.75\"\n\"4500000*0.25\"\n\"'Shock Values'!F4\"\n\"IF(H52=0,\"\"\"\",(H52-H65)/H52)\"\n\"J79+F79+C79\"\n\"SUM(C10:C75)\"\n\"SUM(F10:F64)\"\n\"SUM(J10:J27)\"\n\"C77-C78\"\n\"'P-T Input'!B2\"\n\"'P-T Input'!D2\"\n\"'Shock Values'!F4\"\n\"('P-T Input'!C77+'P-T Input'!F77+'P-T Input'!J77)*1000\"\n\"('Shock Results'!G74+'Shock Results'!G139+'Shock Results'!G167)*1000\"\n\"B10-B8\"\n\"('Shock Results'!D74+'Shock Results'!D139+'Shock Results'!D167)*1000\"\n\"B15-$E15\"\n\"IF($E15=0,0,B16/$E15)\"\n\"'P-T Input'!C77*1000\"\n\"'Shock Results'!G74*1000\"\n\"E20-B20\"\n\"'P-T Input'!F77*1000\"\n\"'Shock Results'!G139*1000\"\n\"'P-T Input'!J77*1000\"\n\"'Shock Results'!G167*1000\"\n\"SUM(B20:B22)\"\n\"'Shock Results'!D74*1000\"\n\"'Shock Results'!D139*1000\"\n\"'Shock Results'!D167*1000\"\n\"B27+B30+B33\"\n\"'17-4 Test'!D16\"\n\"IF(H44=0,0,H42/H44)\"\n\"'17-4 Test'!H41\"\n\"B12\"\n\"H44+D50\"\n\"H42+D50\"\n\"IF(D51=0,0,D52/D51)\"\n\"H37\"\n\"'17-4 Test'!F34\"\n\"D56+D57\"\n\"D51+D56\"\n\"D51+D58\"\n\"D52+D56\"\n\"D52+D58\"\n\"IF(D61=0,0,D63/D61)\"\n\"IF(D52=0,0,(D52-D63)/D52)\"\n\"'P-T Input'!$C10*'Shock Values'!F7/100\"\n\"SUM(D7:D72)\"\n\"'Shock Values'!F81*'P-T Input'!$F10/100\"\n\"SUM(D83:D137)\"\n\"'P-T Input'!$J10*'Shock Values'!F145/100\"\n\"SUM(D148:D165)\"\n\"A3\"\n\"I7\"\n\"A9\"\n\"I18\"\n\"A20\"\n\"I27\"\n\"A29\"\n\"I38\"\n\"I43\"\n\"A47\"\n\"I53\"\n\"SUM(R2:R7)\"\n\"S25\"\n\"S30\"\n\"SUM(F7:H7)\"\n\"SUM(F18:H18)\"\n\"SUM(F25:H25)\"\n\"SUM(F26:H26)+G22+SUM(F38:H38)+SUM(F43:H43)\"\n\"SUM(S21:S24)\"\n\"SUM(K22:K27)\"\n\"D45\"\n\"E45\"\n\"SUM(S28:S29)\"\n\"S25+S30\"\n\"I53\"\n\"S32+S34\"\n\"#REF!+K19+K28+K39+K44\"\n\"G85-E85\"\n\"SUM(H85:H91)\"\n\"E93\"\n\"H93\"\n\"SUM(E96:E97)\"\n\"SUM(#REF!)\"\n\"N12*3+N14+N16+N18+N20+N22+N24+N26+N28+N30\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"N12*3+N14+N16+N18+N20+N22+N24+N26+N28+N30\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"IF(N32>=95,A82,IF(AND(75<=N32,94>=N32),A83,IF(AND(55<=N32,74>=N32),A84,A85)))\"\n\"N12*3+N14+N16+N18+N20+N22+N24+N26+N28+N30\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"N12*3+N14+N16+N18+N20+N22+N24+N26+N28+N30\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(N32>=95,A64,IF(AND(75<=N32,94>=N32),A65,IF(AND(55<=N32,74>=N32),A66,A67)))\"\n\"IF(ISBLANK(A2)=TRUE,0,1)\"\n\"IF(ISBLANK(B2)=TRUE,0,B2)\"\n\"IF(ISBLANK(B2)=TRUE,0,B2*B2)\"\n\"IF(ISBLANK(C2)=TRUE,0,B2*C2)\"\n\"IF(ISBLANK(D2)=TRUE,0,B2*D2)\"\n\"IF(ISBLANK(E2)=TRUE,0,B2*E2)\"\n\"IF(ISBLANK(F2)=TRUE,0,B2*F2)\"\n\"IF(ISBLANK(C2)=TRUE,0,C2*C2)\"\n\"IF(ISBLANK(D2)=TRUE,0,C2*D2)\"\n\"IF(ISBLANK(E2)=TRUE,0,C2*E2)\"\n\"IF(ISBLANK(F2)=TRUE,0,C2*F2)\"\n\"IF(ISBLANK(D2)=TRUE,0,D2*D2)\"\n\"IF(ISBLANK(E2)=TRUE,0,D2*E2)\"\n\"IF(ISBLANK(F2)=TRUE,0,D2*F2)\"\n\"IF(ISBLANK(E2)=TRUE,0,E2*E2)\"\n\"IF(ISBLANK(F2)=TRUE,0,E2*F2)\"\n\"IF(ISBLANK(F2)=TRUE,0,F2*F2)\"\n\"IF(ISBLANK(B2)=TRUE,0,S2*$A2)\"\n\"IF(ISBLANK(A2)=TRUE,\"\"\"\",$AU$42+$AU$43*$B2+$AU$44*$C2+$AU$45*$D2+$AU$46*$E2+$AU$47*$F2)\"\n\"IF(ISBLANK(A2)=TRUE,\"\"\"\",A2-BR2)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",BS3)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",BS2)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",BV2*BV2)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",BU2*BV2)\"\n\"SUM(BY2:BY500)/SUM(BX2:BX500)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",($BU2-($CA$2*$BV2))^2)\"\n\"IF(ISBLANK(A2)=TRUE,\"\"\"\",$AU$42+$AU$43*$B2+$AU$44*$C2+$AU$45*$D2+$AU$46*$E2+$AU$47*$F2)\"\n\"IF(ISBLANK(A2)=TRUE,\"\"\"\",(A2-CD2)^2)\"\n\"IF($CF2=Output!$C$7,$BS2,\"\"\"\")\"\n\"$R$502\"\n\"$S$502\"\n\"IF(ISBLANK($C$2)=TRUE,0,$T$502)\"\n\"IF(ISBLANK($D$2)=TRUE,0,$U$502)\"\n\"IF(ISBLANK($E$2)=TRUE,0,$V$502)\"\n\"IF(ISBLANK($F$2)=TRUE,0,$W$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,1)\"\n\"IF(ISBLANK(A3)=TRUE,\"\"\"\",$AU$42+$AU$43*$B3+$AU$44*$C3+$AU$45*$D3+$AU$46*$E3+$AU$47*$F3+$CA$2*$BS2)\"\n\"$X$502\"\n\"IF(ISBLANK($C$2)=TRUE,0,$Y$502)\"\n\"IF(ISBLANK($D$2)=TRUE,0,$Z$502)\"\n\"IF(ISBLANK($E$2)=TRUE,0,$AA$502)\"\n\"IF(ISBLANK($F$2)=TRUE,0,$AB$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,2)\"\n\"IF(ISBLANK($C$2)=TRUE,1,$AC$502)\"\n\"IF(ISBLANK($D$2)=TRUE,0,$AD$502)\"\n\"IF(ISBLANK($E$2)=TRUE,0,$AE$502)\"\n\"IF(ISBLANK($F$2)=TRUE,0,$AF$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,3)\"\n\"Output!A$4\"\n\"IF(ISBLANK(A$2)=TRUE,0,Output!C$4)\"\n\"IF(ISBLANK(D$2)=TRUE,0,Output!D$4)\"\n\"IF(ISBLANK($D$2)=TRUE,1,$AG$502)\"\n\"IF(ISBLANK($E$2)=TRUE,0,$AH$502)\"\n\"IF(ISBLANK($F$2)=TRUE,0,$AI$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,4)\"\n\"IF(ISBLANK($E$2)=TRUE,1,$AJ$502)\"\n\"IF(ISBLANK($F$2)=TRUE,0,$AK$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,5)\"\n\"SUM(CG2:CG501)\"\n\"IF(ISBLANK($F$2)=TRUE,1,$AL$502)\"\n\"INDEX(MINVERSE($AU$3:$AZ$8),AU$2,6)\"\n\"$AU$42+$AU$43*$AV$13+$AU$44*$AW$13+$AU$45*$AX$13+$AU$46*$AY$13+$AU$47*$AZ$13+$CA$2*$BL$7\"\n\"Output!$C$7-(COUNT($B$2:$F$2))-2\"\n\"TINV((1-Output!$C$13),$BL$10)\"\n\"$AU$42+$AU$43*$AV$13+$AU$44*$AW$13+$AU$45*$AX$13+$AU$46*$AY$13+$AU$47*$AZ$13\"\n\"Output!B$11\"\n\"IF(ISBLANK(A$2)=TRUE,0,Output!C$11)\"\n\"IF(ISBLANK(D$2)=TRUE,0,Output!D$11)\"\n\"SUM($CE$2:$CE$501)/$BL$10\"\n\"Output!C7-(COUNT($B$2:$F$2)+1)\"\n\"TINV((1-Output!C13),$BC$14)\"\n\"Output!C6\"\n\"$BL$8-($BL$11*SQRT($BL$13))\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,1)\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,2)\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,3)\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,4)\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,5)\"\n\"INDEX(MMULT($AU$13:$AZ$13,$BC$3:$BH$8),1,6)\"\n\"$BL$8+($BL$11*SQRT($BL$13))\"\n\"$BC$12-($BC$15*SQRT($BC$17*$AU$30))\"\n\"SUM($CB$2:$CB$500)/(Output!$C$7-2)\"\n\"$BC$12+($BC$15*SQRT($BC$17*$AU$30))\"\n\"TINV((1-Output!$C$13),Output!$C$7-2)\"\n\"IF(ISBLANK(A$2)=TRUE,0,Output!C$11)\"\n\"$CA$2-$BL$22*SQRT($BL$21/SUM($BX$2:$BX$500))\"\n\"$CA$2/(SQRT($BL$21/SUM($BX$2:$BX$500)))\"\n\"IF(ISBLANK(D$2)=TRUE,0,Output!D$11)\"\n\"$BC$12-($BC$15*SQRT($BC$17*(1+$AU$30)))\"\n\"$CA$2+$BL$22*SQRT($BL$21/SUM($BX$2:$BX$500))\"\n\"TDIST(ABS($BN$24),Output!$C$7-2,2)\"\n\"IF(ISBLANK(E$2)=TRUE,0,Output!E$11)\"\n\"$BC$12+($BC$15*SQRT($BC$17*(1+$AU$30)))\"\n\"IF($BN$25<0.0001,\"\"< 0.0001\"\",ROUND($BN$25,4))\"\n\"IF(ISBLANK(F$2)=TRUE,0,Output!F$11)\"\n\"MMULT($AU$18:$AZ$18,$AV$22:$AV$27)\"\n\"SUM($A$2:$A$501)\"\n\"SUM($AM$2:$AM$501)\"\n\"SUM($AN$2:$AN$501)\"\n\"SUM($AO$2:$AO$501)\"\n\"SUM($AP$2:$AP$501)\"\n\"SUM($AQ$2:$AQ$501)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),1)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),2)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),3)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),4)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),5)\"\n\"INDEX(MMULT($BC$3:$BH$8,$AU$33:$AU$38),6)\"\n\"IF(ISBLANK($A501)=TRUE,\"\"\"\",($BU501-($CA$2*$BV501))^2)\"\n\"SUM(R2:R501)\"\n\"IF(ISBLANK(Data!$C$2)=TRUE,\"\" \"\",\"\"B2-hat\"\")\"\n\"IF(ISBLANK(Data!$D$2)=TRUE,\"\" \"\",\"\"B3-hat\"\")\"\n\"IF(ISBLANK(Data!$E$2)=TRUE,\"\" \"\",\"\"B4-hat\"\")\"\n\"IF(ISBLANK(Data!$F$2)=TRUE,\"\" \"\",\"\"B5-hat\"\")\"\n\"IF(ISBLANK(Data!$C$2)=TRUE,\"\" \"\",\"\"X2\"\")\"\n\"IF(ISBLANK(Data!$D$2)=TRUE,\"\" \"\",\"\"X3\"\")\"\n\"IF(ISBLANK(Data!$E$2)=TRUE,\"\" \"\",\"\"X4\"\")\"\n\"IF(ISBLANK(Data!$F$2)=TRUE,\"\" \"\",\"\"X5\"\")\"\n\"CONCATENATE(\"\"The point estimate for Phi is \"\",ROUND(Data!$CA$2,3),\"\".\"\")\"\n\"CONCATENATE(\"\"The P-value for testing Ho: Phi = 0 is \"\",Data!$BN$26,\"\".\"\")\"\n\"CONCATENATE(\"\"A \"\",$C$13*100,\"\"% confidence interval for Phi is ( \"\",ROUND(Data!$BL$24,2),\"\" , \"\",ROUND(Data!$BL$25,3),\"\" ).\"\")\"\n\"IF(OR(Data!$BN$26=\"\"< 0.0001\"\",Data!$BN$26<(1-$C$13))=TRUE,\"\"Note: The following output uses the autoregressive model.\"\",\"\"This autoregressive model is not appropriate because Phi = 0  is a likely value.\"\")\"\n\"IF(OR(Data!$BN$26=\"\"< 0.0001\"\",Data!$BN$26<(1-$C$13))=TRUE,CONCATENATE(\"\"  The autoregressive model is:  E(Y)-hat = \"\",A4,\"\" + \"\",B4,\"\"*X1\"\",IF(ISBLANK(C4)=TRUE,\"\"\"\",\"\" + \"\"),IF(ISBLANK(C4)=TRUE,\"\"\"\",C4),IF(ISBLANK(C4)=TRUE,\"\"\"\",\"\"*X2\"\"),IF(ISBLANK(D4)=TRUE,\"\"\"\",\"\" + \"\"),IF(ISBLANK(D4)=TRUE,\"\"\"\",D4),IF(ISBLANK(D4)=TRUE,\"\"\"\",\"\"*X3\"\"),IF(ISBLANK(E4)=TRUE,\"\"\"\",\"\" + \"\"),IF(ISBLANK(E4)=TRUE,\"\"\"\",E4),IF(ISBLANK(E4)=TRUE,\"\"\"\",\"\"*X4\"\"),IF(ISBLANK(F4)=TRUE,\"\"\"\",\"\" + \"\"),IF(ISBLANK(F4)=TRUE,\"\"\"\",F4),IF(ISBLANK(F4)=TRUE,\"\"\"\",\"\"*X5\"\"),\"\" + \"\",ROUND(Data!$CA$2,2),\"\"*(Residual at last time period)\"\"),\"\"The following output was obtained using regular regression techniques (same as CI/PI template):\"\")\"\n\"IF(OR(Data!$BN$26=\"\"< 0.0001\"\",Data!$BN$26<(1-$C$13))=TRUE,CONCATENATE(\"\"  Estimated MSE for the autoregressive model is \"\",ROUND(Data!$BL$13,2),\"\". ( \"\",ABS(ROUND((($C$6-Data!$BL$13)/$C$6)*100,2)),\"\"% reduction )\"\"),CONCATENATE(\"\"  The predicted value for E(Y) when ignoring the autoregressive part is \"\",ROUND(Data!$BC$12,2)))\"\n\"IF(OR(Data!$BN$26=\"\"< 0.0001\"\",Data!$BN$26<(1-$C$13))=TRUE,CONCATENATE(\"\"  The predicted value for the NEXT time period is \"\",ROUND(Data!$BL$8,2),\"\".\"\"),CONCATENATE(\"\"  The \"\",100*Output!$C$13,\"\"% confidence interval for E(Y) given the above X's is ( \"\",ROUND(Data!$BC$21,2),\"\" , \"\",ROUND(Data!$BC$22,2),\"\" ).\"\"))\"\n\"IF(OR(Data!$BN$26=\"\"< 0.0001\"\",Data!$BN$26<(1-$C$13))=TRUE,CONCATENATE(\"\"  An approximate \"\",$C$13*100,\"\"% prediction interval for the NEXT time period is ( \"\",ROUND(Data!$BL$17,2),\"\" , \"\",ROUND(Data!$BL$18,2),\"\" ).\"\"),CONCATENATE(\"\"  The \"\",100*Output!$C$13,\"\"% prediction interval for Y given the above X's is ( \"\",ROUND(Data!$BC$25,2),\"\" , \"\",ROUND(Data!$BC$26,2),\"\" ).\"\"))\"\n\"+C4/D4\"\n\"+C4/F4\"\n\"+C4/H4\"\n\"C6/D6\"\n\"C12/H12\"\n\"E364\"\n\"G3*1145\"\n\"G3*2620\"\n\"G3*1880\"\n\"IF(OR(B7=\"\"\"\",C7=\"\"\"\"),\"\"\"\",(B7-C7)/B7*100)\"\n\"IF(OR(B7=\"\"\"\",D7=\"\"\"\"),\"\"\"\",(B7-D7)/B7*100)\"\n\"IF(OR(B7=\"\"\"\",E7=\"\"\"\"),\"\"\"\",(B7-E7)/B7*100)\"\n\"'Pass-through'!F25\"\n\"'Pass-through'!B22\"\n\"'Pass-through'!H22\"\n\"General!E27\"\n\"'Pass-through'!B23\"\n\"'Pass-through'!H23\"\n\"IF($I$11=0,\"\"(B)\"\",\"\" \"\")\"\n\"MAX(IF($I$11=0,2*$E17,($E17*(0.01*$I$12*0.646*$I$11+$N$9)-$H17*0.01*$I$12*0.646*$I$11)/$N$9),0.00001)\"\n\"MAX(IF($H17>$F17,$H17,($F17*(0.01*$I$9*0.646*$I$8+$N$9)-$H17*0.01*$I$9*0.646*$I$8)/$N$9),0.00001)\"\n\"IF(H17>F17,\"\"(C)\"\",\"\" \"\")\"\n\"EXP(AA17+0.5*Z17*Z17)\"\n\"EXP(AC17+0.5*Z17*Z17)\"\n\"IF(ISERR(Q17)=1,R17,IF(ISERR(R17)=1,Q17,IF(Q17<R17,Q17,R17)))\"\n\"IF(I17*K17<0,0,IF(ISERR(S17)=1,0,EXP(AF17+1.645*SQRT(AD17))))\"\n\"IF(I17*K17<0,0,IF(ISERR(S17)=1,0,EXP(AG17+1.645*SQRT(AE17))))\"\n\"IF(I17*K17<0,0,IF(ISERR(S17)=1,0,EXP(AF17+2.326*SQRT(AD17))))\"\n\"IF(I17*K17<0,0,IF(ISERR(S17)=1,0,EXP(AG17+2.326*SQRT(AE17))))\"\n\"SQRT(LN(N17*N17+1))\"\n\"LN(I17)-2.326*Z17\"\n\"LN(K17)-2.326*(SQRT(LN(1+((EXP(Z17*Z17)-1)/4))))\"\n\"AB17-0.5*Z17*Z17+0.5*LN(1+((EXP(Z17*Z17)-1)/4))\"\n\"LN(N17*N17+1)\"\n\"LN(1+((EXP(AD17)-1)/O17))\"\n\"LN(S17)-0.5*AD17\"\n\"AF17+(AD17-AE17)/2\"\n\"'Pass-through'!D7*1000\"\n\"EXP(1.128*LN($I$7)-3.828)\"\n\"EXP(0.7852*LN($I$6)-3.49)\"\n\"EXP(0.819*LN($I$7)+3.688)\"\n\"EXP(0.819*LN($I$6)+1.561)\"\n\"$E$20+$E$21\"\n\"$F$20+$F$21\"\n\"'Pass-through'!D9*1000\"\n\"EXP(0.9422*LN($I$7)-1.464)\"\n\"EXP(0.8545*LN($I$6)-1.465)\"\n\"EXP(1.266*LN($I$7)-1.416)\"\n\"EXP(1.266*LN($I$6)-4.661)\"\n\"'Pass-through'!D12*1000\"\n\"EXP(0.8464*LN($I$7)+3.3612)\"\n\"EXP(0.846*LN($I$6)+1.1645)\"\n\"'Pass-through'!D15*1000\"\n\"EXP(1.72*LN($I$7)-6.52)\"\n\"IF(H30>E30,\"\"(C)\"\",\"\" \"\")\"\n\"EXP(0.8473*LN($I$7)+0.8604)\"\n\"EXP(0.8473*LN($I$6)+0.7614)\"\n\"IF(ISERROR(WQS!U18),\"\"\"\",WQS!U18)\"\n\"IF(MIN(General!$E$27,General!K7)=0,\"\"\"\",IF(C7>0,8.34*C7*General!$E$27/(1-General!K7/100),8.34*E7/1000*General!$E$27/(1-General!K7/100)))\"\n\"IF(ISERROR(WQS!U22),\"\"\"\",WQS!U22)\"\n\"IF(ISERROR(WQS!U27),\"\"\"\",WQS!U27)\"\n\"IF(MIN(General!$E$27,General!K14)=0,\"\"\"\",IF(C14>0,8.34*C14*General!$E$27/(1-General!K14/100),\"\"NA\"\"))\"\n\"IF(ISERROR(WQS!U29),\"\"\"\",WQS!U29)\"\n\"IF(General!A21=\"\"\"\",\"\"\"\",General!A21)\"\n\"IF(B19=\"\"\"\",\"\"\"\",8.34*B19*General!E28/(1-(General!J19/100)))\"\n\"IF(B22>0,F22*General!E27*100/(B22/1.547),\"\"\"\")\"\n\"IF(B23>0,F23*General!E27*100/(B23/1.547),\"\"\"\")\"\n\"IF(General!E27>0,General!E27,\"\"\"\")\"\n\"IF(AND(ISNUMBER(F22),ISNUMBER(F24),ISNUMBER(B24)),(F22*B24+F24)/(F22+1),IF(AND(F24=\"\"\"\",ISNUMBER(F22),ISNUMBER(B24)),(F22*B24+100)/(F22+1),\"\"\"\"))\"\n\"IF(AND(ISNUMBER(F23),ISNUMBER(F24),ISNUMBER(B24)),(F23*B24+F24)/(F23+1),IF(AND(F24=\"\"\"\",ISNUMBER(F23),ISNUMBER(B24)),(F23*B24+100)/(F23+1),\"\"\"\"))\"\n\"IF(AND(B6=\"\"\"\",C6=\"\"\"\",D6=\"\"\"\"),\"\"\"\",(8.34*MIN(B6:D6)*General!$E$27)/(1-General!I7/100))\"\n\"IF(AND(F6=\"\"\"\",G6=\"\"\"\"),\"\"\"\",(8.34*MIN(F6,G6)*General!$E$27)/(1-General!K7/100))\"\n\"IF(AND(I6=\"\"\"\",J6=\"\"\"\"),\"\"\"\",(8.34*MIN(I6,J6)*General!$H$27)/(MAX(General!J7,General!K7)/100))\"\n\"IF(AND(E6=\"\"\"\",H6=\"\"\"\",K6=\"\"\"\"),\"\"\"\",MIN(E6,H6,K6))\"\n\"IF(AND(I10=\"\"\"\",J10=\"\"\"\"),\"\"\"\",(8.34*General!B11*General!E27*Inhibition!I10/General!G11))\"\n\"IF(General!A22=\"\"\"\",\"\"\"\",General!A22)\"\n\"IF(ISERROR(K10),\"\"Please input cyanide concentration in sludge to digester on the 'General' tab!\"\",\"\"\"\")\"\n\"IF(C7=\"\"\"\",\"\"\"\",0.8907*C7*General!$K$28/(General!$H$28*(General!$H$29/100)*3046))\"\n\"IF(E7=\"\"\"\",\"\"\"\",0.8907*E7*General!$K$28/General!$K$27*(General!$H$28*(General!$H$29/100)*3046))\"\n\"IF(AND(B7=\"\"\"\",D7=\"\"\"\",F7=\"\"\"\"),\"\"\"\",IF(General!$K$29=\"\"Y\"\",MIN(B7,D7,F7),MIN(B7,F7)))\"\n\"IF(G7=\"\"\"\",\"\"\"\",8.34*G7*(General!$H$29/100)*General!$H$28/(General!K7/100))\"\n\"General!A7\"\n\"MIN('Pass-through'!F7,Inhibition!L6,'Sludge Quality'!H7)\"\n\"B7*General!M7/100\"\n\"IF(General!L7>0,8.34*General!F7*(General!$E$27-General!L7),8.34*General!F7*General!$E$29)\"\n\"B7-C7-D7\"\n\"IF(OR(ISERROR(E7),General!$E$28=0),\"\"\"\",IF(E7<0,\"\"MAIL < 0!\"\",E7/(8.34*General!$E$28)))\"\n\"IF(OR(ISERROR(E7),General!L7=0),\"\"\"\",IF(E7<0,\"\"MAIL < 0!\"\",E7/(8.34*General!$L7)))\"\n\"IF(E19>0,E19/(8.34*General!L19),\"\"\"\")\"\n\"SUM(F156:F162)\"\n\"37*7\"\n\"42*7\"\n\"SUM(A172:A180)\"\n\"SUM(J16:J23)\"\n\"VLOOKUP(WEEKDAY(A3),Sheet2!B1:dayofweek,2)\"\n\"A3+2\"\n\"A3+7\"\n\"VLOOKUP(WEEKDAY(A20),Sheet2!B18:dayofweek,2)\"\n\"C22+1\"\n\"VLOOKUP(WEEKDAY(A34),Sheet2!B34:dayofweek,2)\"\n\"SUM(E1:E155)-3*E3\"\n\"SUM(H12:J12)\"\n\"SUM(D15:D17)\"\n\"SUM(D15*$E$5,E15*$E$6,F15*$E$7,G15*$E$8)\"\n\"SUM(D23:D26)\"\n\"SUM(D33:D40)\"\n\"SUM(D42:D42)\"\n\"SUM(D49:D53)\"\n\"SUM(D70,D74)\"\n\"SUM(D12:D92)\"\n\"SUM(H12,H13,H14,H18,H22,H27,H32,H41,H43,H48,H54,H60,H65,H69,H75,H77,H81,H85,H89)\"\n\"K93\"\n\"SUM(C98:C100)\"\n\"0.04*D2\"\n\"IF(K2=\"\"lre\"\",'Equipment - LRE'!F20,IF(K2=\"\"cable\"\",'Equipment - Cable'!F13,IF(K2=\"\"ethernet\"\",Ethernet!F18,0)))\"\n\"IF(K2=\"\"lre\"\",'Equipment - LRE'!F30,IF(K2=\"\"cable\"\",'Equipment - Cable'!F22,IF(K2=\"\"ethernet\"\",Ethernet!F26,0)))\"\n\"Revenue!A19\"\n\"Revenue!C20\"\n\"IF($K$10=\"\"Yes\"\",Revenue!C32,0)\"\n\"SUM(D19:D22)\"\n\"IF($K$6=\"\"Buy\"\",K3,0)\"\n\"IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",IF($K$2=\"\"LRE\"\",$K3*$I$26*12,$K3*$I$26*12),0))\"\n\"IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",IF($K$2=\"\"LRE\"\",$K3*$I$26*12,$K3*$I$26*12),0))*0.4\"\n\"IF($K$6=\"\"Buy\"\",'Equipment - LRE'!F30,0)\"\n\"IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",'Equipment - LRE'!$F$30*$I$27*12,0))\"\n\"IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",'Equipment - LRE'!$F$30*$I$27*12,0))*0.4\"\n\"IF(K10=\"\"Yes\"\",IF($K$6=\"\"Buy\"\",'Equipment - LRE'!F38,0),0)\"\n\"IF($K$10=\"\"Yes\"\",IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",'Equipment - LRE'!$F$38*$I$27*12,0)),0)\"\n\"IF($K$10=\"\"Yes\"\",IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",'Equipment - LRE'!$F$38*$I$27*12,0)),0)*0.5\"\n\"IF($K$6=\"\"Buy\"\",IF($K$2=\"\"lre\"\",'Install Labor Costs'!$D$31,IF($K$2=\"\"cable\"\",'Install Labor Costs'!$F$31,IF($K$2=\"\"ethernet\"\",'Install Labor Costs'!$F$31,0))),0)\"\n\"IF($K$6=\"\"Buy\"\",0,IF($K$6=\"\"Lease\"\",IF($K$2=\"\"lre\"\",'Install Labor Costs'!$D$31*$I$29*12,IF($K$2=\"\"cable\"\",'Install Labor Costs'!$F$31*$I$29*12,IF($K$2=\"\"ethernet\"\",'Install Labor Costs'!$F$31*$I$29*12,0))),0))\"\n\"K$7\"\n\"'SG&A and Service & Support'!D14*IF($K$7=\"\"SP\"\",0.8,IF($K$7=\"\"PROP\"\",1,0))\"\n\"D30*0.9\"\n\"'SG&A and Service & Support'!$D19*IF($K$7=\"\"SP\"\",0.7,IF($K$7=\"\"PROP\"\",1,0))\"\n\"'SG&A and Service & Support'!$D20*IF($K$7=\"\"SP\"\",0.6,IF($K$7=\"\"PROP\"\",1,0))\"\n\"'SG&A and Service & Support'!$D23\"\n\"'SG&A and Service & Support'!D28*IF($K$7=\"\"SP\"\",0.5,IF($K$7=\"\"PROP\"\",1,0))\"\n\"0.9*E34\"\n\"IF($K$10=\"\"Yes\"\",'SG&A and Service & Support'!$D37,0)\"\n\"SUM(C26:C32)\"\n\"SUM(D26:D35)\"\n\"C23-C36\"\n\"IRR(C38:H38)\"\n\"-D36/(365*($D$2+$D$3))\"\n\"-(D36-D21-D22)/(365*($D$2+$D$3))\"\n\"-(D36-D23)/(365*($D$2+$D$3))\"\n\"Summary!$D2\"\n\"C3*Summary!$D5*252\"\n\"C8*C7\"\n\"C4*Summary!$D6*252\"\n\"Summary!$D7\"\n\"C16*C9\"\n\"-Summary!$D9*C20\"\n\"C17*C13\"\n\"C20+C22+C21\"\n\"Summary!$K12\"\n\"C7*C26*C27\"\n\"C7*C26*(1-C27)\"\n\"C28+C29\"\n\"Summary!$K14\"\n\"C30*C31\"\n\"INT(Summary!D2/24)+1\"\n\"B4*C4\"\n\"Summary!$K$5\"\n\"D4*(1-E4)\"\n\"Summary!D$2\"\n\"2*B4\"\n\"2*B4\"\n\"IF(Summary!D2<200,0,1)\"\n\"IF((INT(((Summary!D2+Summary!D3)-96)/24)+1)>0,(INT(((Summary!D2+Summary!D3)-96)/24)+1),0)\"\n\"IF(Summary!D2>150,1,0)\"\n\"SUM(D4:D16)\"\n\"D18/Summary!$D2\"\n\"IF(Summary!D3=0,0,INT((Summary!$D$3+3)/3))\"\n\"2*B22\"\n\"B23\"\n\"IF(Summary!$D$3<5,0,1)\"\n\"SUM(D22:D25)\"\n\"D18+D26\"\n\"INT(Summary!D2/600)+1\"\n\"Summary!D2\"\n\"SUM(D31:D33)\"\n\"INT(Summary!D2/24)+1\"\n\"B4*C4\"\n\"Summary!$K$5\"\n\"D4*(1-E4)\"\n\"INT(Summary!D$2/48)+1\"\n\"Summary!D$2\"\n\"B4\"\n\"2*B8\"\n\"2*B8\"\n\"IF(Summary!D2<200,0,1)\"\n\"IF((INT(((Summary!D2+Summary!D3)-96)/24)+1)>0,(INT(((Summary!D2+Summary!D3)-96)/24)+1),0)\"\n\"SUM(D4:D19)\"\n\"D20/Summary!D2\"\n\"F20/Summary!D2\"\n\"IF(Summary!D3=0,0,INT((Summary!$D$3+3)/3))\"\n\"B25\"\n\"IF(Summary!$D$3<5,0,1)\"\n\"IF(B27=0,0,1)\"\n\"B24\"\n\"SUM(D24:D29)\"\n\"D20+D30\"\n\"INT(Summary!D2/600)+1\"\n\"Summary!D2\"\n\"SUM(D35:D37)\"\n\"B4*C4\"\n\"Summary!K$5\"\n\"D4*(1-E4)\"\n\"Summary!D2\"\n\"Summary!D2\"\n\"IF((INT(((Summary!D2+Summary!D3)-96)/24)+1)>0,(INT(((Summary!D2+Summary!D3)-96)/24)+1),0)\"\n\"SUM(D4:D12)\"\n\"D13/Summary!D2\"\n\"F13/Summary!D2\"\n\"IF(Summary!D3=0,0,INT((Summary!$D$3+3)/3))\"\n\"2*B18\"\n\"B19\"\n\"B18\"\n\"SUM(D18:D21)\"\n\"D22+D13\"\n\"INT(Summary!D2/600)+1\"\n\"Summary!D2\"\n\"SUM(D27:D29)\"\n\"IF(Summary!D2>299,8,IF(Summary!D2>150,6,4))\"\n\"0.1*Summary!D2\"\n\"Summary!D2/24\"\n\"0.2*Summary!D2\"\n\"0.1*Summary!D2\"\n\"1.5*Summary!$D$3\"\n\"2.25*Summary!$D$3\"\n\"IF(Summary!D2>299,8,IF(Summary!D2>150,6,4))\"\n\"IF(Summary!D2>299,8,IF(Summary!D2>150,6,4))\"\n\"SUM(D4:D24)\"\n\"D25*C27\"\n\"F25*C27\"\n\"D25+D27\"\n\"Summary!D10\"\n\"Summary!D10\"\n\"D28*D30\"\n\"D31/Summary!D2\"\n\"F31/Summary!D2\"\n\"INT((Summary!D2/1000)+1)\"\n\"C14*12*Summary!D11\"\n\"18*Summary!D2\"\n\"48*Summary!D2\"\n\"E23*IF(Summary!K2=\"\"lre\"\",('Equipment - LRE'!F20+'Equipment - LRE'!F30-'Equipment - LRE'!F6),IF(Summary!K2=\"\"cable\"\",('Equipment - Cable'!F13+'Equipment - Cable'!F22-'Equipment - Cable'!F5),IF(Summary!K2=\"\"ethernet\"\",(Ethernet!F18+Ethernet!F26),0)))\"\n\"Summary!K33\"\n\"12*Summary!D2\"\n\"8*Summary!D2\"\n\"IF(Summary!D2>199,1000,IF(Summary!D2>99,500,250))\"\n\"D27\"\n\"SUM(D26:D27)\"\n\"SUM(D19:D23)\"\n\"Summary!K11*Summary!K13*2\"\n\"C36*Revenue!C28*Revenue!C31\"\n\"SUM(D34:D36)\"\n\"INSTR!G7\"\n\"Worksheet!E45\"\n\"Worksheet!E54\"\n\"Worksheet!E61\"\n\"Worksheet!C87\"\n\"Worksheet!E87\"\n\"Worksheet!E70\"\n\"Worksheet!H47\"\n\"Worksheet!E50\"\n\"Worksheet!C89\"\n\"Worksheet!E89\"\n\"Worksheet!E76\"\n\"Worksheet!E81\"\n\"Worksheet!C82\"\n\"INSTR!G7\"\n\"INSTR!G8\"\n\"INSTR!G9\"\n\"IF(F7=0,0,F7/F8)\"\n\"INSTR!G10\"\n\"IF(F11=0,0,(F11+F12)/F11)\"\n\"IF(F13=0,67*F12,F13*F9)\"\n\"F14/F16\"\n\"F17*F18\"\n\"F19/F4\"\n\"F4-F19\"\n\"F23*(F26+F27)\"\n\"F23-F28\"\n\"INSTR!G12\"\n\"E33*H33\"\n\"(1-E33)*H33\"\n\"F29\"\n\"INSTR!G12\"\n\"F19\"\n\"INSTR!G12\"\n\"F28\"\n\"SUM(F33:F35)\"\n\"F33*G41/E41\"\n\"SUM(E46:F46)\"\n\"G46/G$49\"\n\"E49/$G49\"\n\"(E55*E46)/1000000\"\n\"G62/G$65\"\n\"INSTR!G15\"\n\"E70*G65\"\n\"E82*E73\"\n\"E76*E82\"\n\"E82*(E71-1)\"\n\"E82*E74-F82\"\n\"E77*E82-G82\"\n\"E82*E72-E82-E83\"\n\"E82*E75-F83-F82\"\n\"E78*E82-G83-G82\"\n\"F4\"\n\"G49\"\n\"G65\"\n\"CONCATENATE(\"\"E\"\",D460,\"\":E\"\",E460)\"\n\"J9/J19\"\n\"J10/J19\"\n\"J11/J19\"\n\"J12/J19\"\n\"J13/J19\"\n\"J14/J19\"\n\"J15/J19\"\n\"J16/J19\"\n\"J17/J19\"\n\"J18/J19\"\n\"SUM(freq)\"\n\"SUM(K9:K18)\"\n\"J121/J$132\"\n\"SUM(J121:J131)\"\n\"J190/J$201\"\n\"C$16*B17\"\n\"(C18-C17)/C18\"\n\"(C19-C18)/C18\"\n\"C46*D46*E46\"\n\"C46*(1+B47)\"\n\"(F47-F$46)/F$46\"\n\"1.1*D47\"\n\"10*1.1\"\n\"10*0.9\"\n\"(B63-B65)/B65\"\n\"AVERAGE(B68:G69)\"\n\"(B65-B64)/B65\"\n\"D13\"\n\"E13\"\n\"F13\"\n\"D13\"\n\"E13\"\n\"F13\"\n\"SUM(G17:G25)\"\n\"SUM(G29:G35)\"\n\"SUM(G36,G26)\"\n\"CHAR(223)\"\n\"SUM(G55:G57)\"\n\"SUM(G60:G77,G58)\"\n\"SUM(F29:F77)\"\n\"$G$37\"\n\"IF(C6=\"\"yes\"\",(1*F6),IF(C6=\"\"no\"\",(0*F6),\"\"\"\"))\"\n\"IF(SUM(F6:F11)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G6:G11)\"\n\"IF(SUM(F18:F26)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G18:G26)\"\n\"1/11\"\n\"IF(SUM(F32:F42)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G32:G42)\"\n\"IF(C48=\"\"yes\"\",(1*F48),IF(C48=\"\"no\"\",(0*F48),IF(C48=\"\"small extent\"\",(0.33*F48),IF(C48=\"\"large extent\"\",(0.67*F48),\"\"\"\"))))\"\n\"IF(SUM(F48:F87)<>100%,\"\"ERROR\"\",\"\"100%\"\")\"\n\"SUM(G48:G87)\"\n\"SUM(H3:H16)\"\n\"SUM(I3:I15)\"\n\"SUM(H17:N17)\"\n\"SUM(H3:K3)\"\n\"SUM(H3:H17)\"\n\"SUM(G3:G21)\"\n\"SUM(G23:J23)\"\n\"SUM(G3:G20)\"\n\"SUM(G22:M22)\"\n\"G6*G5\"\n\"G7\"\n\"$D$7*E7\"\n\"I7+J7\"\n\"F7+G7\"\n\"IF(E7>$D$8, ($D$8-E7),0)\"\n\"IF(E7<$D$10, ($D$10-E7),0)\"\n\"$D$7\"\n\"($D$10/E7)-$D$7\"\n\"($D$8/E12)-1\"\n\"$E$6\"\n\"J6+K6\"\n\"G6+H6\"\n\"IF(F6>$E$7, ($E$8*(F6-$E$7)),0)\"\n\"IF(F6<$E$9, -(($E$9-F6)),0)\"\n\"$E$6/F6\"\n\"IF(F6<$F$9,-(L6-$E$10),0)\"\n\"IF(F6>$E$7,-(L6-$E$8),0)\"\n\"O6+L6\"\n\"_xll.RiskTriang(F9,F7,F8)\"\n\"IF(F13=0,0,(MAX(($F$31-F13),0)))\"\n\"0-IF(F17=0,0,(MAX(($F$31-F17),0)))\"\n\"IF(F21=0,0,(MAX((F21-$F$31),0)))\"\n\"0-IF(F25=0,0,(MAX((F25-$F$31),0)))\"\n\"F28*F29*($F$10/365)\"\n\"_xll.RiskNormal(F28,F30)\"\n\"F32*F33\"\n\"(F15-F19+F23-F27)/(1+F35)^(F10/365)\"\n\"B3*C3\"\n\"B3*E3\"\n\"B3*G3\"\n\"SUM(B3:B11)\"\n\"D12/B12/10\"\n\"F12/B12/10\"\n\"H12/B12/10\"\n\"'Applicant Overview'!C3\"\n\"'Applicant Overview'!E3\"\n\"'Applicant Overview'!C4:E4\"\n\"'Applicant Overview'!C6\"\n\"'Applicant Overview'!C7\"\n\"'Applicant Overview'!E7\"\n\"'Applicant Overview'!C8\"\n\"'Applicant Overview'!C11\"\n\"'Applicant Overview'!C15\"\n\"'Applicant Overview'!C16\"\n\"'Applicant Overview'!C17\"\n\"'Applicant Overview'!C18\"\n\"'Applicant Overview'!C19\"\n\"'Applicant Overview'!C25\"\n\"'Applicant Overview'!C26\"\n\"'Applicant Overview'!C27\"\n\"'Applicant Overview'!C28\"\n\"'Applicant Skills'!B11\"\n\"'Applicant Skills'!B703\"\n\"D6*G6\"\n\"I6*H6\"\n\"A6+1\"\n\"G12*D12\"\n\"E30/100\"\n\"1/14\"\n\"1/40\"\n\"E57/300\"\n\"1/12\"\n\"36/40\"\n\"36/180\"\n\"E99/5000\"\n\"6/300\"\n\"SUM(J6:J132)\"\n\"SUM(C2:C3)\"\n\"$C$4\"\n\"$C$8\"\n\"$C$13\"\n\"$C$19\"\n\"SUM(C5:C7)\"\n\"$C$22\"\n\"$C$29\"\n\"$C$36\"\n\"$C$42\"\n\"SUM(G3:G11)\"\n\"SUM(C14:C18)\"\n\"SUM(G16:G23)\"\n\"SUM(C23:C28)\"\n\"SUM(C53:C56)\"\n\"$C$167\"\n\"A60*B60\"\n\"C60*4\"\n\"$C$57\"\n\"SUM(C106,C96,C90,C83,C76,C73,C67)\"\n\"C110*2\"\n\"$C$52\"\n\"$C$61\"\n\"SUM(C115:C124)\"\n\"$C$107\"\n\"C60*2\"\n\"SUM(C130,C125)\"\n\"C132/6\"\n\"AVERAGE(C137:C166)\"\n\"SUM(C2:C6)\"\n\"SUM(C9:C9)\"\n\"SUM(C12:C14)\"\n\"12500084\"\n\"75000*4\"\n\"250000*4\"\n\"C27*0.03+C27\"\n\"$C$89\"\n\"A38*B38\"\n\"C38*4\"\n\"$C$7\"\n\"$C$10\"\n\"$C$20\"\n\"$C$15\"\n\"C38*2\"\n\"$C$27\"\n\"$C$35\"\n\"2*(A38*B38)\"\n\"SUM(C50:C51)\"\n\"SUM(C52,C53,C48)\"\n\"C55/6\"\n\"AVERAGE(C59:C88)\"\n\"Example!#REF!\"\n\"Example!A1\"\n\"(B8-15)\"\n\"LOG(A13)\"\n\"STDEV(B13:B24)\"\n\"AVERAGE(A12:B12)\"\n\"LOG(C12)\"\n\"STDEV(D12:D19)\"\n\"LOG(C8)\"\n\"STDEV(D8:D17)\"\n\"LOG(C4)\"\n\"STDEV(D4:D17)\"\n\"LOG(D12)\"\n\"F12/C12\"\n\"I12/C12\"\n\"STDEV(E12:E16)\"\n\"AVERAGE(D12:D16)\"\n\"STDEV(D12:D16)\"\n\"COUNT(D12:D16)\"\n\"D21/(D22^0.5)\"\n\"K17\"\n\"N23*(O23^2)\"\n\"(P25/8)^0.5\"\n\"P23+P24\"\n\"1000*G20\"\n\"AVERAGE(F35:F39)\"\n\"STDEV(F35:F39)\"\n\"COUNT(F35:F39)\"\n\"LOG($D3)\"\n\"NORMSINV($I3)\"\n\"LOG(D3)\"\n\"(F3-3/8)/15.25\"\n\"NORMSINV(I3)\"\n\"(Q3-3/8)/12.25\"\n\"NORMSINV(I3)\"\n\"LOG(X3)\"\n\"NORMSINV(I10)\"\n\"STDEV(T3:T14)\"\n\"STDEV(E3:E17)\"\n\"LOG(G7)\"\n\"STDEV(H7:H16)\"\n\"STDEV(N8:N16)\"\n\"AVERAGE(B3,C3)\"\n\"(F3-3/8)/7.25\"\n\"NORMSINV(G3)\"\n\"LOG(E3)\"\n\"NORMSINV(G3)\"\n\"LOG(E3)\"\n\"F3+1\"\n\"STDEV(J3:J9)\"\n\"LOG(C5)\"\n\"STDEV(D5:D10)\"\n\"LOG(E14)\"\n\"(G14-3/8)/8.25\"\n\"NORMSINV(H14)\"\n\"LOG($E$15)\"\n\"(E23-3/8)/5.25\"\n\"NORMSINV(F23)\"\n\"LOG(C23)\"\n\"NORMSINV(F23)\"\n\"LOG(J23)\"\n\"NORMSINV(F23)\"\n\"NORMSINV(F23)\"\n\"NORMSINV(F23)\"\n\"STDEV(D23:D27)\"\n\"LOG(B6)\"\n\"STDEV(C6:C17)\"\n\"LOG(D5)\"\n\"STDEV(E5:E10)\"\n\"LOG(D6)\"\n\"STDEV(E6:E19)\"\n\"STDEV(E24:E31)\"\n\"STDEV(E35:E40)\"\n\"LOG(A7)\"\n\"STDEV(B7:B14)\"\n\"LOG(A11)\"\n\"STDEV(B11:B30)\"\n\"1/A12\"\n\"LOG(B12)\"\n\"STDEV(C12:C56)\"\n\"STDEV(F2:F311)\"\n\"'Step 2'!D3\"\n\"'Step 2'!D7\"\n\"'Step 2'!D12\"\n\"'Step 2'!D14\"\n\"'Step 2'!D3\"\n\"'Step 2'!D4\"\n\"'Step 2'!D5\"\n\"'Step 2'!D7\"\n\"'Step 2'!D7\"\n\"'Step 2'!D8\"\n\"'Step 2'!D10\"\n\"'Step 2'!D12\"\n\"'Step 2'!D14\"\n\"'Step 2'!D16\"\n\"'Step 2'!D18\"\n\"'Step 3a'!B3\"\n\"'Step 3a'!B9\"\n\"'Step 3a'!B12\"\n\"'Step 3a'!B15\"\n\"'Step 3a'!B18\"\n\"'Step 3a'!B20\"\n\"'Step 3a'!B22\"\n\"'Step 3a'!B24\"\n\"'Step 3a'!B26\"\n\"'Step 3a'!B3\"\n\"'Step 3a'!B4\"\n\"'Step 3a'!B5\"\n\"'Step 3a'!B13\"\n\"'Step 3a'!B16\"\n\"'Step 3a'!B22\"\n\"SUM(E3:E27)\"\n\"SUM(F3:F25)\"\n\"CONCATENATE(D2, \"\" \"\", E2, \"\" \"\", F2)\"\n\"CONCATENATE(J2, \"\", \"\", K2, \"\", \"\", L2, \"\" \"\", M2)\"\n\"SUM(J3:J24)\"\n\"B15+$D$11\"\n\"$D$10\"\n\"A16+1\"\n\"B16*(1-B16*B$15)/(1-B$15*B16*B16-$B$14*(1-B16)^2)\"\n\"B14+I$11\"\n\"B51*(1-B51*B$15)/(1-B$15*B51*B51-$B$49*(1-B51)^2)\"\n\"B86*(1-B86*B$15)/(1-B$15*B86*B86-$B$84*(1-B86)^2)\"\n\"B121*(1-B121*B$15)/(1-B$15*B121*B121-$B$119*(1-B121)^2)\"\n\"B156*(1-B156*B$15)/(1-B$15*B156*B156-$B$154*(1-B156)^2)\"\n\"B191*(1-B191*B$15)/(1-B$15*B191*B191-$B$189*(1-B191)^2)\"\n\"B226*(1-B226*B$15)/(1-B$15*B226*B226-$B$224*(1-B226)^2)\"\n\"B261*(1-B261*B$15)/(1-B$15*B261*B261-$B$259*(1-B261)^2)\"\n\"B296*(1-B296*B$15)/(1-B$15*B296*B296-$B$294*(1-B296)^2)\"\n\"B331*(1-B331*B$15)/(1-B$15*B331*B331-$B$329*(1-B331)^2)\"\n\"B363+1\"\n\"B15\"\n\"INDIRECT(ADDRESS(L366,2))\"\n\"INDIRECT(ADDRESS($M366,B$363))\"\n\"L366+M$364\"\n\"M366+M$364\"\n\"A365\"\n\"IF(B366^2>2*B366*(1-B366),IF((1-B366)^2>B366^2,\"\"aa\"\",\"\"AA\"\"),IF((1-B366)^2>2*B366*(1-B366),\"\"aa\"\",\"\"Aa\"\"))\"\n\"'Worksheet LSTP'!A4\"\n\"'Worksheet LSTP'!E4\"\n\"'Worksheet LSTP'!A6\"\n\"'Worksheet LSTP'!E6\"\n\"'Worksheet LSTP'!A24\"\n\"'Worksheet LSTP'!E24\"\n\"'Worksheet LSTP'!A30\"\n\"'Worksheet LSTP'!E30\"\n\"'Worksheet LSTP'!A8\"\n\"'Worksheet LSTP'!E8\"\n\"'Worksheet LSTP'!A39\"\n\"'Worksheet LSTP'!E39\"\n\"'Worksheet LSTP'!A70\"\n\"'Worksheet LSTP'!E70\"\n\"'Worksheet LSTP'!A52\"\n\"'Worksheet LSTP'!E52\"\n\"'Worksheet LSTP'!A59\"\n\"'Worksheet LSTP'!E59\"\n\"'Worksheet LSTP'!A67\"\n\"'Worksheet LSTP'!E67\"\n\"'Worksheet LSTP'!A78\"\n\"'Worksheet LSTP'!E78\"\n\"'Worksheet LSTP'!A81\"\n\"'Worksheet LSTP'!E81\"\n\"'Worksheet LSTP'!A92\"\n\"'Worksheet LSTP'!E92\"\n\"'Worksheet LSTP'!A100\"\n\"'Worksheet LSTP'!E100\"\n\"'Worksheet LSTP'!A103\"\n\"'Worksheet LSTP'!E103\"\n\"E11*E7\"\n\"E117*LN(E13/E118)\"\n\"10000000*SQRT((2*(2*E14)*E115*10000)/((1.6E-19)*E13))\"\n\"E18\"\n\"I18\"\n\"E18+2*E14+(0.00000001/E27)*(2*E115*1.6E-19*E13*(2*E14))^0.5\"\n\"E19-E39\"\n\"(E115/E116)*(0.64*2*E14 + 0.8*E8)\"\n\"0.1*(1+(E12/E7)^2)*(E15/(E7)^2)\"\n\"E20/(E21*E22) - E25\"\n\"E24+E25\"\n\"(E116)/(E26*0.0001)\"\n\"(E28/E29)*(E33*0.01/(E7*0.0000001))\"\n\"1000*E117*LN(10)*(1+(E115/E116)*(E26/(10*E15))*E34)\"\n\"E70\"\n\"(E35/1000)*LOG10((E37*E36/100)/E33)\"\n\"(F35/1000)*LOG10((F37*F36/100)/F33)\"\n\"(G35/1000)*LOG10((G37*G36/100)/G33)\"\n\"(H35/1000)*LOG10((H37*H36/100)/H33)\"\n\"(I35/1000)*LOG10((I37*I36/100)/I33)\"\n\"(J35/1000)*LOG10((J37*J36/100)/J33)\"\n\"(K35/1000)*LOG10((K37*K36/100)/K33)\"\n\"(L35/1000)*LOG10((L37*L36/100)/L33)\"\n\"(M35/1000)*LOG10((M37*M36/100)/M33)\"\n\"(N35/1000)*LOG10((N37*N36/100)/N33)\"\n\"(O35/1000)*LOG10((O37*O36/100)/O33)\"\n\"(P35/1000)*LOG10((P37*P36/100)/P33)\"\n\"(Q35/1000)*LOG10((Q37*Q36/100)/Q33)\"\n\"(0.000001)*(E8+E39)/(6*E26*0.00000001)\"\n\"E42*E43\"\n\"E45/((E44)^E46)\"\n\"E48/((E44)^E49)\"\n\"E50*E47/(E47+E50)\"\n\"E8-E39\"\n\"2*E60/E53\"\n\"E63*(E7/1000)*(E57/10000)\"\n\"10000000*E59\"\n\"1000000*(E60*10000)*E27*E56\"\n\"1000000*(E60*10000)*(E27)*(1-((E7*0.0001)*(E57*0.001)/(E56+(E7*0.0001)*(E57*0.001)))^2)\"\n\"(E56/(E56+(E7/1000)*(E57/10000)))\"\n\"1000000*(E60*10000)*(E27)*(E56*E63)\"\n\"E62/(1+0.0000005*E67*E62)\"\n\"100*((E64-E70)/E64)\"\n\"ROUND(E64/(1+((E67*E64*0.000001)/E56)),-1)\"\n\"E27*(E7*0.001)\"\n\"E74+E73\"\n\"1000000000000*(E75*E8)/(E70*0.000001)\"\n\"B78\"\n\"E121/((1+E125/100)^E5)\"\n\"1000000000000*(E73*E8)/(E61*0.000001)\"\n\"E78/E78\"\n\"E78/F78\"\n\"E78/G78\"\n\"E78/H78\"\n\"E78/I78\"\n\"E78/J78\"\n\"E78/K78\"\n\"E78/L78\"\n\"E78/M78\"\n\"E78/N78\"\n\"E78/O78\"\n\"E78/P78\"\n\"E78/Q78\"\n\"(E84+1)*E75\"\n\"1000000000000*E85*E8/(E70*0.000001)\"\n\"E122/((1+E125/100)^E5)\"\n\"(E88+E84)/(E84+1)\"\n\"E86*E91*E89*E90\"\n\"E123/((1+E125/100)^E5)\"\n\"(1/(E94*E92*(1+E95/100)))*1000\"\n\"E124*(1+E125/100)^E5\"\n\"E8*(E33*0.000001)*(1+E28)\"\n\"E75*(E96*1000000000)*(E8)^2\"\n\"E101/E100\"\n\"E101/(E96*1000000000)\"\n\"100*(E7*0.001)*E85*E89*E90*E91*(E96*1000000000)*E8^2\"\n\"E104/(E96*1000000000)\"\n\"(E8/E26)*(100000000/1000000)\"\n\"2*((E8-E58-0.5*E67*E70*0.000001)/E7)*(10000000/1000000)\"\n\"(0.000000000008854)*0.000001\"\n\"E113*E112\"\n\"E114*E112\"\n\"B78\"\n\"E86\"\n\"B92\"\n\"B96\"\n\"(1+E125)^E5\"\n\"(1+F125/100)^F5\"\n\"'Cost Summary'!E1\"\n\"E10+E15\"\n\"IF($B$1=\"\"best\"\",E11,IF($B$1=\"\"ml\"\",E12,IF($B$1=\"\"worst\"\",E13)))\"\n\"'Cost Summary'!J8\"\n\"'Cost Summary'!J12\"\n\"F10*F6+F7*F15\"\n\"F20+E20\"\n\"F21+G20\"\n\"'Cost Summary'!K44\"\n\"F22*F9\"\n\"F20-F24\"\n\"(F25)/F20\"\n\"'Cost Summary'!J16\"\n\"'Cost Summary'!J61\"\n\"E28+E29\"\n\"E25-E31\"\n\"F32/F20\"\n\"E32\"\n\"J16+J42+J61\"\n\"SUM(J4:N4)\"\n\"IF($E$1=\"\"best\"\",J12+J8,IF($E$1=\"\"ml\"\",J13+J9,IF($E$1=\"\"worst\"\",J14+J10)))\"\n\"J18+J24+J28+J40+J26\"\n\"SUM(J19:J22)\"\n\"F19*E19\"\n\"F24\"\n\"F24\"\n\"SUM(J29:J38)\"\n\"F36*E36\"\n\"IF($E$1=\"\"best\"\",$G40,IF($E$1=\"\"ML\"\",$H40,IF($E$1=\"\"worst\"\",$I40,0)))\"\n\"J46+J55+J58\"\n\"K47+K49+K51+K55/K6+K58/K6+E53\"\n\"J48+J50+J52+J53\"\n\"K47*K6\"\n\"K49*K6\"\n\"K51*K6\"\n\"$E$53*J6\"\n\"J56\"\n\"10/60\"\n\"E56*$Q$8\"\n\"$E$56*R8\"\n\"IF($E$1=\"\"best\"\",$F$56*$G56*J$6,IF($E$1=\"\"ml\"\",$F$56*$H56*J6, IF($E$1=\"\"worst\"\",$F$56*$I56*J$6)))\"\n\"5/60\"\n\"$E$59*Q8\"\n\"IF($E$1=\"\"best\"\",$F$59*$G59*J$6,IF($E$1=\"\"ml\"\",$F$59*$H59*J6, IF($E$1=\"\"worst\"\",$F$59*$I59*J$6)))\"\n\"J63+J75+J79\"\n\"J65+SUM(J67:J68)+SUM(J70:J73)\"\n\"$E65+SUM($E67:$E68)*J66+SUM($E70:$E73)*J69\"\n\"$Q$8*F65*E65\"\n\"E65*F65*$R$8\"\n\"(E65*F65*$S$8)\"\n\"IF($E$1=\"\"best\"\",$G67*J$66,IF($E$1=\"\"ML\"\",$H67*J$66,IF($E$1=\"\"worst\"\",$I67*J$66,0)))\"\n\"IF($E$1=\"\"best\"\",$G70*J$69,IF($E$1=\"\"ML\"\",$H70*J$69,IF($E$1=\"\"worst\"\",$I70*J$69,0)))\"\n\"SUM(J76:J77)\"\n\"J63*$E$76\"\n\"IF($E$1=\"\"best\"\",$G77*J64,IF($E$1=\"\"ML\"\",$H77*J64,IF($E$1=\"\"worst\"\",$I77*J64,0)))\"\n\"SUM(J80:J85)\"\n\"IF($E$1=\"\"best\"\",$G83*J$64,IF($E$1=\"\"ML\"\",$H83*J$64,IF($E$1=\"\"worst\"\",$I83*J$64,0)))\"\n\"Labor!A2\"\n\"Labor!I2\"\n\"Labor!A5\"\n\"Labor!H69\"\n\"Labor!A73\"\n\"Labor!H141\"\n\"Labor!A144\"\n\"Labor!H236\"\n\"SUM(B3:B7)\"\n\"Infrastructure!H14\"\n\"SUM(B9:B12)\"\n\"D2*C2\"\n\"E2*F2*H2\"\n\"SUM(I8:I66)\"\n\"SUM(I8:I66)\"\n\"SUM(I77:I139)\"\n\"SUM(I77:I139)\"\n\"SUM(I148:I234)\"\n\"SUM(I148:I234)\"\n\"F4*G4\"\n\"C5*D5*E5\"\n\"SUM(H4:H12)\"\n\"SUM(F3:F781)\"\n\"SUM(L9:L10)\"\n\"SUM(L9:L23)\"\n\"SUM(L27:L29)\"\n\"SUM(L35:L41)\"\n\"SUM(L46:L68)\"\n\"SUM(L72:L83)\"\n\"SUM(L122:L135)\"\n\"L24\"\n\"L24\"\n\"L31\"\n\"L31\"\n\"L42\"\n\"L42\"\n\"L69\"\n\"L69\"\n\"L84\"\n\"L84\"\n\"L91\"\n\"L91\"\n\"L118\"\n\"L118\"\n\"L137\"\n\"L137\"\n\"SUM(K143:K150)\"\n\"SUM(K143:K150)\"\n\"G5*F5\"\n\"I5*0.15\"\n\"I5+J5\"\n\"SUM(L5:L10)\"\n\"SUM(L13:L19)\"\n\"SUM(L22:L30)\"\n\"SUM(L33:L33)\"\n\"SUM(L47:L84)\"\n\"SUM(L87:L99)\"\n\"SUM(L128:L138)\"\n\"SUM(L141:L171)\"\n\"SUM(L174:L193)\"\n\"SUM(C11:C20)\"\n\"SUM(C11:C20)\"\n\"COUNTIF(A6:A21,\"\"?\"\")\"\n\"SUM(H6:H21)\"\n\"COUNTIF(A25:A31,\"\"?\"\")\"\n\"SUM(H25:H31)\"\n\"COUNTIF(A38:A62,\"\"?\"\")\"\n\"SUM(H38:H62)\"\n\"COUNTIF(A67:A80,\"\"?\"\")\"\n\"SUM(H67:H80)\"\n\"COUNTIF(A87:A104,\"\"?\"\")\"\n\"SUM(H87:H104)\"\n\"COUNTIF(A107:A111,\"\"?\"\")\"\n\"SUM(H107:H111)\"\n\"A4+A23+A33+A64+A82+A106\"\n\"SUM(H106,H82,H64,H33,H23,H4)\"\n\"IF($H11=1,640,IF($H11=2,320,IF($H11=3,240,IF($H11=4,160,IF($H11=5,80,0)))))\"\n\"IF($H11=1,1.6,IF($H11=2,0.8,IF($H11=3,3,IF($H11=4,15,IF($H11=5,35,0)))))\"\n\"IF($H11=1,0.6,IF($H11=2,0.6,IF($H11=3,0.5,IF($H11=4,0.35,IF($H11=5,0.25,0)))))\"\n\"IF(H24<3,(H24/3)^0.2,(H24/3)^1.8)\"\n\"(H26/4)^0.2\"\n\"IF(H30=0,1,1-(H30/100)*0.7)\"\n\"(H35/4)^0.5\"\n\"L24*L26*L30*L35\"\n\"ROUND((L10+(H9/H16)^L12*H16*L11)*L38,-2)\"\n\"H47*(1+I$46)\"\n\"H47*(1+J$46)\"\n\"H47/$H9\"\n\"ROUND(H47/H41,0)\"\n\"ROUND(H49/6/H39,0)\"\n\"ROUND(IF(H9<10000,1,(-109+69.575*(H9^0.05))*5/7/L51+1)*L24^0.5,0)\"\n\"IF(H11=5,2,IF(H11=4,1.8,IF(H11=3,1.3,IF(H11=2,1,IF(H11=1,0.8,0)))))\"\n\"0.4*B3+0.4*C3+0.2*D3\"\n\"B10+2*C10\"\n\"SUM(B9:B74)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"1/More\"\n\"1/Much\"\n\"Less\"\n\"IF(ISNUMBER(I7),SUM(C7:I7),\"\"\"\")\"\n\"IF(AND(ISNUMBER(J7),ISNUMBER($J$14)),(J7/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER($D$7),1/$D$7,\"\"\"\")\"\n\"IF(ISNUMBER($E$7),1/$E$7,\"\"\"\")\"\n\"IF(ISNUMBER(E8),1/E8,\"\"\"\")\"\n\"IF(ISNUMBER($F$7),1/$F$7,\"\"\"\")\"\n\"IF(ISNUMBER(F8),1/F8,\"\"\"\")\"\n\"IF(ISNUMBER(G7),1/G7,\"\"\"\")\"\n\"IF(ISNUMBER(G8),1/G8,\"\"\"\")\"\n\"IF(ISNUMBER(H7),1/H7,\"\"\"\")\"\n\"IF(ISNUMBER(I7),1/$I$7,\"\"\"\")\"\n\"IF(ISNUMBER(H13),SUM(C13:I13),\"\"\"\")\"\n\"IF(ISNUMBER(C13),SUM(C7:C13),\"\"\"\")\"\n\"IF(ISNUMBER(I12),SUM(I7:I13),\"\"\"\")\"\n\"IF(ISNUMBER($J$14),(C14/$J$14)*100,\"\"\"\")\"\n\"IF(ISNUMBER(I14),SUM(C14:I14),\"\"\"\")\"\n\"$C$5\"\n\"$D$5\"\n\"$E$5\"\n\"$F$5\"\n\"$G$5\"\n\"$H$5\"\n\"$I$5\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",\"\"ERROR\"\"),\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_1),Criteria_1/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_2),Criteria_2/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_3),Criteria_3/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_4),Criteria_4/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_5),Criteria_5/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_6),Criteria_6/100,\"\"\"\")\"\n\"IF(ISNUMBER(Criteria_7),Criteria_7/100,\"\"\"\")\"\n\"IF(ISNUMBER(C29),IF(SUM(C29:I29)=1,\"\" \"\",SUM(C29:I29)),\"\"\"\")\"\n\"IF(AND(ISNUMBER($C$29),ISNUMBER(C31)),SUMPRODUCT($C$29:$I$29,C31:I31),\"\"\"\")\"\n\"IF(ISNUMBER(J31),(J31/SUM($J$31:$J$41))*100,\"\"\"\")\"\n\"$C$29*SUM($C$31:$C$41)\"\n\"$D$29*SUM($D$31:$D$41)\"\n\"$E$29*SUM($E$31:$E$41)\"\n\"$F$29*SUM($F$31:$F$41)\"\n\"$G$29*SUM($G$31:$G$41)\"\n\"$H$29*SUM($H$31:$H$41)\"\n\"$I$29*SUM($I$31:$I$41)\"\n\"SUM($J$31:$J$41)\"\n\"SUM($K$31:$K$41)\"\n\"($C$42/$K$43)*100\"\n\"($D$42/$K$43)*100\"\n\"($E$42/$K$43)*100\"\n\"($F$42/$K$43)*100\"\n\"($G$42/$K$43)*100\"\n\"($H$42/$K$43)*100\"\n\"($I$42/$K$43)*100\"\n\"SUM($C$43:$I$43)\"\n\"SUM($C$42:$I$42)\"\n\"SUM(D7:D12)\"\n\"SUM(D16:D25)\"\n\"D30+SUM(D31:D45)\"\n\"#REF!+SUM(D31:D45)\"\n\"C55*D55\"\n\"SUM(C55:C72)\"\n\"SUM(E55:E71)\"\n\"E73+SUM(D76:D80)\"\n\"SUM(D84:D97)\"\n\"E13\"\n\"E26\"\n\"E46\"\n\"E81\"\n\"E98\"\n\"E112\"\n\"SUM(E115:E120)\"\n\"SUM(D7:D12)\"\n\"SUM(D16:D25)\"\n\"D30+SUM(D31:D45)\"\n\"#REF!+SUM(D31:D45)\"\n\"C55*D55\"\n\"SUM(C55:C72)\"\n\"SUM(E55:E71)\"\n\"E73+SUM(D76:D80)\"\n\"SUM(D84:D97)\"\n\"E13\"\n\"E26\"\n\"E46\"\n\"E81\"\n\"E98\"\n\"E112\"\n\"SUM(E115:E120)\"\n\"SUM(D7:D12)\"\n\"SUM(D16:D25)\"\n\"D30+SUM(D31:D45)\"\n\"#REF!+SUM(D31:D45)\"\n\"C55*D55\"\n\"SUM(C55:C72)\"\n\"SUM(E55:E71)\"\n\"E73+SUM(D77:D81)\"\n\"SUM(D85:D98)\"\n\"E13\"\n\"E26\"\n\"E46\"\n\"E82\"\n\"E99\"\n\"E113\"\n\"SUM(E116:E121)\"\n\"Report!A1\"\n\"(4*Data!B8+3*Data!C8+2*Data!D8+1*Data!E8)/(SUM(Data!B8:F8))\"\n\"Data!H8/Data!$J$3\"\n\"Data!L8/(Data!L8+Data!M8)\"\n\"Data!C209/Data!$J$3\"\n\"Data!H219/Data!$J$3\"\n\"Data!D222/Data!$J$3\"\n\"Data!E233/Data!$E$239\"\n\"Data!H242/Data!$J$3\"\n\"Data!H245/Data!$J$3\"\n\"4+2\"\n\"A3+1\"\n\"A200+1\"\n\"A276+1\"\n\"IF(F12=\"\"M\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"C\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"S\"\",F12,\"\"\"\")\"\n\"IF(P12=\"\"A\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"S\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"R\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"O\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"D\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"X\"\",P12,\"\"\"\")\"\n\"IF(F12=\"\"M\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"C\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"S\"\",F12,\"\"\"\")\"\n\"IF(P12=\"\"A\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"S\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"R\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"O\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"D\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"X\"\",P12,\"\"\"\")\"\n\"IF(F12=\"\"M\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"C\"\",F12,\"\"\"\")\"\n\"IF(F12=\"\"S\"\",F12,\"\"\"\")\"\n\"IF(P12=\"\"A\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"S\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"R\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"O\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"D\"\",P12,\"\"\"\")\"\n\"IF(P12=\"\"X\"\",P12,\"\"\"\")\"\n\"I11*G11*E11\"\n\"I28*G27*E26\"\n\"I30*G29*E29\"\n\"+Summary!D9\"\n\"+Summary!D10\"\n\"+Summary!D11\"\n\"+Summary!D30\"\n\"+Summary!D32\"\n\"+Summary!D31\"\n\"+'Baltimore MD'!$D$2*1000\"\n\"+'Atlanta GA'!$D$2*1000\"\n\"+'New York City'!$D$2*1000\"\n\"+'Orange County CA'!$D$2*1000\"\n\"+'Omaha NE'!$D$2*1000\"\n\"+Philadelphia!$D$2*1000\"\n\"+'Rural CO'!$D$2*1000\"\n\"+'Baltimore MD'!$G$2*1000\"\n\"+'Atlanta GA'!$G$2*1000\"\n\"+'New York City'!$G$2*1000\"\n\"+'Orange County CA'!$G$2*1000\"\n\"+'Omaha NE'!$G$2*1000\"\n\"+Philadelphia!$G$2*1000\"\n\"+'Rural CO'!$G$2*1000\"\n\"+'Baltimore MD'!$D$6\"\n\"+'Atlanta GA'!$D$6\"\n\"+'New York City'!$D$6\"\n\"+'Orange County CA'!$D$6\"\n\"+'Omaha NE'!$D$6\"\n\"+Philadelphia!$D$6\"\n\"+'Rural CO'!$D$6\"\n\"+'Baltimore MD'!$D$23\"\n\"+'Atlanta GA'!$D$23\"\n\"+'New York City'!$D$23\"\n\"+'Orange County CA'!$D$23\"\n\"+'Omaha NE'!$D$23\"\n\"+Philadelphia!$D$23\"\n\"+'Rural CO'!$D$23\"\n\"+A31\"\n\"CONCATENATE(TEXT('Baltimore MD'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$D$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$D$29\"\n\"+'Atlanta GA'!$D$29\"\n\"+'New York City'!$D$29\"\n\"+'Orange County CA'!$D$29\"\n\"+'Omaha NE'!$D$29\"\n\"+Philadelphia!$D$29\"\n\"+'Rural CO'!$D$29\"\n\"+'Baltimore MD'!$E$6\"\n\"+'Atlanta GA'!$E$6\"\n\"+'New York City'!$E$6\"\n\"+'Orange County CA'!$E$6\"\n\"+'Omaha NE'!$E$6\"\n\"+Philadelphia!$E$6\"\n\"+'Rural CO'!$E$6\"\n\"+K9\"\n\"+'Baltimore MD'!$E$23\"\n\"+'Atlanta GA'!$E$23\"\n\"+'New York City'!$E$23\"\n\"+'Orange County CA'!$E$23\"\n\"+'Omaha NE'!$E$23\"\n\"+Philadelphia!$E$23\"\n\"+'Rural CO'!$E$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$E$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$E$29\"\n\"+'Atlanta GA'!$E$29\"\n\"+'New York City'!$E$29\"\n\"+'Orange County CA'!$E$29\"\n\"+'Omaha NE'!$E$29\"\n\"+Philadelphia!$E$29\"\n\"+'Rural CO'!$E$29\"\n\"+'Baltimore MD'!$F$6\"\n\"+'Atlanta GA'!$F$6\"\n\"+'New York City'!$F$6\"\n\"+'Orange County CA'!$F$6\"\n\"+'Omaha NE'!$F$6\"\n\"+Philadelphia!$F$6\"\n\"+'Rural CO'!$F$6\"\n\"+'Baltimore MD'!$F$23\"\n\"+'Atlanta GA'!$F$23\"\n\"+'New York City'!$F$23\"\n\"+'Orange County CA'!$F$23\"\n\"+'Omaha NE'!$F$23\"\n\"+Philadelphia!$F$23\"\n\"+'Rural CO'!$F$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$F$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$F$29\"\n\"+'Atlanta GA'!$F$29\"\n\"+'New York City'!$F$29\"\n\"+'Orange County CA'!$F$29\"\n\"+'Omaha NE'!$F$29\"\n\"+Philadelphia!$F$29\"\n\"+'Rural CO'!$F$29\"\n\"+'Baltimore MD'!$G$6\"\n\"+'Atlanta GA'!$G$6\"\n\"+'New York City'!$G$6\"\n\"+'Orange County CA'!$G$6\"\n\"+'Omaha NE'!$G$6\"\n\"+Philadelphia!$G$6\"\n\"+'Rural CO'!$G$6\"\n\"+'Baltimore MD'!$G$23\"\n\"+'Atlanta GA'!$G$23\"\n\"+'New York City'!$G$23\"\n\"+'Orange County CA'!$G$23\"\n\"+'Omaha NE'!$G$23\"\n\"+Philadelphia!$G$23\"\n\"+'Rural CO'!$G$23\"\n\"CONCATENATE(TEXT('Baltimore MD'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$G$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$G$29\"\n\"+'Atlanta GA'!$G$29\"\n\"+'New York City'!$G$29\"\n\"+'Orange County CA'!$G$29\"\n\"+'Omaha NE'!$G$29\"\n\"+Philadelphia!$G$29\"\n\"+'Rural CO'!$G$29\"\n\"+'Baltimore MD'!$G$3\"\n\"+'Atlanta GA'!$G$3\"\n\"+'New York City'!$G$3\"\n\"+'Orange County CA'!$G$3\"\n\"+'Omaha NE'!$G$3\"\n\"+Philadelphia!$G$3\"\n\"+'Rural CO'!$G$3\"\n\"+K24\"\n\"CONCATENATE(TEXT('Baltimore MD'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Atlanta GA'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('New York City'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Orange County CA'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Omaha NE'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT(Philadelphia!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"CONCATENATE(TEXT('Rural CO'!$I$25,\"\"0.00\"\"),\"\":1\"\")\"\n\"+'Baltimore MD'!$I$29\"\n\"+'Atlanta GA'!$I$29\"\n\"+'New York City'!$I$29\"\n\"+'Orange County CA'!$I$29\"\n\"+'Omaha NE'!$I$29\"\n\"+Philadelphia!$I$29\"\n\"+'Rural CO'!$I$29\"\n\"SUM(B25:C25)\"\n\"F5*'FP Summary'!C38\"\n\"F6*'FP Summary'!$C$38\"\n\"SUM(C5:C29)\"\n\"G6+G7+G9\"\n\"E34\"\n\"'FP Summary'!$C$38*F34\"\n\"G5\"\n\"SUM(G10:G11)+(0.3*G27)\"\n\"SUM(G12:G15)+(0.3*G27) + G20\"\n\"1.75\"\n\"E37*0.8*0.9\"\n\"(0.9*SUM(G21:G26))+(0.4*G27) + G16\"\n\"G28+G19\"\n\"0.8*(G18+G17)\"\n\"(0.9*G29)+ (0.5*G8)\"\n\"(0.5*G8)+ (0.2 *(G17+G18)) + (0.1*G29) + (0.1*SUM(G21:G26))\"\n\"SUM(C34:C42)\"\n\"[1]Formulations!E4\"\n\"[1]Formulations!I4\"\n\"[1]Formulations!M4\"\n\"[1]Formulations!E7\"\n\"[1]Formulations!I7\"\n\"[1]Formulations!M7\"\n\"[1]Formulations!O10\"\n\"[1]Formulations!O10\"\n\"'[1]General System Characteristics'!B18\"\n\"'[1]General System Characteristics'!B18\"\n\"C32*C35\"\n\"C32*C35\"\n\"Productivity!F30\"\n\"Productivity!F30\"\n\"(F57)/8\"\n\"(F57)/8\"\n\"Productivity!B34\"\n\"Productivity!B34\"\n\"Productivity!B34\"\n\"Productivity!B34\"\n\"SUM(F48:F56)\"\n\"'Funding to 1989'!D5\"\n\"C4\"\n\"E4/G4*1000\"\n\"AppendixPriceIndex!H8\"\n\"I4/K4*K$23\"\n\"C4/G4/O4*O$23*1000\"\n\"1+A4\"\n\"AppendixPriceIndex!H12\"\n\"(M5-M4)/M4\"\n\"RATE(R5,0,-M$4,M5)\"\n\"RATE(V5,0,-P$4,P5)\"\n\"AppendixPriceIndex!H16\"\n\"AppendixPriceIndex!H20\"\n\"AppendixPriceIndex!H24\"\n\"AppendixPriceIndex!H28\"\n\"C10/102.5*100\"\n\"AppendixPriceIndex!H32\"\n\"C11/110*100\"\n\"AppendixPriceIndex!H36\"\n\"AppendixPriceIndex!H40\"\n\"C13/111.25*100\"\n\"AppendixPriceIndex!H44\"\n\"C14/9*8\"\n\"AppendixPriceIndex!H48\"\n\"AppendixPriceIndex!H52\"\n\"AppendixPriceIndex!H56\"\n\"RATE(T16,0,-M$15,M16)\"\n\"RATE(X16,0,-P$15,P16)\"\n\"AppendixPriceIndex!H60\"\n\"AppendixPriceIndex!H64\"\n\"AppendixPriceIndex!H68\"\n\"AppendixPriceIndex!H72\"\n\"AppendixPriceIndex!H76\"\n\"AppendixPriceIndex!H80\"\n\"AppendixPriceIndex!H84\"\n\"RATE((COUNT(C4:C14)-1),0,-C4,C14)\"\n\"(C23-C4)/C4\"\n\"RATE((COUNT(C4:C23)-1),0,-C4,C23)\"\n\"RATE((COUNT(C19:C23)-1),0,-C19,C23)\"\n\"RATE((COUNT(C15:C23)-1),0,-C15,C23)\"\n\"'Table 1'!M4\"\n\"1+A5\"\n\"E16*G16\"\n\"E16*H16\"\n\"B16/F16\"\n\"1-G16-F16\"\n\"B23-B5\"\n\"(B23-B5)/B5\"\n\"I25/I5\"\n\"B23-B16\"\n\"F23*100-F16*100\"\n\"B27/B16\"\n\"AVERAGE(B3:B19)\"\n\"INFOSWages!F14\"\n\"'INFOS inputs'!G13\"\n\"(B5*C5)+(D5*E5)\"\n\"SUM(F5:F8)/4\"\n\"G8/G$8*1000\"\n\"(H12-H8)/H8\"\n\"C45-D45\"\n\"AVERAGE(B45:B61)\"\n\"SUM(B3:C3)\"\n\"B3/D3\"\n\"SUM(B3:B9)\"\n\" 23259+14183+21936-15990\"\n\"52848+30314+5038\"\n\"26272+10378\"\n\" 91130-6841-3585-3113-56500\"\n\"1216+1184+2027+31152+6129+4358\"\n\"3153+3971+2069+3518+6723+466+20689\"\n\"B9/B$79*1000\"\n\"C9\"\n\"F9/F$13*1000\"\n\"E79\"\n\"B10/B$65*1000\"\n\"C10\"\n\"E10/E$14*1000\"\n\"D65\"\n\"(B4*1/4)+(B5*3/4)\"\n\"1+C5\"\n\"(105761700+32465700+79517300+54786900+64569000+19776400+83777800)/1000000\"\n\"(118145210+36675250+83359830+58687440+72126460+20133080+100177090)/1000000\"\n\"SUM(C2:C35)\"\n\"SUM(C39:C93)\"\n\"SUM(B3:B7)\"\n\"SUM(B12:B101)\"\n\"SUM(B106:B109)\"\n\"SUM(B114:B151)\"\n\"SUM(B156:B189)\"\n\"SUM(B194:B205)\"\n\"SUM(B210:B211)\"\n\"SUM(B216:B303)\"\n\"SUM(B308:B338)\"\n\"SUM(B348:B384)\"\n\"SUM(B395:B397)\"\n\"SUM(B402:B460)\"\n\"SUM(B465:B600)\"\n\"SUM(B652:B666)\"\n\"SUM(D5:D70)\"\n\"SUM(D77:D163)\"\n\"1/D16\"\n\"D5-E5\"\n\"SUM(D5:D366)\"\n\"SUM(D5:D154)\"\n\"SUM(D5:D366)\"\n\"SUM(D5:D115)\"\n\"SUM(D5:D38)\"\n\"SUM(D5:D115)\"\n\"'Data Analysis'!A2\"\n\"'Data Analysis'!A2\"\n\"'Data Analysis'!B1\"\n\"'Data Analysis'!CO3\"\n\"IF(I5>J5,\"\"Over\"\",\"\"Under\"\")\"\n\"I23\"\n\"I28\"\n\"'Data Analysis'!EJ3\"\n\"I52\"\n\"IF(I48=\"\"Y\"\",\"\"INCLUDES ALL EXTENTS\"\",\"\"ONLY CONSIDERS 4 AND 5 EXTENTS\"\")\"\n\"SUM(I5+I9+I10+I21+I31+I38+I42+I43+I44+I46+I45)\"\n\"SUM(J5+J10+J9+J21+J31+J38+J42+J43+J44+J45+J46)\"\n\"'input-output'!D9\"\n\"'input-output'!D10\"\n\"'input-output'!D11\"\n\"'input-output'!D12\"\n\"'input-output'!D13\"\n\"'input-output'!D14\"\n\"'input-output'!D15\"\n\"'input-output'!D16\"\n\"'input-output'!D17\"\n\"'input-output'!D18\"\n\"'input-output'!D19\"\n\"'input-output'!D20\"\n\"'input-output'!D21\"\n\"'input-output'!D22\"\n\"'input-output'!D23\"\n\"'input-output'!D24\"\n\"'input-output'!D25\"\n\"'input-output'!D26\"\n\"'input-output'!D27\"\n\"'input-output'!D28\"\n\"'input-output'!D29\"\n\"'input-output'!D30\"\n\"'input-output'!D31\"\n\"'input-output'!D32\"\n\"'input-output'!D33\"\n\"'input-output'!D34\"\n\"'input-output'!D35\"\n\"'input-output'!D36\"\n\"'input-output'!D37\"\n\"'input-output'!D38\"\n\"'input-output'!D39\"\n\"'input-output'!D40\"\n\"'input-output'!D41\"\n\"'input-output'!D42\"\n\"'input-output'!D43\"\n\"'input-output'!D44\"\n\"'input-output'!F10\"\n\"'input-output'!F11\"\n\"'input-output'!F12\"\n\"'input-output'!F13\"\n\"'input-output'!F14\"\n\"'input-output'!F15\"\n\"IF(D2=\"\"x\"\",\"\"CE 1030\"\", \"\"(no CE 1030 )\"\")\"\n\"IF(E2=\"\"x\"\",\"\" CE 2000 \"\",\"\"no CE 2000 \"\")\"\n\"IF(F2=\"\"x\"\",\"\"CE 2001\"\",\"\"no CE 2001\"\")\"\n\"IF(H2=\"\"x\"\",\"\"CE 2020\"\", \"\"no CE 2020\"\")\"\n\"IF(I2=\"\"x\"\",\"\"ES 3004\"\", \"\"no ES 3004\"\")\"\n\"IF(T2=\"\"x\"\",\"\"CE 3041\"\", \"\"no CE 3041\"\")\"\n\"IF(D$2=\"\"x\"\",0.5,0)\"\n\"IF(E$2=\"\"x\"\",1,0)\"\n\"IF(J$2=\"\"x\"\",0,0)\"\n\"IF(M$2=\"\"x\"\",0.25,0)\"\n\"IF(Y$2=\"\"x\"\",0.75,0)\"\n\"IF(AG$2=\"\"x\"\",0.9,0)\"\n\"SUM(CX3:EI3)\"\n\"SUM(B5:B7)\"\n\"B4/$B$46\"\n\"IF(S2=\"\"x\"\",\"\"CE 3030\"\", \"\"no CE 3030 \"\")\"\n\"IF(AM2=\"\"x\"\",\"\"ES 2503\"\", \"\"no ES 2503 \"\")\"\n\"IF(AN2=\"\"x\"\",\"\"ES 3001\"\", \"\"no ES 3001\"\")\"\n\"IF(AO2=\"\"x\"\",\"\"EE 3601\"\", \"\"no EE 3601\"\")\"\n\"IF(AG$2=\"\"x\"\",0.1,0)\"\n\"IF('input-output'!$I$48=\"\"Y\"\", 'Data Analysis'!CL5,'Data Analysis'!CM5)\"\n\"IF(D$2=\"\"x\"\",D5,0)\"\n\"SUM(AU5:CI5)\"\n\"SUM(IF(AU5>=4,AU5,0)+IF(AV5>=4,AV5,0)+IF(AW5>=4,AW5,0)+IF(AX5>=4,AX5,0)+IF(AY5>=4,AY5,0)+IF(AZ5>=4,AZ5,0)+IF(BA5>=4,BA5,0)+IF(BB5>=4,BB5,0)+IF(BC5>=4,BC5,0)+IF(BD5>=4,BD5,0)+IF(BE5>=4,BE5,0)+IF(BF5>=4,BF5,0)+IF(BG5>=4,BG5,0)+IF(BH5>=4,BH5,0)+IF(BI5>=4,BI5,0)+IF(BJ5>=4,BJ5,0)+IF(BK5>=4,BK5,0)+IF(BL5>=4,BL5,0)+IF(BM5>=4,BM5,0)+IF(BN5>=4,BN5,0)+IF(BO5>=4,BO5,0)+IF(BP5>=4,BP5,0)+IF(BQ5>=4,BQ5,0)+IF(BR5>=4,BR5,0)+IF(BS5>=4,BS5,0)+IF(BT5>=4,BT5,0)+IF(BU5>=4,BU5,0)+IF(BV5>=4,BV5,0)+IF(BW5>=4,BW5,0)+IF(BX5>=4,BX5,0)+IF(BY5>=4,BY5,0)+IF(BZ5>=4,BZ5,0)+IF(CA5>=4,CA5,0)+IF(CB5>=4,CB5,0)+IF(CC5>=4,CC5,0)+IF(CD5>=4,CD5,0)+IF(CE5>=4,CE5,0)+IF(CF5>=4,CF5,0)+IF(CG5>=4,CG5,0)+IF(CH5>=4,CH5,0)+IF(CI5>=4,CI5,0))\"\n\"IF(L2=\"\"x\"\",\"\"CE 3010\"\", \"\"-\"\")\"\n\"IF(G2=\"\"x\"\",\"\"CE 2002\"\", \"\"-\"\")\"\n\"IF(J2=\"\"x\"\",\"\"CE 3006\"\", \"\"-\"\")\"\n\"IF(K2=\"\"x\"\",\"\"CE 3008\"\", \"\"-\"\")\"\n\"IF(R2=\"\"x\"\",\"\"CE 3026\"\", \"\"-\"\")\"\n\"IF(AE2=\"\"x\"\",\"\"CE 4007\"\", \"\"-\"\")\"\n\"IF(AF2=\"\"x\"\",\"\"CE 4017\"\", \"\"-\"\")\"\n\"IF(T2=\"\"x\"\",\"\"CE 3041\"\", \"\"-\"\")\"\n\"IF(U2=\"\"x\"\",\"\"CE 3044\"\", \"\"-\"\")\"\n\"IF(AH2=\"\"x\"\",\"\"CE 4046\"\", \"\"-\"\")\"\n\"IF(AI2=\"\"x\"\",\"\"CE 4048\"\", \"\"-\"\")\"\n\"IF(Y2=\"\"x\"\",\"\"CE 3059\"\", \"\"-\"\")\"\n\"IF(Z2=\"\"x\"\",\"\"CE 3060\"\", \"\"-\"\")\"\n\"IF(AA2=\"\"x\"\",\"\"CE 3061\"\", \"\"-\"\")\"\n\"IF(AB2=\"\"x\"\",\"\"CE 3062\"\", \"\"-\"\")\"\n\"IF(AJ2=\"\"x\"\",\"\"CE 4060\"\", \"\"-\"\")\"\n\"IF(AK2=\"\"x\"\",\"\"CE 4061\"\", \"\"-\"\")\"\n\"IF(AC2=\"\"x\"\",\"\"CE 3070\"\", \"\"-\"\")\"\n\"IF(AD2=\"\"x\"\",\"\"CE 3074\"\", \"\"-\"\")\"\n\"IF(AL2=\"\"x\"\",\"\"CE 4071\"\", \"\"-\"\")\"\n\"SUM(B10:B19)\"\n\"IF(V2=\"\"x\"\",\"\"CE 3050\"\", \"\"-\"\")\"\n\"IF(W2=\"\"x\"\",\"\"CE 3051\"\", \"\"-\"\")\"\n\"IF(X2=\"\"x\"\",\"\"CE 3054\"\", \"\"-\"\")\"\n\"IF(AG2=\"\"x\"\",\"\"CE 355X\"\", \"\"-\"\")\"\n\"IF(M2=\"\"x\"\",\"\"CE 3020\"\", \"\"-\"\")\"\n\"IF(N2=\"\"x\"\",\"\"CE 3021\"\", \"\"-\"\")\"\n\"IF(O2=\"\"x\"\",\"\"CE 3022\"\", \"\"-\"\")\"\n\"IF(P2=\"\"x\"\",\"\"CE 3023\"\", \"\"-\"\")\"\n\"IF(Q2=\"\"x\"\",\"\"CE 3024\"\", \"\"-\"\")\"\n\"IF(AQ2=\"\"x\"\",\"\"CH 1010\"\", \"\"-\"\")\"\n\"IF(AR2=\"\"x\"\",\"\"CH 1020\"\", \"\"-\"\")\"\n\"IF(AP2=\"\"x\"\",\"\"MA 2011\"\", \"\"-\"\")\"\n\"SUM(B21:B29)\"\n\"'input-output'!D9\"\n\"IF(D2=\"\"x\"\",1, 0)\"\n\"IF(H2=\"\"x\"\",1, 0)\"\n\"IF(T2=\"\"x\"\",1, 0)\"\n\"IF(S2=\"\"x\"\",1, 0)\"\n\"IF(AM2=\"\"x\"\",1, 0)\"\n\"IF(L2=\"\"x\"\",1, 0)\"\n\"IF(G2=\"\"x\"\",1, 0)\"\n\"IF(J2=\"\"x\"\",1, 0)\"\n\"IF(R2=\"\"x\"\",1, 0)\"\n\"IF(AE2=\"\"x\"\",1, 0)\"\n\"IF(T2=\"\"x\"\",1, 0)\"\n\"IF(AH2=\"\"x\"\",1, 0)\"\n\"IF(Y2=\"\"x\"\",1, 0)\"\n\"IF(AJ2=\"\"x\"\",1, 0)\"\n\"IF(AC2=\"\"x\"\",1, 0)\"\n\"IF(AL2=\"\"x\"\",1, 0)\"\n\"SUM(B31:B36)\"\n\"IF(V2=\"\"x\"\",1, 0)\"\n\"IF(AG2=\"\"x\"\",1, 0)\"\n\"IF(M2=\"\"x\"\",1, 0)\"\n\"IF(X2=\"\"x\"\",1, 0)\"\n\"SUM(B4+B8+B9+B20+B30+B37+B41+B42+B43+B44+B45)\"\n\"C45\"\n\"C44\"\n\"C43\"\n\"C42\"\n\"C41\"\n\"C37\"\n\"C30\"\n\"C20\"\n\"C9\"\n\"C8\"\n\"C4\"\n\"B45\"\n\"B44\"\n\"B43\"\n\"B42\"\n\"B41\"\n\"B37\"\n\"B30\"\n\"B20\"\n\"B9\"\n\"B8\"\n\"B4\"\n\"I37\"\n\"G37-B37\"\n\"I37-B37\"\n\"A40-A39\"\n\"22.1*(E40/(H39*C40))*D40\"\n\"G39+F40\"\n\"ROUND(E3*0.827,0)\"\n\"7+3\"\n\"7+3\"\n\"7+3\"\n\"7+3\"\n\"+C5/F5\"\n\"+C5/E5\"\n\"+C5/C$16\"\n\"+G5/G$16\"\n\"FREQUENCY(K5:K14,P5:P15)\"\n\"FREQUENCY(L5:L14,P5:P15)\"\n\"FREQUENCY(M5:M14,P5:P15)\"\n\"+Q5\"\n\"+U5+Q6\"\n\"AVERAGE(C5:C14)\"\n\"STDEV(C5:C14)\"\n\"+C17/C16\"\n\"AVERAGE(C5:C9)\"\n\"STDEV(C5:C9)\"\n\"AVERAGE(C10:C14)\"\n\"STDEV(C10:C14)\"\n\"+'Data Entry'!$B5\"\n\"+'Data Entry'!C5\"\n\"+(E6-D6)/D6\"\n\"+B6\"\n\"+'Data Entry'!$D5\"\n\"+B5\"\n\"+'Comparisons--Raw & Normalized'!C5\"\n\"+'Comparisons--Raw & Normalized'!C6/'Comparisons--Raw & Normalized'!C6\"\n\"+'Comparisons--Raw & Normalized'!D6/'Comparisons--Raw & Normalized'!C6\"\n\"+'Comparisons--Raw & Normalized'!E6/'Comparisons--Raw & Normalized'!C6\"\n\"+D5+1500\"\n\"+C$6*B7\"\n\"SUM(F2:F68)\"\n\"5360/62\"\n\"J1\"\n\"J3\"\n\"J32\"\n\"#REF!\"\n\"J76\"\n\"J70\"\n\"J144\"\n\"SUM(C5:L5)\"\n\"SUM(C6:M6)\"\n\"SUM(C7:K7)\"\n\"SUM(C6:Q6)\"\n\"SUM(C5:K5)\"\n\"B10/$B$16\"\n\"E10/$E$16\"\n\"SUM(B10:B15)\"\n\"B7\"\n\"B14\"\n\"B20\"\n\"B6\"\n\"B13\"\n\"B20\"\n\"B7\"\n\"B14\"\n\"B20\"\n\"B6\"\n\"B13\"\n\"B20\"\n\"SUM(C1:C123)\"\n\"RANK(D2,D2:D16)\"\n\"PRODUCT(E2,0.5)\"\n\"RANK(I2,I2:I15)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K13,1)\"\n\"RANK(D3,D2:D16)\"\n\"RANK(I3,I2:I15)\"\n\"RANK(K3,K2:K13,1)\"\n\"RANK(D4,D2:D16)\"\n\"RANK(I4,I2:I15)\"\n\"RANK(K4,K2:K13,1)\"\n\"RANK(D5,D2:D16)\"\n\"RANK(I5,I2:I15)\"\n\"RANK(K5,K2:K13,1)\"\n\"RANK(D2,D2:D30)\"\n\"PRODUCT(E2,0.5)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K4,1)\"\n\"RANK(D3,D2:D30)\"\n\"RANK(K3,K2:K4,1)\"\n\"RANK(D4,D2:D30)\"\n\"RANK(K4,K2:K4,1)\"\n\"RANK(D5,D2:D30)\"\n\"RANK(K5,K2:K13,1)\"\n\"RANK(D6,D2:D30)\"\n\"RANK(K6,K2:K13,1)\"\n\"PRODUCT(E2,0.5)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,$K$2:$K$12,1)\"\n\"RANK(D2,D2:D30)\"\n\"PRODUCT(E2,0.5)\"\n\"SUM(F2,H2,J2)\"\n\"RANK(K2,K2:K8,1)\"\n\"RANK(D3,D2:D30)\"\n\"RANK(K3,K2:K8,1)\"\n\"B2+1\"\n\"SUM(B3:L3)\"\n\"A3+1\"\n\"C3/2*0.5 + D3/2*1 + E3/2*0.25 + F3/2*0.1\"\n\"B3\"\n\"B2+1\"\n\"SUM(B3:L3)\"\n\"A3+1\"\n\"INT(INT(C3/2)*0.75) + INT(INT(D3/2)*1) + INT(INT(E3/2)*0.25) + INT(INT(F3/2)*0.1)\"\n\"B3\"\n\"B2+1\"\n\"SUM(B3:L3)\"\n\"A3+1\"\n\"ROUND(INT(C3/2)*0.75,0) + ROUND(INT(D3/2)*1,0) + ROUND(INT(E3/2)*0.25,0) + ROUND(INT(F3/2)*0.1,0)\"\n\"B3\"\n\"O1+1\"\n\"SUM(B3:L3)\"\n\"A3+1\"\n\"(ROUND(INT(C3/2)*0.75,0) + ROUND(INT(D3/2)*1,0) + ROUND(INT(E3/2)*0.25,0) + ROUND(INT(F3/2)*0.1,0))\"\n\"B3*O$2\"\n\"C52\"\n\"ROUND(C2*(1-B3),0)\"\n\"ROUND(C52*(1-H3),0)\"\n\"1-((C2-C12)/C2)\"\n\"ROUND(E2*(D12),0)\"\n\"O1+1\"\n\"SUM(B3:L3)\"\n\"1-O2\"\n\"A3+1\"\n\"(ROUND(INT(C3/2)*0.75,0) + ROUND(INT(D3/2)*1,0) + ROUND(INT(E3/2)*0.25,0) + ROUND(INT(F3/2)*0.1,0))\"\n\"B3*(1-O4)\"\n\"(RAND()*O$3 + 0.5*O$3)\"\n\"O1+1\"\n\"COUNTIF(Y4:Y23,2)\"\n\"SUM(B3:L3)\"\n\"1-O2\"\n\"A3+1\"\n\"(ROUND(INT(C3/2)*0.75,0) + ROUND(INT(D3/2)*1,0) + ROUND(INT(E3/2)*0.25,0) + ROUND(INT(F3/2)*0.1,0))\"\n\"B3*(1-O4)\"\n\"MIN((RAND()*O$3 + 0.5*O$3)*$Y4,1)\"\n\"IF(RAND()<0.01, 2, 1)\"\n\"(ROUND(INT(C4/2)*0.75,0) + ROUND(INT(D4/2)*1,0) + ROUND(INT(E4/2)*0.25,0) + ROUND(INT(F4/2)*0.1,0))*(1-O5)\"\n\"SUMPRODUCT($B$4:$E$4, B3:E3)\"\n\"SUMPRODUCT($B$4:$E$4, B7:E7)\"\n\"H7-F7\"\n\"B3+C3+D3\"\n\"SUMPRODUCT($B$3:$D$3*6,B6:D6)\"\n\"E6-G6\"\n\"SUMPRODUCT(F19:L19,F20:L20)\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"SUMPRODUCT($B$3:$C$3, B4:C4)\"\n\"F7-D7\"\n\"B3\"\n\"F11-B11\"\n\"C3\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"B4+B12\"\n\"B20+C12\"\n\"B16-B18\"\n\"B12*B8\"\n\"SUM(B27:G27)\"\n\"B20*$B$5\"\n\"SUM(H27:H28)\"\n\"IF(M9<M$6*A$5/100, \"\"sa\"\", \"\"\"\")\"\n\"IF(M9<M$6*A$5/100, \"\"sa\"\", \"\"\"\")\"\n\"(88272/24)/2*3\"\n\"SUM(D6:D56)\"\n\"YEAR(NOW())+1-1964\"\n\"YEAR(NOW())+1-1974\"\n\"YEAR(NOW())+1-1991\"\n\"YEAR(NOW())+1-1999+18\"\n\"YEAR(NOW())+1-1965\"\n\"YEAR(NOW())+1-1998\"\n\"YEAR(NOW())+1-1988\"\n\"YEAR(NOW())+1-1998+7\"\n\"60-5-COUNTBLANK(C4:C59)\"\n\"+C3/E3\"\n\"+C3/J3\"\n\"+C3/L3\"\n\"(C4/E4)/(F4/10000)\"\n\"C25/E25\"\n\"+C29/L30\"\n\"+C31/E31\"\n\"C35/L35\"\n\"+D83/L83\"\n\"A3+B3\"\n\"H2:H464*0.7\"\n\"H2*1.5\"\n\"6\"\n\"1\"\n\"10^_xll.RiskNormal(LOG(C1),C2)\"\n\"SUM(C8:F8)\"\n\"_xll.RiskOutput() + LOG(G8)\"\n\"_xll.RiskOutput() + LOG(C8)\"\n\"C8/$G8\"\n\"(10^_xll.RiskNormal(LOG(C$5),C$6))/100\"\n\"C11*C8\"\n\"(10^_xll.RiskNormal(LOG(C$3),C$4))/100\"\n\"LOG(G16)\"\n\"C17*C16\"\n\"C3\"\n\"_xll.RiskBinomial(1,D3)\"\n\"_xll.RiskBeta(F3,E3)\"\n\"IF((G3-H3+1)<1,1,G3-H3+1)\"\n\"H3+1\"\n\"I3\"\n\"L3/K3\"\n\"B3*C4\"\n\"I4/I4*K4\"\n\"J4/I4*K4\"\n\"K4*L3\"\n\"L4*K3\"\n\"_xll.RiskOutput(\"\"Finish product / Results (with eff rate)\"\") + B7*C8\"\n\"+  _xll.RiskBinomial(1,D8)\"\n\"M3*M4*M5*M6*M7*M8\"\n\"B47/$B$54\"\n\"SUM(B47:B53)\"\n\"SUM(B58:B61)\"\n\"100/2600\"\n\"SUM(G18:G24)\"\n\"SUM(G28:G38)\"\n\"SUM(G39,G25)\"\n\"SUM(G59:G61)\"\n\"SUM(D21:D80,E21:E80)\"\n\"SUM(F59:F77)\"\n\"$G$40\"\n\"CONCATENATE('Sheet 1'!K46,\"\" - \"\",'Sheet 1'!K70)\"\n\"CONCATENATE(J16,\"\" - \"\",K16)\"\n\"'Sheet 1'!R67\"\n\"'Sheet 1'!R91\"\n\"'Sheet 1'!A50\"\n\"'Sheet 1'!A74\"\n\"'Sheet 1'!S63\"\n\"'Sheet 1'!S87\"\n\"'Sheet 1'!R49\"\n\"'Sheet 1'!R73\"\n\"J16\"\n\"'Sheet 1'!B52\"\n\"K16\"\n\"SUM(J19:J32)\"\n\"\"\"Modeling Enrollment for Fall \"\" & A50 & \"\" and Beyond\"\"\"\n\"SUM(D6:D21)\"\n\"SUM(D5:Q5)\"\n\"SUM(C6:Q6)\"\n\"SUM(K3+1)\"\n\"SUM(C20:Q20)\"\n\"SUM(C6:C21)\"\n\"SUM(R6:R19)\"\n\"SUM(S20:S21)\"\n\"SUM(D6:D20)/D5\"\n\"SUM(D6:Q20)/R5\"\n\"Sheet3!G13\"\n\"SUM(D6/D$5)*(1+$F$26)\"\n\"SUM(D20/D$5)\"\n\"1 - SUM(D28:D42)\"\n\"Sheet3!G22\"\n\"SUM(A7)\"\n\"SUM(R6)\"\n\"SUM(R7)\"\n\"SUM(R8)\"\n\"SUM(R9)\"\n\"SUM(R10)\"\n\"SUM(R11)\"\n\"SUM(R12)\"\n\"SUM(R13)\"\n\"SUM(R14)\"\n\"SUM(R15)\"\n\"SUM(R16)\"\n\"SUM(R17)\"\n\"SUM(R18)\"\n\"SUM(R19)\"\n\"($F$46*C6) + C6\"\n\"SUM(D28*D$48)\"\n\"SUM(R67-R68)\"\n\"Sheet3!G24\"\n\"SUM(A50)\"\n\"SUM(R49)\"\n\"SUM(R50)\"\n\"SUM(R51)\"\n\"SUM(R52)\"\n\"SUM(R53)\"\n\"SUM(R54)\"\n\"SUM(R55)\"\n\"SUM(R56)\"\n\"SUM(R57)\"\n\"SUM(R58)\"\n\"SUM(R59)\"\n\"SUM(R60)\"\n\"SUM(R61)\"\n\"SUM(R62)\"\n\"($F$70*C6) + C6\"\n\"SUM(D28*D$72)\"\n\"SUM(K3)\"\n\"SUM(R5)\"\n\"SUM(K46)\"\n\"SUM(R22)\"\n\"SUM(K70)\"\n\"SUM(R65)\"\n\"SUM(A74)\"\n\"SUM(R89)\"\n\"G7-H7-I7\"\n\"SUM(G7:G216)\"\n\"SUM(H9:H216)\"\n\"G217-H218-I219\"\n\"IF(OR(AND(J2,K2),AND(J2,L2),AND(K2,L2)),\"\"Choose for one only\"\",\"\"\"\")\"\n\"\"\"IP\"\"\"\n\"TRUE\"\n\"\"\"MS\"\"&\"\"&\"\"&\"\"E\"\"\"\n\"SUM(BA28:BA143)\"\n\"IF(E28>2,E28,0)\"\n\"Instructions!C18\"\n\"Instructions!C19\"\n\"Instructions!C20\"\n\"TODAY()\"\n\"Instructions!C21\"\n\"'course list'!AJ3&\"\" \"\"&'course list'!AK3\"\n\"'course list'!AL3\"\n\"'course list'!AH3\"\n\"'course list'!Z3&\"\" \"\"&'course list'!AA3\"\n\"'course list'!AB3\"\n\"'course list'!X3\"\n\"'course list'!Z10&\"\" \"\"&'course list'!AA10\"\n\"'course list'!AB10\"\n\"'course list'!X10\"\n\"'course list'!AT8&\"\" \"\"&'course list'!AU8\"\n\"'course list'!AV8\"\n\"'course list'!AT10&\"\" \"\"&'course list'!AU10\"\n\"'course list'!AV10\"\n\"'course list'!P3&\"\" \"\"&'course list'!Q3\"\n\"'course list'!R3\"\n\"'course list'!N3\"\n\"'course list'!P10&\"\" \"\"&'course list'!Q10\"\n\"'course list'!R10\"\n\"'course list'!N10\"\n\"'course list'!P15&\"\" \"\"&'course list'!Q15\"\n\"'course list'!R15\"\n\"'course list'!N15\"\n\"SUM(D35:D46)+SUM(D22:D29)+SUM(D13:D20)\"\n\"'course list'!BA26\"\n\"D3+1\"\n\"D3+1\"\n\"D3+1\"\n\"SUM(D6:AJ6)\"\n\"SUM(D5:D23)\"\n\"SUM(AK29:AK36)\"\n\"AK27+AK37\"\n\"SUM(B2:B49)\"\n\"SUM(B59:B70)\"\n\"SUM(B73:B81)\"\n\"SUM(B86:B93)\"\n\"IF(SUM(D12:D109)>0,SUM(F12:F109)/SUM(D12:D109),0)\"\n\"IF(SUM(D42:D94)>0,SUM(F42:F94)/SUM(D42:D94),0)\"\n\"SUM(D26:D38)+D58\"\n\"IF(SUM(D63:D75)>0,SUM(F63:F75)/SUM(D63:D75),0)\"\n\"SUM(D42:D75)\"\n\"SUM(D12:D110)\"\n\"IF(E12=\"\"A\"\",D12*4,IF(E12=\"\"B\"\",D12*3,IF(E12=\"\"C\"\",D12*2,IF(E12=\"\"D\"\",D12*1,IF(E12=\"\"F\"\",0,\"\"\"\")))))\"\n\"IF(SUM(D12:D111)>0,SUM(F12:F111)/SUM(D12:D111),0)\"\n\"IF(SUM(D44:D96)>0,SUM(F44:F96)/SUM(D44:D96),0)\"\n\"SUM(D26:D40)+D60\"\n\"IF(SUM(D65:D77)>0,SUM(F65:F77)/SUM(D65:D77),0)\"\n\"SUM(D44:D77)\"\n\"IF(E12=\"\"A\"\",D12*4,IF(E12=\"\"B\"\",D12*3,IF(E12=\"\"C\"\",D12*2,IF(E12=\"\"D\"\",D12*1,IF(E12=\"\"F\"\",0,\"\"\"\")))))\"\n\"'ML WC293'!Q22+'MLWC 475'!Q26+'ML Kly. Gal. Vac.'!Q26+'ML Acc.Manifold'!Q22\"\n\"'ML WC293'!K24+'MLWC 475'!K28+'ML Kly. Gal. Vac.'!K28+'ML Acc.Manifold'!K29\"\n\"'ML WC293'!K27+'MLWC 475'!K29+'MLWC 475'!K31+'ML Kly. Gal. Vac.'!K31+'ML Kly. Gal. Vac.'!K32+'ML Acc.Manifold'!K32\"\n\"'ML WC293'!E31+'MLWC 475'!E35+'ML Kly. Gal. Vac.'!E34+'ML Acc.Manifold'!E35\"\n\"'ML WC293'!K29+'MLWC 475'!K32+'ML Acc.Manifold'!K33\"\n\"'ML WC293'!K30+'MLWC 475'!K34+'ML Kly. Gal. Vac.'!K33+'ML Acc.Manifold'!K34\"\n\"'ML WC293'!K18+'MLWC 475'!K22+'ML Kly. Gal. Vac.'!K21+'ML Acc.Manifold'!K21\"\n\"'ML WC293'!K26+'MLWC 475'!K30+'ML Kly. Gal. Vac.'!K30+'ML Acc.Manifold'!K31\"\n\"SUM(D28:D33)\"\n\"G10*H10\"\n\"SUM(E11:E21)\"\n\"SUM(K10:K30)\"\n\"SUM(E31:K31)\"\n\"Q31\"\n\"SUM(E33+E34)\"\n\"G10*H10\"\n\"SUM(E11:E25)\"\n\"SUM(K10:K34)\"\n\"SUM(E35:K35)\"\n\"Q35\"\n\"SUM(E37+E38)\"\n\"G10*H10\"\n\"2070/2\"\n\"9*8*22\"\n\"22*9\"\n\"SUM(E11:E25)\"\n\"SUM(K10:K33)\"\n\"SUM(E34:K34)\"\n\"Q34\"\n\"SUM(E36+E37)\"\n\"C11*D11\"\n\"SUM(E11:E26)\"\n\"SUM(K10:K34)\"\n\"SUM(E35:K35)\"\n\"Q35\"\n\"SUM(E37+E38)\"\n\"+((B$46-D56)/B$46)*100\"\n\"+(1/E56)*100*3600/1.055\"\n\"+D49*B$39*B$41\"\n\"+(G49-H49)*B$45\"\n\"+(C49+B$45/60)\"\n\"+D49+E50*B$45\"\n\"+(G50-H50)/(B$39*B$41)\"\n\"SQRT(2*B$47*D49)\"\n\"+F50*B$39*B$43\"\n\"SUM(J49:J79)\"\n\"C5*$C$12\"\n\"INT(RAND()*35 + 1)\"\n\"-140*B2+5000\"\n\"RAND()\"\n\"NORMINV(D2,0,144)\"\n\"C2+E2\"\n\"SLOPE(I2:I31,H2:H31)\"\n\"INTERCEPT(I2:I31,H2:H31)\"\n\"book_price*books_sold*rights\"\n\"VLOOKUP(books_sold,Publication_Costs!B5:D10,3)*books_sold\"\n\"publish_cost+salary\"\n\"revenue-total_cost\"\n\"IF(profit>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"'Cost vs. Demand'!L6\"\n\"'Cost vs. Demand'!L5\"\n\"IF(books_sold2<0,\"\"Book Price too high!\"\",\"\"\"\")\"\n\"book_price2*demand_slope+demand_intercept\"\n\"books_sold2*book_price2*rights2\"\n\"VLOOKUP(books_sold2,Publication_Costs!B5:D10,3)*books_sold2\"\n\"publish_cost2+salary2\"\n\"revenue2-total_cost2\"\n\"profit2\"\n\"IF(profit2>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"'Cost vs. Demand'!L6\"\n\"'Cost vs. Demand'!L5\"\n\"IF(books_sold2<0,\"\"Book Price too high!\"\",\"\"\"\")\"\n\"book_price2*demand_slope+demand_intercept\"\n\"books_sold2*book_price2*rights2\"\n\"VLOOKUP(books_sold2,A37:C42,3)*books_sold2\"\n\"publish_cost2+salary2\"\n\"revenue2-total_cost2\"\n\"IF(profit2>0,\"\"Write the book!\"\",\"\"Do the internship\"\")\"\n\"B37*$B$44\"\n\"$C$4*(1+$C$5)^B8+A8*$C$6\"\n\"LN(C8)\"\n\"B8\"\n\"B8^2\"\n\"EXP(B18)-1\"\n\"EXP(B17)\"\n\"SUM(E2:E86)\"\n\"SUM(H90-H91)\"\n\"SUM(H94:H95)\"\n\"SUM(E2:E664)\"\n\"IF(C43=\"\"N/A\"\",C42,C43)\"\n\"IF(B9<>\"\"\"\",IF(B9<5,5,IF(B9>15,15,B9)),0)\"\n\"IF(B11<>\"\"\"\",5,0)\"\n\"IF(B12<>\"\"\"\",75,0)\"\n\"IF(B13<>\"\"\"\",15,0)\"\n\"IF(B16<>\"\"\"\",8,0)\"\n\"IF(B18<>\"\"\"\",60,0)\"\n\"IF(B19<>\"\"\"\",100,0)\"\n\"IF(B22<>\"\"\"\",(3*B22),0)\"\n\"IF(B23<>\"\"\"\",(5*B23),0)\"\n\"IF(B31=\"\"\"\",(IF(B30<>\"\"\"\",20,0)),\"\"\"\")\"\n\"IF(B35=\"\"\"\",(IF(B34<>\"\"\"\",10,0)),\"\"\"\")\"\n\"IF(B35<>\"\"\"\",(B35*10),0)\"\n\"SUM(C34:C35)\"\n\"IF(OR(C34>0,C35>0),C36,SUM(C9:C31))\"\n\"C41*C5\"\n\"IF(B34<>\"\"\"\",\"\"N/A\"\",IF(B38<>\"\"\"\",C42/2,\"\"N/A\"\"))\"\n\"COUNTIF(C3:C53,\"\"Approve\"\")+COUNTIF(C3:C53,\"\"Abstain\"\")+COUNTIF(C3:C53,\"\"Do Not\"\")\"\n\"100*C60/C59\"\n\"COUNTIF(C3:C53,\"\"Approve\"\")\"\n\"COUNTIF(C3:C53,\"\"Reject\"\")\"\n\"COUNTIF(C3:C53,\"\"Abstain\"\")\"\n\"100*(C62/(C62+C63))\"\n\"SUM(F9:H9)\"\n\"DATE(2002,4,9)\"\n\"SUM(F8:F26)\"\n\"SUM(H9,H10,F12,F13,F14,H14,H15,F16,F17,F18,F20,H21,F23,F24,F25,F26)\"\n\"SUM(B5:E5)\"\n\"SUM(B5:B9)\"\n\"SUM(B15:B18)\"\n\"+F28/365\"\n\"+(F29+F31)/SUM(F28:F31)\"\n\"+(F28+F30)/SUM(F28:F31)\"\n\"(F28+F29)/SUM(F28:F31)\"\n\"(F30+F31)/SUM(F28:F31)\"\n\"SUM('Occ L1-LR'!C16:C39)\"\n\"SUM('Occ L1-LR'!D16:D39)\"\n\"+(Occupancy!F19*Occupancy!F38+Occupancy!F20*Occupancy!F39)/(Occupancy!F38+Occupancy!F39)\"\n\"+(Occupancy!F22*Occupancy!F19+Occupancy!F23*Occupancy!F20)/(Occupancy!F19+Occupancy!F20)\"\n\"+'Occ L1-WD'!C16*Occupancy!$F$34+'Occ L1-WD'!D16*Occupancy!$F$33\"\n\"SUM(C16:C39)\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"\"\"Occupancy-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (ALL)  \"\"&C15&\"\"-DS  ..\"\"\"\n\"+(Occupancy!F19*Occupancy!F38+Occupancy!F20*Occupancy!F39)/(Occupancy!F38+Occupancy!F39)\"\n\"+(Occupancy!F22*Occupancy!F19+Occupancy!F23*Occupancy!F20)/(Occupancy!F19+Occupancy!F20)\"\n\"+'OccL2-WD-DU'!C16*Occupancy!$F$35+'OccL2-WD-DU'!E16*Occupancy!$F$36\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"\"\"Occupancy-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (WD)   \"\"&C15&\"\"-DS\"\"\"\n\"\"\"                      (WEH)  \"\"&D15&\"\"-DS  ..\"\"\"\n\"+(Occupancy!F19*Occupancy!F38+Occupancy!F20*Occupancy!F39)/(Occupancy!F38+Occupancy!F39)\"\n\"+(Occupancy!F22*Occupancy!F19+Occupancy!F23*Occupancy!F20)/(Occupancy!F19+Occupancy!F20)\"\n\"+'OccL2-DU-LR'!C16+'OccL2-DU-LR'!D16\"\n\"+'OccL2-DU-LR'!E16+'OccL2-DU-LR'!F16\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"+'OccL2-DU-LR'!C16*Occupancy!$F$35+'OccL2-DU-LR'!E16*Occupancy!$F$36\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"C15&\"\"-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (ALL)  \"\"&C15&\"\"-DS  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (ALL)  \"\"&D15&\"\"-DS  ..\"\"\"\n\"+(Occupancy!F19*Occupancy!F38+Occupancy!F20*Occupancy!F39)/(Occupancy!F38+Occupancy!F39)\"\n\"+(Occupancy!F22*Occupancy!F19+Occupancy!F23*Occupancy!F20)/(Occupancy!F19+Occupancy!F20)\"\n\"+'Occ L3-WD-DU-LR'!C16+'Occ L3-WD-DU-LR'!D16\"\n\"+'Occ L3-WD-DU-LR'!E16+'Occ L3-WD-DU-LR'!F16\"\n\"+'Occ L3-WD-DU-LR'!H16+'Occ L3-WD-DU-LR'!I16\"\n\"+'Occ L3-WD-DU-LR'!J16+'Occ L3-WD-DU-LR'!K16\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"E15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(E16,\"\"0.0000\"\")&\"\",\"\"&TEXT(E17,\"\"0.0000\"\")&\"\",\"\"&TEXT(E18,\"\"0.0000\"\")&\"\",\"\"&TEXT(E19,\"\"0.0000\"\")&\"\",\"\"&TEXT(E20,\"\"0.0000\"\")&\"\",\"\"&TEXT(E21,\"\"0.0000\"\")&\"\",\"\"&TEXT(E22,\"\"0.0000\"\")&\"\",\"\"&TEXT(E23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E24,\"\"0.0000\"\")&\"\",\"\"&TEXT(E25,\"\"0.0000\"\")&\"\",\"\"&TEXT(E26,\"\"0.0000\"\")&\"\",\"\"&TEXT(E27,\"\"0.0000\"\")&\"\",\"\"&TEXT(E28,\"\"0.0000\"\")&\"\",\"\"&TEXT(E29,\"\"0.0000\"\")&\"\",\"\"&TEXT(E30,\"\"0.0000\"\")&\"\",\"\"&TEXT(E31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E32,\"\"0.0000\"\")&\"\",\"\"&TEXT(E33,\"\"0.0000\"\")&\"\",\"\"&TEXT(E34,\"\"0.0000\"\")&\"\",\"\"&TEXT(E35,\"\"0.0000\"\")&\"\",\"\"&TEXT(E36,\"\"0.0000\"\")&\"\",\"\"&TEXT(E37,\"\"0.0000\"\")&\"\",\"\"&TEXT(E38,\"\"0.0000\"\")&\"\",\"\"&TEXT(E39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"F15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(F16,\"\"0.0000\"\")&\"\",\"\"&TEXT(F17,\"\"0.0000\"\")&\"\",\"\"&TEXT(F18,\"\"0.0000\"\")&\"\",\"\"&TEXT(F19,\"\"0.0000\"\")&\"\",\"\"&TEXT(F20,\"\"0.0000\"\")&\"\",\"\"&TEXT(F21,\"\"0.0000\"\")&\"\",\"\"&TEXT(F22,\"\"0.0000\"\")&\"\",\"\"&TEXT(F23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F24,\"\"0.0000\"\")&\"\",\"\"&TEXT(F25,\"\"0.0000\"\")&\"\",\"\"&TEXT(F26,\"\"0.0000\"\")&\"\",\"\"&TEXT(F27,\"\"0.0000\"\")&\"\",\"\"&TEXT(F28,\"\"0.0000\"\")&\"\",\"\"&TEXT(F29,\"\"0.0000\"\")&\"\",\"\"&TEXT(F30,\"\"0.0000\"\")&\"\",\"\"&TEXT(F31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F32,\"\"0.0000\"\")&\"\",\"\"&TEXT(F33,\"\"0.0000\"\")&\"\",\"\"&TEXT(F34,\"\"0.0000\"\")&\"\",\"\"&TEXT(F35,\"\"0.0000\"\")&\"\",\"\"&TEXT(F36,\"\"0.0000\"\")&\"\",\"\"&TEXT(F37,\"\"0.0000\"\")&\"\",\"\"&TEXT(F38,\"\"0.0000\"\")&\"\",\"\"&TEXT(F39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"+'Occ L3-WD-DU-LR'!C16*Occupancy!$F$35+'Occ L3-WD-DU-LR'!H16*Occupancy!$F$36\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"E15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(E16,\"\"0.0000\"\")&\"\",\"\"&TEXT(E17,\"\"0.0000\"\")&\"\",\"\"&TEXT(E18,\"\"0.0000\"\")&\"\",\"\"&TEXT(E19,\"\"0.0000\"\")&\"\",\"\"&TEXT(E20,\"\"0.0000\"\")&\"\",\"\"&TEXT(E21,\"\"0.0000\"\")&\"\",\"\"&TEXT(E22,\"\"0.0000\"\")&\"\",\"\"&TEXT(E23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E24,\"\"0.0000\"\")&\"\",\"\"&TEXT(E25,\"\"0.0000\"\")&\"\",\"\"&TEXT(E26,\"\"0.0000\"\")&\"\",\"\"&TEXT(E27,\"\"0.0000\"\")&\"\",\"\"&TEXT(E28,\"\"0.0000\"\")&\"\",\"\"&TEXT(E29,\"\"0.0000\"\")&\"\",\"\"&TEXT(E30,\"\"0.0000\"\")&\"\",\"\"&TEXT(E31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E32,\"\"0.0000\"\")&\"\",\"\"&TEXT(E33,\"\"0.0000\"\")&\"\",\"\"&TEXT(E34,\"\"0.0000\"\")&\"\",\"\"&TEXT(E35,\"\"0.0000\"\")&\"\",\"\"&TEXT(E36,\"\"0.0000\"\")&\"\",\"\"&TEXT(E37,\"\"0.0000\"\")&\"\",\"\"&TEXT(E38,\"\"0.0000\"\")&\"\",\"\"&TEXT(E39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"F15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(F16,\"\"0.0000\"\")&\"\",\"\"&TEXT(F17,\"\"0.0000\"\")&\"\",\"\"&TEXT(F18,\"\"0.0000\"\")&\"\",\"\"&TEXT(F19,\"\"0.0000\"\")&\"\",\"\"&TEXT(F20,\"\"0.0000\"\")&\"\",\"\"&TEXT(F21,\"\"0.0000\"\")&\"\",\"\"&TEXT(F22,\"\"0.0000\"\")&\"\",\"\"&TEXT(F23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F24,\"\"0.0000\"\")&\"\",\"\"&TEXT(F25,\"\"0.0000\"\")&\"\",\"\"&TEXT(F26,\"\"0.0000\"\")&\"\",\"\"&TEXT(F27,\"\"0.0000\"\")&\"\",\"\"&TEXT(F28,\"\"0.0000\"\")&\"\",\"\"&TEXT(F29,\"\"0.0000\"\")&\"\",\"\"&TEXT(F30,\"\"0.0000\"\")&\"\",\"\"&TEXT(F31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F32,\"\"0.0000\"\")&\"\",\"\"&TEXT(F33,\"\"0.0000\"\")&\"\",\"\"&TEXT(F34,\"\"0.0000\"\")&\"\",\"\"&TEXT(F35,\"\"0.0000\"\")&\"\",\"\"&TEXT(F36,\"\"0.0000\"\")&\"\",\"\"&TEXT(F37,\"\"0.0000\"\")&\"\",\"\"&TEXT(F38,\"\"0.0000\"\")&\"\",\"\"&TEXT(F39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"\"\"Occ-LR-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (WD)   \"\"&C15&\"\"-DS\"\"\"\n\"\"\"                      (WEH)  \"\"&E15&\"\"-DS  ..\"\"\"\n\"\"\"Occ-BR-SCH =SCHEDULE TYPE = FRACTION\"\"\"\n\"\"\"          THRU DEC 31 (WD)   \"\"&D15&\"\"-DS\"\"\"\n\"\"\"                      (WEH)  \"\"&F15&\"\"-DS  ..\"\"\"\n\"+'Occ L3-WD-DU-LR'!C16*Occupancy!$F$34+'Occ L3-WD-DU-LR'!E16*Occupancy!$F$33\"\n\"+'Occ L3-WD-DU-LR'!H16*Occupancy!$F$34+'Occ L3-WD-DU-LR'!J16*Occupancy!$F$33\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"E15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(E16,\"\"0.0000\"\")&\"\",\"\"&TEXT(E17,\"\"0.0000\"\")&\"\",\"\"&TEXT(E18,\"\"0.0000\"\")&\"\",\"\"&TEXT(E19,\"\"0.0000\"\")&\"\",\"\"&TEXT(E20,\"\"0.0000\"\")&\"\",\"\"&TEXT(E21,\"\"0.0000\"\")&\"\",\"\"&TEXT(E22,\"\"0.0000\"\")&\"\",\"\"&TEXT(E23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E24,\"\"0.0000\"\")&\"\",\"\"&TEXT(E25,\"\"0.0000\"\")&\"\",\"\"&TEXT(E26,\"\"0.0000\"\")&\"\",\"\"&TEXT(E27,\"\"0.0000\"\")&\"\",\"\"&TEXT(E28,\"\"0.0000\"\")&\"\",\"\"&TEXT(E29,\"\"0.0000\"\")&\"\",\"\"&TEXT(E30,\"\"0.0000\"\")&\"\",\"\"&TEXT(E31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E32,\"\"0.0000\"\")&\"\",\"\"&TEXT(E33,\"\"0.0000\"\")&\"\",\"\"&TEXT(E34,\"\"0.0000\"\")&\"\",\"\"&TEXT(E35,\"\"0.0000\"\")&\"\",\"\"&TEXT(E36,\"\"0.0000\"\")&\"\",\"\"&TEXT(E37,\"\"0.0000\"\")&\"\",\"\"&TEXT(E38,\"\"0.0000\"\")&\"\",\"\"&TEXT(E39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"F15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(F16,\"\"0.0000\"\")&\"\",\"\"&TEXT(F17,\"\"0.0000\"\")&\"\",\"\"&TEXT(F18,\"\"0.0000\"\")&\"\",\"\"&TEXT(F19,\"\"0.0000\"\")&\"\",\"\"&TEXT(F20,\"\"0.0000\"\")&\"\",\"\"&TEXT(F21,\"\"0.0000\"\")&\"\",\"\"&TEXT(F22,\"\"0.0000\"\")&\"\",\"\"&TEXT(F23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F24,\"\"0.0000\"\")&\"\",\"\"&TEXT(F25,\"\"0.0000\"\")&\"\",\"\"&TEXT(F26,\"\"0.0000\"\")&\"\",\"\"&TEXT(F27,\"\"0.0000\"\")&\"\",\"\"&TEXT(F28,\"\"0.0000\"\")&\"\",\"\"&TEXT(F29,\"\"0.0000\"\")&\"\",\"\"&TEXT(F30,\"\"0.0000\"\")&\"\",\"\"&TEXT(F31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F32,\"\"0.0000\"\")&\"\",\"\"&TEXT(F33,\"\"0.0000\"\")&\"\",\"\"&TEXT(F34,\"\"0.0000\"\")&\"\",\"\"&TEXT(F35,\"\"0.0000\"\")&\"\",\"\"&TEXT(F36,\"\"0.0000\"\")&\"\",\"\"&TEXT(F37,\"\"0.0000\"\")&\"\",\"\"&TEXT(F38,\"\"0.0000\"\")&\"\",\"\"&TEXT(F39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"+(H23+H25)/2\"\n\"C15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(C16,\"\"0.0000\"\")&\"\",\"\"&TEXT(C17,\"\"0.0000\"\")&\"\",\"\"&TEXT(C18,\"\"0.0000\"\")&\"\",\"\"&TEXT(C19,\"\"0.0000\"\")&\"\",\"\"&TEXT(C20,\"\"0.0000\"\")&\"\",\"\"&TEXT(C21,\"\"0.0000\"\")&\"\",\"\"&TEXT(C22,\"\"0.0000\"\")&\"\",\"\"&TEXT(C23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C24,\"\"0.0000\"\")&\"\",\"\"&TEXT(C25,\"\"0.0000\"\")&\"\",\"\"&TEXT(C26,\"\"0.0000\"\")&\"\",\"\"&TEXT(C27,\"\"0.0000\"\")&\"\",\"\"&TEXT(C28,\"\"0.0000\"\")&\"\",\"\"&TEXT(C29,\"\"0.0000\"\")&\"\",\"\"&TEXT(C30,\"\"0.0000\"\")&\"\",\"\"&TEXT(C31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(C32,\"\"0.0000\"\")&\"\",\"\"&TEXT(C33,\"\"0.0000\"\")&\"\",\"\"&TEXT(C34,\"\"0.0000\"\")&\"\",\"\"&TEXT(C35,\"\"0.0000\"\")&\"\",\"\"&TEXT(C36,\"\"0.0000\"\")&\"\",\"\"&TEXT(C37,\"\"0.0000\"\")&\"\",\"\"&TEXT(C38,\"\"0.0000\"\")&\"\",\"\"&TEXT(C39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"D15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(D16,\"\"0.0000\"\")&\"\",\"\"&TEXT(D17,\"\"0.0000\"\")&\"\",\"\"&TEXT(D18,\"\"0.0000\"\")&\"\",\"\"&TEXT(D19,\"\"0.0000\"\")&\"\",\"\"&TEXT(D20,\"\"0.0000\"\")&\"\",\"\"&TEXT(D21,\"\"0.0000\"\")&\"\",\"\"&TEXT(D22,\"\"0.0000\"\")&\"\",\"\"&TEXT(D23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D24,\"\"0.0000\"\")&\"\",\"\"&TEXT(D25,\"\"0.0000\"\")&\"\",\"\"&TEXT(D26,\"\"0.0000\"\")&\"\",\"\"&TEXT(D27,\"\"0.0000\"\")&\"\",\"\"&TEXT(D28,\"\"0.0000\"\")&\"\",\"\"&TEXT(D29,\"\"0.0000\"\")&\"\",\"\"&TEXT(D30,\"\"0.0000\"\")&\"\",\"\"&TEXT(D31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(D32,\"\"0.0000\"\")&\"\",\"\"&TEXT(D33,\"\"0.0000\"\")&\"\",\"\"&TEXT(D34,\"\"0.0000\"\")&\"\",\"\"&TEXT(D35,\"\"0.0000\"\")&\"\",\"\"&TEXT(D36,\"\"0.0000\"\")&\"\",\"\"&TEXT(D37,\"\"0.0000\"\")&\"\",\"\"&TEXT(D38,\"\"0.0000\"\")&\"\",\"\"&TEXT(D39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"E15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(E16,\"\"0.0000\"\")&\"\",\"\"&TEXT(E17,\"\"0.0000\"\")&\"\",\"\"&TEXT(E18,\"\"0.0000\"\")&\"\",\"\"&TEXT(E19,\"\"0.0000\"\")&\"\",\"\"&TEXT(E20,\"\"0.0000\"\")&\"\",\"\"&TEXT(E21,\"\"0.0000\"\")&\"\",\"\"&TEXT(E22,\"\"0.0000\"\")&\"\",\"\"&TEXT(E23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E24,\"\"0.0000\"\")&\"\",\"\"&TEXT(E25,\"\"0.0000\"\")&\"\",\"\"&TEXT(E26,\"\"0.0000\"\")&\"\",\"\"&TEXT(E27,\"\"0.0000\"\")&\"\",\"\"&TEXT(E28,\"\"0.0000\"\")&\"\",\"\"&TEXT(E29,\"\"0.0000\"\")&\"\",\"\"&TEXT(E30,\"\"0.0000\"\")&\"\",\"\"&TEXT(E31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(E32,\"\"0.0000\"\")&\"\",\"\"&TEXT(E33,\"\"0.0000\"\")&\"\",\"\"&TEXT(E34,\"\"0.0000\"\")&\"\",\"\"&TEXT(E35,\"\"0.0000\"\")&\"\",\"\"&TEXT(E36,\"\"0.0000\"\")&\"\",\"\"&TEXT(E37,\"\"0.0000\"\")&\"\",\"\"&TEXT(E38,\"\"0.0000\"\")&\"\",\"\"&TEXT(E39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"F15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(F16,\"\"0.0000\"\")&\"\",\"\"&TEXT(F17,\"\"0.0000\"\")&\"\",\"\"&TEXT(F18,\"\"0.0000\"\")&\"\",\"\"&TEXT(F19,\"\"0.0000\"\")&\"\",\"\"&TEXT(F20,\"\"0.0000\"\")&\"\",\"\"&TEXT(F21,\"\"0.0000\"\")&\"\",\"\"&TEXT(F22,\"\"0.0000\"\")&\"\",\"\"&TEXT(F23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F24,\"\"0.0000\"\")&\"\",\"\"&TEXT(F25,\"\"0.0000\"\")&\"\",\"\"&TEXT(F26,\"\"0.0000\"\")&\"\",\"\"&TEXT(F27,\"\"0.0000\"\")&\"\",\"\"&TEXT(F28,\"\"0.0000\"\")&\"\",\"\"&TEXT(F29,\"\"0.0000\"\")&\"\",\"\"&TEXT(F30,\"\"0.0000\"\")&\"\",\"\"&TEXT(F31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(F32,\"\"0.0000\"\")&\"\",\"\"&TEXT(F33,\"\"0.0000\"\")&\"\",\"\"&TEXT(F34,\"\"0.0000\"\")&\"\",\"\"&TEXT(F35,\"\"0.0000\"\")&\"\",\"\"&TEXT(F36,\"\"0.0000\"\")&\"\",\"\"&TEXT(F37,\"\"0.0000\"\")&\"\",\"\"&TEXT(F38,\"\"0.0000\"\")&\"\",\"\"&TEXT(F39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"H15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(H16,\"\"0.0000\"\")&\"\",\"\"&TEXT(H17,\"\"0.0000\"\")&\"\",\"\"&TEXT(H18,\"\"0.0000\"\")&\"\",\"\"&TEXT(H19,\"\"0.0000\"\")&\"\",\"\"&TEXT(H20,\"\"0.0000\"\")&\"\",\"\"&TEXT(H21,\"\"0.0000\"\")&\"\",\"\"&TEXT(H22,\"\"0.0000\"\")&\"\",\"\"&TEXT(H23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(H24,\"\"0.0000\"\")&\"\",\"\"&TEXT(H25,\"\"0.0000\"\")&\"\",\"\"&TEXT(H26,\"\"0.0000\"\")&\"\",\"\"&TEXT(H27,\"\"0.0000\"\")&\"\",\"\"&TEXT(H28,\"\"0.0000\"\")&\"\",\"\"&TEXT(H29,\"\"0.0000\"\")&\"\",\"\"&TEXT(H30,\"\"0.0000\"\")&\"\",\"\"&TEXT(H31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(H32,\"\"0.0000\"\")&\"\",\"\"&TEXT(H33,\"\"0.0000\"\")&\"\",\"\"&TEXT(H34,\"\"0.0000\"\")&\"\",\"\"&TEXT(H35,\"\"0.0000\"\")&\"\",\"\"&TEXT(H36,\"\"0.0000\"\")&\"\",\"\"&TEXT(H37,\"\"0.0000\"\")&\"\",\"\"&TEXT(H38,\"\"0.0000\"\")&\"\",\"\"&TEXT(H39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"I15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(I16,\"\"0.0000\"\")&\"\",\"\"&TEXT(I17,\"\"0.0000\"\")&\"\",\"\"&TEXT(I18,\"\"0.0000\"\")&\"\",\"\"&TEXT(I19,\"\"0.0000\"\")&\"\",\"\"&TEXT(I20,\"\"0.0000\"\")&\"\",\"\"&TEXT(I21,\"\"0.0000\"\")&\"\",\"\"&TEXT(I22,\"\"0.0000\"\")&\"\",\"\"&TEXT(I23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(I24,\"\"0.0000\"\")&\"\",\"\"&TEXT(I25,\"\"0.0000\"\")&\"\",\"\"&TEXT(I26,\"\"0.0000\"\")&\"\",\"\"&TEXT(I27,\"\"0.0000\"\")&\"\",\"\"&TEXT(I28,\"\"0.0000\"\")&\"\",\"\"&TEXT(I29,\"\"0.0000\"\")&\"\",\"\"&TEXT(I30,\"\"0.0000\"\")&\"\",\"\"&TEXT(I31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(I32,\"\"0.0000\"\")&\"\",\"\"&TEXT(I33,\"\"0.0000\"\")&\"\",\"\"&TEXT(I34,\"\"0.0000\"\")&\"\",\"\"&TEXT(I35,\"\"0.0000\"\")&\"\",\"\"&TEXT(I36,\"\"0.0000\"\")&\"\",\"\"&TEXT(I37,\"\"0.0000\"\")&\"\",\"\"&TEXT(I38,\"\"0.0000\"\")&\"\",\"\"&TEXT(I39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"J15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(J16,\"\"0.0000\"\")&\"\",\"\"&TEXT(J17,\"\"0.0000\"\")&\"\",\"\"&TEXT(J18,\"\"0.0000\"\")&\"\",\"\"&TEXT(J19,\"\"0.0000\"\")&\"\",\"\"&TEXT(J20,\"\"0.0000\"\")&\"\",\"\"&TEXT(J21,\"\"0.0000\"\")&\"\",\"\"&TEXT(J22,\"\"0.0000\"\")&\"\",\"\"&TEXT(J23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(J24,\"\"0.0000\"\")&\"\",\"\"&TEXT(J25,\"\"0.0000\"\")&\"\",\"\"&TEXT(J26,\"\"0.0000\"\")&\"\",\"\"&TEXT(J27,\"\"0.0000\"\")&\"\",\"\"&TEXT(J28,\"\"0.0000\"\")&\"\",\"\"&TEXT(J29,\"\"0.0000\"\")&\"\",\"\"&TEXT(J30,\"\"0.0000\"\")&\"\",\"\"&TEXT(J31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(J32,\"\"0.0000\"\")&\"\",\"\"&TEXT(J33,\"\"0.0000\"\")&\"\",\"\"&TEXT(J34,\"\"0.0000\"\")&\"\",\"\"&TEXT(J35,\"\"0.0000\"\")&\"\",\"\"&TEXT(J36,\"\"0.0000\"\")&\"\",\"\"&TEXT(J37,\"\"0.0000\"\")&\"\",\"\"&TEXT(J38,\"\"0.0000\"\")&\"\",\"\"&TEXT(J39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"K15&\"\"-DS\"\"&\"\" =DAY-SCHEDULE   TYPE = FRACTION\"\"\"\n\"\"\"(1,24)   (\"\"&TEXT(K16,\"\"0.0000\"\")&\"\",\"\"&TEXT(K17,\"\"0.0000\"\")&\"\",\"\"&TEXT(K18,\"\"0.0000\"\")&\"\",\"\"&TEXT(K19,\"\"0.0000\"\")&\"\",\"\"&TEXT(K20,\"\"0.0000\"\")&\"\",\"\"&TEXT(K21,\"\"0.0000\"\")&\"\",\"\"&TEXT(K22,\"\"0.0000\"\")&\"\",\"\"&TEXT(K23,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(K24,\"\"0.0000\"\")&\"\",\"\"&TEXT(K25,\"\"0.0000\"\")&\"\",\"\"&TEXT(K26,\"\"0.0000\"\")&\"\",\"\"&TEXT(K27,\"\"0.0000\"\")&\"\",\"\"&TEXT(K28,\"\"0.0000\"\")&\"\",\"\"&TEXT(K29,\"\"0.0000\"\")&\"\",\"\"&TEXT(K30,\"\"0.0000\"\")&\"\",\"\"&TEXT(K31,\"\"0.0000\"\")&\"\",\"\"\"\n\"\"\"          \"\"&TEXT(K32,\"\"0.0000\"\")&\"\",\"\"&TEXT(K33,\"\"0.0000\"\")&\"\",\"\"&TEXT(K34,\"\"0.0000\"\")&\"\",\"\"&TEXT(K35,\"\"0.0000\"\")&\"\",\"\"&TEXT(K36,\"\"0.0000\"\")&\"\",\"\"&TEXT(K37,\"\"0.0000\"\")&\"\",\"\"&TEXT(K38,\"\"0.0000\"\")&\"\",\"\"&TEXT(K39,\"\"0.0000\"\")&\"\")  ..\"\"\"\n\"SUM(J6:J7)\"\n\"SUM(J18:J20)\"\n\"SUM(J23:J26)\"\n\"SUM(J64:J64)\"\n\"SUM(J101:J107)\"\n\"SUM(J128:J133)\"\n\"NOW()\"\n\"COUNTA(B5:B137)\"\n\"SUM(E45:E53)\"\n\"SUM(E56:E57)\"\n\"SUM(F88:F92)\"\n\"[1]Tableau_2002_2003!B61\"\n\"A2+1\"\n\"IF(E6=\"\"p\"\",E5-E9,0)\"\n\"IF(E6=\"\"l\"\",E5*0.2,\"\"\"\")\"\n\"IF(E15>0,IF(E10>0,\"\"ERROR:  You indicated a 'P' for purchase AND entered a Lease payment\"\",\"\"None\"\"),\"\"None\"\")\"\n\"IF(E6=\"\"P\"\",\"\"None\"\",IF(E15=0,\"\"ERROR:  You've indicated a Lease, but have not entered a Lease payment amount\"\",IF(E15=\"\"\"\",\"\"ERROR:  You've indicated a Lease, but have not entered a Lease payment amount\"\",IF(E15<200000,\"\"ERROR:  Please check to make sure you entered One Year's Total Lease Payments\"\",\"\"None\"\"))))\"\n\"IF($E12>=C27,-PMT($E11,$E12,$E10),0)\"\n\"IF(C27<=$E16,IF(C27<=$E16,$E15,\"\"\"\"),\"\"\"\")\"\n\"IF(C27<=$E34,-PMT($E33,$E34,$E32),0)\"\n\"(500+200)*12\"\n\"D53\"\n\"D58*(1+E56)\"\n\"AVERAGE(D58:J58)\"\n\"D58\"\n\"G108*12\"\n\"$D61\"\n\"G109*G110\"\n\"$D65*G112\"\n\"(G112-G113)*0.75\"\n\"((G112-G113)*0.25)+((H112-H113)*0.75)\"\n\"IF($E15>0,IF($E10>0,\"\"Lease or Loan?\"\",-SUM(C28:C29)),-SUM(C28:C29))\"\n\"-'PET Financial Worksheet'!$E22\"\n\"H120*(1+$E23)\"\n\"-SUM(C30:C30)\"\n\"-D37*12\"\n\"-$E41*(1+$E44)^G106\"\n\"-'PET Financial Worksheet'!E39\"\n\"-$E42\"\n\"G127*0.02\"\n\"-((IF(G108<=$D80,($D72*$E80)*((1+$E45)^G106),IF(G108<=$D81,($D72*$E81)*((1+$E45)^G106),IF(G108<=$D82,($D72*$E82)*((1+$E45)^G106),($D72*$E83)*((1+$E45)^G106))))))\"\n\"-$D73*$E73\"\n\"SUM(G129:G132)*'PET Financial Worksheet'!$D76\"\n\"-'PET Financial Worksheet'!$D70\"\n\"$G134*(1+$E45)^H106\"\n\"-D92\"\n\"-$E92\"\n\"-D89\"\n\"-$E89\"\n\"-'PET Financial Worksheet'!$E89*(1+'PET Financial Worksheet'!$E44)^H106\"\n\"-'PET Financial Worksheet'!D86\"\n\"-('PET Financial Worksheet'!$E86*(1+'PET Financial Worksheet'!$E44)^G106)\"\n\"-('PET Financial Worksheet'!$E43*((1+'PET Financial Worksheet'!$E44)^G106))\"\n\"-D95\"\n\"G139*(1+$E44)\"\n\"IF($E15>0,IF(G106=$E16,-$E17,\"\"\"\"),\"\"\"\")\"\n\"IF($E15>0,IF(G106=$E16,-$E17,\"\"\"\"),\"\"\"\")\"\n\"-E40\"\n\"IF($E15>0,\"\"\"\",'PET Financial Worksheet'!$E5/5*'PET Financial Worksheet'!$E46)\"\n\"SUM(F119:F143)\"\n\"-(('PET Financial Worksheet'!$D63*((1+'PET Financial Worksheet'!$E44)^G106))*G108)*12\"\n\"-$D64*G109*(1+$E45)^G106\"\n\"-G114*$D62\"\n\"-'PET Financial Worksheet'!$D66*G114\"\n\"SUM(G147:G151)\"\n\"F152+F144\"\n\"F114+F154\"\n\"SUM($F157:F157)\"\n\"SUM(F157:N157)\"\n\"NPV('PET Financial Worksheet'!E47,F157:N157)\"\n\"IRR(F157:N157)\"\n\"F144\"\n\"F152\"\n\"SUM(F171:F172)\"\n\"G171/G109\"\n\"G152/G109\"\n\"G173/G109\"\n\"SUM(B3:B8)\"\n\"COUNTIF('New Applications'!C:C,\"\"Started\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"Business Services\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"engagement\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"University Residences\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"IT*\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"Student Services\"\")\"\n\"COUNTIF('New Applications'!A:A,\"\"University Development\"\")\"\n\"SUM(D3:L3)\"\n\"COUNTIF(Investigations!C:C,\"\"Started\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"Business Services\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"Engagement\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"University Residences\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"IT*\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"Student Services\"\")\"\n\"COUNTIF(Investigations!A:A,\"\"University Development\"\")\"\n\"COUNTIF('Emergency Fixes'!C:C,\"\"Started\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"Business Services\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"Engagement\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"University Residences\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"IT*\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"Student Services\"\")\"\n\"COUNTIF('Emergency Fixes'!A:A,\"\"University Development\"\")\"\n\"COUNTIF('Application Fixes'!C:C,\"\"Started\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"Business Services\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"Engagement\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"University Residences\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"IT*\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"Student Services\"\")\"\n\"COUNTIF('Application Fixes'!A:A,\"\"University Development\"\")\"\n\"COUNTIF('Scheduled Modifications'!C:C,\"\"Started\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"Business Services\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"Engagement\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"University Residences\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"IT*\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"Student Services\"\")\"\n\"COUNTIF('Scheduled Modifications'!A:A,\"\"University Development\"\")\"\n\"COUNTIF('Production Support'!C:C,\"\"Started\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"Business Services\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"Engagement\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"University Residences\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"IT*\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"Student Services\"\")\"\n\"COUNTIF('Production Support'!A:A,\"\"University Development\"\")\"\n\"COUNTIF(OnePurdue!C:C,\"\"Started\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"Business Services\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"Engagement\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"University Residences\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"IT*\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"Student Services\"\")\"\n\"COUNTIF(OnePurdue!A:A,\"\"University Development\"\")\"\n\"COUNTIF(Electives!C:C,\"\"Started\"\")\"\n\"COUNTIF(Electives!A:A,\"\"Business Services\"\")\"\n\"COUNTIF(Electives!A:A,\"\"Engagement\"\")\"\n\"COUNTIF(Electives!A:A,\"\"University Residences\"\")\"\n\"COUNTIF(Electives!A:A,\"\"Institutional Research\"\")\"\n\"COUNTIF(Electives!A:A,\"\"IT*\"\")\"\n\"COUNTIF(Electives!A:A,\"\"Physical Facilities\"\")\"\n\"COUNTIF(Electives!A:A,\"\"Student Services\"\")\"\n\"COUNTIF(Electives!A:A,\"\"University Development\"\")\"\n\"SUM(C10:L10)\"\n\"SUM(B3:B10)\"\n\"SUM(C2:C10)\"\n\"Summary!D3\"\n\"Summary!F3\"\n\"Summary!H3\"\n\"Summary!I3\"\n\"Summary!K3\"\n\"Summary!L3\"\n\"Summary!G3\"\n\"SUM(D10:D33)\"\n\"SUM(D34:G34)\"\n\"-Dipole Source localisation in a realistically shaped tank with commercially available head-nets\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YAL007C\"\",\"\"YAL007C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ERP2\"\",\"\"ERP2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003723\"\",\"\"RNA binding\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YAL009W\"\",\"\"YAL009W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SPO7\"\",\"\"SPO7\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005198\"\",\"\"structural molecule\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YAL034C\"\",\"\"YAL034C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=FUN19\"\",\"\"FUN19\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000123\"\",\"\"histone acetyltransferase complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003702\"\",\"\"RNA polymerase II transcription factor\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005667\"\",\"\"transcription factor complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005669\"\",\"\"TFIID complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006352\"\",\"\"transcription initiation\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006367\"\",\"\"transcription initiation from Pol II promoter\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016251\"\",\"\"general RNA polymerase II transcription factor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YAL064W\"\",\"\"YAL064W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004576\"\",\"\"oligosaccharyl transferase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004579\"\",\"\"dolichyl-diphospho-oligosaccharide-protein glycosyltransferase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL004W\"\",\"\"YBL004W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UTP20\"\",\"\"UTP20\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003735\"\",\"\"structural constituent of ribosome\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016070\"\",\"\"RNA metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030515\"\",\"\"snoRNA binding\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030529\"\",\"\"ribonucleoprotein complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL071C\"\",\"\"YBL071C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003688\"\",\"\"DNA replication origin binding\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005664\"\",\"\"origin recognition complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006267\"\",\"\"pre-replicative complex formation and maintenance\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006270\"\",\"\"DNA replication initiation\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL074C\"\",\"\"YBL074C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=AAR2\"\",\"\"AAR2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL082C\"\",\"\"YBL082C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RHK1\"\",\"\"RHK1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL102W\"\",\"\"YBL102W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SFT2\"\",\"\"SFT2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005478\"\",\"\"intracellular transporter\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005484\"\",\"\"SNAP receptor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBL106C\"\",\"\"YBL106C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SRO77\"\",\"\"SRO77\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003774\"\",\"\"motor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR025C\"\",\"\"YBR025C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR027C\"\",\"\"YBR027C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005643\"\",\"\"nuclear pore\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR065C\"\",\"\"YBR065C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ECM2\"\",\"\"ECM2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016563\"\",\"\"transcriptional activator\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR094W\"\",\"\"YBR094W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0015935\"\",\"\"small ribosomal subunit\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR095C\"\",\"\"YBR095C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RXT2\"\",\"\"RXT2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR108W\"\",\"\"YBR108W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016192\"\",\"\"vesicle-mediated transport\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR150C\"\",\"\"YBR150C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TBS1\"\",\"\"TBS1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003902\"\",\"\"DNA-directed RNA polymerase III\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR152W\"\",\"\"YBR152W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SPP381\"\",\"\"SPP381\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR172C\"\",\"\"YBR172C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SMY2\"\",\"\"SMY2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR188C\"\",\"\"YBR188C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NTC20\"\",\"\"NTC20\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR216C\"\",\"\"YBR216C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR217W\"\",\"\"YBR217W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=APG12\"\",\"\"APG12\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008233\"\",\"\"peptidase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR247C\"\",\"\"YBR247C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ENP1\"\",\"\"ENP1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR254C\"\",\"\"YBR254C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS20\"\",\"\"TRS20\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR267W\"\",\"\"YBR267W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR272C\"\",\"\"YBR272C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=HSM3\"\",\"\"HSM3\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004298\"\",\"\"threonine endopeptidase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004299\"\",\"\"proteasome endopeptidase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005524\"\",\"\"ATP binding\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005838\"\",\"\"19S proteasome regulatory particle\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016887\"\",\"\"ATPase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030554\"\",\"\"adenyl nucleotide binding\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR280C\"\",\"\"YBR280C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0009056\"\",\"\"catabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030163\"\",\"\"protein catabolism\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YBR281C\"\",\"\"YBR281C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL010C\"\",\"\"YCL010C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SGF29\"\",\"\"SGF29\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006997\"\",\"\"nuclear organization and biogenesis\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030528\"\",\"\"transcription regulator\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL014W\"\",\"\"YCL014W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BUD3\"\",\"\"BUD3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL019W\"\",\"\"YCL019W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006313\"\",\"\"DNA transposition\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006319\"\",\"\"Ty element transposition\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL020W\"\",\"\"YCL020W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL031C\"\",\"\"YCL031C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RRP7\"\",\"\"RRP7\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCL059C\"\",\"\"YCL059C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=KRR1\"\",\"\"KRR1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR022C\"\",\"\"YCR022C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR047C\"\",\"\"YCR047C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BUD23\"\",\"\"BUD23\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000171\"\",\"\"ribonuclease MRP\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000172\"\",\"\"ribonuclease mitochondrial RNA processing complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR050C\"\",\"\"YCR050C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR053W\"\",\"\"YCR053W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=THR4\"\",\"\"THR4\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR071C\"\",\"\"YCR071C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=IMG2\"\",\"\"IMG2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005762\"\",\"\"mitochondrial large ribosomal subunit\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YCR072C\"\",\"\"YCR072C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL002C\"\",\"\"YDL002C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NHP10\"\",\"\"NHP10\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL060W\"\",\"\"YDL060W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TSR1\"\",\"\"TSR1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL076C\"\",\"\"YDL076C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RXT3\"\",\"\"RXT3\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006348\"\",\"\"chromatin silencing at telomere\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL091C\"\",\"\"YDL091C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006628\"\",\"\"mitochondrial translocation\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL166C\"\",\"\"YDL166C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=FAP7\"\",\"\"FAP7\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL193W\"\",\"\"YDL193W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006885\"\",\"\"regulation of pH\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030641\"\",\"\"hydrogen ion homeostasis\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL207W\"\",\"\"YDL207W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GLE1\"\",\"\"GLE1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL209C\"\",\"\"YDL209C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CWC2\"\",\"\"CWC2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDL213C\"\",\"\"YDL213C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR036C\"\",\"\"YDR036C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000314\"\",\"\"organellar small ribosomal subunit\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005763\"\",\"\"mitochondrial small ribosomal subunit\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR049W\"\",\"\"YDR049W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006508\"\",\"\"proteolysis and peptidolysis\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0019941\"\",\"\"protein-ligand dependent protein catabolism\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR060W\"\",\"\"YDR060W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MAK21\"\",\"\"MAK21\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR070C\"\",\"\"YDR070C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008080\"\",\"\"N-acetyltransferase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016410\"\",\"\"N-acyltransferase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR071C\"\",\"\"YDR071C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016311\"\",\"\"dephosphorylation\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016788\"\",\"\"hydrolase, acting on ester bonds\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR091C\"\",\"\"YDR091C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RLI1\"\",\"\"RLI1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003743\"\",\"\"translation initiation factor\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008135\"\",\"\"translation factor, nucleic acid binding\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0045182\"\",\"\"translation regulator\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR100W\"\",\"\"YDR100W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006886\"\",\"\"intracellular protein transport\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR101C\"\",\"\"YDR101C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ARX1\"\",\"\"ARX1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR108W\"\",\"\"YDR108W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GSG1\"\",\"\"GSG1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR139C\"\",\"\"YDR139C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RUB1\"\",\"\"RUB1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000151\"\",\"\"ubiquitin ligase complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000152\"\",\"\"nuclear ubiquitin ligase complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR162C\"\",\"\"YDR162C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NBP2\"\",\"\"NBP2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR179C\"\",\"\"YDR179C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CSN9\"\",\"\"CSN9\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR229W\"\",\"\"YDR229W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR246W\"\",\"\"YDR246W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS23\"\",\"\"TRS23\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR254W\"\",\"\"YDR254W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CHL4\"\",\"\"CHL4\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004129\"\",\"\"cytochrome c oxidase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0015002\"\",\"\"heme-copper terminal oxidase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016676\"\",\"\"oxidoreductase, acting on heme group of donors, oxygen as acceptor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR269C\"\",\"\"YDR269C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR277C\"\",\"\"YDR277C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MTH1\"\",\"\"MTH1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003700\"\",\"\"transcription factor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR299W\"\",\"\"YDR299W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BFR2\"\",\"\"BFR2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030120\"\",\"\"vesicle coat\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR333C\"\",\"\"YDR333C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR339C\"\",\"\"YDR339C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008324\"\",\"\"cation transporter\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0015399\"\",\"\"primary active transporter\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR359C\"\",\"\"YDR359C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=VID21\"\",\"\"VID21\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR361C\"\",\"\"YDR361C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BCP1\"\",\"\"BCP1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR365C\"\",\"\"YDR365C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR400W\"\",\"\"YDR400W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=URH1\"\",\"\"URH1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008180\"\",\"\"signalosome complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR407C\"\",\"\"YDR407C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS120\"\",\"\"TRS120\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR412W\"\",\"\"YDR412W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR416W\"\",\"\"YDR416W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SYF1\"\",\"\"SYF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR425W\"\",\"\"YDR425W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SNX41\"\",\"\"SNX41\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR430C\"\",\"\"YDR430C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CYM1\"\",\"\"CYM1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006090\"\",\"\"pyruvate metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0045254\"\",\"\"pyruvate dehydrogenase complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR472W\"\",\"\"YDR472W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS31\"\",\"\"TRS31\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR496C\"\",\"\"YDR496C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PUF6\"\",\"\"PUF6\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YDR505C\"\",\"\"YDR505C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PSP1\"\",\"\"PSP1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YEL005C\"\",\"\"YEL005C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=VAB2\"\",\"\"VAB2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YEL015W\"\",\"\"YEL015W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER002W\"\",\"\"YER002W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOP16\"\",\"\"NOP16\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER006W\"\",\"\"YER006W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NUG1\"\",\"\"NUG1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER041W\"\",\"\"YER041W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YEN1\"\",\"\"YEN1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006280\"\",\"\"mutagenesis\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006284\"\",\"\"base-excision repair\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER054C\"\",\"\"YER054C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GIP2\"\",\"\"GIP2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005977\"\",\"\"glycogen metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006073\"\",\"\"glucan metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006112\"\",\"\"energy reserve metabolism\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER126C\"\",\"\"YER126C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NSA2\"\",\"\"NSA2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER137C\"\",\"\"YER137C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000338\"\",\"\"protein deneddylation\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER163C\"\",\"\"YER163C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004749\"\",\"\"ribose-phosphate pyrophosphokinase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016778\"\",\"\"diphosphotransferase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YER173W\"\",\"\"YER173W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RAD24\"\",\"\"RAD24\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003689\"\",\"\"DNA clamp loader\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003887\"\",\"\"DNA-directed DNA polymerase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFL007W\"\",\"\"YFL007W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BLM3\"\",\"\"BLM3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFR016C\"\",\"\"YFR016C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005857\"\",\"\"actin cortical patch (sensu Saccharomyces)\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFR021W\"\",\"\"YFR021W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=AUT10\"\",\"\"AUT10\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFR037C\"\",\"\"YFR037C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RSC8\"\",\"\"RSC8\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFR052W\"\",\"\"YFR052W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RPN12\"\",\"\"RPN12\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YFR057W\"\",\"\"YFR057W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL004C\"\",\"\"YGL004C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0009057\"\",\"\"macromolecule catabolism\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL066W\"\",\"\"YGL066W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SGF73\"\",\"\"SGF73\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL074C\"\",\"\"YGL074C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL111W\"\",\"\"YGL111W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NSA1\"\",\"\"NSA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL127C\"\",\"\"YGL127C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SOH1\"\",\"\"SOH1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL128C\"\",\"\"YGL128C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CWC23\"\",\"\"CWC23\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL133W\"\",\"\"YGL133W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ITC1\"\",\"\"ITC1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL145W\"\",\"\"YGL145W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TIP20\"\",\"\"TIP20\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL151W\"\",\"\"YGL151W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NUT1\"\",\"\"NUT1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL161C\"\",\"\"YGL161C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL170C\"\",\"\"YGL170C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SPO74\"\",\"\"SPO74\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL177W\"\",\"\"YGL177W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGL198W\"\",\"\"YGL198W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR017W\"\",\"\"YGR017W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR081C\"\",\"\"YGR081C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR090W\"\",\"\"YGR090W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UTP22\"\",\"\"UTP22\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR103W\"\",\"\"YGR103W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOP7\"\",\"\"NOP7\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR117C\"\",\"\"YGR117C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000221\"\",\"\"hydrogen-transporting ATPase V1 domain\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR134W\"\",\"\"YGR134W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CAF130\"\",\"\"CAF130\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000175\"\",\"\"3'-5' exoribonuclease\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004518\"\",\"\"nuclease\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004527\"\",\"\"exonuclease\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004540\"\",\"\"ribonuclease\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008408\"\",\"\"3'-5' exonuclease\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016896\"\",\"\"exoribonuclease, producing 5'-phosphomonoesters\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR145W\"\",\"\"YGR145W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ENP2\"\",\"\"ENP2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR150C\"\",\"\"YGR150C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR156W\"\",\"\"YGR156W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PTI1\"\",\"\"PTI1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006378\"\",\"\"mRNA polyadenylation\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030363\"\",\"\"pre-mRNA cleavage factor\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030364\"\",\"\"cleavage/polyadenylation specificity factor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR161C\"\",\"\"YGR161C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000074\"\",\"\"regulation of cell cycle\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR166W\"\",\"\"YGR166W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=KRE11\"\",\"\"KRE11\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR172C\"\",\"\"YGR172C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIP1\"\",\"\"YIP1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR232W\"\",\"\"YGR232W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NAS6\"\",\"\"NAS6\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR245C\"\",\"\"YGR245C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SDA1\"\",\"\"SDA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR251W\"\",\"\"YGR251W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR278W\"\",\"\"YGR278W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CWC22\"\",\"\"CWC22\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008380\"\",\"\"RNA splicing\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YGR290W\"\",\"\"YGR290W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHL006C\"\",\"\"YHL006C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SHU1\"\",\"\"SHU1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHL021C\"\",\"\"YHL021C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003899\"\",\"\"DNA-directed RNA polymerase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016779\"\",\"\"nucleotidyltransferase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHL030W\"\",\"\"YHL030W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ECM29\"\",\"\"ECM29\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHL044W\"\",\"\"YHL044W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHL045W\"\",\"\"YHL045W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR004C\"\",\"\"YHR004C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NEM1\"\",\"\"NEM1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR060W\"\",\"\"YHR060W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=VMA22\"\",\"\"VMA22\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003936\"\",\"\"hydrogen-transporting two-sector ATPase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0015405\"\",\"\"P-P-bond-hydrolysis-driven transporter\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0015442\"\",\"\"hydrogen-/sodium-translocating ATPase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016820\"\",\"\"hydrolase, acting on acid anhydrides, catalyzing transmembrane movement of substances\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR066W\"\",\"\"YHR066W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SSF1\"\",\"\"SSF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR080C\"\",\"\"YHR080C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006487\"\",\"\"N-linked glycosylation\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR081W\"\",\"\"YHR081W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=LRP1\"\",\"\"LRP1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000176\"\",\"\"nuclear exosome (RNase complex)\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000177\"\",\"\"cytoplasmic exosome (RNase complex)\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000178\"\",\"\"exosome (RNase complex)\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR088W\"\",\"\"YHR088W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RPF1\"\",\"\"RPF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR105W\"\",\"\"YHR105W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR195W\"\",\"\"YHR195W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NVJ1\"\",\"\"NVJ1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0042145\"\",\"\"homotypic vacuole fusion (non-autophagic)\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR197W\"\",\"\"YHR197W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=IPI2\"\",\"\"IPI2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YHR207C\"\",\"\"YHR207C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SET5\"\",\"\"SET5\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006772\"\",\"\"thiamin metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0009228\"\",\"\"thiamin biosynthesis\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL009C-A\"\",\"\"YIL009C-A\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=EST3\"\",\"\"EST3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL037C\"\",\"\"YIL037C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PRM2\"\",\"\"PRM2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL075C\"\",\"\"YIL075C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RPN2\"\",\"\"RPN2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL106W\"\",\"\"YIL106W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MOB1\"\",\"\"MOB1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016772\"\",\"\"transferase, transferring phosphorus-containing groups\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL137C\"\",\"\"YIL137C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIL141W\"\",\"\"YIL141W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003701\"\",\"\"RNA polymerase I transcription factor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL010C\"\",\"\"YJL010C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016279\"\",\"\"protein-lysine N-methyltransferase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL026W\"\",\"\"YJL026W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RNR2\"\",\"\"RNR2\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005717\"\",\"\"chromatin\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL044C\"\",\"\"YJL044C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GYP6\"\",\"\"GYP6\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0030008\"\",\"\"TRAPP\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL057C\"\",\"\"YJL057C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=IKS1\"\",\"\"IKS1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL069C\"\",\"\"YJL069C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UTP18\"\",\"\"UTP18\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL080C\"\",\"\"YJL080C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SCP160\"\",\"\"SCP160\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL095W\"\",\"\"YJL095W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BCK1\"\",\"\"BCK1\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000143\"\",\"\"actin cap (sensu Saccharomyces)\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL107C\"\",\"\"YJL107C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL124C\"\",\"\"YJL124C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=LSM1\"\",\"\"LSM1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL149W\"\",\"\"YJL149W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL151C\"\",\"\"YJL151C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SNA3\"\",\"\"SNA3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJL160C\"\",\"\"YJL160C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR015W\"\",\"\"YJR015W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR038C\"\",\"\"YJR038C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005742\"\",\"\"mitochondrial outer membrane translocase complex\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR050W\"\",\"\"YJR050W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ISY1\"\",\"\"ISY1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR062C\"\",\"\"YJR062C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NTA1\"\",\"\"NTA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR082C\"\",\"\"YJR082C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=EAF6\"\",\"\"EAF6\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR084W\"\",\"\"YJR084W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CSN12\"\",\"\"CSN12\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR087W\"\",\"\"YJR087W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJR115W\"\",\"\"YJR115W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0004526\"\",\"\"ribonuclease P\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005655\"\",\"\"ribonuclease P complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016891\"\",\"\"endoribonuclease, producing 5'-phosphomonoesters\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL009W\"\",\"\"YKL009W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MRT4\"\",\"\"MRT4\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL014C\"\",\"\"YKL014C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL021C\"\",\"\"YKL021C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MAK11\"\",\"\"MAK11\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL039W\"\",\"\"YKL039W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PTM1\"\",\"\"PTM1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL059C\"\",\"\"YKL059C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MPE1\"\",\"\"MPE1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL061W\"\",\"\"YKL061W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL095W\"\",\"\"YKL095W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YJU2\"\",\"\"YJU2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL137W\"\",\"\"YKL137W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL143W\"\",\"\"YKL143W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=LTV1\"\",\"\"LTV1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL172W\"\",\"\"YKL172W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=EBP2\"\",\"\"EBP2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL191W\"\",\"\"YKL191W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DPH2\"\",\"\"DPH2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL213C\"\",\"\"YKL213C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DOA1\"\",\"\"DOA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL218C\"\",\"\"YKL218C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SRY1\"\",\"\"SRY1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKL222C\"\",\"\"YKL222C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKR060W\"\",\"\"YKR060W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKR068C\"\",\"\"YKR068C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BET3\"\",\"\"BET3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YKR081C\"\",\"\"YKR081C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RPF2\"\",\"\"RPF2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLL027W\"\",\"\"YLL027W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ISA1\"\",\"\"ISA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLL036C\"\",\"\"YLL036C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PRP19\"\",\"\"PRP19\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLL051C\"\",\"\"YLL051C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=FRE6\"\",\"\"FRE6\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000022\"\",\"\"mitotic spindle elongation\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005680\"\",\"\"anaphase-promoting complex\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0007091\"\",\"\"mitotic metaphase/anaphase transition\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008054\"\",\"\"cyclin catabolism\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR009W\"\",\"\"YLR009W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RLP24\"\",\"\"RLP24\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR037C\"\",\"\"YLR037C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DAN2\"\",\"\"DAN2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR072W\"\",\"\"YLR072W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005819\"\",\"\"spindle\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR074C\"\",\"\"YLR074C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BUD20\"\",\"\"BUD20\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR097C\"\",\"\"YLR097C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR117C\"\",\"\"YLR117C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CLF1\"\",\"\"CLF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR176C\"\",\"\"YLR176C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RFX1\"\",\"\"RFX1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR183C\"\",\"\"YLR183C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TOS4\"\",\"\"TOS4\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR186W\"\",\"\"YLR186W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=EMG1\"\",\"\"EMG1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR189C\"\",\"\"YLR189C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UGT51\"\",\"\"UGT51\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR198C\"\",\"\"YLR198C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005045\"\",\"\"endoplasmic reticulum receptor\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR203C\"\",\"\"YLR203C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MSS51\"\",\"\"MSS51\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005774\"\",\"\"vacuolar membrane\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR208W\"\",\"\"YLR208W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SEC13\"\",\"\"SEC13\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR221C\"\",\"\"YLR221C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RSA3\"\",\"\"RSA3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR224W\"\",\"\"YLR224W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR266C\"\",\"\"YLR266C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PDR8\"\",\"\"PDR8\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR269C\"\",\"\"YLR269C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR287C\"\",\"\"YLR287C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006414\"\",\"\"translational elongation\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR289W\"\",\"\"YLR289W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GUF1\"\",\"\"GUF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR306W\"\",\"\"YLR306W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UBC12\"\",\"\"UBC12\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR343W\"\",\"\"YLR343W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0007029\"\",\"\"ER organization and biogenesis\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0045047\"\",\"\"protein-ER targeting\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR351C\"\",\"\"YLR351C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NIT3\"\",\"\"NIT3\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006893\"\",\"\"Golgi to plasma membrane transport\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR352W\"\",\"\"YLR352W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR358C\"\",\"\"YLR358C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR409C\"\",\"\"YLR409C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UTP21\"\",\"\"UTP21\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR421C\"\",\"\"YLR421C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RPN13\"\",\"\"RPN13\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR424W\"\",\"\"YLR424W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR427W\"\",\"\"YLR427W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR435W\"\",\"\"YLR435W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TSR2\"\",\"\"TSR2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR446W\"\",\"\"YLR446W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YLR456W\"\",\"\"YLR456W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YML077W\"\",\"\"YML077W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BET5\"\",\"\"BET5\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YML088W\"\",\"\"YML088W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UFO1\"\",\"\"UFO1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YML105C\"\",\"\"YML105C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SEC65\"\",\"\"SEC65\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008249\"\",\"\"protein signal sequence binding\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YML125C\"\",\"\"YML125C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005751\"\",\"\"respiratory chain complex IV (sensu Eukarya)\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR002W\"\",\"\"YMR002W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000145\"\",\"\"exocyst\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR025W\"\",\"\"YMR025W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CSI1\"\",\"\"CSI1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR049C\"\",\"\"YMR049C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ERB1\"\",\"\"ERB1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR071C\"\",\"\"YMR071C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR075W\"\",\"\"YMR075W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RCO1\"\",\"\"RCO1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR078C\"\",\"\"YMR078C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CTF18\"\",\"\"CTF18\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0003893\"\",\"\"epsilon DNA polymerase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR116C\"\",\"\"YMR116C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ASC1\"\",\"\"ASC1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR158W\"\",\"\"YMR158W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR213W\"\",\"\"YMR213W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CEF1\"\",\"\"CEF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR218C\"\",\"\"YMR218C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS130\"\",\"\"TRS130\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR266W\"\",\"\"YMR266W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RSN1\"\",\"\"RSN1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR288W\"\",\"\"YMR288W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=HSH155\"\",\"\"HSH155\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR290C\"\",\"\"YMR290C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=HAS1\"\",\"\"HAS1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR298W\"\",\"\"YMR298W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008565\"\",\"\"protein transporter\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YMR322C\"\",\"\"YMR322C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0008614\"\",\"\"pyridoxine metabolism\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0042364\"\",\"\"water-soluble vitamin biosynthesis\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL041C\"\",\"\"YNL041C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=COG6\"\",\"\"COG6\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL044W\"\",\"\"YNL044W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIP3\"\",\"\"YIP3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL086W\"\",\"\"YNL086W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL107W\"\",\"\"YNL107W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YAF9\"\",\"\"YAF9\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL110C\"\",\"\"YNL110C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOP15\"\",\"\"NOP15\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL132W\"\",\"\"YNL132W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=KRE33\"\",\"\"KRE33\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL175C\"\",\"\"YNL175C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOP13\"\",\"\"NOP13\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL182C\"\",\"\"YNL182C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=IPI3\"\",\"\"IPI3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL201C\"\",\"\"YNL201C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PSY2\"\",\"\"PSY2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL207W\"\",\"\"YNL207W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RIO2\"\",\"\"RIO2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL222W\"\",\"\"YNL222W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SSU72\"\",\"\"SSU72\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL263C\"\",\"\"YNL263C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YIF1\"\",\"\"YIF1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL265C\"\",\"\"YNL265C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=IST1\"\",\"\"IST1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL287W\"\",\"\"YNL287W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SEC21\"\",\"\"SEC21\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL288W\"\",\"\"YNL288W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CAF40\"\",\"\"CAF40\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL308C\"\",\"\"YNL308C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=KRI1\"\",\"\"KRI1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNL311C\"\",\"\"YNL311C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YNR054C\"\",\"\"YNR054C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOL030W\"\",\"\"YOL030W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=GAS5\"\",\"\"GAS5\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOL044W\"\",\"\"YOL044W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PEX15\"\",\"\"PEX15\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOL077C\"\",\"\"YOL077C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BRX1\"\",\"\"BRX1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOL087C\"\",\"\"YOL087C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOL149W\"\",\"\"YOL149W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DCP1\"\",\"\"DCP1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR047C\"\",\"\"YOR047C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=STD1\"\",\"\"STD1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR056C\"\",\"\"YOR056C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOB1\"\",\"\"NOB1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR080W\"\",\"\"YOR080W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DIA2\"\",\"\"DIA2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR111W\"\",\"\"YOR111W\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0000147\"\",\"\"actin cortical patch assembly\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR115C\"\",\"\"YOR115C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TRS33\"\",\"\"TRS33\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR145C\"\",\"\"YOR145C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR179C\"\",\"\"YOR179C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR205C\"\",\"\"YOR205C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR206W\"\",\"\"YOR206W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NOC2\"\",\"\"NOC2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR220W\"\",\"\"YOR220W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR231W\"\",\"\"YOR231W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MKK1\"\",\"\"MKK1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR243C\"\",\"\"YOR243C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PUS7\"\",\"\"PUS7\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR272W\"\",\"\"YOR272W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YTM1\"\",\"\"YTM1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR279C\"\",\"\"YOR279C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RFM1\"\",\"\"RFM1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR285W\"\",\"\"YOR285W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YOR378W\"\",\"\"YOR378W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL003W\"\",\"\"YPL003W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ULA1\"\",\"\"ULA1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL012W\"\",\"\"YPL012W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RRP12\"\",\"\"RRP12\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL014W\"\",\"\"YPL014W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL064C\"\",\"\"YPL064C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CWC27\"\",\"\"CWC27\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006350\"\",\"\"transcription\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL095C\"\",\"\"YPL095C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL151C\"\",\"\"YPL151C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PRP46\"\",\"\"PRP46\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL161C\"\",\"\"YPL161C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=BEM4\"\",\"\"BEM4\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005934\"\",\"\"bud tip\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0005940\"\",\"\"septin ring\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL179W\"\",\"\"YPL179W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=PPQ1\"\",\"\"PPQ1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL181W\"\",\"\"YPL181W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=RXT1\"\",\"\"RXT1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL194W\"\",\"\"YPL194W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=DDC1\"\",\"\"DDC1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL196W\"\",\"\"YPL196W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=OXR1\"\",\"\"OXR1\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL208W\"\",\"\"YPL208W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL211W\"\",\"\"YPL211W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=NIP7\"\",\"\"NIP7\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL224C\"\",\"\"YPL224C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=MMT2\"\",\"\"MMT2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL241C\"\",\"\"YPL241C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=CIN2\"\",\"\"CIN2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL246C\"\",\"\"YPL246C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPL269W\"\",\"\"YPL269W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=KAR9\"\",\"\"KAR9\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR016C\"\",\"\"YPR016C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TIF6\"\",\"\"TIF6\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR040W\"\",\"\"YPR040W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TIP41\"\",\"\"TIP41\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016302\"\",\"\"phosphatase\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0016791\"\",\"\"phosphoric monoester hydrolase\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR045C\"\",\"\"YPR045C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR048W\"\",\"\"YPR048W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=TAH18\"\",\"\"TAH18\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR066W\"\",\"\"YPR066W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UBA3\"\",\"\"UBA3\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR067W\"\",\"\"YPR067W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=ISA2\"\",\"\"ISA2\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR093C\"\",\"\"YPR093C\"\")\"\n\"HYPERLINK(\"\"http://godatabase.org/cgi-bin/go.cgi?view=details&query=GO:0006351\"\",\"\"transcription, DNA-dependent\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR101W\"\",\"\"YPR101W\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=SNT309\"\",\"\"SNT309\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR144C\"\",\"\"YPR144C\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=UTP19\"\",\"\"UTP19\"\")\"\n\"HYPERLINK(\"\"http://genome-www4.stanford.edu/cgi-bin/SGD/locus.pl?locus=YPR174C\"\",\"\"YPR174C\"\")\"\n\"A12+1\"\n\"A22+1\"\n\"#REF!\"\n\"SUM(B3:K3)\"\n\"IF(L2=\"\"accelerator\"\", 2, IF(L2=\"\"LEP\"\", 3, IF(L2=\"\"vertexing\"\",4,IF(L2=\"\"tracking\"\",5,IF(L2=\"\"calorimetry\"\",6,7)))))\"\n\"IF(N2=N1, O1+1,1)\"\n\"IF(W2=\"\"yes\"\",1, 0)\"\n\"IF($C2=\"\"\"\", 0, 1 + IF($D2=\"\"\"\", 0, 1 + IF($E2=\"\"\"\", 0, 1+IF($F2=\"\"\"\", 0, 1+IF($G2=\"\"\"\", 0, 1 + IF($Z2=\"\"\"\", 0, 1 + IF($AA2=\"\"\"\", 0, 1)))))))\"\n\"IF(W3=\"\"yes\"\",Y2+1, Y2)\"\n\"IF(W38=\"\"yes\"\",Y36+1, Y36)\"\n\"42700+31000\"\n\"48400+38000\"\n\"51300+44000\"\n\"51000+20510\"\n\"118900+39590\"\n\"227100+59940\"\n\"20400+25800\"\n\"20400+35700\"\n\"20400+36600\"\n\"SUM(Q2:Q82)\"\n\"M4\"\n\"SUMIF(M4:M50, M53, Q4:Q50)\"\n\"COUNTIF(M4:M50, M53)\"\n\"AF53+AK53\"\n\"M27\"\n\"SUMIF(M4:M50, M54, Q4:Q50)\"\n\"COUNTIF(M4:M50, M54)\"\n\"M34\"\n\"SUMIF(M4:M50, M55, Q4:Q50)\"\n\"COUNTIF(M4:M50, M55)\"\n\"M36\"\n\"SUMIF(M4:M50, M56, Q4:Q50)\"\n\"COUNTIF(M4:M50, M56)\"\n\"M42\"\n\"SUMIF(M4:M50, M57, Q4:Q50)\"\n\"COUNTIF(M4:M50, M57)\"\n\"M50\"\n\"SUMIF(M4:M50, M58, Q4:Q50)\"\n\"COUNTIF(M4:M50, M58)\"\n\"SUM(Q53:Q58)\"\n\"IF(SUM(Q4:Q50)=Q59,\"\"OK\"\",\"\"Error!\"\")\"\n\"M74\"\n\"SUMIF(M74:M103, M63, Q74:Q103)\"\n\"SUMIF(M74:M102, M63, R74:R102)\"\n\"SUMIF(M74:M101, M63, S74:S101)\"\n\"SUM(Q63:S63)\"\n\"COUNTIF(M74:M103, M63)\"\n\"Q53+Q63\"\n\"M88\"\n\"SUMIF(M74:M103, M64, Q74:Q103)\"\n\"SUMIF(M74:M103, M64, R74:R103)\"\n\"SUMIF(M74:M103, M64, S74:S103)\"\n\"COUNTIF(M74:M103, M64)\"\n\"M90\"\n\"SUMIF(M74:M103, M65, Q74:Q103)\"\n\"SUMIF(M74:M103, M65, R74:R103)\"\n\"SUMIF(M74:M103, M65, S74:S103)\"\n\"COUNTIF(M74:M103, M65)\"\n\"M92\"\n\"SUMIF(M74:M103, M66, Q74:Q103)\"\n\"SUMIF(M74:M103, M66, R74:R103)\"\n\"SUMIF(M74:M103, M66, S74:S103)\"\n\"COUNTIF(M74:M103, M66)\"\n\"M98\"\n\"SUMIF(M74:M103, M67, Q74:Q103)\"\n\"SUMIF(M74:M103, M67, R74:R103)\"\n\"SUMIF(M74:M103, M67, S74:S103)\"\n\"COUNTIF(M74:M103, M67)\"\n\"M103\"\n\"SUMIF(M74:M104, M68, Q74:Q104)\"\n\"SUMIF(M74:M104, M68, R74:R104)\"\n\"SUMIF(M74:M104, M68, S74:S104)\"\n\"COUNTIF(M74:M104, M68)\"\n\"IF(SUM(Q74:Q103)=Q69,\"\"OK\"\",\"\"Error!\"\")\"\n\"AE53\"\n\"AE63+AE72\"\n\"AI63+AF72\"\n\"COUNTIF($A$2:$A$147, C2)\"\n\"COUNTIF($B$2:$B$147, C2)\"\n\"SUM($B$2:$B$9)\"\n\"SUM($B$12:$B$35)\"\n\"SUM($B$38:$B$40)\"\n\"SUM($B$43:$B$48)\"\n\"SUM($B$51:$B$93)\"\n\"SUM($B$96:$B$103)\"\n\"SUM($B$106:$B$115)\"\n\"SUM($B$118:$B$124)\"\n\"SUM($B$127:$B$129)\"\n\"SUM($B$132:$B$133)\"\n\"SUM($B$136:$B$153)\"\n\"SUM(B154,B134,B130,B125,B116,B104,B94,B49,B41,B36,B10)\"\n\"SUM(B4:B8)\"\n\"SUM(B12:B34)\"\n\"SUM(B38:B39)\"\n\"SUM(B43)\"\n\"SUM(B52:B106)\"\n\"SUM(B110:B113)\"\n\"SUM(B117:B124)\"\n\"SUM(B128:B139)\"\n\"SUM(B147:B161)\"\n\"SUM(B162+B144+B140+B125+B114+B107+B49+B44+B40+B35+B9)\"\n\"SUM(B7:U7)\"\n\"SUM(B6:B190)\"\n\"B4+1\"\n\"B4+1\"\n\"B4+1\"\n\"B10+1\"\n\"B10+1\"\n\"B19+1\"\n\"B19+1\"\n\"B21+1\"\n\"B21+1\"\n\"B21+1\"\n\"B21+1\"\n\"CONCATENATE(\"\"<head><title>\"\",D3,\"\"</title></head>\"\")\"\n\"CONCATENATE(\"\"<td><img src=\"\",D17,\"\" alt='' width='180' height='256' border='0'></td>\"\")\"\n\"CONCATENATE(\"\"         <div align='center'><br><font size='+2'>\"\",D22,\"\"</font><br>\"\")\"\n\"CONCATENATE(\"\"         \"\",D23,\"\"</div><br></td>\"\")\"\n\"CONCATENATE(\"\"         <td ><a href='http://www.clbme.bas.bg/' target='_top'>\"\",D27,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"         <a href='http://www.bas.bg/' target='_top'>\"\",D28,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"          \"\",D29,\"\"<br>\"\")\"\n\"CONCATENATE(\"\"         <a href='../../Address.html'>\"\",D30,\"\"</a> <br>\"\")\"\n\"CONCATENATE(\"\"         <td>\"\",D36,\"\"</td>\"\")\"\n\"CONCATENATE(\"\"         <td><a href='mailto:\"\",D44,\"\"'>\"\",D44,\"\"</a></td>\"\")\"\n\"IF(B58,CONCATENATE(\"\" &nbsp;<strong><a href='index.html'>\"\",D58,\"\"</a></strong>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B59,CONCATENATE(\"\" <font color=#FF0000>&nbsp;<strong>\"\",D59,\"\"</strong>&nbsp;</font>\"\"),\"\"\"\")\"\n\"IF(B60,CONCATENATE(\"\" &nbsp;<a href='citations.html'><strong>\"\",D60,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B61,CONCATENATE(\"\" &nbsp;<a href='cv.html'><strong>\"\",D61,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A67,\"\"></a>[\"\",A67,\"\".]</font></td><td width='510'>\"\",D67,\"\"</td>\"\",IF(E67<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E67,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F67<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F67,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A68,\"\"></a>[\"\",A68,\"\".]</font></td><td width='510'>\"\",D68,\"\"</td>\"\",IF(E68<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E68,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F68<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F68,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A69,\"\"></a>[\"\",A69,\"\".]</font></td><td width='510'>\"\",D69,\"\"</td>\"\",IF(E69<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E69,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F69<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F69,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A70,\"\"></a>[\"\",A70,\"\".]</font></td><td width='510'>\"\",D70,\"\"</td>\"\",IF(E70<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E70,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F70<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F70,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A71,\"\"></a>[\"\",A71,\"\".]</font></td><td width='510'>\"\",D71,\"\"</td>\"\",IF(E71<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E71,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F71<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F71,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A72,\"\"></a>[\"\",A72,\"\".]</font></td><td width='510'>\"\",D72,\"\"</td>\"\",IF(E72<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E72,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F72<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F72,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A73,\"\"></a>[\"\",A73,\"\".]</font></td><td width='510'>\"\",D73,\"\"</td>\"\",IF(E73<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E73,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F73<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F73,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A74,\"\"></a>[\"\",A74,\"\".]</font></td><td width='510'>\"\",D74,\"\"</td>\"\",IF(E74<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E74,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F74<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F74,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A75,\"\"></a>[\"\",A75,\"\".]</font></td><td width='510'>\"\",D75,\"\"</td>\"\",IF(E75<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E75,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F75<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F75,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A76,\"\"></a>[\"\",A76,\"\".]</font></td><td width='510'>\"\",D76,\"\"</td>\"\",IF(E76<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E76,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F76<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F76,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A77,\"\"></a>[\"\",A77,\"\".]</font></td><td width='510'>\"\",D77,\"\"</td>\"\",IF(E77<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E77,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F77<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F77,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A78,\"\"></a>[\"\",A78,\"\".]</font></td><td width='510'>\"\",D78,\"\"</td>\"\",IF(E78<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E78,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F78<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F78,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A79,\"\"></a>[\"\",A79,\"\".]</font></td><td width='510'>\"\",D79,\"\"</td>\"\",IF(E79<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E79,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F79<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F79,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A80,\"\"></a>[\"\",A80,\"\".]</font></td><td width='510'>\"\",D80,\"\"</td>\"\",IF(E80<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E80,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F80<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F80,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A81,\"\"></a>[\"\",A81,\"\".]</font></td><td width='510'>\"\",D81,\"\"</td>\"\",IF(E81<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E81,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F81<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F81,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A82,\"\"></a>[\"\",A82,\"\".]</font></td><td width='510'>\"\",D82,\"\"</td>\"\",IF(E82<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E82,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F82<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F82,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A83,\"\"></a>[\"\",A83,\"\".]</font></td><td width='510'>\"\",D83,\"\"</td>\"\",IF(E83<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E83,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F83<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F83,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A84,\"\"></a>[\"\",A84,\"\".]</font></td><td width='510'>\"\",D84,\"\"</td>\"\",IF(E84<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E84,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F84<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F84,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A85,\"\"></a>[\"\",A85,\"\".]</font></td><td width='510'>\"\",D85,\"\"</td>\"\",IF(E85<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E85,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F85<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F85,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A86,\"\"></a>[\"\",A86,\"\".]</font></td><td width='510'>\"\",D86,\"\"</td>\"\",IF(E86<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E86,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F86<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F86,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A87,\"\"></a>[\"\",A87,\"\".]</font></td><td width='510'>\"\",D87,\"\"</td>\"\",IF(E87<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E87,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F87<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F87,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A88,\"\"></a>[\"\",A88,\"\".]</font></td><td width='510'>\"\",D88,\"\"</td>\"\",IF(E88<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E88,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F88<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F88,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A89,\"\"></a>[\"\",A89,\"\".]</font></td><td width='510'>\"\",D89,\"\"</td>\"\",IF(E89<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E89,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F89<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F89,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A90,\"\"></a>[\"\",A90,\"\".]</font></td><td width='510'>\"\",D90,\"\"</td>\"\",IF(E90<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E90,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F90<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F90,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A91,\"\"></a>[\"\",A91,\"\".]</font></td><td width='510'>\"\",D91,\"\"</td>\"\",IF(E91<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E91,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F91<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F91,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A92,\"\"></a>[\"\",A92,\"\".]</font></td><td width='510'>\"\",D92,\"\"</td>\"\",IF(E92<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E92,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F92<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F92,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A93,\"\"></a>[\"\",A93,\"\".]</font></td><td width='510'>\"\",D93,\"\"</td>\"\",IF(E93<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E93,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F93<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F93,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A94,\"\"></a>[\"\",A94,\"\".]</font></td><td width='510'>\"\",D94,\"\"</td>\"\",IF(E94<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E94,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F94<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F94,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A95,\"\"></a>[\"\",A95,\"\".]</font></td><td width='510'>\"\",D95,\"\"</td>\"\",IF(E95<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E95,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F95<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F95,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A96,\"\"></a>[\"\",A96,\"\".]</font></td><td width='510'>\"\",D96,\"\"</td>\"\",IF(E96<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E96,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F96<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F96,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A97,\"\"></a>[\"\",A97,\"\".]</font></td><td width='510'>\"\",D97,\"\"</td>\"\",IF(E97<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E97,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F97<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F97,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A98,\"\"></a>[\"\",A98,\"\".]</font></td><td width='510'>\"\",D98,\"\"</td>\"\",IF(E98<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E98,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F98<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F98,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A99,\"\"></a>[\"\",A99,\"\".]</font></td><td width='510'>\"\",D99,\"\"</td>\"\",IF(E99<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E99,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F99<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F99,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A100,\"\"></a>[\"\",A100,\"\".]</font></td><td width='510'>\"\",D100,\"\"</td>\"\",IF(E100<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E100,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F100<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F100,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A101,\"\"></a>[\"\",A101,\"\".]</font></td><td width='510'>\"\",D101,\"\"</td>\"\",IF(E101<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E101,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F101<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F101,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A102,\"\"></a>[\"\",A102,\"\".]</font></td><td width='510'>\"\",D102,\"\"</td>\"\",IF(E102<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E102,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F102<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F102,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A103,\"\"></a>[\"\",A103,\"\".]</font></td><td width='510'>\"\",D103,\"\"</td>\"\",IF(E103<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E103,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F103<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F103,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A104,\"\"></a>[\"\",A104,\"\".]</font></td><td width='510'>\"\",D104,\"\"</td>\"\",IF(E104<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E104,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F104<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F104,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A105,\"\"></a>[\"\",A105,\"\".]</font></td><td width='510'>\"\",D105,\"\"</td>\"\",IF(E105<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E105,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F105<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F105,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A106,\"\"></a>[\"\",A106,\"\".]</font></td><td width='510'>\"\",D106,\"\"</td>\"\",IF(E106<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E106,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F106<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F106,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A107,\"\"></a>[\"\",A107,\"\".]</font></td><td width='510'>\"\",D107,\"\"</td>\"\",IF(E107<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E107,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F107<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F107,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<tr><td width='25' valign='top'><font color='#FF0000'><a name=\"\",A108,\"\"></a>[\"\",A108,\"\".]</font></td><td width='510'>\"\",D108,\"\"</td>\"\",IF(E108<>\"\"\"\",                  CONCATENATE(\"\"<td width='25' valign='top'><a href='\"\",                                                 E108,                                                  \"\"'><font color='#FF0000'>Abstr.</font></a>\"\"),                  \"\"<td width='25' valign='top'><font color='#FF0000'>Abstr.</font>\"\"),IF(F108<>\"\"\"\",     CONCATENATE(\"\"<br><a href='\"\",                                    F108,                                    \"\"'><font color='#FF0000'>FT</font></a></td></tr>\"\"),      \"\"<br><font color='#FF0000'>FT.</font></td></tr>\"\"))\"\n\"CONCATENATE(\"\"<head><title>\"\",D3,\"\"</title></head>\"\")\"\n\"CONCATENATE(\"\"<td><img src=\"\",D17,\"\" alt='' width='180' height='256' border='0'></td>\"\")\"\n\"CONCATENATE(\"\"         <div align='center'><br><font size='+2'>\"\",D22,\"\"</font><br>\"\")\"\n\"CONCATENATE(\"\"         \"\",D23,\"\"</div><br></td>\"\")\"\n\"CONCATENATE(\"\"         <td ><a href='http://www.clbme.bas.bg/' target='_top'>\"\",D27,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"         <a href='http://www.bas.bg/' target='_top'>\"\",D28,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"          \"\",D29,\"\"<br>\"\")\"\n\"CONCATENATE(\"\"         <a href='../../Address.html'>\"\",D30,\"\"</a> <br>\"\")\"\n\"CONCATENATE(\"\"         <td>\"\",D36,\"\"</td>\"\")\"\n\"CONCATENATE(\"\"         <td><a href='mailto:\"\",D44,\"\"'>\"\",D44,\"\"</a></td>\"\")\"\n\"IF(B58,CONCATENATE(\"\" &nbsp;<strong><a href='index.html'>\"\",D58,\"\"</a></strong>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B59,CONCATENATE(\"\" &nbsp;<a href='publications.html'><strong>\"\",D59,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B60,CONCATENATE(\"\" &nbsp;<a href='citations.html'><strong>\"\",D60,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B61,CONCATENATE(\"\" <font color=#FF0000>&nbsp;<strong>\"\",D61,\"\"</strong>&nbsp;</font>\"\"),\"\"\"\")\"\n\"IF(B67=TRUE,CONCATENATE(\"\"<tr><td colspan=2 valign='bottom'><img src='../../img/line.gif'  width=536 height=1 border=0></td></tr><tr><td width=180 valign='top' ><table width='100%' bgcolor='#EEEEEE'><tr><td>&nbsp;<strong>\"\",D67,\"\"</strong></td></tr></table></td><td width=356 valign='top'>  <table cellspacing=0 cellpadding=1 border=0>\"\"),\"\"\"\")\"\n\"IF(AND(B68,B$67),CONCATENATE(\"\"<tr><td><em><strong>\"\",D68,\"\"</strong></em></td><td>\"\",E68,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(B67=TRUE,\"\"</table></td></tr>\"\",\"\"\"\")\"\n\"IF(B80=TRUE,CONCATENATE(\"\"<tr><td colspan=2 valign='bottom'><img src='../../img/line.gif'  width=536 height=1 border=0></td></tr><tr><td width=180 valign='top' ><table width='100%' bgcolor='#EEEEEE'><tr><td>&nbsp;<strong>\"\",D80,\"\"</strong></td></tr></table></td><td width=356 valign='top'>  <table width='100%' cellspacing=0 cellpadding=1 border=0>\"\"),\"\"\"\")\"\n\"IF(AND(B$80,B81),CONCATENATE(\"\"<tr><td>\"\",E81,\"\" - \"\",F81,\"\"</td><td>\"\",D81,\"\"</td><td>\"\",G81,\"\"</td></tr><tr><td colspan=3><strong>\"\",H81,\"\"</strong></td></tr><tr><td colspan=3><em>\"\",I81,\"\"</em></td></tr><tr><td colspan=3>&nbsp;</td></tr>\"\"),\"\"\"\")\"\n\"IF(B80=TRUE,\"\"</table></td></tr>\"\",\"\"\"\")\"\n\"IF(B94=TRUE,\"\"</table></td></tr>\"\",\"\"\"\")\"\n\"IF(B106=TRUE,CONCATENATE(\"\"<tr><td colspan=2 valign='bottom'><img src='../../img/line.gif'  width=536 height=1 border=0></td></tr><tr><td width=180 valign='top' ><table width='100%' bgcolor='#EEEEEE'><tr><td>&nbsp;<strong>\"\",D106,\"\"</strong></td></tr></table></td><td width=356 valign='top'>\"\",E106,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(B108=TRUE,\"\"\"\",\"\"\"\")\"\n\"IF(AND(B$80,B110),CONCATENATE(\"\"<tr><td>\"\",D110,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(B121=TRUE,CONCATENATE(\"\"<tr><td colspan=2 valign='bottom'><img src='../../img/line.gif'  width=536 height=1 border=0></td></tr><tr><td width=180 valign='top' ><table width='100%' bgcolor='#EEEEEE'><tr><td>&nbsp;<strong>\"\",D121,\"\"</strong></td></tr></table></td><td width=356 valign='top'>\"\"),\"\"\"\")\"\n\"IF(AND(B$215,B122),CONCATENATE(\"\"\"\",D122,\"\"<br><br>\"\"),\"\"\"\")\"\n\"IF(B121,\"\"</td></tr>\"\",\"\"\"\")\"\n\"IF(AND(B193,B194),CONCATENATE(\"\"<tr><td colspan=3>\"\",E194,\"\" <a href='publications.html'>\"\",D194,\"\"</a></td></tr>\"\"),\"\"\"\")\"\n\"IF(AND(B195,B$193),CONCATENATE(\"\"<tr><td width=20 valign='top'>\"\",E195,\"\"</td><td width='10' valign='top'>-&nbsp;</td><td>\"\",D195,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(AND(B199,B$193),CONCATENATE(\"\"<tr><td width=20 valign='top'>\"\",E199,\"\"</td><td width='10' valign='top'>-&nbsp;</td>    <td>\"\",D199,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(B193,\"\"</table></td></tr>\"\",\"\"\"\")\"\n\"IF(AND(B204,B205),CONCATENATE(\"\"<tr><td colspan=3>\"\",E205,\"\" <a href='citations.html'>\"\",D205,\"\"</a></td></tr>\"\"),\"\"\"\")\"\n\"IF(AND(B206,B$204),CONCATENATE(\"\"<tr><td width=20 valign='top'>\"\",E206,\"\"</td><td width='10' valign='top'>-&nbsp;</td><td>\"\",D206,\"\"</td></tr>\"\"),\"\"\"\")\"\n\"IF(AND(B$215,B216),CONCATENATE(\"\"\"\",D216,\"\"<br>\"\"),\"\"\"\")\"\n\"IF(B215=TRUE,\"\"</td></tr></table></td></tr>\"\",\"\"\"\")\"\n\"CONCATENATE(\"\"<head><title>\"\",D3,\"\"</title></head>\"\")\"\n\"CONCATENATE(\"\"<td><img src=\"\",D17,\"\" alt='' width='180' height='256' border='0'></td>\"\")\"\n\"Publications!D17\"\n\"CONCATENATE(\"\"         <div align='center'><br><font size='+2'>\"\",D22,\"\"</font><br>\"\")\"\n\"CONCATENATE(\"\"         \"\",D23,\"\"</div><br></td>\"\")\"\n\"CONCATENATE(\"\"         <td ><a href='http://www.clbme.bas.bg/' target='_top'>\"\",D27,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"         <a href='http://www.bas.bg/' target='_top'>\"\",D28,\"\"</a><br>\"\")\"\n\"CONCATENATE(\"\"          \"\",D29,\"\"<br>\"\")\"\n\"CONCATENATE(\"\"         <a href='../../Address.html'>\"\",D30,\"\"</a> <br>\"\")\"\n\"CONCATENATE(\"\"         <td>\"\",D36,\"\"</td>\"\")\"\n\"CONCATENATE(\"\"         <td><a href='mailto:\"\",D44,\"\"'>\"\",D44,\"\"</a></td>\"\")\"\n\"IF(B58,CONCATENATE(\"\" &nbsp;<strong><a href='index.html'>\"\",D58,\"\"</a></strong>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B59,CONCATENATE(\"\" &nbsp;<a href='publications.html'><strong>\"\",D59,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"IF(B60,CONCATENATE(\"\" <font color=#FF0000>&nbsp;<strong>\"\",D60,\"\"</strong>&nbsp;</font>\"\"),\"\"\"\")\"\n\"IF(B61,CONCATENATE(\"\" &nbsp;<a href='cv.html'><strong>\"\",D61,\"\"</strong></a>&nbsp;\"\"),\"\"\"\")\"\n\"SUM(B70:B89)\"\n\"B67\"\n\"(A69+B70)*B70\"\n\"IF(OR(ISNUMBER(FIND($D$65,D70)),ISNUMBER(FIND($E$65,D70)),ISNUMBER(FIND($F$65,D70)),NOT(D70<>\"\"\"\")),0,1)\"\n\"IF(B70<>1,CONCATENATE(\"\"<tr><td bgcolor='#EEEEEE'>\"\",D70,\"\"</td></tr>\"\"),CONCATENATE(\"\"<tr><td>[\"\",A70,\"\"]. \"\",D70,\"\"</td></tr>\"\"))\"\n\"CONCATENATE(\"\"       &nbsp;<img src='People/\"\",D5,\"\"' width=90 height=112 border=0>&nbsp;\"\")\"\n\"CONCATENATE(\"\"          <td bordercolor=#022D84>&nbsp;&nbsp;\"\",D19,\"\"</td>\"\")\"\n\"CONCATENATE(\"\"          <td bordercolor=#022D84>&nbsp;&nbsp;<A href='mailto:\"\",D27,\"\"'>\"\",D27,\"\"</td>\"\")\"\n\"CONCATENATE(\"\"          <td bordercolor=#022D84>&nbsp;&nbsp;<a href='pwp/\"\",D43,\"\"' target='_parent'>personal information, publications</a></td>\"\")\"\n\"CONCATENATE(\"\"          <td bordercolor=#022D84>&nbsp;&nbsp;<a href='Address.html'>\"\",D51,\"\"</a>\"\",E51,\"\" </td>\"\")\"\n\"11.6*D23^0.969*D22^-1.673\"\n\"(SQRT(0.0000000225*D23)/D22^1.5)*86400\"\n\"21.6*D23^0.67/D22^1.85\"\n\"(IF(D21=0,NA(),IF(D15+D8<10,7776*D23*D21,IF((D15+D8)<3000,4665.6*D23*D21,2592*D23*D21))))/(1.024^5)\"\n\"IF(D15+D8<10,3.33,IF(D15+D8<800,10.3/((D15+D8)^0.49),0.39))\"\n\"(D$15*D16+D$8*D9)/(D$15+D$8)\"\n\"D25*1.024^(D46-20)\"\n\"D34*1.047^(D46-20)\"\n\"D43/0.68\"\n\"D53+D44\"\n\"EXP(-139.34411+(157570.1/(D46+273.15))-(66423080/(D46+273.15)^2)+(12438000000/(D46+273.15)^3)-(862194900000/(D46+273.15)^4))*(1-0.027*D20/760)\"\n\"D57-D45\"\n\"IF((D49/D50)*(1-(D58*(D49-D50)/(D50*D54)))<0,0,(1/(D49-D50))*LN((D49/D50)*(1-(D58*(D49-D50)/(D50*D54)))))\"\n\"D60*D23*60*60*24/5280\"\n\"IF(D60=0,+D58,EXP(LN(D50*D54/D49)-D50*D60))\"\n\"D57-D64\"\n\"B10+((B12-B14-B10)/B8)\"\n\"IF(AND(B8>=B14,B8<=30),10^(0.03*(20-B14)),IF(AND(B8>=0,B8<B14),10^(0.03*(20-B8)),#VALUE!))\"\n\"IF(AND(B8>=B16,B8<=30),10^(0.03*(20-B16)),IF(AND(B8>=0,B8<B16),10^(0.03*(20-B8)),#VALUE!))\"\n\"IF(AND(B10>8,B10<=9),1,IF(AND(B10>=6.5,B10<=8),(1+10^(7.4-B10))/1.25,#VALUE!))\"\n\"IF(AND(B10>=7.7,B10<=9),13.5,IF(AND(B10>=6.5,B10<7.7),20.25*(10^(7.7-B10)/(1+10^(7.4-B10))),#VALUE!))\"\n\"0.09018+2729.92/(273.2+B8)\"\n\"1/((10^(B26-B10))+1)\"\n\"B27*B12\"\n\"1000*(0.52/B22/B24/2)*0.822\"\n\"1000*(0.8/B23/B24/B25)*0.822\"\n\"B33/B27\"\n\"B34/B27\"\n\"IF(AND(B8>=B14,B8<=30),10^(0.03*(20-B14)),IF(AND(B8>=0,B8<B14),10^(0.03*(20-B8)),#VALUE!))\"\n\"IF(AND(B8>=B16,B8<=30),10^(0.03*(20-B16)),IF(AND(B8>=0,B8<B16),10^(0.03*(20-B8)),#VALUE!))\"\n\"IF(AND(B10>8,B10<=9),1,IF(AND(B10>=6.5,B10<=8),(1+10^(7.4-B10))/1.25,#VALUE!))\"\n\"IF(AND(B10>=7.7,B10<=9),16,IF(AND(B10>=6.5,B10<7.7),24*(10^(7.7-B10)/(1+10^(7.4-B10))),#VALUE!))\"\n\"0.09018+2729.92/(273.2+B8)\"\n\"1/((10^(B26-B10))+1)\"\n\"B27*B12\"\n\"1000*(0.52/B22/B24/2)*0.822\"\n\"1000*(0.8/B23/B24/B25)*0.822\"\n\"B33/B27\"\n\"B34/B27\"\n\"(19.9273*B13/(1000-1.005109*B13))\"\n\"IF(B19>0.85,#VALUE!,9.245+0.116*B19)\"\n\"1/(1+10^(B21+0.0324*(298-B9-273)+0.0415*B17/(B9+273)-B11))\"\n\"B27/B$23\"\n\"B31*0.822\"\n\"6.57-0.0118*B13+0.00012*(B13^2)\"\n\"6.57-0.0118*B18+0.00012*(B18^2)\"\n\"1/(1+10^(B25-B14))\"\n\"1/(1+10^(B26-B19))\"\n\"B15/B29\"\n\"B20/B30\"\n\"B13+(B18-B13)/B$10\"\n\"B15+(B20-B15)/B$10\"\n\"B33+(B34-B33)/B$10\"\n\"6.57-0.0118*B37+0.00012*(B37^2)\"\n\"B40-LOG((B39/B38)-1)\"\n\"B8*B30\"\n\"IF(ISNUMBER(B15),IF(B15=0,SQRT(32.2*B11*B14),IF(B15=1,NA(),#VALUE!)),#VALUE!)\"\n\"IF(ISNUMBER(B15),IF(B15=1,(B14*SQRT(8*32.2)/(1.49*B11^(1/6)))^2,IF(B15=0,NA(),#VALUE!)),#VALUE!)\"\n\"B12*SQRT(B38/8)\"\n\"IF(B15=0,B34,IF(B15=1,B39,#VALUE!))\"\n\"B23*B11*B40\"\n\"B31/(B12*B11*B13)\"\n\"IF(ISERR(B57),(B20*B42)/(B12*B13^2),MAXA((B20*B42)/(B12*B13^2),B57))\"\n\"B17/B13\"\n\"B21/B13\"\n\"EXP(-((B48-2*(-2)-B47)^2/(4*B46)))+EXP(-((B48-2*(-2)+B47)^2/(4*B46)))\"\n\"EXP(-((B48-2*(-1)-B47)^2/(4*B46)))+EXP(-((B48-2*(-1)+B47)^2/(4*B46)))\"\n\"EXP(-((B48-2*(0)-B47)^2/(4*B46)))+EXP(-((B48-2*(0)+B47)^2/(4*B46)))\"\n\"EXP(-((B48-2*(1)-B47)^2/(4*B46)))+EXP(-((B48-2*(1)+B47)^2/(4*B46)))\"\n\"EXP(-((B48-2*(2)-B47)^2/(4*B46)))+EXP(-((B48-2*(2)+B47)^2/(4*B46)))\"\n\"IF(ISNUMBER(B25),IF(B25=0,NA(),IF(B25=1,((SUM(B50:B54)*B8/B11)^2)/(B12*4*PI()*B42),#VALUE!)),#VALUE!)\"\n\"IF(ISNUMBER(B25),IF(B25=0,B20,IF(B25=1,B20+B55,#VALUE!)),#VALUE!)\"\n\"(B56*B42)/(B12*B13^2)\"\n\"(1/SQRT(4*PI()*B57))*SUM(B50:B54)\"\n\"IF(+B58*B45<=B30,B58*B45,B30)\"\n\"4*SQRT(2*B42*B56/B12)\"\n\"B60/2\"\n\"B17\"\n\"B13-B17\"\n\"MINA(B61,B62)+MINA(B61,B63)\"\n\"0.1*B12*((2-2*B47)*B13)^2/B42\"\n\"B30/B45\"\n\"(B64*B11*B12)/B8\"\n\"B30/B59\"\n\"(B9*B17)-(B13*(B17-1))\"\n\"LN(B21^2+1)\"\n\"LN((B21^2/B24)+1)\"\n\"B36*EXP(0.5*B40-B31*SQRT(B40))\"\n\"B37*EXP(0.5*B41-B31*SQRT(B41))\"\n\"MINA(B42:B43)\"\n\"LN((B21^2/B26)+1)\"\n\"B44*EXP(B32*SQRT(B40)-0.5*B40)\"\n\"B44*EXP(B33*SQRT(B47)-0.5*B47)\"\n\"SUM(D2:D7)\"\n\"SUM(G2:G8)\"\n\"SUM(D11:D16)\"\n\"SUM(D2:D7)\"\n\"SUM(G2:G8)\"\n\"SUM(D11:D16)\"\n\"SUM(D19:D23)\"\n\"SUM(G2:G7)\"\n\"SUM(D19:D23)\"\n\"SUM(D19:D22)\"\n\"SUM(B7:B243)\"\n\"A6+1\"\n\"A13+1\"\n\"A19+1\"\n\"A23+1\"\n\"A25+1\"\n\"A30+1\"\n\"A46+1\"\n\"SUM(D58:D64)\"\n\"SUM(D67:D74)\"\n\"SUM(F7:H7)\"\n\"SUM(F8:H8)+I7\"\n\"SUM(F7:F13)\"\n\"-1*H14\"\n\"SUM(C20:C21)\"\n\"SUM(D2:D390)\"\n\"D7/25.4\"\n\"A3+1\"\n\"A12+1\"\n\"A26+1\"\n\"A10+1\"\n\"A18+1\"\n\"TODAY()\"\n\"+[1]LEM!X265/[1]LEM!X$291\"\n\"+[1]LEM!X265\"\n\"+SUM(C4:C16)\"\n\"+[1]LEM!X231\"\n\"+K4*C19\"\n\"+K19/K$32\"\n\"+[1]LEM!X197\"\n\"100*K19/C49\"\n\"+[1]LEM!X1627\"\n\"+K19/10/C64\"\n\"C49/C64\"\n\"+K64*1000/K49\"\n\"+K80/(C49/100)\"\n\"+L94\"\n\"+[1]LEM!X307\"\n\"+(0.867+0.74+0.563+0.553)/4\"\n\"+(0.81+0.837+0.79+0.835)/4\"\n\"+[1]LEM!X231\"\n\"+(($B158/2))^2*3.14159/C49\"\n\"+[1]LEM!X1377\"\n\"+C175*C158*C124\"\n\"+D208/D191\"\n\"D232/(20*D244)\"\n\"+D268/(20*D244)\"\n\"+D292/(20*D244)\"\n\"+$C349/D244\"\n\"+$C360/D244\"\n\"+[2]Trends!K$2214\"\n\"+[2]Trends!K$2216\"\n\"+[2]Trends!K$2218\"\n\"+[2]Trends!K$2220\"\n\"+[2]Trends!K$2221\"\n\"+[2]Trends!K$2222\"\n\"+[2]Trends!K$2226\"\n\"+[2]Trends!K$2227\"\n\"+C4*C8/100\"\n\"+C11*100/(C8)\"\n\"1000000*C3/(1000*C5)\"\n\"+C9/C10\"\n\"+C5*100000*C16*C7/(C8*1000000)\"\n\"1000*C4*C8/(C7*C16*100)\"\n\"+C18*C16/1000\"\n\"+[1]LEM!X$1611\"\n\"+[1]LEM!X$291\"\n\"+[1]LEM!$Y$72*1000/C4\"\n\"1000*[1]LEM!$Y$81/C4\"\n\"1000*C24/(C16*C7)\"\n\"+C27/C5\"\n\"+C9/C23\"\n\"+'ylded area estimate'!D35\"\n\"+[1]LEM!X$1687\"\n\"+[1]LEM!X181\"\n\"+C31/C32\"\n\"+C31*1000/C30\"\n\"+C3/C4\"\n\"100*C37/C8\"\n\"+C38/(C34)\"\n\"+C39/$D$39\"\n\"+(I40/D40)^(1/5)-1\"\n\"+C11*C34/1000\"\n\"+C43*1000/C4\"\n\"+C3/C40\"\n\"+C45/C4\"\n\"+(4)^(1/3)-1\"\n\"+C46/$D$46\"\n\"+'LEM cost side'!C80\"\n\"+C50*C$39\"\n\"'LEM cost side'!C34*C$11\"\n\"+SUM(C78:C90)\"\n\"100*C78/'LEM cost side'!C49\"\n\"+C93*C64\"\n\"+A126\"\n\"+C126\"\n\"+C43+C129*C39\"\n\"-C126*C43/C39\"\n\"+(C128-C129*C39)\"\n\"+D78\"\n\"+D134/'LEM cost side'!D124\"\n\"+SUM(D149:D154)\"\n\"3.14159*10^2\"\n\"+D149/($C$163*'LEM cost side'!D175*'LEM cost side'!D109)\"\n\"+D165*1000/(20*12)\"\n\"+'LEM Demand Calibration'!D180\"\n\"+D3\"\n\"+SUM(D3:D15)\"\n\"+'LEM cost side'!K94*'c&P calc'!D3*'LEM Demand Calibration'!$C$163*12*20*'LEM cost side'!$D$108*'LEM cost side'!D175*'LEM cost side'!D124/1000000\"\n\"+SUM(D18:D27)\"\n\"+D18*1000/'LEM Demand Calibration'!D50\"\n\"-(D31-'LEM Demand Calibration'!D128)/'LEM Demand Calibration'!D129\"\n\"+D$50*'LEM Demand Calibration'!D50\"\n\"+SUMPRODUCT(D52:D64,D33:D45)\"\n\"+D65/D46\"\n\"+'LEM cost side'!D220+D$67\"\n\"+IF(D69>D52,0,D3)\"\n\"+SUM(D81:D90)\"\n\"+D3-D81\"\n\"12*20*'LEM cost side'!E191/1000000\"\n\"+D107*'LEM Demand Calibration'!D50+D$31\"\n\"-(D119-'LEM Demand Calibration'!D$128)/'LEM Demand Calibration'!D$129\"\n\"+D132*'LEM Demand Calibration'!C50\"\n\"+D133*'LEM Demand Calibration'!D65*'LEM Demand Calibration'!$D$46\"\n\"+E109*'LEM Demand Calibration'!E52-'c&P calc'!E107*'LEM Demand Calibration'!E50\"\n\"+D31\"\n\"+E158+E31\"\n\"+D31\"\n\"+E160+E31\"\n\"-(D169-'LEM Demand Calibration'!D$128)/'LEM Demand Calibration'!D$129\"\n\"+D180*'LEM Demand Calibration'!D52\"\n\"+'LEM cost side'!$C349/'LEM cost side'!D244\"\n\"'LEM cost side'!D256*20\"\n\"+'c&P calc'!E69*'c&P calc'!E107*1000\"\n\"+E26\"\n\"+'c&P calc'!E143*'c&P calc'!E107*1000\"\n\"+($N$2*'c&P calc'!D$31+'c&P calc'!D107*'LEM Demand Calibration'!D50)*1000*'c&P calc'!D132-($N$2*'c&P calc'!D$31*1000*'c&P calc'!D$50)\"\n\"-D4-D15\"\n\"+E37-E26\"\n\"+IRR(D48:I48,0.01)\"\n\"+IRR(O48:T48,0.15)\"\n\"+IRR(O53:T53,0.1)\"\n\"+'LEM cost side'!D360*'LEM cost side'!E316\"\n\"+'LEM cost side'!D280*20*'LEM cost side'!E316\"\n\"+('LEM cost side'!E193*'c&P calc'!E191-'LEM cost side'!E191*'c&P calc'!E52)*20*12/1000\"\n\"+($N$2*'c&P calc'!D$31+('c&P calc'!D109*'LEM Demand Calibration'!D52-'c&P calc'!D107*'LEM Demand Calibration'!D50))*1000*'c&P calc'!D134-(($N$2*'c&P calc'!D$31*1000*'c&P calc'!D$50))\"\n\"+E28-E26\"\n\"-D85-D74\"\n\"+E98-E109\"\n\"+[1]LEM!Y2\"\n\"+[1]LEM!B1615\"\n\"+[1]LEM!X253*[1]LEM!X219\"\n\"+SUM(D3:D34)\"\n\"H7\"\n\"I7+H8\"\n\"H7\"\n\"I7+H8\"\n\"H7\"\n\"I7+H8\"\n\"G7\"\n\"I7+G8\"\n\"I11+H12\"\n\"H7\"\n\"I7+H8\"\n\"H7\"\n\"I7+H8\"\n\"I36+H43\"\n\"SUM(E4:H4)\"\n\"SUM(D4:D24)\"\n\"SUM(D28:D35)\"\n\"SUM(D42:D49)\"\n\"SUM(D54:D72)\"\n\"SUM(D74,D50,D37,D25)\"\n\"SUM(H8:H20)\"\n\"SUM(H12+H19)\"\n\"SUM(H9+H10+H11+H20)\"\n\"SUM(H8+H13+H14+H15+H16+H17)\"\n\"SUM(H22+H23)\"\n\"IF(OR(I9=\"\"error\"\",I58=\"\"error\"\",I132=\"\"error\"\"),\"\"error\"\",(I9+I58+I132)/3)\"\n\"IF(OR(J9=\"\"error\"\",J58=\"\"error\"\",J132=\"\"error\"\"),\"\"error\"\",(J9+J58+J132)/3)\"\n\"AVERAGE(I10:I57)\"\n\"IF(COUNTIF($I11:$I18,\"\"error\"\")=0,SUM(Q11:Q18)/SUM($K11:$P18),\"\"error\"\")\"\n\"+IF(OR((SUM(K11:P11)=1),(ISBLANK(B11)=TRUE)),\"\"       \"\",\"\"error\"\")\"\n\"+IF(AND((ISBLANK($B11)=FALSE),(C11=\"\"y\"\")),1,0)\"\n\"10*K11+5*L11+M11\"\n\"10*N11+5*O11\"\n\"IF(COUNTIF($I20:$I26,\"\"error\"\")=0,SUM(Q20:Q26)/SUM($K20:$P26),\"\"error\"\")\"\n\"+IF(OR((SUM(K23:P23)=1),(ISBLANK(#REF!)=TRUE)),\"\"       \"\",\"\"error\"\")\"\n\"+IF(AND((ISBLANK(#REF!)=FALSE),(C23=\"\"y\"\")),1,0)\"\n\"IF(COUNTIF($I28:$I32,\"\"error\"\")=0,SUM(Q28:Q32)/SUM($K28:$P32),\"\"error\"\")\"\n\"IF(COUNTIF($I43:$I53,\"\"error\"\")=0,SUM(Q43:Q53)/SUM($K43:$P53),\"\"error\"\")\"\n\"IF(COUNTIF($I55:$I57,\"\"error\"\")=0,SUM(Q55:Q57)/SUM($K55:$P57),\"\"error\"\")\"\n\"AVERAGE(I59:I131)\"\n\"IF(COUNTIF($I77:$I80,\"\"error\"\")=0,SUM(Q77:Q80)/SUM($K77:$P80),\"\"error\"\")\"\n\"IF(COUNTIF($I82:$I87,\"\"error\"\")=0,SUM(Q82:Q87)/SUM($K82:$P87),\"\"error\"\")\"\n\"COUNT(Q105:Q109)\"\n\"IF(COUNTIF($I122:$I123,\"\"error\"\")=0,SUM(Q122:Q123)/SUM($K122:$P123),\"\"error\"\")\"\n\"AVERAGE(I133:I154)\"\n\"COUNT(Q149:Q154)\"\n\"C5\"\n\"D5\"\n\"SUM(F5:F50)\"\n\"SUM(F55:F73)\"\n\"F52+F75\"\n\"(1-(11097884/F77))\"\n\"B4/C4\"\n\"SUM(B5:B52)\"\n\"SUM(B57:B75)\"\n\"B53+B77\"\n\"B52\"\n\"B3/$B$156\"\n\"B59\"\n\"B67\"\n\"B72\"\n\"B78\"\n\"B86\"\n\"B92\"\n\"B141\"\n\"B146\"\n\"B152\"\n\"SUM(B47:B51)\"\n\"B52/$B$156\"\n\"SUM(B55:B58)\"\n\"SUM(B70:B71)\"\n\"SUM(B89:B91)\"\n\"SUM(B95:B140)\"\n\"B52+B59+B67+B72+B78+B86+B92+B141+B146+B152\"\n\"B41\"\n\"B46\"\n\"B62\"\n\"B113\"\n\"B118\"\n\"A34\"\n\"SUM(B32:B39)\"\n\"B40/$B$121\"\n\"SUM(B43:B44)\"\n\"SUM(B49:B60)\"\n\"SUM(B64:B111)\"\n\"A115\"\n\"B117+B112+B61+B45+B40\"\n\"B23-D23\"\n\"((B23-B24)/($A24-$A23))*$D$21\"\n\"(-C24+C25)/($A24-$A23)\"\n\"H25+H26+H27+H28\"\n\"Q33+Q34\"\n\"H66+M66\"\n\"M62\"\n\"H61+M61\"\n\"H62+M63\"\n\"H63+H64\"\n\"U62+U63+U64+U65\"\n\"H25+H26+H27+H28\"\n\"Q33+Q34\"\n\"H66+M66\"\n\"M62\"\n\"H61+M61\"\n\"H62+M63\"\n\"H63+H64\"\n\"U62+U63+U64+U65\"\n\"COUNTA(A3:A34)\"\n\"SUM(C4:C34)\"\n\"SUM(F3:F60)\"\n\"IF(EXACT(\"\"s\"\", E11), C11*F11*$D$5, C11*F11*$D$4)\"\n\"(C15+C14+C13+C12+C11)*D4\"\n\"G13+G15+G16\"\n\"G13\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,2, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,3, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,4, FALSE)\"\n\"VLOOKUP($A8,Products!$A$3:'Products'!$F$39,5, FALSE)\"\n\"F8*D8\"\n\"SUM(G8:G12)\"\n\"G121\"\n\"SUM(G118:G120)\"\n\"G131\"\n\"SUM(G127:G130)\"\n\"G163\"\n\"SUM(G157:G162)\"\n\"G191\"\n\"SUM(G182:G190)\"\n\"VLOOKUP($A5, Configurations!$A$4:'Configurations'!$G$192, 4, FALSE)\"\n\"VLOOKUP($A5, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"C29\"\n\"F29\"\n\"IF($B$5<$B$6,$A$5,IF($B$5>$B$6,$A$6, \"\"Systems Equivalent Cost\"\"))\"\n\"IF($B$5>$B$6,$A$5,IF($B$5<$B$6,$A$6, \"\"Systems Equivalent Cost\"\"))\"\n\"MAX(B6,B5) - MIN(B6,B5)\"\n\"MAX($B$6,$B$5)/MIN($B$6,$B$5)\"\n\"CONCATENATE(B9, \"\" configuration is \"\", FIXED( B11, 2), \"\" times more expensive than \"\", B8, \"\" configuration\"\")\"\n\"VLOOKUP($B19, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"VLOOKUP($E19, Configurations!$A$4:'Configurations'!$G$192, 3, FALSE)\"\n\"MAX(F19,C19)/MIN(F19,C19)\"\n\"SUM(C19:C28)\"\n\"(MHg-Mt)/rHg\"\n\"(Mw-Md)/(Md-Mc)\"\n\"AVERAGE(w)\"\n\"w-(V-V0)/(Md-Mc)\"\n\"w-(V-V0)/(Md-Mc)\"\n\"AVERAGE(SL)\"\n\"(Md-Mc)/V0\"\n\"(Md-Mc)/V0\"\n\"AVERAGE(SR)\"\n\"(1-(V0/V)^(1/3))\"\n\"(1-(V0/V)^(1/3))\"\n\"AVERAGE(LS)\"\n\"(Msp-Mbsp) - (Msp-(Md-Mc))/rwax\"\n\"(Mw-Md)/(Md-Mc)\"\n\"AVERAGE(w)\"\n\"w-(V-V0)/(Md-Mc)\"\n\"w-(V-V0)/(Md-Mc)\"\n\"AVERAGE(SL)\"\n\"(Md-Mc)/V0\"\n\"(Md-Mc)/V0\"\n\"AVERAGE(SR)\"\n\"(1-(V0/V)^(1/3))\"\n\"(1-(V0/V)^(1/3))\"\n\"AVERAGE(LS)\"\n\"(B7-B8)/(B8-B6)\"\n\"(B12-B11)/B13\"\n\"B14-(B9-B15)/(B8-B6)\"\n\"(B8-B6)/B15\"\n\"(1-(B15/B9)^(1/3))\"\n\"(C20-C21) - (C20-(C8-C6))/C22\"\n\"C14-(C9-C23)/(C8-C6)\"\n\"(C8-C6)/C23\"\n\"(1-(C23/C9)^(1/3))\"\n\"ROUNDUP(B15/50,0)\"\n\"ROUNDUP(B15/50,0)\"\n\"HLOOKUP(B15,R2:AG3,2,TRUE)\"\n\"HLOOKUP(B18,R17:AN18,2,TRUE)\"\n\"HLOOKUP(B16,R5:AW15,2,TRUE)\"\n\"HLOOKUP(G16,R5:AW15,3,TRUE)\"\n\"HLOOKUP(G17,R5:AW15,5,TRUE)\"\n\"HLOOKUP(B17,R5:AW15,9,TRUE)\"\n\"PRODUCT(B19:E19)\"\n\"(F19*E15)+0.49\"\n\"HLOOKUP(G17,R5:AW15,6,TRUE)+HLOOKUP(B17,R5:AW15,10,TRUE)\"\n\"E15*HLOOKUP(G16,R5:AW15,4,TRUE)\"\n\"HLOOKUP(B17,R5:AW15,11,TRUE)\"\n\"SUM(B16:B17,G16:G17)\"\n\"((B16/10)^3+(G16/10))*(B15/2)\"\n\"((B16/10)^3+(G16/10))*(B15/2)\"\n\"HLOOKUP(C22,R2:AG4,3,TRUE)\"\n\"SUM(B16:B17,G16)\"\n\"HLOOKUP(G17,R5:AW15,7,TRUE)\"\n\"HLOOKUP(G17,R5:AW15,8,TRUE)\"\n\"(G17/10)*H4\"\n\"G17*3\"\n\"k*dt/(dx^2)\"\n\"'Model Calculation Space'!GJ3\"\n\"'Model Calculation Space'!A5*dx\"\n\"'Model Calculation Space'!A36\"\n\"'Model Calculation Space'!GJ5\"\n\"B4*dt-dt\"\n\"Interface!C13+Interface!$A$13\"\n\"B5+Interface!$A$13\"\n\"Interface!C14+lambda*(Interface!C15-2*Interface!C14+Interface!C13)+Interface!$A$14\"\n\"B6+lambda*(B7-2*B6+B5)+Interface!$A$14\"\n\"Interface!C15+lambda*(Interface!C16-2*Interface!C15+Interface!C14)+Interface!$A$15\"\n\"B7+lambda*(B8-2*B7+B6)+Interface!$A$15\"\n\"Interface!C16+lambda*(Interface!C17-2*Interface!C16+Interface!C15)+Interface!$A$16\"\n\"B8+lambda*(B9-2*B8+B7)+Interface!$A$16\"\n\"Interface!C17+lambda*(Interface!C18-2*Interface!C17+Interface!C16)+Interface!$A$17\"\n\"B9+lambda*(B10-2*B9+B8)+Interface!$A$17\"\n\"Interface!C18+lambda*(Interface!C19-2*Interface!C18+Interface!C17)+Interface!$A$18\"\n\"B10+lambda*(B11-2*B10+B9)+Interface!$A$18\"\n\"Interface!C19+lambda*(Interface!C20-2*Interface!C19+Interface!C18)+Interface!$A$19\"\n\"B11+lambda*(B12-2*B11+B10)+Interface!$A$19\"\n\"Interface!C20+lambda*(Interface!C21-2*Interface!C20+Interface!C19)+Interface!$A$20\"\n\"B12+lambda*(B13-2*B12+B11)+Interface!$A$20\"\n\"Interface!C21+lambda*(Interface!C22-2*Interface!C21+Interface!C20)+Interface!$A$21\"\n\"B13+lambda*(B14-2*B13+B12)+Interface!$A$21\"\n\"Interface!C22+lambda*(Interface!C23-2*Interface!C22+Interface!C21)+Interface!$A$22\"\n\"B14+lambda*(B15-2*B14+B13)+Interface!$A$22\"\n\"Interface!C23+lambda*(Interface!C24-2*Interface!C23+Interface!C22)+Interface!$A$23\"\n\"B15+lambda*(B16-2*B15+B14)+Interface!$A$23\"\n\"Interface!C24+lambda*(Interface!C25-2*Interface!C24+Interface!C23)+Interface!$A$24\"\n\"B16+lambda*(B17-2*B16+B15)+Interface!$A$24\"\n\"Interface!C25+lambda*(Interface!C26-2*Interface!C25+Interface!C24)+Interface!$A$25\"\n\"B17+lambda*(B18-2*B17+B16)+Interface!$A$25\"\n\"Interface!C26+lambda*(Interface!C27-2*Interface!C26+Interface!C25)+Interface!$A$26\"\n\"B18+lambda*(B19-2*B18+B17)+Interface!$A$26\"\n\"Interface!C27+lambda*(Interface!C28-2*Interface!C27+Interface!C26)+Interface!$A$27\"\n\"B19+lambda*(B20-2*B19+B18)+Interface!$A$27\"\n\"Interface!C28+lambda*(Interface!C29-2*Interface!C28+Interface!C27)+Interface!$A$28\"\n\"B20+lambda*(B21-2*B20+B19)+Interface!$A$28\"\n\"Interface!C29+lambda*(Interface!C30-2*Interface!C29+Interface!C28)+Interface!$A$29\"\n\"B21+lambda*(B22-2*B21+B20)+Interface!$A$29\"\n\"Interface!C30+lambda*(Interface!C31-2*Interface!C30+Interface!C29)+Interface!$A$30\"\n\"B22+lambda*(B23-2*B22+B21)+Interface!$A$30\"\n\"Interface!C31+lambda*(Interface!C32-2*Interface!C31+Interface!C30)+Interface!$A$31\"\n\"B23+lambda*(B24-2*B23+B22)+Interface!$A$31\"\n\"Interface!C32+lambda*(Interface!C33-2*Interface!C32+Interface!C31)+Interface!$A$32\"\n\"B24+lambda*(B25-2*B24+B23)+Interface!$A$32\"\n\"Interface!C33+lambda*(Interface!C34-2*Interface!C33+Interface!C32)+Interface!$A$33\"\n\"B25+lambda*(B26-2*B25+B24)+Interface!$A$33\"\n\"Interface!C34+lambda*(Interface!C35-2*Interface!C34+Interface!C33)+Interface!$A$34\"\n\"B26+lambda*(B27-2*B26+B25)+Interface!$A$34\"\n\"Interface!C35+lambda*(Interface!C36-2*Interface!C35+Interface!C34)+Interface!$A$35\"\n\"B27+lambda*(B28-2*B27+B26)+Interface!$A$35\"\n\"Interface!C36+lambda*(Interface!C37-2*Interface!C36+Interface!C35)+Interface!$A$36\"\n\"B28+lambda*(B29-2*B28+B27)+Interface!$A$36\"\n\"Interface!C37+lambda*(Interface!C38-2*Interface!C37+Interface!C36)+Interface!$A$37\"\n\"B29+lambda*(B30-2*B29+B28)+Interface!$A$37\"\n\"Interface!C38+lambda*(Interface!C39-2*Interface!C38+Interface!C37)+Interface!$A$38\"\n\"B30+lambda*(B31-2*B30+B29)+Interface!$A$38\"\n\"Interface!C39+lambda*(Interface!C40-2*Interface!C39+Interface!C38)+Interface!$A$39\"\n\"B31+lambda*(B32-2*B31+B30)+Interface!$A$39\"\n\"Interface!C40+Interface!$A$40\"\n\"B32+Interface!$A$40\"\n\"Interface!B13\"\n\"J21\"\n\"k*dt/(dx^2)\"\n\"'Model Calculations'!GJ4\"\n\"'Model Calculations'!A6*dx\"\n\"'Model Calculations'!A37\"\n\"'Model Calculations'!GJ6\"\n\"D16\"\n\"(G16-E16)^2\"\n\"SUM(I16:I43)\"\n\"J17/COUNT(I16:I43)\"\n\"SQRT(J19)\"\n\"B5*dt-dt\"\n\"Interface!C16+Interface!$A$16\"\n\"B6+Interface!$A$16\"\n\"Interface!C17+lambda*(Interface!C18-2*Interface!C17+Interface!C16)+Interface!$A$17\"\n\"B7+lambda*(B8-2*B7+B6)+Interface!$A$17\"\n\"Interface!C18+lambda*(Interface!C19-2*Interface!C18+Interface!C17)+Interface!$A$18\"\n\"B8+lambda*(B9-2*B8+B7)+Interface!$A$18\"\n\"Interface!C19+lambda*(Interface!C20-2*Interface!C19+Interface!C18)+Interface!$A$19\"\n\"B9+lambda*(B10-2*B9+B8)+Interface!$A$19\"\n\"Interface!C20+lambda*(Interface!C21-2*Interface!C20+Interface!C19)+Interface!$A$20\"\n\"B10+lambda*(B11-2*B10+B9)+Interface!$A$20\"\n\"Interface!C21+lambda*(Interface!C22-2*Interface!C21+Interface!C20)+Interface!$A$21\"\n\"B11+lambda*(B12-2*B11+B10)+Interface!$A$21\"\n\"Interface!C22+lambda*(Interface!C23-2*Interface!C22+Interface!C21)+Interface!$A$22\"\n\"B12+lambda*(B13-2*B12+B11)+Interface!$A$22\"\n\"Interface!C23+lambda*(Interface!C24-2*Interface!C23+Interface!C22)+Interface!$A$23\"\n\"B13+lambda*(B14-2*B13+B12)+Interface!$A$23\"\n\"Interface!C24+lambda*(Interface!C25-2*Interface!C24+Interface!C23)+Interface!$A$24\"\n\"B14+lambda*(B15-2*B14+B13)+Interface!$A$24\"\n\"Interface!C25+lambda*(Interface!C26-2*Interface!C25+Interface!C24)+Interface!$A$25\"\n\"B15+lambda*(B16-2*B15+B14)+Interface!$A$25\"\n\"Interface!C26+lambda*(Interface!C27-2*Interface!C26+Interface!C25)+Interface!$A$26\"\n\"B16+lambda*(B17-2*B16+B15)+Interface!$A$26\"\n\"Interface!C27+lambda*(Interface!C28-2*Interface!C27+Interface!C26)+Interface!$A$27\"\n\"B17+lambda*(B18-2*B17+B16)+Interface!$A$27\"\n\"Interface!C28+lambda*(Interface!C29-2*Interface!C28+Interface!C27)+Interface!$A$28\"\n\"B18+lambda*(B19-2*B18+B17)+Interface!$A$28\"\n\"Interface!C29+lambda*(Interface!C30-2*Interface!C29+Interface!C28)+Interface!$A$29\"\n\"B19+lambda*(B20-2*B19+B18)+Interface!$A$29\"\n\"Interface!C30+lambda*(Interface!C31-2*Interface!C30+Interface!C29)+Interface!$A$30\"\n\"B20+lambda*(B21-2*B20+B19)+Interface!$A$30\"\n\"Interface!C31+lambda*(Interface!C32-2*Interface!C31+Interface!C30)+Interface!$A$31\"\n\"B21+lambda*(B22-2*B21+B20)+Interface!$A$31\"\n\"Interface!C32+lambda*(Interface!C33-2*Interface!C32+Interface!C31)+Interface!$A$32\"\n\"B22+lambda*(B23-2*B22+B21)+Interface!$A$32\"\n\"Interface!C33+lambda*(Interface!C34-2*Interface!C33+Interface!C32)+Interface!$A$33\"\n\"B23+lambda*(B24-2*B23+B22)+Interface!$A$33\"\n\"Interface!C34+lambda*(Interface!C35-2*Interface!C34+Interface!C33)+Interface!$A$34\"\n\"B24+lambda*(B25-2*B24+B23)+Interface!$A$34\"\n\"Interface!C35+lambda*(Interface!C36-2*Interface!C35+Interface!C34)+Interface!$A$35\"\n\"B25+lambda*(B26-2*B25+B24)+Interface!$A$35\"\n\"Interface!C36+lambda*(Interface!C37-2*Interface!C36+Interface!C35)+Interface!$A$36\"\n\"B26+lambda*(B27-2*B26+B25)+Interface!$A$36\"\n\"Interface!C37+lambda*(Interface!C38-2*Interface!C37+Interface!C36)+Interface!$A$37\"\n\"B27+lambda*(B28-2*B27+B26)+Interface!$A$37\"\n\"Interface!C38+lambda*(Interface!C39-2*Interface!C38+Interface!C37)+Interface!$A$38\"\n\"B28+lambda*(B29-2*B28+B27)+Interface!$A$38\"\n\"Interface!C39+lambda*(Interface!C40-2*Interface!C39+Interface!C38)+Interface!$A$39\"\n\"B29+lambda*(B30-2*B29+B28)+Interface!$A$39\"\n\"Interface!C40+lambda*(Interface!C41-2*Interface!C40+Interface!C39)+Interface!$A$40\"\n\"B30+lambda*(B31-2*B30+B29)+Interface!$A$40\"\n\"Interface!C41+lambda*(Interface!C42-2*Interface!C41+Interface!C40)+Interface!$A$41\"\n\"B31+lambda*(B32-2*B31+B30)+Interface!$A$41\"\n\"Interface!C42+lambda*(Interface!C43-2*Interface!C42+Interface!C41)+Interface!$A$42\"\n\"B32+lambda*(B33-2*B32+B31)+Interface!$A$42\"\n\"Interface!C43+Interface!$A$43\"\n\"B33+Interface!$A$43\"\n\"Interface!B16\"\n\"25000+804870+292808+380000+250000+650000\"\n\"SUM(B6:H6)\"\n\"+'Detail for the College of A&S'!J19\"\n\"+'Detail for the College of A&S'!J29\"\n\"+'Detail for the College of A&S'!J33\"\n\"+'Detail for the College of A&S'!J40\"\n\"+'Detail for the College of A&S'!J58\"\n\"+'Detail for College of Business'!J8\"\n\"+'Detail for College of Business'!J11\"\n\"+'Detail for College of Education'!J17\"\n\"+'Detail for College of Education'!J25\"\n\"+'Detail for College of Education'!J28\"\n\"+'Detail for College of Education'!J32\"\n\"+'Detail for College of Education'!J46\"\n\"+'Detail for College of Eng'!J34\"\n\"+'Detail for College of Eng'!J37\"\n\"+'Detail for College of Eng'!J44\"\n\"+'Detail for Inst'!J19\"\n\"+'Detail for Inst'!J24\"\n\"+'Detail for Inst'!J27\"\n\"+'Detail for Inst'!J30\"\n\"+'Detail for Inst'!J34\"\n\"+'Detail for Law'!J10\"\n\"+'Detail for Urban'!J14\"\n\"+'Detail for Urban'!J20\"\n\"+'Detail for Urban'!J28\"\n\"+'Detail for Urban'!J45\"\n\"+'Detail for Urban'!J56\"\n\"180000+2096667+268373+150961+85577\"\n\"SUM(B6:B15)\"\n\"SUM(B5:F5)\"\n\"SUM(B5:B21)\"\n\"SUM(J2:J18)\"\n\"SUM(J21:J28)\"\n\"SUM(J31:J32)\"\n\"SUM(J35:J39)\"\n\"SUM(J42:J57)\"\n\"+E62/E66\"\n\"+F62*G62\"\n\"+F62*G62\"\n\"+E63/E66\"\n\"+E64/E66\"\n\"+E65/E66\"\n\"SUM(E62:E65)\"\n\"SUM(J2:J57)\"\n\"1116899+1872555+232599+295779+246602\"\n\"25000+804870+352758+292808+380000+180000+2096667+268373+150961+85577+250000+650000+244996\"\n\"SUM(J188:J190)\"\n\"SUM(B6:F6)\"\n\"+'Detail for College of Business'!J7\"\n\"+B6+B7\"\n\"+J6+J7\"\n\"+J10\"\n\"+D19/D23\"\n\"+E19*F19\"\n\"+D20/D23\"\n\"+D21/D23\"\n\"+D22/D23\"\n\"SUM(D19:D22)\"\n\"SUM(B6:F6)\"\n\"SUM(B6:B11)\"\n\"SUM(J4:J16)\"\n\"SUM(J19:J24)\"\n\"+J27\"\n\"SUM(J30:J31)\"\n\"SUM(J34:J45)\"\n\"SUM(B6:F6)\"\n\"SUM(B6:B12)\"\n\"SUM(J7:J33)\"\n\"+J36\"\n\"SUM(J39:J43)\"\n\"+D53/D57\"\n\"+E53*F53\"\n\"+D54/D57\"\n\"+G54+G55\"\n\"+D55/D57\"\n\"+D56/D57\"\n\"SUM(D53:D56)\"\n\"SUM(B6:F6)\"\n\"SUM(B7:B13)\"\n\"SUM(F6:F13)\"\n\"8964*0.33\"\n\"SUM(J8:J18)\"\n\"SUM(J21:J23)\"\n\"+J26\"\n\"SUM(J32:J33)\"\n\"SUM(B6:F6)\"\n\"SUM(B6)\"\n\"SUM(J7:J9)\"\n\"SUM(B6:G6)\"\n\"SUM(B6:B10)\"\n\"SUM(G6:G11)\"\n\"SUM(J6:J13)\"\n\"SUM(J16:J19)\"\n\"SUM(J22:J27)\"\n\"+J30\"\n\"+J32+J31\"\n\"SUM(J33:J43)\"\n\"SUM(J30:J44)\"\n\"SUM(J49:J54)\"\n\"SUM(J47:J55)\"\n\"3848648\"\n\"406500\"\n\"624307\"\n\"1672298-748584\"\n\"2824612-1091293\"\n\"1243710\"\n\"7122870\"\n\"4535954\"\n\"5663300\"\n\"3634560\"\n\"SUM(B7:B14)\"\n\"4614650\"\n\"56437\"\n\"E2*F2\"\n\"SUM(F2:F404)\"\n\"SUM(A5)+1\"\n\"NOW()\"\n\"SUM(C9:C199)\"\n\"Whitley!B3\"\n\"Whitley!B6\"\n\"Whitley!D8\"\n\"Whitley!G8\"\n\"Whitley!K8\"\n\"Brown!B3\"\n\"Brown!B6\"\n\"Brown!D8\"\n\"Brown!G8\"\n\"Brown!K8\"\n\"Hicks!B3\"\n\"Hicks!B6\"\n\"Hicks!D8\"\n\"Hicks!G8\"\n\"Hicks!K8\"\n\"Kidwell!B3\"\n\"Kidwell!B6\"\n\"Kidwell!D8\"\n\"Kidwell!G8\"\n\"Kidwell!K8\"\n\"CHicks!B3\"\n\"CHicks!B6\"\n\"CHicks!D8\"\n\"CHicks!G8\"\n\"CHicks!K8\"\n\"Teacher6!B3\"\n\"Teacher6!B6\"\n\"Teacher6!D8\"\n\"Teacher6!G8\"\n\"Teacher6!K8\"\n\"Teacher7!B3\"\n\"Teacher7!B6\"\n\"Teacher7!D8\"\n\"Teacher7!G8\"\n\"Teacher7!K8\"\n\"Teacher8!B6\"\n\"Teacher8!D8\"\n\"Teacher8!G8\"\n\"Teacher8!K8\"\n\"Teacher9!B3\"\n\"Teacher9!B6\"\n\"Teacher9!D8\"\n\"Teacher9!G8\"\n\"Teacher9!K8\"\n\"Teacher10!B6\"\n\"Teacher10!D8\"\n\"Teacher10!G8\"\n\"Teacher10!K8\"\n\"Teacher11!D8\"\n\"Teacher11!G8\"\n\"Teacher11!K8\"\n\"Teacher12!D8\"\n\"Teacher12!G8\"\n\"Teacher12!K8\"\n\"Teacher13!D8\"\n\"Teacher13!G8\"\n\"Teacher13!K8\"\n\"Teacher14!D8\"\n\"Teacher14!G8\"\n\"Teacher14!K8\"\n\"Teacher15!D8\"\n\"Teacher15!G8\"\n\"Teacher15!K8\"\n\"Teacher16!D8\"\n\"Teacher16!G8\"\n\"Teacher15!K8\"\n\"Teacher17!D8\"\n\"Teacher17!G8\"\n\"Teacher17!K8\"\n\"Teacher18!D8\"\n\"Teacher18!G8\"\n\"Teacher18!K8\"\n\"Teacher19!D8\"\n\"Teacher19!G8\"\n\"Teacher19!K8\"\n\"Teacher20!D8\"\n\"Teacher20!G8\"\n\"Teacher20!K8\"\n\"Teacher21!D8\"\n\"Teacher21!G8\"\n\"Teacher21!K8\"\n\"Teacher22!D8\"\n\"Teacher22!G8\"\n\"Teacher22!K8\"\n\"Teacher23!D8\"\n\"Teacher23!G8\"\n\"Teacher23!K8\"\n\"Teacher24!D8\"\n\"Teacher24!G8\"\n\"Teacher24!K8\"\n\"Teacher25!D8\"\n\"Teacher25!G8\"\n\"Teacher25!K8\"\n\"Teacher26!D8\"\n\"Teacher26!G8\"\n\"Teacher26!K8\"\n\"Teacher27!D8\"\n\"Teacher27!G8\"\n\"Teacher27!K8\"\n\"Teacher28!D8\"\n\"Teacher28!G8\"\n\"Teacher28!K8\"\n\"Teacher29!D8\"\n\"Teacher29!G8\"\n\"Teacher29!K8\"\n\"Teacher30!D8\"\n\"Teacher30!G8\"\n\"Teacher30!K8\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"NOW()\"\n\"SUM(D10:D200)\"\n\"SUM(G10:I10)\"\n\"'Data Analysis'!A2\"\n\"'Data Analysis'!A2\"\n\"'Data Analysis'!B1\"\n\"'Data Analysis'!CO3\"\n\"IF(I5>J5,\"\"Over\"\",\"\"Under\"\")\"\n\"I23\"\n\"I28\"\n\"'Data Analysis'!EJ3\"\n\"I52\"\n\"IF(I48=\"\"Y\"\",\"\"INCLUDES ALL EXTENTS\"\",\"\"ONLY CONSIDERS 4 AND 5 EXTENTS\"\")\"\n\"SUM(I5+I9+I10+I21+I31+I38+I42+I43+I44+I46+I45)\"\n\"SUM(J5+J10+J9+J21+J31+J38+J42+J43+J44+J45+J46)\"\n\"'input-output'!D9\"\n\"'input-output'!D10\"\n\"'input-output'!D11\"\n\"'input-output'!D12\"\n\"'input-output'!D13\"\n\"'input-output'!D14\"\n\"'input-output'!D15\"\n\"'input-output'!D16\"\n\"'input-output'!D17\"\n\"'input-output'!D18\"\n\"'input-output'!D19\"\n\"'input-output'!D20\"\n\"'input-output'!D21\"\n\"'input-output'!D22\"\n\"'input-output'!D23\"\n\"'input-output'!D24\"\n\"'input-output'!D25\"\n\"'input-output'!D26\"\n\"'input-output'!D27\"\n\"'input-output'!D28\"\n\"'input-output'!D29\"\n\"'input-output'!D30\"\n\"'input-output'!D31\"\n\"'input-output'!D32\"\n\"'input-output'!D33\"\n\"'input-output'!D34\"\n\"'input-output'!D35\"\n\"'input-output'!D36\"\n\"'input-output'!D37\"\n\"'input-output'!D38\"\n\"'input-output'!D39\"\n\"'input-output'!D40\"\n\"'input-output'!D41\"\n\"'input-output'!D42\"\n\"'input-output'!D43\"\n\"'input-output'!D44\"\n\"'input-output'!F10\"\n\"'input-output'!F11\"\n\"'input-output'!F12\"\n\"'input-output'!F13\"\n\"'input-output'!F14\"\n\"'input-output'!F15\"\n\"'input-output'!F16\"\n\"IF(D2=\"\"x\"\",\"\"CE 1030\"\", \"\"(no CE 1030 )\"\")\"\n\"IF(E2=\"\"x\"\",\"\" CE 2000 \"\",\"\"no CE 2000 \"\")\"\n\"IF(F2=\"\"x\"\",\"\"CE 2001\"\",\"\"no CE 2001\"\")\"\n\"IF(H2=\"\"x\"\",\"\"CE 2020\"\", \"\"no CE 2020\"\")\"\n\"IF(I2=\"\"x\"\",\"\"ES 3004\"\", \"\"no ES 3004\"\")\"\n\"IF(T2=\"\"x\"\",\"\"CE 3041\"\", \"\"no CE 3041\"\")\"\n\"IF(D$2=\"\"x\"\",0.5,0)\"\n\"IF(E$2=\"\"x\"\",1,0)\"\n\"IF(J$2=\"\"x\"\",0,0)\"\n\"IF(M$2=\"\"x\"\",0.25,0)\"\n\"IF(Y$2=\"\"x\"\",0.75,0)\"\n\"IF(AG$2=\"\"x\"\",0.9,0)\"\n\"SUM(CX3:EI3)\"\n\"SUM(B5:B7)\"\n\"B4/$B$46\"\n\"IF(S2=\"\"x\"\",\"\"CE 3030\"\", \"\"no CE 3030 \"\")\"\n\"IF(AM2=\"\"x\"\",\"\"ES 2503\"\", \"\"no ES 2503 \"\")\"\n\"IF(AN2=\"\"x\"\",\"\"ES 3001\"\", \"\"no ES 3001\"\")\"\n\"IF(AO2=\"\"x\"\",\"\"EE 3601\"\", \"\"no EE 3601\"\")\"\n\"IF(AG$2=\"\"x\"\",0.1,0)\"\n\"IF('input-output'!$I$48=\"\"Y\"\", 'Data Analysis'!CL5,'Data Analysis'!CM5)\"\n\"IF(D$2=\"\"x\"\",D5,0)\"\n\"SUM(AU5:CI5)\"\n\"SUM(IF(AU5>=4,AU5,0)+IF(AV5>=4,AV5,0)+IF(AW5>=4,AW5,0)+IF(AX5>=4,AX5,0)+IF(AY5>=4,AY5,0)+IF(AZ5>=4,AZ5,0)+IF(BA5>=4,BA5,0)+IF(BB5>=4,BB5,0)+IF(BC5>=4,BC5,0)+IF(BD5>=4,BD5,0)+IF(BE5>=4,BE5,0)+IF(BF5>=4,BF5,0)+IF(BG5>=4,BG5,0)+IF(BH5>=4,BH5,0)+IF(BI5>=4,BI5,0)+IF(BJ5>=4,BJ5,0)+IF(BK5>=4,BK5,0)+IF(BL5>=4,BL5,0)+IF(BM5>=4,BM5,0)+IF(BN5>=4,BN5,0)+IF(BO5>=4,BO5,0)+IF(BP5>=4,BP5,0)+IF(BQ5>=4,BQ5,0)+IF(BR5>=4,BR5,0)+IF(BS5>=4,BS5,0)+IF(BT5>=4,BT5,0)+IF(BU5>=4,BU5,0)+IF(BV5>=4,BV5,0)+IF(BW5>=4,BW5,0)+IF(BX5>=4,BX5,0)+IF(BY5>=4,BY5,0)+IF(BZ5>=4,BZ5,0)+IF(CA5>=4,CA5,0)+IF(CB5>=4,CB5,0)+IF(CC5>=4,CC5,0)+IF(CD5>=4,CD5,0)+IF(CE5>=4,CE5,0)+IF(CF5>=4,CF5,0)+IF(CG5>=4,CG5,0)+IF(CH5>=4,CH5,0)+IF(CI5>=4,CI5,0))\"\n\"IF(L2=\"\"x\"\",\"\"CE 3010\"\", \"\"-\"\")\"\n\"IF(G2=\"\"x\"\",\"\"CE 2002\"\", \"\"-\"\")\"\n\"IF(J2=\"\"x\"\",\"\"CE 3006\"\", \"\"-\"\")\"\n\"IF(K2=\"\"x\"\",\"\"CE 3008\"\", \"\"-\"\")\"\n\"IF(R2=\"\"x\"\",\"\"CE 3026\"\", \"\"-\"\")\"\n\"IF(AE2=\"\"x\"\",\"\"CE 4007\"\", \"\"-\"\")\"\n\"IF(AF2=\"\"x\"\",\"\"CE 4017\"\", \"\"-\"\")\"\n\"IF(T2=\"\"x\"\",\"\"CE 3041\"\", \"\"-\"\")\"\n\"IF(U2=\"\"x\"\",\"\"CE 3044\"\", \"\"-\"\")\"\n\"IF(AH2=\"\"x\"\",\"\"CE 4046\"\", \"\"-\"\")\"\n\"IF(AI2=\"\"x\"\",\"\"CE 4048\"\", \"\"-\"\")\"\n\"IF(Y2=\"\"x\"\",\"\"CE 3059\"\", \"\"-\"\")\"\n\"IF(Z2=\"\"x\"\",\"\"CE 3060\"\", \"\"-\"\")\"\n\"IF(AA2=\"\"x\"\",\"\"CE 3061\"\", \"\"-\"\")\"\n\"IF(AB2=\"\"x\"\",\"\"CE 3062\"\", \"\"-\"\")\"\n\"IF(AJ2=\"\"x\"\",\"\"CE 4060\"\", \"\"-\"\")\"\n\"IF(AK2=\"\"x\"\",\"\"CE 4061\"\", \"\"-\"\")\"\n\"IF(AC2=\"\"x\"\",\"\"CE 3070\"\", \"\"-\"\")\"\n\"IF(AD2=\"\"x\"\",\"\"CE 3074\"\", \"\"-\"\")\"\n\"IF(AL2=\"\"x\"\",\"\"CE 4071\"\", \"\"-\"\")\"\n\"SUM(B10:B19)\"\n\"IF(V2=\"\"x\"\",\"\"CE 3050\"\", \"\"-\"\")\"\n\"IF(W2=\"\"x\"\",\"\"CE 3051\"\", \"\"-\"\")\"\n\"IF(X2=\"\"x\"\",\"\"CE 3054\"\", \"\"-\"\")\"\n\"IF(AG2=\"\"x\"\",\"\"CE 355X\"\", \"\"-\"\")\"\n\"IF(M2=\"\"x\"\",\"\"CE 3020\"\", \"\"-\"\")\"\n\"IF(N2=\"\"x\"\",\"\"CE 3021\"\", \"\"-\"\")\"\n\"IF(O2=\"\"x\"\",\"\"CE 3022\"\", \"\"-\"\")\"\n\"IF(P2=\"\"x\"\",\"\"CE 3023\"\", \"\"-\"\")\"\n\"IF(Q2=\"\"x\"\",\"\"CE 3024\"\", \"\"-\"\")\"\n\"IF(AQ2=\"\"x\"\",\"\"CH 1010\"\", \"\"-\"\")\"\n\"IF(AR2=\"\"x\"\",\"\"CH 1020\"\", \"\"-\"\")\"\n\"IF(AP2=\"\"x\"\",\"\"MA 2011\"\", \"\"-\"\")\"\n\"IF(AS2=\"\"x\"\",\"\"MA 2210\"\", \"\"-\"\")\"\n\"SUM(B21:B29)\"\n\"'input-output'!D9\"\n\"IF(D2=\"\"x\"\",1, 0)\"\n\"IF(H2=\"\"x\"\",1, 0)\"\n\"IF(T2=\"\"x\"\",1, 0)\"\n\"IF(S2=\"\"x\"\",1, 0)\"\n\"IF(AM2=\"\"x\"\",1, 0)\"\n\"IF(L2=\"\"x\"\",1, 0)\"\n\"IF(G2=\"\"x\"\",1, 0)\"\n\"IF(J2=\"\"x\"\",1, 0)\"\n\"IF(R2=\"\"x\"\",1, 0)\"\n\"IF(AE2=\"\"x\"\",1, 0)\"\n\"IF(T2=\"\"x\"\",1, 0)\"\n\"IF(AH2=\"\"x\"\",1, 0)\"\n\"IF(Y2=\"\"x\"\",1, 0)\"\n\"IF(AJ2=\"\"x\"\",1, 0)\"\n\"IF(AC2=\"\"x\"\",1, 0)\"\n\"IF(AL2=\"\"x\"\",1, 0)\"\n\"SUM(B31:B36)\"\n\"IF(V2=\"\"x\"\",1, 0)\"\n\"IF(AG2=\"\"x\"\",1, 0)\"\n\"IF(M2=\"\"x\"\",1, 0)\"\n\"IF(X2=\"\"x\"\",1, 0)\"\n\"SUM(B4+B8+B9+B20+B30+B37+B41+B42+B43+B44+B45)\"\n\"C45\"\n\"C44\"\n\"C43\"\n\"C42\"\n\"C41\"\n\"C37\"\n\"C30\"\n\"C20\"\n\"C9\"\n\"C8\"\n\"C4\"\n\"B45\"\n\"B44\"\n\"B43\"\n\"B42\"\n\"B41\"\n\"B37\"\n\"B30\"\n\"B20\"\n\"B9\"\n\"B8\"\n\"B4\"\n\"SUM(E5:G5)\"\n\"+E29+E37+E17+E33+E9+E21+E5+E13+E41+E25+E46\"\n\"B7+2\"\n\"B11+1\"\n\"B15+4\"\n\"B7+2\"\n\"B11+1\"\n\"B15+4\"\n\"B7+1\"\n\"B13+5\"\n\"B21+5\"\n\"B25+1\"\n\"B32+1\"\n\"B38+5\"\n\"Full!A2:D36\"\n\"A3+5\"\n\"A11+2\"\n\"A18+5\"\n\"A23+2\"\n\"A28+2\"\n\"A31+5\"\n\"A45+2\"\n\"A46+5\"\n\"A51+5\"\n\"A53+2\"\n\"A62+5\"\n\"A73+5\"\n\"A76+14\"\n\"A88+1\"\n\"E12*8\"\n\" B13/C13\"\n\" 2.6 * (10/12)^0.8 * (D13/3)^0.4 * (0.2/0.2)^-0.3\"\n\" B13\"\n\" B34 * C34\"\n\" D34 / 2000\"\n\" D34 * 0.126/24\"\n\" 0.016 * (100/2)^0.65 * (D14/3)^1.5\"\n\" 0.016 * (10/2)^0.65 * (D15/3)^1.5\"\n\" 0.016 * (0.4/2)^0.65 * (D16/3)^1.5\"\n\" 0.016 * (0.1/2)^0.65 * (D17/3)^1.5\"\n\" SUM(C34:C38)\"\n\" 2.6 * (10/12)^0.8 * (D13/3)^0.4 * (0.2/0.2)^-0.3\"\n\" C13\"\n\" B45 * C45 * 365\"\n\" E45/34.76\"\n\" 0.016 * (100/2)^0.65 * (D14/3)^1.5\"\n\" 0.016 * (10/2)^0.65 * (D15/3)^1.5\"\n\" 0.016 * (0.4/2)^0.65 * (D16/3)^1.5\"\n\" 0.016 * (0.1/2)^0.65 * (D17/3)^1.5\"\n\"B13/C13\"\n\" D13 * 0.35*0.0032 * (20/5)^1.3 / (0.7/2)^1.4\"\n\" B13\"\n\" B38*C38\"\n\" D38/2000\"\n\" D38*0.126/24\"\n\" D14 * 0.35*0.0032 * (20/5)^1.3 / (2.1/2)^1.4\"\n\" D15 * 0.35*0.0032 * (20/5)^1.3 / (0.9/2)^1.4\"\n\" D16 * 0.35*0.0032 * (20/5)^1.3 / (0.4/2)^1.4\"\n\" D17 * 0.35*0.0032 * (20/5)^1.3 / (4.5/2)^1.4\"\n\" D18 * 0.35*0.0032 * (20/5)^1.3 / (7.4/2)^1.4\"\n\" D19 * 0.35*0.0032 * (20/5)^1.3 / (14/2)^1.4\"\n\" D20 * 0.35*0.0032 * (20/5)^1.3 / (10/2)^1.4\"\n\" D21 * 0.35*0.0032 * (20/5)^1.3 / (27/2)^1.4\"\n\" D22 * 0.35*0.0032 * (20/5)^1.3 / (45/2)^1.4\"\n\" SUM(D38:D47)\"\n\" D13 * 0.35*0.0032 * (10/5)^1.3 / (0.7/2)^1.4\"\n\" C13\"\n\" B54*C54*365\"\n\" E54/34.76\"\n\" D14 * 0.35*0.0032 * (10/5)^1.3 / (2.1/2)^1.4\"\n\" D15 * 0.35*0.0032 * (10/5)^1.3 / (0.9/2)^1.4\"\n\" D16 * 0.35*0.0032 * (10/5)^1.3 / (0.4/2)^1.4\"\n\" D17 * 0.35*0.0032 * (10/5)^1.3 / (4.5/2)^1.4\"\n\" D18 * 0.35*0.0032 * (10/5)^1.3 / (7.4/2)^1.4\"\n\" D19 * 0.35*0.0032 * (10/5)^1.3 / (14/2)^1.4\"\n\" D20 * 0.35*0.0032 * (10/5)^1.3 / (10/2)^1.4\"\n\" D21 * 0.35*0.0032 * (10/5)^1.3 / (27/2)^1.4\"\n\" D22 * 0.35*0.0032 * (10/5)^1.3 / (45/2)^1.4\"\n\" D13\"\n\" B13\"\n\" B39 * C39\"\n\" D39/34.76\"\n\" SUM(C39:C48)\"\n\" E13\"\n\" C13\"\n\"TODAY()\"\n\"+B12+1\"\n\"+B53+1\"\n\"+B54+1\"\n\"+B38+1\"\n\"+B45+1\"\n\"+B52+1\"\n\"+B221+1\"\n\"+B96+1\"\n\"+B106+1\"\n\"B7*4/D7*1000000\"\n\"SUM(F3:F5)\"\n\"SUMIF($K8:$K325,\"\"M\"\",F8:F325)\"\n\"SUMIF($K8:$K325,\"\"G\"\",F8:F325)\"\n\"SUMIF($K8:$K325,\"\"VRQ\"\",F8:F325)\"\n\"J8-G8-F8-H8\"\n\"J271-G271-F271-H271-O271\"\n\"SUM(F8:F325)\"\n\"+C4/20\"\n\"12*C4\"\n\"20*30*12\"\n\"+$F$7*C6\"\n\"+D8*D9*D10/1000\"\n\"+D11/fisher!D10\"\n\"+(D11-fisher!D49)/-fisher!D50\"\n\"+D13/fisher!D21\"\n\"+(1+$C$15)*$E$15\"\n\"+(1+$C$15)*$H$15\"\n\"+D19*(1+$C$15)\"\n\"+D31*D9*D10-D16-(D9)*D17\"\n\"+E13*E9*E10-E16-(E9)*E17\"\n\"+$D$18/5\"\n\"+D21-D22\"\n\"+SUM(D23:H23)\"\n\"+D13*D9*D10-D16/(1+$C$15)-(D9)*D17/(1+$C$15)\"\n\"+$D$18/(5*(1+$C$15))\"\n\"20*12*D25/1000\"\n\"+D11+$C$29*1000*12*D9*D10/1000000\"\n\"+$C$29*12/C8\"\n\"+(D30-fisher!D49)/-fisher!D50\"\n\"-+D19*12*C29/1000\"\n\"-($C$29*12*D16/(1+$C$15))/1000-($C$29*12*D9*D17/(1+$C$15))/1000\"\n\"+D31*$C$29*12*D9*D10/1000\"\n\"+C36+C37+C38\"\n\"+IRR(C39:H39,0.15)\"\n\"+$D$44*D11\"\n\"+D31-D13\"\n\"+D47*D46\"\n\"+C39+C48\"\n\"+IRR(C51:H51,0.15)\"\n\"+SUM(D5:D14)\"\n\"+D$16*D5*20*12\"\n\"+D18\"\n\"+(1.5)^2*D19\"\n\"+(($B52/2))^2*3.14159/D41\"\n\"+D64*D52*D30\"\n\"+D88/D76\"\n\"D112/(20*D124)\"\n\"+D148/(20*D124)\"\n\"+D172/(20*D124)\"\n\"+$C229/D124\"\n\"+$C240/D124\"\n\"+fisher!C40\"\n\"+C3/C6\"\n\"+C9/C4\"\n\"+(H10/C10)^(1/5)-1\"\n\"+(4)^(1/3)-1\"\n\"+C9+C16*C6\"\n\"-C13*C9/C6\"\n\"+'LEM cost side'!D5\"\n\"+SUM(C3:C12)\"\n\"12*20*C3*'LEM cost side'!D76/1000000\"\n\"+C15*'LEM Demand Calibration'!C$10\"\n\"-(C37-'LEM Demand Calibration'!C15)/'LEM Demand Calibration'!C16\"\n\"+C39*'LEM Demand Calibration'!C10\"\n\"+'LEM cost side'!D100+C$41\"\n\"+IF(C43>C$40,0,C3)\"\n\"+C3-C55\"\n\"12*20*'LEM cost side'!E76/1000000\"\n\"+C81*'LEM Demand Calibration'!C$10+'Capacity&Price Calculation'!C$37\"\n\"-(C93-'LEM Demand Calibration'!C$15)/'LEM Demand Calibration'!C$16\"\n\"+C40\"\n\"+C152*'LEM Demand Calibration'!C$10\"\n\"+D104*'LEM Demand Calibration'!D$10\"\n\"+D83-D81\"\n\"+C$37+C130*'LEM Demand Calibration'!C$10\"\n\"+'LEM cost side'!$C229/'LEM cost side'!D124\"\n\"'LEM cost side'!D136*20\"\n\"+'Capacity&Price Calculation'!D43*'Capacity&Price Calculation'!D81*1000\"\n\"+E26\"\n\"+'Capacity&Price Calculation'!D115*'Capacity&Price Calculation'!D81*1000\"\n\"+($N$2*'Capacity&Price Calculation'!C$25+'Capacity&Price Calculation'!C81)*1000*'Capacity&Price Calculation'!C115-($N$2*'Capacity&Price Calculation'!C$25*1000*'Capacity&Price Calculation'!C$40)\"\n\"-D4-D15\"\n\"+E37-E26\"\n\"+IRR(D48:I48,0.15)\"\n\"+'LEM cost side'!D240*'LEM cost side'!E196\"\n\"+'LEM cost side'!D160*20*'LEM cost side'!E196\"\n\"+('LEM cost side'!E78*'Capacity&Price Calculation'!D163-'LEM cost side'!E76*'Capacity&Price Calculation'!D$40)*20*12/1000\"\n\"+('LEM cost side'!F78*'Capacity&Price Calculation'!E163-'LEM cost side'!F76*'Capacity&Price Calculation'!E40)*20*12/1000\"\n\"+E28-E26\"\n\"-D83-D72\"\n\"+E96-E107\"\n\"+C5*0.25+C6*0.5+C7+2*C8+4*C9\"\n\"+C10/(SUM(C5:C9))\"\n\"+C11/$C$11\"\n\"+(D12-C12)/C12\"\n\"+SUMPRODUCT(C5:C9,C15:C19)\"\n\"+C20/C10\"\n\"+C21/$C$21\"\n\"+C5*C15/SUMPRODUCT(C5:C9,C15:C19)\"\n\"+C6*C16/SUMPRODUCT(C5:C9,C15:C19)\"\n\"+C7*C17/SUMPRODUCT(C5:C9,C15:C19)\"\n\"+C8*C18/SUMPRODUCT(C5:C9,C15:C19)\"\n\"+C9*C19/SUMPRODUCT(C5:C9,C15:C19)\"\n\"+SUM(C24:C28)\"\n\"+D15/C15\"\n\"+SUMPRODUCT(C24:C27,D31:D34)\"\n\"+SUMPRODUCT(D24:D28,E31:E35)\"\n\"+SUMPRODUCT(G25:G28,H32:H35)\"\n\"1/((D24*1/D31+D25*1/D32+D26*1/D33+D27*1/D34)*(1/(1-D28)))\"\n\"1/(E24*1/E31+E25*1/E32+E26*1/E33+E27*1/E34+E28*1/E35)\"\n\"1/(H25*1/H32+H26*1/H33+H27*1/H34+H28*1/H35)\"\n\"+SQRT(D37*D38)\"\n\"+D39*C40\"\n\"+C20/C40\"\n\"+C41/SUM(C5:C9)\"\n\"+C42/$C$42\"\n\"+$A$47\"\n\"+C10+C50*C21\"\n\"+(-C47)*C10/C21\"\n\"+C5*0.25+C6*0.5+C7+2*C8+4*C9\"\n\"+C10/$C$10\"\n\"+SUMPRODUCT(C5:C9,C13:C17)\"\n\"+C18/C10\"\n\"+C19/$C$19\"\n\"+C18/C20\"\n\"+C21/SUM(C5:C9)\"\n\"+C22/$C$22\"\n\"+(D23-C23)/C23\"\n\"+C10/(SUM(C5:C9))\"\n\"+C26/$C$26\"\n\"+$A$30\"\n\"+C21+C33*C20\"\n\"+(-C30)*C21/C20\"\n\"12*C37\"\n\"20*30*12\"\n\"+$F$39*C38\"\n\"+D40*D41*D42/1000\"\n\"+D43/D10\"\n\"+(D43-D32)/-D33\"\n\"+D45/D19\"\n\"+(1+$C$47)*$E$47\"\n\"+(1+$C$47)*$H$47\"\n\"+D51*(1+$C$47)\"\n\"+D63*D41*D42-D48-(D41)*D49\"\n\"+E45*E41*E42-E48-(E41)*E49\"\n\"+$D$50/5\"\n\"+D53-D54\"\n\"+SUM(D55:H55)\"\n\"+D45*D41*D42-D48/(1+$C$47)-(D41)*D49/(1+$C$47)\"\n\"+$D$50/(5*(1+$C$47))\"\n\"20*12*D57/1000\"\n\"+D43+$C$61*1000*12*D41*D42/1000000\"\n\"+$C$61*12/C40\"\n\"+(D62-D32)/-D33\"\n\"-+D51*12*C61/1000\"\n\"-($C$61*12*D48/(1+$C$47))/1000-($C$61*12*D41*D49/(1+$C$47))/1000\"\n\"+D63*$C$61*12*D41*D42/1000\"\n\"+C68+C69+C70\"\n\"+IRR(C71:H71,0.15)\"\n\"+$D$76*D43\"\n\"+D63-D45\"\n\"+D79*D78\"\n\"+C71+C80\"\n\"+IRR(C83:H83,0.15)\"\n\"AVERAGE(J3:P3)\"\n\"SUM(B12:B19)\"\n\"SUM(E23:E29)\"\n\"IF(A2=A1,\"\"DUPLIC\"\",\"\"\"\")\"\n\"IF(A2=A1,\"\"DUPLIC\"\", \"\"\"\")\"\n\"B7*B8+C7*C8\"\n\"$B$7*B11+$C$7*C11\"\n\"B7*B8+C7*C8\"\n\"$B$7*B11+$C$7*C11\"\n\" \"\"------------------ Time per Table ------------------\"\"\"\n\" \"\"------------------ Time per Table ------------------\"\"\"\n\"(C6*$B$6+C7*$B$7+C8*$B$8+C9*$B$9)\"\n\"C10-C11\"\n\"(F6*B6)+(F7*B7)+(F8*B8)+(F9*B9)\"\n\" \"\"------------------ Time per Table ------------------\"\"\"\n\"(C6*$B$6+C7*$B$7+C8*$B$8+C9*$B$9)\"\n\"C10-C11\"\n\"(F6*B6)+(F7*B7)+(F8*B8)+(F9*B9)\"\n\"\"\"---------- Slip Rings ----------\"\"\"\n\"SUMPRODUCT(B11:D12,B7:D8)\"\n\"\"\"---------- Slip Rings ----------\"\"\"\n\"B7+B8\"\n\"SUMPRODUCT(B18:D18,$B$7:$D$7)\"\n\"SUMPRODUCT(B11:D12,B7:D8)\"\n\"\"\"---------- Slip Rings ----------\"\"\"\n\"B7+B8\"\n\"SUMPRODUCT(B18:D18,$B$7:$D$7)\"\n\"+#REF!/#REF!\"\n\" J2 + K2/60\"\n\"-(M2 + N2/60)\"\n\"SQRT(Q25^2+S25^2)/2\"\n\"ATAN((S25/2)/(Q25/2)) * 180/PI()\"\n\" 980*TAN(V25*PI()/180)\"\n\"SUM(I2:J2)\"\n\"SUM(K2)\"\n\"SUM(L2:M2)\"\n\"SUM(E2:G2)\"\n\"SUM(I2:J2)\"\n\"SUM(K2)\"\n\"SUM(L2:M2)\"\n\"SUM(E2:G2)\"\n\"SUM(I2:J2)\"\n\"SUM(K2)\"\n\"SUM(L2:M2)\"\n\"SUM(E2:G2)\"\n\"SUM(I2:J2)\"\n\"SUM(K2)\"\n\"SUM(L2:M2)\"\n\"SUM(E2:G2)\"\n\"SUM(I2:J2)\"\n\"SUM(K2)\"\n\"SUM(L2:M2)\"\n\"SUM(E2:G2)\"\n\"IF(AND(B2=B3,C2=C3,D2=D3,E2=E3,F2=F2,G3=G3,H2=H3,I2=I3,J2=J3,K2=K3,L2=L3,M2=M3,N2=N3,O2=O3,P2=P3,Q2=Q3,R2=R3,S2=S3,T2=T3,U2=U3,V2=V3,W2=W3,X2=X3,Y2=Y3,Z2=Z3,AA2=AA3,AB2=AB3,AC2=AC3,AND(AD2=AD3,AE2=AE3,AF2=AF3,AG2=AG3,AH2=AH3)),\"\"same\"\",\"\"different\"\")\"\n\"MIN(Sheet3!D$1:D$65536)\"\n\"AVERAGE(Sheet3!D$1:D$65536)\"\n\"MEDIAN(Sheet3!D$1:D$65536)\"\n\"MODE(Sheet3!D2:D4465)\"\n\"MAX(Sheet3!D$1:D$65536)\"\n\"SUM(Sheet3!D$1:D$65536)\"\n\"COUNTIF(Sheet3!D$1:D$65536,\"\">0\"\")\"\n\"COUNTIF(Sheet3!B$1:B$65536,\"\"Yes\"\")\"\n\"COUNTIF(Sheet3!B$1:B$65536,\"\"No\"\")\"\n\"IF(A2=A3,\"\"arg\"\",\"\"\"\")\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(G2:H2)\"\n\"IF(I2=0,1,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM('Fellowship of the Ring'!F325:G325)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM('Realms of the Elflords'!F107:G107)\"\n\"SUM('Realms of the Elflords'!F33:G33)\"\n\"SUM('Fellowship of the Ring'!F338:G338)\"\n\"SUM('Realms of the Elflords'!F43:G43)\"\n\"SUM('Fellowship of the Ring'!F344:G344)\"\n\"SUM('Realms of the Elflords'!F2:G2)\"\n\"SUM('Fellowship of the Ring'!F352:G352)\"\n\"SUM('Realms of the Elflords'!F25:G25)\"\n\"SUM('Mines of Moria'!F52:G52)\"\n\"SUM('Realms of the Elflords'!F70:G70)\"\n\"SUM('Fellowship of the Ring'!F14:G14)\"\n\"SUM('Fellowship of the Ring'!F51:G51)\"\n\"SUM('Fellowship of the Ring'!F90:G90)\"\n\"SUM('Realms of the Elflords'!F122:G122)\"\n\"SUM('The Two Towers'!F118:G118)\"\n\"SUM('The Two Towers'!F271:G271)\"\n\"SUM('Battle of Helms Deep'!F29:G29)\"\n\"SUM('Battle of Helms Deep'!F94:G94)\"\n\"SUM('Ents of Fangorn'!F38:G38)\"\n\"SUM('Ents of Fangorn'!F84:G84)\"\n\"SUM('Return of the King'!F82:G82)\"\n\"SUM('Siege of Gondor'!F11:G11)\"\n\"SUM('Return of the King'!F87:G87)\"\n\"SUM('Return of the King'!F37:G37)\"\n\"SUM('Mount Doom'!F122:G122)\"\n\"SUM('Return of the King'!F17:G17)\"\n\"SUM('Return of the King'!F229:G229)\"\n\"SUM('Ents of Fangorn'!F77:G77)\"\n\"SUM('Fellowship of the Ring'!F222:G222)\"\n\"SUM('Ents of Fangorn'!F31:G31)\"\n\"SUM('The Two Towers'!F275:G275)\"\n\"SUM('Fellowship of the Ring'!F16:G16)\"\n\"SUM('The Two Towers'!F117:G117)\"\n\"SUM('Mines of Moria'!F75:G75)\"\n\"SUM('Mines of Moria'!F86:G86)\"\n\"SUM('The Two Towers'!F92:G92)\"\n\"SUM('The Two Towers'!F272:G272)\"\n\"SUM('The Two Towers'!F42:G42)\"\n\"SUM('Fellowship of the Ring'!F91:G91)\"\n\"SUM('Mines of Moria'!F51:G51)\"\n\"SUM('Ents of Fangorn'!F32:G32)\"\n\"SUM('The Two Towers'!F268:G268)\"\n\"SUM('Battle of Helms Deep'!F8:G8)\"\n\"SUM('Ents of Fangorn'!F51:G51)\"\n\"SUM('Siege of Gondor'!F27:G27)\"\n\"SUM('Siege of Gondor'!F88:G88)\"\n\"SUM(Reflections!F53:G53)\"\n\"SUM(Reflections!F52:G52)\"\n\"SUM(Reflections!F17:G17)\"\n\"SUM(Reflections!F27:G27)\"\n\"SUM(Reflections!F49:G49)\"\n\"SUM('Mount Doom'!F88:G88)\"\n\"SUM(Reflections!F2:G2)\"\n\"SUM(F2:F70)\"\n\"COUNTIF(F2:F70,0)\"\n\"SUM(K2:P2)\"\n\"SUM(Q2:U2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM('The Two Towers'!F3:G3,'Return of the King'!F2:G2)\"\n\"SUM(Promotional!F13:G13)\"\n\"SUM(Promotional!F35:G35)\"\n\"SUM('Return of the King'!F21:G21)\"\n\"SUM('The Two Towers'!F63:G63)\"\n\"SUM(Promotional!F14:G14)\"\n\"SUM('Return of the King'!F42:G42)\"\n\"SUM(Promotional!F15:G15)\"\n\"SUM(Promotional!F42:G42)\"\n\"SUM('Return of the King'!F85:G85)\"\n\"SUM('The Two Towers'!F130:G130)\"\n\"SUM('The Two Towers'!F208:G208)\"\n\"SUM(Promotional!F32:G32)\"\n\"SUM('Return of the King'!F208:G208)\"\n\"SUM('The Two Towers'!F307:G307,'Return of the King'!F320:G320)\"\n\"SUM('Return of the King'!F323:G323)\"\n\"SUM(Promotional!F2:G2)\"\n\"SUM(Promotional!F5:G5)\"\n\"SUM(Promotional!F7:G7)\"\n\"SUM(Promotional!F9:G9)\"\n\"SUM(F2:F366)\"\n\"COUNTIF(F2:F366,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM('Return of the King'!F53:G53)\"\n\"SUM(Promotional!F43:G43)\"\n\"SUM(Promotional!F11:G11)\"\n\"SUM(Promotional!F37:G37)\"\n\"SUM(Promotional!F38:G38)\"\n\"SUM(F2:F123)\"\n\"COUNTIF(F2:F123,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(Promotional!F8:G8)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(Promotional!F10:G10)\"\n\"SUM(Promotional!F4:G4)\"\n\"SUM(Promotional!F6:G6)\"\n\"SUM(Promotional!F12:G12)\"\n\"SUM('Return of the King'!F298:G298)\"\n\"SUM(Promotional!F3:G3)\"\n\"SUM(Promotional!F16:G16)\"\n\"SUM(F2:F123)\"\n\"COUNTIF(F2:F123,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM('Fellowship of the Ring'!F3:G3,'Return of the King'!F2:G2)\"\n\"SUM(Promotional!F41:G41)\"\n\"SUM('Fellowship of the Ring'!F42:G42)\"\n\"SUM(Promotional!F39:G39)\"\n\"SUM('Return of the King'!F41:G41)\"\n\"SUM(Promotional!F36:G36)\"\n\"SUM(Promotional!F17:G17)\"\n\"SUM('Fellowship of the Ring'!F111:G111)\"\n\"SUM('Fellowship of the Ring'!F159:G159)\"\n\"SUM('Return of the King'!F226:G226)\"\n\"SUM(Promotional!F46:G46)\"\n\"SUM(Promotional!F18:G18)\"\n\"SUM(Promotional!F40:G40)\"\n\"SUM(Promotional!F34:G34)\"\n\"SUM('Fellowship of the Ring'!F300:G300,'Return of the King'!F320:G320)\"\n\"SUM(F2:F366)\"\n\"COUNTIF(F2:F366,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(F124:G124)\"\n\"SUM(Promotional!F47:G47)\"\n\"SUM(F125:G125)\"\n\"SUM(Promotional!F19:G19)\"\n\"SUM(F126:G126)\"\n\"SUM(F127:G127)\"\n\"SUM(F128:G128)\"\n\"SUM(Promotional!F20:G20)\"\n\"SUM(F129:G129)\"\n\"SUM(F6:G6)\"\n\"SUM(F12:G12)\"\n\"SUM(F51:G51)\"\n\"SUM(F71:G71)\"\n\"SUM(F90:G90)\"\n\"SUM(F95:G95)\"\n\"SUM(F2:F129)\"\n\"COUNTIF(F2:F129,0)\"\n\"SUM(K2:P2)\"\n\"SUM(Q2:U2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(F124:G124)\"\n\"SUM(Promotional!F33:G33)\"\n\"SUM(Promotional!F45:G45)\"\n\"SUM(F125:G125)\"\n\"SUM(Promotional!F22:G22)\"\n\"SUM(F126:G126)\"\n\"SUM(F127:G127)\"\n\"SUM(Promotional!F48:G48)\"\n\"SUM(F128:G128)\"\n\"SUM(Promotional!F31:G31)\"\n\"SUM(Promotional!F23:G23)\"\n\"SUM(F129:G129)\"\n\"SUM(F27:G27)\"\n\"SUM(F36:G36)\"\n\"SUM(F40:G40)\"\n\"SUM(F50:G50)\"\n\"SUM(F69:G69)\"\n\"SUM(F104:G104)\"\n\"SUM(F2:F129)\"\n\"COUNTIF(F2:F129,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM('The Two Towers'!F3:G3,'Fellowship of the Ring'!F3:G3)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(Promotional!F29:G29)\"\n\"SUM('Fellowship of the Ring'!F38:G38)\"\n\"SUM(Promotional!F27:G27)\"\n\"SUM('The Two Towers'!F94:G94)\"\n\"SUM('Fellowship of the Ring'!F77:G77)\"\n\"SUM('Mines of Moria'!F30:G30)\"\n\"SUM(Promotional!F24:G24)\"\n\"SUM('Fellowship of the Ring'!F103:G103)\"\n\"SUM(Promotional!F26:G26)\"\n\"SUM('Fellowship of the Ring'!F227:G227)\"\n\"SUM('The Two Towers'!F266:G266)\"\n\"SUM(Promotional!F30:G30)\"\n\"SUM('Realms of the Elflords'!F95:G95)\"\n\"SUM('The Two Towers'!F307:G307,'Fellowship of the Ring'!F300:G300)\"\n\"SUM('Fellowship of the Ring'!F305:G305)\"\n\"SUM(F2:F366)\"\n\"COUNTIF(F2:F366,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(Promotional!F25:G25)\"\n\"SUM(Promotional!F49:G49)\"\n\"SUM(Promotional!F50:G50)\"\n\"SUM(F2:F123)\"\n\"COUNTIF(F2:F123,0)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(Promotional!F69:G69)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(Promotional!F53:G53)\"\n\"SUM(Promotional!F54:G54)\"\n\"SUM(Promotional!F55:G55)\"\n\"SUM(Promotional!F52:G52)\"\n\"SUM(Promotional!F51:G51)\"\n\"SUM(F2:F53)\"\n\"COUNTIF(F2:F53,0)\"\n\"SUM(K1:K53)\"\n\"SUM(K2:O2)\"\n\"SUM(P2:T2)\"\n\"SUM(F2:H2)\"\n\"IF(IF(D2=\"\"\"\",1,4)>I2,IF(D2=\"\"\"\",1,4)-I2,IF(F2+G2>0,0,1))\"\n\"SUM(Promotional!F56:G56)\"\n\"SUM(Promotional!F28:G28)\"\n\"SUM(F2:F123)\"\n\"COUNTIF(F2:F123,0)\"\n\"SUM(G3:H3)\"\n\"SUM(G25)\"\n\"COUNTIF(F2:F170,0)\"\n\"SUM(F2:H2)\"\n\"COUNTIF(E2:E364,0)\"\n\"SUM(F2:G2)\"\n\"COUNTIF(E2:E123,0)\"\n\"SUM(F2)\"\n\"COUNTIF(E2:E122,0)\"\n\"SUM(F2)\"\n\"COUNTIF(E2:E131,0)\"\n\"SUM(F2)\"\n\"COUNTIF(E2:E277,0)\"\n\"SUM(F2:G2)\"\n\"COUNTIF(E2:E131,0)\"\n\"SUM(F2:G2)\"\n\"COUNTIF(E2:E131,0)\"\n\"SUM(F2)\"\n\"COUNTIF(E2:E131,0)\"\n\"SUM(G2:H2)\"\n\"COUNTIF(F13:F142,0)\"\n\"SUM(G2:H2)\"\n\"COUNTIF(F2:F131,0)\"\n\"SUM(G2:H2)\"\n\"COUNTIF(F2:F219,0)\"\n\"SUM(G2:H2)\"\n\"COUNTIF(F2:F144,0)\"\n\"SUM(G2)\"\n\"COUNTIF(F2:F142,0)\"\n\"SUM(G2:H2)\"\n\"COUNTIF(F2:F135,0)\"\n\"IF(AND(B3,C3=\"\"yes\"\"),1,0)\"\n\"IF(AND(B3,C3=\"\"no\"\"),1,0)\"\n\"IF(AND(NOT(B3),C3=\"\"yes\"\"),1,0)\"\n\"IF(AND(NOT(B3),C3=\"\"no\"\"),1,0)\"\n\"IF(AND(NOT(K3),L3=\"\"no\"\"),1,0)\"\n\"IF(SUM(AJ3,AD3,X3,R3,L3,F3)>0,\"\"Yes\"\",\"\"\"\")\"\n\"COUNTIF(B3:B43,TRUE)\"\n\"COUNTIF(C3:C43,\"\"Yes\"\")\"\n\"SUM(D3:D43)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"AVERAGE(C2:C5)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"SUM(A2:C2)\"\n\"COUNTA(A6:A38)\"\n\"COUNTA(B5:B38)\"\n\"COUNTA(ER5:ER38)\"\n\"COUNTA(#REF!)\"\n\"SUM(B4:K4)\"\n\"AVERAGE(L4:L42)\"\n\"SUM(C5:K5)\"\n\"SUM(C6:G6)\"\n\"SUM(H6:K6)\"\n\"AVERAGE(C6:C44)\"\n\"SUM(B4:G4)\"\n\"SUM(B7:H7)\"\n\"AVERAGE(B4:B42)\"\n\"SUM(B5:E5)\"\n\"AVERAGE(C4:C6)\"\n\"AVERAGE(C4:C9)\"\n\"AVERAGE(C4:C15)\"\n\"ABS(D21-C21)\"\n\"E21^2\"\n\"E21/C21\"\n\"E30/9\"\n\"F30/9\"\n\"((G30)/9)*100\"\n\"SUM(E21:E29)\"\n\"$C$40+$C$41*C47\"\n\"'Problem 28'!D53\"\n\"E5\"\n\"$C$7*G9+(1-$C$7)*(H8+I8)\"\n\"$C$8*(H9-H8)+(1-$C$8)*I8\"\n\"$H$10+D18*$I$10\"\n\"H9+D20*I9\"\n\"-2*($C$13)+C5\"\n\"-($C$13)+C9\"\n\"SUM(D5:D8)/4\"\n\"SUM(D9:D12)/4\"\n\"(C18-C17)/4\"\n\"C18+C20*(1.5)\"\n\"D5/(($C$17)-((5/2-F5)*$C$20))\"\n\"D9/(($C$18)-((5/2-F9)*$C$20))\"\n\"AVERAGE(C23,C27)\"\n\"C34*$C$39\"\n\"SUM(C34:C37)\"\n\"4/C38\"\n\"C43*(C47/D34)+(1-C43)*(C21+C20)\"\n\"C44*(C48-C21)+(1-C44)*C20\"\n\"C45*(C47/C48)+(1-C45)*D34\"\n\"($C$48+C56*$C$49)*D35\"\n\"10-9\"\n\"10-8\"\n\"10-7\"\n\"10-6\"\n\"10-5\"\n\"10-4\"\n\"10-3\"\n\"10-2\"\n\"10-1\"\n\"10+1\"\n\"10-9\"\n\"10-8\"\n\"10-7\"\n\"10-6\"\n\"10-5\"\n\"10-4\"\n\"10-3\"\n\"10-2\"\n\"10-1\"\n\"10+1\"\n\"C4-C3\"\n\"AD2\"\n\"[1]Totaal!$A$13\"\n\"[2]Dec!$H$25\"\n\"INDIRECT(\"\"'[\"\"& B11&\"\" - 2011 Distr.xlsx]Totaal'!$A12\"\")\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$A\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"B51-B50\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$B\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"B51-B50\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$C\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$D\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$E\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$F\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$E\"\"&ROW(B49))\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$G\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$H\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(C12:C49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$I\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(C12:C49)\"\n\"AC2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$J\"\"&ROW(B12))\"\n\"SUM(B12:Z12)\"\n\"SUM(AD12:BC12)\"\n\"SUM(D12:D49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$K\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AF2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$L\"\"&ROW(B12))\"\n\"SUM(B12:AC12)\"\n\"SUM(AG12:BI12)\"\n\"SUM(B12:B49)\"\n\"Jan!AB12\"\n\"Feb!AB12\"\n\"Maart!AB12\"\n\"April!AB12\"\n\"Mei!AB12\"\n\"Juni!AB12\"\n\"Juli!AB12\"\n\"Aug!AB12\"\n\"Sep!AB12\"\n\"Okt!AA12\"\n\"Nov!AB12\"\n\"Dec!AD12\"\n\"SUM(A12:L12)\"\n\"Jan!BF12\"\n\"Feb!BF12\"\n\"Maart!BF12\"\n\"April!BE12\"\n\"Mei!BF12\"\n\"Juni!BF12\"\n\"Juli!BF12\"\n\"Aug!BF12\"\n\"Sep!BF12\"\n\"Okt!BD12\"\n\"Nov!BF12\"\n\"Dec!BJ12\"\n\"AG34-AG35\"\n\"AH37+AG37\"\n\"Feb!BF44\"\n\"Maart!BF44\"\n\"April!BE44\"\n\"Mei!BF44\"\n\"Juni!BF44\"\n\"Juli!BF44\"\n\"Aug!BF44\"\n\"Sep!BF44\"\n\"Okt!BD44\"\n\"Nov!BF44\"\n\"Jan!BE48\"\n\"SUM(A12:A49)\"\n\"M50-AB50\"\n\"AE50+AE51\"\n\"SUM(A12:E12)\"\n\"35+50\"\n\"96+6\"\n\"24+126\"\n\"68+23+10\"\n\"15+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"18+16\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"36+14\"\n\"48+46\"\n\"23+46\"\n\"46+24\"\n\"23+15\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"86+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"48+16\"\n\"70+9+5\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"73+17\"\n\"50+39\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"40+21\"\n\"46+17\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!R12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"172+600\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!Q12\"\n\"Juni!Q12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!Q38\"\n\"Juni!Q38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!N38\"\n\"Okt!P38\"\n\"Nov!P38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!Q39\"\n\"Juni!Q39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!N39\"\n\"Okt!P39\"\n\"Nov!P39\"\n\"Dec!N39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"200+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"145+200\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"97+89\"\n\"36+106\"\n\"339+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"205+250\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"160+45\"\n\"90+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+190\"\n\"SUM(I12:O12)\"\n\"SUM(I13:M13)\"\n\"101+84\"\n\"64+37\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!P12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!P12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!O38\"\n\"April!N38\"\n\"Mei!P38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!P38\"\n\"Okt!O38\"\n\"Nov!O38\"\n\"Dec!P38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!O39\"\n\"April!N39\"\n\"Mei!P39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!P39\"\n\"Okt!O39\"\n\"Nov!O39\"\n\"Dec!P39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"4800+5850\"\n\"SUM(H12:H49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:T12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:R12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!H12\"\n\"Sep!G12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!T12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!R12\"\n\"Okt!P12\"\n\"Nov!U12\"\n\"Dec!S12\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"320+110\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:S12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"Jan!G12\"\n\"Feb!G12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!P12\"\n\"Maart!T12\"\n\"April!O12\"\n\"Mei!P12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!S12\"\n\"Dec!O12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"570+760\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!Q12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!P46\"\n\"April!N46\"\n\"Mei!Q46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!O46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"355+290+290\"\n\"320+370+290\"\n\"90+245+225\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:S12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"650+960\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!O12\"\n\"Maart!O12\"\n\"April!O12\"\n\"Mei!T12\"\n\"Juni!P12\"\n\"Juli!Q12\"\n\"Aug!P12\"\n\"Sep!Q12\"\n\"Okt!R12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"SUM(A12:E12)\"\n\"144+10\"\n\"93+9+19\"\n\"22+63\"\n\"28+55\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"42+20\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"80+35\"\n\"80+26+11\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"87+107\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"1740+1325\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:I12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"Jan!F12\"\n\"Feb!H12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!H12\"\n\"Juli!H12\"\n\"Aug!H12\"\n\"Sep!H12\"\n\"Okt!J12\"\n\"Nov!G12\"\n\"Dec!H12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!R12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!R12\"\n\"Juni!R12\"\n\"Juli!R12\"\n\"Aug!R12\"\n\"Sep!S12\"\n\"Okt!V12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"Jan!N38\"\n\"Feb!R38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!R38\"\n\"Juni!R38\"\n\"Juli!R38\"\n\"Aug!R38\"\n\"Sep!S38\"\n\"Okt!V38\"\n\"Nov!Q38\"\n\"Dec!R38\"\n\"Jan!N39\"\n\"Feb!R39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!R39\"\n\"Juni!R39\"\n\"Juli!R39\"\n\"Aug!R39\"\n\"Sep!S39\"\n\"Okt!V39\"\n\"Nov!Q39\"\n\"Dec!R39\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"22+45\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"21+14\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N45\"\n\"Feb!N45\"\n\"Maart!P45\"\n\"April!N45\"\n\"Mei!P45\"\n\"Juni!P45\"\n\"Juli!N45\"\n\"Aug!O45\"\n\"Sep!N45\"\n\"Okt!N45\"\n\"Nov!N45\"\n\"Dec!N45\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!G12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!I12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!S12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"56+60\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"153+133\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"60+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"120+53\"\n\"120+22\"\n\"74+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"68+28\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"79+65\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"220+1550\"\n\"800+120\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"405+580\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Dec!H12\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"275+405\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"575+270\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"290+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"394+240\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!Q12\"\n\"Okt!N12\"\n\"Nov!P12\"\n\"Dec!Q12\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"32+160\"\n\"68+90+70+160\"\n\"55+135+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"168+310\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:U12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:T12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"170\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!J12\"\n\"Juni!I12\"\n\"Juli!I12\"\n\"Aug!F12\"\n\"Sep!J12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!Q12\"\n\"Maart!V12\"\n\"April!P12\"\n\"Mei!W12\"\n\"Juni!U12\"\n\"Juli!T12\"\n\"Aug!R12\"\n\"Sep!W12\"\n\"Okt!R12\"\n\"Nov!S12\"\n\"Dec!R12\"\n\"Jan!P38\"\n\"Maart!V38\"\n\"April!P38\"\n\"Mei!W38\"\n\"Juni!U38\"\n\"Juli!T38\"\n\"Aug!R38\"\n\"Sep!W38\"\n\"Okt!R38\"\n\"Nov!S38\"\n\"Dec!R38\"\n\"Jan!P39\"\n\"Maart!V39\"\n\"April!P39\"\n\"Mei!W39\"\n\"Juni!U39\"\n\"Juli!T39\"\n\"Aug!R39\"\n\"Sep!W39\"\n\"Okt!R39\"\n\"Nov!S39\"\n\"Dec!R39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"436+691+305+528+750+112+277+388\"\n\"860+2*466\"\n\"200+750\"\n\"860+560\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"3*527+2*380+750\"\n\"306+4*800\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"360+990\"\n\"1080+861\"\n\"SUM(E13:E49)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!T12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!Q12\"\n\"Dec!S12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"26+23\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"70+13\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"13+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"15+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"35+20\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!O38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!N39\"\n\"April!N39\"\n\"Mei!N39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!O39\"\n\"Sep!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Dec!N39\"\n\"SUM(A12:E12)\"\n\"570+870\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!Q12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"80+195\"\n\"150+52\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+137\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"115+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"120+36\"\n\"70+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"110+47\"\n\"57+32\"\n\"127+58\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!G12\"\n\"Nov!F12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!S12\"\n\"Juni!N12\"\n\"Juli!O12\"\n\"Aug!R12\"\n\"Sep!N12\"\n\"Okt!S12\"\n\"Nov!O12\"\n\"Dec!T12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"41+30\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"32+85\"\n\"121+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"40+14\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"46+13\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"57+33\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!G12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!R12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!Q12\"\n\"A1\"\n\"AVERAGE(C2:C5)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"SUM(A2:C2)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"AVERAGE(F3:I3)\"\n\"AVERAGE(C2:C5)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"SUM(A2:C2)\"\n\"SUM(H1:H3)\"\n\"AVERAGE(G3:J3)\"\n\"AVERAGE(C2:C5)\"\n\"SUM(A1:C1)\"\n\"SUM(A1:A3)\"\n\"SUM(A2:C2)\"\n\"SUM(H1:H3)\"\n\"C4-C3\"\n\"C4-C3\"\n\"AD2\"\n\"[1]Totaal!$A$13\"\n\"[2]Dec!$H$25\"\n\"INDIRECT(\"\"'[\"\"& B11&\"\" - 2011 Distr.xlsx]Totaal'!$A12\"\")\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$A\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"B51-B50\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$B\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"B51-B50\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$C\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$D\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$E\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$F\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$E\"\"&ROW(B49))\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$G\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$H\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(C12:C49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$I\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(C12:C49)\"\n\"AC2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$J\"\"&ROW(B12))\"\n\"SUM(B12:Z12)\"\n\"SUM(AD12:BC12)\"\n\"SUM(D12:D49)\"\n\"AD2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$K\"\"&ROW(B12))\"\n\"SUM(B12:AA12)\"\n\"SUM(AE12:BE12)\"\n\"SUM(B12:B49)\"\n\"AF2\"\n\"INDIRECT(\"\"'[\"\"&B$11&\"\" - 2011 Distr.xlsx]Totaal'!$L\"\"&ROW(B12))\"\n\"SUM(B12:AC12)\"\n\"SUM(AG12:BI12)\"\n\"SUM(B12:B49)\"\n\"Jan!AB12\"\n\"Feb!AB12\"\n\"Maart!AB12\"\n\"April!AB12\"\n\"Mei!AB12\"\n\"Juni!AB12\"\n\"Juli!AB12\"\n\"Aug!AB12\"\n\"Sep!AB12\"\n\"Okt!AA12\"\n\"Nov!AB12\"\n\"Dec!AD12\"\n\"SUM(A12:L12)\"\n\"Jan!BF12\"\n\"Feb!BF12\"\n\"Maart!BF12\"\n\"April!BE12\"\n\"Mei!BF12\"\n\"Juni!BF12\"\n\"Juli!BF12\"\n\"Aug!BF12\"\n\"Sep!BF12\"\n\"Okt!BD12\"\n\"Nov!BF12\"\n\"Dec!BJ12\"\n\"AG34-AG35\"\n\"AH37+AG37\"\n\"Feb!BF44\"\n\"Maart!BF44\"\n\"April!BE44\"\n\"Mei!BF44\"\n\"Juni!BF44\"\n\"Juli!BF44\"\n\"Aug!BF44\"\n\"Sep!BF44\"\n\"Okt!BD44\"\n\"Nov!BF44\"\n\"Jan!BE48\"\n\"SUM(A12:A49)\"\n\"M50-AB50\"\n\"AE50+AE51\"\n\"SUM(A12:E12)\"\n\"35+50\"\n\"96+6\"\n\"24+126\"\n\"68+23+10\"\n\"15+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"18+16\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"36+14\"\n\"48+46\"\n\"23+46\"\n\"46+24\"\n\"23+15\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"86+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"48+16\"\n\"70+9+5\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"73+17\"\n\"50+39\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"40+21\"\n\"46+17\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!R12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"172+600\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!Q12\"\n\"Juni!Q12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!Q38\"\n\"Juni!Q38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!N38\"\n\"Okt!P38\"\n\"Nov!P38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!Q39\"\n\"Juni!Q39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!N39\"\n\"Okt!P39\"\n\"Nov!P39\"\n\"Dec!N39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"200+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"145+200\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"97+89\"\n\"36+106\"\n\"339+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"205+250\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"160+45\"\n\"90+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+190\"\n\"SUM(I12:O12)\"\n\"SUM(I13:M13)\"\n\"101+84\"\n\"64+37\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!P12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!P12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!O38\"\n\"April!N38\"\n\"Mei!P38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!P38\"\n\"Okt!O38\"\n\"Nov!O38\"\n\"Dec!P38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!O39\"\n\"April!N39\"\n\"Mei!P39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!P39\"\n\"Okt!O39\"\n\"Nov!O39\"\n\"Dec!P39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"4800+5850\"\n\"SUM(H12:H49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:T12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:R12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!H12\"\n\"Sep!G12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!T12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!R12\"\n\"Okt!P12\"\n\"Nov!U12\"\n\"Dec!S12\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"320+110\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:S12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"Jan!G12\"\n\"Feb!G12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!P12\"\n\"Maart!T12\"\n\"April!O12\"\n\"Mei!P12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!S12\"\n\"Dec!O12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"570+760\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!Q12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!P46\"\n\"April!N46\"\n\"Mei!Q46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!O46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"355+290+290\"\n\"320+370+290\"\n\"90+245+225\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:S12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"650+960\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!O12\"\n\"Maart!O12\"\n\"April!O12\"\n\"Mei!T12\"\n\"Juni!P12\"\n\"Juli!Q12\"\n\"Aug!P12\"\n\"Sep!Q12\"\n\"Okt!R12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"SUM(A12:E12)\"\n\"144+10\"\n\"93+9+19\"\n\"22+63\"\n\"28+55\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"42+20\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"80+35\"\n\"80+26+11\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"87+107\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"1740+1325\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:I12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"Jan!F12\"\n\"Feb!H12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!H12\"\n\"Juli!H12\"\n\"Aug!H12\"\n\"Sep!H12\"\n\"Okt!J12\"\n\"Nov!G12\"\n\"Dec!H12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!R12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!R12\"\n\"Juni!R12\"\n\"Juli!R12\"\n\"Aug!R12\"\n\"Sep!S12\"\n\"Okt!V12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"Jan!N38\"\n\"Feb!R38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!R38\"\n\"Juni!R38\"\n\"Juli!R38\"\n\"Aug!R38\"\n\"Sep!S38\"\n\"Okt!V38\"\n\"Nov!Q38\"\n\"Dec!R38\"\n\"Jan!N39\"\n\"Feb!R39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!R39\"\n\"Juni!R39\"\n\"Juli!R39\"\n\"Aug!R39\"\n\"Sep!S39\"\n\"Okt!V39\"\n\"Nov!Q39\"\n\"Dec!R39\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"22+45\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"21+14\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N45\"\n\"Feb!N45\"\n\"Maart!P45\"\n\"April!N45\"\n\"Mei!P45\"\n\"Juni!P45\"\n\"Juli!N45\"\n\"Aug!O45\"\n\"Sep!N45\"\n\"Okt!N45\"\n\"Nov!N45\"\n\"Dec!N45\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!G12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!I12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!S12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"56+60\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"153+133\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"60+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"120+53\"\n\"120+22\"\n\"74+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"68+28\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"79+65\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"220+1550\"\n\"800+120\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"405+580\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Dec!H12\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"275+405\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"575+270\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"290+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"394+240\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!Q12\"\n\"Okt!N12\"\n\"Nov!P12\"\n\"Dec!Q12\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"32+160\"\n\"68+90+70+160\"\n\"55+135+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"168+310\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:U12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:T12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"170\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!J12\"\n\"Juni!I12\"\n\"Juli!I12\"\n\"Aug!F12\"\n\"Sep!J12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!Q12\"\n\"Maart!V12\"\n\"April!P12\"\n\"Mei!W12\"\n\"Juni!U12\"\n\"Juli!T12\"\n\"Aug!R12\"\n\"Sep!W12\"\n\"Okt!R12\"\n\"Nov!S12\"\n\"Dec!R12\"\n\"Jan!P38\"\n\"Maart!V38\"\n\"April!P38\"\n\"Mei!W38\"\n\"Juni!U38\"\n\"Juli!T38\"\n\"Aug!R38\"\n\"Sep!W38\"\n\"Okt!R38\"\n\"Nov!S38\"\n\"Dec!R38\"\n\"Jan!P39\"\n\"Maart!V39\"\n\"April!P39\"\n\"Mei!W39\"\n\"Juni!U39\"\n\"Juli!T39\"\n\"Aug!R39\"\n\"Sep!W39\"\n\"Okt!R39\"\n\"Nov!S39\"\n\"Dec!R39\"\n\"SUM(M12:M49)\"\n\"SUM(A12:E12)\"\n\"436+691+305+528+750+112+277+388\"\n\"860+2*466\"\n\"200+750\"\n\"860+560\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"3*527+2*380+750\"\n\"306+4*800\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"360+990\"\n\"1080+861\"\n\"SUM(E13:E49)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!T12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!Q12\"\n\"Dec!S12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"26+23\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"70+13\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"13+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"15+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"35+20\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!O38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!N39\"\n\"April!N39\"\n\"Mei!N39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!O39\"\n\"Sep!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Dec!N39\"\n\"SUM(A12:E12)\"\n\"570+870\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!Q12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"80+195\"\n\"150+52\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+137\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"115+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"120+36\"\n\"70+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"110+47\"\n\"57+32\"\n\"127+58\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!G12\"\n\"Nov!F12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!S12\"\n\"Juni!N12\"\n\"Juli!O12\"\n\"Aug!R12\"\n\"Sep!N12\"\n\"Okt!S12\"\n\"Nov!O12\"\n\"Dec!T12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"41+30\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"32+85\"\n\"121+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"40+14\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"46+13\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"57+33\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!G12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!R12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!Q12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"SUM(A5:F5)\"\n\"O5-G5\"\n\"SUM(G5:G42)\"\n\"SUM(B3-C3)\"\n\"H3-I3\"\n\"SUM(B3:B40)\"\n\"SUM(A13:AM13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"SUM(X13:X57)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"Jan!AN13\"\n\"Feb!X13\"\n\"Maart!X13\"\n\"April!X13\"\n\"Mei!X13\"\n\"Juni!X13\"\n\"Juli!X13\"\n\"Aug!X13\"\n\"Sep!X13\"\n\"Okt!X13\"\n\"Nov!X13\"\n\"Dec!X13\"\n\"SUM(A12:L12)\"\n\"SUM(A11:I11)\"\n\"SUM(L11:V11)\"\n\"SUM(A22:I22)\"\n\"SUM(K39:V39)\"\n\"+SUM(L41:V41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I39:Q39)\"\n\"+SUM(J41:Q41)\"\n\"Jan!J11\"\n\"Febr.!H11\"\n\"Mrt.!H11\"\n\"Apr.!H11\"\n\"Mei!H11\"\n\"Jun!H11\"\n\"Jul!H11\"\n\"Aug.!H11\"\n\"Sep.!H11\"\n\"Okt.!H11\"\n\"Nov.!H11\"\n\"Dec.!H11\"\n\"Jan!J11+Febr.!H11+Mrt.!H11+Apr.!H11+Mei!H11+Jun!H11+Jul!H11+Aug.!H11+Sep.!H11+Okt.!H11+Nov.!H11+Dec.!H11\"\n\"Jan!W11\"\n\"Febr.!R11\"\n\"Mrt.!R11\"\n\"Apr.!R11\"\n\"Mei!R11\"\n\"Jun!R11\"\n\"Jul!R11\"\n\"Aug.!R11\"\n\"Sep.!R11\"\n\"Okt.!R11\"\n\"Nov.!R11\"\n\"Dec.!R11\"\n\"Jan!W11+Febr.!R11+Mrt.!R11+Apr.!R11+Mei!R11+Jun!R11+Jul!R11+Aug.!R11+Sep.!R11+Okt.!R11+Nov.!R11+Dec.!R11\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F39)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!P12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!P12\"\n\"Sep!P12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!P12\"\n\"SUM(A13:H13)\"\n\"SUM(L13:L13)\"\n\"SUM(A13:H13)\"\n\"SUM(L13:L13)\"\n\"SUM(A13:N13)\"\n\"SUM(S13:W13)\"\n\"SUM(A13:H13)\"\n\"SUM(M13:Q13)\"\n\"SUM(A13:H13)\"\n\"SUM(O13:S13)\"\n\"SUM(A13:Q13)\"\n\"SUM(V13:Z13)\"\n\"160+140\"\n\"45+85+65\"\n\"SUM(A14:N14)\"\n\"SUM(S14:X14)\"\n\"100+170+5325+117+145+3310+155+212+123\"\n\"SUM(A12:Q12)\"\n\"SUM(V12:Z12)\"\n\"370+350+330\"\n\"420+165+170\"\n\"1330+540+180+264\"\n\"SUM(A13:M13)\"\n\"SUM(R13:V13)\"\n\"SUM(N13:N49)\"\n\"A11\"\n\"SUM(A13:T13)\"\n\"SUM(Y13:AC13)\"\n\"-3100\"\n\"SUM(A13:AC13)\"\n\"SUM(AH13:AU13)\"\n\"9*445\"\n\"925+3105\"\n\"SUM(A13:AI13)\"\n\"SUM(AN13:AR13)\"\n\"12600+535\"\n\"SUM(A12:L12)\"\n\"Jan!M13\"\n\"Feb!M13\"\n\"Maart!X13\"\n\"April!M13\"\n\"Mei!O13\"\n\"Juni!V13\"\n\"Juli!S14\"\n\"Aug!V12\"\n\"Sep!R13\"\n\"Okt!Y13\"\n\"Nov!AH13\"\n\"Dec!AN13\"\n\"Jan!I14\"\n\"Feb!I14\"\n\"Maart!O14\"\n\"April!I14\"\n\"Mei!K14\"\n\"Juni!R14\"\n\"Juli!O15\"\n\"Aug!R13\"\n\"Sep!N14\"\n\"Okt!U14\"\n\"Nov!AD14\"\n\"Dec!AJ14\"\n\"Mei!P37\"\n\"Nov!AH46\"\n\"Nov!#REF!\"\n\"SUM(A13:AB13)\"\n\"SUM(AH13:AW13)\"\n\"AG13\"\n\"SUM(A13:AN13)\"\n\"SUM(AS13:CA13)\"\n\"AS13\"\n\"672+450+499\"\n\"SUM(A13:AP13)\"\n\"SUM(AU13:CE13)\"\n\"AU13\"\n\"AW42\"\n\"SUM(AQ13:AQ48)\"\n\"SUM(A13:W13)\"\n\"SUM(AB13:AP13)\"\n\"AB13\"\n\"SUM(X13:X48)\"\n\"SUM(B13:AF13)\"\n\"SUM(AK13:BD13)\"\n\"AK13\"\n\"16*800\"\n\"AM42\"\n\"SUM(A13:AB13)\"\n\"SUM(AG13:BB13)\"\n\"AG13\"\n\"172+20.16+120+216+187.59+290+246+168.3+9.9+471.24+534.6+239.58+33.66\"\n\"AI42\"\n\"SUM(A13:AA13)\"\n\"SUM(AF13:BA13)\"\n\"AF13\"\n\"AH42\"\n\"SUM(A13:AF13)\"\n\"SUM(AK13:BJ13)\"\n\"AK13\"\n\"AM42\"\n\"SUM(A13:AG13)\"\n\"SUM(AL13:BE13)\"\n\"AL13\"\n\"AN42\"\n\"SUM(A13:AG13)\"\n\"SUM(AL13:BD13)\"\n\"AL13\"\n\"AO42\"\n\"SUM(A13:AG13)\"\n\"SUM(AL13:BE13)\"\n\"AL13\"\n\"AN42\"\n\"SUM(AH13:AH48)\"\n\"SUM(A13:AW13)\"\n\"SUM(BB13:CB13)\"\n\"BB13\"\n\"391+65\"\n\"BD42\"\n\"136*4\"\n\"SUM(AX13:AX48)\"\n\"Jan!AC13\"\n\"Feb!AO13\"\n\"Maart!AQ13\"\n\"April!X13\"\n\"Mei!AG13\"\n\"Juni!AC13\"\n\"Juli!AB13\"\n\"Aug!AG13\"\n\"Sep!AH13\"\n\"Okt!AH13\"\n\"Nov!AH13\"\n\"Nov!AH13\"\n\"SUM(A12:L12)\"\n\"Jan!AE13\"\n\"Jan!AX13\"\n\"Feb!CB13\"\n\"Maart!CF13\"\n\"April!AQ13\"\n\"Mei!BE13\"\n\"Juni!BC13\"\n\"Juli!BB13\"\n\"Aug!BK13\"\n\"Sep!BF13\"\n\"Okt!BE13\"\n\"Nov!BF13\"\n\"Dec!CC13\"\n\"SUM(A11:G11)\"\n\"SUM(M11:Q11)\"\n\"123+49\"\n\"410+450\"\n\"SUM(H11:H39)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F39)\"\n\"SUM(A11:E11)\"\n\"SUM(P11:P39)\"\n\"SUM(A11:F11)\"\n\"SUM(L11:P11)\"\n\"SUM(G11:G40)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(P11:P40)\"\n\"SUM(A11:E11)\"\n\"SUM(P11:P40)+L41\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F41)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(K11:R11)\"\n\"SUM(F11:F40)\"\n\"Jan!H11\"\n\"Feb!F11\"\n\"Maart!F11\"\n\"April!G11\"\n\"Mei!F11\"\n\"Juni!F11\"\n\"Juli!F11\"\n\"Aug!F11\"\n\"Sep!F11\"\n\"Okt!F11\"\n\"Nov!F11\"\n\"Dec!F11\"\n\"SUM(A12:L12)\"\n\"Jan!R11\"\n\"Feb!P11\"\n\"Maart!P11\"\n\"April!Q11\"\n\"Mei!P11\"\n\"Juni!P11\"\n\"Juli!P11\"\n\"Aug!Q11\"\n\"Sep!P11\"\n\"Okt!P11\"\n\"Nov!P11\"\n\"Dec!S11\"\n\"Jan!R12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!Q12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!Q12\"\n\"Sep!P12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!S12\"\n\"Mei!F32\"\n\"Juni!F32\"\n\"Juli!F32\"\n\"Aug!F32\"\n\"Sep!F32\"\n\"Okt!F32\"\n\"Nov!F32\"\n\"Dec!F32\"\n\"Mei!P32\"\n\"Juni!P32\"\n\"Juli!P32\"\n\"Aug!Q32\"\n\"Sep!P32\"\n\"Okt!P32\"\n\"Nov!P32\"\n\"Dec!S32\"\n\"April!G33\"\n\"April!Q33\"\n\"April!Q40\"\n\"SUM(A11:G11)\"\n\"SUM(M11:Q11)\"\n\"SUM(H11:H39)\"\n\"SUM(A11:E11)\"\n\"54+50\"\n\"SUM(F11:F39)\"\n\"SUM(A11:E11)\"\n\"SUM(A11:F11)\"\n\"SUM(G11:G40)\"\n\"SUM(L41:P41)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(P11:P40)\"\n\"SUM(A11:E11)\"\n\"SUM(P11:P40)+L41\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F41)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(F11:F40)\"\n\"SUM(A11:E11)\"\n\"SUM(K11:R11)\"\n\"SUM(F11:F40)\"\n\"Jan!H11\"\n\"Feb!F11\"\n\"Maart!F11\"\n\"April!G11\"\n\"Mei!F11\"\n\"Juni!F11\"\n\"Juli!F11\"\n\"Aug!F11\"\n\"Sep!F11\"\n\"Okt!F11\"\n\"Nov!F11\"\n\"Dec!F11\"\n\"SUM(A12:L12)\"\n\"Jan!R11\"\n\"Feb!P11\"\n\"Maart!P11\"\n\"April!Q11\"\n\"Mei!P11\"\n\"Juni!P11\"\n\"Juli!P11\"\n\"Aug!Q11\"\n\"Sep!P11\"\n\"Okt!P11\"\n\"Nov!P11\"\n\"Dec!S11\"\n\"Jan!R12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!Q12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!Q12\"\n\"Sep!P12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!S12\"\n\"Mei!F32\"\n\"Juni!F32\"\n\"Juli!F32\"\n\"Aug!F32\"\n\"Sep!F32\"\n\"Okt!F32\"\n\"Nov!F32\"\n\"Dec!F32\"\n\"Mei!P32\"\n\"Juni!P32\"\n\"Juli!P32\"\n\"Aug!Q32\"\n\"Sep!P32\"\n\"Okt!P32\"\n\"Nov!P32\"\n\"Dec!S32\"\n\"April!G33\"\n\"April!Q33\"\n\"April!Q40\"\n\"SUM(B12:F12)\"\n\"SUM(G12:G34)\"\n\"SUM(B7:F7)\"\n\"SUM(G7:G27)\"\n\"SUM(B6:F6)\"\n\"195+90\"\n\"37*15+90\"\n\"16*15\"\n\"SUM(G6:G29)\"\n\"SUM(B7:G7)\"\n\"SUM(B8:F8)\"\n\"SUM(H7:H26)\"\n\"SUM(B6:F6)\"\n\"SUM(G6:G28)\"\n\"SUM(B6:F6)\"\n\"SUM(G6:G27)\"\n\"SUM(B6:F6)\"\n\"SUM(G6:G27)\"\n\"SUM(A12:E12)\"\n\"120*15\"\n\"SUM(F12:F38)\"\n\"SUM(A12:E12)\"\n\"80+45\"\n\"200+125\"\n\"16+27\"\n\"SUM(F12:F38)\"\n\"SUM(A12:E12)\"\n\"428+110\"\n\"120+500\"\n\"112+100\"\n\"160+95\"\n\"56+35\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F38)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F38)\"\n\"SUM(A12:L12)\"\n\"SUM(R12:V12)\"\n\"115+330\"\n\"150+100\"\n\"150+95\"\n\"40+18\"\n\"SUM(M12:M38)\"\n\"SUM(A12:I12)\"\n\"SUM(Q12:U12)\"\n\"SUM(A13:J13)\"\n\"340+350\"\n\"SUM(L12:L38)\"\n\"SUM(V12:V38)+R39\"\n\"SUM(A11:I11)\"\n\"SUM(O11:S11)\"\n\"35+56\"\n\"SUM(J11:J37)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F38)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F38)\"\n\"SUM(A12:E12)\"\n\"120+200\"\n\"120+215\"\n\"190+270\"\n\"40+45\"\n\"30+37\"\n\"SUM(F12:F38)\"\n\"SUM(A12:O12)\"\n\"SUM(U12:Y12)\"\n\"175+330\"\n\"45+40\"\n\"350+675\"\n\"80+240+200+90\"\n\"200+420\"\n\"SUM(P12:P38)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!M12\"\n\"Juli!L12\"\n\"Aug!J11\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!P12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!P12\"\n\"Mei!P12\"\n\"Juni!W12\"\n\"Juli!V12\"\n\"Aug!U11\"\n\"Sep!P12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!Z12\"\n\"SUM(A12:A13)\"\n\"Aug!U18\"\n\"Aug!J17\"\n\"Aug!U17\"\n\"215+200\"\n\"1309+76\"\n\"1066+925\"\n\"SUM(B12:F12)\"\n\"SUM(G12:G36)\"\n\"SUM(B12:F12)\"\n\"SUM(G12:G37)+C38\"\n\"SUM(B5:F5)\"\n\"175+330\"\n\"45+40\"\n\"350+675\"\n\"80+240+200+90\"\n\"200+420\"\n\"SUM(G5:G31)\"\n\"SUM(B6:F6)\"\n\"80+45\"\n\"200+125\"\n\"16+27\"\n\"SUM(G6:G29)\"\n\"SUM(B6:F6)\"\n\"120*15\"\n\"SUM(G6:G29)\"\n\"SUM(B12:F12)\"\n\"340+350\"\n\"SUM(G12:G37)+C38\"\n\"SUM(B12:F12)\"\n\"115+330\"\n\"150+100\"\n\"150+95\"\n\"40+18\"\n\"SUM(G12:G37)\"\n\"SUM(B12:F12)\"\n\"SUM(G12:G37)\"\n\"428+110\"\n\"120+500\"\n\"SUM(B6:F6)\"\n\"112+100\"\n\"160+95\"\n\"56+35\"\n\"SUM(G6:G30)\"\n\"SUM(B3:F3)\"\n\"120+200\"\n\"120+215\"\n\"190+270\"\n\"40+45\"\n\"30+37\"\n\"SUM(G3:G29)\"\n\"SUM(B3:F3)\"\n\"SUM(G3:G29)\"\n\"SUM(B3:F3)\"\n\"SUM(G3:G29)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"0.2+0.3+0.25+1+0.5+0.75/6\"\n\"460+128\"\n\"440+105\"\n\"690+150\"\n\"240+110\"\n\"135-15\"\n\"A194+1\"\n\"A207+1\"\n\"SUM(B4:B44)\"\n\"SUM(B45-C45)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(B12:Z12)\"\n\"SUM(AC12:AH12)\"\n\"SUM(AD12:BC12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(AC12:AH12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(AD12:BD12)\"\n\"SUM(B12:B49)\"\n\"SUM(BD12:BE49)\"\n\"SUM(Z12:AA49)\"\n\"SUM(B12:Z12)\"\n\"SUM(AD12:BD12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"260+7632\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"SUM(B12:B49)\"\n\"SUM(B12:Z12)\"\n\"650\"\n\"SUM(B12:B49)\"\n\"Jan!AA12\"\n\"Maart!AA12\"\n\"April!AA12\"\n\"Mei!AA12\"\n\"Juni!AA12\"\n\"Juli!AA12\"\n\"Aug!AA12\"\n\"Sep!AA12\"\n\"Okt!AA12\"\n\"Nov!AA12\"\n\"Dec!AA12\"\n\"Jan!AA12+Feb!AA12+Maart!AA12+April!AA12+Mei!AA12+Juni!AA12+Juli!AA12+Aug!AA12+Sep!AA12+Okt!AA12+Nov!AA12+Dec!AA12\"\n\"Jan!BD12\"\n\"Feb!BC12\"\n\"Maart!BE12\"\n\"April!BE12\"\n\"Juni!BC12\"\n\"Juli!BC12\"\n\"Aug!BC12\"\n\"Sep!BC12\"\n\"Okt!BC12\"\n\"Nov!BC12\"\n\"Dec!BC12\"\n\"SUM(P12:Z12)\"\n\"Feb!AA13\"\n\"SUM(A13:L13)\"\n\"Feb!BC43\"\n\"Dec!BC45\"\n\"Sep!BC46\"\n\"Maart!AA47\"\n\"Aug!AA47\"\n\"Okt!AA47\"\n\"Nov!AA47\"\n\"Dec!AA47\"\n\"April!BE47\"\n\"Juni!BC47\"\n\"Juli!BC47\"\n\"Aug!BC47\"\n\"Okt!BC47\"\n\"Nov!BC47\"\n\"SUM(A12:A49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J33:Q33)\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Jan!H33+Febr.!H33+Mrt.!H33+Apr.!H33+Mei!H33+Jun!H33+Jul!H33+Aug.!H33+Sep.!H33+Okt.!H33+Nov.!H33+Dec.!H34\"\n\"Dec.!R34\"\n\"Jan!R33+Febr.!R33+Mrt.!R33+Apr.!R33+Mei!R33+Jun!R33+Jul!R33+Aug.!R33+Sep.!R33+Okt.!R33+Nov.!R33+Dec.!R34\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!N38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!N39\"\n\"April!N39\"\n\"Mei!N39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!N39\"\n\"Sep!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Dec!N39\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"H11-R11\"\n\"R20-H20\"\n\"+SUM(J37:Q37)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N45\"\n\"Feb!N45\"\n\"Maart!N45\"\n\"April!N45\"\n\"Mei!N45\"\n\"Juni!N45\"\n\"Juli!N45\"\n\"Aug!N45\"\n\"Sep!N45\"\n\"Okt!N45\"\n\"Nov!N45\"\n\"Dec!N45\"\n\"SUM(A11:E11)\"\n\"SUM(A11:E11)\"\n\"SUM(A11:E11)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"90+90+175\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"147+104\"\n\"14+36\"\n\"78+10\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"147+105\"\n\"168+98\"\n\"75+100\"\n\"98+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"180+93+72\"\n\"270+120\"\n\"10+10\"\n\"SUM(A12:E12)\"\n\"160+42+78\"\n\"150+78\"\n\"SUM(A12:E12)\"\n\"220+50\"\n\"45+120+72\"\n\"255+150\"\n\"32+8+34\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"39+45+48+80\"\n\"30+62+53+85+34\"\n\"20+50+50+28+34\"\n\"150+48\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!F49\"\n\"Feb!F49\"\n\"Maart!F49\"\n\"April!F49\"\n\"Mei!F49\"\n\"Juni!F49\"\n\"Juli!F49\"\n\"Aug!F49\"\n\"Sep!F49\"\n\"Okt!F49\"\n\"Nov!F49\"\n\"Dec!F49\"\n\"Jan!N49\"\n\"Feb!N49\"\n\"Maart!N49\"\n\"April!N49\"\n\"Mei!N49\"\n\"Juni!N49\"\n\"Juli!N49\"\n\"Aug!N49\"\n\"Sep!N49\"\n\"Okt!N49\"\n\"Nov!N49\"\n\"Dec!N49\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"1+1\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"1+1\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"3+3\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!N38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"+SUM(I32:M32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B57)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"AE2\"\n\"SUM(B12:AA12)\"\n\"SUM(AF12:BF12)\"\n\"SUM(B12:B54)\"\n\"Jan!AB12\"\n\"Feb!AB12\"\n\"Maart!AB12\"\n\"April!AB12\"\n\"Mei!AB12\"\n\"Juni!AB12\"\n\"Juli!AB12\"\n\"Aug!AB12\"\n\"Sep!AB12\"\n\"Okt!AB12\"\n\"Nov!AB12\"\n\"Dec!AB12\"\n\"SUM(A12:L12)\"\n\"SUM(Jan:Dec!AD12)\"\n\"Jan!BG12\"\n\"Feb!BG12\"\n\"Maart!BG12\"\n\"April!BF12\"\n\"Mei!BF12\"\n\"Juni!BG12\"\n\"Aug!BG12\"\n\"Sep!BG12\"\n\"Okt!BG12\"\n\"Nov!BG12\"\n\"Juli!BG17\"\n\"Jan!AB46\"\n\"Feb!AB46\"\n\"Maart!AB46\"\n\"April!AB46\"\n\"Mei!AB46\"\n\"Juni!AB46\"\n\"Juli!AB46\"\n\"Aug!AB46\"\n\"Sep!AB46\"\n\"Okt!AB46\"\n\"Nov!AB46\"\n\"Dec!AB46\"\n\"SUM(Jan:Dec!AD47)\"\n\"Jan!AB53\"\n\"Feb!AB56\"\n\"Maart!AB53\"\n\"April!AB53\"\n\"Mei!AB53\"\n\"Juni!AB53\"\n\"Juli!AB53\"\n\"Aug!AB53\"\n\"Sep!AB53\"\n\"Okt!AB53\"\n\"Nov!AB53\"\n\"Dec!AB53\"\n\"SUM(A12:A56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(O13:O59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"Jan!G13\"\n\"Feb!G13\"\n\"Maart!G13\"\n\"April!G13\"\n\"Mei!G13\"\n\"Juni!G13\"\n\"Juli!G13\"\n\"Aug!G13\"\n\"Sep!G13\"\n\"Okt!G13\"\n\"Nov!G13\"\n\"Dec!G13\"\n\"SUM(A12:L12)\"\n\"Jan!P13\"\n\"Jan!O23\"\n\"Jan!G52\"\n\"Feb!G52\"\n\"Maart!G52\"\n\"April!G52\"\n\"Mei!G52\"\n\"Juni!G52\"\n\"Juli!G52\"\n\"Aug!G52\"\n\"Sep!G52\"\n\"Okt!G52\"\n\"Nov!G52\"\n\"Dec!G52\"\n\"SUM(A12:A58)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"SUM(X13:X58)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"#REF!\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"SUM(A13:W13)\"\n\"Jan!X13\"\n\"Feb!X13\"\n\"Maart!X13\"\n\"April!X13\"\n\"Mei!X13\"\n\"Juni!X13\"\n\"Juli!X13\"\n\"Aug!X13\"\n\"Sep!X13\"\n\"Okt!X13\"\n\"Nov!X13\"\n\"Dec!X13\"\n\"SUM(A12:L12)\"\n\"Jan!X47\"\n\"Feb!X47\"\n\"Maart!X47\"\n\"April!X47\"\n\"Mei!X47\"\n\"Juni!X47\"\n\"Juli!X47\"\n\"Aug!X47\"\n\"Sep!X47\"\n\"Okt!X47\"\n\"Nov!X47\"\n\"Dec!X47\"\n\"TODAY()\"\n\"SUM(B8:B54)\"\n\"TODAY()\"\n\"SUM(B8:B54)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:I11)\"\n\"SUM(M11:O11)\"\n\"SUM(A11:E11)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:N12)\"\n\"92*12\"\n\"23*6\"\n\"14*14\"\n\"12*16\"\n\"6*144\"\n\"95*12\"\n\"17*6\"\n\"SUM(A12:F12)\"\n\"155+122+160+97\"\n\"24+100+100\"\n\"SUM(A12:E12)\"\n\"60+90\"\n\"210+110\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"135+170\"\n\"40+70\"\n\"75+80\"\n\"710+130\"\n\"220+210\"\n\"SUM(A12:E12)\"\n\"220+20\"\n\"181+130\"\n\"105+180\"\n\"420+32\"\n\"SUM(A12:F12)\"\n\"290+165\"\n\"88+90\"\n\"2+25+25+82\"\n\"SUM(A12:E12)\"\n\"SUM(I12:R12)\"\n\"170+100+30\"\n\"360+20\"\n\"210+260\"\n\"112+120\"\n\"10+40+20+75+25\"\n\"100+104+35+119\"\n\"SUM(A12:E12)\"\n\"SUM(A12:F12)\"\n\"SUM(A12:E12)\"\n\"72+80+84\"\n\"420+150\"\n\"26+45\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"90+250\"\n\"520+570\"\n\"SUM(A11:E11)\"\n\"SUM(I11:N11)\"\n\"Jan!E12\"\n\"Feb!G12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!G12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F11\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!P12\"\n\"Maart!N12\"\n\"April!Q12\"\n\"Mei!N12\"\n\"Juni!P12\"\n\"Juli!S12\"\n\"Aug!N12\"\n\"Sep!P12\"\n\"Okt!N12\"\n\"Nov!Q12\"\n\"Dec!O11\"\n\"Juni!#REF!\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"60+100\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:S12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:U12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"356+20\"\n\"105+100\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"155+50+95\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"339+140\"\n\"305+180\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(I14:P14)\"\n\"270+150\"\n\"615+155\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!N12\"\n\"Maart!T12\"\n\"April!V12\"\n\"Mei!R12\"\n\"Juni!Q12\"\n\"Juli!Q12\"\n\"Aug!Q12\"\n\"Sep!O12\"\n\"Okt!P12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"Jan!P45\"\n\"Feb!N45\"\n\"Maart!T45\"\n\"April!V45\"\n\"Mei!R45\"\n\"Juni!Q45\"\n\"Juli!Q45\"\n\"Aug!Q45\"\n\"Sep!O45\"\n\"Okt!P45\"\n\"Nov!Q45\"\n\"Dec!R45\"\n\"SUM(M12:M49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:F10)\"\n\"SUM(I10:P10)\"\n\"SUM(A21:F21)\"\n\"+SUM(I36:P36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"3+35\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!G10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!G10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!Q10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!Q10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"SUM(H12:H56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"Jan!H12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:E11)\"\n\"SUM(J21:M21)\"\n\"SUM(A11:E11)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"15+40\"\n\"60+40\"\n\"80*0.34\"\n\"50+28\"\n\"SUM(A12:E12)\"\n\"40+19\"\n\"47+13\"\n\"46+33\"\n\"SUM(A12:E12)\"\n\"50+22+50\"\n\"55+40\"\n\"20+23\"\n\"48+27\"\n\"48+20\"\n\"8+9+13\"\n\"12+19\"\n\"28+45\"\n\"47+54\"\n\"SUM(A12:E12)\"\n\"7+40\"\n\"42+30\"\n\"48+20+18+31\"\n\"48+28\"\n\"64+30\"\n\"24+35\"\n\"4+11\"\n\"6+20\"\n\"9+10\"\n\"SUM(A12:E12)\"\n\"24+55+75\"\n\"45+12+24\"\n\"52+36\"\n\"SUM(A12:E12)\"\n\"23+14\"\n\"SUM(I12:N12)\"\n\"46+14\"\n\"26+46+20\"\n\"24+100\"\n\"40+22\"\n\"13+5\"\n\"7+27\"\n\"26+20\"\n\"SUM(A12:E12)\"\n\"18+32+40+12+13\"\n\"19+48+55+16+53+30+23\"\n\"12+30+13+10+17+42\"\n\"43+23\"\n\"48+20\"\n\"40+39\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"33+34\"\n\"48+24\"\n\"SUM(A12:E12)\"\n\"24+12\"\n\"19+15\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"60+20\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N13\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!O12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Feb!N28\"\n\"Jan!F44\"\n\"Feb!F44\"\n\"Maart!F44\"\n\"April!F44\"\n\"Mei!F44\"\n\"Juni!F44\"\n\"Juli!F44\"\n\"Aug!F44\"\n\"Sep!F44\"\n\"Okt!F44\"\n\"Nov!F44\"\n\"Dec!F44\"\n\"Jan!N47\"\n\"Feb!N49\"\n\"Maart!N44\"\n\"April!N44\"\n\"Mei!N44\"\n\"Juni!O44\"\n\"Juli!N44\"\n\"Aug!N44\"\n\"Sep!O44\"\n\"Okt!N44\"\n\"Nov!N44\"\n\"Dec!N44\"\n\"Jan!N49\"\n\"Jan!F47\"\n\"Feb!F47\"\n\"Maart!F47\"\n\"April!F47\"\n\"Mei!F47\"\n\"Juni!F47\"\n\"Juli!F47\"\n\"Aug!F47\"\n\"Sep!F47\"\n\"Okt!F47\"\n\"Nov!F47\"\n\"Dec!F47\"\n\"Feb!N52\"\n\"Maart!N47\"\n\"April!N47\"\n\"Mei!N47\"\n\"Juni!O47\"\n\"Juli!N47\"\n\"Aug!N47\"\n\"Sep!O47\"\n\"Okt!N47\"\n\"Nov!N47\"\n\"Dec!N47\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"35+50\"\n\"96+6\"\n\"24+126\"\n\"68+23+10\"\n\"15+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"18+16\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"36+14\"\n\"48+46\"\n\"23+46\"\n\"46+24\"\n\"23+15\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"86+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"48+16\"\n\"70+9+5\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"73+17\"\n\"50+39\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"40+21\"\n\"46+17\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!R12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(M12:M49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"SUM(H12:H57)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:P12)\"\n\"SUM(I12:I57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!H12\"\n\"Feb!I12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!Q12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:R10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:R38)\"\n\"+SUM(J40:R40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!S10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!S10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:G10)\"\n\"SUM(K10:O10)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A11:G11)\"\n\"SUM(J12:Q12)\"\n\"SUM(A12:C12)\"\n\"SUM(G12:N12)\"\n\"181+130+183+135\"\n\"190+500\"\n\"87+375\"\n\"212*0.34\"\n\"230+57\"\n\"250+75\"\n\"SUM(A12:E12)\"\n\"SUM(G12:N12)\"\n\"140\"\n\"120+150\"\n\"115+55+50\"\n\"13*7\"\n\"SUM(A12:E12)\"\n\"SUM(G12:N12)\"\n\"SUM(I12:Q12)\"\n\"160+60\"\n\"60+230+160\"\n\"150+680\"\n\"SUM(I14:P14)\"\n\"100+96\"\n\"15+225\"\n\"74+69\"\n\"SUM(A12:E12)\"\n\"SUM(G12:Q12)\"\n\"SUM(A12:F12)\"\n\"SUM(I12:Q12)\"\n\"500+290\"\n\"SUM(A13:G13)\"\n\"60+20+25\"\n\"130+20\"\n\"85+40\"\n\"88+68\"\n\"SUM(I23:R23)\"\n\"SUM(A12:G12)\"\n\"290+150\"\n\"SUM(J12:V12)\"\n\"70+15+650+310\"\n\"SUM(A13:H13)\"\n\"145+16\"\n\"220+200+330\"\n\"134+33+159\"\n\"30+77+270\"\n\"70+405\"\n\"70+75\"\n\"14+240\"\n\"SUM(A12:G12)\"\n\"SUM(I12:Q12)\"\n\"100+600\"\n\"54+54+52+380+338+67\"\n\"630+200\"\n\"SUM(A12:E12)\"\n\"SUM(G12:P12)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:T12)\"\n\"78+375+170+217\"\n\"SUM(A12:I12)\"\n\"SUM(K12:U12)\"\n\"190+10+60\"\n\"70+130+135\"\n\"160+720\"\n\"195+515\"\n\"SUM(A12:E12)\"\n\"SUM(G12:S12)\"\n\"72+70+54+70\"\n\"244+100+260\"\n\"140+90\"\n\"73+137\"\n\"SUM(A12:G12)\"\n\"SUM(I12:V12)\"\n\"40+152+183\"\n\"36+217\"\n\"345+163+180+122\"\n\"Jan!D12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!H12\"\n\"Juni!I12\"\n\"Juli!H12\"\n\"Aug!F12\"\n\"Sep!I12\"\n\"Okt!J12\"\n\"Nov!F12\"\n\"Dec!H12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!Q12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!S12\"\n\"Juni!W12\"\n\"Juli!R12\"\n\"Aug!Q12\"\n\"Sep!U12\"\n\"Okt!V12\"\n\"Nov!T12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"SUM(A20:H20)\"\n\"SUM(A23:H23)\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:U10)\"\n\"5+9+9\"\n\"SUM(A20:H20)\"\n\"SUM(A23:H23)\"\n\"+SUM(K35:U35)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:W10)\"\n\"SUM(A20:I20)\"\n\"SUM(A23:I23)\"\n\"+SUM(L35:W35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!I10\"\n\"Nov.!I10\"\n\"Dec.!J10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!I10+Nov.!I10+Dec.!J10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!T10\"\n\"Nov.!V10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!T10+Nov.!V10+Dec.!X10\"\n\"AA10-M10\"\n\"SUM(A10:H10)\"\n\"8+2\"\n\"+SUM(K35:R35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"3*23\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"13+8\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:H10)\"\n\"+SUM(K35:R35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:T10)\"\n\"21+63\"\n\"21+58\"\n\"+SUM(K35:T35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"5+25\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:I10)\"\n\"31+24\"\n\"+SUM(L35:T35)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:U10)\"\n\"SUM(K12:U12)\"\n\"+SUM(L35:U35)\"\n\"SUM(A10:H10)\"\n\"SUM(J12:R12)\"\n\"+SUM(K35:R35)\"\n\"SUM(A10:H10)\"\n\"SUM(J12:R12)\"\n\"+SUM(K35:R35)\"\n\"SUM(A10:H10)\"\n\"SUM(J12:R12)\"\n\"+SUM(K35:R35)\"\n\"Jan!I10\"\n\"Febr.!I10\"\n\"Mrt.!I10\"\n\"Apr.!I10\"\n\"Mei!I10\"\n\"Jun!I10\"\n\"Jul!I10\"\n\"Aug.!J10\"\n\"Sep.!J10\"\n\"Okt.!I10\"\n\"Nov.!I10\"\n\"Dec.!I10\"\n\"Jan!I10+Febr.!I10+Mrt.!I10+Apr.!I10+Mei!I10+Jun!I10+Jul!I10+Aug.!J10+Sep.!J10+Okt.!I10+Nov.!I10+Dec.!I10\"\n\"Jan!S10\"\n\"Febr.!T10\"\n\"Mrt.!T10\"\n\"Apr.!T10\"\n\"Mei!S10\"\n\"Jun!U10\"\n\"Jul!T10\"\n\"Aug.!U10\"\n\"Sep.!V10\"\n\"Okt.!S10\"\n\"Nov.!S10\"\n\"Dec.!S10\"\n\"Jan!S10+Febr.!T10+Mrt.!T10+Apr.!T10+Mei!S10+Jun!U10+Jul!T10+Aug.!U10+Sep.!V10+Okt.!S10+Nov.!S10+Dec.!S10\"\n\"Jan!I25+Febr.!I25+Mrt.!I26+Apr.!I25+Mei!I25+Jun!I25+Jul!I25+Aug.!J25+Sep.!J25+Okt.!I25+Nov.!I25+Dec.!I25\"\n\"Jan!S25+Febr.!T25+Mrt.!T26+Apr.!T25+Mei!S25+Jun!U25+Jul!T25+Aug.!U25+Sep.!V25+Okt.!S25+Nov.!S25+Dec.!S25\"\n\"Okt.!I30\"\n\"Jan!I30\"\n\"Febr.!I30\"\n\"Mrt.!I30\"\n\"Apr.!I30\"\n\"Mei!I30\"\n\"Jun!I30\"\n\"Jul!I30\"\n\"Aug.!J30\"\n\"Okt.!I28\"\n\"Nov.!I30\"\n\"Dec.!I30\"\n\"Jan!I30+Febr.!I30+Mrt.!I30+Apr.!I30+Mei!I30+Jun!I30+Jul!I30+Aug.!J30+Sep.!J30+Okt.!I30+Nov.!I30+Dec.!I30\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"32+160\"\n\"68+90+70+160\"\n\"55+135+32\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"168+310\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:U12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:T12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"170\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:I12)\"\n\"SUM(M12:V12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!J12\"\n\"Juni!I12\"\n\"Juli!I12\"\n\"Aug!F12\"\n\"Sep!J12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!Q12\"\n\"Maart!V12\"\n\"April!P12\"\n\"Mei!W12\"\n\"Juni!U12\"\n\"Juli!T12\"\n\"Aug!R12\"\n\"Sep!W12\"\n\"Okt!R12\"\n\"Nov!S12\"\n\"Dec!R12\"\n\"Jan!P38\"\n\"Maart!V38\"\n\"April!P38\"\n\"Mei!W38\"\n\"Juni!U38\"\n\"Juli!T38\"\n\"Aug!R38\"\n\"Sep!W38\"\n\"Okt!R38\"\n\"Nov!S38\"\n\"Dec!R38\"\n\"Jan!P39\"\n\"Maart!V39\"\n\"April!P39\"\n\"Mei!W39\"\n\"Juni!U39\"\n\"Juli!T39\"\n\"Aug!R39\"\n\"Sep!W39\"\n\"Okt!R39\"\n\"Nov!S39\"\n\"Dec!R39\"\n\"SUM(M12:M49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:J10)\"\n\"SUM(M10:U10)\"\n\"+SUM(M36:U36)\"\n\"SUM(A10:G10)\"\n\"+SUM(J36:P36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:W10)\"\n\"+SUM(L36:W36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:U10)\"\n\"+SUM(L36:U36)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"+SUM(K36:S36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(A33:I33)\"\n\"+SUM(L36:T36)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"SUM(A33:H33)\"\n\"+SUM(K36:S36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:R10)\"\n\"+SUM(J36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:R10)\"\n\"20+21\"\n\"+SUM(J36:R36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!K10\"\n\"Apr.!H10\"\n\"Mei!J10\"\n\"Jun!J10\"\n\"Jul!I10\"\n\"Aug.!H10\"\n\"Sep.!J10\"\n\"Okt.!I10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!K10+Apr.!H10+Mei!J10+Jun!J10+Jul!I10+Aug.!H10+Sep.!J10+Okt.!I10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!V10\"\n\"Apr.!Q10\"\n\"Jun!V10\"\n\"Jul!T10\"\n\"Aug.!R10\"\n\"Sep.!U10\"\n\"Okt.!T10\"\n\"Nov.!S10\"\n\"Dec.!S10\"\n\"Jan!R10+Febr.!R10+Mrt.!V10+Apr.!Q10+Mei!X10+Jun!V10+Jul!T10+Aug.!R10+Sep.!U10+Okt.!T10+Nov.!S10+Dec.!S10\"\n\"Mei!E25\"\n\"SUM(A25:L25)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(G12:G57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!G12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:L12)\"\n\"30*6\"\n\"SUM(A12:E12)\"\n\"85+55\"\n\"134+340+182\"\n\"177+146\"\n\"100+78\"\n\"SUM(A12:E12)\"\n\"93+100\"\n\"100+85\"\n\"100+55\"\n\"216+84+103\"\n\"240+20\"\n\"90+60\"\n\"70+60\"\n\"175+195\"\n\"14+63+20\"\n\"SUM(A12:E12)\"\n\"120+40\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"47+26\"\n\"240+120\"\n\"60+129\"\n\"SUM(A12:E12)\"\n\"190+200\"\n\"200+240\"\n\"41+38\"\n\"135+160\"\n\"SUM(A12:E12)\"\n\"110+55+135\"\n\"115+100+55\"\n\"200+120\"\n\"98+125\"\n\"SUM(A12:F12)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(A12:E12)\"\n\"Jan!E12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Juni!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!G12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!M12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!Q12\"\n\"Okt!N12\"\n\"Nov!Q12\"\n\"Dec!N12\"\n\"Jan!E49\"\n\"Feb!F49\"\n\"Maart!F49\"\n\"April!F49\"\n\"Juni!F49\"\n\"Juni!F49\"\n\"Juli!F49\"\n\"Aug!G49\"\n\"Sep!G49\"\n\"Okt!F49\"\n\"Nov!F49\"\n\"Jan!N46\"\n\"Jan!E51\"\n\"Feb!F51\"\n\"Maart!F51\"\n\"April!F51\"\n\"Juni!F51\"\n\"Juni!F51\"\n\"Juli!F51\"\n\"Aug!G51\"\n\"Sep!G51\"\n\"Okt!F51\"\n\"Nov!F51\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"11+8\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"172+600\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!Q12\"\n\"Juni!Q12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!Q38\"\n\"Juni!Q38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!N38\"\n\"Okt!P38\"\n\"Nov!P38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!Q39\"\n\"Juni!Q39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!N39\"\n\"Okt!P39\"\n\"Nov!P39\"\n\"Dec!N39\"\n\"SUM(M12:M49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:U10)\"\n\"SUM(A21:I21)\"\n\"+SUM(L36:U36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:R10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!J10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!J10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!V10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!S10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!V10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!S10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"112+93\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:E11)\"\n\"SUM(B32:E32)\"\n\"SUM(A10:E10)\"\n\"+SUM(I32:M32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"48+27\"\n\"SUM(A12:E12)\"\n\"66+14\"\n\"88+64\"\n\"105+48\"\n\"55+13\"\n\"50+70\"\n\"9+9\"\n\"SUM(I41:L41)\"\n\"SUM(A12:E12)\"\n\"60+73\"\n\"96+60\"\n\"70+105+48\"\n\"51+70\"\n\"36+32+8\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"60+50\"\n\"80+80\"\n\"50+38\"\n\"17+22\"\n\"120+58+77\"\n\"106+54\"\n\"390+77\"\n\"330+595\"\n\"SUM(I15:N15)\"\n\"70+90\"\n\"30+10\"\n\"24+36\"\n\"195+30\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"42+47+90\"\n\"50+30+90\"\n\"60+230\"\n\"104+54\"\n\"150+60\"\n\"30+32\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"150+61+140\"\n\"48+92+365\"\n\"125+70\"\n\"310+225\"\n\"32+13\"\n\"110+340\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"96+150+60+100\"\n\"20+70+35+110+100\"\n\"12+100+53+30\"\n\"92+70+117\"\n\"4+40\"\n\"195+45\"\n\"63+52\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"42+150\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"120+102\"\n\"145+140\"\n\"360+120+116\"\n\"24+30\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"190+300\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"170+14\"\n\"64+14\"\n\"Jan.!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan.!P12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!Q12\"\n\"Mei!O12\"\n\"Juni!R12\"\n\"Juli!O12\"\n\"Aug!O12\"\n\"Sep!O12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!O12\"\n\"Jan.!F28\"\n\"Feb!F28\"\n\"Maart!F28\"\n\"April!F28\"\n\"Mei!F28\"\n\"Juni!F28\"\n\"Juli!F28\"\n\"Aug!F28\"\n\"Sep!F28\"\n\"Okt!F28\"\n\"Nov!F28\"\n\"Dec!F28\"\n\"Juni!R29\"\n\"Juli!O29\"\n\"Aug!O29\"\n\"Sep!O29\"\n\"Okt!O29\"\n\"Nov!O29\"\n\"Dec!O29\"\n\"Jan.!F44\"\n\"Feb!F44\"\n\"Maart!F44\"\n\"April!F44\"\n\"Mei!F44\"\n\"Juni!F44\"\n\"Juli!F44\"\n\"Aug!F44\"\n\"Sep!F44\"\n\"Okt!F44\"\n\"Nov!F44\"\n\"Dec!F44\"\n\"Jan.!P44\"\n\"Feb!N44\"\n\"Maart!N44\"\n\"April!Q44\"\n\"Mei!O44\"\n\"Juni!R44\"\n\"Juli!O44\"\n\"Aug!O44\"\n\"Sep!O44\"\n\"Okt!O44\"\n\"Nov!O44\"\n\"Dec!O44\"\n\"Jan.!F45\"\n\"Jan.!P45\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"3+1\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"8+2\"\n\"SUM(A10:G10)\"\n\"2+9\"\n\"SUM(J10:Q10)\"\n\"1+1\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"200+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"145+200\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"97+89\"\n\"36+106\"\n\"339+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"205+250\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"160+45\"\n\"90+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+190\"\n\"SUM(I12:O12)\"\n\"SUM(I13:M13)\"\n\"101+84\"\n\"64+37\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!P12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!P12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!O38\"\n\"April!N38\"\n\"Mei!P38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!P38\"\n\"Sep!P38\"\n\"Okt!O38\"\n\"Nov!O38\"\n\"Dec!P38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!O39\"\n\"April!N39\"\n\"Mei!P39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!P39\"\n\"Sep!P39\"\n\"Okt!O39\"\n\"Nov!O39\"\n\"Dec!P39\"\n\"SUM(M12:M49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:J12)\"\n\"SUM(N12:U12)\"\n\"SUM(K12:K56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"Jan!K12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!V12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"SUM(A21:H21)\"\n\"SUM(J38:S38)\"\n\"+SUM(K40:S40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!I10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!I10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!T10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!T10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"148+30\"\n\"250+150\"\n\"97+150\"\n\"SUM(A12:E12)\"\n\"337+240\"\n\"112+13\"\n\"SUM(A12:E12)\"\n\"70+85\"\n\"600+195\"\n\"360+105\"\n\"SUM(A12:E12)\"\n\"360+240\"\n\"120+210\"\n\"SUM(A12:E12)\"\n\"35+84+44+90\"\n\"SUM(A12:E12)\"\n\"425+50\"\n\"SUM(A12:E12)\"\n\"120+130\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(A12:E12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!Q12\"\n\"Dec!N12\"\n\"Jan!F28\"\n\"Feb!F28\"\n\"Maart!F28\"\n\"April!F28\"\n\"Mei!F28\"\n\"Juni!F28\"\n\"Juli!F28\"\n\"Aug!F28\"\n\"Sep!F28\"\n\"Okt!F28\"\n\"Nov!G28\"\n\"Dec!F28\"\n\"Jan!N28\"\n\"Feb!N28\"\n\"Maart!N28\"\n\"April!N28\"\n\"Mei!N28\"\n\"Juni!N28\"\n\"Juli!N28\"\n\"Aug!N28\"\n\"Sep!N28\"\n\"Okt!N28\"\n\"Nov!Q28\"\n\"Dec!N28\"\n\"Maart!N44\"\n\"April!N44\"\n\"Mei!N44\"\n\"Juni!N44\"\n\"Juli!N44\"\n\"Aug!N44\"\n\"Sep!N44\"\n\"Okt!N44\"\n\"Nov!Q44\"\n\"April!N49\"\n\"Mei!N50\"\n\"Juni!N49\"\n\"Juli!N49\"\n\"Aug!N49\"\n\"Sep!N49\"\n\"Okt!N49\"\n\"Nov!Q49\"\n\"Dec!N49\"\n\"Aug!F51\"\n\"Mei!N52\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"+SUM(J35:P35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!Q10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!Q10+Nov.!R10+Dec.!R10\"\n\"[1]Jan!F12\"\n\"[1]Feb!F12\"\n\"[1]Maart!F12\"\n\"[1]April!F12\"\n\"[1]Mei!F12\"\n\"[1]Juni!F12\"\n\"[1]Juli!F12\"\n\"[1]Aug!F12\"\n\"[1]Sep!F12\"\n\"[1]Okt!F12\"\n\"[1]Nov!F12\"\n\"[1]Dec!F12\"\n\"SUM(A12:L12)\"\n\"[1]Jan!F28\"\n\"[1]Feb!F28\"\n\"[1]Maart!F28\"\n\"[1]April!F28\"\n\"[1]Mei!F28\"\n\"[1]Juni!F28\"\n\"[1]Juli!F28\"\n\"[1]Aug!F28\"\n\"[1]Sep!F28\"\n\"[1]Okt!F28\"\n\"[1]Nov!F28\"\n\"[1]Dec!F28\"\n\"[1]Aug!F51\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"4800+5850\"\n\"SUM(H12:H49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:T12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:R12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!H12\"\n\"Sep!G12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!T12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!R12\"\n\"Okt!P12\"\n\"Nov!U12\"\n\"Dec!S12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:H10)\"\n\"SUM(L10:T10)\"\n\"SUM(A21:H21)\"\n\"+SUM(L36:T36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(J40:R40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"19+13\"\n\"+SUM(J36:Q36)\"\n\"SUM(J38:R38)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!I10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!I10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!U10\"\n\"Nov.!S10\"\n\"Dec.!S10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!U10+Nov.!S10+Dec.!S10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"126+126+126\"\n\"SUM(A12:E12)\"\n\"700+700\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"330+540\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!F47\"\n\"Feb!F47\"\n\"Maart!F47\"\n\"April!F47\"\n\"Mei!F47\"\n\"Juni!F47\"\n\"Juli!F47\"\n\"Aug!F47\"\n\"Sep!F47\"\n\"Okt!F47\"\n\"Nov!F47\"\n\"Dec!F47\"\n\"Jan!N47\"\n\"Feb!N47\"\n\"Maart!N47\"\n\"April!N47\"\n\"Mei!N47\"\n\"Juni!N47\"\n\"Juli!N47\"\n\"Aug!N47\"\n\"Sep!N47\"\n\"Okt!N47\"\n\"Nov!N47\"\n\"Dec!N47\"\n\"Mei!F50\"\n\"Mei!N50\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"850+760\"\n\"150+194+720\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"865+400+1060\"\n\"SUM(A12:E12)\"\n\"350+135+200\"\n\"500+250\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"200+295\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"190+270\"\n\"75+245\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A23:G23)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"570+760\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!Q12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!P46\"\n\"April!N46\"\n\"Mei!Q46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!O46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!G12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!R12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"18+210\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"1605+904\"\n\"920+130\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"750+1040\"\n\"825+725\"\n\"770+440\"\n\"SUM(A12:E12)\"\n\"775+1025\"\n\"150+56\"\n\"SUM(A12:E12)\"\n\"SUM(A12:F12)\"\n\"200+110\"\n\"250+300\"\n\"125+225\"\n\"260+115\"\n\"SUM(A12:E12)\"\n\"SUM(I12:L12)\"\n\"290+335\"\n\"260+90+260\"\n\"760+265\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"56+34\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(A12:E12)\"\n\"215+225\"\n\"840+580\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!P12\"\n\"Dec!N12\"\n\"Totaal!F13\"\n\"Totaal!F13\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"2+5\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"26+3\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"1740+1325\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:I12)\"\n\"SUM(J12:J49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"Jan!F12\"\n\"Feb!H12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!H12\"\n\"Juli!H12\"\n\"Aug!H12\"\n\"Sep!H12\"\n\"Okt!J12\"\n\"Nov!G12\"\n\"Dec!H12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!R12\"\n\"Maart!R12\"\n\"April!R12\"\n\"Mei!R12\"\n\"Juni!R12\"\n\"Juli!R12\"\n\"Aug!R12\"\n\"Sep!S12\"\n\"Okt!V12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"Jan!N38\"\n\"Feb!R38\"\n\"Maart!R38\"\n\"April!R38\"\n\"Mei!R38\"\n\"Juni!R38\"\n\"Juli!R38\"\n\"Aug!R38\"\n\"Sep!S38\"\n\"Okt!V38\"\n\"Nov!Q38\"\n\"Dec!R38\"\n\"Jan!N39\"\n\"Feb!R39\"\n\"Maart!R39\"\n\"April!R39\"\n\"Mei!R39\"\n\"Juni!R39\"\n\"Juli!R39\"\n\"Aug!R39\"\n\"Sep!S39\"\n\"Okt!V39\"\n\"Nov!Q39\"\n\"Dec!R39\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:U10)\"\n\"SUM(A21:I21)\"\n\"+SUM(L36:U36)\"\n\"SUM(A10:F10)\"\n\"SUM(A21:F21)\"\n\"+SUM(I36:N36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!J10\"\n\"Nov.!G10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!J10+Nov.!G10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!V10\"\n\"Nov.!O10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!V10+Nov.!O10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!F12\"\n\" Maart!F12\"\n\"April!Q12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!F43\"\n\"Feb!F43\"\n\"Maart!F43\"\n\"April!F43\"\n\"Mei!F43\"\n\"Juni!F43\"\n\"Juli!F43\"\n\"Aug!F43\"\n\"Sep!F43\"\n\"Okt!F43\"\n\"Nov!F43\"\n\"Dec!F43\"\n\"Jan!N43\"\n\"Feb!F43\"\n\" Maart!F43\"\n\"Jan!F46\"\n\"Feb!F46\"\n\"Maart!F46\"\n\"April!F46\"\n\"Mei!F46\"\n\"Juni!F46\"\n\"Juli!F46\"\n\"Aug!F46\"\n\"Sep!F46\"\n\"Okt!F46\"\n\"Nov!F46\"\n\"Dec!F46\"\n\"Jan!N46\"\n\"Feb!F46\"\n\" Maart!F46\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"SUM(A12:E12)\"\n\"220+1550\"\n\"800+120\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"405+580\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Dec!H12\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:O10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:O36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!P10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!P10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N46\"\n\"Feb!N46\"\n\"Maart!N46\"\n\"April!N46\"\n\"Mei!N46\"\n\"Juni!N46\"\n\"Juli!N46\"\n\"Aug!N46\"\n\"Sep!N46\"\n\"Okt!N46\"\n\"Nov!N46\"\n\"Dec!N46\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F58)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A58)\"\n\"SUM(A59:L59)\"\n\"M59-M60\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:C11)\"\n\"SUM(H11:O11)\"\n\"SUM(A41:C41)\"\n\"SUM(A10:G10)\"\n\"+SUM(J32:P32)\"\n\"SUM(A10:G10)\"\n\"SUM(K10:Q10)\"\n\"SUM(A15:H15)\"\n\"+SUM(K32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:E10)\"\n\"SUM(A12:E12)\"\n\"35*15\"\n\"SUM(I12:N12)\"\n\"310+570+725+210\"\n\"3*665\"\n\"700+1254+1154\"\n\"900+834\"\n\"945+956\"\n\"7*12\"\n\"4*1038\"\n\"2274+2808\"\n\"500+230\"\n\"SUM(A12:G12)\"\n\"SUM(K12:P12)\"\n\"977+829\"\n\"452+250\"\n\"1000+995\"\n\"1000+650\"\n\"731+743+555\"\n\"375+200\"\n\"SUM(A12:H12)\"\n\"SUM(L12:Q12)\"\n\"205+2080\"\n\"3000+1600\"\n\"803+952\"\n\"900+600\"\n\"368+431\"\n\"239+167\"\n\"141+283+247\"\n\"330+100\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"780+1025\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"96+56+288\"\n\"760+900\"\n\"815+815\"\n\"510+925+510\"\n\"512+392\"\n\"510+150\"\n\"260+120\"\n\"SUM(A12:E12)\"\n\"344+(8*568)\"\n\"602+364+549+526\"\n\"681+731+509\"\n\"1040+970\"\n\"840+460\"\n\"268+490+100+100+149\"\n\"SUM(A12:H12)\"\n\"SUM(L12:Q12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"Jan!F12\"\n\"Feb!H12\"\n\"Maart!I12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!I12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!Q12\"\n\"Maart!R12\"\n\"April!O12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!R12\"\n\"Sep!O12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!O12\"\n\"SUM(A12:E12)\"\n\"35*15\"\n\"SUM(I12:N12)\"\n\"310+570+725+210\"\n\"3*665\"\n\"700+1254+1154\"\n\"900+834\"\n\"945+956\"\n\"7*12\"\n\"4*1038\"\n\"2274+2808\"\n\"500+230\"\n\"SUM(A12:G12)\"\n\"SUM(K12:P12)\"\n\"977+829\"\n\"452+250\"\n\"1000+995\"\n\"1000+650\"\n\"731+743+555\"\n\"375+200\"\n\"SUM(A12:H12)\"\n\"SUM(L12:Q12)\"\n\"205+2080\"\n\"3000+1600\"\n\"803+952\"\n\"900+600\"\n\"368+431\"\n\"239+167\"\n\"141+283+247\"\n\"330+100\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"780+1025\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"96+56+288\"\n\"760+900\"\n\"815+815\"\n\"510+925+510\"\n\"512+392\"\n\"510+150\"\n\"260+120\"\n\"SUM(A12:E12)\"\n\"344+(8*568)\"\n\"602+364+549+526\"\n\"681+731+509\"\n\"1040+970\"\n\"840+460\"\n\"268+490+100+100+149\"\n\"SUM(A12:H12)\"\n\"SUM(L12:Q12)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:P12)\"\n\"534+2*588+737+324\"\n\"2*288+839\"\n\"570+420+500+840\"\n\"709+530\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"407+425\"\n\"363+422+472\"\n\"567+664\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"560+200+260\"\n\"1500+400+600+550+360\"\n\"2*950+425\"\n\"636+415\"\n\"756+260\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"4*950+645\"\n\"520+350+340+1290\"\n\"2025+425+945+425+760\"\n\"2*750\"\n\"2*1000\"\n\"Jan!F12\"\n\"Feb!H12\"\n\"Maart!I12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!I12\"\n\"Sep!H12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!Q12\"\n\"Maart!R12\"\n\"April!O12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!R12\"\n\"Sep!Q12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!O12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:J10)\"\n\"+SUM(M35:V35)\"\n\"3+2\"\n\"2+2\"\n\"5+4\"\n\"1+1\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"69+50\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!K10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!K10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!W10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!W10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"436+691+305+528+750+112+277+388\"\n\"860+2*466\"\n\"200+750\"\n\"860+560\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"3*527+2*380+750\"\n\"306+4*800\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"360+990\"\n\"1080+861\"\n\"SUM(E13:E49)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!G12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!G12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!T12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!P12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!Q12\"\n\"Dec!S12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"201+50\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J38:Q38)\"\n\"SUM(A10:G10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:P38)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J38:Q38)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!Q10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!Q10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F56)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A56)\"\n\"SUM(A57:L57)\"\n\"M57-M58\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:C10)\"\n\"SUM(F10:I10)\"\n\"+SUM(F32:I32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A30:G30)\"\n\"SUM(J30:Q30)\"\n\"SUM(A29:G29)\"\n\"SUM(J29:Q29)\"\n\"SUM(A12:E12)\"\n\"200+130\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"77+240\"\n\"31+34\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"100+40\"\n\"163+105\"\n\"350+50\"\n\"330+180\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"230+240\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"42+100\"\n\"33+85\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"340+325\"\n\"138+80\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"350+315+245+410\"\n\"315+420+315+270\"\n\"80+80\"\n\"230+96\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"160+30\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"980+630\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!O12\"\n\"Maart!O12\"\n\"April!O12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!O12\"\n\"Aug!O12\"\n\"Sep!O12\"\n\"Okt!O12\"\n\"Nov!O12\"\n\"Dec!O12\"\n\"SUM(A41:E41)\"\n\"Jan!F49\"\n\"Feb!F49\"\n\"Maart!F49\"\n\"April!F49\"\n\"Mei!F49\"\n\"Juni!F49\"\n\"Juli!F49\"\n\"Aug!F49\"\n\"Sep!F49\"\n\"Okt!F49\"\n\"Nov!F49\"\n\"Dec!F49\"\n\"Jan!N49\"\n\"Feb!O49\"\n\"Maart!O49\"\n\"April!O49\"\n\"Mei!O49\"\n\"Juni!O49\"\n\"Juli!O49\"\n\"Aug!O49\"\n\"Sep!O49\"\n\"Okt!O49\"\n\"Nov!O49\"\n\"Dec!O49\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"35+45+35+21\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(J12:O12)\"\n\"320+110\"\n\"SUM(G12:G49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:S12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"Jan!G12\"\n\"Feb!G12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!H12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!P12\"\n\"Maart!T12\"\n\"April!O12\"\n\"Mei!P12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!S12\"\n\"Dec!O12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:S10)\"\n\"SUM(A21:I21)\"\n\"+SUM(L36:S36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:H10)\"\n\"SUM(A21:H21)\"\n\"+SUM(K36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!J10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!I10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!J10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!I10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!T10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!S10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!T10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!S10+Dec.!R10\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G59)\"\n\"SUM(B13:F13)\"\n\"SUM(O13:O59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B59)\"\n\"Jan!G13\"\n\"Feb!G13\"\n\"Maart!G13\"\n\"April!G13\"\n\"Mei!G13\"\n\"Juni!G13\"\n\"Juli!G13\"\n\"Aug!G13\"\n\"Sep!G13\"\n\"Okt!G13\"\n\"Nov!G13\"\n\"Dec!G13\"\n\"SUM(A12:L12)\"\n\"Jan!P13\"\n\"Jan!O23\"\n\"Jan!G52\"\n\"Feb!G52\"\n\"Maart!G52\"\n\"April!G52\"\n\"Mei!G52\"\n\"Juni!G52\"\n\"Juli!G52\"\n\"Aug!G52\"\n\"Sep!G52\"\n\"Okt!G52\"\n\"Nov!G52\"\n\"Dec!G52\"\n\"SUM(A12:A58)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(O13:O50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"Jan!G13\"\n\"Feb!G13\"\n\"Maart!G13\"\n\"April!G13\"\n\"Mei!G13\"\n\"Juni!G13\"\n\"Juli!G13\"\n\"Aug!G13\"\n\"Sep!G13\"\n\"Okt!G13\"\n\"Nov!G13\"\n\"Dec!G13\"\n\"SUM(A12:L12)\"\n\"Jan!O13\"\n\"Feb!O13\"\n\"Maart!O13\"\n\"April!O13\"\n\"Mei!O13\"\n\"Juni!O13\"\n\"Juli!O13+SUM(P12:U12)\"\n\"Aug!O13\"\n\"Sep!O13\"\n\"Okt!O13\"\n\"Nov!O13\"\n\"Dec!O13\"\n\"Mei!O14+SUM(T12)\"\n\"Juli!O14\"\n\"April!O15+SUM(S12:S13)\"\n\"Juni!O16+SUM(U12:U14)\"\n\"Okt!O39\"\n\"Nov!O39\"\n\"Dec!O39\"\n\"Okt!O40\"\n\"Nov!O40\"\n\"Dec!O40\"\n\"SUM(A12:A49)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:F13)\"\n\"Jan!G13\"\n\"Feb!G13\"\n\"Maart!G13\"\n\"April!G13\"\n\"Mei!G13\"\n\"Juni!G13\"\n\"Juli!G13\"\n\"Aug!G13\"\n\"Sep!G13\"\n\"Okt!G13\"\n\"Nov!G13\"\n\"Dec!G13\"\n\"SUM(A12:L12)\"\n\"Jan!N13\"\n\"Feb!N13\"\n\"Maart!N13\"\n\"April!N13\"\n\"Mei!N13\"\n\"Juni!N13\"\n\"Juli!N14\"\n\"Aug!N13\"\n\"Sep!N13\"\n\"Okt!N13\"\n\"Nov!N13\"\n\"Dec!N13\"\n\"Mei!N14+SUM(S12)\"\n\"April!N15+SUM(R12:R13)\"\n\"Juli!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Okt!N40\"\n\"Nov!N40\"\n\"Jan!N44\"\n\"Dec!N46\"\n\"SUM(A12:A49)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AA13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"SUM(H13:S13)\"\n\"SUM(W13:AG13)\"\n\"SUM(T13:T58)\"\n\"Jan!T13\"\n\"Feb!T13\"\n\"Maart!M13\"\n\"April!M13\"\n\"Mei!M13\"\n\"Juni!M13\"\n\"Juli!M13\"\n\"Aug!M13\"\n\"Sep!M13\"\n\"Okt!M13\"\n\"Nov!M13\"\n\"Dec!M13\"\n\"SUM(A13:L13)\"\n\"Jan!AB13\"\n\"Feb!AH13\"\n\"Maart!AH13\"\n\"April!AH13\"\n\"Mei!AH13\"\n\"Juni!AH13\"\n\"Juli!AH13\"\n\"Aug!AH13\"\n\"Sep!AH13\"\n\"Okt!AH13\"\n\"Nov!AH13\"\n\"Dec!AH13\"\n\"SUM(A13:A58)\"\n\"SUM(A59:L59)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(G13:G50)\"\n\"SUM(B13:F13)\"\n\"SUM(O13:O50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"SUM(B13:F13)\"\n\"SUM(B13:B50)\"\n\"Jan!G13\"\n\"Feb!G13\"\n\"Maart!G13\"\n\"April!G13\"\n\"Mei!G13\"\n\"Juni!G13\"\n\"Juli!G13\"\n\"Aug!G13\"\n\"Sep!G13\"\n\"Okt!G13\"\n\"Nov!G13\"\n\"Dec!G13\"\n\"SUM(A12:L12)\"\n\"Jan!O13\"\n\"Feb!O13\"\n\"Maart!O13\"\n\"April!O13\"\n\"Mei!O13\"\n\"Juni!O13\"\n\"Juli!O13\"\n\"Aug!O13\"\n\"Sep!O13\"\n\"Okt!O13\"\n\"Nov!O13\"\n\"Dec!O13\"\n\"SUM(A12:A49)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I35:Q35)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"SUM(A22:G22)\"\n\"SUM(I36:Q36)\"\n\"+SUM(J38:Q38)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H11\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H11\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R11\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R11\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"F12-N12\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!N38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!N39\"\n\"April!N39\"\n\"Mei!N39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!N39\"\n\"Sep!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Dec!N39\"\n\"Jan!F44\"\n\"Feb!F44\"\n\"Mei!F44\"\n\"Juni!F44\"\n\"Juli!F44\"\n\"Aug!F44\"\n\"Sep!F44\"\n\"Okt!F44\"\n\"Nov!F44\"\n\"Dec!F44\"\n\"Jan!F49\"\n\"Feb!F49\"\n\"Mei!F49\"\n\"Juni!F49\"\n\"Juli!F49\"\n\"Aug!F49\"\n\"Sep!F49\"\n\"Okt!F49\"\n\"Nov!F49\"\n\"Dec!F49\"\n\"Jan!F55\"\n\"Feb!F55\"\n\"Mei!F55\"\n\"Juni!F56\"\n\"Juli!F55\"\n\"Aug!F55\"\n\"Sep!F55\"\n\"Okt!F55\"\n\"Nov!F55\"\n\"Dec!F55\"\n\"Jan!N55\"\n\"Feb!N55\"\n\"Maart!N55\"\n\"April!N55\"\n\"Mei!N55\"\n\"Juni!N56\"\n\"Juli!N55\"\n\"Aug!N55\"\n\"Sep!N55\"\n\"Okt!N55\"\n\"Nov!N55\"\n\"Dec!N55\"\n\"Jan!F57\"\n\"Feb!F57\"\n\"Mei!F57\"\n\"Juli!F57\"\n\"Aug!F57\"\n\"Sep!F57\"\n\"Okt!F57\"\n\"Nov!F57\"\n\"Dec!F57\"\n\"Jan!N57\"\n\"Feb!N57\"\n\"Maart!N57\"\n\"April!N57\"\n\"Mei!N57\"\n\"Juli!N57\"\n\"Aug!N57\"\n\"Sep!N57\"\n\"Okt!N57\"\n\"Nov!N57\"\n\"Dec!N57\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"250+24-33\"\n\"180+150+32+32+40-34\"\n\"180+80-30\"\n\"352+150\"\n\"SUM(I12:N12)\"\n\"320+180+160+140+100+100+176+48\"\n\"120+100+670+90\"\n\"210\"\n\"215+190-29\"\n\"700+575-300-400\"\n\"400-130\"\n\"320\"\n\"300+350\"\n\"80+275+325-20\"\n\"595+380-230\"\n\"180+40\"\n\"170+105-24\"\n\"100+102\"\n\"70+500+510\"\n\"380-240\"\n\"20+30+13\"\n\"400-150\"\n\"90+80\"\n\"100+95+95\"\n\"96+160\"\n\"65-30\"\n\"50+150\"\n\"180+320-34-36\"\n\"50+265\"\n\"45+50-20\"\n\"80-22\"\n\"360-330\"\n\"SUM(F12:F48)\"\n\"O49/5\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!O12\"\n\"SUM(C3:L3)\"\n\"SUM(M3/5)\"\n\"SUM(M5*12)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"400+165\"\n\"265+400+180+160\"\n\"410+365\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"P12-G12\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"O12-G12\"\n\"110+68\"\n\"SUM(G12:G49)\"\n\"SUM(A12:F12)\"\n\"477-75\"\n\"P12-G12\"\n\"1324-35\"\n\"SUM(G12:G49)\"\n\"Jan!G12\"\n\"Feb!G12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!G12\"\n\"Juli!G12\"\n\"Aug!G12\"\n\"Sep!G12\"\n\"Okt!G12\"\n\"Nov!G12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!P12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!P12\"\n\"Sep!P12\"\n\"Okt!P12\"\n\"Nov!P12\"\n\"Dec!Q12\"\n\"AB12-M12\"\n\"Jan!P38\"\n\"Feb!P38\"\n\"Maart!P38\"\n\"April!P38\"\n\"Mei!P38\"\n\"Juni!P38\"\n\"Juli!P38\"\n\"Aug!P38\"\n\"Sep!P38\"\n\"Okt!P38\"\n\"Jan!P39\"\n\"Feb!P39\"\n\"Maart!P39\"\n\"April!P39\"\n\"Mei!P39\"\n\"Juni!P39\"\n\"Juli!P39\"\n\"Aug!P39\"\n\"Sep!P39\"\n\"Okt!P39\"\n\"SUM(A12:A49)\"\n\"AC50/12\"\n\"SUM(B2:B39)\"\n\"SUM(B40:F40,I40:K40)\"\n\"SUM(B40:F40,I40:K40)\"\n\"SUM(A42/8)\"\n\"A44\"\n\"SUM(A46*12)\"\n\"347+246+185+62+677+62+49\"\n\"123+292+246+85\"\n\"119+95\"\n\"49+148\"\n\"SUM(B8:B54)\"\n\"347+246+185+62+677+62+49\"\n\"123+292+246+85\"\n\"119+95\"\n\"49+148\"\n\"SUM(D8:D54)\"\n\"SUM(F9:F46,F48:F54)\"\n\"SUM(B8:B54)\"\n\"TODAY()\"\n\"SUM(B8:B54)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(G12:G57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!G12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"810+900\"\n\"38+125+9\"\n\"SUM(A12:F12)\"\n\"95+320\"\n\"400+250\"\n\"190+160\"\n\"740+400\"\n\"440+635+905\"\n\"830+1068\"\n\"SUM(A12:F12)\"\n\"47+190\"\n\"140+140\"\n\"170+310\"\n\"785+725\"\n\"770+680\"\n\"760+725\"\n\"40+160\"\n\"350+700+470\"\n\"SUM(M12:M49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"380+120\"\n\"SUM(A15:E15)\"\n\"715+625\"\n\"90+90+520\"\n\"SUM(J12:J48)\"\n\"SUM(A12:E12)\"\n\"120+105\"\n\"3610+250\"\n\"SUM(A12:E12)\"\n\"200+180\"\n\"105+475+475+520\"\n\"260+70+430+170\"\n\"300+130\"\n\"140+120\"\n\"SUM(A12:E12)\"\n\"170+600+2200\"\n\"100+1100+190+70\"\n\"620+300+350+210\"\n\"250+375\"\n\"750+600\"\n\"SUM(A12:E12)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:P12)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:N12)\"\n\"200+240\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"70+860\"\n\"180+190\"\n\"785+320\"\n\"Jan.!F12\"\n\"Feb!G12\"\n\"Maart!G12\"\n\"April!G12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!H12\"\n\"Okt!G12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan.!N12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!O12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!Q12\"\n\"Okt!O12\"\n\"Nov!Q12\"\n\"Dec!O12\"\n\"Jan.!F28\"\n\"Feb!G28\"\n\"Maart!G28\"\n\"April!G28\"\n\"Mei!F28\"\n\"Juni!F28\"\n\"Juli!F28\"\n\"Aug!F28\"\n\"Sep!H28\"\n\"Okt!G28\"\n\"Nov!F28\"\n\"Dec!F28\"\n\"Jan.!N28\"\n\"Feb!P28\"\n\"Maart!P28\"\n\"April!O28\"\n\"Mei!N28\"\n\"Juni!N28\"\n\"Juli!N28\"\n\"Aug!N28\"\n\"Sep!Q28\"\n\"Okt!O28\"\n\"Nov!Q28\"\n\"Dec!O28\"\n\"Maart!N41\"\n\"Jan.!N44\"\n\"Feb!P44\"\n\"Maart!P43\"\n\"April!O43\"\n\"Mei!N43\"\n\"Juni!N43\"\n\"Juli!N43\"\n\"Aug!N43\"\n\"Sep!Q43\"\n\"Okt!O43\"\n\"Nov!Q43\"\n\"Dec!O43\"\n\"April!G48\"\n\"April!O48\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"125+60\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"+SUM(K35:S35)\"\n\"1+2\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"+SUM(K35:S35)\"\n\"4+1\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"1+150\"\n\"8+56\"\n\"+SUM(J35:Q35)\"\n\"5+1\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"273+90\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"44+30\"\n\"46+37\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"13+22\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!I10\"\n\"Mrt.!I10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!I10+Mrt.!I10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!T10\"\n\"Mrt.!T10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!T10+Mrt.!T10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A29:L29)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"355+290+290\"\n\"320+370+290\"\n\"90+245+225\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:S12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"650+960\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:Q12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!G12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!O12\"\n\"Maart!O12\"\n\"April!O12\"\n\"Mei!T12\"\n\"Juni!P12\"\n\"Juli!Q12\"\n\"Aug!P12\"\n\"Sep!Q12\"\n\"Okt!R12\"\n\"Nov!Q12\"\n\"Dec!R12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:H10)\"\n\"SUM(A21:H21)\"\n\"+SUM(K36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:U10)\"\n\"SUM(A21:I21)\"\n\"+SUM(L36:U36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!I10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!J10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!I10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!J10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!S10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!V10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!S10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!V10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!F50\"\n\"Feb!F50\"\n\"Mei!F50\"\n\"Juni!F50\"\n\"Juli!F50\"\n\"Aug!F50\"\n\"Sep!F50\"\n\"Okt!F50\"\n\"Nov!F50\"\n\"Dec!F50\"\n\"Jan!N50\"\n\"Feb!N50\"\n\"Maart!N50\"\n\"April!N50\"\n\"Mei!N50\"\n\"Juni!N50\"\n\"Juli!N50\"\n\"Aug!N50\"\n\"Sep!N50\"\n\"Okt!N50\"\n\"Nov!N50\"\n\"Dec!N50\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:E11)\"\n\"SUM(A11:E11)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"33+18\"\n\"65+23\"\n\"60*0.34\"\n\"SUM(A12:E12)\"\n\"60+46\"\n\"57+40\"\n\"12+7\"\n\"14+6\"\n\"SUM(A12:E12)\"\n\"40+28+45\"\n\"55+35\"\n\"47+49\"\n\"13+18+12\"\n\"35+60\"\n\"54+39\"\n\"10+26+24\"\n\"SUM(A12:E12)\"\n\"17+36+33\"\n\"60+60\"\n\"60+23\"\n\"57+35\"\n\"80+40\"\n\"130+59\"\n\"46+24\"\n\"13+6\"\n\"27+8\"\n\"SUM(A12:E12)\"\n\"38+20+23\"\n\"15+30\"\n\"68+66\"\n\"84+41\"\n\"60+21+30\"\n\"60+35\"\n\"50+35\"\n\"SUM(A12:F12)\"\n\"40+20\"\n\"SUM(J12:P12)\"\n\"20+82\"\n\"110+22\"\n\"27+53\"\n\"31+7+20+40\"\n\"80+40\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"38+28+32+28+88\"\n\"22+46+49+35+52+45+26+22\"\n\"14+13+20\"\n\"75+80\"\n\"6+19\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"20+19\"\n\"SUM(A12:E12)\"\n\"90+10\"\n\"SUM(A12:E12)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!G12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!Q12\"\n\"Juli!P12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Nov!N29\"\n\"Dec!N29\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"2+4\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Jan!H21+Febr.!H21+Mrt.!H21+Apr.!H21+Mei!H21+Jun!H24+Jul!H21+Aug.!H21+Sep.!H21+Okt.!H21+Nov.!H21+Dec.!H21\"\n\"Jan!R21+Febr.!R21+Mrt.!R21+Apr.!R21+Mei!R21+Jun!R24+Jul!R21+Aug.!R21+Sep.!R21+Okt.!R21+Nov.!R21+Dec.!R21\"\n\"Aug.!H30\"\n\"Aug.!R30\"\n\"Jan!H27+Febr.!H27+Mrt.!H27+Apr.!H27+Mei!H27+Jun!H30+Jul!H27+Aug.!H30+Sep.!H27+Okt.!H27+Nov.!H27+Dec.!H27\"\n\"Jan!R27+Febr.!R27+Mrt.!R27+Apr.!R27+Mei!R27+Jun!R30+Jul!R27+Aug.!R30+Sep.!R27+Okt.!R27+Nov.!R27+Dec.!R27\"\n\"SUM(A12:E12)\"\n\"144+10\"\n\"93+9+19\"\n\"22+63\"\n\"28+55\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"42+20\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"80+35\"\n\"80+26+11\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"87+107\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A11:E11)\"\n\"SUM(I11:J11)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"13+8+50\"\n\"24*12\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"7.5+15+36\"\n\"15+20+24+15\"\n\"33+15\"\n\"14+40\"\n\"36+28\"\n\"33+24\"\n\"36+36\"\n\"35+39\"\n\"36+15\"\n\"20+34\"\n\"8+6\"\n\"5+8\"\n\"3+5\"\n\"8+5\"\n\"3+7\"\n\"SUM(A12:E12)\"\n\"40+44\"\n\"20+8\"\n\"20+15\"\n\"12+14+20\"\n\"33+20\"\n\"12+11\"\n\"40+40\"\n\"26+18\"\n\"35+20\"\n\"35+16+27\"\n\"4+9\"\n\"10+14+4\"\n\"SUM(A12:E12)\"\n\"24+20+8+13\"\n\"22+12+10\"\n\"19+12\"\n\"36+18+16\"\n\"36+17\"\n\"20+30\"\n\"4+3\"\n\"SUM(A12:E12)\"\n\"15+25\"\n\"22+23+16\"\n\"18+25+5\"\n\"13+36+22\"\n\"36+18\"\n\"16+16+33\"\n\"20+9\"\n\"5+8\"\n\"SUM(A12:E12)\"\n\"15+30+7\"\n\"40+32+16\"\n\"19+18+15\"\n\"24+14+40\"\n\"15+24\"\n\"15+42\"\n\"34+18\"\n\"33+18+18\"\n\"20+26\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"30+19+7+15+11\"\n\"41+20+45+10+15\"\n\"42+25\"\n\"27+24+45\"\n\"28+16\"\n\"13+10\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"13+25\"\n\"SUM(A12:E12)\"\n\"51+6\"\n\"24+9\"\n\"SUM(A12:E12)\"\n\"40+11\"\n\"25+56\"\n\"Jan!E12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!O12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!P12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Feb!E13\"\n\"Jan!E27\"\n\"Feb!E27\"\n\"Maart!F27\"\n\"April!F27\"\n\"Mei!F27\"\n\"Juni!F27\"\n\"Juli!F27\"\n\"Aug!F27\"\n\"Sep!F27\"\n\"Okt!F27\"\n\"Nov!F27\"\n\"Dec!F27\"\n\"Jan!E40\"\n\"Feb!E40\"\n\"Maart!F40\"\n\"April!F40\"\n\"Mei!F40\"\n\"Juni!F40\"\n\"Juli!F40\"\n\"Aug!F40\"\n\"Sep!F40\"\n\"Okt!F40\"\n\"Nov!F40\"\n\"Dec!F40\"\n\"Mei!N49\"\n\"Juni!N47\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"SUM(A10:L10)\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Jan!H11+Febr.!H11+Mrt.!H11+Apr.!H11+Mei!H11+Jun!H11+Jul!H11+Aug.!H11+Sep.!H11+Okt.!H11+Nov.!H11+Dec.!H11\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"22+45\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"21+14\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N45\"\n\"Feb!N45\"\n\"Maart!P45\"\n\"April!N45\"\n\"Mei!P45\"\n\"Juni!P45\"\n\"Juli!N45\"\n\"Aug!O45\"\n\"Sep!N45\"\n\"Okt!N45\"\n\"Nov!N45\"\n\"Dec!N45\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(A11:G11)\"\n\"SUM(J11:Q11)\"\n\"+SUM(J33:Q33)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"100+790\"\n\"145+375\"\n\"SUM(A12:A49)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"130+12\"\n\"SUM(A12:A48)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"340+370\"\n\"SUM(A12:A48)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"96+500\"\n\"SUM(A12:A48)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"130+285+140\"\n\"100+600\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:G12)\"\n\"42+110\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"160+225\"\n\"40+100\"\n\"1175+225\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"225+192\"\n\"Jan!E12\"\n\"Feb!E12\"\n\"Maart!E12\"\n\"April!E12\"\n\"Mei!E12\"\n\"Juni!E12\"\n\"Juli!E12\"\n\"Aug!E12\"\n\"Sep!H12\"\n\"Okt!E12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!R12\"\n\"Okt!N12\"\n\"Nov!O12\"\n\"Dec!O12\"\n\"Jan!E29\"\n\"Jan!N29\"\n\"Feb!E48\"\n\"Maart!E48\"\n\"April!E48\"\n\"Juni!E48\"\n\"Aug!E48\"\n\"Sep!H48\"\n\"Okt!E48\"\n\"Nov!F48\"\n\"Dec!F48\"\n\"Feb!N48\"\n\"Maart!N48\"\n\"April!N48\"\n\"Juni!N48\"\n\"Aug!N48\"\n\"Sep!R48\"\n\"Okt!N48\"\n\"Nov!O48\"\n\"Dec!O48\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"80+6\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"2+2\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Sep.!#REF!\"\n\"Jan!H34+Febr.!H34+Mrt.!H34+Apr.!H34+Mei!H34+Jun!H34+Jul!H34+Aug.!H34+Sep.!#REF!+Okt.!H34+Nov.!H34+Dec.!H34\"\n\"Jan!R34+Febr.!R34+Mrt.!R34+Apr.!R34+Mei!R34+Jun!R34+Jul!R34+Aug.!R34+Sep.!#REF!+Okt.!R34+Nov.!R34+Dec.!R34\"\n\"Sep.!H35\"\n\"Jan!H36+Febr.!H36+Mrt.!H36+Apr.!H36+Mei!H36+Jun!H36+Jul!H36+Aug.!H36+Sep.!H35+Okt.!H36+Nov.!H36+Dec.!H36\"\n\"Sep.!R35\"\n\"Jan!R36+Febr.!R36+Mrt.!R36+Apr.!R36+Mei!R36+Jun!R36+Jul!R36+Aug.!R36+Sep.!R35+Okt.!R36+Nov.!R36+Dec.!R36\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(L12:R12)\"\n\"SUM(I12:I49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!G12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!I12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!P12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!S12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A10:E10)\"\n\"SUM(A10:E10)\"\n\"SUM(I10:J10)\"\n\"SUM(A10:E10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"37+102\"\n\"60+33\"\n\"90*12\"\n\"SUM(A12:E12)\"\n\"50+20+50\"\n\"150+80+56\"\n\"42+104\"\n\"54+50\"\n\"9+14\"\n\"12+32\"\n\"56+28\"\n\"22+5\"\n\"75+200\"\n\"SUM(A12:E12)\"\n\"60+75\"\n\"50+40\"\n\"89+54\"\n\"96+63\"\n\"24+16\"\n\"18+16\"\n\"120+56\"\n\"210+80\"\n\"66+59\"\n\"42+31+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"23+37+26+130\"\n\"90+68\"\n\"96+50+63+52\"\n\"48+60\"\n\"146+70\"\n\"SUM(A12:E12)\"\n\"96+49\"\n\"50+50\"\n\"SUM(A12:E12)\"\n\"40+40+90\"\n\"64+135\"\n\"240+35\"\n\"30+13\"\n\"22+8\"\n\"SUM(A12:E12)\"\n\"120+52\"\n\"90+48+20+88+25\"\n\"30+25+28\"\n\"90+100+90\"\n\"30+126\"\n\"SUM(A12:E12)\"\n\"SUM(A12:E12)\"\n\"65+150\"\n\"SUM(A12:E12)\"\n\"45+88\"\n\"SUM(A12:E12)\"\n\"32+7\"\n\"105+130\"\n\"SUM(A12:E12)\"\n\"58+137+12\"\n\"40+20\"\n\"72+15\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!F28\"\n\"Feb!F28\"\n\"Maart!F28\"\n\"April!F28\"\n\"Mei!F28\"\n\"Juni!F28\"\n\"Juli!F28\"\n\"Aug!F28\"\n\"Sep!F28\"\n\"Okt!F28\"\n\"Nov!F28\"\n\"Dec!F28\"\n\"Jan!O28\"\n\"Feb!N28\"\n\"Maart!N28\"\n\"April!N28\"\n\"Mei!N28\"\n\"Juni!N28\"\n\"Juli!N28\"\n\"Aug!N28\"\n\"Sep!N28\"\n\"Okt!N28\"\n\"Nov!N28\"\n\"Dec!N28\"\n\"Jan!F43\"\n\"Feb!F43\"\n\"Maart!F44\"\n\"April!F43\"\n\"Mei!F43\"\n\"Juni!F43\"\n\"Juli!F43\"\n\"Aug!F43\"\n\"Sep!F43\"\n\"Okt!F43\"\n\"Nov!F43\"\n\"Dec!F43\"\n\"Jan!O43\"\n\"Feb!N43\"\n\"Maart!N44\"\n\"April!N43\"\n\"Mei!N43\"\n\"Juni!N43\"\n\"Juli!N43\"\n\"Aug!N43\"\n\"Sep!N43\"\n\"Okt!N43\"\n\"Nov!N43\"\n\"Dec!N43\"\n\"Juni!F48\"\n\"Juni!N48\"\n\"Mei!F49\"\n\"Mei!N49\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"1+2\"\n\"2+2\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"56+60\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"153+133\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"60+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"120+53\"\n\"120+22\"\n\"74+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"68+28\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"79+65\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!O12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!P12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A15:E15)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A13:G13)\"\n\"SUM(J13:O13)\"\n\"SUM(A15:E15)\"\n\"SUM(A11:E11)\"\n\"SUM(I11:N11)\"\n\"732+790+188+100\"\n\"800+900\"\n\"595+672\"\n\"SUM(A11:E11)\"\n\"SUM(I11:O11)\"\n\"280+450\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"415+140\"\n\"620+760\"\n\"SUM(H11:H47)\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"200+23\"\n\"SUM(A11:D11)\"\n\"200+250+225\"\n\"SUM(H11:M11)\"\n\"640+140\"\n\"255+515\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"330+230\"\n\"30+400+750+72\"\n\"635+340\"\n\"440+300+640\"\n\"290+60\"\n\"247+630\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"200+425\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"SUM(A11:D11)\"\n\"SUM(H11:M11)\"\n\"Jan!F11\"\n\"Feb!F11\"\n\"Maart!E11\"\n\"April!E11\"\n\"Mei!E11\"\n\"Juni!E11\"\n\"Juli!E11\"\n\"Aug!E11\"\n\"Sep!E11\"\n\"Okt!E11\"\n\"Nov!E11\"\n\"Dec!E11\"\n\"SUM(A11:L11)\"\n\"Jan!O11\"\n\"Feb!P11\"\n\"Maart!N11\"\n\"April!N11\"\n\"Mei!N11\"\n\"Juni!N11\"\n\"Juli!N11\"\n\"Aug!N11\"\n\"Sep!N11\"\n\"Okt!N11\"\n\"Nov!N11\"\n\"Dec!N11\"\n\"Maart!N27\"\n\"Maart!E40\"\n\"Jan!F42\"\n\"Mei!E48\"\n\"Mei!N48\"\n\"SUM(A10:G10)\"\n\"SUM(J10:R10)\"\n\"+SUM(J35:R35)\"\n\"SUM(A10:H10)\"\n\"SUM(K10:S10)\"\n\"5+28\"\n\"+SUM(K35:S35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"30+24\"\n\"24+26\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"1+1\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!I10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!I10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!S10\"\n\"Febr.!T10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!Q10\"\n\"Jul!R1\"\n\"Aug.!R1\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!S10+Febr.!T10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!Q10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Jul!R18\"\n\"Aug.!R18\"\n\"Jan!S30+Febr.!T30+Mrt.!R30+Apr.!R30+Mei!R30+Jun!Q26+Jul!R30+Aug.!R30+Sep.!R30+Okt.!R30+Nov.!R30+Dec.!R30\"\n\"Jan!H33+Febr.!I33+Mrt.!H33+Apr.!H33+Mei!H33+Jun!H29+Jul!H33+Aug.!H33+Sep.!H33+Okt.!H33+Nov.!H33+Dec.!H33\"\n\"Jan!H35+Febr.!I35+Mrt.!H35+Apr.!H35+Mei!H35+Jun!H30+Jul!H35+Aug.!H35+Sep.!H35+Okt.!H35+Nov.!H35+Dec.!H35\"\n\"Jan!S35+Febr.!T35+Mrt.!R35+Apr.!R35+Mei!R35+Jun!Q30+Jul!R35+Aug.!R35+Sep.!R35+Okt.!R35+Nov.!R35+Dec.!R35\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"275+405\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"575+270\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"290+290\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"394+240\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!O12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!N12\"\n\"Mei!O12\"\n\"Juni!O12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!Q12\"\n\"Okt!N12\"\n\"Nov!P12\"\n\"Dec!Q12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:G12)\"\n\"SUM(K12:O12)\"\n\"SUM(H12:H57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!H12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!P12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"40+14\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"115+52\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!N38\"\n\"Sep!N38\"\n\"Okt!O38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"+Dec!N43\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"26+23\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"70+13\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"13+9\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"15+21\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"35+20\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Jan!N38\"\n\"Feb!N38\"\n\"Maart!N38\"\n\"April!N38\"\n\"Mei!N38\"\n\"Juni!N38\"\n\"Juli!N38\"\n\"Aug!O38\"\n\"Sep!N38\"\n\"Okt!N38\"\n\"Nov!N38\"\n\"Dec!N38\"\n\"Jan!N39\"\n\"Feb!N39\"\n\"Maart!N39\"\n\"April!N39\"\n\"Mei!N39\"\n\"Juni!N39\"\n\"Juli!N39\"\n\"Aug!O39\"\n\"Sep!N39\"\n\"Okt!N39\"\n\"Nov!N39\"\n\"Dec!N39\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A16:E16)\"\n\"SUM(A16:E16)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:C12)\"\n\"SUM(G12:M12)\"\n\"900+900\"\n\"648+768\"\n\"664*0.34\"\n\"480*12\"\n\"SUM(A12:D12)\"\n\"SUM(H12:N12)\"\n\"450+794\"\n\"SUM(A12:C12)\"\n\"SUM(G12:M12)\"\n\"825+725\"\n\"SUM(D12:D50)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:N12)\"\n\"175+740\"\n\"SUM(I12:I49)\"\n\"SUM(A12:C12)\"\n\"SUM(G12:K12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"255+150\"\n\"260+120\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"410+400\"\n\"175+515\"\n\"SUM(A12:D12)\"\n\"SUM(H12:N12)\"\n\"SUM(A12:C12)\"\n\"SUM(G12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:N12)\"\n\"SUM(A12:C12)\"\n\"SUM(G12:M12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"Jan!D12\"\n\"Feb!E12\"\n\"Maart!D12\"\n\"April!E12\"\n\"Mei!D12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!E12\"\n\"Sep!D12\"\n\"Okt!E12\"\n\"Nov!D12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!O12\"\n\"Maart!N12\"\n\"April!O12\"\n\"Mei!L12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!O12\"\n\"Nov!N12\"\n\"Dec!P12\"\n\"Maart!D50\"\n\"Maart!N50\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"4+1\"\n\"1+1\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"570+870\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!Q12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!P12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"50*0.34\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"80+113\"\n\"104+120\"\n\"29+11\"\n\"23+30\"\n\"32+7\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"40+70\"\n\"300+33\"\n\"120+30+48\"\n\"210+45\"\n\"44+40\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"200+120+60\"\n\"20+64\"\n\"14+20\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"70+50\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"30+88\"\n\"50+36\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"20+15+18\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"300+430\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"SUM(A12:D12)\"\n\"SUM(H12:M12)\"\n\"300*4.5\"\n\"Jan!E12\"\n\"Feb!E12\"\n\"Maart!E12\"\n\"April!E12\"\n\"Mei!E12\"\n\"Juni!E12\"\n\"Juli!E12\"\n\"Aug!E12\"\n\"Sep!E12\"\n\"Okt!E12\"\n\"Nov!E12\"\n\"Dec!E12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"Feb!N27\"\n\"Maart!N27\"\n\"April!N27\"\n\"Juni!N27\"\n\"Juli!N27\"\n\"Aug!N27\"\n\"Sep!N27\"\n\"Okt!N27\"\n\"Nov!N27\"\n\"Dec!N27\"\n\"Jan!N29\"\n\"Feb!E44\"\n\"Maart!E44\"\n\"April!E44\"\n\"Mei!E44\"\n\"Juni!E44\"\n\"Juli!E44\"\n\"Mei!N44\"\n\"Jan!E49\"\n\"Aug!E49\"\n\"Sep!E49\"\n\"Okt!E49\"\n\"Nov!E49\"\n\"Dec!E49\"\n\"Feb!E47\"\n\"Maart!E47\"\n\"April!E47\"\n\"Mei!E47\"\n\"Juni!E47\"\n\"Juli!E47\"\n\"Jan!N47\"\n\"Feb!N47\"\n\"Maart!N47\"\n\"April!N47\"\n\"Mei!N47\"\n\"Juni!N47\"\n\"Juli!N47\"\n\"Aug!N47\"\n\"Sep!N47\"\n\"Okt!N47\"\n\"Nov!N47\"\n\"Dec!N47\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"SUM(A10:L10)\"\n\"Jan!H25\"\n\"Febr.!H25\"\n\"Mrt.!H25\"\n\"Apr.!H25\"\n\"Mei!H25\"\n\"Jun!H25\"\n\"Jul!H25\"\n\"Aug.!H25\"\n\"Sep.!H25\"\n\"Okt.!H25\"\n\"Nov.!H25\"\n\"Dec.!H25\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"338+10\"\n\"SUM(F12:F48)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"760+1475\"\n\"SUM(F12:F48)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!P12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J37:Q37)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A20:G20)\"\n\"+SUM(J37:Q37)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"Jan!H29+Febr.!H29+Mrt.!H29+Apr.!H29+Mei!H29+Jun!H29+Jul!H29+Aug.!H29+Sep.!H29+Okt.!H29+Nov.!H30+Dec.!H29\"\n\"Jan!H33+Febr.!H33+Mrt.!H33+Apr.!H33+Mei!H33+Jun!H33+Jul!H33+Aug.!H33+Sep.!H33+Okt.!H33+Nov.!A35+Dec.!A35\"\n\"Jan!H36+Febr.!H36+Mrt.!H36+Apr.!H36+Mei!H36+Jun!H36+Jul!H36+Aug.!H36+Sep.!H36+Okt.!H36+Nov.!H37+Dec.!H37\"\n\"Jan!R36\"\n\"Febr.!R36\"\n\"Mrt.!R36\"\n\"Apr.!R36\"\n\"Mei!R36\"\n\"Jun!R36\"\n\"Jul!R36\"\n\"Aug.!R36\"\n\"Sep.!R36\"\n\"Okt.!R36\"\n\"Nov.!R36\"\n\"Dec.!R36\"\n\"Jan!R36+Febr.!R36+Mrt.!R36+Apr.!R36+Mei!R36+Jun!R36+Jul!R36+Aug.!R36+Sep.!R36+Okt.!R36+Nov.!R36+Dec.!R36\"\n\"SUM(A12:E12)\"\n\"80+195\"\n\"150+52\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"150+137\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"115+50\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(K12:R12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"120+36\"\n\"70+74\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"110+47\"\n\"57+32\"\n\"127+58\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:R12)\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:H12)\"\n\"SUM(I12:I49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!H12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!G12\"\n\"Nov!F12\"\n\"Dec!I12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!S12\"\n\"Juni!N12\"\n\"Juli!O12\"\n\"Aug!R12\"\n\"Sep!N12\"\n\"Okt!S12\"\n\"Nov!O12\"\n\"Dec!T12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:I10)\"\n\"SUM(L10:S10)\"\n\"SUM(A21:I21)\"\n\"+SUM(L36:S36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:H10)\"\n\"SUM(A21:H21)\"\n\"+SUM(K36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:H10)\"\n\"SUM(A21:H21)\"\n\"+SUM(K36:R36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:F10)\"\n\"SUM(I10:Q10)\"\n\"SUM(A21:F21)\"\n\"+SUM(I36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!J10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!I10\"\n\"Sep.!H10\"\n\"Okt.!I10\"\n\"Nov.!H10\"\n\"Dec.!G10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!J10+Jun!H10+Jul!H10+Aug.!I10+Sep.!H10+Okt.!I10+Nov.!H10+Dec.!G10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!T10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!S10\"\n\"Sep.!R10\"\n\"Okt.!S10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!T10+Jun!R10+Jul!R10+Aug.!S10+Sep.!R10+Okt.!S10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F57)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!N12\"\n\"April!N12\"\n\"Mei!N12\"\n\"Juni!N12\"\n\"Juli!N12\"\n\"Aug!N12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!N12\"\n\"SUM(A12:A57)\"\n\"SUM(A58:L58)\"\n\"M58-M59\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"SUM(I38:Q38)\"\n\"+SUM(J40:Q40)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J32:Q32)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"30+12\"\n\"12+56\"\n\"35+40\"\n\"29+24\"\n\"60*0.34+60+8\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:Q12)\"\n\"24+15+7.5+36\"\n\"17+17+23\"\n\"12+56\"\n\"42+30\"\n\"35+40\"\n\"369+32\"\n\"35+39\"\n\"13+60\"\n\"6+11\"\n\"5+3\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"40+16\"\n\"12+56\"\n\"30+25\"\n\"35+40\"\n\"41+27\"\n\"56+58\"\n\"12+21\"\n\"8+9\"\n\"70+42\"\n\"63+33+24\"\n\"4+4\"\n\"11+5\"\n\"28+5+2\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"24+15+65+27\"\n\"12+56\"\n\"35+40\"\n\"55+30+80\"\n\"60+117+33\"\n\"6+6\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"35+45\"\n\"12+56\"\n\"35+40\"\n\"18+22+69+46+32+23\"\n\"20+20\"\n\"SUM(A12:E12)\"\n\"18+11\"\n\"50+20\"\n\"SUM(I12:P12)\"\n\"30+59+15\"\n\"12+56\"\n\"25+34\"\n\"35+40\"\n\"34+23\"\n\"42+24+42\"\n\"184*0.75\"\n\"11+4\"\n\"35+26\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"32+19+11+57+27\"\n\"60+40+32+24+22+46+46+48\"\n\"35+13\"\n\"30+63\"\n\"60+48+45\"\n\"48+38\"\n\"13+28\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"77+30\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"18+79\"\n\"13+14\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"24+28\"\n\"34+44\"\n\"45+12\"\n\"10+23\"\n\"SUM(A12:E12)\"\n\"SUM(I12:P12)\"\n\"13+60\"\n\"42+9\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Maart!F12\"\n\"April!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!F12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!F12\"\n\"SUM(A12:L12)\"\n\"Jan!Q12\"\n\"Feb!R12\"\n\"Maart!Q12\"\n\"April!P12\"\n\"Mei!O12\"\n\"Juni!Q12\"\n\"Juli!Q12\"\n\"Aug!Q12\"\n\"Sep!Q12\"\n\"Okt!O12\"\n\"Nov!Q12\"\n\"Dec!Q12\"\n\"Jan!F44\"\n\"Feb!F44\"\n\"Maart!F44\"\n\"April!F44\"\n\"Mei!F44\"\n\"Juni!F44\"\n\"Juli!F44\"\n\"Aug!F44\"\n\"Sep!F44\"\n\"Okt!F44\"\n\"Nov!F44\"\n\"Dec!F44\"\n\"Jan!F47\"\n\"Feb!F47\"\n\"Maart!F47\"\n\"April!F47\"\n\"Mei!F47\"\n\"Juni!F47\"\n\"Juli!F47\"\n\"Aug!F47\"\n\"Sep!F47\"\n\"Okt!F47\"\n\"Nov!F47\"\n\"Dec!F47\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"+SUM(J35:Q35)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!R10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!R10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(A12:E12)\"\n\"41+30\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"32+85\"\n\"121+40\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:G12)\"\n\"SUM(H12:H49)\"\n\"SUM(A12:E12)\"\n\"40+14\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:O12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"46+13\"\n\"SUM(G12:G49)\"\n\"SUM(A12:E12)\"\n\"SUM(I12:N12)\"\n\"57+33\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:E12)\"\n\"SUM(F12:F49)\"\n\"SUM(A12:F12)\"\n\"SUM(J12:P12)\"\n\"SUM(G12:G49)\"\n\"Jan!F12\"\n\"Feb!F12\"\n\"Totaal!F12\"\n\"Totaal!F12\"\n\"Mei!F12\"\n\"Juni!F12\"\n\"Juli!G12\"\n\"Aug!F12\"\n\"Sep!F12\"\n\"Okt!F12\"\n\"Nov!F12\"\n\"Dec!G12\"\n\"SUM(A12:L12)\"\n\"Jan!N12\"\n\"Feb!N12\"\n\"Maart!P12\"\n\"April!R12\"\n\"Mei!P12\"\n\"Juni!P12\"\n\"Juli!P12\"\n\"Aug!O12\"\n\"Sep!N12\"\n\"Okt!N12\"\n\"Nov!N12\"\n\"Dec!Q12\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:N10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:N36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"SUM(A10:G10)\"\n\"SUM(J10:Q10)\"\n\"SUM(A21:G21)\"\n\"+SUM(J36:Q36)\"\n\"Jan!H10\"\n\"Febr.!H10\"\n\"Mrt.!H10\"\n\"Apr.!H10\"\n\"Mei!H10\"\n\"Jun!H10\"\n\"Jul!H10\"\n\"Aug.!H10\"\n\"Sep.!H10\"\n\"Okt.!H10\"\n\"Nov.!H10\"\n\"Dec.!H10\"\n\"Jan!H10+Febr.!H10+Mrt.!H10+Apr.!H10+Mei!H10+Jun!H10+Jul!H10+Aug.!H10+Sep.!H10+Okt.!H10+Nov.!H10+Dec.!H10\"\n\"Jan!R10\"\n\"Febr.!R10\"\n\"Mrt.!R10\"\n\"Apr.!R10\"\n\"Mei!R10\"\n\"Jun!R10\"\n\"Jul!R10\"\n\"Aug.!O10\"\n\"Sep.!R10\"\n\"Okt.!R10\"\n\"Nov.!R10\"\n\"Dec.!R10\"\n\"Jan!R10+Febr.!R10+Mrt.!R10+Apr.!R10+Mei!R10+Jun!R10+Jul!R10+Aug.!O10+Sep.!R10+Okt.!R10+Nov.!R10+Dec.!R10\"\n\"SUM(C4:C6)\"\n\"$C$4*D20+$C$5*E20+$C$6*F20\"\n\"SUM(C4:C6)\"\n\"$C$4*D23+$C$5*E23+$C$6*F23\"\n\"SUM(C4:C6)\"\n\"$C$4*D18+$C$5*E18+$C$6*F18\"\n\"SUM(C4:C6)\"\n\"$C$4*D18+$C$5*E18+$C$6*F18\"\n\"SUM(C4:C6)\"\n\"$C$4*D18+$C$5*E18+$C$6*F18\"\n\"SUM(C4:C6)\"\n\"$C$4*D17+$C$5*E17+$C$6*F17\"\n\"SUM(C4:C6)\"\n\"$C$4*D17+$C$5*E17+$C$6*F17\"\n\"SUM(C4:C6)\"\n\"$C$4*D17+$C$5*E17+$C$6*F17\"\n\"SUM(C4:C6)\"\n\"$C$4*D19+$C$5*E19+$C$6*F19\"\n\"SUM(C4:C6)\"\n\"$C$4*D23+$C$5*E23+$C$6*F23\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C4:C6)\"\n\"SUM(C3:C9)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"(D$4+D$5)*D19+(D$6+D$7)*E19+(D$8+D$9)*F19+C$13*G19\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*17\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*17\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*17\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*17\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"550-102\"\n\"325-(1*32+2*16+2*19)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*21\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D16+(D$6+D$7)*E16+(D$8+D$9)*F16\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C5/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(D$4+D$5)*D25+(D$6+D$7)*E25+(D$8+D$9)*F25\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(D$4+D$5)*D25+(D$6+D$7)*E25+(D$8+D$9)*F25\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"160+50\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"480+280\"\n\"330+125\"\n\"(D$4+D$5)*D25+(D$6+D$7)*E25+(D$8+D$9)*F25\"\n\"130+60\"\n\"168+84\"\n\"410+60\"\n\"140+28\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"160+50\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"480+280\"\n\"330+125\"\n\"(D$4+D$5)*D25+(D$6+D$7)*E25+(D$8+D$9)*F25\"\n\"130+60\"\n\"168+84\"\n\"410+60\"\n\"140+28\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"(D$4+D$5)*D25+(D$6+D$7)*E25+(D$8+D$9)*F25\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"180+95\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"270+450\"\n\"280+530\"\n\"150+255+220\"\n\"120+180\"\n\"17+155\"\n\"7+40+50\"\n\"64+120\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"149+112\"\n\"240+110+70\"\n\"180+150\"\n\"180+11\"\n\"20+80\"\n\"33+58\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"180+176+48\"\n\"9595\"\n\"34+36\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"120+10\"\n\"SUM(H14-I14)\"\n\"80+275\"\n\"100+70+32\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"670+90\"\n\"240\"\n\"180+40\"\n\"45+50\"\n\"170+105\"\n\"105+32+32+40\"\n\"34+80\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"290+160\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(H17-I17)\"\n\"140+110\"\n\"75+45+40\"\n\"650+100\"\n\"55+4\"\n\"190+100+62\"\n\"A39+1\"\n\"655+75\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"SUM(C4:C9)\"\n\"SUM(D16:F16)*D10\"\n\"SUM(D17:F17)*D10\"\n\"SUM(D18:F18)*D10\"\n\"SUM(D19:F19)*D10\"\n\"SUM(D20:F20)*D10\"\n\"SUM(D21:F21)*D10\"\n\"SUM(D22:F22)*D10\"\n\"SUM(D23:F23)*D10\"\n\"SUM(D24:F24)*D10\"\n\"SUM(D25:F25)*D10\"\n\"SUM(D26:F26)*D10\"\n\"SUM(D27:F27)*D10\"\n\"SUM(D28:F28)*D10\"\n\"SUM(D29:F29)*D10\"\n\"SUM(D30:F30)*D10\"\n\"SUM(D31:F31)*D10\"\n\"SUM(D32:F32)*D10\"\n\"SUM(D33:F33)*D10\"\n\"SUM(D34:F34)*D10\"\n\"SUM(D35:F35)*D10\"\n\"SUM(D36:F36)*D10\"\n\"SUM(D37:F37)*D10\"\n\"SUM(D38:F38)*D10\"\n\"SUM(D39:F39)*D10\"\n\"SUM(D40:F40)*D10\"\n\"SUM(D41:F41)*D10\"\n\"SUM(D42:F42)*D10\"\n\"SUM(D43:F43)*D10\"\n\"SUM(D44:F44)*D10\"\n\"SUM(D45:F45)*D10\"\n\"SUM(D46:F46)*D10\"\n\"SUM(D47:F47)*D10\"\n\"SUM(D48:F48)*D10\"\n\"SUM(D49:F49)*D10\"\n\"SUM(D50:F50)*D10\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"A39+1\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"A39+1\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"A46+1\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"A39+1\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"A39+1\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"204*1.2\"\n\"1020*0.2\"\n\"1292*0.3\"\n\"295*0.6\"\n\"295*1\"\n\"204*0.2\"\n\"295*0.75\"\n\"295*0.5\"\n\"204*0.75\"\n\"590*0.4\"\n\"204*2.5\"\n\"204*1.5\"\n\"655*0.15\"\n\"295*0.3\"\n\"295*0.075\"\n\"204*0.4\"\n\"A39+1\"\n\"204*0.6\"\n\"590*0.25\"\n\"532*0.45\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"205*2\"\n\"327*1\"\n\"296*0.8\"\n\"1298*0.2\"\n\"236*1\"\n\"2.38*410\"\n\"205*0.8\"\n\"387*0.2\"\n\"296*0.4\"\n\"296*1\"\n\"205*2.5\"\n\"205*1.5\"\n\"592*0.2\"\n\"592*0.225\"\n\"205*0.4\"\n\"A39+1\"\n\"6*205*0.2\"\n\"1025*0.2\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(G17*2)\"\n\"SUM(2*G18)\"\n\"G20*2\"\n\"G21*0.3\"\n\"G22*0.2\"\n\"209*0.8\"\n\"209*1\"\n\"209*0.5\"\n\"513*0.2\"\n\"304*0.3\"\n\"304*0.4\"\n\"209*1.5\"\n\"152*1.5\"\n\"513*0.32\"\n\"304*0.15\"\n\"304*0.01\"\n\"A39+1\"\n\"790*0.22\"\n\"209*0.6\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"SUM(H14-I14)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"1005*1\"\n\"584*0.5\"\n\"201*0.45\"\n\"292*0.3\"\n\"201*1\"\n\"1388*0.2\"\n\"201*6.75\"\n\"383*1\"\n\"383*0.375\"\n\"474*0.2\"\n\"201*0.2\"\n\"292*0.275\"\n\"584*0.08\"\n\"201*0.3\"\n\"201*1.5\"\n\"201*0.15\"\n\"325*0.15\"\n\"584*0.28\"\n\"493*0.3\"\n\"A39+1\"\n\"201*0.5\"\n\"493*0.5\"\n\"292*0.2\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"A39+1\"\n\"SUM(H14:H55)\"\n\"SUM(I14:I56)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H56)\"\n\"SUM(I14:I57)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"C11*19\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"SUM(C4:C9)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"G26*H27\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"G26*H27\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"G29*H29\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"SUM(D11*18.5)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"4.5/3\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"SUM(D11*18.5)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"SUM(D11*18.5)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"SUM(D11*18.5)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"SUM(D11*18.5)\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G18*H18\"\n\"SUM(H14:H60)\"\n\"SUM(I14:I61)\"\n\"SUM(I62+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(G17*H17)\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(G17*H17)\"\n\"SUM(G44,H44)\"\n\"G46*H46\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(G17*H17)\"\n\"SUM(H14:H57)\"\n\"SUM(I14:I58)\"\n\"SUM(I59+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"SUM(G17*H17)\"\n\"SUM(H14:H48)\"\n\"SUM(I49+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D17+(D$6+D$7)*E17+(D$8+D$9)*F17\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G17*H17\"\n\"SUM(H14:H53)\"\n\"SUM(I14:I54)\"\n\"SUM(I55+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G16*H16\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"(C4/C$10)*D$10\"\n\"SUM(C4:C9)\"\n\"D11*18\"\n\"(D$4+D$5)*D14+(D$6+D$7)*E14+(D$8+D$9)*F14\"\n\"G14*H14\"\n\"SUM(H14:H54)\"\n\"SUM(I14:I55)\"\n\"SUM(I56+F11)\"\n\"SUM(B3:B10)\"\n\"SUM(B3:B10)\"\n"
  },
  {
    "path": "src/XLParser.Tests/data/euses/knownfails.txt",
    "content": "SUM((Exercises 4, 5 and 6!$H$2:$H$11-Exercise 7!B2:B11)/Exercise 7!B2:B11)"
  },
  {
    "path": "src/XLParser.Tests/data/testformulas/structured_references.txt",
    "content": "﻿=SUM(DeptSales[SaleAmt])\n=DeptSales[[SalesPers]:[Region]]\n=(DeptSales[SaleAmt],DeptSales[ComAmt])\n=DeptSales[[SalesPers]:[SaleAmt]] DeptSales[[Region]:[ComPct]]\n=DeptSales[#All]\n=DeptSales[#Data]\n=DeptSales[#Headers]\n=DeptSales[#Totals]\n=DeptSales[#This Row]\n=[SaleAmt]*[ComPct]\n=DeptSales[SaleAmt]*DeptSales[ComPct]\n=DeptSales[[#All],[SaleAmt]]\n=DeptSales[[#Headers],[ComPct]]\n=DeptSales[[#Totals],[Region]]\n=DeptSales[[#All],[SaleAmt]:[ComPct]]\n=DeptSales[[#Data],[ComPct]:[ComAmt]]\n=DeptSales[[#Headers],[Region]:[ComAmt]]\n=DeptSales[[#Totals],[SaleAmt]:[ComAmt]]\n=DeptSales[[#Headers],[#Data],[ComPct]]\n=DeptSales[[#This Row], [ComAmt]]\n=DeptSales[[SalesPers]:[Region]]\n=DeptSalesFYSummary[[2004]:[2002]]\n=DeptSalesFYSummary[[Total$Amount]]\n=DeptSales[Total Amount]\n=DeptSalesFYSummary['#OfItems]\n=DeptSales[ [SalesPers]:[Region] ]\n=DeptSales[[#Headers], [#Data], [ComPct]]\n=DeptSales[@Column]\n=DeptSales[@[SaleAmt]:[ComAmt]]\n=DeptSales[@['@]]\n=Tabel25[[#This Row],[I/HV]]\nVLOOKUP(GroupVertices[[#This Row],[Vertex]], Vertices[], MATCH(\"ID\", Vertices[#Headers], 0), FALSE)\nIFERROR(VLOOKUP($A4,TABLA_AHORRO[],6,FALSE),\"\")\nSUM(Table[1])\n=SUM(Sales[@[Jan]:[Mar]])\n=SUM(Regions[@South], Regions[@West])\n=SUM(Regions[@[South sales]], Regions[@[West sales]])\n=SUM(Regions[[South]:[East]])\n=SUM(Regions[South], Regions[West])\n=Regions[#Totals] Regions[[#All],[West]]\n=Regions[[South]:[East]]\n=Regions[[#Headers],[South]]\n=AVERAGE(Regions[South],Regions[West],Regions[North])\n=SUBTOTAL(103,Sales[Jan])\n=SUBTOTAL(109,[Jan])\n=SUM(Sales[Jan])\n=SUMIF(Sales[Item],$F$2,Sales[Jan])\n=SUMIF(Sales[[Item]:[Item]],$F$2,Sales[Jan])\n=SUM(Sales[@[Jan]:[Feb]])\n=SUM(Sales[@Jan]:Sales[@Feb])\n=Sales\n=Sales[#All]\n=Sales[#Headers]\n=Sales[#Data]\n=Sales[#Totals]\n=Sales[[#Headers],[#Data]]\n=Sales[[#Data],[#Totals]]\n=Sales[@Region]\n=Sales[Region]\n=Sales[[#Headers],[Region]]\n=Sales[[#Data],[Region]]\n=Sales[[#Totals],[Region]]\n=Sales[@[Jan]:[Mar]]\n=Sales[[Jan]:[Mar]]\n=Sales[[#Headers],[#Data],[Jan]:[Mar]]\n=Sales[[#Data],[#Totals],[Jan]:[Mar]]\n=SUBTOTAL(109,[Jan])\n=SUBTOTAL(109,[Feb])\n=SUBTOTAL(109,[Mar])\n=XLOOKUP($G7,Sales_1[[Region]:[Region]],Sales_1[Jan])\n=SUM(Sales_2[Jan]:Sales_2[Feb])\n=[@Jan]+[@Feb]\n=COUNTA(Sales_4[[#Headers],[Jan]:[Mar]])"
  },
  {
    "path": "src/XLParser.Tests/data/testformulas/user_contributed.txt",
    "content": "\"IF(A8>0,12*$B$2-D8,\"\"0\\\"\")\"\n"
  },
  {
    "path": "src/XLParser.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.6.33723.286\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"XLParser\", \"XLParser\\XLParser.csproj\", \"{FB048D20-29FD-4D2C-A336-59F93F9A68F3}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"XLParser.Tests\", \"XLParser.Tests\\XLParser.Tests.csproj\", \"{699A456A-7028-41EA-9CD0-96D1ED4DDF75}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{FB048D20-29FD-4D2C-A336-59F93F9A68F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FB048D20-29FD-4D2C-A336-59F93F9A68F3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FB048D20-29FD-4D2C-A336-59F93F9A68F3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FB048D20-29FD-4D2C-A336-59F93F9A68F3}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{699A456A-7028-41EA-9CD0-96D1ED4DDF75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{699A456A-7028-41EA-9CD0-96D1ED4DDF75}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{699A456A-7028-41EA-9CD0-96D1ED4DDF75}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{699A456A-7028-41EA-9CD0-96D1ED4DDF75}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B7C2C9DF-98E2-4A6C-A284-14B952D1EA6D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  }
]