]> git.openfabrics.org - ~adrianc/mstflint.git/commitdiff
ported changes from MFT-3.7.0
authorAdrian Chiris <adrianc@mellanox.com>
Thu, 31 Jul 2014 13:50:35 +0000 (16:50 +0300)
committerAdrian Chiris <adrianc@mellanox.com>
Thu, 31 Jul 2014 13:50:35 +0000 (16:50 +0300)
69 files changed:
debian/changelog
debian/rules
dev_mgt/tools_dev_types.c
dev_mgt/tools_dev_types.h
flint/cmd_line_parser.cpp
flint/err_msgs.h
flint/flint.cpp
flint/flint.h
flint/flint_params.cpp
flint/flint_params.h
flint/subcommands.cpp
flint/subcommands.h
include/mtcr_ul/mtcr.h
man/mstflint.1
mflash/mflash.c
mflash/mflash.h
mflash/mflash_access_layer.c
mflash/mflash_access_layer.h
mflash/mflash_common_structs.h
mflash/mflash_pack_layer.c
mflash/mflash_pack_layer.h
mflash/mflash_types.h
mft_utils/Makefile.am
mft_utils/errmsg.cpp [new file with mode: 0644]
mft_utils/errmsg.h [new file with mode: 0644]
mlxconfig/log [deleted file]
mlxconfig/mlxcfg_lib.cpp
mlxconfig/mlxcfg_lib.h
mlxconfig/mlxcfg_parser.cpp
mlxconfig/mlxcfg_ui.cpp
mlxconfig/mlxcfg_ui.h
mlxfwops/lib/Makefile.am
mlxfwops/lib/flint_base.cpp
mlxfwops/lib/flint_base.h
mlxfwops/lib/flint_io.cpp
mlxfwops/lib/flint_io.h
mlxfwops/lib/fs2_ops.cpp
mlxfwops/lib/fs2_ops.h
mlxfwops/lib/fs3_ops.cpp
mlxfwops/lib/fs3_ops.h
mlxfwops/lib/fw_ops.cpp
mlxfwops/lib/fw_ops.h
mlxfwops/lib/mlxfwops_com.h
mstdump/crd_lib/crdump.c
mstdump/crd_lib/crdump.h
mstdump/crd_main/mstdump.c
mstdump/mstdump_dbs/ConnectIB.csv
mstdump/mstdump_dbs/ConnectX4.csv
mstdump/mstdump_dbs/SwitchIB.csv
mtcr_ul/mtcr_ib.h
mtcr_ul/mtcr_ib_ofed.c
mtcr_ul/mtcr_int_defs.h
mtcr_ul/mtcr_tools_cif.c
mtcr_ul/mtcr_tools_cif.h
mtcr_ul/mtcr_ul.c
mtcr_ul/packets_common.c
mtcr_ul/packets_common.h
reg_access/reg_access.c
reg_access/reg_access.h
small_utils/hca_self_test.ofed
tools_layouts/Makefile.am
tools_layouts/register_access_layouts.c [deleted file]
tools_layouts/register_access_layouts.h [deleted file]
tools_layouts/register_access_open_layouts.c [new file with mode: 0644]
tools_layouts/register_access_open_layouts.h [new file with mode: 0644]
tools_layouts/tools_layouts.c [deleted file]
tools_layouts/tools_layouts.h [deleted file]
tools_layouts/tools_open_layouts.c [new file with mode: 0644]
tools_layouts/tools_open_layouts.h [new file with mode: 0644]

index 24f5e8f9ff5d04ee1dbaa54ac24fb193a28cdbd6..06407a53c2e7b2d2cebaf26c14a290cec42e656d 100644 (file)
@@ -1,4 +1,11 @@
-mstflint (3.6.0) unstable; urgency=low
+mstflint (3.7.0) unstable; urgency=low
+
+  * Updated from MFT-3.7.0
+
+ -- Adrian Chiris <adrianc@unknown>  Mon, 28 Jul 2014 09:00:33 +0200
+
+
+mstflint (3.7.0) unstable; urgency=low
 
   * Updated from MFT-3.7.0 initial relese
 
index c30bbdbb9ebdd6b8f317b67fc9fe65340234e517..a578276af375da825c5ed535f3d254daa93e34f4 100755 (executable)
 
 # This has to be exported to make some magic below work.
 export DH_OPTIONS
+DEB_CONFIGURE_EXTRA_FLAGS ?= ""
 
 
 %:
        dh $@ 
+
+override_dh_auto_configure:
+       dh_auto_configure -- $(DEB_CONFIGURE_EXTRA_FLAGS)
index 2d3aa6dff629c3459ab6889b0580e38187988e0a..2e1c9abf01c042e3dcffac3a183a080c338f842e 100644 (file)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -53,9 +52,9 @@ struct dev_info {
     enum dm_dev_type dev_type;
 };
 
-#define DEVID_ADDR_ANAFA2       0x60014
-#define DEVID_ADDR              0xf0014
-#define DM_ARBEL_DEV_VER_ADDR   0x82600
+#define DEVID_ADDR_INFINISCALE_III          0x60014
+#define DEVID_ADDR                          0xf0014
+#define DM_INFINIHOST_III_EX_DEV_VER_ADDR   0x82600
 
 static struct dev_info g_devs_info[] = {
     {
@@ -248,13 +247,13 @@ int dm_get_device_id(mfile* mf,
     }
 
     if (i == DeviceEndMarker) {
-        /* Special cases - Sinai HW id and Anafa2 devid address. */
+        /* Special cases - InfiniHost_III_LX HW id and InfiniScale_III devid address. */
         if (*ptr_hw_dev_id == 24204) {
-            /* Some old Sinais have hw dev is of 24204 */
+            /* Some old InfiniHost_III_LXs have hw dev is of 24204 */
             *ptr_dm_dev_id = DeviceInfiniHostIIILx;
         } else {
-            /* Try Anafa2 devid address */
-            if (mread4(mf, DEVID_ADDR_ANAFA2, &dword) != 4)
+            /* Try InfiniScale_III devid address */
+            if (mread4(mf, DEVID_ADDR_INFINISCALE_III, &dword) != 4)
                 return 1;
             if ((int)EXTRACT(dword, 0, 16) == g_devs_info[DeviceInfiniScaleIII].hw_dev_id) {
                 *ptr_dm_dev_id = DeviceInfiniScaleIII;
@@ -268,11 +267,11 @@ int dm_get_device_id(mfile* mf,
         }
     }
 
-    /* Special cases: For Arbel we need to check the SW id as well */
+    /* Special cases: For InfiniHost_III_EX we need to check the SW id as well */
     if (*ptr_hw_dev_id == g_devs_info[DeviceInfiniHostIIIEx].hw_dev_id) {
-        if (mread4(mf, DM_ARBEL_DEV_VER_ADDR, &dword) != 4)
+        if (mread4(mf, DM_INFINIHOST_III_EX_DEV_VER_ADDR, &dword) != 4)
         {
-            //printf("FATAL - Can't read arbel dev_ver addr\n");
+            //printf("FATAL - Can't read InfiniHost_III_EX dev_ver addr\n");
             return 1;
         }
 
index 21c587fb18a6a04edd9c3a86f1bb53ddd6f2ef38..9859dc140b66baf696b2593b0bb714cef79e6cc6 100644 (file)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef TOOLS_DEV_TYPE_H
 #define TOOLS_DEV_TYPE_H
 
@@ -116,7 +115,7 @@ u_int32_t dm_get_hw_dev_id(dm_dev_id_t type);
 
 /**
  * Returns the HW chip revision of the given device type or zero on failures,
- * This is useful to distinguish between hermon and hermon_b0.
+ * This is useful to distinguish between ConnectX2 and ConnectX.
  */
 u_int32_t dm_get_hw_rev_id(dm_dev_id_t type);
 
index ee7b2f8b00f8a56f805855a8ee6dffee5e9a2549..4c33961975ff302bddba54f6d8b5d1cf5d33fff8 100644 (file)
@@ -173,6 +173,7 @@ FlagMetaData::FlagMetaData() {
     _flags.push_back(new Flag("", "use_image_ps", 0));
     _flags.push_back(new Flag("", "use_image_guids", 0));
     _flags.push_back(new Flag("", "use_image_rom", 0));
+    _flags.push_back(new Flag("", "ignore_dev_data", 0));
     _flags.push_back(new Flag("", "dual_image", 0));
     _flags.push_back(new Flag("", "striped_image", 0));
     _flags.push_back(new Flag("", "banks", 1));
@@ -301,7 +302,7 @@ bool getGUIDFromStr(string str, guid_t& guid, string prefixErr="")
     g = strtoull(str.c_str(), &endp, 16);
     if (*endp || (g == 0xffffffffffffffffULL && errno == ERANGE)) {
         if (prefixErr.size() == 0) {
-            printf("-E- Invalid GUID syntax (%s) %s \n", str.c_str(), errno ? strerror(errno) : "" );
+            printf("-E- Invalid Guid/Mac/Uid syntax (%s) %s \n", str.c_str(), errno ? strerror(errno) : "" );
         } else {
             printf("%s\n", prefixErr.c_str());
         }
@@ -607,6 +608,12 @@ void Flint::initCmdParser() {
                 "Do not save the ROM which exists in the device.\n"
                 "Commands affected: burn");
 
+    AddOptions("ignore_dev_data",
+               ' ',
+                "",
+                "Do not attempt to take device data sections from device(sections will be taken from the image. FS3 Only).\n"
+                "Commands affected: burn");
+
     AddOptions("dual_image",
                ' ',
                 "",
@@ -688,7 +695,7 @@ ParseStatus Flint::HandleOption(string name, string value)
             string str1 = "  "+it->second->getFlagL()+((it->second->getFlagS() == "") ? ("  ") : ("|"))+it->second->getFlagS()\
                     +" "+it->second->getParam();
             string str2 = ": " + it->second->getDesc()+"\n";
-            printf("%-40s %s", str1.c_str(), str2.c_str());
+            printf("%-44s %s", str1.c_str(), str2.c_str());
         }
         cout<<endl<<"  Return values:\n  0 - Successful completion\n  1 - An error has occurred\n"
                 "  7 - For burn command - FW already updated - burn was aborted."<<endl << endl;
@@ -845,6 +852,8 @@ ParseStatus Flint::HandleOption(string name, string value)
         _flintParams.use_image_guids = true;
     } else if (name == "use_image_rom") {
         _flintParams.use_image_rom = true;
+    } else if (name == "ignore_dev_data") {
+        _flintParams.ignore_dev_data = true;
     } else if (name == "dual_image") {
         _flintParams.dual_image = true;
     } else if (name == "striped_image") {
@@ -872,6 +881,8 @@ ParseStatus Flint::HandleOption(string name, string value)
     return PARSE_OK;
 }
 
+#define IS_NUM(cha) (((cha) >= '0') && ((cha) <= '9'))
+
 ParseStatus Flint::parseCmdLine(int argc, char* argv[]) {
     //Step1 separate between option section and cmd section
     SubCmdMetaData subCmds;
@@ -901,8 +912,8 @@ ParseStatus Flint::parseCmdLine(int argc, char* argv[]) {
     //first arg is the flint command we can copy as is
     newArgv[0] = strcpy(new char[strlen(argvOpt[0]) + 1], argvOpt[0]);
     while (i < argcOpt) {
-        if (argvOpt[i][0] == '-') //its a flag so we copy to new_argv as is
-                {
+        if (argvOpt[i][0] == '-' && !IS_NUM(argvOpt[i][1])) //its a flag (and not a number) so we copy to new_argv as is
+        {
             newArgv[j] = strcpy(new char[strlen(argvOpt[i]) + 1],
                     argvOpt[i]);
             i++;
@@ -913,7 +924,7 @@ ParseStatus Flint::parseCmdLine(int argc, char* argv[]) {
             argStart = i;
             argEnd = i;
             int argsSize = 0;
-            while (argEnd < argcOpt && argvOpt[argEnd][0] != '-') {
+            while (argEnd < argcOpt && (argvOpt[argEnd][0] != '-' || IS_NUM(argvOpt[argEnd][1]))) {
                 argsSize += strlen(argvOpt[argEnd]) + 1; //for the comma
                 argEnd++;
             }
@@ -949,7 +960,7 @@ ParseStatus Flint::parseCmdLine(int argc, char* argv[]) {
         int lastFlagPos;
         char* strippedFlag;
         for (lastFlagPos = argc - 1; lastFlagPos > 0; lastFlagPos--) {
-            if (argv[lastFlagPos][0] == '-')
+            if (argv[lastFlagPos][0] == '-' && !IS_NUM(argv[lastFlagPos][1]))
                 break;
         }
         if (lastFlagPos == 0) {
index 04c6055710848ba3ad17958dad29cbdebb2b5bc7..9d0c118ebef4cea01332de61115e036000fac20c 100644 (file)
@@ -2,7 +2,7 @@
  *
  * err_msgs.h - FLash INTerface
  *
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -71,11 +71,13 @@ typedef enum {
 #define FLINT_CMD_ARGS_ERROR                  "Command \"%s\" requires %d arguments, but %d arguments were given\n"
 #define FLINT_CMD_ARGS_ERROR2                 "Command \"%s\" requires at most %d arguments, but %d arguments were given\n"
 #define FLINT_CMD_ARGS_ERROR3                 "Command \"%s\" requires at least %d arguments, but %d arguments were given\n"
+#define FLINT_CMD_ARGS_ERROR4                 "Command \"%s\" requires %d or %d arguments, but %d arguments were given\n"
 #define FLINT_INVALID_OPTION_ERROR            "Unknown option \"%s\" for the \"%s\" command. you can use %s.\n"
 #define FLINT_INVALID_FLAG_ERROR              "Invalid switch \"%s\" is specified.\n"
 #define FLINT_INVALID_UID_NUM_BX_ERROR        "Number of UIDs on BridgeX should be %d\n"
 #define FLINT_BX_BAD_MAC_FORMAT_ERROR         "Bad mac ( %4.4x%8.8x ) %s. Please re-burn with a valid MACs value.\n"
 #define FLINT_INVALID_FLAG_WITH_FLAG_ERROR    "Cannot specify \"%s\" flag with \"%s\" flag.\n"
+#define FLINT_INVALID_FLAG_WITHOUT_FLAG_ERROR "\"%s\" flag must be specified with \"%s\" flag.\n"
 #define FLINT_INVALID_FLAG_WITH_CMD_ERROR     "Cannot specify flag: %s with Command: %s\n"
 #define FLINT_CMD_VERIFY_ERROR                "FW image verification failed: %s. AN HCA DEVICE CAN NOT BOOT FROM THIS IMAGE.\n"
 #define FLINT_FAILED_QUERY_ERROR              "Failed to query %s: %s.%s\n"
@@ -93,6 +95,7 @@ typedef enum {
 #define FLINT_FLASH_WRITE_ERROR               "Flash write failed. %s\n"
 #define FLINT_INVALID_DATA_ERROR              "Invalid data \"%s\"\n"
 #define FLINT_INVALID_SIZE_ERROR              "Invalid size \"%s\", Length should be 4-bytes aligned.\n"
+#define FLINT_INVALID_ARG_ERROR               "Invalid argument \"%s\"\n"
 #define FLINT_OPEN_FILE_ERROR                 "Cannot open %s: %s\n"
 #define FLINT_WRITE_FILE_ERROR                "Failed to write to %s: %s\n"
 #define FLINT_IO_OPEN_ERROR                   "Failed to open %s: %s\n"
index bc9d2b76a9e32b5cfb14e004668ef5fe81006649..83c2cdb1a630747eaff399941de40866446a4536 100644 (file)
@@ -2,7 +2,7 @@
  *
  * flint.cpp - FLash INTerface
  *
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
index 8bb86b5ed76acb125b1098bc746c51dfc7217cc1..24b68c7ad1d9fb11e380b53302e729ab8bbca505 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *
- * flint.h - FLash INTerface
+ * flint2.h - FLash INTerface
  *
  * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
index 9c6b460201f52f684ac07064f5250ce7293dc661..f304c4d410aec24356d92b8b5b681877676a0166 100644 (file)
@@ -2,7 +2,7 @@
  *
  * flint_params.cpp - FLash INTerface
  *
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -68,6 +68,7 @@ FlintParams::FlintParams()
     use_image_rom = false;
     dual_image = false;
     striped_image = false;
+    ignore_dev_data = false;
     banks_specified = false;
     banks = 4;
     log_specified = false;
index 37dc8e5eca4b2add80087658da322ff69af70121..c1d1f3da76e260fba71f1e469dbe0bf366c9be3c 100644 (file)
@@ -2,7 +2,7 @@
  *
  * flint_params.h - FLash INTerface
  *
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -119,6 +119,7 @@ public:
     bool use_image_rom;
     bool dual_image;
     bool striped_image;
+    bool ignore_dev_data;
     bool banks_specified;
     int banks;
     bool log_specified;
index 9ca850076ed9fa594c801961e2743376deb4da6f..ca1759efe5474e7a8690d2c780c1d6c6e9f1f7d6 100644 (file)
@@ -42,6 +42,8 @@
 #include <errno.h>
 #include <time.h>
 #include <iostream>
+#include <sstream>
+#include <string>
 
 #include <common/compatibility.h>
 
 
 using namespace std;
 
-#define INDENT "\t\t\t\t\t   "
+#define INDENT "\t\t\t\t\t\t"
 #define INDENTEX "\t"
 
-// The Log file writing implementation
+/***********************************
+ *  Log file writing implementation
+************************************/
 
 //global log file header
 FILE* flint_log_fh = NULL;
@@ -175,6 +179,25 @@ int write_result_to_log(int is_failed, const char* err_msg, bool write)
     }
     return 0;
 }
+/*******************
+ *  Static functions
+ ******************/
+
+static bool str2Num(const char* str, u_int32_t& num) {
+    char* endp;
+    u_int32_t tempNum;
+
+    if (!str) {
+        return false;
+    }
+    tempNum = strtoul(str, &endp, 0);
+    if (*endp) {
+        return false;
+    }
+    num = tempNum;
+    return true;
+}
+
 /*******************
  * Class: Subcommand
  ******************/
@@ -654,10 +677,10 @@ void SubCommand::displayOneExpRomInfo(const rom_info_t& info) {
 
        const char* typeStr = FwOperations::expRomType2Str(info.exp_rom_product_id);
     if (info.exp_rom_product_id == 0xf) {// version id in this case is the freeStr that was moved to exp_rom_ver[0] in mlxfwops
-        printf("devid=%d version_id=%d type=%s", info.exp_rom_dev_id,info.exp_rom_ver[0], typeStr);
+        printf("devid=%d version_id=%d type=%s ", info.exp_rom_dev_id,info.exp_rom_ver[0], typeStr);
     } else {
        if (typeStr) {
-               printf("type=%s", typeStr);
+               printf("type=%s ", typeStr);
        } else {
                 printf("0x%x - Unknown ROM product ID\n", info.exp_rom_product_id);
                 return;
@@ -846,8 +869,7 @@ bool SubCommand::reportGuidChanges(guid_t* new_guids, guid_t* new_macs,\
                                     bool printMacs, bool printUids, int guidNum)
 {
     //should be used ONLY on FS2 in current implementation
-
-    printf("    You are about to change the Guids/Macs/Uids on the device:\n\n");
+    printf("    You are about to change the Guids/Macs/Uids on the %s:\n\n", _flintParams.device_specified ? "device" : "image");
     printf("                        New Values      " GUID_SPACES "Current Values\n");
     if (printUids) {
         printUidsFunc(new_guids, old_guids );
@@ -1001,6 +1023,53 @@ void SubCommand::printMissingGuidErr(bool ibDev, bool ethDev, bool bxDev)
     return;
 }
 
+bool SubCommand::extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGuids, u_int8_t& stepSize){
+    //extract num_of_guids and step_size from numGuidsStr, stepStr
+    u_int32_t tempNumOfGuids = 0;
+    u_int32_t tempStepSize = 0;
+    string tag, valStr;
+    for (std::vector<string>::iterator it = cmdArgs.begin(); it != cmdArgs.end(); it++) {
+        std::stringstream ss((it->c_str()));
+        // get the tag
+        if (!std::getline(ss, tag, '=')) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR,it->c_str());
+            return false;
+        }
+        // get the val
+        if (!std::getline(ss, valStr, '=')) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR,it->c_str());
+            return false;
+        }
+        // make sure no other tokens are present
+        if (!(!std::getline(ss, valStr, '='))) {
+            reportErr(true, FLINT_INVALID_ARG_ERROR,it->c_str());
+            return false;
+        }
+        if (tag == "guids_num") {
+            if (!str2Num(valStr.c_str(), tempNumOfGuids)) {
+                reportErr(true, FLINT_INVALID_ARG_ERROR, it->c_str());
+                return false;
+            }
+        } else if (tag == "step_size") {
+            if (!str2Num(valStr.c_str(), tempStepSize)) {
+                reportErr(true, FLINT_INVALID_ARG_ERROR, it->c_str());
+                return false;
+            }
+        } else {
+            reportErr(true, FLINT_INVALID_ARG_ERROR, it->c_str());
+            return false;
+        }
+    }
+    // perform checks
+    if (tempNumOfGuids <= 0 || tempNumOfGuids >= 256 ||  tempStepSize<=0 || tempStepSize>=256) {
+        reportErr(true, "Invalid argument values, values should be taken from the range [1..255]\n");
+        return false;
+    }
+    numOfGuids = tempNumOfGuids;
+    stepSize = tempStepSize;
+    return true;
+}
+
 /***********************
  *Class: BurnSubCommand
  **********************/
@@ -1071,6 +1140,10 @@ bool BurnSubCommand::verifyParams()
         reportErr(true, FLINT_INVALID_FLAG_WITH_FLAG_ERROR, "-use_image_ps", "-vsd");
         return false;
     }
+    if (_flintParams.ignore_dev_data && !_flintParams.nofs) {
+        reportErr(true, FLINT_INVALID_FLAG_WITHOUT_FLAG_ERROR, "-nofs", "-ignore_dev_data");
+        return false;
+    }
     return true;
 }
 
@@ -1091,6 +1164,7 @@ void BurnSubCommand::updateBurnParams()
     _burnParams.useImageGuids = _flintParams.use_image_guids;
     _burnParams.singleImageBurn = !_flintParams.dual_image;
     _burnParams.noDevidCheck = _flintParams.no_devid_check;
+    _burnParams.useImgDevData = _flintParams.ignore_dev_data;
     if (_burnParams.userGuidsSpecified) {
         _burnParams.userUids = _flintParams.user_guids;
     }
@@ -1187,7 +1261,7 @@ FlintStatus BurnSubCommand::burnFs3()
         return FLINT_FAILED;
         }
     // on FS3 burn we require query to pass
-    if (!_devQueryRes) {
+    if (!_devQueryRes && _burnParams.burnFailsafe) {
         reportErr(true, FLINT_FS3_BURN_ERROR, _fwOps->err());
         return FLINT_FAILED;
     }
@@ -1197,7 +1271,7 @@ FlintStatus BurnSubCommand::burnFs3()
         return FLINT_BURN_ABORTED;
     }
     // check Psid
-    if (!checkPSIDAndIbEth()) {
+    if (_devQueryRes && !checkPSIDAndIbEth()) {
         return FLINT_FAILED;
     }
     // deal with rom
@@ -1211,7 +1285,16 @@ FlintStatus BurnSubCommand::burnFs3()
             return FLINT_FAILED;
         }
     }
-
+    if (!_burnParams.burnFailsafe) {
+        printf("Burn process will not be failsafe. No checks will be performed.\n");
+        if (_burnParams.useImgDevData) {
+            printf("ALL flash, including the device data sections will be overwritten.\n");
+        }
+        printf("If this process fails, computer may remain in an inoperable state.\n");
+        if (!askUser()) {
+            return FLINT_FAILED;
+        }
+    }
     if (!_fwOps->FwBurnAdvanced(_imgOps, _burnParams)) {
         reportErr(true, FLINT_FS3_BURN_ERROR, _fwOps->err());
         return FLINT_FAILED;
@@ -1219,6 +1302,10 @@ FlintStatus BurnSubCommand::burnFs3()
     PRINT_PROGRESS(_burnParams.progressFunc, 101);
 
     write_result_to_log(FLINT_SUCCESS, "", _flintParams.log_specified);
+    const char* resetRec = _fwOps->FwGetResetRecommandationStr();
+    if (resetRec) {
+        printf("-I- %s\n", resetRec);
+    }
     return FLINT_SUCCESS;
 }
 
@@ -1428,7 +1515,7 @@ void BurnSubCommand::dealWithExpRom()
     if (cond) {
         // Enter here when:
         //                  The fw on the flash is OK (passed query, and it should pass verify in mlxfwops) &&
-        //                  ( The device is hermon ||  golan    )&&
+        //                  ( The device is connectx ||  connectib    )&&
         //                  The image fw supports modifying ROM OR it contains ROM &&.
         //                  The user didn't ask to burn the image rom. &&
         //                  The  fw on the flash doesn't contain product version
@@ -2259,14 +2346,17 @@ SgSubCommand:: SgSubCommand()
                 INDENTEX"flint will re-burn the current image using the given GUIDs/MACs/UIDs.";
     _flagLong = "sg";
     _flagShort = "";
-    _param = "[nocrc]";
+    _param = "[guids_num=<num> step_size=<size>] | [nocrc]";
     _paramExp = "nocrc: (optional) When specified the flint would not update\n"
-                INDENTEX"the full image crc after changing the guids";
+                INDENTEX"the full image crc after changing the guids\n"
+                INDENTEX"num_of_guids: number of GUIDs to be allocated per physical port (FS3 Only)\n"
+                INDENTEX"step_size: step size between GUIDs (FS3 Only)";
     _example = FLINT_NAME" -d "MST_DEV_EXAMPLE1" -guid 0x0002c9000100d050 sg";
     _v = Wtv_Dev_Or_Img;
     _cmdType = SC_Sg;
     _ops     = NULL;
     memset(&_info, 0, sizeof(_info));
+    memset(&_sgParams, 0, sizeof(_sgParams));
 }
 
 SgSubCommand:: ~SgSubCommand()
@@ -2276,11 +2366,14 @@ SgSubCommand:: ~SgSubCommand()
 
 bool SgSubCommand::verifyParams()
 {
-    if (_flintParams.cmd_params.size() == 1 && _flintParams.cmd_params[0] != "nocrc") {
-        reportErr(true, "The sg parameter should be \"nocrc\" or nothing\n");
+    if ((_flintParams.cmd_params.size() == 1 && _flintParams.cmd_params[0] != "nocrc")||\
+            (_flintParams.cmd_params.size() == 2 && \
+                    !extractUIDArgs(_flintParams.cmd_params, _sgParams.numOfGUIDs, _sgParams.stepSize))) {
+        reportErr(true, "The sg parameter should be \"nocrc\", \"guids_num=<num> step_size=<size>\" or nothing\n");
         return false;
-        }
-    if (_flintParams.cmd_params.size()> 1) {
+    }
+
+    if (_flintParams.cmd_params.size()> 2) {
         reportErr(true, FLINT_CMD_ARGS_ERROR2,_name.c_str(), 1, (int)_flintParams.cmd_params.size());
         return false;
     }
@@ -2371,6 +2464,9 @@ FlintStatus SgSubCommand::sgFs2()
 {
     //different behaviours for fs2 device with blank guids and fs2 device with guids or image
     //different behaviour if isfailesafe or not
+    if (_flintParams.cmd_params.size() > 1) {
+        reportErr(true, FLINT_CMD_ARGS_ERROR2, _name.c_str(), 1, _flintParams.cmd_params.size());
+    }
 
     if (_flintParams.device_specified && !_info.fs2_info.blank_guids) {
         // 2- FS2 device with no blank Guids
@@ -2408,7 +2504,7 @@ FlintStatus SgSubCommand::sgFs2()
 FlintStatus SgSubCommand::sgFs3()
 {
     if ( _flintParams.uid_specified) {
-        // for golan we just need the base guid so we put it in the first location.
+        // for connectib we just need the base guid so we put it in the first location.
         _sgParams.userGuids.resize(1);
         _sgParams.userGuids[0]= _flintParams.baseUid;
         if (!_ops->FwSetGuids(_sgParams, &verifyCbFunc)) {
@@ -2452,8 +2548,9 @@ SmgSubCommand:: SmgSubCommand()
                 INDENTEX"Use -uid flag to set the desired GUIDs, intended for production use only.";
     _flagLong = "smg";
     _flagShort = "";
-    _param = "";
-    _paramExp = "None";
+    _param = "[guids_num=<num> step_size=<size>]";
+    _paramExp = "guids_num: number of GUIDs to be allocated per physical port\n"
+                INDENTEX"step_size: step size between GUIDs";
     _example = FLINT_NAME" -i fw_image.bin -uid 0x0002c9000100d050 smg"
 #ifndef __WIN__
                "\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE3" -uid 0x0002c9000100d050 smg (should be used when device is idle)"
@@ -2461,8 +2558,7 @@ SmgSubCommand:: SmgSubCommand()
                ;
     _v = Wtv_Dev_Or_Img;
     _cmdType = SC_Smg;
-    _baseGuid.h = 0;
-    _baseGuid.l = 0;
+    memset(&_baseGuid, 0, sizeof(_baseGuid));
 }
 
 SmgSubCommand:: ~SmgSubCommand()
@@ -2480,7 +2576,17 @@ bool SmgSubCommand::verifyParams()
         reportErr(true, FLINT_INVALID_OPTION_ERROR, "\"-uids\"", _name.c_str(), "\"-uid\"");
         return false;
     }
-    _baseGuid = _flintParams.baseUid;
+
+    if (_flintParams.cmd_params.size() != 0 && _flintParams.cmd_params.size() != 2) {
+        reportErr(true, FLINT_CMD_ARGS_ERROR4, _name.c_str(), 0, 2, _flintParams.cmd_params.size());
+        return false;
+    }
+
+    if (_flintParams.cmd_params.size() == 2 &&\
+        !extractUIDArgs(_flintParams.cmd_params, _baseGuid.num_of_guids, _baseGuid.step_size)) {
+        return false;
+    }
+    _baseGuid.uid = _flintParams.baseUid;
     //printf("-D-"GUID_FORMAT"\n", _baseGuid.h, _baseGuid.l);
     return true;
 }
@@ -2492,14 +2598,19 @@ FlintStatus SmgSubCommand::executeCommand()
     }
     FwOperations *ops = _flintParams.device_specified ? _fwOps : _imgOps;
     //TODO: dispaly MFG guid changes
-    if (!ops->FwSetMFG(_baseGuid, &verifyCbFunc)) {
+    bool ret;
+    if (_flintParams.cmd_params.size() == 2) {
+        ret = ops->FwSetMFG(_baseGuid, &verifyCbFunc);
+    } else {
+        ret = ops->FwSetMFG(_baseGuid.uid, &verifyCbFunc);
+    }
+    if (!ret) {
         reportErr(true, FLINT_MFG_ERROR, ops->err());
         return FLINT_FAILED;
     }
     return FLINT_SUCCESS;
 }
 
-
 /***********************
  *Class: Set Vpd Subcommand
  **********************/
@@ -2718,7 +2829,7 @@ FlintStatus DcSubCommand::executeCommand() {
     //check on what we are wroking
     ops = (_flintParams.device_specified) ? _fwOps : _imgOps;
     const char* file = _flintParams.cmd_params.size() == 1 ? _flintParams.cmd_params[0].c_str() : (const char*) NULL;
-    if (!ops->FwGetSection(H_FW_CONF, _sect)) {
+    if (!ops->FwGetSection(H_FW_CONF, _sect, _flintParams.striped_image)) {
         reportErr(true, FLINT_DUMP_ERROR, "Fw Configuration", ops->err());
         return FLINT_FAILED;
     }
@@ -2769,7 +2880,7 @@ FlintStatus DhSubCommand::executeCommand() {
     //check on what we are wroking
     ops = (_flintParams.device_specified) ? _fwOps : _imgOps;
     const char* file = _flintParams.cmd_params.size() == 1 ? _flintParams.cmd_params[0].c_str() : (const char*) NULL;
-    if (!ops->FwGetSection(H_HASH_FILE, _sect)) {
+    if (!ops->FwGetSection(H_HASH_FILE, _sect,  _flintParams.striped_image)) {
         reportErr(true, FLINT_DUMP_ERROR, "Hash file", ops->err());
         return FLINT_FAILED;
     }
index 1d42ab506db466490e0331f8bfdf3809fd4f148e..b7bfb4f4627d20678cf9a80374140e99c094d282 100644 (file)
@@ -127,6 +127,7 @@ protected:
             bool guidsSpecified, bool macsSpecified, bool uidsSpecified);
     void printMissingGuidErr(bool ibDev, bool ethDev, bool bxDev);
 
+    bool extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGuids, u_int8_t& stepSize);
     bool getGUIDFromStr(string str, guid_t& guid, string prefixErr="");
     bool  getPasswordFromUser(const char *preStr, char buffer[MAX_PASSWORD_LEN+1]);
     bool askUser(const char* question=NULL, bool printAbrtMsg=true);
@@ -296,7 +297,7 @@ public:
 class SmgSubCommand : public SubCommand
 {
 private:
-    guid_t _baseGuid;
+    fs3_guid_t _baseGuid;
 public:
     SmgSubCommand();
     ~SmgSubCommand();
index 89166f950ec373a7113f4317038e2840ae2919b5..c1614817e0ec1fc046b880e4a89169802e13fafb 100644 (file)
@@ -1,6 +1,4 @@
 /*
- *  mtcr.h - Mellanox Software tools (mst) driver definitions
- *
  * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
  *
  * This software is available to you under a choice of one of two
@@ -12,7 +10,7 @@
  *     Redistribution and use in source and binary forms, with or
  *     without modification, are permitted provided that the following
  *     conditions are met:
- * 
+ *
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
@@ -21,7 +19,7 @@
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -102,6 +100,16 @@ typedef enum MError {
     ME_CMDIF_BAD_OP,
     ME_CMDIF_NOT_SUPP,
     ME_CMDIF_BAD_SYS,
+    ME_CMDIF_UNKN_TLV,
+
+    //errors regarding MAD IF
+    ME_MAD_BUSY = 0x400,
+    ME_MAD_REDIRECT,
+    ME_MAD_BAD_VER,
+    ME_MAD_METHOD_NOT_SUPP,
+    ME_MAD_METHOD_ATTR_COMB_NOT_SUPP,
+    ME_MAD_BAD_DATA,
+    ME_MAD_GENERAL_ERR,
 
     ME_LAST
 } MError;
index f7289a73c2e0bb3c305e66adf2c4a6f55b4c1546..a68f4c9ced32d8d687bbdfa67b3b4af066cb6e54 100644 (file)
@@ -1,5 +1,5 @@
 .\"Text automatically generated by txt2man
-.TH mstflint 3.6.0  "December 2013" "" ""
+.TH mstflint 3.7.0  "August 2014" "" ""
 .SH NAME
 \fBmstflint \fP- Mellanox Technologies Firmware Update Tool
 .SH SYNOPSIS
@@ -251,6 +251,13 @@ Commands affected: burn
 Commands affected: burn
 .TP
 .B
+\fB--ignore_dev_data\fP
+: Do not attempt to take device data sections
+from device(sections will be taken from
+the image. FS3 Only).
+Commands affected: burn
+.TP
+.B
 \fB--dual_image\fP
 : Make the burn process burn two images on 
 flash (previously default algorithm). Currentdefault 
@@ -330,7 +337,7 @@ bb
 .TP
 .B
 sg
-[nocrc]                         : Set GUIDs.
+[guids_num=<num> step_size=<size>] | [nocrc] : Set GUIDs.
 .TP
 .B
 smg
@@ -573,7 +580,7 @@ If the GUIDs/MACs/UIDs in the image on flash are non-blank,
 .IP
 mstflint will re-burn the current image using the given GUIDs/MACs/UIDs.
 .IP
-\fICommand\fP: sg [nocrc]
+\fICommand\fP: sg [guids_num=<num> step_size=<size>] | [nocrc]
 .IP
 \fIParameters\fP:
 .IP
@@ -581,6 +588,10 @@ nocrc: (optional) When specified the mstflint would not update
 .IP
 the full image crc after changing the guids
 .IP
+num_of_guids: number of GUIDs to be allocated per physical port (FS3 Only)
+.IP
+step_size: step size between GUIDs (FS3 Only)
+.IP
 \fIExamples\fP:
 .IP \(bu 4
 mstflint \fB-d\fP 03:00.0 \fB-guid\fP 0x0002c9000100d050 sg
@@ -596,9 +607,13 @@ mstflint \fB-d\fP 03:00.0 \fB-guid\fP 0x0002c9000100d050 sg
 .IP
 Use \fB-uid\fP flag to set the desired GUIDs.
 .IP
-\fICommand\fP: smg
+\fICommand\fP: smg [guids_num=<num> step_size=<size>]
 .IP
-\fIParameters\fP: None
+\fIParameters\fP:
+.IP
+num_of_guids: number of GUIDs to be allocated per physical port
+.IP
+step_size: step size between GUIDs
 .IP
 \fIExamples\fP:
 .IP \(bu 4
index 504c69d7e701b9430a564d7936144a0a56701311..1dc9477afcecd6de0408e6c5dd7fee6170b8fa68 100644 (file)
@@ -34,7 +34,6 @@
 
 // TODO: remove all commented defines and ifdefs of __be32.... or __cpu_to_be32... etc (they are taken from compatibility.h now)
 #ifdef IRISC
-#include <tavor_mac.h>
 //#define __cpu_to_be32(val) (val)
 #define NULL 0
 
 
 #include <io.h>
 #include <Winsock2.h>
+#include <windows.h>
 #define SWAPL(l) ntohl(l)
 #define inline __inline
 
 #define OP_NOT_SUPPORTED EINVAL
-#define usleep(x) Sleep(((x + 999)/1000) )
+#define usleep(x) Sleep(((x + 999)/1000))
 
 #endif // __WIN__
 #endif
 int mf_open_fw(mflash* mfl, flash_params_t* flash_params, int num_of_banks);
 int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* status, u_int8_t data_num);
 
+// forward decl:
+int mfl_com_lock(mflash* mfl);
+int release_semaphore(mflash* mfl, int ignore_writer_lock);
+
 
 // NOTE: This macro returns ... not nice.
 #define CHECK_RC(rc) do {if (rc) return rc;} while(0)
+#define CHECK_RC_REL_SEM(mfl, rc) do {if (rc) {release_semaphore(mfl, 0); return rc;}} while(0)
 
 #define ARRSIZE(arr) (sizeof(arr)/sizeof(arr[0]))
 
@@ -176,7 +181,7 @@ int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* statu
 #define CPUMODE        0xf0150
 
 #define SWITCHX_HW_ID 0x245
-#define HERMON_HW_ID  0x190
+#define CONNECTX_HW_ID  0x190
 #define CX3_PRO_HW_ID 0x1F7
 #define CX3_HW_ID     0x1F5
 #define CX4_HW_ID        0x209
@@ -207,7 +212,11 @@ enum FlashConstant {
     ERASE_SUBSECTOR_RETRIES      = 10000,
 
     FLASH_CMD_CNT  = 5000,      // Number of reads till flash cmd is zeroed
-    GPIO_SEM_TRIES = 1024 ,     // Number of tries to obtain a GPIO sem.
+#ifdef __WIN__
+    GPIO_SEM_TRIES = 1024 ,
+#else
+    GPIO_SEM_TRIES = 4096 ,     // Number of tries to obtain a GPIO sem.
+#endif
     MAX_WRITE_BUFFER_SIZE = 256 // Max buffer size for buffer write devices
 };
 
@@ -777,7 +786,6 @@ int spi_fill_attr_from_params(mflash* mfl, flash_params_t* flash_params, unsigne
 
 #define GET_FLASH_RETRY 2
 int st_spi_fill_attr(mflash* mfl, flash_params_t* flash_params) {
-
     int rc;
     flash_params_t *cur_flash_params, tmp_flash_params;
     unsigned type_index;
@@ -1036,9 +1044,9 @@ int empty_set_bank(mflash* mfl, u_int32_t bank) {
 }
 
 int is_connectx_family(u_int32_t dev_id) {
-    if (dev_id == HERMON_HW_ID ||  // Hermon
-        dev_id == CX3_HW_ID || // CX3
-        dev_id == CX3_PRO_HW_ID) {     // Bental
+    if (dev_id == CONNECTX_HW_ID ||
+        dev_id == CX3_HW_ID ||
+        dev_id == CX3_PRO_HW_ID) {
         return 1;
     }
     return 0;
@@ -1107,6 +1115,90 @@ int cntx_exec_cmd(mflash* mfl, u_int32_t gw_cmd, char* msg) {
     return gw_wait_ready(mfl, msg);
 }
 
+/*
+ * execute a flash GW command and get the output: data0...data3 from the flash interface
+ *
+ * mfl - pointer to an initilized mflash obj
+ * gw_cmd - the flash gateway command to execute
+ * buff - pointer to a buffer where the output data from the flash GW will be written to
+ * buff_dword_sz - size for buff in dwords
+ * addr - if != NULL *addr will be written to the addr bits of the flash GW. (for commands that read from flash)
+ * msg - optional string that describes the action for debug purposes, not used ATM however its recommended to put usefull
+ *        data for future dubugabillity.
+ * return : MFE_OK (0) upon success or a value != 0 upon error accroding to mlfash error code.
+ */
+int cntx_exec_cmd_get(mflash* mfl, u_int32_t gw_cmd, u_int32_t* buff,int buff_dword_sz, u_int32_t* addr, char* msg)
+{
+    int rc;
+    if (!mfl ||!buff || !buff_dword_sz) {
+        return MFE_BAD_PARAMS;
+    }
+
+    rc = mfl_com_lock(mfl); CHECK_RC(rc);
+
+    // write GW addr if needed
+    if (addr) {
+        if (mwrite4(mfl->mf, HCR_FLASH_ADDR, *addr) != 4) {
+            release_semaphore(mfl, 0);
+            return MFE_CR_ERROR;
+        }
+    }
+    // execute gw command
+    rc = cntx_exec_cmd(mfl, gw_cmd, msg); CHECK_RC_REL_SEM(mfl, rc);
+    // copy data from CR-space to buff
+    if (mread4_block(mfl->mf, HCR_FLASH_DATA, buff, (buff_dword_sz << 2)) != (buff_dword_sz << 2 )) {
+        release_semaphore(mfl, 0);
+        return MFE_CR_ERROR;
+    }
+    //release semaphore
+    release_semaphore(mfl, 0);
+    return MFE_OK;
+}
+
+/*
+ * Set input in: data0...data3 from the flash interface and execute a flash GW command
+ *
+ * mfl - pointer to an initilized mflash obj
+ * gw_cmd - the flash gateway command to execute
+ * buff - if != NULL pointer to a buffer to the input data for the flash GW.
+ * buff_dword_sz - size for buff in dwords
+ * addr - if != NULL *addr will be written to the addr bits of the flash GW. (for commands that write from flash)
+ * msg - optional string that describes the action for debug purposes, not used ATM however its recommended to put usefull
+ *        data for future dubugabillity.
+ * return : MFE_OK (0) upon success or a value != 0 upon error accroding to mlfash error code.
+ */
+int cntx_exec_cmd_set(mflash* mfl, u_int32_t gw_cmd, u_int32_t* buff,int buff_dword_sz, u_int32_t* addr, char* msg)
+{
+    int rc;
+    if (!mfl) {
+        return MFE_BAD_PARAMS;
+    }
+
+    rc = mfl_com_lock(mfl); CHECK_RC(rc);
+
+    // write data from buff to CR-space
+    if (buff && buff_dword_sz) {
+        if (mwrite4_block(mfl->mf, HCR_FLASH_DATA, buff, (buff_dword_sz << 2)) != (buff_dword_sz << 2 )) {
+            release_semaphore(mfl, 0);
+            return MFE_CR_ERROR;
+        }
+    }
+
+    // write GW addr if needed
+    if (addr) {
+        if (mwrite4(mfl->mf, HCR_FLASH_ADDR, *addr) != 4) {
+            release_semaphore(mfl, 0);
+            return MFE_CR_ERROR;
+        }
+    }
+    // execute gw command
+    rc = cntx_exec_cmd(mfl, gw_cmd, msg); CHECK_RC_REL_SEM(mfl, rc);
+
+    //release semaphore
+    release_semaphore(mfl, 0);
+    return MFE_OK;
+}
+
 int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* status, u_int8_t data_num)
 {
     int rc;
@@ -1121,9 +1213,8 @@ int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* statu
 
     gw_cmd = MERGE(gw_cmd, op_type, HBO_CMD,        HBS_CMD);
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "Read id");  CHECK_RC(rc);
 
-    MREAD4(HCR_FLASH_DATA, &flash_data);
+    rc = cntx_exec_cmd_get(mfl, gw_cmd, &flash_data, 1, NULL, "Read id");  CHECK_RC(rc);
 
     // printf("-D- cntx_int_spi_get_status_data: op=%02x status=%08x\n", op_type, flash_data);
     // Return status reg byte is at offset 3 in word
@@ -1140,7 +1231,7 @@ int cntx_st_spi_write_enable(mflash* mfl) {
     gw_cmd = MERGE(gw_cmd, SFC_WREN, HBO_CMD,       HBS_CMD);
 
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "WREN command"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_set(mfl, gw_cmd, NULL, 0, NULL, "WREN command"); CHECK_RC(rc);
 
     //gw_cmd =  MERGE(gw_cmd, 1               , HBO_CS_HOLD,    1);
 
@@ -1219,10 +1310,7 @@ int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_
     if (status_is_double) {
         gw_cmd = MERGE(gw_cmd, 1, HBO_MSIZE,      HBS_MSIZE);
     }
-    MWRITE4(HCR_FLASH_DATA, status_reg);
-
-    return cntx_exec_cmd(mfl, gw_cmd, "Write-Status-Register");
-
+    return cntx_exec_cmd_set(mfl, gw_cmd, &status_reg, 1, NULL, "Write-Status-Register");
 }
 
 
@@ -1377,9 +1465,6 @@ int cntx_st_spi_block_read_ex  (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_s
         gw_cmd = MERGE(gw_cmd, SFC_READ        , HBO_CMD,        HBS_CMD);
 
         rc = get_flash_offset(blk_addr, mfl->attr.log2_bank_size, &gw_addr); CHECK_RC(rc);
-        //printf("-D- cntx_st_spi_block_read_ex: write to gateway\n");
-        MWRITE4(HCR_FLASH_ADDR, gw_addr);
-
     }
     //printf("-D- gw_addr = %#x, gw_cmd = %#x, blk_addr = %#x, mfl->attr.log2_bank_size = %#x\n", gw_addr, gw_cmd, blk_addr, mfl->attr.log2_bank_size);
     if (!is_last) {
@@ -1391,14 +1476,14 @@ int cntx_st_spi_block_read_ex  (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_s
     gw_cmd = MERGE(gw_cmd, 1, HBO_DATA_PHASE,        1);
     gw_cmd = MERGE(gw_cmd, log2up(blk_size), BO_MSIZE,       BS_MSIZE);
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "Read"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_get(mfl, gw_cmd,(u_int32_t*)data, (blk_size >> 2), &gw_addr, "Read"); CHECK_RC(rc);
 
-    //if (mread_by_chunks(mfl->mf, HCR_FLASH_DATA, data, blk_size) != (int)blk_size) {
-    if (mread4_block(mfl->mf, HCR_FLASH_DATA, (u_int32_t*)data, blk_size) != (int)blk_size) {
-        return 2;
+    ////if (mread_by_chunks(mfl->mf, HCR_FLASH_DATA, data, blk_size) != (int)blk_size) {
+    //if (mread4_block(mfl->mf, HCR_FLASH_DATA, (u_int32_t*)data, blk_size) != (int)blk_size) {
+    //    return 2;
         //fprintf(stderr, "-E- Cr read (0x%08x) failed: %s(%d)\n", HCR_FLASH_DATA, strerror(errno), (u_int32_t)errno);
         //exit(2);
-    }
+    //}
 
     for (i = 0; i < blk_size ; i+= 4) {
         *(u_int32_t*)(data + i) = __be32_to_cpu(*(u_int32_t*)(data + i));
@@ -1433,15 +1518,12 @@ int cntx_st_spi_block_read_old  (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_
     gw_cmd = MERGE(gw_cmd, SFC_READ, HBO_CMD,       HBS_CMD);
 
     gw_addr = blk_addr & ONES32(mfl->attr.log2_bank_size);
-    MWRITE4(HCR_FLASH_ADDR, gw_addr);
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "Read"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_get(mfl, gw_cmd, (u_int32_t*)data, (blk_size >> 2), &gw_addr, "Read"); CHECK_RC(rc);
 
     // Data:
     for (offs = 0 ; offs < blk_size ; offs += 4) {
-        u_int32_t word;
-        MREAD4(HCR_FLASH_DATA + offs, &word);
-        *((u_int32_t*)(data + offs))= __cpu_to_be32(word);
+        *((u_int32_t*)(data + offs))= __cpu_to_be32(*((u_int32_t*)(data + offs)));
     }
 
     return MFE_OK;
@@ -1528,8 +1610,6 @@ int cntx_st_spi_block_write_ex (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_s
         gw_cmd = MERGE(gw_cmd, SFC_PP          , HBO_CMD,        HBS_CMD);
         gw_addr = blk_addr & ONES32(mfl->attr.log2_bank_size);
         //printf("-D- gw_addr = %#x, blk_addr = %#x\n", gw_addr, blk_addr);
-
-        MWRITE4(HCR_FLASH_ADDR, gw_addr);
     }
 
     if (!is_last) {
@@ -1549,13 +1629,7 @@ int cntx_st_spi_block_write_ex (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_s
         //printf("-D- word = %#x, %d\n", word, HBS_CMD);
     }
 
-    if (mwrite4_block(mfl->mf, HCR_FLASH_DATA, buff, blk_size) != (int)blk_size) {
-        return 2;
-        // fprintf(stderr, "-E- Cr chunk write (0x%08x) failed: %s(%d)\n", HCR_FLASH_DATA, strerror(errno), (u_int32_t)errno);
-        // exit(2);
-    }
-
-    rc = cntx_exec_cmd(mfl, gw_cmd, "PP command"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_set(mfl, gw_cmd, buff, (blk_size >> 2), &gw_addr, "PP command"); CHECK_RC(rc);
 
     //
     // Wait for end of write in flash (WriteInProgress = 0):
@@ -1592,16 +1666,14 @@ int cntx_sst_spi_block_write_ex (mflash* mfl, u_int32_t blk_addr, u_int32_t blk_
     gw_cmd = MERGE(gw_cmd, 0x02            , HBO_CMD,        HBS_CMD);
 
     gw_addr = blk_addr & ONES32(mfl->attr.log2_bank_size);
-    MWRITE4(HCR_FLASH_ADDR, gw_addr);
 
     //gw_cmd = MERGE(gw_cmd, 1               , HBO_CS_HOLD,    1);
 
     word = MERGE(word, data[0] , 24 , 8);
 
     //printf("-D- data[0] = %#x, gw_addr = %#x, word = %#x, gw_cmd = %#x\n", data[0], gw_addr, word, gw_cmd);
-    MWRITE4(HCR_FLASH_DATA, word);
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "PB command"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_set(mfl, gw_cmd, &word, 1, &gw_addr, "PB command"); CHECK_RC(rc);
 
     rc = st_spi_wait_wip(mfl, 0, 0, 50000); CHECK_RC(rc); // Full throttle polling - no cpu optimization for this flash
 
@@ -1629,11 +1701,9 @@ int cntx_st_spi_erase_sect(mflash* mfl, u_int32_t addr) {
 
     gw_addr = addr & ONES32(mfl->attr.log2_bank_size);
 
-    MWRITE4(HCR_FLASH_ADDR, gw_addr);
-
     // printf("-D- cntx_st_spi_erase_sect: addr = %#x, gw_cmd = %#x.\n", addr, gw_cmd);
 
-    rc = cntx_exec_cmd(mfl, gw_cmd, "ES"); CHECK_RC(rc);
+    rc = cntx_exec_cmd_set(mfl, gw_cmd, NULL, 0, &gw_addr, "ES"); CHECK_RC(rc);
 
     // Wait for erase completion
     rc = st_spi_wait_wip(mfl, ERASE_SUBSECTOR_INIT_DELAY, ERASE_SUBSECTOR_RETRY_DELAY, ERASE_SUBSECTOR_RETRIES); CHECK_RC(rc);
@@ -1653,18 +1723,27 @@ f_mf_write get_write_blk_func(int command_set)
 int old_flash_lock(mflash* mfl, int lock_state) {
 
     // Obtain GPIO Semaphore
-    u_int32_t cnt=0;
+    static u_int32_t cnt=0;
     u_int32_t word;
     if (lock_state) {
         do {
             if (++cnt > GPIO_SEM_TRIES) {
+                cnt = 0;
                 //printf("-E- Can not obtain Flash semaphore");
                 return MFE_SEM_LOCKED;
             }
             MREAD4(SEMAP63, &word);
+            if (word) {
+                usleep(1);
+            }
         } while (word);
     } else {
         MWRITE4(SEMAP63, 0);
+        if (cnt > 1) {
+            // we are not alone...
+            usleep(1);
+        }
+        cnt = 0;
     }
 
     mfl->is_locked = (lock_state != 0);
@@ -1689,7 +1768,6 @@ int cntx_flash_init(mflash* mfl, flash_params_t* flash_params) {
 
     }
 
-
     //TODO: Enable page_read (slightly better perf)
     //mfl->f_read           = cntx_st_spi_page_read;
     mfl->f_read           = read_chunks;
@@ -1698,19 +1776,12 @@ int cntx_flash_init(mflash* mfl, flash_params_t* flash_params) {
     mfl->f_set_bank       = empty_set_bank;
     mfl->f_get_info       = cntx_get_flash_info;
 
-
-    rc = mfl->f_lock(mfl, 1);
-    if (!mfl->opts[MFO_IGNORE_SEM_LOCK]) {
-        CHECK_RC(rc);
-    } else {
-        mfl->is_locked = 1;
-    }
     //if (is_life_fish) {
     //    rc = cntx_init_gpios(mfl);  CHECK_RC(rc);
     //}
 
-
     mfl->f_spi_status = cntx_st_spi_get_status;
+    mfl->supp_sr_mod = 1;
 
     rc = st_spi_fill_attr(mfl, flash_params);   CHECK_RC(rc);
 
@@ -1740,18 +1811,29 @@ int is4_init_gpios(mflash* mfl) {
 
 int is4_flash_lock(mflash* mfl, int lock_state) {
     // Obtain GPIO Semaphore
-    u_int32_t cnt=0;
+    static u_int32_t cnt=0;
     u_int32_t word;
+    u_int32_t lock_status= 0;
     if (lock_state) {
         do {
             if (++cnt > GPIO_SEM_TRIES) {
+                cnt = 0;
                 //printf("-E- Can not obtain Flash semaphore");
                 return MFE_SEM_LOCKED;
             }
             MREAD4(HCR_FLASH_CMD , &word);
-        } while (EXTRACT(word, HBO_LOCK, 1));
+            lock_status = EXTRACT(word, HBO_LOCK, 1);
+            if (lock_status) {
+                usleep(1);
+            }
+        } while (lock_status);
     } else {
         MWRITE4(HCR_FLASH_CMD, 0);
+        if (cnt > 1) {
+            // we are not alone
+            usleep(1);
+        }
+        cnt = 0;
     }
 
     mfl->is_locked = (lock_state != 0);
@@ -1854,6 +1936,10 @@ int check_cache_replacement_gaurd(mflash* mfl, u_int8_t *needs_cache_replacement
 int mfl_com_lock(mflash* mfl)
 {
     int rc;
+    // if we already locked the semaphore we dont want to re-lock it
+    if (mfl->is_locked) {
+        return MFE_OK;
+    }
     rc = mfl->f_lock(mfl, 1);
     if (!mfl->opts[MFO_IGNORE_SEM_LOCK]) {
         CHECK_RC(rc);
@@ -1863,7 +1949,15 @@ int mfl_com_lock(mflash* mfl)
     return MFE_OK;
 }
 
-// ConnectX and Shaldag flash interfaces are identical (except lock function)
+int release_semaphore(mflash* mfl, int ignore_writer_lock) {
+    int rc;
+    if (mfl->is_locked && mfl->f_lock && (!mfl->writer_lock || ignore_writer_lock)) {
+        rc = mfl->f_lock(mfl, 0); CHECK_RC(rc);
+    }
+    return MFE_OK;
+}
+
+// ConnectX and Is4 flash interfaces are identical (except lock function)
 // Use same functions
 //
 // TODO: Unify fith ConnectX inif function
@@ -1880,13 +1974,12 @@ int gen4_flash_init_com(mflash* mfl, flash_params_t* flash_params, u_int8_t init
     mfl->f_get_info       = cntx_get_flash_info;
 
 
-    rc = mfl_com_lock(mfl); CHECK_RC(rc);
-
     if (init_cs_support) {
         // Update the chip_select_support according to the banks number of cs.
         rc = sx_init_cs_support(mfl);  CHECK_RC(rc);
     }
     mfl->f_spi_status = cntx_st_spi_get_status;
+    mfl->supp_sr_mod = 1;
 
     rc = st_spi_fill_attr(mfl, flash_params);   CHECK_RC(rc);
 
@@ -1999,8 +2092,8 @@ int flash_init_inband_access(mflash* mfl, flash_params_t* flash_params)
     mfl->f_read_blk   = sx_block_read;
     mfl->f_spi_status = empty_get_status;
 
-    // Lock the FW semaphore which synchronizes between multiple processes
-    rc = mfl_com_lock(mfl); CHECK_RC(rc);
+    mfl->supp_sr_mod = 0;
+
     // Get the flash attribute
     rc = st_spi_fill_attr(mfl, flash_params);   CHECK_RC(rc);
     update_max_write_size(mfl); CHECK_RC(rc);
@@ -2023,9 +2116,8 @@ int uefi_flash_init(mflash* mfl, flash_params_t* flash_params)
     mfl->f_read_blk   = sx_block_read;
     mfl->f_spi_status = empty_get_status;
 
+    mfl->supp_sr_mod = 0;
 
-    // Lock the FW semaphore which synchronizes between multiple processes
-    rc = mfl_com_lock(mfl); CHECK_RC(rc);
     // Get the flash attribute
 
     rc = st_spi_fill_attr(mfl, flash_params);   CHECK_RC(rc);
@@ -2076,7 +2168,7 @@ int icmd_init(mflash *mfl)
 #else
 
 int icmd_init(mflash *mfl) {
-       (void)mfl;
+       mfl = NULL;
        return MFE_NOT_IMPLEMENTED;
 }
 #endif
@@ -2119,6 +2211,9 @@ int     mf_read        (mflash* mfl, u_int32_t addr, u_int32_t len, u_int8_t* da
 
 int     mf_write       (mflash* mfl, u_int32_t addr, u_int32_t len, u_int8_t* data) {
     CHECK_OUT_OF_RANGE(addr, len, mfl->attr.size);
+    // Locking semaphore for the entire existence of the mflash obj for write and erase only.
+    int rc = mfl_com_lock(mfl); CHECK_RC(rc);
+    mfl->writer_lock = 1;
     return mfl->f_write(mfl, addr, len, data);
 }
 
@@ -2126,6 +2221,9 @@ int     mf_erase_sector(mflash* mfl, u_int32_t addr) {
     if (addr >= mfl->attr.size) {
         return MFE_OUT_OF_RANGE;
     }
+    // Locking semaphore for the entire existence of the mflash obj for write and erase only.
+    int rc = mfl_com_lock(mfl); CHECK_RC(rc);
+    mfl->writer_lock = 1;
     return mfl->f_erase_sect(mfl, addr);
 }
 
@@ -2214,7 +2312,7 @@ int mf_open_fw(mflash* mfl, flash_params_t* flash_params, int num_of_banks)
         }
         CHECK_RC(rc);
     } else if (mfl->access_type == MFAT_UEFI) {
-        mfl->opts[MFO_NUM_OF_BANKS] = 1; // We have only one flash in Golan and ConnectX-3 - Need to specify it better!
+        mfl->opts[MFO_NUM_OF_BANKS] = 1; // We have only one flash in ConnectIB and ConnectX-3 - Need to specify it better!
         rc = uefi_flash_init(mfl, flash_params); CHECK_RC(rc);
     } else {
         return MFE_UNKOWN_ACCESS_TYPE;
@@ -2291,14 +2389,6 @@ int     mf_open        (mflash** pmfl, const char* dev, int num_of_banks, flash_
     return MFE_OK;
 }
 
-int release_semaphore(mflash* mfl) {
-    int rc;
-    if (mfl->is_locked && mfl->f_lock) {
-        rc = mfl->f_lock(mfl, 0); CHECK_RC(rc);
-    }
-    return MFE_OK;
-}
-
 int     mf_close       (mflash* mfl) {
     if (!mfl) {
         return MFE_BAD_PARAMS;
@@ -2311,8 +2401,8 @@ int     mf_close       (mflash* mfl) {
     if (mfl->f_set_bank) {
         set_bank(mfl, 0);
     }
-
-    release_semaphore(mfl);
+    // we release if we have writer_lock or not doesnt matter on close ...
+    release_semaphore(mfl, 1);
 
     if (mfl->mf && (mfl)->opts[MFO_CLOSE_MF_ON_EXIT]) {
         mclose(mfl->mf);
@@ -2537,7 +2627,7 @@ int     mf_set_dummy_cycles (mflash *mfl, u_int8_t num_of_cycles)
         return MFE_BAD_PARAMS;
        }
     int bank, rc;
-    if (!mfl->attr.dummy_cycles_support) {
+    if (!(mfl->attr.dummy_cycles_support && mfl->supp_sr_mod)) {
         return MFE_NOT_SUPPORTED_OPERATION;
     }
     for (bank = 0; bank < mfl->attr.banks_num; bank++) {
@@ -2551,7 +2641,7 @@ int mf_get_dummy_cycles(mflash* mfl, u_int8_t *dummy_cycles_p)
        if (!mfl || !dummy_cycles_p) {
         return MFE_BAD_PARAMS;
        }
-    if (!mfl->attr.dummy_cycles_support) {
+    if (!(mfl->attr.dummy_cycles_support && mfl->supp_sr_mod)) {
         return MFE_NOT_SUPPORTED_OPERATION;
     }
     return  mf_get_param_int(mfl, dummy_cycles_p, SFC_RDNVR, DUMMY_CYCLES_OFFSET_ST, 4, 2, 0);
@@ -2566,7 +2656,7 @@ int     mf_set_quad_en (mflash *mfl, u_int8_t quad_en)
                return MFE_BAD_PARAMS;
        }
     int bank, rc;
-    if (!mfl->attr.quad_en_support) {
+    if (!(mfl->attr.quad_en_support && mfl->supp_sr_mod)) {
         return MFE_NOT_SUPPORTED_OPERATION;
     }
     for (bank = 0; bank < mfl->attr.banks_num; bank++) {
@@ -2584,7 +2674,7 @@ int mf_get_quad_en(mflash* mfl, u_int8_t *quad_en_p)
        if (!mfl || !quad_en_p) {
                return MFE_BAD_PARAMS;
        }
-    if (!mfl->attr.quad_en_support) {
+    if (!(mfl->attr.quad_en_support && mfl->supp_sr_mod)) {
         return MFE_NOT_SUPPORTED_OPERATION;
     }
 
@@ -2832,7 +2922,7 @@ int mf_disable_hw_access(mflash* mfl)
 {
     int rc;
     // We need to release the semaphore because we will not have any access to semaphore after disabling the HW access
-    rc = release_semaphore(mfl); CHECK_RC(rc);
+    rc = release_semaphore(mfl, 1); CHECK_RC(rc);
     return cmdif_hw_access_int(mfl, 0, 1 /* Lock */);
 }
 
index eb3c1b73722e5757150e5caa16be776e67983083..c5e269e7973a4c4661b78dbfa33de5667196691e 100644 (file)
@@ -1,5 +1,9 @@
 /*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ *
+ * mflash.h - Mellanox Technilogies LTD. Flash access lib heared file
+ * ==================================================================
+ *
+ * Copyright (c) 2005 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id: $
+ *
  */
-
-
 #ifndef MFLASH_H
 #define MFLASH_H
 
index f28ed0f859693e904902f215341c045d1bedbc7e..10c9a55d3de4d0fd8f510b89f762908d59802023 100755 (executable)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
index 2d439735ee5542028d25dc91549e10b77653b1d8..bfda06a02343028ef34262faaeb3bf5893d3d36b 100755 (executable)
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ */
+/*
+ * mflash_inband.h
  *
+ *  Created on: Jul 6, 2011
+ *      Author: mohammad
  */
 
-
 #ifndef MFLASH_ACCESS_LAYER_H_
 #define MFLASH_ACCESS_LAYER_H_
 
index 9b413cf2b778885b2a8eef2dbaeec7bc6ce2706b..3d760945119da45d4d7cd6787af13a24ab324f87 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * mflash_common_structs.h - Mellanox Technilogies LTD. Flash access lib heared file
- * 
  * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
  *
  * This software is available to you under a choice of one of two
@@ -21,7 +19,7 @@
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -32,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef MFLASH_COMMON_STRUCTS_H
 #define MFLASH_COMMON_STRUCTS_H
 
index 2fbdd4ff1f0b5aa671f2335f35ffc97e113fe906..b213421dbec96fd970b983d9d68af72a10cbc701 100755 (executable)
@@ -28,9 +28,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -109,12 +109,17 @@ int run_mfpa_command(mfile *mf, u_int8_t access_cmd, u_int8_t flash_bank, u_int3
     if (access_cmd == REG_ACCESS_METHOD_SET) {
         mfpa.boot_address = boot_address;
     }
-    rc = reg_access_mfpa (mf, access_cmd, &mfpa); CHECK_RC(MError2MfError(rc));
+    rc = reg_access_mfpa (mf, access_cmd, &mfpa);
+    rc = MError2MfError(rc);
+    if (rc && rc != MFE_REG_ACCESS_BAD_PARAM) {
+        // if rc is REG_ACCESS_BAD_PARAM it means we dont have that flash bank connected (no need to fail)
+        return rc;
+    }
 
     if (access_cmd == REG_ACCESS_METHOD_GET && jedec_p != NULL) {
         *jedec_p = mfpa.jedec_id;
         // HACK: FW had a bug and returned the same jedec-ID even there was no flash, so when flash doesn't exist jedec will be modified to 0xffffffff
-        if (flash_bank >= mfpa.flash_num) {
+        if (flash_bank >= mfpa.flash_num || rc == MFE_REG_ACCESS_BAD_PARAM) {
             *jedec_p = 0xffffffff;
         }
     }
index eb54b1587828f9d5531fdd67d011dcdb3b037062..bde82c3ace26e30339126e25178820a39f899815 100755 (executable)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-
+/*
+ * mflash_inband.h
+ *
+ *  Created on: Jul 6, 2011
+ *      Author: mohammad
+ */
 
 #ifndef MFLASH_COMMON_H_
 #define MFLASH_COMMON_H_
@@ -85,11 +90,15 @@ struct mflash {
        f_mf_erase_sect f_erase_sect;
        f_mf_reset      f_reset;
 
-       // Relevant for SPI flash (InfiniHostIIILx, ConnectX) only.
+       // Relevant for SPI flash (InfiniHostIIILx, ConnectX) only
        f_st_spi_status f_spi_status;
+       // when set(1) we support modification of the flash status register
+       u_int8_t supp_sr_mod;
 
        int             curr_bank;
        int             is_locked;
+       // if writer_lock is set, semaphore should be freed only in mf_close()/disable_hw_access()
+       int             writer_lock;
 
        flash_attr      attr;
 
index 29e9ebda32980b2c591792deb5696739d03323bf..1bc0ec5608e5e1ee16d51897cfa4e20cd8219366 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef MFLASH_TYPES_H
 #define MFLASH_TYPES_H
 
index 8f276bbfdee92f3f81b2da641f0e4dad9694dfd5..a9d5ab5e470c7703965d7fd139a3bfc793021f4e 100644 (file)
@@ -17,9 +17,9 @@ INCLUDES = -I. -I$(USER_DIR)/common
 
 AM_CFLAGS = -MD -pipe -Wall -W -Werror
 
-noinst_HEADERS = mft_sig_handler.h
+noinst_HEADERS = mft_sig_handler.h errmsg.h
 
 noinst_LIBRARIES = libmftutils.a
 
-libmftutils_a_SOURCES =  mft_sig_handler.c
+libmftutils_a_SOURCES =  mft_sig_handler.c errmsg.cpp
 
diff --git a/mft_utils/errmsg.cpp b/mft_utils/errmsg.cpp
new file mode 100644 (file)
index 0000000..09e8a53
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ *                 - Mellanox Confidential and Proprietary -
+ *
+ * Copyright (C) Jan 2013, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ * Except as specifically permitted herein, no portion of the information,
+ * including but not limited to object code and source code, may be reproduced,
+ * modified, distributed, republished or otherwise exploited in any form or by
+ * any means for any purpose without the prior written permission of Mellanox
+ * Technologies Ltd. Use of software subject to the terms and conditions
+ * detailed in the file "LICENSE.txt".
+ *
+ * errmsg.cpp - ErrMsg class implementation.
+ *
+ *  Created on: May 7, 2014
+ *      Author: adrianc
+ *
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "errmsg.h"
+
+enum {
+    SUCCESS = 0,
+    FAILURE = 1
+};
+
+ErrMsg::ErrMsg() {
+    _errMap[SUCCESS] = "SUCCESS";
+    _errMap[FAILURE] = "FAILURE";
+    _err = NULL;
+    _formatErr = NULL;
+    _lastErrCode = SUCCESS;
+}
+
+ErrMsg::ErrMsg(std::map<int, std::string>& errCodeMap) {
+    _errMap = errCodeMap;
+    _err = NULL;
+    _formatErr = NULL;
+    _lastErrCode = SUCCESS;
+}
+
+const char* ErrMsg::getFormatErr(const char *prefix, ...) {
+    va_list args;
+    char* prevFormatErr = _formatErr;
+    va_start(args, prefix);
+    char* preStr = vprint(prefix, args);
+    int formatErrSz = strlen(_err) + strlen(preStr) + 10;
+    _formatErr = new char[formatErrSz];
+    snprintf(_formatErr, formatErrSz, "-E- %s. %s", preStr, _err);
+    va_end(args);
+    delete[] prevFormatErr;
+    delete[] preStr;
+    return _formatErr;
+}
+
+const char* ErrMsg::err2Str(int errCode) const {
+    std::map<int, std::string>::const_iterator it;
+    if ( (it=_errMap.find(errCode)) == _errMap.end()) {
+        return "Unknown Error Code";
+    }
+    return it->second.c_str();
+}
+
+char* ErrMsg::vprint(const char *format, va_list args) {
+        const int INIT_VAL = 1024;
+        int       max_str, max_buf = INIT_VAL;
+        char      *out_buf;
+
+        while (1) {
+            out_buf = new char[max_buf];
+            max_str = max_buf - 1;
+
+            if (vsnprintf(out_buf, max_str, format, args) < max_str) {
+                return out_buf;
+            }
+            delete [] out_buf;
+            max_buf *= 2;
+        }
+}
+
+int ErrMsg::errmsg(const char *format, ...) {
+    va_list   args;
+
+    char* prev_err = _err;
+
+    va_start(args, format);
+    _err = vprint(format, args);
+    va_end(args);
+
+    delete[] prev_err;
+    _lastErrCode = FAILURE;
+    return FAILURE;
+}
+
+int ErrMsg::errmsg(int errCode, const char *format, ...) {
+    va_list   args;
+    char* prev_err = _err;
+
+    va_start(args, format);
+    _err = vprint(format, args);
+    va_end(args);
+
+    delete[] prev_err;
+    _lastErrCode = errCode;
+    return errCode;
+}
+
+int ErrMsg::errmsg(int errCode) {
+    char* prevErr = _err;
+    int errSz = strlen(err2Str(errCode)) + 1;
+    char* newError = new char[errSz];
+    snprintf(newError, errSz, "%s", err2Str(errCode));
+    _err = newError;
+    delete[] prevErr;
+    _lastErrCode = errCode;
+    return errCode;
+
+}
+void ErrMsg::errmsgConcatCom(const char* format, va_list args, const char* suffix) {
+    char* prevErr = _err;
+    char* currError = vprint(format, args);
+    int errSz = strlen(currError) + strlen(suffix) + 10;
+    char* newError = new char[errSz];
+    if (strlen(currError) == 0) {
+        snprintf(newError,errSz, "%s", suffix);
+    } else {
+        if (strlen(suffix) == 0) {
+            snprintf(newError,errSz, "%s", currError);
+        } else {
+            snprintf(newError,errSz, "%s. %s", currError, suffix);
+        }
+    }
+    _err = newError;
+
+    delete[] prevErr;
+    delete[] currError;
+}
+
+int ErrMsg::errmsgConcatMsg(int errCode, const ErrMsg& errMsgObj, const char *format, ...) {
+    va_list   args;
+    va_start(args, format);
+    errmsgConcatCom(format, args, errMsgObj.err());
+    va_end(args);
+    _lastErrCode = errCode;
+    return errCode;
+}
+
+int ErrMsg::errmsgConcatMsg(const ErrMsg& errMsgObj, const char *format, ...) {
+        va_list   args;
+        va_start(args, format);
+        errmsgConcatCom(format, args, errMsgObj.err());
+        va_end(args);
+        _lastErrCode = FAILURE;
+        return FAILURE;
+}
+
+int ErrMsg::errmsgConcatMsg(int errCode, const ErrMsg& errMsgObj) {
+    return errmsg(errCode, "%s", errMsgObj.err());
+}
+
+int ErrMsg::errmsgConcatMsg(const ErrMsg& errMsgObj) {
+    return errmsg("%s", errMsgObj.err());
+}
+
+int ErrMsg::errmsgConcatErrCd(int errCode, const ErrMsg& errMsgObj, const char *format, ...) {
+    va_list   args;
+    va_start(args, format);
+    errMsgObj.getLastErrCode();
+    errmsgConcatCom(format, args, errMsgObj.err2Str(errMsgObj.getLastErrCode()));
+    va_end(args);
+    _lastErrCode = errCode;
+    return errCode;
+}
+
+int ErrMsg::errmsgConcatErrCd(int errCode, const ErrMsg& errMsgObj) {
+    return errmsg(errCode, "%s", errMsgObj.err2Str(errMsgObj.getLastErrCode()));
+}
+
+int ErrMsg::errmsgConcatErrCd(const ErrMsg& errMsgObj) {
+    return errmsg("%s", errMsgObj.err2Str(errMsgObj.getLastErrCode()));
+}
+
+void ErrMsg::err_clear(){
+    delete [] _err;
+    delete [] _formatErr;
+    _err = NULL;
+    _formatErr = NULL;
+}
+
+
diff --git a/mft_utils/errmsg.h b/mft_utils/errmsg.h
new file mode 100644 (file)
index 0000000..db1c26b
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ *                 - Mellanox Confidential and Proprietary -
+ *
+ * Copyright (C) Jan 2013, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ * Except as specifically permitted herein, no portion of the information,
+ * including but not limited to object code and source code, may be reproduced,
+ * modified, distributed, republished or otherwise exploited in any form or by
+ * any means for any purpose without the prior written permission of Mellanox
+ * Technologies Ltd. Use of software subject to the terms and conditions
+ * detailed in the file "LICENSE.txt".
+ *
+ * errmsg.h - base class that provides the returning of error messages for classes that inherit it.
+ *
+ *  Created on: May 7, 2014
+ *      Author: adrianc
+ *
+ */
+
+#ifndef ERRMSG_H_
+#define ERRMSG_H_
+
+#include <map>
+#include <string>
+
+/**
+ *  ErrMsg Class Provides API for returning both error codes and error messages to the user app.
+ */
+
+class ErrMsg {
+public:
+    ErrMsg();
+    ErrMsg(std::map<int, std::string>& errCodeMap);
+
+    ~ErrMsg()                { err_clear();}
+
+    const char* err() const  { return _err;}
+    void updateErrCodes(std::map<int, std::string>& errCodeMap) {_errMap = errCodeMap; return;}
+
+    const char* getFormatErr(const char *prefix, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 2, 3)))
+#endif
+    ;
+
+    void err_clear();
+
+    int getLastErrCode() const {return _lastErrCode;}
+
+    const char* err2Str(int errCode) const;
+
+protected:
+    char* vprint(const char *format, va_list args);
+
+    int errmsg(const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 2, 3)))
+#endif
+    ;
+
+    int errmsg(int errCode, const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 3, 4)))
+#endif
+    ;
+
+    int errmsg(int errCode);
+
+
+    int errmsgConcatMsg(int errCode, const ErrMsg& errMsgObj, const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 4, 5)))
+#endif
+    ;
+
+    int errmsgConcatMsg(const ErrMsg& errMsgObj, const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 3, 4)))
+#endif
+    ;
+
+    int errmsgConcatMsg(int errCode, const ErrMsg& errMsgObj);
+
+    int errmsgConcatMsg(const ErrMsg& errMsgObj);
+
+
+    int errmsgConcatErrCd(int errCode, const ErrMsg& errMsgObj, const char *format, ...)
+#ifdef __GNUC__
+    __attribute__ ((format (printf, 4, 5)))
+#endif
+    ;
+
+    int errmsgConcatErrCd(int errCode, const ErrMsg& errMsgObj);
+
+    int errmsgConcatErrCd(const ErrMsg& errMsgObj);
+
+private:
+    void errmsgConcatCom(const char* format, va_list args, const char* suffix);
+
+    std::map<int, std::string> _errMap;
+    char*       _err;
+    char*       _formatErr;
+    int         _lastErrCode;
+};
+
+#endif /* ERRMSG_H_ */
diff --git a/mlxconfig/log b/mlxconfig/log
deleted file mode 100644 (file)
index 268ef4a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-Device #1:
-----------
-
-Device type:   ConnectX3
-PCI device:    /sys/bus/pci/devices/0000:03:00.0/config
-
-        Configuration        Value 
-        -------------         -----
-       SRIOV_EN              1 
-       NUM_OF_VFS            16        
-       WOL_MAGIC_EN_P1       1 
-       WOL_MAGIC_EN_P2         
index 88adadee05e16684fadea6ad5f724898d29eec58..ba1220ca78d01f414e5d601a87a0eee0270159eb 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-
+/*
+ * mlxcfg_lib.cpp
+ *
+ *  Created on: Feb 17, 2014
+ *      Author: adrianc
+ */
 
 #include <set>
 #include <cmath>
 #include <signal.h>
 
 #include <mft_sig_handler.h>
-#include <tools_layouts/tools_layouts.h>
+#include <tools_layouts/tools_open_layouts.h>
 #include <reg_access/reg_access.h>
 #include <bit_slice.h>
 
 #include "mlxcfg_lib.h"
 
+using namespace std;
 
+/*
+ * Mask and offsets for working with the capability vector
+ * retrieved via query_dev_cap command.
+ */
 #define SRIOV_MASK 0x1
 #define WOL_P1_MASK 0x2
 #define WOL_P2_MASK 0x4
 #define VPI_P1_MASK 0x8
 #define VPI_P2_MASK 0x10
+#define BAR_SZ_MASK 0x20
 
 #define TOOL_CAP_BITS_ADDR 0xc0
 #define MAX_VFS_ADDR 0x38
+#define MAX_BAR_SZ_ADDR 0xc8
 #define DEFAULT_BAR_SZ_ADDR 0x48
 
-// for debug:
+/*
+ * Debug print MACRO of the MNV Tlvs:
+ */
 #ifdef _ENABLE_DEBUG_
 # define DEBUG_PRINT_SEND(data_struct, struct_name)\
     printf("-I- Data Sent:\n");\
-    tools_##struct_name##_print(data_struct, stdout, 1)
+    tools_open_##struct_name##_print(data_struct, stdout, 1)
 # define DEBUG_PRINT_RECIEVE(data_struct, struct_name)\
     printf("-I- Data Recieved:\n");\
-    tools_##struct_name##_print(data_struct, stdout, 1)
+    tools_open_##struct_name##_print(data_struct, stdout, 1)
 #else
 # define DEBUG_PRINT_SEND(data_struct, struct_name)
 # define DEBUG_PRINT_RECIEVE(data_struct, struct_name)
 #endif
 
+/*
+ * Enum for handling error messages
+ */
 
-using namespace std;
+typedef enum {
+    MCE_SUCCESS = 0,
+    MCE_FAILED,
+    MCE_TLV_NOT_FOUND,
+    MCE_TLV_NOT_SUPP,
+    MCE_NVCFG_NOT_SUPP,
+    MCE_TOOLS_HCR_NOT_SUPP,
+    MCE_DRIVER_DOWN,
+    MCE_UNSUPPORTED_DEVICE,
+    MCE_UNSUPPORTED_CFG,
+    MCE_BAD_PARAMS,
+    MCE_BAD_PARAM_VAL,
+    MCE_DEV_BUSY,
+    MCE_UNKNOWN_TLV,
+    MCE_REG_NOT_SUPP,
+    MCE_METHOD_NOT_SUPP,
+    MCE_RES_NOT_AVAIL,
+    MCE_CONF_CORRUPT,
+    MCE_TLV_LEN_TOO_SMALL,
+    MCE_BAD_CONFIG,
+    MCE_ERASE_EXEEDED,
+    MCE_BAD_OP,
+    MCE_BAD_STATUS,
+    MCE_CR_ERROR,
+    MCE_NOT_IMPLEMENTED,
+    MCE_INCOMPLETE_PARAMS,
+    MCE_OPEN_DEVICE,
+    MCE_PCICONF,
+    MCE_UNKNOWN_ERR
+}McStatus;
 
-static McStatus translateRc(MError rc);
-static McStatus mnvaCom(mfile* mf, u_int8_t* buff, u_int16_t len, u_int16_t type, reg_access_method_t method, u_int16_t typeMod=0);
+/*
+ * Forward Declarations:
+ */
+
+static MError mnvaCom(mfile* mf, u_int8_t* buff, u_int16_t len, u_int16_t type, reg_access_method_t method, u_int16_t typeMod=0);
+
+/*
+ *  MlxCfgOps::CfgParams implementation
+ */
+
+MlxCfgOps::CfgParams::CfgParams(mlxCfgType t, u_int32_t tlvT) {
+    // init the ErrMsg Class
+    std::map<int, std::string> errmap;
+    errmap[MCE_SUCCESS] = "Success";
+    errmap[MCE_FAILED] = "General Failure";
+    errmap[MCE_BAD_PARAMS] = "Bad parameters";
+    errmap[MCE_BAD_PARAM_VAL] = "Bad parameter value";
+    errmap[MCE_BAD_STATUS] = "General Failure";
+
+    updateErrCodes(errmap);
+    type = t;
+    tlvType = tlvT;
+    _updated = false;
+}
 
 /*
  * MlxCfgOps::SriovParams implementation
@@ -96,29 +164,33 @@ u_int32_t MlxCfgOps::SriovParams::getParam(mlxCfgParam paramType)
 }
 
 
-McStatus MlxCfgOps::SriovParams::getFromDev(mfile* mf)
+int MlxCfgOps::SriovParams::getFromDev(mfile* mf)
 {
     if (_updated) {
         return MCE_SUCCESS;
     }
-    McStatus rc;
+    MError rc;
     // prep tlv
-    u_int8_t buff[tools_sriov_size()];
-    struct tools_sriov sriovTlv;
-    memset(buff, 0, tools_sriov_size());
-    memset(&sriovTlv, 0, sizeof(struct tools_sriov));
+    u_int8_t buff[tools_open_sriov_size()];
+    struct tools_open_sriov sriovTlv;
+    memset(buff, 0, tools_open_sriov_size());
+    memset(&sriovTlv, 0, sizeof(struct tools_open_sriov));
     // pack it
-    tools_sriov_pack(&sriovTlv, buff);
+    tools_open_sriov_pack(&sriovTlv, buff);
     // send it
     DEBUG_PRINT_SEND(&sriovTlv, sriov);
-    rc = mnvaCom(mf, buff, tools_sriov_size(), tlvType, REG_ACCESS_METHOD_GET, 0);
+    rc = mnvaCom(mf, buff, tools_open_sriov_size(), tlvType, REG_ACCESS_METHOD_GET, 0);
     // check rc
     DEBUG_PRINT_RECIEVE(&sriovTlv, sriov);
-    if (rc) {
-        return rc;
+    if (rc) {// when attempting to get a nv_cfg tlv from device ME_REG_ACCESS_RES_NOT_AVLBL means - no valid
+             // tlv found. i.e default configuration are on.
+        if (rc == ME_REG_ACCESS_RES_NOT_AVLBL) {
+            return MCE_SUCCESS;
+        }
+        return errmsg(MCE_BAD_STATUS, "Failed to get SRIOV configuration: %s", m_err2str(rc));
     }
     // unpack and update
-    tools_sriov_unpack(&sriovTlv, buff);
+    tools_open_sriov_unpack(&sriovTlv, buff);
     _sriovEn = _sriovEn == MLXCFG_UNKNOWN ? sriovTlv.sriov_en : _sriovEn ;
     _numOfVfs = _numOfVfs == MLXCFG_UNKNOWN ? sriovTlv.total_vfs : _numOfVfs ;
     _updated = true;
@@ -126,48 +198,46 @@ McStatus MlxCfgOps::SriovParams::getFromDev(mfile* mf)
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::SriovParams::setOnDev(mfile* mf)
+int MlxCfgOps::SriovParams::setOnDev(mfile* mf, bool ignoreCheck)
 {
-    McStatus rc;
+    int rc;
     if (_sriovEn == MLXCFG_UNKNOWN || _numOfVfs == MLXCFG_UNKNOWN) {
         rc = getFromDev(mf);
-        if (rc) {
-            if (rc == MCE_RES_NOT_AVAIL) {
-                return MCE_INCOMPLETE_PARAMS;
-            }
-            return rc;
+        if (rc || _sriovEn == MLXCFG_UNKNOWN || _numOfVfs == MLXCFG_UNKNOWN) { // go here if we fail to get the tlv or it doesnt exsist (one of the params == MLXCFG_UNKNOWN)
+            return errmsg("%s please specify all the parameters for SRIOV.", err() ? err(): "");
         }
     }
-    if (!isLegal(mf)) {
-        return MCE_BAD_PARAM_VAL;
+    if (!ignoreCheck && !isLegal(mf)) {
+        return MCE_BAD_PARAMS;
     }
     // prep tlv
-    u_int8_t buff[tools_sriov_size()];
-    struct tools_sriov sriovTlv;
+    MError ret;
+    u_int8_t buff[tools_open_sriov_size()];
+    struct tools_open_sriov sriovTlv;
 
-    memset(buff, 0, tools_sriov_size());
-    memset(&sriovTlv, 0, sizeof(struct tools_sriov));
+    memset(buff, 0, tools_open_sriov_size());
+    memset(&sriovTlv, 0, sizeof(struct tools_open_sriov));
 
     sriovTlv.sriov_en = _sriovEn;
     sriovTlv.total_vfs = _numOfVfs;
     // pack it
-    tools_sriov_pack(&sriovTlv, buff);
+    tools_open_sriov_pack(&sriovTlv, buff);
     // send it
-    rc = mnvaCom(mf, buff, tools_sriov_size(), tlvType, REG_ACCESS_METHOD_SET, 0);
+    ret = mnvaCom(mf, buff, tools_open_sriov_size(), tlvType, REG_ACCESS_METHOD_SET, 0);
     // check rc
-    if (rc) {
-        return rc;
+    if (ret) {
+        return errmsg("failed to set SRIOV params: %s",m_err2str(ret));
     }
     _updated = false;
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::SriovParams::updateMaxVfs(mfile* mf)
+int MlxCfgOps::SriovParams::updateMaxVfs(mfile* mf)
 {
     u_int64_t data = 0;
     int rc = tools_cmdif_query_dev_cap(mf, MAX_VFS_ADDR, &data);
     if (rc) {
-        return translateRc((MError)rc);
+        return errmsg("failed to query device capabilities: %s", m_err2str((MError)rc));
     }
     _maxVfs = (u_int32_t)(data & 0xff);
     if (_maxVfs == 0) { // defined in CX PRM , if max_func_idx=0 then all functions(128) are operational
@@ -184,12 +254,24 @@ bool MlxCfgOps::SriovParams::isLegal(mfile* mf)
     u_int64_t data = 0;
     int rc = tools_cmdif_query_dev_cap(mf, DEFAULT_BAR_SZ_ADDR, &data);
     if (rc) {
-        return translateRc((MError)rc);
+        errmsg("failed to query device capabilities: %s",m_err2str((MError)rc));
+        return false;
     }
     data = EXTRACT64(data,16,6) + 1; // this is the default log2 bar size , we require numOfVfs*(2^log_uar_bar) <= 512 or else the node might not boot
+    double VfsMem = _numOfVfs*(std::pow((double)2, (int)data));
     //TODO: when bar_size tlv will be supported, we need to change this to the current bar_size (and also check with the current tlv bar size)
-    //printf("-D- num_of_vfs*2^(bar_sz+1) = %d*2^%ld = %d\n", _numOfVfs, data, (int)(_numOfVfs*std::pow((double)2, (int)data)));
-    return ((_sriovEn == 0 || _sriovEn == 1 ) && (_numOfVfs <= _maxVfs) && (_numOfVfs*(std::pow((double)2, (int)data)) <= 512));
+    //printf("-D- num_of_vfs*2^(bar_sz+1) = %d*2^%ld = %d\n", _numOfVfs, data, (int)(_numOfVfs*(std::pow((double)2, (int)data))));
+    //printf("-D- maxVfs(default set by fw) : %d\n", _maxVfs);
+    if (_sriovEn != 0 && _sriovEn != 1) {
+        errmsg("illegal SRIOV_EN parameters value. (should be 0 or 1)");
+        return false;
+    }
+    if ((_numOfVfs > _maxVfs) || (VfsMem > 512)){
+        unsigned int maxAlowedVfs =static_cast<unsigned int>(512/(std::pow((double)2, (int)data)));
+        errmsg("illegal SRIOV parameter value. Maximal number of VFs: %d", maxAlowedVfs < _maxVfs ? maxAlowedVfs : _maxVfs);
+        return false;
+    }
+    return true;
 }
 
 /*
@@ -211,64 +293,64 @@ u_int32_t MlxCfgOps::WolParams::getParam(mlxCfgParam paramType)
     return MLXCFG_UNKNOWN;
 }
 
-McStatus MlxCfgOps::WolParams::getFromDev(mfile* mf)
+int MlxCfgOps::WolParams::getFromDev(mfile* mf)
 {
     if (_updated) {
         return MCE_SUCCESS;
     }
-    McStatus rc;
+    MError rc;
     // prep tlv
-    u_int8_t buff[tools_wol_size()];
-    struct tools_wol wolTlv;
-    memset(buff, 0, tools_wol_size());
-    memset(&wolTlv, 0, sizeof(struct tools_wol));
+    u_int8_t buff[tools_open_wol_size()];
+    struct tools_open_wol wolTlv;
+    memset(buff, 0, tools_open_wol_size());
+    memset(&wolTlv, 0, sizeof(struct tools_open_wol));
     // pack it
-    tools_wol_pack(&wolTlv, buff);
+    tools_open_wol_pack(&wolTlv, buff);
     // send it
-    rc = mnvaCom(mf, buff, tools_wol_size(), tlvType, REG_ACCESS_METHOD_GET, _port);
+    rc = mnvaCom(mf, buff, tools_open_wol_size(), tlvType, REG_ACCESS_METHOD_GET, _port);
     // check rc
     if (rc) {
-        return rc;
+        if (rc == ME_REG_ACCESS_RES_NOT_AVLBL) {
+            return MCE_SUCCESS;
+        }
+        return errmsg("Failed to get WOL port%d configuration: %s", _port, m_err2str(rc));
     }
     // unpack and update
-    tools_wol_unpack(&wolTlv, buff);
+    tools_open_wol_unpack(&wolTlv, buff);
     _wolMagicEn = _wolMagicEn == MLXCFG_UNKNOWN ? wolTlv.en_wol_magic : _wolMagicEn ;
     _updated = true;
 
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::WolParams::setOnDev(mfile* mf)
+int MlxCfgOps::WolParams::setOnDev(mfile* mf, bool ignoreCheck)
 {
-    McStatus rc;
+    int rc;
     if (_wolMagicEn == MLXCFG_UNKNOWN) {
         rc = getFromDev(mf);
-        if (rc) {
-            if (rc == MCE_RES_NOT_AVAIL) {
-                return MCE_INCOMPLETE_PARAMS;
-            }
-            return rc;
+        if (rc || _wolMagicEn == MLXCFG_UNKNOWN) {
+            return errmsg("%s please specify all the parameters for WOL.", err()? err() : "");
         }
     }
-    if (!isLegal()) {
-        return MCE_BAD_PARAM_VAL;
+    if (!ignoreCheck && !isLegal()) {
+        return MCE_BAD_PARAMS;
     }
-
     // prep tlv
-    u_int8_t buff[tools_wol_size()];
-    struct tools_wol wolTlv;
+    MError ret;
+    u_int8_t buff[tools_open_wol_size()];
+    struct tools_open_wol wolTlv;
 
-    memset(buff, 0, tools_wol_size());
-    memset(&wolTlv, 0, sizeof(struct tools_wol));
+    memset(buff, 0, tools_open_wol_size());
+    memset(&wolTlv, 0, sizeof(struct tools_open_wol));
 
     wolTlv.en_wol_magic= _wolMagicEn;
     // pack it
-    tools_wol_pack(&wolTlv, buff);
+    tools_open_wol_pack(&wolTlv, buff);
     // send it
-    rc = mnvaCom(mf, buff, tools_wol_size(), tlvType, REG_ACCESS_METHOD_SET, _port);
+    ret = mnvaCom(mf, buff, tools_open_wol_size(), tlvType, REG_ACCESS_METHOD_SET, _port);
     // check rc
-    if (rc) {
-        return rc;
+    if (ret) {
+        return errmsg("failed to set WOL params for port%d: %s", _port, m_err2str(ret));
     }
     _updated = false;
     return MCE_SUCCESS;
@@ -277,13 +359,124 @@ McStatus MlxCfgOps::WolParams::setOnDev(mfile* mf)
 bool MlxCfgOps::WolParams::isLegal(mfile* mf)
 {
     (void)mf;
-    return (_wolMagicEn == 0 || _wolMagicEn == 1 );
+    if (_wolMagicEn == 0 || _wolMagicEn == 1 ) {
+        return true;
+    }
+    errmsg("illegal WOL parameter value. can be either 0 or 1.");
+    return false;
+}
+
+/*
+ *  BarSzParams Implementation
+ */
+
+void MlxCfgOps::BarSzParams::setParam(mlxCfgParam paramType, u_int32_t val)
+{
+    if ((paramType == Mcp_Log_Bar_Size) ) {
+        _logBarSz = val;
+    }
+}
+
+u_int32_t MlxCfgOps::BarSzParams::getParam(mlxCfgParam paramType)
+{
+    if (paramType == Mcp_Log_Bar_Size) {
+        return _logBarSz;
+    }
+    return MLXCFG_UNKNOWN;
+}
+
+int MlxCfgOps::BarSzParams::getFromDev(mfile* mf)
+{
+    if (_updated) {
+        return MCE_SUCCESS;
+    }
+    MError rc;
+    // prep tlv
+    u_int8_t buff[tools_open_bar_size_size()];
+    struct tools_open_bar_size barSzTlv;
+    memset(buff, 0, tools_open_bar_size_size());
+    memset(&barSzTlv, 0, sizeof(struct tools_open_bar_size));
+    // pack it
+    tools_open_bar_size_pack(&barSzTlv, buff);
+    // send it
+    rc = mnvaCom(mf, buff, tools_open_bar_size_size(), tlvType, REG_ACCESS_METHOD_GET, 0);
+    // check rc
+    if (rc) {
+        if (rc == ME_REG_ACCESS_RES_NOT_AVLBL) {
+            return MCE_SUCCESS;
+        }
+        return errmsg("Failed to get BAR size configuration: %s", m_err2str(rc));
+    }
+    // unpack and update
+    tools_open_bar_size_unpack(&barSzTlv, buff);
+    _logBarSz = _logBarSz == MLXCFG_UNKNOWN ? barSzTlv.log_uar_bar_size : _logBarSz ;
+    _updated = true;
+
+    return MCE_SUCCESS;
+}
+
+int MlxCfgOps::BarSzParams::setOnDev(mfile* mf, bool ignoreCheck)
+{
+    int rc;
+    if (_logBarSz == MLXCFG_UNKNOWN) {
+        rc = getFromDev(mf);
+        if (rc || _logBarSz == MLXCFG_UNKNOWN) {
+            return errmsg("%s please specify all the parameters for BAR size.", err() ? err() : "");
+        }
+    }
+    if (!ignoreCheck && !isLegal()) {
+        return MCE_BAD_PARAMS;
+    }
+
+    // prep tlv
+    MError ret;
+    u_int8_t buff[tools_open_bar_size_size()];
+    struct tools_open_bar_size barSzTlv;
+
+    memset(buff, 0, tools_open_bar_size_size());
+    memset(&barSzTlv, 0, sizeof(struct tools_open_bar_size));
+
+    barSzTlv.log_uar_bar_size= _logBarSz;
+    // pack it
+    tools_open_bar_size_pack(&barSzTlv, buff);
+    // send it
+    ret = mnvaCom(mf, buff, tools_open_bar_size_size(), tlvType, REG_ACCESS_METHOD_SET, 0);
+    // check rc
+    if (ret) {
+        return errmsg("failed to set BAR size params: %s",m_err2str(ret));
+    }
+    _updated = false;
+    return MCE_SUCCESS;
+}
+
+int MlxCfgOps::BarSzParams::updateBarSzInfo(mfile* mf)
+{
+    u_int64_t data = 0;
+    int rc = tools_cmdif_query_dev_cap(mf, MAX_BAR_SZ_ADDR, &data);
+    if (rc) {
+        return errmsg("Failed to query device capabilities: %s", m_err2str((MError)rc));
+    }
+    _maxLogBarSz = (u_int32_t)(data & 0xffffffff);
+    _currLogBarSz = (u_int32_t)(data >> 32);
+    //printf("-D- vec 0x%lx  max %d  curr %d\n", data, maxBarSz, currBarSz);
+    return MCE_SUCCESS;
+}
+
+bool MlxCfgOps::BarSzParams::isLegal(mfile* mf)
+{
+    (void)mf;
+    if (_logBarSz < _maxLogBarSz ) {
+        return true;
+    }
+    errmsg("given bar size is too large, max allowed log2 bar size: 0x%x", _maxLogBarSz);
+    return false;
 }
 
 /*
  *  VpiParams Implementation
  */
 
+
 void MlxCfgOps::VpiParams::setParam(mlxCfgParam paramType, u_int32_t val)
 {
     if ((paramType == Mcp_Link_Type_P1 && _port == 1 ) || (paramType == Mcp_Link_Type_P2 && _port == 2) ) {
@@ -299,64 +492,65 @@ u_int32_t MlxCfgOps::VpiParams::getParam(mlxCfgParam paramType)
     return MLXCFG_UNKNOWN;
 }
 
-McStatus MlxCfgOps::VpiParams::getFromDev(mfile* mf)
+int MlxCfgOps::VpiParams::getFromDev(mfile* mf)
 {
     if (_updated) {
         return MCE_SUCCESS;
     }
-    McStatus rc;
+    MError rc;
     // prep tlv
-    u_int8_t buff[tools_vpi_settings_size()];
-    struct tools_vpi_settings vpiTlv;
-    memset(buff, 0, tools_vpi_settings_size());
-    memset(&vpiTlv, 0, sizeof(struct tools_vpi_settings));
+    u_int8_t buff[tools_open_vpi_settings_size()];
+    struct tools_open_vpi_settings vpiTlv;
+    memset(buff, 0, tools_open_vpi_settings_size());
+    memset(&vpiTlv, 0, sizeof(struct tools_open_vpi_settings));
     // pack it
-    tools_vpi_settings_pack(&vpiTlv, buff);
+    tools_open_vpi_settings_pack(&vpiTlv, buff);
     // send it
-    rc = mnvaCom(mf, buff, tools_vpi_settings_size(), tlvType, REG_ACCESS_METHOD_GET, _port);
+    rc = mnvaCom(mf, buff, tools_open_vpi_settings_size(), tlvType, REG_ACCESS_METHOD_GET, _port);
     // check rc
     if (rc) {
-        return rc;
+        if (rc == ME_REG_ACCESS_RES_NOT_AVLBL) {
+            return MCE_SUCCESS;
+        }
+        return errmsg("Failed to get VPI port%d configuration: %s", _port, m_err2str(rc));
     }
     // unpack and update
-    tools_vpi_settings_unpack(&vpiTlv, buff);
+    tools_open_vpi_settings_unpack(&vpiTlv, buff);
     _linkType = _linkType == MLXCFG_UNKNOWN ? vpiTlv.network_link_type : _linkType ;
     _updated = true;
 
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::VpiParams::setOnDev(mfile* mf)
+int MlxCfgOps::VpiParams::setOnDev(mfile* mf, bool ignoreCheck)
 {
-    McStatus rc;
+    int rc;
     if (_linkType == MLXCFG_UNKNOWN) {
         rc = getFromDev(mf);
-        if (rc) {
-            if (rc == MCE_RES_NOT_AVAIL) {
-                return MCE_INCOMPLETE_PARAMS;
-            }
-            return rc;
+        if (rc || _linkType == MLXCFG_UNKNOWN) {
+            return errmsg("%s please specify all the parameters for VPI settings.", err() ? err() : "");
         }
     }
-    if (!isLegal()) {
-        return MCE_BAD_PARAM_VAL;
+    if (!ignoreCheck && !isLegal()) {
+        return MCE_BAD_PARAMS;
     }
 
     // prep tlv
-    u_int8_t buff[tools_vpi_settings_size()];
-    struct tools_vpi_settings vpiTlv;
+    MError ret;
+    u_int8_t buff[tools_open_vpi_settings_size()];
+    struct tools_open_vpi_settings vpiTlv;
 
-    memset(buff, 0, tools_vpi_settings_size());
-    memset(&vpiTlv, 0, sizeof(struct tools_vpi_settings));
+    memset(buff, 0, tools_open_vpi_settings_size());
+    memset(&vpiTlv, 0, sizeof(struct tools_open_vpi_settings));
 
     vpiTlv.network_link_type= _linkType;
     // pack it
-    tools_vpi_settings_pack(&vpiTlv, buff);
+    tools_open_vpi_settings_pack(&vpiTlv, buff);
     // send it
-    rc = mnvaCom(mf, buff, tools_vpi_settings_size(), tlvType, REG_ACCESS_METHOD_SET, _port);
+    ret = mnvaCom(mf, buff, tools_open_vpi_settings_size(), tlvType, REG_ACCESS_METHOD_SET, _port);
     // check rc
-    if (rc) {
-        return rc;
+    if (ret) {
+        return errmsg("failed to set VPI port%d params: %s", _port, m_err2str(ret));
     }
     _updated = false;
     return MCE_SUCCESS;
@@ -365,7 +559,11 @@ McStatus MlxCfgOps::VpiParams::setOnDev(mfile* mf)
 bool MlxCfgOps::VpiParams::isLegal(mfile* mf)
 {
     (void)mf;
-    return (_linkType == 1 || _linkType == 2 || _linkType == 3 );
+    if (_linkType == 1 || _linkType == 2 || _linkType == 3 ) {
+        return true;
+    }
+    errmsg("illegal VPI link type (should be 1|2|3).");
+    return false;
 }
 
 /*
@@ -374,6 +572,38 @@ bool MlxCfgOps::VpiParams::isLegal(mfile* mf)
 
 MlxCfgOps::MlxCfgOps()
 {
+    // init the ErrMsg Class
+    std::map<int, std::string> errmap;
+    errmap[MCE_SUCCESS] = "Success";
+    errmap[MCE_FAILED] = "General Failure";
+    errmap[MCE_TLV_NOT_FOUND] = "Configuration not found";
+    errmap[MCE_TLV_NOT_SUPP] = "Configuration TLV not supported";
+    errmap[MCE_NVCFG_NOT_SUPP] = "Fw does not support NV access registers";
+    errmap[MCE_TOOLS_HCR_NOT_SUPP] = "Unsupported FW (version 2.31.5000 or above required for CX3/PRO)";
+    errmap[MCE_DRIVER_DOWN] = "Cannot perform operation, Driver might be down.";
+    errmap[MCE_UNSUPPORTED_DEVICE] = "Device not supported.";
+    errmap[MCE_UNSUPPORTED_CFG] = "Fw does not support configuration";
+    errmap[MCE_BAD_PARAMS] = "Bad parameters";
+    errmap[MCE_BAD_PARAM_VAL] = "Bad parameter value";
+    errmap[MCE_DEV_BUSY] = "Device busy";
+    errmap[MCE_UNKNOWN_TLV] = "Unknown TLV";
+    errmap[MCE_REG_NOT_SUPP] = "Fw does not support NV access registers";
+    errmap[MCE_METHOD_NOT_SUPP] = "Method not supported";
+    errmap[MCE_RES_NOT_AVAIL] = "Resource not available";
+    errmap[MCE_CONF_CORRUPT] = "Configuration is corrupted";
+    errmap[MCE_TLV_LEN_TOO_SMALL] = "TLV length too small";
+    errmap[MCE_BAD_CONFIG] = "Bad Configuration";
+    errmap[MCE_ERASE_EXEEDED] = "Erase exceeded flash spec";
+    errmap[MCE_BAD_OP] = "Bad Operation";
+    errmap[MCE_BAD_STATUS] = "General Failure";
+    errmap[MCE_CR_ERROR] = "CR-Error";
+    errmap[MCE_NOT_IMPLEMENTED] = "Not implemented";
+    errmap[MCE_INCOMPLETE_PARAMS] = "Failed to get missing configuration from device, please specify all the needed parameters";
+    errmap[MCE_OPEN_DEVICE] = "Failed to open device";
+    errmap[MCE_PCICONF] = "Access to device should be through configuration cycles only.";
+    errmap[MCE_UNKNOWN_ERR] = "General Error";
+
+    updateErrCodes(errmap);
     _mf = NULL;
     _suppVec = 0;
     _cfgList.resize(Mct_Last);
@@ -382,6 +612,7 @@ MlxCfgOps::MlxCfgOps()
     _cfgList[Mct_Wol_P2] = new WolParams(2);
     _cfgList[Mct_Vpi_P1] = new VpiParams(1);
     _cfgList[Mct_Vpi_P2] = new VpiParams(2);
+    _cfgList[Mct_Bar_Size] = new BarSzParams();
     return;
 }
 
@@ -400,7 +631,7 @@ MlxCfgOps::~MlxCfgOps()
 #define CX3_HW_ID 501
 #define CX3_PRO_HW_ID 503
 
-McStatus MlxCfgOps::supportsToolsHCR()
+int MlxCfgOps::supportsToolsHCR()
 {
     // we also update the support vector
     u_int32_t devId;
@@ -414,11 +645,11 @@ McStatus MlxCfgOps::supportsToolsHCR()
             rc = mget_mdevs_type(_mf, &type);
         #ifndef MST_UL
             if (type != MST_PCICONF) {
-                return MCE_PCICONF;
+                return errmsg(MCE_PCICONF);
             }
         #else
             if (type != MTCR_ACCESS_CONFIG) {
-                return MCE_PCICONF;
+                return errmsg(MCE_PCICONF);
             }
         #endif
             // check if we support tools_hcr
@@ -427,24 +658,24 @@ McStatus MlxCfgOps::supportsToolsHCR()
              case ME_OK:
                  return MCE_SUCCESS;
              case ME_CMDIF_BAD_SYS:
-                 return MCE_DRIVER_DOWN;
+                 return errmsg(MCE_DRIVER_DOWN);
              case ME_CMDIF_BAD_OP:
              case ME_CMDIF_TOUT:
              case ME_CMDIF_BUSY:
-                 return MCE_TOOLS_HCR_NOT_SUPP;
+                 return errmsg(MCE_TOOLS_HCR_NOT_SUPP);
              default:
-                 return MCE_UNKNOWN_ERR;
+                 return errmsg("general Error, %s", m_err2str((MError)rc));
              }
              break;
          default:
              break;
          }
-    return MCE_UNSUPPORTED_DEVICE;
+    return errmsg(MCE_UNSUPPORTED_DEVICE);
 }
 
-McStatus MlxCfgOps::openComChk()
+int MlxCfgOps::openComChk()
 {
-    McStatus rc;
+    bool rc;
     // check if we support Tools HCR
     rc = supportsToolsHCR();
     if (rc) {
@@ -454,7 +685,15 @@ McStatus MlxCfgOps::openComChk()
     // TODO: change all configuration specific to updateInfo() as a virtual function in the base class and call that on all Cfg classes
     // update max Vfs
     if (supportsCfg(Mct_Sriov)) {
-        McStatus rc = static_cast<SriovParams*>(_cfgList[Mct_Sriov])->updateMaxVfs(_mf);
+        int rc = static_cast<SriovParams*>(_cfgList[Mct_Sriov])->updateMaxVfs(_mf);
+        if (rc) {
+            return rc;
+        }
+    }
+
+    // get max/current bar size
+    if (supportsCfg(Mct_Bar_Size)) {
+        int rc = static_cast<BarSzParams*>(_cfgList[Mct_Bar_Size])->updateBarSzInfo(_mf);
         if (rc) {
             return rc;
         }
@@ -462,31 +701,33 @@ McStatus MlxCfgOps::openComChk()
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::open(const char* devStr)
+int MlxCfgOps::open(const char* devStr)
 {
     _mf = mopen(devStr);
     if (_mf == NULL) {
-        return MCE_OPEN_DEVICE;
+        return errmsg(MCE_OPEN_DEVICE);
     }
 
     return openComChk();
 }
 
-McStatus MlxCfgOps::opend(mfile* mf)
+int MlxCfgOps::opend(mfile* mf)
 {
     if (!mf) {
-        return MCE_BAD_PARAMS;
+        return errmsg(MCE_BAD_PARAMS);
     }
     _mf = mf;
     return openComChk();
 }
 
-// TODO: implement
 bool MlxCfgOps::supportsCfg(mlxCfgType cfg)
 {
     if (!isLegal(cfg)) {
         return false;
     }
+    if (cfg == Mct_Bar_Size) { // dont enable these just yet, no FW support
+        return false;
+    }
     return _suppVec & cfgSuppMask[cfg];
 }
 
@@ -498,23 +739,23 @@ bool MlxCfgOps::supportsParam(mlxCfgParam param)
     return supportsCfg(cfgParam2Type(param));
 }
 
-McStatus MlxCfgOps::getCfg(mlxCfgParam cfgParam, u_int32_t& val)
+int MlxCfgOps::getCfg(mlxCfgParam cfgParam, u_int32_t& val)
 {
     if (!isLegal(cfgParam)) {
         return MCE_BAD_PARAMS;
     }
-    McStatus rc = _cfgList[cfgParam2Type(cfgParam)]->getFromDev(_mf);
+    int rc = _cfgList[cfgParam2Type(cfgParam)]->getFromDev(_mf);
     if (rc) {
-        return rc;
+        return errmsgConcatMsg(rc,*_cfgList[cfgParam2Type(cfgParam)]);
     }
     val = (_cfgList[cfgParam2Type(cfgParam)])->getParam(cfgParam);
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::getCfg(std::vector<cfgInfo>& infoVec)
+int MlxCfgOps::getCfg(std::vector<cfgInfo>& infoVec)
 {
     for (std::vector<cfgInfo>::iterator it = infoVec.begin() ; it != infoVec.end(); it++) {
-        McStatus rc = getCfg(it->first,it->second);
+        int rc = getCfg(it->first,it->second);
         if (rc) {
             return rc;
         }
@@ -522,20 +763,20 @@ McStatus MlxCfgOps::getCfg(std::vector<cfgInfo>& infoVec)
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::setCfg(mlxCfgParam cfgParam, u_int32_t val)
+int MlxCfgOps::setCfg(mlxCfgParam cfgParam, u_int32_t val, bool ignoreCheck)
 {
     if (!isLegal(cfgParam)) {
         return MCE_BAD_PARAMS;
     }
     _cfgList[cfgParam2Type(cfgParam)]->setParam(cfgParam, val);
-    McStatus rc = _cfgList[cfgParam2Type(cfgParam)]->setOnDev(_mf);
+    int rc = _cfgList[cfgParam2Type(cfgParam)]->setOnDev(_mf, ignoreCheck);
     if (rc) {
-        return rc;
+        return errmsgConcatMsg(rc, *_cfgList[cfgParam2Type(cfgParam)]);
     }
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::setCfg(const std::vector<cfgInfo>& infoVec)
+int MlxCfgOps::setCfg(const std::vector<cfgInfo>& infoVec, bool ignoreCheck)
 {
     // set params
     std::set<CfgParams*> CfgToSet;
@@ -545,49 +786,60 @@ McStatus MlxCfgOps::setCfg(const std::vector<cfgInfo>& infoVec)
             return MCE_BAD_PARAMS;
         }
         if (!supportsParam(it->first)) {
-            return MCE_UNSUPPORTED_CFG;
+            return errmsg(MCE_UNSUPPORTED_CFG);
         }
         _cfgList[cfgParam2Type(it->first)]->setParam(it->first, it->second);
         CfgToSet.insert(_cfgList[cfgParam2Type(it->first)]);
     }
     //set on device exit on first failure
     for (std::set<CfgParams*>::iterator it = CfgToSet.begin() ; it != CfgToSet.end(); it++) {
-        McStatus rc = (*it)->setOnDev(_mf);
+        int rc = (*it)->setOnDev(_mf, ignoreCheck);
         if (rc) {
-            return rc;
+            return errmsgConcatMsg(rc, (**it));
         }
     }
     return MCE_SUCCESS;
 }
 
-McStatus MlxCfgOps::invalidateCfgs()
+int MlxCfgOps::invalidateCfgs()
 {
 
-    struct tools_mnvia mnviaTlv;
-    u_int8_t buffer[tools_mnvia_size()];
-    memset(&mnviaTlv, 0, sizeof(struct tools_mnvia));
-    memset(buffer, 0, tools_mnvia_size());
+    struct tools_open_mnvia mnviaTlv;
+    u_int8_t buffer[tools_open_mnvia_size()];
+    memset(&mnviaTlv, 0, sizeof(struct tools_open_mnvia));
+    memset(buffer, 0, tools_open_mnvia_size());
 
     mnviaTlv.mnv_hdr.length = 0;
     mnviaTlv.mnv_hdr.type = 0;
     mnviaTlv.mnv_hdr.type_mod = 0;
-    tools_mnvia_pack(&mnviaTlv, buffer);
+    tools_open_mnvia_pack(&mnviaTlv, buffer);
     MError rc;
     rc = reg_access_mnvia(_mf, REG_ACCESS_METHOD_SET, &mnviaTlv);
-    return translateRc(rc);
+    if (rc) {
+        return errmsg("failed to invalidate configurations, %s.", m_err2str(rc));
+    }
+    return MCE_SUCCESS;
 }
 
 bool MlxCfgOps::isLegal(mlxCfgType cfg)
 {
-    return (cfg >= Mct_Sriov && cfg < Mct_Last) ;
+    if (cfg >= Mct_Sriov && cfg < Mct_Last) {
+        return true;
+    }
+    errmsg("illegal configuration");
+    return false;
 }
 
 bool MlxCfgOps::isLegal(mlxCfgParam cfg)
 {
-    return (cfg >= Mcp_Sriov_En && cfg < Mcp_Last) ;
+    if (cfg >= Mcp_Sriov_En && cfg < Mcp_Last) {
+        return true;
+    }
+    errmsg("illegal configuration parameter");
+    return false;
 }
 
-u_int64_t MlxCfgOps::cfgSuppMask[Mct_Last] = {SRIOV_MASK, WOL_P1_MASK, WOL_P2_MASK , VPI_P1_MASK, VPI_P2_MASK};
+u_int64_t MlxCfgOps::cfgSuppMask[Mct_Last] = {SRIOV_MASK, WOL_P1_MASK, WOL_P2_MASK , VPI_P1_MASK, VPI_P2_MASK, BAR_SZ_MASK};
 
 mlxCfgType MlxCfgOps::cfgParam2Type(mlxCfgParam param)
 {
@@ -604,103 +856,13 @@ mlxCfgType MlxCfgOps::cfgParam2Type(mlxCfgParam param)
         return Mct_Vpi_P1;
     case Mcp_Link_Type_P2 :
         return Mct_Vpi_P2;
+    case Mcp_Log_Bar_Size :
+        return Mct_Bar_Size;
     default :
             return Mct_Last;
     }
 }
 
-const char* MlxCfgOps::err2str(McStatus rc)
-{
-    switch (rc) {
-    case MCE_TLV_NOT_FOUND:
-        return "Configuration not found.";
-    case MCE_TLV_NOT_SUPP:
-        return "The Configuration Tlv is not supported.";
-    case MCE_NVCFG_NOT_SUPP:
-    case MCE_REG_NOT_SUPP:
-        return "Fw does not support NV access registers.";
-    case MCE_TOOLS_HCR_NOT_SUPP:
-        return "Unsupported FW (version 2.31.5000 or above required for CX3/PRO)";
-    case MCE_UNSUPPORTED_CFG:
-        return "Fw does not support configuration.";
-    case MCE_UNSUPPORTED_DEVICE:
-        return "Device not supported.";
-    case MCE_BAD_PARAMS:
-        return "Bad Parameters.";
-    case MCE_BAD_PARAM_VAL:
-        return "Illegal parameter value.";
-    case MCE_FAILED:
-    case MCE_BAD_STATUS:
-    case MCE_CR_ERROR:
-        return "General Failure";
-    case MCE_NOT_IMPLEMENTED:
-        return "Not implemented.";
-    case MCE_DEV_BUSY:
-        return "Device busy.";
-    case MCE_UNKNOWN_TLV:
-        return "Unknown Tlv.";
-    case MCE_RES_NOT_AVAIL:
-        return "Resource not available";
-    case MCE_CONF_CORRUPT:
-        return "Configuration is corrupted.";
-    case MCE_BAD_CONFIG:
-        return "bad configuration.";
-    case MCE_ERASE_EXEEDED:
-        return "Erase exceeded flash spec.";
-    case MCE_BAD_OP:
-        return "Bad Operation.";
-    case MCE_DRIVER_DOWN:
-        return "Cannot perform operation, Driver might be down.";
-    case MCE_INCOMPLETE_PARAMS: // HACK: atm SRIOV is the only configuration that might recv this error
-        return "Failed to get missing configuration from device, please specify all the needed parameters for SRIOV.";
-    case MCE_OPEN_DEVICE:
-        return "Failed to open device.";
-    case MCE_PCICONF:
-        return "Access to device should be through configuration cycles only.";
-
-    default:
-        return "General Error.";
-    }
-}
-
-McStatus translateRc(MError rc) {
-    switch (rc) {
-    case ME_OK:
-        return MCE_SUCCESS;
-    case ME_REG_ACCESS_DEV_BUSY:
-    case ME_SEM_LOCKED:
-        return MCE_DEV_BUSY;
-    case ME_REG_ACCESS_UNKNOWN_TLV:
-        return MCE_UNKNOWN_TLV;
-    case ME_REG_ACCESS_REG_NOT_SUPP:
-        return MCE_REG_NOT_SUPP;
-    case ME_REG_ACCESS_METHOD_NOT_SUPP:
-        return MCE_METHOD_NOT_SUPP;
-    case ME_REG_ACCESS_BAD_PARAM:
-    case ME_BAD_PARAMS:
-        return MCE_BAD_PARAMS;
-    case ME_REG_ACCESS_RES_NOT_AVLBL:
-        return MCE_RES_NOT_AVAIL;
-    case ME_REG_ACCESS_CONF_CORRUPT:
-        return MCE_CONF_CORRUPT;
-    case ME_REG_ACCESS_LEN_TOO_SMALL:
-        return MCE_TLV_LEN_TOO_SMALL;
-    case ME_REG_ACCESS_BAD_CONFIG:
-        return MCE_BAD_CONFIG;
-    case ME_REG_ACCESS_ERASE_EXEEDED:
-        return MCE_ERASE_EXEEDED;
-    case ME_CMDIF_BAD_OP:
-        return MCE_BAD_OP;
-    case ME_CMDIF_BAD_STATUS:
-        return MCE_BAD_STATUS;
-    case ME_CR_ERROR:
-        return MCE_CR_ERROR;
-
-    default:
-        return MCE_UNKNOWN_ERR;
-    }
-}
-
 static void dealWithSignal()
 {
     int sig;
@@ -717,10 +879,10 @@ static void dealWithSignal()
     return;
 }
 
-McStatus mnvaCom(mfile* mf, u_int8_t* buff, u_int16_t len, u_int16_t type, reg_access_method_t method, u_int16_t typeMod)
+MError mnvaCom(mfile* mf, u_int8_t* buff, u_int16_t len, u_int16_t type, reg_access_method_t method, u_int16_t typeMod)
 {
-    struct tools_mnva mnvaTlv;
-    memset(&mnvaTlv, 0, sizeof(struct tools_mnva));
+    struct tools_open_mnva mnvaTlv;
+    memset(&mnvaTlv, 0, sizeof(struct tools_open_mnva));
 
     mnvaTlv.mnv_hdr.length = len >> 2; // length is in dwords
     mnvaTlv.mnv_hdr.type = type;
@@ -732,9 +894,9 @@ McStatus mnvaCom(mfile* mf, u_int8_t* buff, u_int16_t len, u_int16_t type, reg_a
     rc = reg_access_mnva(mf, method, &mnvaTlv);
     dealWithSignal();
     if (rc) {
-        return translateRc(rc);
+        return rc;
     }
     memcpy(buff, mnvaTlv.data, len);
-    return MCE_SUCCESS;
+    return ME_OK;
 }
 
index fe53e0dab0e24a189e6d7dc87f4a4f554ed4352b..8438b5e6094e84d22525d6d36d589c9ab6214cd5 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-
+/*
+ * mlxcfg_lib.h
+ *
+ *  Created on: Feb 17, 2014
+ *      Author: adrianc
+ */
 
 #ifndef MLXCFG_LIB_H_
 #define MLXCFG_LIB_H_
 
 #include <mtcr.h>
 
+#include "errmsg.h"
+
 
 #define MLXCFG_UNKNOWN 0xffffffff
 
 #define WOL_TYPE 0x10
 #define SRIOV_TYPE 0x11
 #define VPI_TYPE 0x12
+#define BAR_SIZE_TYPE 0x13
 
 
-
-
-typedef enum {
-    MCE_SUCCESS = 0,
-    MCE_TLV_NOT_FOUND,
-    MCE_TLV_NOT_SUPP,
-    MCE_NVCFG_NOT_SUPP,
-    MCE_TOOLS_HCR_NOT_SUPP,
-    MCE_DRIVER_DOWN,
-    MCE_UNSUPPORTED_DEVICE,
-    MCE_UNSUPPORTED_CFG,
-    MCE_BAD_PARAMS,
-    MCE_BAD_PARAM_VAL,
-    MCE_DEV_BUSY,
-    MCE_UNKNOWN_TLV,
-    MCE_REG_NOT_SUPP,
-    MCE_METHOD_NOT_SUPP,
-    MCE_RES_NOT_AVAIL,
-    MCE_CONF_CORRUPT,
-    MCE_TLV_LEN_TOO_SMALL,
-    MCE_BAD_CONFIG,
-    MCE_ERASE_EXEEDED,
-    MCE_BAD_OP,
-    MCE_BAD_STATUS,
-    MCE_CR_ERROR,
-    MCE_NOT_IMPLEMENTED,
-    MCE_INCOMPLETE_PARAMS,
-    MCE_OPEN_DEVICE,
-    MCE_PCICONF,
-    MCE_UNKNOWN_ERR,
-    MCE_FAILED,
-    MCE_LAST
-
-}McStatus;
-
 typedef enum {
     Mct_Sriov = 0,
     Mct_Wol_P1,
     Mct_Wol_P2,
     Mct_Vpi_P1,
     Mct_Vpi_P2,
+    Mct_Bar_Size,
     Mct_Last
 } mlxCfgType;
 
@@ -98,46 +72,45 @@ typedef enum {
     Mcp_Wol_Magic_En_P2,
     Mcp_Link_Type_P1,
     Mcp_Link_Type_P2,
+    Mcp_Log_Bar_Size,
     Mcp_Last
 } mlxCfgParam;
 
 typedef std::pair<mlxCfgParam, u_int32_t> cfgInfo;
 
-class MlxCfgOps {
+class MlxCfgOps : public ErrMsg {
 public:
     MlxCfgOps();
     ~MlxCfgOps();
-    McStatus open(const char* devStr);
-    McStatus opend(mfile* mf);
+    int open(const char* devStr);
+    int opend(mfile* mf);
 
     // no need to close , this is done  in destructor
 
     bool supportsCfg(mlxCfgType cfg);
     bool supportsParam(mlxCfgParam param);
 
-    McStatus getCfg(mlxCfgParam cfgParam, u_int32_t& val);
-    McStatus getCfg(std::vector<cfgInfo>& infoVec);
+    int getCfg(mlxCfgParam cfgParam, u_int32_t& val);
+    int getCfg(std::vector<cfgInfo>& infoVec);
 
-    McStatus setCfg(mlxCfgParam cfgParam, u_int32_t val);
-    McStatus setCfg(const std::vector<cfgInfo>& infoVec);
+    int setCfg(mlxCfgParam cfgParam, u_int32_t val, bool ignoreCheck=false);
+    int setCfg(const std::vector<cfgInfo>& infoVec, bool ignoreCheck=false);
 
-    McStatus invalidateCfgs();
-
-    static const char* err2str(McStatus rc);
+    int invalidateCfgs();
 
 private:
 
-    class CfgParams
+    class CfgParams : public ErrMsg
     {
     public:
-        CfgParams(mlxCfgType t=Mct_Last, u_int32_t tlvT=0) : type(t), tlvType(tlvT), _updated(false) {}
+        CfgParams(mlxCfgType t=Mct_Last, u_int32_t tlvT=0);
         virtual ~CfgParams() {}
 
         virtual void setParam(mlxCfgParam paramType, u_int32_t val) = 0;
         virtual u_int32_t getParam(mlxCfgParam paramType) = 0;
 
-        virtual McStatus getFromDev(mfile* mf) = 0;
-        virtual McStatus setOnDev(mfile* mf) = 0;
+        virtual int getFromDev(mfile* mf) = 0;
+        virtual int setOnDev(mfile* mf, bool ignoreCheck=false) = 0;
 
         mlxCfgType type;
         u_int32_t tlvType;
@@ -155,10 +128,10 @@ private:
         virtual void setParam(mlxCfgParam paramType, u_int32_t val);
         virtual u_int32_t getParam(mlxCfgParam paramType);
 
-        virtual McStatus getFromDev(mfile* mf);
-        virtual McStatus setOnDev(mfile* mf);
+        virtual int getFromDev(mfile* mf);
+        virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
 
-        McStatus updateMaxVfs(mfile* mf);
+        int updateMaxVfs(mfile* mf);
 
     private:
         virtual bool isLegal(mfile* mf);
@@ -177,9 +150,8 @@ private:
         virtual void setParam(mlxCfgParam paramType, u_int32_t val);
         virtual u_int32_t getParam(mlxCfgParam paramType);
 
-        virtual McStatus getFromDev(mfile* mf);
-        virtual McStatus setOnDev(mfile* mf);
-
+        virtual int getFromDev(mfile* mf);
+        virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
 
     private:
         virtual bool isLegal(mfile* mf=NULL);
@@ -197,9 +169,8 @@ private:
         virtual void setParam(mlxCfgParam paramType, u_int32_t val);
         virtual u_int32_t getParam(mlxCfgParam paramType);
 
-        virtual McStatus getFromDev(mfile* mf);
-        virtual McStatus setOnDev(mfile* mf);
-
+        virtual int getFromDev(mfile* mf);
+        virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
 
     private:
         virtual bool isLegal(mfile* mf=NULL);
@@ -207,8 +178,31 @@ private:
         u_int32_t _linkType;
     };
 
-    McStatus openComChk();
-    McStatus supportsToolsHCR();
+    class BarSzParams : public CfgParams
+    {
+    public:
+        BarSzParams() : CfgParams(Mct_Bar_Size, BAR_SIZE_TYPE) ,_maxLogBarSz(1), _currLogBarSz(1), _logBarSz(MLXCFG_UNKNOWN) {}
+        ~BarSzParams() {};
+
+        virtual void setParam(mlxCfgParam paramType, u_int32_t val);
+        virtual u_int32_t getParam(mlxCfgParam paramType);
+
+        virtual int getFromDev(mfile* mf);
+        virtual int setOnDev(mfile* mf, bool ignoreCheck=false);
+
+        int updateBarSzInfo(mfile* mf);
+
+    private:
+        virtual bool isLegal(mfile* mf=NULL);
+        u_int32_t _maxLogBarSz;
+        u_int32_t _currLogBarSz;
+        u_int32_t _logBarSz;
+
+    };
+
+
+    int openComChk();
+    int supportsToolsHCR();
     bool isLegal(mlxCfgType cfg);
     bool isLegal(mlxCfgParam cfg);
 
index ae2f559b0426d7978f39d084121b3398b5e8734d..d10c241328b3267465064795d6939852fd86cf3b 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -49,7 +49,7 @@ using namespace std;
 
 
 
-static void printFlagLine(string flag_s, string flag_l,string param, string desc)
+static void printFlagLine(string flag_s, string flag_l, string param, string desc)
 {
     printf(IDENT2"-%s|--%s", flag_s.c_str(), flag_l.c_str());
     if (param.length()) {
@@ -66,7 +66,7 @@ void MlxCfg::printHelp()
     printf(IDENT"NAME:\n"
            IDENT2   MLXCFG_NAME"\n"
            IDENT"SYNOPSIS:\n"
-           IDENT2    MLXCFG_NAME " [-d <device> ] [-y] <s[et]|q[uery]|r[eset]> [parameters to set]\n");
+           IDENT2    MLXCFG_NAME " [-d <device> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n");
 
     // print options
     printf("\n");
@@ -79,18 +79,21 @@ void MlxCfg::printHelp()
     //print commands
     printf("\n");
     printf(IDENT"COMMANDS:\n");
-    printf(IDENT2"q[uery]\t: query current supported configurations.\n");
-    printf(IDENT2"s[et]\t: set configurations to a specific device.\n");
-    printf(IDENT2"r[eset]\t: reset configurations to their default value.\n");
+    printf(IDENT2"%-24s : %s\n","q[uery]", "query current supported configurations.");
+    printf(IDENT2"%-24s : %s\n","s[et]", "set configurations to a specific device.");
+    printf(IDENT2"%-24s : %s\n","r[eset]", "reset configurations to their default value.");
 
     // print supported commands
     printf("\n");
     printf(IDENT"Supported Configurations:\n");
-    printf(IDENT2"SRIOV\t\t\t: SRIOV_EN=<1|0> NUM_OF_VFS=<NUM>\n");
-    printf(IDENT2"WOL_PORT1\t\t: WOL_MAGIC_EN_P1=<1|0>\n");
-    printf(IDENT2"WOL_PORT2\t\t: WOL_MAGIC_EN_P2=<1|0>\n");
-    printf(IDENT2"VPI_SETTINGS_PORT1\t: LINK_TYPE_P1=<1|2|3> , 1=Infiniband 2=Ethernet 3=VPI(auto-sense).\n");
-    printf(IDENT2"VPI_SETTINGS_PORT2\t: LINK_TYPE_P2=<1|2|3>\n");
+    printf(IDENT2"%-24s : %s\n","SRIOV", "SRIOV_EN=<1|0> NUM_OF_VFS=<NUM>");
+    printf(IDENT2"%-24s : %s\n","WOL_PORT1", "WOL_MAGIC_EN_P1");
+    printf(IDENT2"%-24s : %s\n","WOL_PORT2", "WOL_MAGIC_EN_P2=<1|0>");
+    printf(IDENT2"%-24s : %s\n","VPI_SETTINGS_PORT1", "LINK_TYPE_P1=<1|2|3> , 1=Infiniband 2=Ethernet 3=VPI(auto-sense).");
+    printf(IDENT2"%-24s : %s\n","VPI_SETTINGS_PORT2", "LINK_TYPE_P2=<1|2|3>");
+    //printf(IDENT2"%-24s : %s\n","BAR_SIZE", "LOG_BAR_SIZE=<Base_2_log_in_mb> , example: for 8Mb bar size set LOG_BAR_SIZE=3");
+
+    // print usage examples
     printf("\n");
     printf(IDENT"Examples:\n");
     printf(IDENT2"%-35s: %s\n", "To query current Configuration", MLXCFG_NAME" -d "MST_DEV_EXAMPLE" query");
@@ -107,6 +110,11 @@ void MlxCfg::printVersion()
     print_version_string(MLXCFG_NAME, "");
 }
 
+void MlxCfg::printUsage() {
+    printf("\n"IDENT"Usage:\n"
+           IDENT2    MLXCFG_NAME " [-d <device> ] [-y] <s[et] <parameters to set>|q[uery]|r[eset]>\n\n");
+}
+
 bool MlxCfg::tagExsists(mlxCfgParam tag) {
     for (std::vector<cfgInfo>::iterator it = _mlxParams.params.begin() ; it != _mlxParams.params.end(); it++) {
         if (it->first == tag) {
@@ -129,7 +137,8 @@ mlxCfgStatus MlxCfg::processArg(string tag, u_int32_t val)
             break;
         }
     }
-    if (i == Mcp_Last) {
+    // we dont support BAR_SZ atm
+    if (i == Mcp_Last || i == Mcp_Log_Bar_Size) {
         return err(true, "Unknown Parameter: %s", tag.c_str());
     }
     return MLX_CFG_OK;
@@ -177,7 +186,7 @@ mlxCfgStatus MlxCfg::extractCfgArgs(int argc, char* argv[])
             return err(true, "Invalid Configuration argument %s", argv[i]);
         }
         //printf("-D- %s %s\n", tag.c_str(), valstr.c_str());
-        if (!strToNum(valstr, val)) {
+        if (!strToNum(valstr, val, 10)) {
             return err(true, "Failed to parse %s=%s", tag.c_str(), valstr.c_str());
         }
         // store val in the correct place in  mlxconfig Params
@@ -219,6 +228,9 @@ mlxCfgStatus MlxCfg::parseArgs(int argc, char* argv[])
         } else if (arg == "reset" || arg == "r") {
             _mlxParams.cmd = Mc_Reset;
             break;
+        // hidden flag --force used to ignore parameter checks
+        } else if (arg == "--force"){
+            _mlxParams.force = true;
         } else {
             return err(true, "invalid argument: %s", arg.c_str());
         }
index aa3e8582d765f0ef91965ca6cd776b1318f616f0..48a3e4e356401cbba9f0edcb1b0c79c65cb2e477 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -29,7 +29,6 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -78,9 +77,8 @@ void TerminationHandler(int signum)
     fatal_error_in_progress = 1;
 
     signal (signum, SIG_DFL);
-    printf("\n Received signal %d. \n", signum);
+    printf("\n Received signal %d.\n", signum);
     fflush(stdout);
-
     raise(signum);
 }
 
@@ -121,7 +119,7 @@ void initHandler()
 #endif
 
 std::string MlxCfgParams::param2str[Mcp_Last]= {"SRIOV_EN", "NUM_OF_VFS", "WOL_MAGIC_EN_P1", "WOL_MAGIC_EN_P2",\
-                                                "LINK_TYPE_P1", "LINK_TYPE_P2"};
+                                                "LINK_TYPE_P1", "LINK_TYPE_P2", "LOG_BAR_SIZE"};
 
 u_int32_t MlxCfgParams::getParamVal(mlxCfgParam p)
 {
@@ -170,9 +168,9 @@ if (question == NULL) {
      char ansbuff[32];
      ansbuff[0] = '\0';
      fflush(stdout);
-     //fgets(ansbuff, 30, stdin);
-     int rc=fscanf(stdin, "%30s", ansbuff);
-     (void)rc; // avoid warnings
+     int cnt=fscanf(stdin, "%30s", ansbuff);
+     (void)cnt; // avoid warnings
+
      if (  strcasecmp(ansbuff, "y") &&
            strcasecmp(ansbuff, "yes"))  {
 
@@ -195,10 +193,11 @@ mlxCfgStatus MlxCfg::queryDevsCfg()
         int  numOfDev;
         dev_info* dev = mdevices_info(MDEVS_TAVOR_CR, &numOfDev);
 
-        if (numOfDev == -1) {
+        if (dev == NULL) {
             return err(true, "Failed to get devices.");
         }
         if (numOfDev == 0) {
+            mdevices_info_destroy(dev, numOfDev);
             return err(true, NO_DEV_ERR);
         }
         //printf("-D- num of dev: %d , 1st dev : %s\n", numOfDev, buf);
@@ -219,30 +218,25 @@ mlxCfgStatus MlxCfg::queryDevsCfg()
     return shouldFail? MLX_CFG_ERROR : MLX_CFG_OK;
 }
 
-#define IDENT "\t"
-#define IDENT2 "\t\t"
-
-
 static void printParam(u_int32_t param)
 {
     if (param == MLXCFG_UNKNOWN) {
-            printf("N/A");
+            printf("%-8s", "N/A");
         } else {
-            printf("%d", param);
+            printf("%-8d", param);
         }
     return;
 }
 
 static void printOneParam(const char* name, u_int32_t currVal, bool printNewCfg=false, u_int32_t newVal= MLXCFG_UNKNOWN)
 {
-    printf(IDENT"%s"IDENT, name);
+    printf("         %-16s", name);
     printParam(currVal);
-    printf(IDENT);
     if (printNewCfg) {
         if (newVal == MLXCFG_UNKNOWN) {
             printParam(currVal);
         } else {
-            printf("%d", newVal);
+            printf("%-8d", newVal);
         }
     }
     printf("\n");
@@ -271,34 +265,37 @@ const char* MlxCfg::getDeviceName(const char* dev)
 mlxCfgStatus MlxCfg::queryDevCfg(const char* dev,const char* pci, int devIndex, bool printNewCfg)
 {
     MlxCfgOps ops;
-    McStatus rc;
+    bool rc;
     bool failedToGetCfg = false;
     bool nothingSupported = true;
     (void) pci;
     // print opening
     printf("\nDevice #%d:\n", devIndex);
     printf("----------\n\n");
-    printf("Device type:"IDENT"%s\n", getDeviceName(dev));
-    printf("PCI device:"IDENT"%s\n", dev);
+    printf("%-16s%-16s\n", "Device type:", getDeviceName(dev));
+    printf("%-16s%-16s\n", "PCI device:", dev);
     // TODO : get this info
-    //printf("Part Number:"IDENT"%s\n", "123456");
-    //printf("Psid:"IDENT2"%s\n", "78901111");
+    //printf("%-16s%-16s\n", "Part Number:", "123456");
+    //printf("%-16s%-16s\n", "Psid:", "78901111");
     printf("\n");
 
     rc = ops.open(dev);
     if (rc) {
-        err(false, "Failed to query device: %s. %s", dev, MlxCfgOps::err2str(rc));
+        err(false, "Failed to query device: %s. %s", dev, ops.err());
         return MLX_CFG_ERROR_EXIT;
     }
 
     //print configuration Header
-    printf("Configurations:"IDENT2"Current");
+    printf("%-16s%16s","Configurations:","Current");
     if (printNewCfg) {
-        printf(IDENT"New");
+        printf(" %s", "New");
     }
     printf("\n");
 
     for (int p = (int)Mcp_Sriov_En ; p < (int)Mcp_Last; ++p) {
+        if (p == Mcp_Log_Bar_Size) { // we dont support bar size atm
+            continue;
+        }
         if (!ops.supportsParam((mlxCfgParam)p)) {
             continue;
         }
@@ -306,10 +303,11 @@ mlxCfgStatus MlxCfg::queryDevCfg(const char* dev,const char* pci, int devIndex,
         u_int32_t currentParam = MLXCFG_UNKNOWN ;
         u_int32_t newParam = _mlxParams.getParamVal((mlxCfgParam)p);
         rc = ops.getCfg((mlxCfgParam)p, currentParam);
-        if (rc && rc != MCE_RES_NOT_AVAIL) {
+        if (rc) {
             failedToGetCfg = true;
-            printf(IDENT"%s"IDENT"failed to get current configuration. %s\n", MlxCfgParams::param2str[p].c_str(),\
-                    MlxCfgOps::err2str(rc));
+            printf("         %-16s%-16s %s\n", MlxCfgParams::param2str[p].c_str(), "failed to get current configuration.",\
+                    ops.err());
+            err(false, "Failed to query device configuration");
         } else {
             printOneParam(MlxCfgParams::param2str[p].c_str(), currentParam, printNewCfg, newParam);
         }
@@ -330,6 +328,10 @@ mlxCfgStatus MlxCfg::setDevCfg()
     // even if there is problem fetching the current cfg we will attempt to write the new info
     // if the user agrees
 
+    if (_mlxParams.force) {
+        printf("\n-W- Force flag specified, the validity of the Parameters will not be checked !\n");
+        printf("-W- Incorrect configuration might yield unexpected results. running in this mode is not recommended.");
+    }
     // ask user
     if(!askUser("Apply new Configuration?")) {
         printErr();
@@ -338,19 +340,19 @@ mlxCfgStatus MlxCfg::setDevCfg()
 
     // write cfgs
     MlxCfgOps ops;
-    McStatus rc;
+    bool rc;
 
     rc = ops.open(_mlxParams.device.c_str());
     if (rc) {
         return err(false, "Failed to set configuration on device: %s. %s", _mlxParams.device.c_str(), \
-                MlxCfgOps::err2str(rc));
+               ops.err());
     }
     printf("Applying... ");
     // set Configuration
-    rc = ops.setCfg(_mlxParams.params);
+    rc = ops.setCfg(_mlxParams.params, _mlxParams.force);
     if (rc) {
         printf("Failed!\n");
-        err(true, "Failed to set configuration: %s", MlxCfgOps::err2str(rc));
+        err(true, "Failed to set configuration: %s", ops.err());
         return MLX_CFG_ERROR;
     }
 
@@ -382,10 +384,11 @@ mlxCfgStatus MlxCfg::resetDevsCfg()
         int  numOfDev;
         dev_info* dev = mdevices_info(MDEVS_TAVOR_CR, &numOfDev);
 
-        if (numOfDev == -1) {
+        if (dev == NULL) {
             return err(true, "Failed to get devices.");
         }
         if (numOfDev == 0) {
+            mdevices_info_destroy(dev, numOfDev);
             return err(true, NO_DEV_ERR);
         }
         if (!askUser("Reset configuration for all devices? ")){
@@ -421,17 +424,17 @@ mlxCfgStatus MlxCfg::resetDevsCfg()
 mlxCfgStatus MlxCfg::resetDevCfg(const char* dev)
 {
     MlxCfgOps ops;
-    McStatus rc;
+    bool rc;
 
     rc = ops.open(dev);
     if (rc) {
-        return err(false, "Failed to open device: %s. %s", dev, MlxCfgOps::err2str(rc));
+        return err(false, "Failed to open device: %s. %s", dev, ops.err());
     }
 
     // reset cfg
     rc = ops.invalidateCfgs();
     if (rc) {
-        return err(false, "failed to reset configurations. %s", ops.err2str(rc));
+        return err(false, "failed to reset configurations. %s", ops.err());
     }
 
     return MLX_CFG_OK;
@@ -444,6 +447,8 @@ mlxCfgStatus MlxCfg::execute(int argc, char* argv[])
     if (rc) {
         if (rc == MLX_CFG_OK_EXIT) {
             rc = MLX_CFG_OK;
+        } else {
+            printUsage();
         }
         return rc;
     }
@@ -469,11 +474,11 @@ mlxCfgStatus MlxCfg::execute(int argc, char* argv[])
 
 mlxCfgStatus MlxCfg::test(const char* dev)
 {
-    McStatus rc;
+    bool rc;
     MlxCfgOps ops;
     rc = ops.open(dev);
     if (rc) {
-        return err(true, "Failed to open device: %s. %s", dev, MlxCfgOps::err2str(rc));
+        return err(true, "Failed to open device: %s. %s", dev, ops.err());
     }
     u_int32_t val;
     rc =ops.invalidateCfgs();
@@ -485,7 +490,7 @@ mlxCfgStatus MlxCfg::test(const char* dev)
     rc =ops.getCfg(Mcp_Wol_Magic_En_P1, val);
     printf("get sriov_en get after set : rc = %d , val = %d\n", rc,val);
     if (rc) {
-        printf("-D- %s\n",MlxCfgOps::err2str(rc));
+        printf("-D- %s\n",ops.err());
     }
     return MLX_CFG_OK;
 }
index b9798f8d810886eb5a8bc454275e111476f9118f..7a86eaa501ffc1aba2d7f3a1c837437817b2867d 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -59,7 +59,7 @@ typedef enum {
 class MlxCfgParams
 {
 public:
-    MlxCfgParams() : device(),cmd(Mc_UnknownCmd), yes(false) {}
+    MlxCfgParams() : device(),cmd(Mc_UnknownCmd), yes(false), force(false) {}
     ~MlxCfgParams() {}
 
     std::string device;
@@ -67,6 +67,7 @@ public:
     bool yes;
     std::vector<cfgInfo> params;
     static std::string param2str[Mcp_Last];
+    bool force;// ignore parameter checks
 
     u_int32_t getParamVal(mlxCfgParam p);
 };
@@ -83,6 +84,7 @@ private:
     // User interface and parsing methods
     void printHelp();
     void printVersion();
+    void printUsage();
     mlxCfgStatus parseArgs(int argc, char* argv[]);
     //Helper functions for parse args
     mlxCfgStatus processArg(std::string tag, u_int32_t val);
index 4fab8fe80046f7d1022d93239834dd40c00cfe4f..68e05e24376b4b25a0a47a0ccefd825d27e7425d 100755 (executable)
 
 # Makefile.am -- Process this file with automake to produce Makefile.in
 MTCR_DIR = $(top_srcdir)/mtcr_ul
+MTCR_INC_DIR = $(top_srcdir)/include/mtcr_ul
 MFLASH_DIR = $(top_srcdir)/mflash
 MINIXZ_DIR = $(top_srcdir)/ext_libs/minixz
 COMMON_DIR = $(top_srcdir)/common
 LAYOUTS_DIR = $(top_srcdir)/tools_layouts
 UTILS_LIB = $(top_srcdir)/mft_utils
 
-INCLUDES = -I$(srcdir) -I$(MTCR_DIR) -I$(MFLASH_DIR) -I$(top_srcdir)/ext_libs/json -I$(MINIXZ_DIR)\
+INCLUDES = -I$(srcdir) -I$(MTCR_INC_DIR) -I$(MFLASH_DIR) -I$(top_srcdir)/ext_libs/json -I$(MINIXZ_DIR)\
            -I$(COMMON_DIR) -I$(MFT_EXT_LIBS_INC_DIR)/zlib -I $(LAYOUTS_DIR) -I$(top_srcdir)/common -I$(UTILS_LIB)
 
 MLXFWOPS_VERSION = 1
index f041f1779be4d4673a4830fd9fa42968833478ee..fe6574ca4217be5baa50d1f9940689a5cc16feea 100755 (executable)
@@ -2,7 +2,7 @@
  *
  * flint_base.cpp - FLash INTerface
  *
- * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
+ * Copyright (c) 2011 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -31,6 +31,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id: flint_base.cpp 7522 2011-11-16 15:37:21Z mohammad $
+ *
  */
 
 #include <stdarg.h>
index c11374a40a989582690eda1520a47635a0d44e30..53ec8d6cecb29c10106ace5e3a67a7309924dc5c 100755 (executable)
@@ -2,7 +2,7 @@
  *
  * flint_base.h - FLash INTerface
  *
- * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
+ * Copyright (c) 2011 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -31,6 +31,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id: flint_base.h 7522 2011-11-16 15:37:21Z mohammad $
+ *
  */
 #ifndef FLINT_BASE_H
 #define FLINT_BASE_H
@@ -224,9 +227,9 @@ namespace std {}; using namespace std;
 #define CONNECT_IB_HW_ID  511
 #define BRIDGEX_HW_ID     6100
 #define IS4_HW_ID         435
-#define TAVOR_HW_ID       23108
-#define ARBEL_HW_ID       25208
-#define SINAI_HW_ID       25204
+#define INFINIHOST_HW_ID            23108
+#define INFINIHOST_III_EX_HW_ID     25208
+#define INFINIHOST_III_LX_HW_ID     25204
 #define CONNECT_IB_SW_ID  4113
 
 // FS3 defines
index 3e86e0e551da0d8cd7765ad7c0bf5a2468afbd9a..af92954c0aa645a7562c91abbb1ccfc7e4823f49 100755 (executable)
@@ -2,7 +2,7 @@
  *
  * flint_io.cpp - FLash INTerface
  *
- * Copyright (c) 2013 Mellanox Technologies Ltd.  All rights reserved.
+ * Copyright (c) 2011 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -31,6 +31,9 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
+ *  Version: $Id: flint_io.cpp 7522 2011-11-16 15:37:21Z mohammad $
+ *
  */
 
 #include <errno.h>
@@ -207,7 +210,7 @@ bool Flash::open_com_checks(const char *device, int rc, bool force_lock)
 
     if (rc != MFE_OK) {
         if (rc == MFE_SEM_LOCKED) {
-            return errmsgAdv(_advErrors, "Can not obtain Flash semaphore (62).", "You can run \"flint -clear_semaphore -d <device>\" to force semaphore unlock. See help for details.");
+            return errmsgAdv(_advErrors, "Can not obtain Flash semaphore (63).", "You can run \"flint -clear_semaphore -d <device>\" to force semaphore unlock. See help for details.");
         }
         if (rc == MFE_LOCKED_CRSPACE) {
             _cr_space_locked = 1;
@@ -267,6 +270,7 @@ bool Flash::open(const char *device, bool force_lock, bool read_only, int num_of
     // Open device
     int rc;
     _advErrors = advErr;
+    _ignore_cache_replacement = ignore_cashe_replacement ? true : false;
     (void)read_only; // not used , avoid compiler warnings TODO: remove this var from function def
     rc = mf_open(&_mfl, device, num_of_banks, flash_params, ignore_cashe_replacement);
     //printf("device: %s , forceLock: %s , read only: %s, num of banks: %d, flash params is null: %s, ocr: %d, rc: %d\n",
@@ -750,6 +754,27 @@ bool  Flash::set_attr(char *param_name, char *param_val_str)
     return true;
 }
 
+bool Flash::is_flash_write_protected()
+{
+    int bank;
+    int rc;
+    write_protect_info_t protect_info;
+
+    if (_attr.write_protect_support) {
+        for (bank = 0; bank < _attr.banks_num; bank++) {
+            rc = mf_get_write_protect(_mfl, bank, &protect_info);
+            if (rc == MFE_OK && protect_info.sectors_num != 0) {
+                return true;
+            } else {
+                if (rc && rc != MFE_NOT_SUPPORTED_OPERATION) { // We ignore when operation is not supported
+                    return true;
+                }
+            }
+       }
+    }
+    return false;
+}
+
 void Flash::deal_with_signal()
 {
     int sig;
index df383caa77fb0d8166cf06943fe2494c647bcd48..e0235de94e8b7e7c5508406b9cb1a6a4b76f35c2 100755 (executable)
@@ -2,7 +2,7 @@
  *
  * flint_io.h - FLash INTerface
  *
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
+ * Copyright (c) 2011 Mellanox Technologies Ltd.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -35,8 +35,6 @@
  *  Version: $Id: flint_io.h 7522 2011-11-16 15:37:21Z mohammad $
  *
  */
-
-
 #ifndef FLINT_IO_H
 #define FLINT_IO_H
 
@@ -222,6 +220,7 @@ public:
     FBase(true),
     _mfl(NULL),
     _no_flash_verify(false),
+    _ignore_cache_replacement(false),
     _curr_sector(0xffffffff),
     _port_num(0),
     _cr_space_locked(0)
@@ -274,6 +273,7 @@ public:
     u_int32_t get_rev_id             ()  {return _attr.rev_id; }
     u_int32_t get_port_num           ()  {return _port_num;}
     u_int8_t  get_cr_space_locked    ()  {return _cr_space_locked;}
+    bool  get_ignore_cache_replacment()  {return _cr_space_locked;}
 
     bool sw_reset();
 
@@ -302,6 +302,8 @@ public:
 
     bool         set_attr(char *param_name,
                           char *param_val_str);
+
+    bool is_flash_write_protected();
     static void  deal_with_signal();
 
     enum {
@@ -329,9 +331,11 @@ protected:
     bool write_sector_with_erase(u_int32_t addr, void *data, int cnt);
     bool write_with_erase(u_int32_t addr, void *data, int cnt);
 
+
     mflash*    _mfl;
     flash_attr _attr;
     bool _no_flash_verify;
+    bool _ignore_cache_replacement; // for FS3 devices flash access.
 
     u_int32_t  _curr_sector;
     u_int32_t  _port_num;
index cda498bfd61f76aa11a33321ed2bbff2a8c105cc..24bc702fd30130b09871946e99f91ba7f3f12761 100644 (file)
@@ -1065,7 +1065,7 @@ bool Fs2Operations::CheckBxMacsFormat(guid_t* guids, int index, int user_uids)
 ////////////////////////////////////////////////////////////////////////
 void Fs2Operations::patchGUIDsSection(u_int32_t *buf, u_int32_t ind, guid_t guids[MAX_GUIDS], int nguids)
 {
-    u_int32_t       new_buf[MAX_GUIDS*2];
+    u_int32_t       new_buf[MAX_GUIDS*2] = {0};
 
     // Form new GUID section
     for (u_int32_t i=0; i<(u_int32_t)nguids; i++) {
@@ -1406,9 +1406,6 @@ bool Fs2Operations::Fs2Burn(Fs2Operations &imageOps, ExtBurnParams& burnParams)
         }
     }
 
-
-
-
     // Guids patch
     _burnBlankGuids = burnParams.blankGuids;
     bool  isGuidsSpecified  =  burnParams.userMacsSpecified || burnParams.userGuidsSpecified ||
@@ -1434,8 +1431,6 @@ bool Fs2Operations::Fs2Burn(Fs2Operations &imageOps, ExtBurnParams& burnParams)
             return false;
         }
     }
-
-    // TODO: EXp Rom checks - Take from flash ..??
     return Fs2FailSafeBurn(imageOps, !burnParams.burnFailsafe, "", burnParams.progressFunc);
 }
 
@@ -1493,6 +1488,14 @@ bool Fs2Operations::FwReadRom(std::vector<u_int8_t>& romSect)
     return true;
 }
 
+bool Fs2Operations::FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc)
+{
+    // avoid compiler warrnings
+    (void)baseGuid;
+    (void)callBackFunc;
+    return errmsg("This command is not supported for FS2 FW image.");
+}
+
 bool Fs2Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
 {
     // avoid compiler warrnings
@@ -1501,13 +1504,13 @@ bool Fs2Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
     return errmsg("This command is not supported for FS2 FW image.");
 }
 
-bool Fs2Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo)
+bool Fs2Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage)
 {
     if (sectType != H_FW_CONF && sectType != H_HASH_FILE) {
         return errmsg("Hash File section not found in the given image.");
     }
     initSectToRead(sectType);
-    if (!Fs2Verify()) {
+    if (!Fs2Verify((VerifyCallBack)NULL, stripedImage)) {
         return false;
     }
     if (sectType == H_FW_CONF) {
@@ -1574,8 +1577,10 @@ bool Fs2Operations::ReburnNewImage(u_int8_t *data, const char *feature_name, Pro
 
         // Re-write the image to the file.
         if (!WriteImageToFile(_fname, striped_data, striped_length)) {
+            delete[] striped_data;
             return false;
        }
+        delete[] striped_data;
     }
     return true;
 }
@@ -2031,3 +2036,11 @@ bool Fs2Operations::FwShiftDevData(PrintCallBack progressFunc)
     (void)progressFunc;
     return errmsg("Shifting device data sections is not supported in FS2 image format.");
 }
+
+const char* Fs2Operations::FwGetResetRecommandationStr()
+{
+    if (!_devName) {// not an mst device
+        return NULL;
+    }
+    return NULL;
+}
index 0fc63dba6b223ca18c507153de9a307dd585be2c..a17dde70fac7ba4b9b35f13cb26d830ff4d4754d 100644 (file)
@@ -59,14 +59,16 @@ public:
     // virtual bool FwSetGuids(std::vector<guid_t>& userGuids, std::vector<guid_t>& userMacs, bool updateCrc=true, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc, ProgressCallBack progressFunc);
 
+    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL);
     virtual bool FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetAccessKey(hw_key_t userKey, ProgressCallBack progressFunc=(ProgressCallBack)NULL);
     virtual bool FwShiftDevData(PrintCallBack progressFunc=(PrintCallBack)NULL);
     virtual bool FwResetNvData();
+    virtual const char*  FwGetResetRecommandationStr();
 
-    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo);
+    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage=false);
 
 
 
index f5461f40b6562af99a843e893f5de6152c051136..014c00b1d935cd71119bfc5542b4e7ada99fee2f 100644 (file)
 
 #include <stdlib.h>
 #include <algorithm>
+#include <vector>
 
-#include "fs3_ops.h"
+#include <mtcr.h>
+#include <reg_access/reg_access.h>
 
-#include <vector>
+#include "fs3_ops.h"
 
 #define FS3_FLASH_SIZE 0x400000
+#define FS3_LOG_CHUNK_SIZE 21
+
+#define FS3_DFLT_GUID_NUM_TO_ALLOCATE 8
+#define FS3_DFLT_GUID_STEP 1
 
 const u_int32_t Fs3Operations::_itocSignature[4] = {
         ITOC_ASCII,   // Ascii of "MTFW"
@@ -191,10 +197,22 @@ bool Fs3Operations::GetDevInfo(u_int8_t *buff)
     return true;
 }
 
+bool Fs3Operations::GetRomInfo(u_int8_t *buff, u_int32_t size)
+{
+    TOCPUn(buff, size/4);
+    // update _romSect buff
+    GetSectData(_romSect, (u_int32_t*)buff, size);
+    // parse rom Info and fill rom_info struct
+    RomInfo rInfo(_romSect);
+    rInfo.ParseInfo();
+    rInfo.initRomsInfo(&_fwImgInfo.ext_info.roms_info);
+    return true;
+}
+
 
 
 
-bool Fs3Operations::GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type, u_int8_t check_support_only)
+bool Fs3Operations::GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type, u_int32_t sect_size, u_int8_t check_support_only)
 {
     #define EXEC_GET_INFO_OR_GET_SUPPORT(get_info_func, buff, check_support_only) (check_support_only) ? true : get_info_func(buff);
 
@@ -205,6 +223,10 @@ bool Fs3Operations::GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type,
             return EXEC_GET_INFO_OR_GET_SUPPORT(GetImageInfo, buff, check_support_only);
         case FS3_DEV_INFO:
             return EXEC_GET_INFO_OR_GET_SUPPORT(GetDevInfo, buff, check_support_only);
+        case FS3_ROM_CODE:
+            return check_support_only ? true : GetRomInfo(buff, sect_size);
+        default:
+            break;
     }
 
     if (check_support_only) {
@@ -215,7 +237,7 @@ bool Fs3Operations::GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type,
 
 bool Fs3Operations::IsGetInfoSupported(u_int8_t sect_type)
 {
-    return GetImageInfoFromSection((u_int8_t*)NULL, sect_type, 1);
+    return GetImageInfoFromSection((u_int8_t*)NULL, sect_type, 0, 1);
 }
 
 bool Fs3Operations::IsFs3SectionReadable(u_int8_t type, QueryOptions queryOptions)
@@ -230,8 +252,7 @@ bool Fs3Operations::IsFs3SectionReadable(u_int8_t type, QueryOptions queryOption
         return false;
 
     } else if (queryOptions.quickQuery) {
-        // TODO: FS3_ROM_CODE , should be part of IsGetInfoSupported ..
-        if ( IsGetInfoSupported(type) || type == FS3_ROM_CODE) {
+        if ( IsGetInfoSupported(type)) {
             return true;
         }
         return false;
@@ -315,7 +336,6 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
                     std::vector<u_int8_t> buffv(entry_size_in_bytes);
                     u_int8_t *buff = (u_int8_t*)(&(buffv[0]));
 
-
                     if (show_itoc) {
                         cibfw_itoc_entry_dump(&toc_entry, stdout);
                         DumpFs3CRCCheck(toc_entry.type, phys_addr, entry_size_in_bytes, 0, 0, true, verifyCallBackFunc);
@@ -327,38 +347,31 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
                         //printf("-D- flash_addr: %#x, toc_entry_size = %#x, actual sect = %#x, from itoc: %#x\n", flash_addr, toc_entry.size, sect_crc,
                         //        toc_entry.section_crc);
                         if (!DumpFs3CRCCheck(toc_entry.type, phys_addr, entry_size_in_bytes, sect_crc, toc_entry.section_crc, false, verifyCallBackFunc)) {
+                            if (toc_entry.device_data) {
+                                _badDevDataSections = true;
+                            }
                             ret_val = false;
                         } else {
                             //printf("-D- toc type : 0x%.8x\n" , toc_entry.type);
                             GetSectData(_fs3ImgInfo.tocArr[section_index].section_data, (u_int32_t*)buff, toc_entry.size * 4);
                             if (IsGetInfoSupported(toc_entry.type)) {
-                                 if (!GetImageInfoFromSection(buff, toc_entry.type)) {
-                                     return errmsg("Failed to get info from section %d", toc_entry.type);
+                                 if (!GetImageInfoFromSection(buff, toc_entry.type, toc_entry.size * 4)) {
+                                     ret_val = false;
+                                     errmsg("Failed to get info from section %d", toc_entry.type);
                                  }
                             } else if (toc_entry.type == FS3_DBG_LOG_MAP) {
                                  TOCPUn(buff, toc_entry.size);
                                  GetSectData(_fwConfSect, (u_int32_t*)buff, toc_entry.size * 4);
-                            } else if (toc_entry.type == FS3_ROM_CODE) {
-                                // TODO: Need to put the ROM is part of  GetImageInfoFromSection function not alone
-
-                                TOCPUn(buff, toc_entry.size);
-                                GetSectData(_romSect, (u_int32_t*)buff, toc_entry.size * 4);
-                                RomInfo rInfo(_romSect);
-                                rInfo.ParseInfo();
-                                rInfo.initRomsInfo(&_fwImgInfo.ext_info.roms_info);
-
                             }
                         }
                     }
                  }
              } else {
-
-                 // TODO: print crc error
                  /*
                   printf("-D- Bad ITOC CRC: toc_entry.itoc_entry_crc = %#x, actual crc: %#x, entry_size_in_bytes = %#x\n", toc_entry.itoc_entry_crc,
                          entry_crc, entry_size_in_bytes);
                   */
-                 ret_val = false;
+                 return errmsg("Bad Itoc Entry CRC. Expected: 0x%x , Actual: 0x%x", toc_entry.itoc_entry_crc, entry_crc);
             }
 
             _fs3ImgInfo.tocArr[section_index].entry_addr = entry_addr;
@@ -369,6 +382,7 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
     } while (toc_entry.type != FS3_END);
     _fs3ImgInfo.numOfItocs = section_index - 1;
     if (!mfg_exists) {
+        _badDevDataSections = true;
         return errmsg("No \""MFG_INFO"\" info section.");
     }
     return ret_val;
@@ -394,21 +408,20 @@ bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc,
     u_int32_t offset;
     bool bad_signature;
 
-    // TODO: We need to check this paramater
-    _isFullVerify = true;
-
     CntxFindAllImageStart(_ioAccess, cntx_image_start, &cntx_image_num);
     if (cntx_image_num == 0) {
         return errmsg("No valid FS3 image found");
     }
+    if (cntx_image_num > 1) { // ATM we support only one valid image
+        return errmsg("More than one FS3 image found");
+    }
     u_int32_t image_start = cntx_image_start[0];
     offset = 0;
-    // TODO:  Check more than one image
     // Read BOOT
     //f.set_address_convertor(0, 0);
     // Put info
     _fwImgInfo.imgStart = image_start;
-    _fwImgInfo.cntxLog2ChunkSize = 21; // TODO: should it be hardcoded
+    _fwImgInfo.cntxLog2ChunkSize = FS3_LOG_CHUNK_SIZE;
     _fwImgInfo.ext_info.is_failsafe        = true;
     _fwImgInfo.actuallyFailsafe  = true;
     _fwImgInfo.magicPatternFound = 1;
@@ -420,15 +433,15 @@ bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc,
 
 
 
-    report_callback(verifyCallBackFunc, "\nFS3 failsafe image\n\n"); // TODO: Do we have non-faisafe image
-    // TODO: Get BOOT2 - No need to read all always
+    report_callback(verifyCallBackFunc, "\nFS3 failsafe image\n\n");
+    // Get BOOT2 - Only if quickQuery == false
     offset += FS2_BOOT_START;
-    FS3_CHECKB2(0, offset, true, PRE_CRC_OUTPUT, verifyCallBackFunc);
-
+    if (queryOptions.quickQuery == false) {
+        FS3_CHECKB2(0, offset, true, PRE_CRC_OUTPUT, verifyCallBackFunc);
+    }
     offset += _fs3ImgInfo.bootSize;
     _fs3ImgInfo.firstItocIsEmpty = false;
     // printf("-D- image_start = %#x\n", image_start);
-    // TODO: Get info of the failsafe from the Image header - no need always failsafe
     // Go over the ITOC entries
     u_int32_t sector_size = (_ioAccess->is_flash()) ? _ioAccess->get_sector_size() : FS3_DEFAULT_SECTOR_SIZE;
     offset = (offset % sector_size == 0) ? offset : (offset + sector_size - offset % 0x1000);
@@ -547,14 +560,15 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
                                   ExtBurnParams& burnParams)
 {
     u_int8_t  is_curr_image_in_odd_chunks;
-    u_int32_t new_image_start, image_size = 0;
+    u_int32_t new_image_start, last_img_data_addr = 0;
 
     Flash    *f     = (Flash*)(this->_ioAccess);
     FImage   *fim   = (FImage*)(imageOps._ioAccess);
     u_int8_t *data8 = (u_int8_t *) fim->getBuf();
 
 
-    if (_fwImgInfo.imgStart != 0) {
+    if (_fwImgInfo.imgStart != 0 || !burnParams.burnFailsafe) {
+        // if the burn is not failsafe we also burn the image at 0x0
         is_curr_image_in_odd_chunks = 1;
         new_image_start = 0;
     } else {
@@ -568,165 +582,213 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
         return false;
     }
 
+    // update device data sections in itoc array (take them from device if we are burning failsafe)
     f->set_address_convertor(imageOps._fwImgInfo.cntxLog2ChunkSize, !is_curr_image_in_odd_chunks);
-
     for (int i = 0; i < imageOps._fs3ImgInfo.numOfItocs; i++) {
         struct toc_info *itoc_info_p = &imageOps._fs3ImgInfo.tocArr[i];
         struct cibfw_itoc_entry *toc_entry = &itoc_info_p->toc_entry;
         // printf("-D- itoc_addr = %#x\n", itoc_info_p->entry_addr);
-        if (toc_entry->device_data) {
-            // TODO: Copy the ITOC from Device
+        if (toc_entry->device_data) {// updare dev_data itoc with the device's dev_data section addr
             // printf("-D- toc_entry: %#x\n", toc_entry->itoc_entry_crc);
-            if (!UpdateDevDataITOC(data8, itoc_info_p, _fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs)) {
-                return false;
+            if (burnParams.burnFailsafe || !burnParams.useImgDevData) {
+                // we update the device data entires if : a. we burn failsafe or b. we burn non-failsafe but we take the device data anyway
+                if(!UpdateDevDataITOC(data8, itoc_info_p, _fs3ImgInfo.tocArr, _fs3ImgInfo.numOfItocs)){
+                    return false;
+                }
             }
             // printf("-D- After toc_entry: %#x\n", toc_entry->itoc_entry_crc);
         } else {
             u_int32_t last_addr_of_itoc = (toc_entry->flash_addr + toc_entry->size) << 2;
-            image_size = (last_addr_of_itoc > image_size) ? last_addr_of_itoc : image_size;
+            last_img_data_addr = (last_addr_of_itoc > last_img_data_addr) ? last_addr_of_itoc : last_img_data_addr;
         }
 
     }
+    // Check that the dev data is not being overridden
 
-    // TODO: Check that the dev data is not been overridden
-    {
-         u_int32_t  zeroes     = 0;
-         int allow_nofs = 0;
-
-         if (!writeImage(burnParams.progressFunc, 16 , data8 + 16, image_size - 16)) {
-             return false;
-         }
-         if (!f->is_flash()) {
-             return true;
-         }
-         // Write new signature
-         if (!f->write(0, data8, 16, true)) {
-             return false;
-         }
-         bool boot_address_was_updated = true;
-         // Write new image start address to crspace (for SW reset)
-         if (!f->update_boot_addr(new_image_start)) {
-             boot_address_was_updated = false;
-         }
-
-         if (imageOps._fwImgInfo.ext_info.is_failsafe) {
-             if (allow_nofs) {
-                 // When burning in nofs, remnant of older image with different chunk size
-                 // may reside on the flash -
-                 // Invalidate all images marking on flash except the one we've just burnt
-
-                 u_int32_t cntx_image_start[CNTX_START_POS_SIZE];
-                 u_int32_t cntx_image_num;
-
-                 CntxFindAllImageStart(f, cntx_image_start, &cntx_image_num);
-                 // Address convertor is disabled now - use phys addresses
-                 for (u_int32_t i = 0; i < cntx_image_num; i++) {
-                     if (cntx_image_start[i] != new_image_start) {
-                         if (!f->write(cntx_image_start[i], &zeroes, sizeof(zeroes), true)) {
-                             return false;
-                         }
-                     }
-                 }
-             } else {
-                 // invalidate previous signature
-                 f->set_address_convertor(imageOps._fwImgInfo.cntxLog2ChunkSize, is_curr_image_in_odd_chunks);
-                 if (!f->write(0, &zeroes, sizeof(zeroes), true)) {
-                     return false;
-                 }
-             }
-         }
-         if (boot_address_was_updated == false) {
-             report_warn("Failed to update FW boot address. Power cycle the device in order to load the new FW.\n");
-         }
+    // find the lowest dev_data entry addr:
+    u_int32_t first_dev_data_addr = 0xffffffff;
+    u_int32_t last_dev_data_address = 0;
+    for (int i = 0; i < imageOps._fs3ImgInfo.numOfItocs; i++) {
+        struct toc_info *itoc_info_p = &imageOps._fs3ImgInfo.tocArr[i];
+        struct cibfw_itoc_entry *toc_entry = &itoc_info_p->toc_entry;
+        if (toc_entry->device_data) {
+            u_int32_t addr_of_itoc = toc_entry->flash_addr << 2;
+            u_int32_t last_addr_of_itoc = (toc_entry->flash_addr + toc_entry->size) << 2;
 
+            first_dev_data_addr = addr_of_itoc < first_dev_data_addr ? addr_of_itoc : first_dev_data_addr;
+            last_dev_data_address = last_addr_of_itoc > last_dev_data_address ?  last_addr_of_itoc : last_dev_data_address;
+        }
+    }
+    //printf("-D- last image addr: 0x%x, first dev data addr: 0x%x\n", last_img_data_addr, first_dev_data_addr);
+    // compare with last_img_data_addr (last non dev data address)
+    if (last_img_data_addr >= first_dev_data_addr) {
+        return errmsg("Failed to burn FW. Device data sections will be overridden by the operation.");
+    }
+
+    u_int32_t  zeroes     = 0;
+    int allow_nofs = 0;
+    // write the image without the device data sections
+    if (!writeImage(burnParams.progressFunc, 16 , data8 + 16, last_img_data_addr - 16)) {
+        return false;
+    }
+    // write device data sections if needed
+    if (!burnParams.burnFailsafe && burnParams.useImgDevData) {
+        if (!writeImage((ProgressCallBack)NULL, first_dev_data_addr , data8 + first_dev_data_addr, (last_dev_data_address - first_dev_data_addr), true)) {
+            return false;
+        }
+    }
+    if (!f->is_flash()) {
+        return true;
+    }
+    // Write new signature
+    if (!f->write(0, data8, 16, true)) {
+        return false;
+    }
+    bool boot_address_was_updated = true;
+
+    // if we access without cache replacement or the burn was non failsafe, update YU bootloaders.
+    // if we access with cache replacement notify currently running fw of new image start address to crspace (for SW reset)
+    if (!burnParams.burnFailsafe || f->get_ignore_cache_replacment()) {
+        boot_address_was_updated = f->update_boot_addr(new_image_start);
+    } else {
+        _isfuSupported = Fs3IsfuActivateImage(new_image_start);
+        boot_address_was_updated = _isfuSupported;
+    }
+
+    if (imageOps._fwImgInfo.ext_info.is_failsafe) {
+        if (allow_nofs) {
+            // When burning in nofs, remnant of older image with different chunk size
+            // may reside on the flash -
+            // Invalidate all images marking on flash except the one we've just burnt
+
+            u_int32_t cntx_image_start[CNTX_START_POS_SIZE];
+            u_int32_t cntx_image_num;
+
+            CntxFindAllImageStart(f, cntx_image_start, &cntx_image_num);
+            // Address convertor is disabled now - use phys addresses
+            for (u_int32_t i = 0; i < cntx_image_num; i++) {
+                if (cntx_image_start[i] != new_image_start) {
+                    if (!f->write(cntx_image_start[i], &zeroes, sizeof(zeroes), true)) {
+                        return false;
+                    }
+                }
+            }
+        } else {
+            // invalidate previous signature
+            f->set_address_convertor(imageOps._fwImgInfo.cntxLog2ChunkSize, is_curr_image_in_odd_chunks);
+            if (!f->write(0, &zeroes, sizeof(zeroes), true)) {
+                return false;
+            }
+        }
+    }
+    if (boot_address_was_updated == false) {
+        report_warn("Failed to update FW boot address. Power cycle the device in order to load the new FW.\n");
     }
-    // TODO: Update the signature
 
     return true;
 }
 bool Fs3Operations::Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams)
 {
-
     if (imageOps.FwType() != FIT_FS3) {
         return errmsg("FW image type is not FS3\n");
     }
     bool devIntQueryRes = Fs3IntQuery();
 
-    if (!devIntQueryRes) {
+    if (!devIntQueryRes && burnParams.burnFailsafe) {
         return false;
     }
+
+    if (!burnParams.burnFailsafe) {
+        // some checks in case we burn in a non-failsafe manner and attempt to integrate existing device
+        // data sections from device.
+        if (!burnParams.useImgDevData) { // we will take device data section from device: perform some checks
+            if (_fs3ImgInfo.itocAddr == 0) {
+                return errmsg("Cannot extract device data sections: invalid ITOC section. please ignore extracting device data sections.");
+            }
+            if (_badDevDataSections) {
+                return errmsg("Cannot integrate device data sections: device data sections are corrupted. please ignore extracting device data sections.");
+            }
+        } else { // we will take device data sections from image: make sure device is not write protected
+            if (_ioAccess->is_flash() && ((Flash*)_ioAccess)->is_flash_write_protected()) {
+                return errmsg("Cannot burn device data sections, Flash is write protected.");
+            }
+        }
+    }
+
     // for image we execute full verify to bring all the information needed for ROM Patch
     if (!imageOps.Fs3IntQuery(true, false)) {
           return false;
     }
-    if (!CheckPSID(imageOps, burnParams.allowPsidChange)) {
-        return false;
-    }
 
-    // Check if the burnt FW version is OK
-    if (!CheckFwVersion(imageOps, burnParams.ignoreVersionCheck)) {
-        // special_ret_val = RC_FW_ALREADY_UPDATED;
+    Fs3Operations *imgToBurn = &imageOps;
+    bool createNewImg = false;
+    std::vector<u_int8_t> newImageData(imageOps._fwImgInfo.lastImageAddr);
+
+    if (devIntQueryRes && !CheckPSID(imageOps, burnParams.allowPsidChange)) {
         return false;
     }
 
-    std::vector<u_int8_t> newImageData(imageOps._fwImgInfo.lastImageAddr);
-    Fs3Operations *imgToBurn = &imageOps;
-    bool createNewImg = false;
+    if (burnParams.burnFailsafe) {
 
-    // ROM patchs
-    if (((burnParams.burnRomOptions == ExtBurnParams::BRO_FROM_DEV_IF_EXIST) && (_fwImgInfo.ext_info.roms_info.exp_rom_found)) || // There is ROM in device and user choses to keep it
-            ((burnParams.burnRomOptions == ExtBurnParams::BRO_DEFAULT) && (!imageOps._fwImgInfo.ext_info.roms_info.exp_rom_found && _fwImgInfo.ext_info.roms_info.exp_rom_found))) { // No ROM in image and ROM in device
-        // here we should take rom from device and insert into the image
-        // i.e if we have rom in image remove it and put the rom from the device else just put rom from device.
-        // 1. use Fs3ModifySection to integrate _romSect buff with the image , newImageData contains the modified image buffer
-        std::vector<u_int8_t> romSect = _romSect;
-        TOCPUn((u_int32_t*)&romSect[0], romSect.size()/4);
-        if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_ROM_CODE, FS3_PCI_CODE, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
-            (u_int32_t*)&romSect[0], (u_int32_t)romSect.size(), true)) {
-            return errmsg("failed to update ROM in image. %s", imageOps.err());
+        // Check if the burnt FW version is OK
+        if (!CheckFwVersion(imageOps, burnParams.ignoreVersionCheck)) {
+            return false;
         }
-        createNewImg = true;
-    }
 
-    // image vsd patch
-    if (!burnParams.useImagePs && burnParams.vsdSpecified ) {
-       // get image info section :
-       struct toc_info *imageInfoToc;
-       if (!imageOps.Fs3GetItocInfo(imageOps._fs3ImgInfo.tocArr, imageOps._fs3ImgInfo.numOfItocs, FS3_IMAGE_INFO, imageInfoToc)){
-               return errmsg("failed to get Image Info section.");
-       }
-       // modify it:
-       std::vector<u_int8_t> imageInfoSect = imageInfoToc->section_data;
-       struct cibfw_image_info image_info;
-       cibfw_image_info_unpack(&image_info, &imageInfoSect[0]);
-       strncpy(image_info.vsd, burnParams.userVsd, VSD_LEN);
-       cibfw_image_info_pack(&image_info, &imageInfoSect[0]);
-       // re-insert it into the image:
-        if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_IMAGE_INFO, FS3_FW_ADB, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
-            (u_int32_t*)&imageInfoSect[0], (u_int32_t)imageInfoSect.size(), true)) {
-            return errmsg("failed to update image VSD in image. %s", imageOps.err());
+        // ROM patchs
+        if (((burnParams.burnRomOptions == ExtBurnParams::BRO_FROM_DEV_IF_EXIST) && (_fwImgInfo.ext_info.roms_info.exp_rom_found)) || // There is ROM in device and user choses to keep it
+                ((burnParams.burnRomOptions == ExtBurnParams::BRO_DEFAULT) && (!imageOps._fwImgInfo.ext_info.roms_info.exp_rom_found && _fwImgInfo.ext_info.roms_info.exp_rom_found))) { // No ROM in image and ROM in device
+            // here we should take rom from device and insert into the image
+            // i.e if we have rom in image remove it and put the rom from the device else just put rom from device.
+            // 1. use Fs3ModifySection to integrate _romSect buff with the image , newImageData contains the modified image buffer
+            std::vector<u_int8_t> romSect = _romSect;
+            TOCPUn((u_int32_t*)&romSect[0], romSect.size()/4);
+            if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_ROM_CODE, FS3_PCI_CODE, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
+                    (u_int32_t*)&romSect[0], (u_int32_t)romSect.size(), true)) {
+                return errmsg("failed to update ROM in image. %s", imageOps.err());
+            }
+            createNewImg = true;
         }
-        createNewImg = true;
-    }
 
-    // create fs3Operation Obj (handl type BUFF) if NEEDED
-    // open the image buffer
-    if (createNewImg) {
-       FwOperations* newImageOps = FwOperationsCreate((void*)&newImageData[0], (void*)&imageOps._fwImgInfo.lastImageAddr, (char*)NULL, FHT_FW_BUFF);
-       if (!newImageOps) {
-               return errmsg("Internal error: The prepared image is corrupted.");
-       }
-       // 3. verify it
-       if (!((Fs3Operations*)newImageOps)->Fs3IntQuery(true,false)) {
-               errmsg("Internal error: The prepared image is corrupted: %s", newImageOps->err());
-               newImageOps->FwCleanUp();
-               delete newImageOps;
-               return false;
-       }
-       // 4. pass it to BurnFs3Image instead of imageOps
-       imgToBurn = (Fs3Operations*)newImageOps;
-    }
+        // image vsd patch
+        if (!burnParams.useImagePs && burnParams.vsdSpecified ) {
+            // get image info section :
+            struct toc_info *imageInfoToc;
+            if (!imageOps.Fs3GetItocInfo(imageOps._fs3ImgInfo.tocArr, imageOps._fs3ImgInfo.numOfItocs, FS3_IMAGE_INFO, imageInfoToc)){
+                return errmsg("failed to get Image Info section.");
+            }
+            // modify it:
+            std::vector<u_int8_t> imageInfoSect = imageInfoToc->section_data;
+            struct cibfw_image_info image_info;
+            cibfw_image_info_unpack(&image_info, &imageInfoSect[0]);
+            strncpy(image_info.vsd, burnParams.userVsd, VSD_LEN);
+            cibfw_image_info_pack(&image_info, &imageInfoSect[0]);
+            // re-insert it into the image:
+            if (!imageOps.Fs3ReplaceSectionInDevImg(FS3_IMAGE_INFO, FS3_FW_ADB, true, (u_int8_t*)&newImageData[0], imageOps._fwImgInfo.lastImageAddr,
+                    (u_int32_t*)&imageInfoSect[0], (u_int32_t)imageInfoSect.size(), true)) {
+                return errmsg("failed to update image VSD in image. %s", imageOps.err());
+            }
+            createNewImg = true;
+        }
 
+        // create fs3Operation Obj (handl type BUFF) if NEEDED
+        // open the image buffer
+        if (createNewImg) {
+            FwOperations* newImageOps = FwOperationsCreate((void*)&newImageData[0], (void*)&imageOps._fwImgInfo.lastImageAddr, (char*)NULL, FHT_FW_BUFF);
+            if (!newImageOps) {
+                return errmsg("Internal error: The prepared image is corrupted.");
+            }
+            // 3. verify it
+            if (!((Fs3Operations*)newImageOps)->Fs3IntQuery(true,false)) {
+                errmsg("Internal error: The prepared image is corrupted: %s", newImageOps->err());
+                newImageOps->FwCleanUp();
+                delete newImageOps;
+                return false;
+            }
+            // 4. pass it to BurnFs3Image instead of imageOps
+            imgToBurn = (Fs3Operations*)newImageOps;
+        }
+    }
     bool rc = BurnFs3Image(*imgToBurn, burnParams);
     if (imgToBurn != &imageOps) {
         imgToBurn->FwCleanUp();
@@ -804,8 +866,9 @@ bool Fs3Operations::FwReadRom(std::vector<u_int8_t>& romSect)
     return true;
 }
 
-bool Fs3Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo)
+bool Fs3Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage)
 {
+    (void) stripedImage; // unused for FS3
     //we treat H_FW_CONF as FS3_DBG_LOG_MAP
     //FwGetSection only supports retrieving FS3_DBG_LOG_MAP section atm.
     if (sectType != H_FW_CONF && sectType != FS3_DBG_LOG_MAP) {
@@ -825,18 +888,27 @@ bool Fs3Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sec
     return true;
 }
 
-
-bool Fs3Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
+bool Fs3Operations::FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc)
 {
-
+    if (!baseGuid.num_of_guids || !baseGuid.step_size) {
+        return errmsg("invalid values for number_of_Guids(%d)/step_size(%d) should be: [1..255]", baseGuid.num_of_guids, baseGuid.step_size);
+    }
     if (!Fs3UpdateSection(&baseGuid, FS3_MFG_INFO, false, CMD_SET_MFG_GUIDS, callBackFunc)) {
         return false;
     }
     return true;
 }
 
+bool Fs3Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
+{
+    // in FS3 default behavior when setting GUIDs / MFG is to assign 8 guids per port with step size of 1 between them.
+    fs3_guid_t bGuid = {baseGuid, FS3_DFLT_GUID_NUM_TO_ALLOCATE, FS3_DFLT_GUID_STEP};
+    return FwSetMFG(bGuid, callBackFunc);
+}
+
 bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc, ProgressCallBack progressFunc)
 {
+    fs3_guid_t usrGuid;
     // Avoid Warning because there is no need for progressFunc
     (void)progressFunc;
     if (sgParam.userGuids.empty()) {
@@ -851,7 +923,18 @@ bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc,
        return errmsg("guids override is not set, cannot set device guids");
     }
 
-    if (!Fs3UpdateSection(&sgParam.userGuids[0], FS3_DEV_INFO, true, CMD_SET_GUIDS, callBackFunc)) {
+    if (sgParam.numOfGUIDs && sgParam.stepSize) {
+        // user requested to specify the step and num of guids to be allocated per port
+        usrGuid.num_of_guids = sgParam.numOfGUIDs;
+        usrGuid.step_size = sgParam.stepSize;
+    } else {
+        // default behavior num_of_guids=8 step_size=1
+        usrGuid.num_of_guids = FS3_DFLT_GUID_NUM_TO_ALLOCATE;
+        usrGuid.step_size = FS3_DFLT_GUID_STEP;
+    }
+    usrGuid.uid = sgParam.userGuids[0];
+
+    if (!Fs3UpdateSection(&usrGuid, FS3_DEV_INFO, true, CMD_SET_GUIDS, callBackFunc)) {
         return false;
     }
     return true;
@@ -976,7 +1059,6 @@ bool Fs3Operations::UpdateItocAfterInsert(fs3_section_t sectionType, u_int32_t n
 bool Fs3Operations::UpdateImageAfterInsert(struct toc_info *tocArr, u_int32_t numOfItocs, u_int8_t* newImgData, u_int32_t newImageSize)
 {
 
-
     // Copy data before itocAddr and ITOC header
     memcpy(newImgData, &_fs3ImgInfo.imageCache[0], _fs3ImgInfo.itocAddr);
     memcpy(&newImgData[_fs3ImgInfo.itocAddr], _fs3ImgInfo.itocHeader, CIBFW_ITOC_HEADER_SIZE);
@@ -985,7 +1067,6 @@ bool Fs3Operations::UpdateImageAfterInsert(struct toc_info *tocArr, u_int32_t nu
         u_int32_t itocOffset = _fs3ImgInfo.itocAddr + CIBFW_ITOC_HEADER_SIZE + i * CIBFW_ITOC_ENTRY_SIZE;
         struct toc_info *currItoc = &tocArr[i];
         u_int8_t sectType = currItoc->toc_entry.type;
-        // TODO: What should we do with Itoc Addr
         u_int32_t sectAddr = currItoc->toc_entry.flash_addr << 2;
         u_int32_t sectSize = currItoc->toc_entry.size * 4;
         // Some checks
@@ -1132,7 +1213,7 @@ bool Fs3Operations::Fs3GetItocInfo(struct toc_info *tocArr, int num_of_itocs, fs
     return errmsg("ITOC entry type: %s (%d) not found", GetSectionNameByType(sect_type), sect_type);
 }
 
-bool Fs3Operations::Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, guid_t base_uid,
+bool Fs3Operations::Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
                                             std::vector<u_int8_t>  &newSectionData)
 {
     struct cibfw_mfg_info mfg_info;
@@ -1145,20 +1226,28 @@ bool Fs3Operations::Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vect
     return true;
 }
 
-bool Fs3Operations::Fs3ChangeUidsFromBase(guid_t base_uid, struct cibfw_guids *guids)
+bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_guid_t base_uid, struct cibfw_guids *guids)
 {
-    u_int64_t base_uid_64 =  base_uid.l | (u_int64_t)base_uid.h << 32;
+    u_int64_t base_uid_64 =  base_uid.uid.l | (u_int64_t)base_uid.uid.h << 32;
     // Should be put somewhere in common place
-    u_int64_t base_mac_64 =  ((u_int64_t)base_uid.l & 0xffffff) | (((u_int64_t)base_uid.h & 0xffffff00) << 16);
+    u_int64_t base_mac_64 =  ((u_int64_t)base_uid.uid.l & 0xffffff) | (((u_int64_t)base_uid.uid.h & 0xffffff00) << 16);
 
     guids->guids[0].uid = base_uid_64;
-    guids->guids[1].uid = base_uid_64 + 8;
+    guids->guids[0].num_allocated = base_uid.num_of_guids;
+    guids->guids[0].step = base_uid.step_size;
+    guids->guids[1].uid = base_uid_64 + (base_uid.num_of_guids * base_uid.step_size);
+    guids->guids[1].num_allocated = base_uid.num_of_guids;
+    guids->guids[1].step = base_uid.step_size;
     guids->macs[0].uid = base_mac_64;
-    guids->macs[1].uid = base_mac_64 + 8;
+    guids->macs[0].num_allocated = base_uid.num_of_guids;
+    guids->macs[0].step = base_uid.step_size;
+    guids->macs[1].uid = base_mac_64 + (base_uid.num_of_guids * base_uid.step_size);
+    guids->macs[1].num_allocated = base_uid.num_of_guids;
+    guids->macs[1].step = base_uid.step_size;
     return true;
 }
 
-bool Fs3Operations::Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, guid_t base_uid,
+bool Fs3Operations::Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
         std::vector<u_int8_t>  &newSectionData)
 {
     struct cibfw_device_info dev_info;
@@ -1175,12 +1264,6 @@ bool Fs3Operations::Fs3UpdateVsdSection(struct toc_info *curr_toc, std::vector<u
 {
     struct cibfw_device_info dev_info;
     cibfw_device_info_unpack(&dev_info, (u_int8_t*)&section_data[0]);
-    size_t len = strlen(user_vsd);
-    // check VSD size before modifying , this check is redundant as it is already check in FwSetVSD
-    // TODO: remove this check
-    if (len > VSD_LEN) {
-        return errmsg("VSD string is too long(%d), max allowed length: %d", (int)len, VSD_LEN);
-    }
     strcpy(dev_info.vsd, user_vsd);
     newSectionData = section_data;
     memset((u_int8_t*)&newSectionData[0], 0, curr_toc->toc_entry.size * 4);
@@ -1319,14 +1402,14 @@ bool  Fs3Operations::Fs3UpdateSection(void *new_info, fs3_section_t sect_type, b
      }
 
     if (sect_type == FS3_MFG_INFO) {
-        guid_t base_uid = *(guid_t*)new_info;
+        fs3_guid_t base_uid = *(fs3_guid_t*)new_info;
         type_msg = "GUID";
         if (!Fs3UpdateMfgUidsSection(curr_toc, curr_toc->section_data, base_uid, newUidSection)) {
             return false;
         }
     } else if (sect_type == FS3_DEV_INFO) {
         if (cmd_type == CMD_SET_GUIDS) {
-            guid_t base_uid = *(guid_t*)new_info;
+            fs3_guid_t base_uid = *(fs3_guid_t*)new_info;
             type_msg = "GUID";
             if (!Fs3UpdateUidsSection(curr_toc, curr_toc->section_data, base_uid, newUidSection)) {
                 return false;
@@ -1582,27 +1665,75 @@ bool Fs3Operations::FwShiftDevData(PrintCallBack progressFunc)
     std::sort(sortedTocs.begin(), sortedTocs.end(), TocComp(_fwImgInfo.imgStart));
 
     // shift the location of device data sections by SHIFT_SIZE (60kb)
-       for (std::vector<struct toc_info*>::iterator it = sortedTocs.begin() ; it != sortedTocs.end(); it++) {
-               if ((*it)->toc_entry.device_data) {
-                       // update the itoc (basically update the flash_addr and itoc entry crc)
-                       struct toc_info *currToc = *it;
-                       if (!Fs3UpdateItocInfo(currToc, ((currToc->toc_entry.flash_addr << 2) - SHIFT_SIZE))) {
-                           PRINT_PROGRESS(progressFunc,(char*)"FAILED\n");
-                               return false;
-                       }
-                       // write the section to its new place in the flash
-                       if (!writeImage((ProgressCallBack)NULL, getAbsAddr(currToc) , (u_int8_t*)&currToc->section_data[0], (currToc->toc_entry.size << 2), true)) {
-                           PRINT_PROGRESS(progressFunc,(char*)"FAILED\n");
-                           return false;
-                       }
-               }
-       }
+    for (std::vector<struct toc_info*>::iterator it = sortedTocs.begin() ; it != sortedTocs.end(); it++) {
+        if ((*it)->toc_entry.device_data) {
+            // update the itoc (basically update the flash_addr and itoc entry crc)
+            struct toc_info *currToc = *it;
+            if (!Fs3UpdateItocInfo(currToc, ((currToc->toc_entry.flash_addr << 2) - SHIFT_SIZE))) {
+                PRINT_PROGRESS(progressFunc,(char*)"FAILED\n");
+                return false;
+            }
+            // write the section to its new place in the flash
+            if (!writeImage((ProgressCallBack)NULL, getAbsAddr(currToc) , (u_int8_t*)&currToc->section_data[0], (currToc->toc_entry.size << 2), true)) {
+                PRINT_PROGRESS(progressFunc,(char*)"FAILED\n");
+                return false;
+            }
+        }
+    }
     PRINT_PROGRESS(progressFunc,(char*)"OK\n");
-       // update itoc section
+    // update itoc section
     if (!reburnItocSection(progressFunc)) {
        return false;
     }
     return true;
 }
 
+const char* Fs3Operations::FwGetResetRecommandationStr()
+{
+#if defined(_WIN_) || defined(MST_UL)
+    // mlxfwreset tool not supported for windows yet
+    return (const char*)NULL;
+#endif
+
+    if (!_isfuSupported) {
+        return NULL;
+    }
+    return "To load new FW run mlxfwreset or reboot machine.";
+}
+
+bool Fs3Operations::Fs3IsfuActivateImage(u_int32_t newImageStart)
+{
+#ifndef MST_UL // ISFU not supported for mstflint
+    int rc;
+    mfile *mf = NULL;
+    struct cibfw_register_mfai mfai;
+    memset(&mfai, 0, sizeof(mfai));
 
+    if (!_devName) {// not an mst device
+        return true;
+    }
+    // send MFRL register
+    mf = mopen(_devName);
+    if (!mf) {
+        return false;
+    }
+    /* GET method not supported yet for this register so we cant read->modify->write it
+     * ill assume the un-needed fields are zero
+     */
+    //rc = reg_access_mfai(mf,REG_ACCESS_METHOD_GET, &mfai);
+    //if (rc) {
+   //     printf("-D- isfu3 0x%x\n", rc);
+   //    return false;
+   // }
+    mfai.address = newImageStart;
+    mfai.use_address = 1;
+    rc = reg_access_mfai(mf,REG_ACCESS_METHOD_SET, &mfai);
+    mclose(mf);
+    if (rc) {
+        return false;
+    }
+#else
+    return ((Flash*)(this->_ioAccess))->update_boot_addr(newImageStart);
+#endif
+    return true;
+}
index d845a48e64ce64ed5f200a9755fb665846e1b4f0..5639db429a4a9fcc5ec903d30185f7af8f462cf9 100644 (file)
@@ -44,11 +44,7 @@ class Fs3Operations : public FwOperations {
 public:
 
 
-    Fs3Operations(FBase *ioAccess) :
-        FwOperations(ioAccess)
-        {
-            _isFullVerify = false;
-        };
+    Fs3Operations(FBase *ioAccess) : FwOperations(ioAccess), _isfuSupported(false), _badDevDataSections(false){};
 
     virtual ~Fs3Operations()  {};
     //virtual void print_type() {printf("-D- FS3 type!\n");};
@@ -68,13 +64,14 @@ public:
 
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBack, ProgressCallBack progressFunc);
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
-    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo);
+    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
+    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage=false);
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL);
     virtual bool FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetAccessKey(hw_key_t userKey, ProgressCallBack progressFunc=(ProgressCallBack)NULL);
     virtual bool FwResetNvData();
     virtual bool FwShiftDevData(PrintCallBack progressFunc=(PrintCallBack)NULL);
-
+    virtual const char*  FwGetResetRecommandationStr();
 
 private:
     #define CRC_CHECK_OUTPUT  CRC_CHECK_OLD")"
@@ -136,22 +133,23 @@ private:
     bool CheckTocSignature(struct cibfw_itoc_header *itoc_header, u_int32_t first_signature);
     bool DumpFs3CRCCheck(u_int8_t sect_type, u_int32_t sect_addr, u_int32_t sect_size, u_int32_t crc_act, u_int32_t crc_exp,
                 bool ignore_crc = false, VerifyCallBack verifyCallBackFunc = (VerifyCallBack)NULL);
-    bool GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type, u_int8_t check_support_only = 0);
+    bool GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type, u_int32_t sect_size, u_int8_t check_support_only = 0);
     bool IsGetInfoSupported(u_int8_t sect_type);
     bool IsFs3SectionReadable(u_int8_t type, QueryOptions queryOptions);
     bool GetMfgInfo(u_int8_t *buff);
     bool GetDevInfo(u_int8_t *buff);
     bool GetImageInfo(u_int8_t *buff);
+    bool GetRomInfo(u_int8_t *buff, u_int32_t size);
     bool Fs3IntQuery(bool readRom = true, bool quickQuery=true);
     bool Fs3Burn(Fs3Operations &imageOps, ExtBurnParams& burnParams);
     bool BurnFs3Image(Fs3Operations &imageOps, ExtBurnParams& burnParams);
     bool UpdateDevDataITOC(u_int8_t *image_data, struct toc_info *image_toc_entry, struct toc_info *flash_toc_arr, int flash_toc_size);
     bool Fs3UpdateSection(void *new_info, fs3_section_t sect_type=FS3_DEV_INFO, bool is_sect_failsafe=true, CommandType cmd_type=CMD_UNKNOWN, PrintCallBack callBackFunc=(PrintCallBack)NULL );
     bool Fs3GetItocInfo(struct toc_info *tocArr, int num_of_itocs, fs3_section_t sect_type, struct toc_info *&curr_toc);
-    bool Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, guid_t base_uid,
+    bool Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
                                             std::vector<u_int8_t>  &newSectionData);
-    bool Fs3ChangeUidsFromBase(guid_t base_uid, struct cibfw_guids *guids);
-    bool Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, guid_t base_uid,
+    bool Fs3ChangeUidsFromBase(fs3_guid_t base_uid, struct cibfw_guids *guids);
+    bool Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
                                              std::vector<u_int8_t>  &newSectionData);
     bool Fs3UpdateVsdSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, char* user_vsd,
                                      std::vector<u_int8_t>  &newSectionData);
@@ -186,6 +184,7 @@ private:
     bool getLastFwSAddr(u_int32_t& lastAddr);
     bool getFirstDevDataAddr(u_int32_t& firstAddr);
     bool reburnItocSection(PrintCallBack callBackFunc);
+    bool Fs3IsfuActivateImage(u_int32_t newImageStart);
 
     // this class is for sorting the itoc array by ascending absolute flash_addr used in FwShiftDevData
     class TocComp {
@@ -204,7 +203,8 @@ private:
     static const SectionInfo _fs3SectionsInfoArr[];
     static const u_int32_t _itocSignature[4];
     Fs3ImgInfo _fs3ImgInfo;
-    bool      _isFullVerify;
+    bool _isfuSupported;
+    bool _badDevDataSections; // set true if during verify one of the device data section is corrupt or mfg section missing
 
 };
 
index 251afcd56359e994a8926ebbec461a3f344c7a70..a342c30bd055a6e96d37fe7d19e76ae6e0c15118 100644 (file)
@@ -98,7 +98,17 @@ int FwOperations::getBufferSignature(u_int8_t* buf, u_int32_t size)
     return res;
 }
 
-
+const char * FwOperations::err2str(int errNum)
+{
+    switch(errNum) {
+        case -4:
+            return "Found MFA(s) with higher Version, upgrade tool to work with it";
+        case -3:
+            return "File Signature is invalid";
+        default:
+            return "Failed to get MFA Image";
+    }
+}
 int FwOperations::getMfaImg(char* fileName, char *psid, u_int8_t **imgbuf)
 {
     int res;
@@ -108,8 +118,10 @@ int FwOperations::getMfaImg(char* fileName, char *psid, u_int8_t **imgbuf)
     if (psid == NULL) {
         return -1; //No psid => no image
     }
+
     if ((res = mfa_open_file(&mfa_d, fileName))) {
-        return -1;
+        res = res < 0 ? res : -1 * res;
+        return res;
     }
 
     res = mfa_get_image(mfa_d, psid, image_type, (char*)"", imgbuf);
@@ -129,7 +141,8 @@ int FwOperations::getMfaImg(u_int8_t* mfa_buf, int size, char *psid, u_int8_t **
         return -1; //No psid => no image
     }
     if ((res = mfa_open_buf(&mfa_d, mfa_buf, size))) {
-        return -1;
+        res = res < 0 ? res : -1 * res;
+        return res;
     }
 
     res = mfa_get_image(mfa_d, psid, image_type, (char*)"", imgbuf);
@@ -147,6 +160,9 @@ void FwOperations::FwCleanUp()
     if (_fname != NULL) {
         delete[] _fname;
     }
+    if (_devName != NULL) {
+        delete[] _devName;
+    }
 }
 
 
@@ -156,6 +172,12 @@ void FwOperations::FwInitCom()
 }
 
 
+void FwOperations::getSupporteHwId(u_int32_t **supportedHwId, u_int32_t &supportedHwIdNum)
+{
+    *supportedHwId    = _fwImgInfo.supportedHwId;
+    supportedHwIdNum = _fwImgInfo.supportedHwIdNum;
+
+}
 
 bool FwOperations::checkBoot2(u_int32_t beg, u_int32_t offs, u_int32_t& next, bool fullRead, const char *pref, VerifyCallBack verifyCallBackFunc)
 {
@@ -173,9 +195,13 @@ bool FwOperations::checkBoot2(u_int32_t beg, u_int32_t offs, u_int32_t& next, bo
     }
     _fwImgInfo.bootSize = (size + 4) * 4;
 
+    // Get absolute address on flash when checking BOOT2 for FS3 image format (for FS2 its always displayed as contiguous)
+    // Adrianc: why dont we show them both in the same way when running verify.
+    u_int32_t boot2AbsAddr = (this->FwType() == FIT_FS3 && _ioAccess->is_flash()) ? \
+            _ioAccess->get_phys_from_cont(beg, _fwImgInfo.cntxLog2ChunkSize, (_fwImgInfo.imgStart != 0)) : beg;
 
-    sprintf(pr, "%s /0x%08x-0x%08x (0x%06x)/ (BOOT2)", pref, offs+beg,
-            offs+beg+(size+4)*4-1, (size+4)*4);
+    sprintf(pr, "%s /0x%08x-0x%08x (0x%06x)/ (BOOT2)", pref, offs+boot2AbsAddr,
+            offs+boot2AbsAddr+(size+4)*4-1, (size+4)*4);
 
     if ((_ioAccess->is_flash() && fullRead == true) || !_ioAccess->is_flash()) {
         Crc16        crc;
@@ -347,7 +373,7 @@ bool FwOperations::FwAccessCreate(fw_ops_params_t& fwParams, FBase **ioAccessP)
             u_int8_t* imgbuf;
             int sz;
             if ((sz = getMfaImg(fwParams.fileHndl, fwParams.psid, &imgbuf)) < 0) {
-                WriteToErrBuff(fwParams.errBuff,"Failed to get MFA Image.", fwParams.errBuffSize);
+                WriteToErrBuff(fwParams.errBuff, err2str(sz), fwParams.errBuffSize);
                 return false;
             }
             *ioAccessP = new FImage;
@@ -385,7 +411,7 @@ bool FwOperations::FwAccessCreate(fw_ops_params_t& fwParams, FBase **ioAccessP)
             u_int8_t* imgbuf;
             int sz;
             if ((sz = getMfaImg((u_int8_t*)fwParams.buffHndl, numInfo, fwParams.psid, &imgbuf)) < 0) {
-                WriteToErrBuff(fwParams.errBuff,"Failed to get MFA Image.", fwParams.errBuffSize);
+                WriteToErrBuff(fwParams.errBuff, err2str(sz), fwParams.errBuffSize);
                 return false;
             }
             *ioAccessP = new FImage;
@@ -533,6 +559,9 @@ FwOperations* FwOperations::FwOperationsCreate(fw_ops_params_t& fwParams)
     if (fwParams.hndlType == FHT_FW_FILE) {
         fwops->_fname = strcpy(new char[strlen(fwParams.fileHndl)+ 1], fwParams.fileHndl);
     }
+    if (fwParams.hndlType == FHT_MST_DEV) {
+        fwops->_devName = strcpy(new char[strlen(fwParams.mstHndl)+ 1], fwParams.mstHndl);
+    }
     return fwops;
 }
 
@@ -674,27 +703,28 @@ chip_type_t FwOperations::getChipTypeFromHwDevid(u_int32_t hwDevId) {
     return CT_UNKNOWN;
 }
 
-// TODO:combine both databases(hwDevData and hwDev2Str) and remove old unsupporded devices i.e tavor arbel sinai
+// TODO:combine both databases(hwDevData and hwDev2Str) and remove old unsupporded devices i.e infinihost infinihost_iii_ex infinihost_iii_lx
 const FwOperations::HwDevData FwOperations::hwDevData[] = {
-    { "InfiniHost",        TAVOR_HW_ID, CT_UNKNOWN, 2, {23108, 0}},
-    { "InfiniHost III Ex", ARBEL_HW_ID, CT_UNKNOWN,2 , {25208, 25218, 0}},
-    { "InfiniHost III Lx", SINAI_HW_ID, CT_UNKNOWN, 1, {25204, 0}},
+    { "InfiniHost",        INFINIHOST_HW_ID, CT_UNKNOWN, 2, {23108, 0}},
+    { "InfiniHost III Ex", INFINIHOST_III_EX_HW_ID, CT_UNKNOWN,2 , {25208, 25218, 0}},
+    { "InfiniHost III Lx", INFINIHOST_III_LX_HW_ID, CT_UNKNOWN, 1, {25204, 0}},
     { "ConnectX",          CX_HW_ID, CT_CONNECTX, 2,  {25408, 25418, 26418, 26438,
                                          26428, 25448, 26448, 26468,
                                          25458, 26458, 26478, 26488,
                                          4097, 4098, 0}},
-    { "ConnectX3",        CX3_HW_ID, CT_CONNECTX, 2,  {4099, 4100, 4101, 4102,
-                                         4103, 4104, 4105, 4106,
+    { "ConnectX-3",        CX3_HW_ID, CT_CONNECTX, 2,  {4099, 4100, 4101, 4102,
+                                         4104, 4105, 4106,
                                          4107, 4108, 4109, 4110,
                                          4111, 4112, 0}},
-    { "Connect_IB",        CONNECT_IB_HW_ID, CT_CONNECT_IB, 2, {CONNECT_IB_SW_ID, 4114, 4115, 4116,
+    { "ConnectX-3Pro",    CX3_PRO_HW_ID, CT_CONNECTX, 2, {4103,0}},
+    { "Connect_IB",       CONNECT_IB_HW_ID, CT_CONNECT_IB, 2, {CONNECT_IB_SW_ID, 4114, 4115, 4116,
                                          4117, 4118, 4119, 4120,
                                          4121, 4122, 4123, 4124, 0}},
     { "InfiniScale IV",   IS4_HW_ID, CT_IS4, 0, {48436, 48437, 48438, 0}},
     { "BridgeX",          BRIDGEX_HW_ID, CT_BRIDGEX, 0, {64102, 64112, 64122, 0}},
     { "SwitchX",          SWITCHX_HW_ID, CT_SWITCHX, 0, {51000, 0}},
     { "Switch_IB",        SWITCH_IB_HW_ID, CT_SWITCH_IB,0, {52000, 0}},
-    { "ConnectX4",               CX4_HW_ID,     CT_CONNECTX,   0, {4115, 0}},
+    { "ConnectX-4",              CX4_HW_ID,     CT_CONNECTX,   0, {4115, 0}},
     { (char*)NULL ,              0, CT_UNKNOWN, 0, {0}},// zero devid terminator
 };
 
@@ -704,16 +734,17 @@ const FwOperations::HwDev2Str FwOperations::hwDev2Str[] = {
         {"ConnectX-2",        CX_HW_ID,         0xB0},
         {"ConnectX-3 A0",     CX3_HW_ID,        0x00},
         {"ConnectX-3 A1",     CX3_HW_ID,        0x01},
+        {"ConnectX-3Pro",     CX3_PRO_HW_ID,    0x0},
         {"ConnectX-4",        CX4_HW_ID,       0x00},
         {"SwitchX A0",        SWITCHX_HW_ID,    0x00},
         {"SwitchX A1",        SWITCHX_HW_ID,    0x01},
         {"BridgeX",           BRIDGEX_HW_ID,    0xA0},
         {"InfiniScale IV A0", IS4_HW_ID,        0xA0},
         {"InfiniScale IV A1", IS4_HW_ID,        0xA1},
-        {"InfiniHost A0",     TAVOR_HW_ID,      0xA0},
-        {"InfiniHost A1",     TAVOR_HW_ID,      0xA1},
-        {"InfiniHost III Lx", SINAI_HW_ID,      0xA0},
-        {"InfiniHost III Ex", ARBEL_HW_ID,      0xA0},
+        {"InfiniHost A0",     INFINIHOST_HW_ID,      0xA0},
+        {"InfiniHost A1",     INFINIHOST_HW_ID,      0xA1},
+        {"InfiniHost III Lx", INFINIHOST_III_LX_HW_ID,      0xA0},
+        {"InfiniHost III Ex", INFINIHOST_III_EX_HW_ID,      0xA0},
         {"SwitchIB A0",       SWITCH_IB_HW_ID,  0x00},
         { (char*)NULL ,       (u_int32_t)0, (u_int8_t)0x00}, // zero device ID terminator
 };
@@ -1126,10 +1157,10 @@ bool FwOperations::RomInfo::GetExpRomVerForOneRom(u_int32_t verOffset)
     // Following mlxsign:
     // 31:24    0    Compatible with UEFI
     // 23:16    ProductID   Product ID:
-    //                          0x1 - CLP implementation for Sinai (MT25408)
-    //                          0x2 - CLP implementation for Hermon DDR (MT25418)
-    //                                                 0x3 - CLP implementation for Hermon QDR (MT26428)
-    //                                                 0x4 - CLP implementation for Hermon ETHERNET (MT25448)
+    //                          0x1 - CLP implementation for InfiniHost_III_Lx (MT25408)
+    //                          0x2 - CLP implementation for Connectx DDR (MT25418)
+    //                                                 0x3 - CLP implementation for Connectx QDR (MT26428)
+    //                                                 0x4 - CLP implementation for Connectx ETHERNET (MT25448)
     //                          0X10 - PXE
     //                                                 0x11 - UEFI
     //                                                 0x12 - CLP with device ID and Version
@@ -1144,7 +1175,7 @@ bool FwOperations::RomInfo::GetExpRomVerForOneRom(u_int32_t verOffset)
     // 15:0 SubMinor version    Product sub minor version*. Not valid if
     //                                  ProductID < 0x10 or == 0x12.
     //
-    // 31:16    Device ID   The PCI Device ID (ex. 0x634A for Hermon
+    // 31:16    Device ID   The PCI Device ID (ex. 0x634A for Connectx
     //                          DDR). Not valid if ProductID < 0x10.
     // 15:12    Port Number Port number: 0 - Port independent, 1 - Port 1, 2 - Port 2
     //  8:11    Reserved
@@ -1402,23 +1433,23 @@ const char* FwOperations::expRomType2Str(u_int16_t type)
 {
        switch (type) {
                case 0x1:
-                   return "CLP1 ";
+                   return "CLP1";
                case 0x2:
-                       return "CLP2 ";
+                       return "CLP2";
                case 0x3:
-                       return "CLP3 ";
+                       return "CLP3";
                case 0x4:
-                       return "CLP4 ";
+                       return "CLP4";
                case 0xf:
-                       return "CLP "; // hack as 0xf isnt always CLP (its type is defined in the free string inside the ROM)
+                       return "CLP"; // hack as 0xf isnt always CLP (its type is defined in the free string inside the ROM)
                case 0x10:
-                       return "PXE  ";
+                       return "PXE";
                case 0x11:
-                       return "UEFI ";
+                       return "UEFI";
                case 0x12:
-                       return "CLP ";
+                       return "CLP";
                case 0x21:
-                       return "FCODE ";
+                       return "FCODE";
                default:
                    return (const char*)NULL;
                }
index af107cb0365722ea82b95bd4ec875fcbe70a8580..b1dee77920327aa537e456af2cfa3dbe3b07039c 100644 (file)
@@ -59,7 +59,7 @@ public:
 
     FwOperations(FBase *ioAccess) :
         _ioAccess(ioAccess), _isCached(false), _wasVerified(false),
-        _quickQuery(false), _printFunc((PrintCallBack)NULL), _fname(NULL), _advErrors(true)
+        _quickQuery(false), _printFunc((PrintCallBack)NULL), _fname(NULL), _devName(NULL), _advErrors(true)
     {
         memset(_sectionsToRead, 0, sizeof(_sectionsToRead));
         memset(&_fwImgInfo, 0, sizeof(_fwImgInfo));
@@ -94,14 +94,16 @@ public:
 
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc=(PrintCallBack)NULL, ProgressCallBack progressFunc=(ProgressCallBack)NULL) = 0;
 
+    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
     // use progressFunc when dealing with FS2 image and printFunc when dealing with FS3 image.
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL) = 0;
     virtual bool FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
     virtual bool FwSetAccessKey(hw_key_t userKey, ProgressCallBack progressFunc=(ProgressCallBack)NULL) = 0;
-    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo)= 0;
+    virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage=false)= 0;
     virtual bool FwResetNvData() = 0;
     virtual bool FwShiftDevData(PrintCallBack progressFunc=(PrintCallBack)NULL) = 0;
+    virtual const char*  FwGetResetRecommandationStr() = 0;
 
     void FwCleanUp();
     virtual bool FwInit() = 0;
@@ -110,13 +112,13 @@ public:
     //needed for flint low level operations
     bool FwSwReset();
 
-
+    
     //virtual bool FwBurnBlock(FwOperations &FwImageAccess); // Add call back
     static FwOperations* FwOperationsCreate(void* fwHndl, void *info, char* psid, fw_hndl_type_t hndlType, char* errBuff=(char*)NULL, int buffSize=0);
     static FwOperations* FwOperationsCreate(fw_ops_params_t& fwParams);
 
     //bool GetExpRomVersionWrapper();
-
+    void getSupporteHwId(u_int32_t **supportedHwId, u_int32_t &supportedHwIdNum);
 
     class MLXFWOP_API RomInfo : ErrMsg {
     public:
@@ -178,6 +180,7 @@ public:
         bool singleImageBurn;
         bool noDevidCheck;
         bool ignoreVersionCheck;
+        bool useImgDevData; // FS3 image only - take device data sections from image (valid only if burnFailsafe== false)
         BurnRomOption burnRomOptions;
 
         //callback fun
@@ -190,7 +193,7 @@ public:
         ExtBurnParams():userGuidsSpecified(false), userMacsSpecified(false), userUidsSpecified(false),
                         vsdSpecified(false),blankGuids(false), burnFailsafe(true), allowPsidChange(false),
                         useImagePs(false), useImageGuids(false), singleImageBurn(true), noDevidCheck(false),
-                        ignoreVersionCheck(false), burnRomOptions(BRO_DEFAULT), progressFunc(NULL),
+                        ignoreVersionCheck(false), useImgDevData(false), burnRomOptions(BRO_DEFAULT), progressFunc(NULL),
                         userVsd(NULL){}
         };
 
@@ -226,6 +229,8 @@ public:
             bool guidsSpecified;
             bool uidsSpecified;
             std::vector<guid_t> userGuids;
+            u_int8_t numOfGUIDs; // number of GUIDs to allocate for each port. (FS3 image Only)
+            u_int8_t stepSize; // step size between GUIDs. (FS3 Image Only).
         };
 
 protected:
@@ -338,6 +343,7 @@ protected:
 
     PrintCallBack _printFunc;
     const char* _fname;
+    const char* _devName;
     // show advanced error msgs
     bool _advErrors;
 
@@ -357,7 +363,7 @@ private:
     static u_int8_t CheckFwFormat(FBase& f, bool getFwFormatFromImg = false);
     static bool     CntxFindMagicPattern  (FBase* ioAccess, u_int32_t addr);
     static void     WriteToErrBuff(char* errBuff, const char* errStr, int size);
-
+    static const char * err2str(int errNum);
     // Methods
 
     // Static Members
index 766861d330ede1b0c3bab6cd59eed8e4dc5bf85a..67c1941994a6543ae27c419bfea611a360cb7e01 100644 (file)
@@ -127,6 +127,11 @@ typedef struct guid {
 } guid_t;
 typedef guid_t hw_key_t;
 
+typedef struct fs3_guid {
+    guid_t uid;
+    u_int8_t num_of_guids;
+    u_int8_t step_size;
+} fs3_guid_t;
 
 typedef struct rom_info {
     u_int16_t exp_rom_product_id; // 0 - invalid.
index 0ed72cce526cf1a840da9323c41d207ddbbe4fbe..ffb527983058df016fd48b8a341ec7d3774c9391 100755 (executable)
@@ -19,7 +19,7 @@
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #define _GNU_SOURCE
 #include <crdump.h>
 #include <dev_mgt/tools_dev_types.h>
@@ -505,7 +504,7 @@ static int crd_read_line(IN FILE *fd, OUT char *tmp) {
             int c = fgetc(fd);
             if (c == '#') {
                 char* _ptr=fgets (tmp, 300, fd);
-                (void)_ptr;// avoid warnings
+                (void)_ptr;//avoid warning
                 tmp[0] = 0;
                 continue;
             }
index 45d34dead5d354a405d496c0b81a8e0278c97081..b8403e5a04c5e1b1bebe7af608793fbab6716721 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef _CRDUMP_H_
 #define _CRDUMP_H_
 
index 5188ab952175227dc599baee06e9ed25fce1637a..f0f77544c86c13d98eb7c275af730cddd8d9a022 100755 (executable)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #include <crdump.h>
 #include <dev_mgt/tools_dev_types.h>
 #include <common/tools_version.h>
index 050d90f424dfe1db190ec2ecffc4b0fa2cb93d3e..70865302f0548c46ddec46e9f273317fd1c95d3d 100755 (executable)
 0x05214c,1,
 0x052154,1,
 0x052160,4,
-0x05217c,1,
-0x052194,11,
+0x05217c,17,
 0x0521c4,3,
 0x0521d4,3,
 0x0521e4,3,
 0x05255c,9,
 0x0525dc,9,
 0x052604,1,
-0x052654,28,
+0x052640,33,
 0x0526d0,1,
 0x0526e4,1,
 0x0526ec,1,
 0x0a280c,4,
 0x0a2c04,2,
 0x0a2c10,2,
-0x0a2c1c,2,
-0x0a2c28,3,
+0x0a2c1c,6,
 0x0a2c38,14,
 0x0a2c78,9,
 0x0a2d04,2,
 0x0e0030,1,
 0x0e0048,2,
 0x0e0058,2,
-0x0e0068,11,
-0x0e009c,2,
-0x0e00ac,14,
+0x0e0068,31,
 0x0e0180,2,
 0x0e01e0,1,
 0x0e01e8,3,
 0x0e0230,1,
 0x0e0248,2,
 0x0e0258,2,
-0x0e0268,11,
-0x0e029c,2,
-0x0e02ac,14,
+0x0e0268,31,
 0x0e0380,2,
 0x0e03e0,1,
 0x0e03e8,3,
 0x0e0430,1,
 0x0e0448,2,
 0x0e0458,2,
-0x0e0468,11,
-0x0e049c,2,
-0x0e04ac,14,
+0x0e0468,31,
 0x0e0580,2,
 0x0e05e0,1,
 0x0e05e8,3,
 0x0e0630,1,
 0x0e0648,2,
 0x0e0658,2,
-0x0e0668,11,
-0x0e069c,2,
-0x0e06ac,14,
+0x0e0668,31,
 0x0e0780,2,
 0x0e07e0,1,
 0x0e07e8,3,
 0x0e0830,1,
 0x0e0848,2,
 0x0e0858,2,
-0x0e0868,11,
-0x0e089c,2,
-0x0e08ac,14,
+0x0e0868,31,
 0x0e0980,2,
 0x0e09e0,1,
 0x0e09e8,3,
 0x0e0a30,1,
 0x0e0a48,2,
 0x0e0a58,2,
-0x0e0a68,11,
-0x0e0a9c,2,
-0x0e0aac,14,
+0x0e0a68,31,
 0x0e0b80,2,
 0x0e0be0,1,
 0x0e0be8,3,
 0x0e0c30,1,
 0x0e0c48,2,
 0x0e0c58,2,
-0x0e0c68,11,
-0x0e0c9c,2,
-0x0e0cac,14,
+0x0e0c68,31,
 0x0e0d80,2,
 0x0e0de0,1,
 0x0e0de8,3,
 0x0e0e30,1,
 0x0e0e48,2,
 0x0e0e58,2,
-0x0e0e68,11,
-0x0e0e9c,2,
-0x0e0eac,14,
+0x0e0e68,31,
 0x0e0f80,2,
 0x0e0fe0,1,
 0x0e0fe8,3,
index 77697d641c8642c576f4a10cef8ee0b70f6d035a..2dd5953fb4e6c9dba4ecc83eb18f7520b3b97f65 100644 (file)
 #Addr, Size, Enable addr
-0x000000,16385,
-0x010010,8,
-0x010104,1,
-0x01010c,4,
-0x010200,1,
-0x010210,4,
-0x010300,4,
-0x010400,3,
-0x010410,1,
-0x010444,1,
-0x01044c,4,
-0x010480,2,
+0x000000,16388,
+0x010084,1,
+0x01008c,2,
+0x010180,5,
+0x01019c,5,
+0x010304,1,
+0x0103bc,52,
 0x010500,35,
-0x010590,1,
-0x010600,32,
-0x010704,1,
-0x01070c,1,
-0x010804,2,
-0x010814,3,
-0x010824,2,
-0x010834,3,
-0x010844,2,
-0x010854,5,
-0x010a00,6,
-0x011004,1,
-0x01100c,4,
-0x011204,1,
-0x011214,4,
-0x011228,1,
-0x011244,1,
-0x011250,4,
-0x011264,1,
-0x011274,1,
-0x01127c,1,
-0x0112a4,1,
-0x011300,4,
-0x011314,1,
-0x01131c,3,
-0x011404,2,
-0x011430,20,
-0x011484,2,
-0x011498,5,
-0x0114bc,1,
-0x0114c8,1,
-0x0114d4,2,
-0x01150c,3,
-0x011524,3,
-0x011608,3,
-0x011618,4,
-0x011680,16,
-0x011704,2,
-0x011730,20,
-0x011784,3,
-0x011794,3,
-0x0117c0,6,
-0x011800,35,
-0x0118a4,1,
-0x0118ac,1,
-0x0118c4,3,
-0x0118d4,1,
-0x0118dc,2,
-0x011900,35,
-0x011b04,2,
-0x011b14,3,
-0x011b24,2,
-0x011b38,6,
-0x011b60,5,
-0x011c04,1,
-0x011cb8,18,
-0x011d98,1,
-0x011e00,1,
-0x011e08,1,
-0x011e10,1,
-0x012000,32,
-0x012200,32,
-0x012400,32,
-0x012600,32,
-0x012800,20,
-0x012888,22,
-0x012900,18,
-0x012a00,36,
-0x012b00,3,
-0x012b10,1,
-0x012b20,1,
-0x012b30,1,
-0x012b40,1,
-0x012b50,1,
-0x012b60,1,
-0x012c00,1,
-0x012c08,1,
-0x012c10,1,
-0x012c18,1,
-0x012c20,1,
-0x012c28,1,
-0x012c30,1,
-0x012c38,1,
-0x012c50,1,
-0x012c58,1,
-0x012c60,1,
-0x012c68,1,
-0x012c70,1,
-0x012c78,1,
-0x012c80,1,
-0x012c88,1,
-0x012d00,5,
-0x012d20,2,
-0x012e00,6,
-0x012e20,6,
-0x012e80,5,
-0x013000,4,
-0x013084,1,
-0x01308c,2,
-0x013180,5,
-0x01319c,5,
-0x013304,1,
-0x0133bc,52,
-0x013500,35,
-0x013604,1,
-0x01360c,1,
-0x013624,1,
-0x01362c,1,
-0x013644,1,
-0x01364c,3,
-0x013800,1,
-0x013808,2,
-0x013a04,1,
-0x013a0c,4,
-0x015000,32,
-0x015100,2,
-0x015110,3,
-0x015120,2,
-0x015144,3,
+0x010604,1,
+0x01060c,1,
+0x010624,1,
+0x01062c,1,
+0x010644,1,
+0x01064c,3,
+0x010800,1,
+0x010808,2,
+0x010844,1,
+0x01084c,4,
+0x011000,32,
+0x011200,32,
+0x011400,32,
+0x011600,32,
+0x011800,20,
+0x011888,22,
+0x011900,18,
+0x011a00,36,
+0x011b00,3,
+0x011b10,1,
+0x011b20,1,
+0x011b30,1,
+0x011b40,1,
+0x011b50,1,
+0x011b60,1,
+0x011b70,1,
+0x011c00,128,
+0x012000,1,
+0x012008,1,
+0x012010,1,
+0x012018,1,
+0x012020,1,
+0x012028,1,
+0x012030,1,
+0x012038,1,
+0x012050,1,
+0x012058,1,
+0x012060,1,
+0x012068,1,
+0x012070,1,
+0x012078,1,
+0x012080,1,
+0x012088,1,
+0x012090,1,
+0x012100,5,
+0x012120,2,
+0x012180,6,
+0x0121a0,6,
+0x012200,5,
+0x012220,6,
+0x012240,3,
+0x012280,9,
+0x0122c0,16,
+0x014000,1,
+0x014010,10,
+0x014104,1,
+0x01410c,4,
+0x014200,1,
+0x014210,4,
+0x014300,4,
+0x014400,3,
+0x014410,1,
+0x014444,1,
+0x01444c,4,
+0x014480,2,
+0x014500,35,
+0x014590,1,
+0x014600,32,
+0x014704,1,
+0x01470c,1,
+0x014804,2,
+0x014814,3,
+0x014824,2,
+0x014834,3,
+0x014844,2,
+0x014854,5,
+0x014a00,4,
+0x014a14,2,
+0x015004,1,
+0x01500c,4,
 0x015204,1,
-0x01520c,1,
-0x015224,1,
-0x01522c,1,
-0x015234,1,
-0x01523c,1,
+0x015214,4,
+0x015228,1,
 0x015244,1,
-0x01524c,1,
-0x015254,1,
-0x01525c,2,
-0x015270,1,
-0x015280,1,
-0x015290,1,
-0x0152a0,1,
-0x0152b0,1,
-0x0152c0,1,
-0x0152d0,1,
-0x0152e0,1,
-0x0152f0,1,
-0x015300,1,
-0x015310,1,
-0x015320,1,
-0x015330,1,
-0x016800,3,
-0x016820,8,
+0x015250,4,
+0x015274,1,
+0x01527c,1,
+0x0152a4,1,
+0x015300,4,
+0x015314,1,
+0x01531c,3,
+0x015404,2,
+0x015430,20,
+0x015484,2,
+0x015498,5,
+0x0154bc,1,
+0x0154c8,1,
+0x0154d4,2,
+0x01550c,3,
+0x015524,3,
+0x015608,3,
+0x015618,4,
+0x015680,16,
+0x015704,2,
+0x015730,20,
+0x015784,3,
+0x015794,3,
+0x0157c0,6,
+0x015800,52,
+0x0158d4,1,
+0x0158dc,1,
+0x0158e4,3,
+0x0158f4,1,
+0x0158fc,52,
+0x015b04,2,
+0x015b14,3,
+0x015b24,2,
+0x015b38,6,
+0x015b60,5,
+0x015c04,1,
+0x015cb8,18,
+0x015d98,1,
+0x015e00,1,
+0x015e08,1,
+0x015e10,1,
+0x016000,32,
+0x016100,3,
+0x016110,3,
+0x016120,2,
+0x016144,3,
+0x016204,1,
+0x01620c,1,
+0x016224,1,
+0x01622c,1,
+0x016234,1,
+0x01623c,1,
+0x016244,1,
+0x01624c,1,
+0x016254,1,
+0x01625c,2,
+0x016270,1,
+0x016280,1,
+0x016290,1,
+0x0162a0,1,
+0x0162b0,1,
+0x0162c0,1,
+0x0162d0,1,
+0x0162e0,1,
+0x0162f0,1,
+0x016300,1,
+0x016310,1,
+0x016320,1,
+0x016330,1,
+0x016340,32,
+0x016800,9,
+0x016840,16,
 0x017800,1,
-0x017818,1,
-0x017834,1,
-0x017904,4,
-0x017934,1,
-0x01794c,1,
-0x017970,2,
+0x017828,1,
+0x017850,1,
+0x017878,1,
+0x0178a0,13,
+0x0179ac,1,
+0x0179d8,4,
 0x017a00,6,
+0x017a20,6,
+0x017a40,3,
 0x017c00,6,
 0x017c20,6,
 0x017c40,6,
 0x017cc0,6,
 0x017ce0,6,
 0x017d00,3,
-0x017d10,4,
+0x017d10,5,
 0x018400,11,
 0x018430,2,
 0x018440,4,
 0x018640,4,
 0x018800,1,
 0x018810,4,
-0x018c04,1,
-0x018c0c,4,
+0x018844,1,
+0x01884c,4,
 0x01a400,7,
 0x01a420,2,
 0x01a444,1,
 0x01a44c,1,
 0x01a800,1,
 0x01a814,3,
-0x01ac04,1,
-0x01ac0c,4,
+0x01a844,1,
+0x01a84c,4,
 0x01c400,7,
 0x01c500,8,
 0x01c544,1,
 0x01c60c,3,
 0x01c800,1,
 0x01c814,3,
-0x01cc04,1,
-0x01cc0c,4,
+0x01c844,1,
+0x01c84c,4,
 0x01f400,1,
 0x01f408,4,
 0x01f41c,3,
 0x01f500,2,
 0x01f800,1,
 0x01f814,3,
-0x01fc04,1,
-0x01fc0c,4,
+0x01f844,1,
+0x01f84c,4,
 0x020004,1,
 0x02000c,4,
 0x020080,9,
+0x020800,16,
+0x020900,192,
 0x021004,1,
 0x02100c,4,
 0x021400,5,
-0x021418,1,
+0x021418,5,
 0x021480,1,
 0x021704,2,
 0x02173c,17,
 0x021804,1,
 0x02180c,4,
-0x021a00,2,
-0x022000,131,
-0x022220,4,
+0x021840,2,
+0x022280,12,
 0x022408,6,
 0x022444,1,
 0x022454,3,
 0x02280c,4,
 0x022904,4,
 0x022924,4,
-0x024000,5,
-0x024020,1,
-0x024030,8,
-0x024058,1,
-0x024060,1,
-0x024070,9,
-0x0240a0,1,
-0x0240b0,4,
-0x024100,25,
+0x024000,34,
+0x0240c0,19,
+0x024120,10,
 0x024200,5,
-0x024218,3,
-0x0243a0,6,
-0x0243bc,26,
-0x024428,3,
-0x024440,3,
-0x024464,1,
-0x02446c,1,
-0x024474,3,
-0x024484,1,
-0x02448c,4,
-0x024500,1,
-0x02450c,7,
-0x024530,1,
-0x024544,4,
-0x024560,1,
-0x024570,1,
-0x024580,4,
-0x0245a4,2,
-0x0245b4,3,
-0x0245c4,2,
-0x0245d4,3,
-0x024600,2,
-0x02460c,1,
-0x024624,3,
-0x024674,1,
-0x02467c,1,
-0x024684,1,
-0x02468c,4,
-0x024704,1,
-0x02470c,4,
-0x024780,32,
-0x024824,4,
-0x024864,6,
-0x024888,10,
-0x0248b4,3,
+0x024220,1,
+0x024230,8,
+0x024258,1,
+0x024260,1,
+0x024270,9,
+0x0242a0,1,
+0x0242b0,4,
+0x0242c8,2,
+0x024300,5,
+0x024318,2,
+0x02439c,7,
+0x0243bc,17,
+0x024424,4,
+0x024464,13,
+0x0244a4,1,
+0x0244ac,3,
+0x0244c0,2,
+0x0244d0,3,
+0x0244e0,3,
+0x0244f0,3,
+0x024500,3,
+0x024510,3,
+0x024520,3,
+0x024530,3,
+0x024888,14,
 0x0248c4,1,
 0x0248cc,1,
 0x0248d4,1,
-0x0248dc,7,
+0x0248dc,1,
+0x0248f0,2,
 0x024908,6,
 0x024928,6,
 0x024968,6,
 0x024984,3,
 0x024994,1,
 0x02499c,6,
-0x024a00,14,
-0x024a40,8,
+0x0249b8,4,
+0x024a08,6,
+0x024a28,6,
+0x024a68,6,
+0x024a84,1,
+0x024a8c,1,
+0x024a94,1,
+0x024a9c,9,
+0x024ae0,6,
+0x024b00,14,
+0x024b40,8,
+0x024c00,2,
+0x024c24,3,
+0x024c34,3,
 0x025004,6,
-0x025800,2,
+0x025800,37,
 0x026000,99,
-0x028000,2,
-0x028404,1,
-0x02840c,4,
+0x026800,10,
+0x02682c,1,
+0x026840,2,
+0x026864,1,
+0x02686c,1,
+0x026874,3,
+0x026884,1,
+0x02688c,5,
+0x026904,1,
+0x02690c,4,
+0x026980,33,
+0x026a0c,7,
+0x026a30,1,
+0x026a44,4,
+0x026a60,1,
+0x026a70,1,
+0x026b00,6,
+0x026b44,2,
+0x026b68,6,
+0x026b84,2,
+0x026ba8,10,
+0x026c00,7,
+0x026c44,1,
+0x026c4c,1,
+0x026c84,1,
+0x026c8c,4,
+0x026cc4,1,
+0x026ccc,4,
 0x028800,2,
-0x028c04,1,
-0x028c0c,4,
-0x029004,1,
-0x02900c,5,
-0x029b20,2,
-0x029b30,4,
-0x029b50,5,
+0x028844,1,
+0x02884c,4,
+0x029004,7,
+0x029b30,2,
+0x029b50,4,
 0x02a004,1,
 0x02a00c,4,
+0x02a040,6,
 0x02a200,1,
-0x02a210,9,
-0x02a3fc,1,
-0x02a484,16,
-0x02a504,16,
+0x02a210,8,
+0x02a484,1,
+0x02a4c0,16,
 0x02a780,1,
-0x02a790,4,
+0x02a790,5,
+0x02a7b0,1,
+0x02a7c0,1,
 0x02a900,1,
 0x02aa04,1,
 0x02aa0c,4,
 0x02abb4,1,
 0x02abbc,1,
 0x02abc4,1,
-0x02abcc,9,
+0x02abcc,1,
+0x02abe0,4,
+0x02abf4,2,
 0x02ac00,2,
 0x02ac10,3,
 0x02ac44,3,
 0x02ade8,1,
 0x02adf0,1,
 0x02adf8,1,
+0x02ae00,6,
+0x02ae20,5,
+0x02ae40,4,
 0x02c000,6,
 0x02c100,5,
 0x02c204,1,
 0x02c224,1,
 0x02c22c,4,
 0x02c244,2,
-0x02c400,3,
-0x02c418,3,
-0x02c434,3,
-0x02c504,6,
-0x02c534,3,
-0x02c54c,1,
-0x02c570,3,
+0x02c250,5,
+0x02c400,2,
+0x02c428,2,
+0x02c450,2,
+0x02c478,2,
+0x02c4a0,25,
+0x02c5ac,1,
+0x02c5d8,4,
+0x02c600,6,
+0x02c620,6,
+0x02c640,6,
+0x02c660,6,
+0x02c680,3,
 0x02c800,3,
 0x02c820,6,
 0x02c840,6,
 0x02ca20,6,
 0x02ca40,6,
 0x02ca60,6,
-0x02cc00,3,
-0x02cc20,9,
+0x02ca80,6,
+0x02caa0,6,
+0x02cac0,6,
+0x02cae0,6,
+0x02cb00,6,
+0x02cb20,6,
 0x02cc48,4,
+0x02cd00,9,
+0x02cd40,17,
 0x030004,2,
 0x030034,19,
 0x030084,2,
 0x0300bc,17,
 0x030104,2,
-0x030138,18,
-0x030300,5,
-0x030340,1,
-0x03034c,1,
+0x030138,27,
+0x030300,7,
+0x030340,2,
+0x03034c,2,
 0x030384,1,
 0x0303c0,16,
 0x030404,1,
 0x03080c,4,
 0x030c04,1,
 0x030c0c,4,
-0x030e00,1,
-0x031000,7,
-0x031100,7,
-0x031200,18,
+0x030c40,4,
+0x031000,11,
+0x031100,11,
+0x031200,17,
+0x031280,6,
 0x031304,1,
-0x03130c,3,
+0x03130c,5,
 0x031400,6,
 0x031420,1,
 0x031444,2,
 0x031454,3,
 0x031464,2,
-0x031474,3,
+0x031474,11,
 0x031500,14,
 0x031540,8,
-0x034200,19,
-0x034254,21,
-0x0342ac,1,
+0x031600,13,
+0x031640,6,
+0x031700,2,
+0x034200,24,
+0x034280,10,
+0x0342ac,2,
 0x0342c0,6,
-0x0342f0,4,
-0x034600,19,
-0x034654,21,
-0x0346ac,1,
+0x0342f0,39,
+0x034600,24,
+0x034680,10,
+0x0346ac,2,
 0x0346c0,6,
-0x0346f0,4,
-0x034c00,10,
+0x0346f0,39,
+0x034c00,6,
+0x034c20,2,
 0x034c40,9,
 0x034c80,9,
-0x034e04,3,
+0x034e04,2,
+0x034e14,3,
 0x034e44,1,
 0x034e4c,4,
 0x034e80,5,
 0x034f04,1,
-0x034f20,9,
+0x034f18,11,
 0x034f80,1,
 0x035000,2,
 0x035010,3,
 0x035210,3,
 0x035244,3,
 0x035300,64,
-0x037000,5,
+0x035410,2,
+0x037000,6,
 0x03702c,7,
-0x037080,4,
-0x037094,1,
-0x037100,2,
+0x037080,10,
+0x0370ac,3,
+0x037100,4,
 0x037200,2,
 0x037210,3,
 0x037244,3,
-0x037300,69,
+0x037300,70,
 0x03742c,7,
-0x037480,4,
-0x037494,1,
-0x037500,2,
+0x037480,10,
+0x0374ac,3,
+0x037500,4,
 0x037600,2,
 0x037610,3,
 0x037644,3,
-0x037700,69,
+0x037700,74,
 0x038000,3,
-0x038104,2,
-0x03813c,3,
-0x038400,1,
-0x038418,1,
-0x038434,1,
-0x038504,4,
-0x038534,1,
-0x03854c,1,
-0x038570,2,
+0x038104,3,
+0x03813c,2,
+0x038150,3,
+0x038400,2,
+0x038428,2,
+0x038450,2,
+0x038478,2,
+0x0384a0,22,
+0x0385ac,1,
+0x0385d8,4,
 0x038600,6,
+0x038620,6,
+0x038640,6,
+0x038660,6,
+0x038680,3,
 0x038800,3,
 0x038820,6,
 0x038840,6,
 0x038860,6,
 0x038880,6,
-0x038900,20,
-0x038958,1,
-0x038980,3,
-0x0389a0,25,
+0x0388a0,6,
+0x0388c0,6,
+0x038900,28,
+0x038978,1,
+0x038a40,25,
+0x038ac0,16,
+0x039000,35,
+0x039090,3,
+0x039100,35,
+0x039190,3,
+0x039200,35,
+0x039290,3,
+0x039300,35,
+0x039390,3,
+0x039400,35,
+0x039490,3,
+0x039500,1,
+0x039800,3,
+0x039884,1,
+0x0398c0,16,
+0x039904,2,
+0x039934,19,
+0x039984,2,
+0x0399c0,16,
+0x039a04,2,
+0x039a10,4,
+0x039a24,2,
+0x039a30,4,
+0x039a44,2,
+0x039a50,4,
+0x039a64,2,
+0x039a70,8,
+0x039c00,14,
+0x039c40,8,
+0x039d00,11,
+0x039d40,11,
+0x039d84,1,
+0x039dc0,26,
+0x039e30,2,
+0x039e44,3,
+0x039e54,1,
+0x039e5c,2,
+0x039e80,2,
+0x039e90,3,
+0x039ea4,1,
+0x039eac,3,
+0x039ec0,3,
+0x039f00,9,
+0x039f40,22,
+0x039fa0,6,
+0x039fc0,8,
 0x03c000,3,
 0x03c010,3,
 0x03c020,3,
 0x03c930,5,
 0x03c950,5,
 0x03c970,5,
-0x03c990,1,
 0x03c9a4,3,
 0x03ca78,34,
 0x03cb3c,18,
 0x03f210,1,
 0x03f300,6,
 0x03f320,6,
-0x03f340,3,
-0x03f360,8,
+0x03f380,9,
+0x03f3c0,16,
 0x050000,1,
 0x050008,2,
-0x051004,8,
-0x052004,1,
-0x052078,34,
-0x052104,1,
-0x05210c,1,
-0x052114,1,
-0x052124,1,
-0x05212c,1,
-0x052134,1,
-0x052144,1,
-0x05214c,1,
-0x052154,1,
-0x052160,4,
-0x05217c,1,
-0x052194,11,
-0x0521c4,3,
-0x0521d4,3,
-0x0521e4,3,
-0x0521f4,1,
-0x0521fc,1,
-0x052204,1,
-0x05220c,1,
-0x052214,1,
-0x05221c,1,
-0x052234,1,
-0x05223c,2,
+0x050044,8,
+0x050104,1,
+0x050178,34,
+0x050204,1,
+0x05020c,1,
+0x050214,1,
+0x050224,1,
+0x05022c,1,
+0x050234,1,
+0x05023c,1,
+0x050244,1,
+0x05024c,1,
+0x050254,1,
+0x050280,1,
+0x0502b0,21,
+0x050334,3,
+0x050344,3,
+0x050354,3,
+0x050364,1,
+0x05036c,1,
+0x050374,1,
+0x05037c,1,
+0x050384,1,
+0x05038c,1,
+0x050394,1,
+0x05039c,1,
+0x0503a4,1,
+0x0503ac,1,
+0x051004,1,
+0x051038,18,
+0x051100,2,
+0x051144,1,
+0x05114c,4,
+0x051184,2,
+0x051198,2,
+0x0511a4,1,
+0x0511b0,5,
+0x0511d0,6,
+0x052100,3,
+0x052220,1,
+0x052230,5,
 0x052260,9,
 0x0522c4,3,
 0x0522d4,3,
 0x052410,2,
 0x05241c,1,
 0x052424,1,
-0x05242c,23,
-0x052490,16,
+0x05242c,41,
 0x0524d4,1,
 0x0524dc,9,
-0x05251c,9,
-0x05255c,9,
-0x0525dc,9,
+0x052510,12,
+0x052550,12,
+0x0525d0,12,
 0x052604,1,
-0x052654,28,
+0x052640,33,
 0x0526d0,1,
-0x052710,14,
-0x0527ec,1,
-0x0527fc,40,
-0x052c00,3,
-0x052c20,6,
-0x052c40,6,
-0x052c60,6,
-0x052c80,6,
-0x052ca0,6,
-0x052cc0,6,
-0x052ce0,6,
-0x052d00,6,
-0x052d20,6,
-0x052e00,32,
+0x0526e4,1,
+0x0526ec,1,
+0x0526f4,1,
+0x052710,17,
+0x052764,1,
+0x052770,6,
+0x0527ec,2,
+0x052804,4,
+0x052840,11,
+0x052e74,1,
+0x052e7c,1,
 0x052e84,1,
 0x052e8c,1,
 0x052e94,1,
 0x052e9c,1,
-0x052ea4,1,
-0x052eac,1,
-0x052eb4,4,
+0x052ea4,4,
+0x052ec0,1,
 0x052ed0,1,
 0x052ee0,1,
 0x052ef0,1,
 0x052fd0,1,
 0x052fe0,1,
 0x052ff0,1,
+0x053000,54,
+0x053400,3,
+0x053420,6,
+0x053440,6,
+0x053460,6,
+0x053480,6,
+0x0534a0,6,
+0x0534c0,6,
+0x0534e0,6,
+0x053500,6,
+0x053520,6,
+0x053540,6,
+0x053560,6,
+0x053600,33,
+0x053690,1,
+0x0536a0,1,
+0x0536b0,1,
 0x054004,1,
 0x05400c,4,
 0x054204,1,
 0x05422c,1,
 0x054234,1,
 0x054244,1,
-0x05424c,1,
+0x05424c,3,
+0x054304,1,
+0x054340,16,
 0x054800,1,
-0x054810,22,
-0x0548a8,16,
-0x054928,15,
-0x054a00,11,
-0x054b0c,3,
+0x054810,6,
+0x054928,9,
+0x054954,4,
+0x054a00,14,
+0x054a80,6,
 0x054c00,5,
-0x055000,5,
+0x054c20,1,
+0x054c30,1,
+0x055000,6,
 0x055020,24,
 0x055100,13,
 0x055140,11,
 0x055540,6,
 0x055560,6,
 0x055580,6,
+0x0555a0,6,
+0x0555c0,6,
+0x0555e0,6,
 0x056000,2,
-0x056404,1,
-0x05640c,4,
+0x056044,1,
+0x05604c,4,
 0x056800,2,
-0x056c04,1,
-0x056c0c,4,
-0x057004,1,
-0x05700c,5,
+0x056844,1,
+0x05684c,4,
+0x057004,7,
 0x057b20,2,
-0x057b30,4,
+0x057b30,2,
 0x057b50,5,
 0x058004,1,
 0x05800c,4,
 0x058800,7,
 0x058820,6,
 0x058844,2,
-0x058850,9,
-0x058880,1,
+0x058864,9,
 0x058890,1,
 0x0588a0,1,
 0x0588b0,1,
 0x0588c0,1,
+0x0588d0,1,
 0x058904,3,
 0x058978,66,
 0x058a84,1,
 0x059870,1,
 0x059880,1,
 0x059890,1,
-0x0598c4,2,
+0x0598a0,1,
+0x0598d4,2,
 0x059900,3,
-0x059940,3,
-0x059960,8,
+0x059980,9,
+0x0599c0,32,
+0x059a44,3,
+0x059a54,1,
+0x059a5c,1,
 0x059c00,1,
-0x059c18,1,
-0x059c34,1,
-0x059d04,4,
-0x059d34,1,
-0x059d4c,1,
-0x059d70,2,
+0x059c28,1,
+0x059c50,1,
+0x059c78,1,
+0x059ca0,20,
+0x059dac,1,
+0x059dd8,4,
 0x059e00,6,
+0x059e20,6,
+0x059e40,3,
 0x05a000,4,
 0x05a020,2,
 0x05a030,1,
-0x05a040,1,
-0x05a04c,1,
+0x05a04c,2,
 0x05a080,5,
 0x05a0a0,1,
 0x05a0b0,1,
 0x05a0c0,1,
-0x060004,11,
+0x060020,4,
 0x060120,4,
 0x060144,2,
 0x060154,7,
 0x06018c,1,
 0x0601a0,4,
 0x0601b8,2,
+0x0601c4,2,
+0x0601e4,7,
 0x060204,1,
 0x06020c,4,
+0x060240,16,
+0x060304,1,
+0x06030c,1,
 0x060400,2,
 0x060420,3,
 0x060430,1,
 0x060c30,3,
 0x061004,1,
 0x061010,1,
-0x061018,1,
-0x061020,2,
+0x061018,4,
 0x061044,2,
 0x061054,3,
 0x061100,32,
 0x061200,1,
 0x061404,1,
 0x06140c,4,
+0x061440,2,
+0x061468,2,
+0x061478,2,
 0x06180c,8,
-0x061904,3,
-0x061914,3,
-0x061934,3,
-0x061a00,4,
+0x061908,6,
+0x061928,6,
+0x061968,6,
+0x061988,6,
+0x0619a8,6,
+0x0619e8,14,
 0x062008,5,
 0x062024,3,
 0x062034,1,
 0x0620d0,1,
 0x0620e0,1,
 0x0620f4,4,
+0x0621c0,2,
+0x0621e4,3,
+0x0621f4,3,
 0x062404,1,
 0x06240c,4,
 0x062800,12,
 0x06292c,1,
 0x062934,1,
 0x06293c,2,
-0x062950,2,
+0x062950,3,
+0x062960,2,
 0x063000,1,
 0x063010,4,
 0x063024,1,
 0x063164,1,
 0x06316c,1,
 0x063174,1,
+0x063180,16,
 0x063208,1,
 0x063210,1,
 0x063218,1,
 0x064884,2,
 0x0648c8,14,
 0x065018,2,
-0x065040,3,
-0x065060,8,
-0x065104,5,
+0x065080,9,
+0x0650c0,16,
+0x065104,3,
+0x065114,1,
 0x065200,3,
 0x065220,6,
 0x065240,6,
 0x065260,6,
 0x065280,6,
+0x065300,1,
 0x065f00,2,
 0x066000,2,
-0x066018,2,
-0x066034,2,
-0x066104,6,
-0x066134,2,
-0x06614c,1,
-0x066170,3,
+0x066028,2,
+0x066050,2,
+0x066078,2,
+0x0660a0,25,
+0x0661ac,1,
+0x0661d8,4,
 0x066200,6,
 0x066220,6,
-0x0662c0,1,
+0x066240,6,
+0x066260,6,
+0x066280,3,
 0x066400,8,
-0x066500,14,
+0x066500,16,
 0x066550,8,
 0x066574,3,
 0x070004,1,
 0x070524,1,
 0x07052c,1,
 0x070534,1,
+0x070540,4,
 0x070600,142,
 0x070884,2,
-0x0708c4,15,
+0x0708b4,19,
 0x070904,1,
 0x070940,16,
 0x071000,1,
 0x07141c,1,
 0x071424,1,
 0x07142c,1,
-0x071504,1,
-0x071540,16,
+0x071434,1,
+0x07143c,1,
 0x071800,2,
 0x071904,1,
 0x071940,16,
 0x0733a0,1,
 0x0733c0,1,
 0x0733e0,1,
-0x074830,7,
-0x074860,8,
-0x074884,2,
+0x073800,16,
+0x074830,4,
+0x074884,1,
 0x074890,4,
 0x074900,6,
 0x074920,6,
-0x074a00,3,
+0x074980,9,
+0x0749c0,19,
 0x074c00,1,
-0x074c18,1,
-0x074c34,1,
-0x074d04,3,
-0x074d34,1,
-0x074d4c,1,
-0x074d70,2,
+0x074c28,1,
+0x074c50,1,
+0x074c78,1,
+0x074ca0,12,
+0x074dac,1,
+0x074dd8,4,
 0x074e00,6,
+0x074e20,6,
+0x074e40,3,
 0x075000,3,
 0x075010,2,
 0x075020,3,
 0x078000,20,
 0x078054,9,
 0x07807c,3,
-0x07808c,2,
-0x078098,4,
+0x07808c,7,
 0x078100,5,
 0x078118,4,
 0x078130,2,
 0x078204,2,
 0x078244,15,
 0x078284,2,
-0x0782c4,22,
+0x0782c4,17,
+0x07830c,4,
 0x078320,2,
 0x078340,2,
 0x078360,2,
 0x078804,18,
 0x078850,4,
 0x078884,1,
-0x07889c,1,
-0x0788ac,21,
+0x07889c,8,
+0x0788c0,16,
+0x079000,9,
+0x079040,16,
 0x079804,2,
 0x079828,6,
 0x079844,2,
 0x079868,6,
 0x079884,2,
 0x0798a8,7,
-0x0798d0,8,
+0x0798d0,7,
 0x079904,1,
 0x07990c,1,
 0x079914,1,
 0x079cfc,4,
 0x079d10,2,
 0x079d24,1,
-0x079d2c,2,
+0x079d2c,1,
 0x079d80,2,
 0x079d8c,1,
 0x079f00,6,
 0x079f60,6,
 0x079fa0,3,
 0x079fb0,1,
-0x079fc0,3,
-0x079fe0,11,
+0x07a000,3,
 0x07a010,3,
 0x07a020,3,
 0x07a040,9,
 0x07a930,5,
 0x07a950,5,
 0x07a970,5,
-0x07a990,1,
 0x07a9a4,3,
 0x07aa78,34,
 0x07ab3c,18,
 0x080340,14,
 0x08037c,3,
 0x08038c,1,
+0x0803c0,2,
+0x0803e4,3,
+0x0803f4,3,
 0x080404,6,
 0x080804,2,
 0x080874,35,
 0x081000,129,
 0x081210,4,
-0x081224,4,
-0x081240,3,
+0x081228,3,
+0x081240,2,
 0x081264,2,
 0x081274,3,
 0x081284,2,
 0x081298,2,
-0x081300,2,
+0x0812a4,1,
+0x0812b4,21,
 0x081310,8,
 0x081344,1,
 0x08134c,1,
 0x081384,2,
 0x081390,4,
 0x081404,2,
-0x081474,35,
+0x081478,34,
 0x081504,2,
-0x081518,12,
+0x081518,13,
+0x081580,5,
+0x081598,2,
+0x0815a4,8,
 0x082000,29,
 0x082340,14,
 0x08237c,3,
 0x08238c,1,
+0x0823c0,2,
+0x0823e4,3,
+0x0823f4,3,
 0x082404,1,
 0x08240c,4,
 0x082804,2,
 0x082904,2,
 0x082974,35,
 0x083000,129,
-0x083210,7,
+0x083210,6,
 0x083244,2,
 0x083254,7,
 0x083284,1,
 0x08328c,1,
 0x083294,1,
+0x0832a4,1,
+0x0832b4,19,
 0x083304,2,
 0x083310,4,
 0x083324,2,
 0x084340,14,
 0x08437c,3,
 0x08438c,1,
+0x0843c0,2,
+0x0843e4,3,
+0x0843f4,3,
 0x084404,1,
 0x08440c,4,
 0x084804,2,
 0x085210,7,
 0x085240,12,
 0x085280,2,
+0x0852a4,1,
+0x0852b4,3,
 0x085304,1,
 0x08530c,1,
 0x085314,1,
 0x085378,2,
 0x085384,2,
 0x085398,2,
-0x085400,7,
+0x0853c0,23,
 0x086000,2,
 0x086020,2,
 0x086040,1,
 0x0868a0,6,
 0x0868c0,6,
 0x0868e0,6,
-0x086980,3,
-0x0869a0,9,
-0x0869c8,1,
-0x0869d0,3,
+0x086900,9,
+0x086940,25,
+0x0869c0,16,
 0x087000,26,
 0x087100,1,
 0x087108,1,
 0x087178,1,
 0x087180,10,
 0x0871b0,9,
+0x087200,1,
+0x087208,1,
+0x087210,3,
 0x090000,17,
 0x090060,2,
 0x09006c,1,
 0x090104,1,
-0x090110,12,
-0x090180,9,
+0x090140,25,
 0x0901a8,2,
 0x0901c0,9,
 0x0901e8,2,
 0x090448,1,
 0x090500,6,
 0x090520,2,
-0x090540,1,
 0x090564,2,
 0x090578,3,
 0x091004,3,
 0x0931c0,1,
 0x093200,3,
 0x093404,1,
-0x093410,12,
+0x093440,16,
 0x093504,1,
 0x09353c,28,
 0x0935b0,2,
 0x0935c0,3,
-0x094040,3,
-0x094080,3,
-0x0940a0,9,
+0x094000,9,
+0x094040,19,
+0x0940a0,6,
+0x0940c0,1,
 0x094800,1,
-0x094818,1,
-0x094834,1,
-0x094904,3,
-0x094934,1,
-0x09494c,1,
-0x094970,2,
+0x094828,1,
+0x094850,1,
+0x094878,1,
+0x0948a0,8,
+0x0949ac,1,
+0x0949d8,4,
 0x094a00,6,
+0x094a20,6,
+0x094a40,3,
 0x096000,1,
 0x096010,4,
-0x096024,4,
+0x096028,3,
 0x096104,1,
-0x09610c,5,
+0x09610c,7,
 0x096204,1,
 0x09620c,4,
 0x096488,1,
 0x096498,3,
-0x0964b0,6,
+0x0964b0,4,
 0x096504,1,
 0x09650c,4,
-0x096584,3,
+0x096584,4,
 0x096600,16,
 0x096644,2,
-0x096658,3,
+0x096658,10,
 0x096684,2,
 0x0966bc,51,
 0x096800,11,
 0x0968a0,12,
 0x097100,6,
 0x097120,1,
-0x0a0000,1,
-0x0a0008,3,
-0x0a0018,4,
-0x0a0030,2,
-0x0a003c,1,
-0x0a0080,1,
-0x0a0090,1,
-0x0a0804,1,
-0x0a080c,4,
-0x0a0c00,2,
-0x0a0c0c,5,
-0x0a0c40,1,
-0x0a0c50,4,
-0x0a0c70,1,
-0x0a0c80,1,
-0x0a0ca0,21,
+0x0a0000,10,
+0x0a0030,4,
+0x0a0080,6,
+0x0a00a0,8,
+0x0a0400,10,
+0x0a0460,4,
+0x0a0480,6,
+0x0a04a0,6,
+0x0a0800,14,
+0x0a0840,6,
+0x0a0860,18,
+0x0a0c00,30,
+0x0a0c80,2,
 0x0a1004,1,
 0x0a100c,4,
-0x0a1400,2,
-0x0a140c,2,
-0x0a1440,1,
-0x0a1450,4,
-0x0a1470,1,
-0x0a1480,4,
-0x0a14f0,1,
-0x0a1804,1,
-0x0a180c,4,
-0x0a1a00,9,
-0x0a1a30,2,
-0x0a1a3c,2,
-0x0a1a48,4,
-0x0a1c00,32,
-0x0a1c84,1,
-0x0a1d04,1,
-0x0a1d18,26,
-0x0a2000,32,
-0x0a2100,3,
-0x0a2110,6,
-0x0a212c,4,
-0x0a2140,1,
-0x0a2200,1,
-0x0a2304,1,
-0x0a231c,9,
+0x0a1044,2,
+0x0a1054,4,
+0x0a1084,1,
+0x0a108c,4,
+0x0a10c4,2,
+0x0a10d4,4,
+0x0a1104,1,
+0x0a1140,16,
+0x0a1184,1,
+0x0a118c,4,
+0x0a11c4,1,
+0x0a11d0,12,
+0x0a1204,1,
+0x0a1210,12,
+0x0a1244,1,
+0x0a1250,12,
+0x0a1284,1,
+0x0a1290,12,
+0x0a12c4,1,
+0x0a12cc,5,
+0x0a12e4,1,
+0x0a12ec,5,
+0x0a1304,1,
+0x0a130c,5,
+0x0a1324,1,
+0x0a132c,5,
+0x0a1344,1,
+0x0a134c,5,
+0x0a1364,1,
+0x0a136c,5,
+0x0a1384,1,
+0x0a138c,5,
+0x0a13a4,1,
+0x0a13ac,5,
+0x0a13c4,7,
+0x0a13e4,1,
+0x0a13ec,1,
+0x0a13f4,1,
+0x0a13fc,25,
+0x0a2004,1,
+0x0a200c,4,
+0x0a2400,2,
+0x0a240c,6,
+0x0a2440,1,
+0x0a2450,4,
+0x0a2468,3,
+0x0a2480,1,
+0x0a24a0,10,
+0x0a24d0,9,
 0x0a2804,1,
 0x0a280c,4,
-0x0a2c04,2,
-0x0a2c10,2,
-0x0a2c1c,2,
-0x0a2c28,3,
-0x0a2c38,14,
-0x0a2c78,9,
-0x0a2d04,2,
-0x0a2d40,20,
-0x0a2da4,1,
-0x0a2dac,1,
-0x0a2db4,1,
-0x0a2dc0,1,
-0x0a4000,14,
-0x0a5000,2,
-0x0a5018,2,
-0x0a5034,2,
-0x0a5104,6,
-0x0a5134,2,
-0x0a514c,1,
-0x0a5170,3,
-0x0a5200,6,
-0x0a5220,6,
-0x0a52c0,2,
-0x0a6000,3,
-0x0a6020,6,
-0x0a6040,6,
-0x0a6060,6,
-0x0a6080,6,
-0x0a7000,2,
-0x0a7040,3,
-0x0a7060,10,
+0x0a2c00,2,
+0x0a2c0c,2,
+0x0a2c40,1,
+0x0a2c50,4,
+0x0a2c68,3,
+0x0a2c88,2,
+0x0a2cf0,1,
+0x0a3004,1,
+0x0a300c,4,
+0x0a3040,2,
+0x0a3064,3,
+0x0a3074,4,
+0x0a3200,9,
+0x0a3230,2,
+0x0a323c,2,
+0x0a3248,4,
+0x0a3400,1,
+0x0a3408,3,
+0x0a3418,4,
+0x0a3430,2,
+0x0a343c,1,
+0x0a3480,1,
+0x0a3490,1,
+0x0a3504,1,
+0x0a3510,76,
+0x0a4000,32,
+0x0a4100,3,
+0x0a4110,6,
+0x0a412c,4,
+0x0a4140,1,
+0x0a4304,1,
+0x0a4318,10,
+0x0a4804,1,
+0x0a480c,4,
+0x0a4c04,2,
+0x0a4c10,2,
+0x0a4c1c,6,
+0x0a4c38,2,
+0x0a4c50,8,
+0x0a4c78,19,
+0x0a4d04,2,
+0x0a4d40,20,
+0x0a4da4,1,
+0x0a4dac,1,
+0x0a4db4,1,
+0x0a4dc0,1,
+0x0a5000,14,
+0x0a6000,2,
+0x0a6028,2,
+0x0a6050,2,
+0x0a6078,2,
+0x0a60a0,36,
+0x0a61ac,1,
+0x0a61d8,4,
+0x0a6200,6,
+0x0a6220,6,
+0x0a6240,6,
+0x0a6260,6,
+0x0a6280,3,
+0x0a6400,3,
+0x0a6420,6,
+0x0a6440,6,
+0x0a6460,6,
+0x0a6480,6,
+0x0a6500,9,
+0x0a6540,18,
+0x0a65c0,3,
 0x0a8000,10,
 0x0a802c,15,
 0x0a806c,5,
 0x0a8434,6,
 0x0a8450,2,
 0x0a845c,5,
-0x0a8480,1,
 0x0a84c4,1,
 0x0a84cc,4,
 0x0a8604,1,
 0x0a9100,10,
 0x0a91f4,3,
 0x0a920c,35,
-0x0a92a8,6,
+0x0a92a4,7,
 0x0a930c,39,
 0x0a940c,35,
 0x0a949c,9,
 0x0a9f20,6,
 0x0a9f40,6,
 0x0a9f60,6,
-0x0a9f80,3,
-0x0a9fa0,23,
-0x0aa004,1,
-0x0aa00c,4,
+0x0a9f80,9,
+0x0a9fc0,31,
+0x0aa204,1,
+0x0aa20c,4,
 0x0b0000,2,
 0x0b0010,4,
-0x0b1000,5,
-0x0b1020,10,
+0x0b1000,15,
+0x0b1040,10,
 0x0b1080,20,
 0x0b1100,2,
 0x0b1110,2,
 0x0b1700,8,
 0x0b1760,2,
 0x0b176c,1,
-0x0b1780,8,
+0x0b1780,3,
+0x0b1790,3,
 0x0b17e0,2,
 0x0b17ec,1,
-0x0b1800,3,
-0x0b1820,8,
-0x0b2000,3,
-0x0b2010,8,
-0x0b2080,3,
-0x0b20a0,8,
-0x0b2100,3,
-0x0b2110,8,
-0x0b2180,3,
-0x0b21a0,8,
-0x0b2200,3,
-0x0b2210,8,
-0x0b2280,3,
-0x0b22a0,8,
-0x0b2300,3,
-0x0b2310,8,
-0x0b2380,3,
-0x0b23a0,8,
-0x0b2400,3,
-0x0b2410,8,
-0x0b2480,3,
-0x0b24a0,8,
-0x0b2500,3,
-0x0b2510,8,
-0x0b2580,3,
-0x0b25a0,8,
-0x0b2600,3,
-0x0b2610,8,
-0x0b2680,3,
-0x0b26a0,8,
-0x0b2700,3,
-0x0b2710,8,
-0x0b2780,3,
-0x0b27a0,8,
+0x0b1800,9,
+0x0b1840,16,
+0x0b2000,2,
+0x0b2010,12,
+0x0b2080,9,
+0x0b20c0,18,
+0x0b2110,12,
+0x0b2180,9,
+0x0b21c0,18,
+0x0b2210,12,
+0x0b2280,9,
+0x0b22c0,18,
+0x0b2310,12,
+0x0b2380,9,
+0x0b23c0,18,
+0x0b2410,12,
+0x0b2480,9,
+0x0b24c0,18,
+0x0b2510,12,
+0x0b2580,9,
+0x0b25c0,18,
+0x0b2610,12,
+0x0b2680,9,
+0x0b26c0,18,
+0x0b2710,12,
+0x0b2780,9,
+0x0b27c0,16,
 0x0b2900,1,
 0x0b2910,1,
-0x0b3000,38,
-0x0b3100,3,
-0x0b3120,13,
-0x0b3160,4,
-0x0b3184,5,
-0x0b3200,1,
-0x0b3220,12,
+0x0b3000,151,
 0x0b3404,1,
 0x0b340c,4,
-0x0b3800,64,
-0x0b4004,1,
-0x0b4010,12,
-0x0b4100,3,
-0x0b4120,8,
-0x0b5000,1,
-0x0b5018,1,
-0x0b5034,1,
-0x0b5104,2,
-0x0b5134,1,
-0x0b514c,1,
-0x0b5170,2,
+0x0b3800,73,
+0x0b3940,20,
+0x0b39a0,4,
+0x0b39c4,5,
+0x0b3a00,1,
+0x0b3a20,8,
+0x0b3a44,3,
+0x0b4000,7,
+0x0b4040,12,
+0x0b4100,9,
+0x0b4140,16,
+0x0b5000,2,
+0x0b5028,2,
+0x0b5050,2,
+0x0b5078,2,
+0x0b50a0,5,
+0x0b51ac,1,
+0x0b51d8,4,
 0x0b5200,6,
+0x0b5220,6,
+0x0b5240,6,
+0x0b5260,6,
+0x0b5280,3,
 0x0b6800,3,
 0x0b6820,6,
 0x0b6840,6,
 0x0b68c0,6,
 0x0b68e0,6,
 0x0b6900,6,
-0x0c0000,4,
-0x0c0058,2,
-0x0c0064,1,
-0x0c0120,2,
-0x0c0130,2,
-0x0c0140,1,
-0x0c0184,11,
-0x0c01c4,3,
-0x0c01dc,3,
-0x0c0280,13,
-0x0c02c0,3,
-0x0c0400,16,
-0x0c0500,3,
-0x0c0804,1,
-0x0c080c,4,
-0x0c0a7c,1,
-0x0c0ae8,6,
-0x0c0b20,24,
-0x0c0ba0,28,
-0x0c0c80,20,
-0x0c0d00,3,
-0x0c0d20,6,
-0x0c0d80,4,
-0x0c0da0,1,
-0x0c0da8,12,
-0x0c0e00,17,
-0x0c0e80,4,
-0x0c0ec0,6,
-0x0c0ee0,6,
-0x0c1000,32,
-0x0c1084,5,
-0x0c10f8,3,
-0x0c1108,3,
-0x0c1118,7,
-0x0c1144,2,
-0x0c1160,11,
-0x0c1200,13,
-0x0c1244,2,
-0x0c1268,6,
-0x0c12a0,1,
-0x0c12c8,6,
-0x0c12e8,6,
-0x0c1310,1,
-0x0c1340,4,
-0x0c13e8,8,
-0x0c140c,14,
-0x0c147c,1,
-0x0c1700,2,
-0x0c1720,8,
-0x0c1800,3,
-0x0c1810,3,
-0x0c1820,3,
-0x0c1830,3,
-0x0c1840,3,
-0x0c1850,3,
-0x0c1860,3,
-0x0c1870,3,
-0x0c1880,3,
-0x0c1890,3,
-0x0c18a0,3,
-0x0c18b0,3,
-0x0c18c0,3,
-0x0c18d0,3,
-0x0c18e0,3,
-0x0c18f0,3,
-0x0c1900,68,
-0x0c1c00,34,
-0x0c1d00,3,
-0x0c1d40,4,
-0x0c1d84,1,
-0x0c1d90,4,
-0x0c1e00,3,
-0x0c1e20,6,
-0x0c1e40,6,
-0x0c1e60,6,
-0x0c1f80,3,
-0x0c1fa0,8,
-0x0c2000,1,
-0x0c2018,1,
-0x0c2034,1,
-0x0c2104,1,
-0x0c2134,1,
-0x0c214c,1,
-0x0c2170,2,
-0x0c2200,6,
-0x0c2400,36,
-0x0c24a0,8,
-0x0c2500,1,
-0x0c2584,7,
-0x0c2604,1,
-0x0c26f0,70,
-0x0c8000,25,
-0x0c8068,4,
-0x0c807c,4,
-0x0c80a0,3,
-0x0c80b0,2,
-0x0c80c8,6,
-0x0c8180,6,
-0x0c81a0,6,
-0x0c9000,1,
-0x0c9018,1,
-0x0c9034,1,
-0x0c9104,1,
-0x0c9134,1,
-0x0c914c,1,
-0x0c9170,2,
-0x0c9200,6,
-0x0c9400,3,
-0x0c9500,3,
-0x0c9520,10,
-0x0ca000,3,
-0x0ca010,36,
-0x0ca0a4,2,
-0x0ca0b0,2,
-0x0ca0c0,14,
-0x0ca100,14,
-0x0ca140,5,
-0x0ca160,4,
-0x0ca180,13,
-0x0ca1b8,11,
-0x0ca1e8,3,
-0x0ca1f8,8,
-0x0ca220,6,
-0x0ca240,6,
-0x0ca260,6,
-0x0ca280,6,
-0x0ca2a0,6,
-0x0ca2c0,6,
-0x0ca2e0,6,
-0x0ca300,6,
-0x0ca320,6,
-0x0ca340,6,
-0x0ca360,6,
-0x0ca400,6,
-0x0ca420,6,
-0x0ca440,6,
-0x0ca460,6,
-0x0ca480,6,
-0x0ca4a0,6,
-0x0ca4c0,6,
-0x0ca4e0,6,
-0x0ca500,6,
-0x0ca520,6,
-0x0ca540,6,
-0x0ca560,6,
-0x0ca580,6,
-0x0ca5a0,6,
-0x0ca5c0,6,
-0x0ca5e0,6,
-0x0ca6fc,1,
-0x0ca704,1,
-0x0ca72c,17,
-0x0ca780,16,
-0x0ca800,8,
-0x0ca824,5,
-0x0ca840,8,
-0x0ca864,5,
-0x0ca880,8,
-0x0ca8a4,5,
-0x0ca8c0,8,
-0x0ca8e4,5,
-0x0ca900,8,
-0x0ca924,5,
-0x0ca940,8,
-0x0ca964,5,
-0x0ca980,8,
-0x0ca9a4,5,
-0x0ca9c0,8,
-0x0ca9e4,5,
-0x0caa00,8,
-0x0caa24,5,
-0x0caa40,8,
-0x0caa64,5,
-0x0caa80,8,
-0x0caaa4,5,
-0x0caac0,8,
-0x0caae4,5,
-0x0cab00,8,
-0x0cab24,5,
-0x0cab40,8,
-0x0cab64,5,
-0x0cab80,8,
-0x0caba4,5,
-0x0cabc0,8,
-0x0cabe4,5,
-0x0cac04,6,
-0x0cac20,2,
-0x0cac30,2,
-0x0cac40,2,
-0x0cac50,2,
-0x0cb000,16,
-0x0cb044,1,
-0x0cb04c,1,
-0x0cb100,16,
-0x0cb1f0,6,
-0x0cb210,3,
-0x0cb220,2,
-0x0cb230,3,
-0x0cb240,2,
-0x0cb250,3,
-0x0cb260,2,
-0x0cb270,3,
-0x0cb280,2,
-0x0cb290,3,
-0x0cb2a0,2,
-0x0cb2b0,3,
-0x0cb2c0,2,
-0x0cb2d0,3,
-0x0cb2e0,2,
-0x0cb2f0,3,
-0x0cb300,2,
-0x0cb310,3,
-0x0cb320,2,
-0x0cb330,3,
-0x0cb340,2,
-0x0cb350,3,
-0x0cb360,2,
-0x0cb370,3,
-0x0cb380,2,
-0x0cb390,3,
-0x0cb3a0,2,
-0x0cb3b0,3,
-0x0cb3c0,2,
-0x0cb3d0,3,
-0x0cb3e0,2,
-0x0cb3f0,3,
-0x0cb400,17,
-0x0cb59c,25,
-0x0cb700,11,
-0x0cb74c,2,
-0x0cb760,24,
-0x0cb800,19,
-0x0cb850,16,
-0x0cb89c,1,
-0x0cb8b0,9,
-0x0cb8e0,1,
-0x0cb8f0,3,
-0x0cb900,17,
-0x0cb958,1,
-0x0cb980,1,
-0x0cb994,2,
-0x0cb9ac,11,
-0x0cb9ec,4,
-0x0cba00,19,
-0x0cba50,16,
-0x0cba9c,1,
-0x0cbab0,9,
-0x0cbae0,1,
-0x0cbaf0,3,
-0x0cbb00,17,
-0x0cbb58,1,
-0x0cbb80,1,
-0x0cbb94,2,
-0x0cbbac,11,
-0x0cbbec,4,
-0x0cbc00,19,
-0x0cbc50,16,
-0x0cbc9c,1,
-0x0cbcb0,9,
-0x0cbce0,1,
-0x0cbcf0,3,
-0x0cbd00,17,
-0x0cbd58,1,
-0x0cbd80,1,
-0x0cbd94,2,
-0x0cbdac,11,
-0x0cbdec,4,
-0x0cbe00,19,
-0x0cbe50,16,
-0x0cbe9c,1,
-0x0cbeb0,9,
-0x0cbee0,1,
-0x0cbef0,3,
-0x0cbf00,17,
-0x0cbf58,1,
-0x0cbf80,1,
-0x0cbf94,2,
-0x0cbfac,11,
-0x0cbfec,4,
-0x0d0000,7,
-0x0d002c,18,
+0x0d0000,5,
+0x0d002c,1,
+0x0d0038,4,
+0x0d0054,1,
+0x0d0070,1,
+0x0d0080,3,
+0x0d00a0,6,
+0x0d00c0,6,
+0x0d0100,3,
+0x0d0120,6,
+0x0d0140,6,
+0x0d0180,8,
 0x0d1000,2,
 0x0d100c,1,
 0x0d1020,13,
 0x0d1058,1,
 0x0d1060,6,
 0x0d1080,1,
-0x0d10a0,6,
 0x0d1100,2,
 0x0d110c,1,
 0x0d1120,13,
 0x0d1158,1,
 0x0d1160,6,
 0x0d1180,1,
-0x0d11a0,6,
 0x0d1200,2,
 0x0d120c,1,
 0x0d1220,13,
 0x0d1258,1,
 0x0d1260,6,
 0x0d1280,1,
-0x0d12a0,6,
 0x0d1300,2,
 0x0d130c,1,
 0x0d1320,13,
 0x0d1358,1,
 0x0d1360,6,
 0x0d1380,1,
-0x0d13a0,6,
 0x0d1400,14,
 0x0d1440,1,
 0x0d1448,1,
 0x0d1450,6,
-0x0d1480,6,
+0x0d1480,7,
+0x0d14a0,4,
 0x0d1500,26,
+0x0d1580,14,
+0x0d15c0,2,
 0x0d1600,4,
 0x0d1620,6,
 0x0d1640,3,
 0x0d1660,6,
-0x0d1800,5,
-0x0d1820,3,
-0x0d1830,3,
-0x0d1840,3,
+0x0d1700,2,
+0x0d170c,1,
+0x0d1720,6,
+0x0d1800,11,
+0x0d1830,7,
+0x0d1850,5,
+0x0d1870,9,
+0x0d18a0,2,
 0x0d1a00,1,
 0x0d1a08,13,
-0x0d1a40,9,
+0x0d1a40,11,
 0x0d1c00,24,
-0x0d1c64,1,
-0x0d1c80,6,
-0x0d1ca0,3,
-0x0d1cb0,2,
-0x0d1d00,6,
-0x0d1d40,13,
-0x0d1d80,8,
+0x0d1c64,5,
+0x0d1c80,3,
+0x0d1c90,2,
+0x0d1d00,12,
+0x0d1d40,16,
+0x0d1d90,4,
+0x0d1dc0,12,
+0x0d1e00,1,
+0x0d1e20,1,
+0x0d1e28,10,
+0x0d1e5c,7,
+0x0d1f00,12,
 0x0d2000,2,
 0x0d200c,1,
 0x0d2020,13,
 0x0d2058,1,
 0x0d2060,6,
 0x0d2080,1,
-0x0d20a0,6,
 0x0d2100,2,
 0x0d210c,1,
 0x0d2120,13,
 0x0d2158,1,
 0x0d2160,6,
 0x0d2180,1,
-0x0d21a0,6,
 0x0d2200,2,
 0x0d220c,1,
 0x0d2220,13,
 0x0d2258,1,
 0x0d2260,6,
 0x0d2280,1,
-0x0d22a0,6,
 0x0d2300,2,
 0x0d230c,1,
 0x0d2320,13,
 0x0d2358,1,
 0x0d2360,6,
 0x0d2380,1,
-0x0d23a0,6,
 0x0d2400,14,
 0x0d2440,1,
 0x0d2448,1,
 0x0d2450,6,
-0x0d2480,6,
+0x0d2480,7,
+0x0d24a0,4,
 0x0d2500,26,
+0x0d2580,14,
+0x0d25c0,2,
 0x0d2600,4,
 0x0d2620,6,
 0x0d2640,3,
 0x0d2660,6,
-0x0d2800,5,
-0x0d2820,3,
-0x0d2830,3,
-0x0d2840,3,
+0x0d2700,2,
+0x0d270c,1,
+0x0d2720,6,
+0x0d2800,11,
+0x0d2830,7,
+0x0d2850,5,
+0x0d2870,9,
+0x0d28a0,2,
 0x0d2a00,1,
 0x0d2a08,13,
-0x0d2a40,9,
+0x0d2a40,11,
 0x0d2c00,24,
-0x0d2c64,1,
-0x0d2c80,6,
-0x0d2ca0,3,
-0x0d2cb0,2,
-0x0d2d00,6,
-0x0d2d40,13,
-0x0d2d80,8,
-0x0d3000,8,
-0x0d3024,5,
-0x0d3040,8,
-0x0d3064,5,
-0x0d3080,8,
-0x0d30a4,5,
-0x0d30c0,8,
-0x0d30e4,5,
-0x0d3100,8,
-0x0d3124,5,
-0x0d3140,8,
-0x0d3164,5,
-0x0d3180,8,
-0x0d31a4,5,
-0x0d31c0,8,
-0x0d31e4,5,
-0x0d3204,5,
-0x0d3220,2,
-0x0d3230,2,
-0x0d3240,2,
+0x0d2c64,5,
+0x0d2c80,3,
+0x0d2c90,2,
+0x0d2d00,12,
+0x0d2d40,16,
+0x0d2d90,4,
+0x0d2dc0,12,
+0x0d2e00,1,
+0x0d2e20,1,
+0x0d2e28,10,
+0x0d2e5c,7,
+0x0d2f00,12,
 0x0d3400,1,
-0x0d3418,1,
-0x0d3434,1,
-0x0d3504,1,
-0x0d3534,1,
-0x0d354c,1,
-0x0d3570,2,
+0x0d3428,1,
+0x0d3450,1,
+0x0d3478,1,
+0x0d34a0,5,
+0x0d35ac,1,
+0x0d35d8,4,
 0x0d3600,6,
-0x0d3800,19,
-0x0d3850,16,
-0x0d389c,1,
-0x0d38b0,9,
-0x0d38e0,1,
-0x0d38f0,3,
-0x0d3900,17,
-0x0d3958,1,
-0x0d3980,1,
-0x0d3994,2,
-0x0d39ac,11,
-0x0d39ec,4,
-0x0d3a00,19,
-0x0d3a50,16,
-0x0d3a9c,1,
-0x0d3ab0,9,
-0x0d3ae0,1,
-0x0d3af0,3,
-0x0d3b00,17,
-0x0d3b58,1,
-0x0d3b80,1,
-0x0d3b94,2,
-0x0d3bac,11,
-0x0d3bec,4,
-0x0d3c00,11,
-0x0d3c4c,2,
-0x0d3c60,40,
-0x0d3d04,1,
-0x0d3d2c,17,
-0x0d3d80,16,
-0x0d3e00,6,
+0x0d3620,6,
+0x0d3640,3,
+0x0d3e00,3,
 0x0d3e20,6,
-0x0d3e40,3,
-0x0d3e50,1,
+0x0d3e40,6,
+0x0d3e80,3,
+0x0d3e90,1,
+0x0d4000,29,
+0x0d4078,5,
+0x0d4090,2,
+0x0d40a0,10,
+0x0d4100,93,
+0x0d4278,5,
+0x0d4290,2,
+0x0d42a0,10,
+0x0d4300,93,
+0x0d4478,5,
+0x0d4490,2,
+0x0d44a0,10,
+0x0d4500,93,
+0x0d4678,5,
+0x0d4690,2,
+0x0d46a0,10,
+0x0d4700,94,
+0x0d487c,1,
+0x0d4a00,8,
+0x0d4a24,15,
+0x0d4a64,23,
+0x0d4ac4,6,
+0x0d4b00,4,
+0x0d4b20,3,
+0x0d4c00,2,
+0x0d4c40,14,
+0x0d4c80,9,
+0x0d4d00,9,
+0x0d4d2c,1,
+0x0d4d80,9,
+0x0d4e00,2,
+0x0d4e0c,1,
+0x0d4e14,5,
+0x0d4e2c,1,
+0x0d4e34,5,
+0x0d4e4c,1,
+0x0d4e54,5,
+0x0d4e6c,1,
+0x0d4e74,5,
+0x0d4e8c,1,
+0x0d4e94,5,
+0x0d4eac,1,
+0x0d4eb4,3,
+0x0d5000,29,
+0x0d5078,5,
+0x0d5090,2,
+0x0d50a0,10,
+0x0d5100,93,
+0x0d5278,5,
+0x0d5290,2,
+0x0d52a0,10,
+0x0d5300,93,
+0x0d5478,5,
+0x0d5490,2,
+0x0d54a0,10,
+0x0d5500,93,
+0x0d5678,5,
+0x0d5690,2,
+0x0d56a0,10,
+0x0d5700,94,
+0x0d587c,1,
+0x0d5a00,8,
+0x0d5a24,15,
+0x0d5a64,23,
+0x0d5ac4,6,
+0x0d5b00,4,
+0x0d5b20,3,
+0x0d5c00,2,
+0x0d5c40,14,
+0x0d5c80,9,
+0x0d5d00,9,
+0x0d5d2c,1,
+0x0d5d80,9,
+0x0d5e00,2,
+0x0d5e0c,1,
+0x0d5e14,5,
+0x0d5e2c,1,
+0x0d5e34,5,
+0x0d5e4c,1,
+0x0d5e54,5,
+0x0d5e6c,1,
+0x0d5e74,5,
+0x0d5e8c,1,
+0x0d5e94,5,
+0x0d5eac,1,
+0x0d5eb4,3,
+0x0d6000,14,
+0x0d6070,3,
+0x0d6080,6,
+0x0d6100,9,
+0x0d6204,8,
+0x0d6240,13,
+0x0d6280,16,
+0x0d6400,8,
+0x0d6424,15,
+0x0d6464,15,
+0x0d64a4,15,
+0x0d64e4,23,
+0x0d6544,6,
+0x0d6580,10,
+0x0d65ac,1,
+0x0d65b4,5,
+0x0d65cc,1,
+0x0d65d4,5,
+0x0d65ec,1,
+0x0d65f4,13,
+0x0d6680,7,
+0x0d66a0,5,
+0x0d66c0,5,
+0x0d66e0,4,
+0x0d6800,19,
+0x0d6850,10,
+0x0d6880,19,
+0x0d68d0,10,
+0x0d6900,19,
+0x0d6950,10,
+0x0d6980,19,
+0x0d69d0,10,
+0x0d6a00,19,
+0x0d6a50,10,
+0x0d6a80,19,
+0x0d6ad0,10,
+0x0d6b00,19,
+0x0d6b50,10,
+0x0d6b80,19,
+0x0d6bd0,10,
+0x0d6c00,19,
+0x0d6c50,10,
+0x0d6c84,1,
+0x0d6c94,8,
+0x0d6cb8,9,
+0x0d6ce0,4,
 0x0d8000,6,
 0x0d8020,3,
 0x0d8030,3,
 0x0d8040,6,
-0x0d8060,4,
-0x0d8080,6,
-0x0d8100,28,
+0x0d8060,17,
+0x0d80c0,38,
+0x0d8180,1,
 0x0d8400,2,
-0x0d8418,2,
-0x0d8434,2,
-0x0d8504,4,
-0x0d8534,2,
-0x0d854c,1,
-0x0d8570,2,
+0x0d8428,2,
+0x0d8450,2,
+0x0d8478,2,
+0x0d84a0,16,
+0x0d85ac,1,
+0x0d85d8,4,
 0x0d8600,6,
 0x0d8620,6,
-0x0d8800,1,
-0x0d8820,13,
-0x0d8858,8,
-0x0d8900,12,
-0x0d8984,1,
-0x0d89bc,18,
-0x0d8a20,13,
-0x0d8a58,8,
-0x0d8b00,12,
-0x0d8b84,1,
-0x0d8bbc,17,
-0x0d9000,6,
-0x0d9020,6,
-0x0d9048,3,
-0x0d9080,6,
-0x0d909c,1,
-0x0d90a4,2,
-0x0d90b8,3,
-0x0d9100,5,
-0x0d9120,5,
-0x0d9190,10,
-0x0d9200,12,
-0x0d9234,15,
-0x0d9280,26,
-0x0d9300,2,
-0x0d9320,1,
-0x0d9404,4,
-0x0d9418,16,
-0x0d9460,3,
-0x0d9600,7,
-0x0d9644,9,
-0x0d9680,6,
-0x0d96a0,2,
-0x0d9800,6,
-0x0d9820,6,
-0x0d9848,3,
-0x0d9880,6,
-0x0d989c,1,
-0x0d98a4,2,
-0x0d98b8,3,
-0x0d9900,5,
-0x0d9920,5,
-0x0d9990,10,
-0x0d9a00,12,
-0x0d9a34,15,
-0x0d9a80,26,
-0x0d9b00,2,
-0x0d9b20,1,
-0x0d9c04,4,
-0x0d9c18,16,
-0x0d9c60,3,
-0x0d9e00,7,
-0x0d9e44,9,
-0x0d9e80,6,
-0x0d9ea0,2,
-0x0db000,4,
-0x0db018,18,
-0x0db100,4,
-0x0db118,18,
-0x0db200,8,
-0x0db300,6,
-0x0db320,5,
-0x0db340,6,
-0x0db360,5,
-0x0db380,6,
-0x0db400,3,
-0x0db420,8,
-0x0db500,10,
-0x0db544,2,
-0x0db55c,9,
-0x0db584,7,
-0x0db5a4,2,
-0x0db5b8,3,
-0x0db600,2,
-0x0dbfc4,13,
-0x0dc000,366,
-0x0dc800,366,
+0x0d8640,6,
+0x0d8660,6,
+0x0d8680,3,
+0x0d8800,2,
+0x0d9000,35,
+0x0d9100,26,
+0x0d916c,4,
+0x0d9180,2,
+0x0d91a0,1,
+0x0d91c0,9,
+0x0d91e8,1,
+0x0d9200,6,
+0x0d9220,6,
+0x0d9248,3,
+0x0d9280,6,
+0x0d929c,1,
+0x0d92a4,2,
+0x0d92b8,9,
+0x0d9304,4,
+0x0d9328,3,
+0x0d9340,6,
+0x0d9400,1,
+0x0d9410,2,
+0x0d9424,2,
+0x0d9434,1,
+0x0d9444,1,
+0x0d9480,27,
+0x0d9500,6,
+0x0d9520,12,
+0x0d9700,7,
+0x0d9744,9,
+0x0d976c,2,
+0x0d9780,6,
+0x0d97a0,2,
+0x0d9800,35,
+0x0d9900,26,
+0x0d996c,4,
+0x0d9980,2,
+0x0d99a0,1,
+0x0d99c0,9,
+0x0d99e8,1,
+0x0d9a00,6,
+0x0d9a20,6,
+0x0d9a48,3,
+0x0d9a80,6,
+0x0d9a9c,1,
+0x0d9aa4,2,
+0x0d9ab8,9,
+0x0d9b04,4,
+0x0d9b28,3,
+0x0d9b40,6,
+0x0d9c00,1,
+0x0d9c10,2,
+0x0d9c24,2,
+0x0d9c34,1,
+0x0d9c44,1,
+0x0d9c80,27,
+0x0d9d00,6,
+0x0d9d20,12,
+0x0d9f00,7,
+0x0d9f44,9,
+0x0d9f6c,2,
+0x0d9f80,6,
+0x0d9fa0,2,
+0x0db000,1028,
+0x0dc018,18,
+0x0dc100,4,
+0x0dc118,18,
+0x0dc200,12,
+0x0dc300,6,
+0x0dc320,5,
+0x0dc340,6,
+0x0dc360,5,
+0x0dc380,6,
+0x0dc400,9,
+0x0dc440,26,
+0x0dc4c4,1,
+0x0dc4cc,1,
+0x0dc4d4,1,
+0x0dc50c,7,
+0x0dc544,2,
+0x0dc55c,9,
+0x0dc584,7,
+0x0dc5a4,2,
+0x0dc5b8,2,
+0x0dc5c4,2,
+0x0dc5d8,2,
+0x0dc600,2,
+0x0dcfbc,15,
+0x0dd000,14,
+0x0dd040,8,
+0x0dd104,1,
+0x0dd10c,1,
+0x0dd200,8,
+0x0dd244,2,
+0x0dd268,18,
+0x0dd404,1,
+0x0dd440,40,
+0x0dd504,3,
+0x0dd514,3,
+0x0dd524,3,
+0x0dd534,3,
+0x0dd544,3,
+0x0dd554,3,
+0x0dd564,3,
+0x0dd574,3,
+0x0dd584,3,
+0x0dd594,3,
+0x0dd5a4,3,
+0x0dd5b4,3,
+0x0dd604,2,
+0x0dd640,16,
+0x0dd684,3,
+0x0dd704,2,
+0x0dd740,18,
+0x0ddc00,4,
+0x0ddc80,1,
+0x0ddd00,6,
+0x0ddd20,6,
+0x0ddd40,6,
+0x0ddd80,1,
+0x0dde00,3,
+0x0dde20,10,
+0x0dde50,6,
+0x0dde80,9,
+0x0ddec0,16,
+0x0de000,123,
+0x0de200,2,
+0x0de20c,3,
+0x0de220,2,
+0x0de22c,3,
+0x0de240,2,
+0x0de24c,3,
+0x0de260,2,
+0x0de26c,3,
+0x0de280,2,
+0x0de28c,3,
+0x0de2a0,2,
+0x0de2ac,3,
+0x0de2c0,2,
+0x0de2cc,3,
+0x0de2e0,2,
+0x0de2ec,3,
+0x0de300,2,
+0x0de30c,3,
+0x0de320,2,
+0x0de32c,3,
+0x0de340,2,
+0x0de34c,3,
+0x0de360,2,
+0x0de36c,3,
+0x0de380,2,
+0x0de38c,3,
+0x0de3a0,2,
+0x0de3ac,3,
+0x0de3c0,2,
+0x0de3cc,3,
+0x0de3e0,2,
+0x0de3ec,3,
+0x0de400,123,
+0x0de600,2,
+0x0de60c,3,
+0x0de620,2,
+0x0de62c,3,
+0x0de640,2,
+0x0de64c,3,
+0x0de660,2,
+0x0de66c,3,
+0x0de680,2,
+0x0de68c,3,
+0x0de6a0,2,
+0x0de6ac,3,
+0x0de6c0,2,
+0x0de6cc,3,
+0x0de6e0,2,
+0x0de6ec,3,
+0x0de700,2,
+0x0de70c,3,
+0x0de720,2,
+0x0de72c,3,
+0x0de740,2,
+0x0de74c,3,
+0x0de760,2,
+0x0de76c,3,
+0x0de780,2,
+0x0de78c,3,
+0x0de7a0,2,
+0x0de7ac,3,
+0x0de7c0,2,
+0x0de7cc,3,
+0x0de7e0,2,
+0x0de7ec,3,
+0x0de800,123,
+0x0dea00,2,
+0x0dea0c,3,
+0x0dea20,2,
+0x0dea2c,3,
+0x0dea40,2,
+0x0dea4c,3,
+0x0dea60,2,
+0x0dea6c,3,
+0x0dea80,2,
+0x0dea8c,3,
+0x0deaa0,2,
+0x0deaac,3,
+0x0deac0,2,
+0x0deacc,3,
+0x0deae0,2,
+0x0deaec,3,
+0x0deb00,2,
+0x0deb0c,3,
+0x0deb20,2,
+0x0deb2c,3,
+0x0deb40,2,
+0x0deb4c,3,
+0x0deb60,2,
+0x0deb6c,3,
+0x0deb80,2,
+0x0deb8c,3,
+0x0deba0,2,
+0x0debac,3,
+0x0debc0,2,
+0x0debcc,3,
+0x0debe0,2,
+0x0debec,3,
+0x0dec00,123,
+0x0dee00,2,
+0x0dee0c,3,
+0x0dee20,2,
+0x0dee2c,3,
+0x0dee40,2,
+0x0dee4c,3,
+0x0dee60,2,
+0x0dee6c,3,
+0x0dee80,2,
+0x0dee8c,3,
+0x0deea0,2,
+0x0deeac,3,
+0x0deec0,2,
+0x0deecc,3,
+0x0deee0,2,
+0x0deeec,3,
+0x0def00,2,
+0x0def0c,3,
+0x0def20,2,
+0x0def2c,3,
+0x0def40,2,
+0x0def4c,3,
+0x0def60,2,
+0x0def6c,3,
+0x0def80,2,
+0x0def8c,3,
+0x0defa0,2,
+0x0defac,3,
+0x0defc0,2,
+0x0defcc,3,
+0x0defe0,2,
+0x0defec,3,
+0x0df000,123,
+0x0df200,2,
+0x0df20c,3,
+0x0df220,2,
+0x0df22c,3,
+0x0df240,2,
+0x0df24c,3,
+0x0df260,2,
+0x0df26c,3,
+0x0df280,2,
+0x0df28c,3,
+0x0df2a0,2,
+0x0df2ac,3,
+0x0df2c0,2,
+0x0df2cc,3,
+0x0df2e0,2,
+0x0df2ec,3,
+0x0df300,2,
+0x0df30c,3,
+0x0df320,2,
+0x0df32c,3,
+0x0df340,2,
+0x0df34c,3,
+0x0df360,2,
+0x0df36c,3,
+0x0df380,2,
+0x0df38c,3,
+0x0df3a0,2,
+0x0df3ac,3,
+0x0df3c0,2,
+0x0df3cc,3,
+0x0df3e0,2,
+0x0df3ec,3,
+0x0df400,2,
 0x0e0000,3,
-0x0e001c,2,
-0x0e0030,1,
+0x0e0010,2,
+0x0e001c,1,
+0x0e0024,4,
 0x0e0048,2,
 0x0e0058,2,
-0x0e0068,11,
-0x0e009c,2,
-0x0e00ac,14,
-0x0e0180,2,
+0x0e0068,31,
+0x0e00f0,1,
+0x0e00fc,35,
 0x0e01e0,1,
-0x0e01e8,3,
-0x0e01f8,1,
-0x0e0200,3,
-0x0e021c,2,
-0x0e0230,1,
-0x0e0248,2,
-0x0e0258,2,
-0x0e0268,11,
-0x0e029c,2,
-0x0e02ac,14,
-0x0e0380,2,
-0x0e03e0,1,
-0x0e03e8,3,
-0x0e03f8,1,
+0x0e01e8,5,
+0x0e0204,5,
+0x0e021c,1,
+0x0e0300,16,
 0x0e0400,3,
-0x0e041c,2,
-0x0e0430,1,
+0x0e0410,2,
+0x0e041c,1,
+0x0e0424,4,
 0x0e0448,2,
 0x0e0458,2,
-0x0e0468,11,
-0x0e049c,2,
-0x0e04ac,14,
-0x0e0580,2,
+0x0e0468,31,
+0x0e04f0,1,
+0x0e04fc,35,
 0x0e05e0,1,
-0x0e05e8,3,
-0x0e05f8,1,
-0x0e0600,3,
-0x0e061c,2,
-0x0e0630,1,
-0x0e0648,2,
-0x0e0658,2,
-0x0e0668,11,
-0x0e069c,2,
-0x0e06ac,14,
-0x0e0780,2,
-0x0e07e0,1,
-0x0e07e8,3,
-0x0e07f8,1,
+0x0e05e8,5,
+0x0e0604,5,
+0x0e061c,1,
+0x0e0700,16,
 0x0e0800,3,
-0x0e081c,2,
-0x0e0830,1,
+0x0e0810,2,
+0x0e081c,1,
+0x0e0824,4,
 0x0e0848,2,
 0x0e0858,2,
-0x0e0868,11,
-0x0e089c,2,
-0x0e08ac,14,
-0x0e0980,2,
+0x0e0868,31,
+0x0e08f0,1,
+0x0e08fc,35,
 0x0e09e0,1,
-0x0e09e8,3,
-0x0e09f8,1,
-0x0e0a00,3,
-0x0e0a1c,2,
-0x0e0a30,1,
-0x0e0a48,2,
-0x0e0a58,2,
-0x0e0a68,11,
-0x0e0a9c,2,
-0x0e0aac,14,
-0x0e0b80,2,
-0x0e0be0,1,
-0x0e0be8,3,
-0x0e0bf8,1,
+0x0e09e8,5,
+0x0e0a04,5,
+0x0e0a1c,1,
+0x0e0b00,16,
 0x0e0c00,3,
-0x0e0c1c,2,
-0x0e0c30,1,
+0x0e0c10,2,
+0x0e0c1c,1,
+0x0e0c24,4,
 0x0e0c48,2,
 0x0e0c58,2,
-0x0e0c68,11,
-0x0e0c9c,2,
-0x0e0cac,14,
-0x0e0d80,2,
+0x0e0c68,31,
+0x0e0cf0,1,
+0x0e0cfc,35,
 0x0e0de0,1,
-0x0e0de8,3,
-0x0e0df8,1,
-0x0e0e00,3,
-0x0e0e1c,2,
-0x0e0e30,1,
-0x0e0e48,2,
-0x0e0e58,2,
-0x0e0e68,11,
-0x0e0e9c,2,
-0x0e0eac,14,
-0x0e0f80,2,
-0x0e0fe0,1,
-0x0e0fe8,3,
-0x0e0ff8,1,
-0x0e1400,8,
-0x0e1450,3,
-0x0e1460,3,
-0x0e1474,5,
-0x0e14a0,8,
-0x0e14e0,7,
-0x0e1504,1,
-0x0e1540,16,
-0x0e15f0,3,
-0x0e1604,1,
-0x0e1640,16,
+0x0e0de8,5,
+0x0e0e04,5,
+0x0e0e1c,1,
+0x0e0f00,16,
+0x0e1000,3,
+0x0e1010,2,
+0x0e101c,1,
+0x0e1024,4,
+0x0e1048,2,
+0x0e1058,2,
+0x0e1068,31,
+0x0e10f0,1,
+0x0e10fc,35,
+0x0e11e0,1,
+0x0e11e8,5,
+0x0e1204,5,
+0x0e121c,1,
+0x0e1300,16,
+0x0e1400,3,
+0x0e1410,2,
+0x0e141c,1,
+0x0e1424,4,
+0x0e1448,2,
+0x0e1458,2,
+0x0e1468,31,
+0x0e14f0,1,
+0x0e14fc,35,
+0x0e15e0,1,
+0x0e15e8,5,
+0x0e1604,5,
+0x0e161c,1,
 0x0e1700,16,
-0x0e1a00,4,
-0x0e2000,1,
-0x0e2018,1,
-0x0e2034,1,
-0x0e2104,1,
-0x0e2134,1,
-0x0e214c,1,
-0x0e2170,2,
-0x0e2200,6,
-0x0e2420,2,
-0x0e2430,10,
-0x0e2460,6,
-0x0e2480,6,
-0x0e24a0,3,
-0x0e2504,4,
-0x0e2600,16,
-0x0e2644,5,
-0x0e2660,6,
-0x0e2804,8,
-0x0e2828,5,
-0x0e2844,3,
-0x0e2854,6,
-0x0e2880,4,
-0x0e28a0,6,
-0x0e2a04,3,
-0x0e2b00,33,
-0x0e2c40,3,
-0x0e2c60,11,
+0x0e1800,3,
+0x0e1810,2,
+0x0e181c,1,
+0x0e1824,4,
+0x0e1848,2,
+0x0e1858,2,
+0x0e1868,31,
+0x0e18f0,1,
+0x0e18fc,35,
+0x0e19e0,1,
+0x0e19e8,5,
+0x0e1a04,5,
+0x0e1a1c,1,
+0x0e1b00,16,
+0x0e1c00,3,
+0x0e1c10,2,
+0x0e1c1c,1,
+0x0e1c24,4,
+0x0e1c48,2,
+0x0e1c58,2,
+0x0e1c68,31,
+0x0e1cf0,1,
+0x0e1cfc,35,
+0x0e1de0,1,
+0x0e1de8,5,
+0x0e1e04,5,
+0x0e1e1c,1,
+0x0e1f00,16,
+0x0e20c0,8,
+0x0e20f4,3,
+0x0e2108,3,
+0x0e2200,5,
+0x0e2218,36,
+0x0e2300,6,
+0x0e2330,4,
+0x0e2600,1,
+0x0e260c,1,
+0x0e26e0,6,
+0x0e2700,6,
+0x0e2720,6,
+0x0e2740,3,
+0x0e2780,6,
+0x0e27a0,6,
+0x0e27c0,3,
+0x0e2800,67,
+0x0e2a00,6,
+0x0e2a20,6,
+0x0e2a40,3,
+0x0e2a50,3,
+0x0e2a60,1,
+0x0e2a80,17,
+0x0e3020,10,
+0x0e3070,1,
+0x0e3080,2,
+0x0e308c,1,
+0x0e3400,1,
+0x0e3440,21,
+0x0e34e4,13,
+0x0e3520,6,
+0x0e3540,6,
+0x0e3560,6,
+0x0e3580,6,
+0x0e3600,16,
+0x0e3804,3,
+0x0e3900,33,
+0x0e3a00,6,
+0x0e3a20,2,
+0x0e3a40,8,
+0x0e3a64,5,
+0x0e3c00,1,
+0x0e3c28,1,
+0x0e3c50,1,
+0x0e3c78,1,
+0x0e3ca0,2,
+0x0e3dac,1,
+0x0e3dd8,4,
+0x0e3e00,6,
+0x0e3e20,6,
+0x0e3e40,3,
+0x0e4010,12,
+0x0e4044,3,
+0x0e4084,2,
+0x0e40bc,84,
+0x0e4240,18,
+0x0e45f0,4,
+0x0e4604,1,
+0x0e4640,16,
+0x0e46f0,4,
+0x0e4704,1,
+0x0e4740,16,
+0x0e5000,8,
+0x0e6000,7,
 0x0e8000,9,
-0x0e8050,1,
-0x0e8064,6,
-0x0e8080,1,
-0x0e8088,2,
+0x0e8044,6,
+0x0e8080,15,
 0x0f0000,3,
-0x0f0014,8,
-0x0f0040,3,
-0x0f0050,4,
-0x0f0080,12,
+0x0f0014,9,
+0x0f004c,3,
+0x0f0060,8,
+0x0f00a0,5,
 0x0f00f0,2,
-0x0f0100,3,
-0x0f0118,5,
+0x0f0100,5,
+0x0f0118,1,
 0x0f0130,6,
-0x0f015c,13,
+0x0f015c,12,
+0x0f0190,3,
 0x0f01a0,3,
 0x0f01c0,2,
 0x0f01d0,10,
 0x0f0200,61,
 0x0f0404,8,
-0x0f0440,4,
-0x0f0460,1,
-0x0f0468,3,
+0x0f0440,12,
 0x0f0480,6,
 0x0f04a0,8,
 0x0f04e0,6,
 0x0f0500,6,
 0x0f0520,8,
 0x0f0560,6,
-0x0f05dc,73,
-0x0f0704,1,
-0x0f0714,10,
+0x0f0580,1,
+0x0f0588,3,
+0x0f05dc,9,
 0x0f0800,17,
 0x0f0850,9,
-0x0f0880,4,
-0x0f089c,5,
-0x0f08bc,5,
-0x0f08dc,1,
-0x0f0900,6,
-0x0f0920,6,
-0x0f0940,6,
-0x0f0980,3,
-0x0f0990,1,
-0x0f0ffc,1,
+0x0f0880,9,
+0x0f08b0,9,
+0x0f08e0,9,
+0x0f0920,4,
+0x0f093c,5,
+0x0f095c,5,
+0x0f097c,5,
+0x0f099c,5,
+0x0f09bc,5,
+0x0f09dc,1,
+0x0f0a80,3,
+0x0f0a90,4,
+0x0f0c00,128,
+0x0f0e04,1,
+0x0f0e14,9,
+0x0f0e3c,1,
+0x0f1000,1,
+0x0f1200,6,
+0x0f1220,6,
+0x0f1240,6,
+0x0f1260,6,
+0x0f1280,6,
+0x0f12a0,6,
+0x0f12c0,6,
+0x0f12e0,6,
+0x0f1300,3,
+0x0f4000,7,
+0x0f4100,2,
+0x0f4180,34,
+0x0f4300,2,
+0x0f4380,42,
+0x0f4800,7,
+0x0f4900,2,
+0x0f4980,34,
+0x0f4b00,2,
+0x0f4b80,42,
+0x0f5000,7,
+0x0f5100,2,
+0x0f5180,34,
+0x0f5300,2,
+0x0f5380,42,
+0x0f5800,7,
+0x0f5900,2,
+0x0f5980,34,
+0x0f5b00,2,
+0x0f5b80,42,
+0x0f6000,7,
+0x0f6100,2,
+0x0f6180,34,
+0x0f6300,2,
+0x0f6380,42,
+0x0f6800,7,
+0x0f6900,2,
+0x0f6980,34,
+0x0f6b00,2,
+0x0f6b80,42,
+0x100000,1,
+0x100008,1,
+0x100010,2,
+0x100020,1,
+0x100028,1,
+0x100030,2,
+0x100040,1,
+0x100048,1,
+0x100050,2,
+0x100060,1,
+0x100068,1,
+0x100070,2,
+0x100080,21,
+0x100100,21,
+0x100180,21,
+0x100200,21,
+0x100284,1,
+0x1003b0,4,
+0x100400,13,
+0x100440,13,
+0x100480,13,
+0x1004c0,13,
+0x100500,68,
+0x100618,1,
+0x100804,1,
+0x10080c,4,
+0x100820,9,
+0x100880,24,
+0x100900,24,
+0x100c00,1,
+0x100c08,2,
+0x100c80,33,
+0x100d80,4,
+0x100da0,6,
+0x100e00,4,
+0x100e20,1,
+0x100e28,7,
+0x100e48,7,
+0x100e68,7,
+0x100e88,6,
+0x100ee0,6,
+0x100f00,6,
+0x100f1c,10,
+0x100f70,8,
+0x100f94,4,
+0x100fc0,6,
+0x100fe0,6,
+0x101800,3,
+0x101810,3,
+0x101820,3,
+0x101830,3,
+0x101840,17,
+0x1018a8,6,
+0x1018c8,6,
+0x101920,1,
+0x101940,4,
+0x101980,8,
+0x101a00,10,
+0x101a30,7,
+0x101a50,4,
+0x101a80,1,
+0x101a90,4,
+0x101c00,34,
+0x101d00,3,
+0x101f80,9,
+0x101fc0,17,
+0x102028,1,
+0x102050,1,
+0x102078,1,
+0x1020a0,8,
+0x1021ac,1,
+0x1021d8,4,
+0x102200,6,
+0x102220,6,
+0x102240,3,
+0x102400,36,
+0x1024a0,8,
+0x102500,1,
+0x102584,9,
+0x1025ac,2,
+0x1025fc,1,
+0x102604,1,
+0x1026ec,69,
+0x103000,32,
+0x103084,5,
+0x1030f8,3,
+0x103108,3,
+0x103118,7,
+0x103144,1,
+0x103160,11,
+0x103200,32,
+0x103284,5,
+0x1032f8,3,
+0x103308,3,
+0x103318,7,
+0x103344,1,
+0x103360,11,
+0x103400,32,
+0x103484,5,
+0x1034f8,3,
+0x103508,3,
+0x103518,7,
+0x103544,1,
+0x103560,11,
+0x103600,32,
+0x103684,5,
+0x1036f8,3,
+0x103708,3,
+0x103718,7,
+0x103744,1,
+0x103760,11,
+0x103a00,64,
+0x104000,3,
+0x104020,3,
+0x104040,3,
+0x104060,3,
+0x104084,1,
+0x104090,4,
+0x1040a4,1,
+0x1040b0,4,
+0x1040c4,1,
+0x1040d0,4,
+0x1040e4,1,
+0x1040f0,21,
+0x104150,5,
+0x104278,34,
+0x104304,10,
+0x104330,1,
+0x104340,16,
+0x1043b4,4,
+0x1043c8,4,
+0x1043dc,4,
+0x1043f0,4,
+0x104404,1,
+0x104470,36,
+0x104504,1,
+0x104570,36,
+0x104604,1,
+0x104670,36,
+0x104704,1,
+0x104770,50,
+0x104840,2,
+0x104900,1,
+0x104908,1,
+0x104984,1,
+0x1049a0,24,
+0x104a80,3,
+0x104aa0,6,
+0x104ac0,6,
+0x104b00,3,
+0x104b20,6,
+0x104b40,6,
+0x104b80,3,
+0x104ba0,6,
+0x104bc0,6,
+0x104c00,3,
+0x104c20,6,
+0x104c40,6,
+0x104c80,3,
+0x104ca0,6,
+0x104cc0,6,
+0x105000,448,
+0x105704,11,
+0x105734,1,
+0x106010,1,
+0x110000,4,
+0x110014,2,
+0x110020,5,
+0x110040,5,
+0x110060,6,
+0x110080,7,
+0x1100a0,4,
+0x1100b8,8,
+0x1100e0,6,
+0x110200,4,
+0x110214,2,
+0x110220,5,
+0x110240,5,
+0x110260,6,
+0x110280,7,
+0x1102a0,4,
+0x1102b8,8,
+0x1102e0,6,
+0x110400,4,
+0x110414,2,
+0x110420,5,
+0x110440,5,
+0x110460,6,
+0x110480,7,
+0x1104a0,4,
+0x1104b8,8,
+0x1104e0,6,
+0x110600,4,
+0x110614,2,
+0x110620,5,
+0x110640,5,
+0x110660,6,
+0x110680,7,
+0x1106a0,4,
+0x1106b8,8,
+0x1106e0,6,
+0x110800,31,
+0x110880,3,
+0x110890,2,
+0x111000,1,
+0x111028,1,
+0x111050,1,
+0x111078,1,
+0x1110a0,5,
+0x1111ac,1,
+0x1111d8,4,
+0x111200,6,
+0x111220,6,
+0x111240,3,
+0x111400,3,
+0x111480,9,
+0x1114c0,25,
+0x111540,25,
+0x1115c0,25,
+0x111640,17,
+0x111688,2,
+0x118000,29,
+0x118078,5,
+0x118090,2,
+0x1180a0,10,
+0x118100,93,
+0x118278,5,
+0x118290,2,
+0x1182a0,10,
+0x118300,93,
+0x118478,5,
+0x118490,2,
+0x1184a0,10,
+0x118500,93,
+0x118678,5,
+0x118690,2,
+0x1186a0,10,
+0x118700,94,
+0x11887c,1,
+0x118a00,8,
+0x118a24,15,
+0x118a64,23,
+0x118ac4,6,
+0x118b00,4,
+0x118b20,3,
+0x118c00,2,
+0x118c40,14,
+0x118c80,9,
+0x118d00,9,
+0x118d2c,1,
+0x118d80,9,
+0x118e00,2,
+0x118e0c,1,
+0x118e14,5,
+0x118e2c,1,
+0x118e34,5,
+0x118e4c,1,
+0x118e54,5,
+0x118e6c,1,
+0x118e74,5,
+0x118e8c,1,
+0x118e94,5,
+0x118eac,1,
+0x118eb4,3,
+0x119000,29,
+0x119078,5,
+0x119090,2,
+0x1190a0,10,
+0x119100,93,
+0x119278,5,
+0x119290,2,
+0x1192a0,10,
+0x119300,93,
+0x119478,5,
+0x119490,2,
+0x1194a0,10,
+0x119500,93,
+0x119678,5,
+0x119690,2,
+0x1196a0,10,
+0x119700,94,
+0x11987c,1,
+0x119a00,8,
+0x119a24,15,
+0x119a64,23,
+0x119ac4,6,
+0x119b00,4,
+0x119b20,3,
+0x119c00,2,
+0x119c40,14,
+0x119c80,9,
+0x119d00,9,
+0x119d2c,1,
+0x119d80,9,
+0x119e00,2,
+0x119e0c,1,
+0x119e14,5,
+0x119e2c,1,
+0x119e34,5,
+0x119e4c,1,
+0x119e54,5,
+0x119e6c,1,
+0x119e74,5,
+0x119e8c,1,
+0x119e94,5,
+0x119eac,1,
+0x119eb4,3,
+0x11a000,29,
+0x11a078,5,
+0x11a090,2,
+0x11a0a0,10,
+0x11a100,93,
+0x11a278,5,
+0x11a290,2,
+0x11a2a0,10,
+0x11a300,93,
+0x11a478,5,
+0x11a490,2,
+0x11a4a0,10,
+0x11a500,93,
+0x11a678,5,
+0x11a690,2,
+0x11a6a0,10,
+0x11a700,94,
+0x11a87c,1,
+0x11aa00,8,
+0x11aa24,15,
+0x11aa64,23,
+0x11aac4,6,
+0x11ab00,4,
+0x11ab20,3,
+0x11ac00,2,
+0x11ac40,14,
+0x11ac80,9,
+0x11ad00,9,
+0x11ad2c,1,
+0x11ad80,9,
+0x11ae00,2,
+0x11ae0c,1,
+0x11ae14,5,
+0x11ae2c,1,
+0x11ae34,5,
+0x11ae4c,1,
+0x11ae54,5,
+0x11ae6c,1,
+0x11ae74,5,
+0x11ae8c,1,
+0x11ae94,5,
+0x11aeac,1,
+0x11aeb4,3,
+0x11b000,29,
+0x11b078,5,
+0x11b090,2,
+0x11b0a0,10,
+0x11b100,93,
+0x11b278,5,
+0x11b290,2,
+0x11b2a0,10,
+0x11b300,93,
+0x11b478,5,
+0x11b490,2,
+0x11b4a0,10,
+0x11b500,93,
+0x11b678,5,
+0x11b690,2,
+0x11b6a0,10,
+0x11b700,94,
+0x11b87c,1,
+0x11ba00,8,
+0x11ba24,15,
+0x11ba64,23,
+0x11bac4,6,
+0x11bb00,4,
+0x11bb20,3,
+0x11bc00,2,
+0x11bc40,14,
+0x11bc80,9,
+0x11bd00,9,
+0x11bd2c,1,
+0x11bd80,9,
+0x11be00,2,
+0x11be0c,1,
+0x11be14,5,
+0x11be2c,1,
+0x11be34,5,
+0x11be4c,1,
+0x11be54,5,
+0x11be6c,1,
+0x11be74,5,
+0x11be8c,1,
+0x11be94,5,
+0x11beac,1,
+0x11beb4,3,
+0x11c000,19,
+0x11c050,10,
+0x11c080,19,
+0x11c0d0,10,
+0x11c100,19,
+0x11c150,10,
+0x11c180,19,
+0x11c1d0,10,
+0x11c200,19,
+0x11c250,10,
+0x11c280,19,
+0x11c2d0,10,
+0x11c300,19,
+0x11c350,10,
+0x11c380,19,
+0x11c3d0,10,
+0x11c400,19,
+0x11c450,10,
+0x11c480,19,
+0x11c4d0,10,
+0x11c500,19,
+0x11c550,10,
+0x11c580,19,
+0x11c5d0,10,
+0x11c600,19,
+0x11c650,10,
+0x11c680,19,
+0x11c6d0,10,
+0x11c700,19,
+0x11c750,10,
+0x11c780,19,
+0x11c7d0,10,
+0x11c800,19,
+0x11c850,10,
+0x11c884,1,
+0x11c894,22,
+0x11c900,7,
+0x11d000,8,
+0x11d028,3,
+0x11d040,5,
+0x11d080,8,
+0x11d0a8,3,
+0x11d0c0,5,
+0x11d100,8,
+0x11d128,3,
+0x11d140,5,
+0x11d180,8,
+0x11d1a8,3,
+0x11d1c0,5,
+0x11d200,7,
+0x11d220,7,
+0x11d240,7,
+0x11d260,7,
+0x11d280,7,
+0x11d2a0,7,
+0x11d2c0,7,
+0x11d2e0,7,
+0x11d300,7,
+0x11d320,7,
+0x11d340,7,
+0x11d360,7,
+0x11d380,7,
+0x11d3a0,7,
+0x11d3c0,7,
+0x11d3e0,7,
+0x11d400,6,
+0x11d420,6,
+0x11d440,6,
+0x11d460,6,
+0x11d480,6,
+0x11d4a0,6,
+0x11d4c0,6,
+0x11d4e0,6,
+0x11d500,52,
+0x11d5e0,8,
+0x11d604,1,
+0x11d60c,4,
+0x11d620,4,
+0x11d634,33,
+0x11d800,101,
+0x11da00,3,
+0x11da10,1,
+0x11da18,2,
+0x11da24,14,
+0x11da80,3,
+0x11da90,1,
+0x11da98,2,
+0x11daa4,14,
+0x11db00,3,
+0x11db10,1,
+0x11db18,2,
+0x11db24,14,
+0x11db80,3,
+0x11db90,1,
+0x11db98,2,
+0x11dba4,14,
+0x11dc00,17,
+0x11e000,72,
+0x11e200,72,
+0x11e400,72,
+0x11e600,72,
+0x11e800,6,
+0x11e820,6,
+0x11e840,6,
+0x11e860,6,
+0x11e880,6,
+0x11e8a0,6,
+0x11e8c0,6,
+0x11e8e0,6,
+0x11e900,6,
+0x11e920,1,
+0x11ea00,6,
+0x11ea20,6,
+0x11ea40,6,
+0x11ea60,6,
+0x11ea80,6,
+0x11eaa0,6,
+0x11eac0,6,
+0x11eae0,6,
+0x11eb00,6,
+0x11eb20,1,
+0x11ec00,6,
+0x11ec20,6,
+0x11ec40,6,
+0x11ec60,6,
+0x11ec80,6,
+0x11eca0,6,
+0x11ecc0,6,
+0x11ece0,6,
+0x11ed00,6,
+0x11ed20,1,
+0x11ee00,6,
+0x11ee20,6,
+0x11ee40,6,
+0x11ee60,6,
+0x11ee80,6,
+0x11eea0,6,
+0x11eec0,6,
+0x11eee0,6,
+0x11ef00,6,
+0x11ef20,1,
+0x11f000,14,
+0x11f040,2,
+0x11f080,14,
+0x11f0c0,2,
+0x11f100,14,
+0x11f140,2,
+0x11f180,14,
+0x11f1c0,2,
+0x11f400,17,
+0x11f448,4,
+0x11f460,3,
+0x11f470,3,
+0x11f480,12,
+0x11f500,17,
+0x11f548,4,
+0x11f560,3,
+0x11f570,3,
+0x11f580,12,
+0x11f600,17,
+0x11f648,4,
+0x11f660,3,
+0x11f670,3,
+0x11f680,12,
+0x11f700,17,
+0x11f748,4,
+0x11f760,3,
+0x11f770,3,
+0x11f780,12,
+0x11f904,8,
+0x11f940,13,
+0x11f980,16,
+0x11fa00,6,
+0x11fa20,3,
+0x11fa30,3,
+0x11fa40,17,
+0x11fb00,8,
+0x11fb24,15,
+0x11fb64,15,
+0x11fba4,15,
+0x11fbe4,23,
+0x11fc44,6,
+0x11fc80,10,
+0x11fcac,1,
+0x11fcb4,5,
+0x11fccc,1,
+0x11fcd4,5,
+0x11fcec,1,
+0x11fcf4,13,
+0x11fd80,7,
+0x11fda0,5,
+0x11fdc0,5,
+0x11fde0,4,
index 43b887dd4c112780462496e9024e34c931a01f2f..b8e46e5d065bf5b1898580b7e2a07c18d4e3b775 100644 (file)
-#Addr, Size, Enable addr 
-0x000000,1,
-0x000008,14,
-0x000080,1,
-0x000088,18,
-0x000100,9,
-0x000134,2,
-0x00014c,4,
-0x00016c,6,
-0x00018c,8,
-0x0001b0,1,
-0x000200,2,
-0x00020c,1,
-0x000214,13,
-0x000254,5,
-0x00026c,7,
-0x0002a8,3,
-0x0002c0,8,
-0x000300,6,
-0x000380,3,
-0x0003a0,14,
-0x0003e0,9,
+#Addr, Size, Enable addr
+0x000400,1,
 0x000408,14,
 0x000480,1,
 0x000488,18,
 0x000500,9,
 0x000534,2,
 0x00054c,4,
-0x00056c,6,
-0x00058c,8,
-0x0005b0,1,
-0x000600,2,
-0x00060c,1,
-0x000614,13,
-0x000654,5,
-0x00066c,7,
+0x00056c,11,
+0x0005ac,8,
+0x0005d0,1,
+0x000604,1,
+0x00060c,13,
+0x000644,1,
+0x000654,3,
+0x000664,1,
+0x00066c,8,
 0x0006a8,3,
 0x0006c0,8,
 0x000700,6,
-0x000780,3,
-0x0007a0,14,
-0x0007e0,9,
+0x000760,4,
+0x000780,8,
+0x0007b8,8,
+0x0007dc,10,
 0x000808,14,
 0x000880,1,
 0x000888,18,
 0x000900,9,
 0x000934,2,
 0x00094c,4,
-0x00096c,6,
-0x00098c,8,
-0x0009b0,1,
-0x000a00,2,
-0x000a0c,1,
-0x000a14,13,
-0x000a54,5,
-0x000a6c,7,
+0x00096c,11,
+0x0009ac,8,
+0x0009d0,1,
+0x000a04,1,
+0x000a0c,13,
+0x000a44,1,
+0x000a54,3,
+0x000a64,1,
+0x000a6c,8,
 0x000aa8,3,
 0x000ac0,8,
 0x000b00,6,
-0x000b80,3,
-0x000ba0,14,
-0x000be0,9,
+0x000b60,4,
+0x000b80,8,
+0x000bb8,8,
+0x000bdc,10,
 0x000c08,14,
 0x000c80,1,
 0x000c88,18,
 0x000d00,9,
 0x000d34,2,
 0x000d4c,4,
-0x000d6c,6,
-0x000d8c,8,
-0x000db0,1,
-0x000e00,2,
-0x000e0c,1,
-0x000e14,13,
-0x000e54,5,
-0x000e6c,7,
+0x000d6c,11,
+0x000dac,8,
+0x000dd0,1,
+0x000e04,1,
+0x000e0c,13,
+0x000e44,1,
+0x000e54,3,
+0x000e64,1,
+0x000e6c,8,
 0x000ea8,3,
 0x000ec0,8,
 0x000f00,6,
-0x000f80,3,
-0x000fa0,14,
-0x000fe0,9,
+0x000f60,4,
+0x000f80,8,
+0x000fb8,8,
+0x000fdc,10,
 0x001008,14,
 0x001080,1,
 0x001088,18,
 0x001100,9,
 0x001134,2,
 0x00114c,4,
-0x00116c,6,
-0x00118c,8,
-0x0011b0,1,
-0x001200,2,
-0x00120c,1,
-0x001214,13,
-0x001254,5,
-0x00126c,7,
+0x00116c,11,
+0x0011ac,8,
+0x0011d0,1,
+0x001204,1,
+0x00120c,13,
+0x001244,1,
+0x001254,3,
+0x001264,1,
+0x00126c,8,
 0x0012a8,3,
 0x0012c0,8,
 0x001300,6,
-0x001380,3,
-0x0013a0,14,
-0x0013e0,9,
+0x001360,4,
+0x001380,8,
+0x0013b8,8,
+0x0013dc,10,
 0x001408,14,
 0x001480,1,
 0x001488,18,
 0x001500,9,
 0x001534,2,
 0x00154c,4,
-0x00156c,6,
-0x00158c,8,
-0x0015b0,1,
-0x001600,2,
-0x00160c,1,
-0x001614,13,
-0x001654,5,
-0x00166c,7,
+0x00156c,11,
+0x0015ac,8,
+0x0015d0,1,
+0x001604,1,
+0x00160c,13,
+0x001644,1,
+0x001654,3,
+0x001664,1,
+0x00166c,8,
 0x0016a8,3,
 0x0016c0,8,
 0x001700,6,
-0x001780,3,
-0x0017a0,14,
-0x0017e0,9,
+0x001760,4,
+0x001780,8,
+0x0017b8,8,
+0x0017dc,10,
 0x001808,14,
 0x001880,1,
 0x001888,18,
 0x001900,9,
 0x001934,2,
 0x00194c,4,
-0x00196c,6,
-0x00198c,8,
-0x0019b0,1,
-0x001a00,2,
-0x001a0c,1,
-0x001a14,13,
-0x001a54,5,
-0x001a6c,7,
+0x00196c,11,
+0x0019ac,8,
+0x0019d0,1,
+0x001a04,1,
+0x001a0c,13,
+0x001a44,1,
+0x001a54,3,
+0x001a64,1,
+0x001a6c,8,
 0x001aa8,3,
 0x001ac0,8,
 0x001b00,6,
-0x001b80,3,
-0x001ba0,14,
-0x001be0,9,
+0x001b60,4,
+0x001b80,8,
+0x001bb8,8,
+0x001bdc,10,
 0x001c08,14,
 0x001c80,1,
 0x001c88,18,
 0x001d00,9,
 0x001d34,2,
 0x001d4c,4,
-0x001d6c,6,
-0x001d8c,8,
-0x001db0,1,
-0x001e00,2,
-0x001e0c,1,
-0x001e14,13,
-0x001e54,5,
-0x001e6c,7,
+0x001d6c,11,
+0x001dac,8,
+0x001dd0,1,
+0x001e04,1,
+0x001e0c,13,
+0x001e44,1,
+0x001e54,3,
+0x001e64,1,
+0x001e6c,8,
 0x001ea8,3,
 0x001ec0,8,
 0x001f00,6,
-0x001f80,3,
-0x001fa0,14,
-0x001fe0,9,
+0x001f60,4,
+0x001f80,8,
+0x001fb8,8,
+0x001fdc,10,
 0x002008,14,
 0x002080,1,
 0x002088,18,
 0x002100,9,
 0x002134,2,
 0x00214c,4,
-0x00216c,6,
-0x00218c,8,
-0x0021b0,1,
-0x002200,2,
-0x00220c,1,
-0x002214,13,
-0x002254,5,
-0x00226c,7,
+0x00216c,11,
+0x0021ac,8,
+0x0021d0,1,
+0x002204,1,
+0x00220c,13,
+0x002244,1,
+0x002254,3,
+0x002264,1,
+0x00226c,8,
 0x0022a8,3,
 0x0022c0,8,
 0x002300,6,
-0x002380,3,
-0x0023a0,14,
-0x0023e0,9,
+0x002360,4,
+0x002380,8,
+0x0023b8,8,
+0x0023dc,10,
 0x002408,14,
 0x002480,1,
 0x002488,18,
 0x002500,9,
 0x002534,2,
 0x00254c,4,
-0x00256c,6,
-0x00258c,8,
-0x0025b0,1,
-0x002600,2,
-0x00260c,1,
-0x002614,13,
-0x002654,5,
-0x00266c,7,
+0x00256c,11,
+0x0025ac,8,
+0x0025d0,1,
+0x002604,1,
+0x00260c,13,
+0x002644,1,
+0x002654,3,
+0x002664,1,
+0x00266c,8,
 0x0026a8,3,
 0x0026c0,8,
 0x002700,6,
-0x002780,3,
-0x0027a0,14,
-0x0027e0,9,
+0x002760,4,
+0x002780,8,
+0x0027b8,8,
+0x0027dc,10,
 0x002808,14,
 0x002880,1,
 0x002888,18,
 0x002900,9,
 0x002934,2,
 0x00294c,4,
-0x00296c,6,
-0x00298c,8,
-0x0029b0,1,
-0x002a00,2,
-0x002a0c,1,
-0x002a14,13,
-0x002a54,5,
-0x002a6c,7,
+0x00296c,11,
+0x0029ac,8,
+0x0029d0,1,
+0x002a04,1,
+0x002a0c,13,
+0x002a44,1,
+0x002a54,3,
+0x002a64,1,
+0x002a6c,8,
 0x002aa8,3,
 0x002ac0,8,
 0x002b00,6,
-0x002b80,3,
-0x002ba0,14,
-0x002be0,9,
+0x002b60,4,
+0x002b80,8,
+0x002bb8,8,
+0x002bdc,10,
 0x002c08,14,
 0x002c80,1,
 0x002c88,18,
 0x002d00,9,
 0x002d34,2,
 0x002d4c,4,
-0x002d6c,6,
-0x002d8c,8,
-0x002db0,1,
-0x002e00,2,
-0x002e0c,1,
-0x002e14,13,
-0x002e54,5,
-0x002e6c,7,
+0x002d6c,11,
+0x002dac,8,
+0x002dd0,1,
+0x002e04,1,
+0x002e0c,13,
+0x002e44,1,
+0x002e54,3,
+0x002e64,1,
+0x002e6c,8,
 0x002ea8,3,
 0x002ec0,8,
 0x002f00,6,
-0x002f80,3,
-0x002fa0,14,
-0x002fe0,9,
+0x002f60,4,
+0x002f80,8,
+0x002fb8,8,
+0x002fdc,10,
 0x003008,14,
 0x003080,1,
 0x003088,18,
 0x003100,9,
 0x003134,2,
 0x00314c,4,
-0x00316c,6,
-0x00318c,8,
-0x0031b0,1,
-0x003200,2,
-0x00320c,1,
-0x003214,13,
-0x003254,5,
-0x00326c,7,
+0x00316c,11,
+0x0031ac,8,
+0x0031d0,1,
+0x003204,1,
+0x00320c,13,
+0x003244,1,
+0x003254,3,
+0x003264,1,
+0x00326c,8,
 0x0032a8,3,
 0x0032c0,8,
 0x003300,6,
-0x003380,3,
-0x0033a0,14,
-0x0033e0,9,
+0x003360,4,
+0x003380,8,
+0x0033b8,8,
+0x0033dc,10,
 0x003408,14,
 0x003480,1,
 0x003488,18,
 0x003500,9,
 0x003534,2,
 0x00354c,4,
-0x00356c,6,
-0x00358c,8,
-0x0035b0,1,
-0x003600,2,
-0x00360c,1,
-0x003614,13,
-0x003654,5,
-0x00366c,7,
+0x00356c,11,
+0x0035ac,8,
+0x0035d0,1,
+0x003604,1,
+0x00360c,13,
+0x003644,1,
+0x003654,3,
+0x003664,1,
+0x00366c,8,
 0x0036a8,3,
 0x0036c0,8,
 0x003700,6,
-0x003780,3,
-0x0037a0,14,
-0x0037e0,9,
+0x003760,4,
+0x003780,8,
+0x0037b8,8,
+0x0037dc,10,
 0x003808,14,
 0x003880,1,
 0x003888,18,
 0x003900,9,
 0x003934,2,
 0x00394c,4,
-0x00396c,6,
-0x00398c,8,
-0x0039b0,1,
-0x003a00,2,
-0x003a0c,1,
-0x003a14,13,
-0x003a54,5,
-0x003a6c,7,
+0x00396c,11,
+0x0039ac,8,
+0x0039d0,1,
+0x003a04,1,
+0x003a0c,13,
+0x003a44,1,
+0x003a54,3,
+0x003a64,1,
+0x003a6c,8,
 0x003aa8,3,
 0x003ac0,8,
 0x003b00,6,
-0x003b80,3,
-0x003ba0,14,
-0x003be0,9,
+0x003b60,4,
+0x003b80,8,
+0x003bb8,8,
+0x003bdc,10,
 0x003c08,14,
 0x003c80,1,
 0x003c88,18,
 0x003d00,9,
 0x003d34,2,
 0x003d4c,4,
-0x003d6c,6,
-0x003d8c,8,
-0x003db0,1,
-0x003e00,2,
-0x003e0c,1,
-0x003e14,13,
-0x003e54,5,
-0x003e6c,7,
+0x003d6c,11,
+0x003dac,8,
+0x003dd0,1,
+0x003e04,1,
+0x003e0c,13,
+0x003e44,1,
+0x003e54,3,
+0x003e64,1,
+0x003e6c,8,
 0x003ea8,3,
 0x003ec0,8,
 0x003f00,6,
-0x003f80,3,
-0x003fa0,14,
-0x003fe0,9,
+0x003f60,4,
+0x003f80,8,
+0x003fb8,8,
+0x003fdc,10,
 0x004008,14,
 0x004080,1,
 0x004088,18,
 0x004100,9,
 0x004134,2,
 0x00414c,4,
-0x00416c,6,
-0x00418c,8,
-0x0041b0,1,
-0x004200,2,
-0x00420c,1,
-0x004214,13,
-0x004254,5,
-0x00426c,7,
+0x00416c,11,
+0x0041ac,8,
+0x0041d0,1,
+0x004204,1,
+0x00420c,13,
+0x004244,1,
+0x004254,3,
+0x004264,1,
+0x00426c,8,
 0x0042a8,3,
 0x0042c0,8,
 0x004300,6,
-0x004380,3,
-0x0043a0,14,
-0x0043e0,9,
+0x004360,4,
+0x004380,8,
+0x0043b8,8,
+0x0043dc,10,
 0x004408,14,
 0x004480,1,
 0x004488,18,
 0x004500,9,
 0x004534,2,
 0x00454c,4,
-0x00456c,6,
-0x00458c,8,
-0x0045b0,1,
-0x004600,2,
-0x00460c,1,
-0x004614,13,
-0x004654,5,
-0x00466c,7,
+0x00456c,11,
+0x0045ac,8,
+0x0045d0,1,
+0x004604,1,
+0x00460c,13,
+0x004644,1,
+0x004654,3,
+0x004664,1,
+0x00466c,8,
 0x0046a8,3,
 0x0046c0,8,
 0x004700,6,
-0x004780,3,
-0x0047a0,14,
-0x0047e0,9,
+0x004760,4,
+0x004780,8,
+0x0047b8,8,
+0x0047dc,10,
 0x004808,14,
 0x004880,1,
 0x004888,18,
 0x004900,9,
 0x004934,2,
 0x00494c,4,
-0x00496c,6,
-0x00498c,8,
-0x0049b0,1,
-0x004a00,2,
-0x004a0c,1,
-0x004a14,13,
-0x004a54,5,
-0x004a6c,7,
+0x00496c,11,
+0x0049ac,8,
+0x0049d0,1,
+0x004a04,1,
+0x004a0c,13,
+0x004a44,1,
+0x004a54,3,
+0x004a64,1,
+0x004a6c,8,
 0x004aa8,3,
 0x004ac0,8,
 0x004b00,6,
-0x004b80,3,
-0x004ba0,14,
-0x004be0,9,
+0x004b60,4,
+0x004b80,8,
+0x004bb8,8,
+0x004bdc,10,
 0x004c08,14,
 0x004c80,1,
 0x004c88,18,
 0x004d00,9,
 0x004d34,2,
 0x004d4c,4,
-0x004d6c,6,
-0x004d8c,8,
-0x004db0,1,
-0x004e00,2,
-0x004e0c,1,
-0x004e14,13,
-0x004e54,5,
-0x004e6c,7,
+0x004d6c,11,
+0x004dac,8,
+0x004dd0,1,
+0x004e04,1,
+0x004e0c,13,
+0x004e44,1,
+0x004e54,3,
+0x004e64,1,
+0x004e6c,8,
 0x004ea8,3,
 0x004ec0,8,
 0x004f00,6,
-0x004f80,3,
-0x004fa0,14,
-0x004fe0,9,
-0x005018,1,
-0x005034,1,
-0x00512c,1,
-0x005190,1,
-0x0051ac,1,
-0x0051d8,4,
-0x005200,8,
-0x005400,13,
-0x005460,3,
-0x005470,2,
-0x005504,2,
-0x005518,1,
-0x005540,1,
-0x008000,1,
-0x008008,14,
-0x008080,1,
-0x008088,18,
-0x008100,9,
-0x008134,2,
-0x00814c,4,
-0x00816c,6,
-0x00818c,8,
-0x0081b0,1,
-0x008200,2,
-0x00820c,1,
-0x008214,13,
-0x008254,5,
-0x00826c,7,
-0x0082a8,3,
-0x0082c0,8,
-0x008300,6,
-0x008380,3,
-0x0083a0,14,
-0x0083e0,9,
+0x004f60,4,
+0x004f80,8,
+0x004fb8,8,
+0x004fdc,10,
+0x005008,14,
+0x005080,1,
+0x005088,18,
+0x005100,9,
+0x005134,2,
+0x00514c,4,
+0x00516c,11,
+0x0051ac,8,
+0x0051d0,1,
+0x005204,1,
+0x00520c,13,
+0x005244,1,
+0x005254,3,
+0x005264,1,
+0x00526c,8,
+0x0052a8,3,
+0x0052c0,8,
+0x005300,6,
+0x005360,4,
+0x005380,8,
+0x0053b8,8,
+0x0053dc,10,
+0x005428,1,
+0x005450,1,
+0x005478,1,
+0x0054a0,1,
+0x0055ac,1,
+0x0055d8,4,
+0x005600,6,
+0x005620,6,
+0x005640,3,
+0x005800,13,
+0x005840,6,
+0x005860,3,
+0x005880,2,
+0x005904,2,
+0x005918,1,
+0x005940,1,
+0x008400,1,
 0x008408,14,
 0x008480,1,
 0x008488,18,
 0x008500,9,
 0x008534,2,
 0x00854c,4,
-0x00856c,6,
-0x00858c,8,
-0x0085b0,1,
-0x008600,2,
-0x00860c,1,
-0x008614,13,
-0x008654,5,
-0x00866c,7,
+0x00856c,11,
+0x0085ac,8,
+0x0085d0,1,
+0x008604,1,
+0x00860c,13,
+0x008644,1,
+0x008654,3,
+0x008664,1,
+0x00866c,8,
 0x0086a8,3,
 0x0086c0,8,
 0x008700,6,
-0x008780,3,
-0x0087a0,14,
-0x0087e0,9,
+0x008760,4,
+0x008780,8,
+0x0087b8,8,
+0x0087dc,10,
 0x008808,14,
 0x008880,1,
 0x008888,18,
 0x008900,9,
 0x008934,2,
 0x00894c,4,
-0x00896c,6,
-0x00898c,8,
-0x0089b0,1,
-0x008a00,2,
-0x008a0c,1,
-0x008a14,13,
-0x008a54,5,
-0x008a6c,7,
+0x00896c,11,
+0x0089ac,8,
+0x0089d0,1,
+0x008a04,1,
+0x008a0c,13,
+0x008a44,1,
+0x008a54,3,
+0x008a64,1,
+0x008a6c,8,
 0x008aa8,3,
 0x008ac0,8,
 0x008b00,6,
-0x008b80,3,
-0x008ba0,14,
-0x008be0,9,
+0x008b60,4,
+0x008b80,8,
+0x008bb8,8,
+0x008bdc,10,
 0x008c08,14,
 0x008c80,1,
 0x008c88,18,
 0x008d00,9,
 0x008d34,2,
 0x008d4c,4,
-0x008d6c,6,
-0x008d8c,8,
-0x008db0,1,
-0x008e00,2,
-0x008e0c,1,
-0x008e14,13,
-0x008e54,5,
-0x008e6c,7,
+0x008d6c,11,
+0x008dac,8,
+0x008dd0,1,
+0x008e04,1,
+0x008e0c,13,
+0x008e44,1,
+0x008e54,3,
+0x008e64,1,
+0x008e6c,8,
 0x008ea8,3,
 0x008ec0,8,
 0x008f00,6,
-0x008f80,3,
-0x008fa0,14,
-0x008fe0,9,
+0x008f60,4,
+0x008f80,8,
+0x008fb8,8,
+0x008fdc,10,
 0x009008,14,
 0x009080,1,
 0x009088,18,
 0x009100,9,
 0x009134,2,
 0x00914c,4,
-0x00916c,6,
-0x00918c,8,
-0x0091b0,1,
-0x009200,2,
-0x00920c,1,
-0x009214,13,
-0x009254,5,
-0x00926c,7,
+0x00916c,11,
+0x0091ac,8,
+0x0091d0,1,
+0x009204,1,
+0x00920c,13,
+0x009244,1,
+0x009254,3,
+0x009264,1,
+0x00926c,8,
 0x0092a8,3,
 0x0092c0,8,
 0x009300,6,
-0x009380,3,
-0x0093a0,14,
-0x0093e0,9,
+0x009360,4,
+0x009380,8,
+0x0093b8,8,
+0x0093dc,10,
 0x009408,14,
 0x009480,1,
 0x009488,18,
 0x009500,9,
 0x009534,2,
 0x00954c,4,
-0x00956c,6,
-0x00958c,8,
-0x0095b0,1,
-0x009600,2,
-0x00960c,1,
-0x009614,13,
-0x009654,5,
-0x00966c,7,
+0x00956c,11,
+0x0095ac,8,
+0x0095d0,1,
+0x009604,1,
+0x00960c,13,
+0x009644,1,
+0x009654,3,
+0x009664,1,
+0x00966c,8,
 0x0096a8,3,
 0x0096c0,8,
 0x009700,6,
-0x009780,3,
-0x0097a0,14,
-0x0097e0,9,
+0x009760,4,
+0x009780,8,
+0x0097b8,8,
+0x0097dc,10,
 0x009808,14,
 0x009880,1,
 0x009888,18,
 0x009900,9,
 0x009934,2,
 0x00994c,4,
-0x00996c,6,
-0x00998c,8,
-0x0099b0,1,
-0x009a00,2,
-0x009a0c,1,
-0x009a14,13,
-0x009a54,5,
-0x009a6c,7,
+0x00996c,11,
+0x0099ac,8,
+0x0099d0,1,
+0x009a04,1,
+0x009a0c,13,
+0x009a44,1,
+0x009a54,3,
+0x009a64,1,
+0x009a6c,8,
 0x009aa8,3,
 0x009ac0,8,
 0x009b00,6,
-0x009b80,3,
-0x009ba0,14,
-0x009be0,9,
+0x009b60,4,
+0x009b80,8,
+0x009bb8,8,
+0x009bdc,10,
 0x009c08,14,
 0x009c80,1,
 0x009c88,18,
 0x009d00,9,
 0x009d34,2,
 0x009d4c,4,
-0x009d6c,6,
-0x009d8c,8,
-0x009db0,1,
-0x009e00,2,
-0x009e0c,1,
-0x009e14,13,
-0x009e54,5,
-0x009e6c,7,
+0x009d6c,11,
+0x009dac,8,
+0x009dd0,1,
+0x009e04,1,
+0x009e0c,13,
+0x009e44,1,
+0x009e54,3,
+0x009e64,1,
+0x009e6c,8,
 0x009ea8,3,
 0x009ec0,8,
 0x009f00,6,
-0x009f80,3,
-0x009fa0,14,
-0x009fe0,9,
+0x009f60,4,
+0x009f80,8,
+0x009fb8,8,
+0x009fdc,10,
 0x00a008,14,
 0x00a080,1,
 0x00a088,18,
 0x00a100,9,
 0x00a134,2,
 0x00a14c,4,
-0x00a16c,6,
-0x00a18c,8,
-0x00a1b0,1,
-0x00a200,2,
-0x00a20c,1,
-0x00a214,13,
-0x00a254,5,
-0x00a26c,7,
+0x00a16c,11,
+0x00a1ac,8,
+0x00a1d0,1,
+0x00a204,1,
+0x00a20c,13,
+0x00a244,1,
+0x00a254,3,
+0x00a264,1,
+0x00a26c,8,
 0x00a2a8,3,
 0x00a2c0,8,
 0x00a300,6,
-0x00a380,3,
-0x00a3a0,14,
-0x00a3e0,9,
+0x00a360,4,
+0x00a380,8,
+0x00a3b8,8,
+0x00a3dc,10,
 0x00a408,14,
 0x00a480,1,
 0x00a488,18,
 0x00a500,9,
 0x00a534,2,
 0x00a54c,4,
-0x00a56c,6,
-0x00a58c,8,
-0x00a5b0,1,
-0x00a600,2,
-0x00a60c,1,
-0x00a614,13,
-0x00a654,5,
-0x00a66c,7,
+0x00a56c,11,
+0x00a5ac,8,
+0x00a5d0,1,
+0x00a604,1,
+0x00a60c,13,
+0x00a644,1,
+0x00a654,3,
+0x00a664,1,
+0x00a66c,8,
 0x00a6a8,3,
 0x00a6c0,8,
 0x00a700,6,
-0x00a780,3,
-0x00a7a0,14,
-0x00a7e0,9,
+0x00a760,4,
+0x00a780,8,
+0x00a7b8,8,
+0x00a7dc,10,
 0x00a808,14,
 0x00a880,1,
 0x00a888,18,
 0x00a900,9,
 0x00a934,2,
 0x00a94c,4,
-0x00a96c,6,
-0x00a98c,8,
-0x00a9b0,1,
-0x00aa00,2,
-0x00aa0c,1,
-0x00aa14,13,
-0x00aa54,5,
-0x00aa6c,7,
+0x00a96c,11,
+0x00a9ac,8,
+0x00a9d0,1,
+0x00aa04,1,
+0x00aa0c,13,
+0x00aa44,1,
+0x00aa54,3,
+0x00aa64,1,
+0x00aa6c,8,
 0x00aaa8,3,
 0x00aac0,8,
 0x00ab00,6,
-0x00ab80,3,
-0x00aba0,14,
-0x00abe0,9,
+0x00ab60,4,
+0x00ab80,8,
+0x00abb8,8,
+0x00abdc,10,
 0x00ac08,14,
 0x00ac80,1,
 0x00ac88,18,
 0x00ad00,9,
 0x00ad34,2,
 0x00ad4c,4,
-0x00ad6c,6,
-0x00ad8c,8,
-0x00adb0,1,
-0x00ae00,2,
-0x00ae0c,1,
-0x00ae14,13,
-0x00ae54,5,
-0x00ae6c,7,
+0x00ad6c,11,
+0x00adac,8,
+0x00add0,1,
+0x00ae04,1,
+0x00ae0c,13,
+0x00ae44,1,
+0x00ae54,3,
+0x00ae64,1,
+0x00ae6c,8,
 0x00aea8,3,
 0x00aec0,8,
 0x00af00,6,
-0x00af80,3,
-0x00afa0,14,
-0x00afe0,9,
+0x00af60,4,
+0x00af80,8,
+0x00afb8,8,
+0x00afdc,10,
 0x00b008,14,
 0x00b080,1,
 0x00b088,18,
 0x00b100,9,
 0x00b134,2,
 0x00b14c,4,
-0x00b16c,6,
-0x00b18c,8,
-0x00b1b0,1,
-0x00b200,2,
-0x00b20c,1,
-0x00b214,13,
-0x00b254,5,
-0x00b26c,7,
+0x00b16c,11,
+0x00b1ac,8,
+0x00b1d0,1,
+0x00b204,1,
+0x00b20c,13,
+0x00b244,1,
+0x00b254,3,
+0x00b264,1,
+0x00b26c,8,
 0x00b2a8,3,
 0x00b2c0,8,
 0x00b300,6,
-0x00b380,3,
-0x00b3a0,14,
-0x00b3e0,9,
+0x00b360,4,
+0x00b380,8,
+0x00b3b8,8,
+0x00b3dc,10,
 0x00b408,14,
 0x00b480,1,
 0x00b488,18,
 0x00b500,9,
 0x00b534,2,
 0x00b54c,4,
-0x00b56c,6,
-0x00b58c,8,
-0x00b5b0,1,
-0x00b600,2,
-0x00b60c,1,
-0x00b614,13,
-0x00b654,5,
-0x00b66c,7,
+0x00b56c,11,
+0x00b5ac,8,
+0x00b5d0,1,
+0x00b604,1,
+0x00b60c,13,
+0x00b644,1,
+0x00b654,3,
+0x00b664,1,
+0x00b66c,8,
 0x00b6a8,3,
 0x00b6c0,8,
 0x00b700,6,
-0x00b780,3,
-0x00b7a0,14,
-0x00b7e0,9,
+0x00b760,4,
+0x00b780,8,
+0x00b7b8,8,
+0x00b7dc,10,
 0x00b808,14,
 0x00b880,1,
 0x00b888,18,
 0x00b900,9,
 0x00b934,2,
 0x00b94c,4,
-0x00b96c,6,
-0x00b98c,8,
-0x00b9b0,1,
-0x00ba00,2,
-0x00ba0c,1,
-0x00ba14,13,
-0x00ba54,5,
-0x00ba6c,7,
+0x00b96c,11,
+0x00b9ac,8,
+0x00b9d0,1,
+0x00ba04,1,
+0x00ba0c,13,
+0x00ba44,1,
+0x00ba54,3,
+0x00ba64,1,
+0x00ba6c,8,
 0x00baa8,3,
 0x00bac0,8,
 0x00bb00,6,
-0x00bb80,3,
-0x00bba0,14,
-0x00bbe0,9,
+0x00bb60,4,
+0x00bb80,8,
+0x00bbb8,8,
+0x00bbdc,10,
 0x00bc08,14,
 0x00bc80,1,
 0x00bc88,18,
 0x00bd00,9,
 0x00bd34,2,
 0x00bd4c,4,
-0x00bd6c,6,
-0x00bd8c,8,
-0x00bdb0,1,
-0x00be00,2,
-0x00be0c,1,
-0x00be14,13,
-0x00be54,5,
-0x00be6c,7,
+0x00bd6c,11,
+0x00bdac,8,
+0x00bdd0,1,
+0x00be04,1,
+0x00be0c,13,
+0x00be44,1,
+0x00be54,3,
+0x00be64,1,
+0x00be6c,8,
 0x00bea8,3,
 0x00bec0,8,
 0x00bf00,6,
-0x00bf80,3,
-0x00bfa0,14,
-0x00bfe0,9,
+0x00bf60,4,
+0x00bf80,8,
+0x00bfb8,8,
+0x00bfdc,10,
 0x00c008,14,
 0x00c080,1,
 0x00c088,18,
 0x00c100,9,
 0x00c134,2,
 0x00c14c,4,
-0x00c16c,6,
-0x00c18c,8,
-0x00c1b0,1,
-0x00c200,2,
-0x00c20c,1,
-0x00c214,13,
-0x00c254,5,
-0x00c26c,7,
+0x00c16c,11,
+0x00c1ac,8,
+0x00c1d0,1,
+0x00c204,1,
+0x00c20c,13,
+0x00c244,1,
+0x00c254,3,
+0x00c264,1,
+0x00c26c,8,
 0x00c2a8,3,
 0x00c2c0,8,
 0x00c300,6,
-0x00c380,3,
-0x00c3a0,14,
-0x00c3e0,9,
+0x00c360,4,
+0x00c380,8,
+0x00c3b8,8,
+0x00c3dc,10,
 0x00c408,14,
 0x00c480,1,
 0x00c488,18,
 0x00c500,9,
 0x00c534,2,
 0x00c54c,4,
-0x00c56c,6,
-0x00c58c,8,
-0x00c5b0,1,
-0x00c600,2,
-0x00c60c,1,
-0x00c614,13,
-0x00c654,5,
-0x00c66c,7,
+0x00c56c,11,
+0x00c5ac,8,
+0x00c5d0,1,
+0x00c604,1,
+0x00c60c,13,
+0x00c644,1,
+0x00c654,3,
+0x00c664,1,
+0x00c66c,8,
 0x00c6a8,3,
 0x00c6c0,8,
 0x00c700,6,
-0x00c780,3,
-0x00c7a0,14,
-0x00c7e0,9,
+0x00c760,4,
+0x00c780,8,
+0x00c7b8,8,
+0x00c7dc,10,
 0x00c808,14,
 0x00c880,1,
 0x00c888,18,
 0x00c900,9,
 0x00c934,2,
 0x00c94c,4,
-0x00c96c,6,
-0x00c98c,8,
-0x00c9b0,1,
-0x00ca00,2,
-0x00ca0c,1,
-0x00ca14,13,
-0x00ca54,5,
-0x00ca6c,7,
+0x00c96c,11,
+0x00c9ac,8,
+0x00c9d0,1,
+0x00ca04,1,
+0x00ca0c,13,
+0x00ca44,1,
+0x00ca54,3,
+0x00ca64,1,
+0x00ca6c,8,
 0x00caa8,3,
 0x00cac0,8,
 0x00cb00,6,
-0x00cb80,3,
-0x00cba0,14,
-0x00cbe0,9,
+0x00cb60,4,
+0x00cb80,8,
+0x00cbb8,8,
+0x00cbdc,10,
 0x00cc08,14,
 0x00cc80,1,
 0x00cc88,18,
 0x00cd00,9,
 0x00cd34,2,
 0x00cd4c,4,
-0x00cd6c,6,
-0x00cd8c,8,
-0x00cdb0,1,
-0x00ce00,2,
-0x00ce0c,1,
-0x00ce14,13,
-0x00ce54,5,
-0x00ce6c,7,
+0x00cd6c,11,
+0x00cdac,8,
+0x00cdd0,1,
+0x00ce04,1,
+0x00ce0c,13,
+0x00ce44,1,
+0x00ce54,3,
+0x00ce64,1,
+0x00ce6c,8,
 0x00cea8,3,
 0x00cec0,8,
 0x00cf00,6,
-0x00cf80,3,
-0x00cfa0,14,
-0x00cfe0,9,
-0x00d018,1,
-0x00d034,1,
-0x00d12c,1,
-0x00d190,1,
-0x00d1ac,1,
-0x00d1d8,4,
-0x00d200,8,
-0x00d400,13,
-0x00d460,3,
-0x00d470,2,
-0x00d504,2,
-0x00d518,1,
-0x00d540,1,
+0x00cf60,4,
+0x00cf80,8,
+0x00cfb8,8,
+0x00cfdc,10,
+0x00d008,14,
+0x00d080,1,
+0x00d088,18,
+0x00d100,9,
+0x00d134,2,
+0x00d14c,4,
+0x00d16c,11,
+0x00d1ac,8,
+0x00d1d0,1,
+0x00d204,1,
+0x00d20c,13,
+0x00d244,1,
+0x00d254,3,
+0x00d264,1,
+0x00d26c,8,
+0x00d2a8,3,
+0x00d2c0,8,
+0x00d300,6,
+0x00d360,4,
+0x00d380,8,
+0x00d3b8,8,
+0x00d3dc,10,
+0x00d428,1,
+0x00d450,1,
+0x00d478,1,
+0x00d4a0,1,
+0x00d5ac,1,
+0x00d5d8,4,
+0x00d600,6,
+0x00d620,6,
+0x00d640,3,
+0x00d800,13,
+0x00d840,6,
+0x00d860,3,
+0x00d880,2,
+0x00d904,2,
+0x00d918,1,
+0x00d940,1,
 0x010000,1,
 0x010008,10,
 0x010034,16,
-0x010080,37,
+0x010080,33,
+0x010110,5,
 0x010128,2,
 0x010134,1,
-0x01013c,10,
-0x010168,4,
-0x01017c,3,
-0x01018c,10,
-0x0101c0,6,
-0x0101e0,1,
+0x01013c,13,
+0x010174,1,
+0x01017c,7,
+0x0101a0,17,
+0x0101e8,3,
 0x010200,1,
 0x010208,10,
 0x010234,16,
-0x010280,37,
+0x010280,33,
+0x010310,5,
 0x010328,2,
 0x010334,1,
-0x01033c,10,
-0x010368,4,
-0x01037c,3,
-0x01038c,10,
-0x0103c0,6,
-0x0103e0,1,
+0x01033c,13,
+0x010374,1,
+0x01037c,7,
+0x0103a0,17,
+0x0103e8,3,
 0x010400,1,
 0x010408,10,
 0x010434,16,
-0x010480,37,
+0x010480,33,
+0x010510,5,
 0x010528,2,
 0x010534,1,
-0x01053c,10,
-0x010568,4,
-0x01057c,3,
-0x01058c,10,
-0x0105c0,6,
-0x0105e0,1,
+0x01053c,13,
+0x010574,1,
+0x01057c,7,
+0x0105a0,17,
+0x0105e8,3,
 0x010600,1,
 0x010608,10,
 0x010634,16,
-0x010680,37,
+0x010680,33,
+0x010710,5,
 0x010728,2,
 0x010734,1,
-0x01073c,10,
-0x010768,4,
-0x01077c,3,
-0x01078c,10,
-0x0107c0,6,
-0x0107e0,1,
+0x01073c,13,
+0x010774,1,
+0x01077c,7,
+0x0107a0,17,
+0x0107e8,3,
 0x010800,1,
 0x010808,10,
 0x010834,16,
-0x010880,37,
+0x010880,33,
+0x010910,5,
 0x010928,2,
 0x010934,1,
-0x01093c,10,
-0x010968,4,
-0x01097c,3,
-0x01098c,10,
-0x0109c0,6,
-0x0109e0,1,
+0x01093c,13,
+0x010974,1,
+0x01097c,7,
+0x0109a0,17,
+0x0109e8,3,
 0x010a00,1,
 0x010a08,10,
 0x010a34,16,
-0x010a80,37,
+0x010a80,33,
+0x010b10,5,
 0x010b28,2,
 0x010b34,1,
-0x010b3c,10,
-0x010b68,4,
-0x010b7c,3,
-0x010b8c,10,
-0x010bc0,6,
-0x010be0,1,
+0x010b3c,13,
+0x010b74,1,
+0x010b7c,7,
+0x010ba0,17,
+0x010be8,3,
 0x010c00,1,
 0x010c08,10,
 0x010c34,16,
-0x010c80,37,
+0x010c80,33,
+0x010d10,5,
 0x010d28,2,
 0x010d34,1,
-0x010d3c,10,
-0x010d68,4,
-0x010d7c,3,
-0x010d8c,10,
-0x010dc0,6,
-0x010de0,1,
+0x010d3c,13,
+0x010d74,1,
+0x010d7c,7,
+0x010da0,17,
+0x010de8,3,
 0x010e00,1,
 0x010e08,10,
 0x010e34,16,
-0x010e80,37,
+0x010e80,33,
+0x010f10,5,
 0x010f28,2,
 0x010f34,1,
-0x010f3c,10,
-0x010f68,4,
-0x010f7c,3,
-0x010f8c,10,
-0x010fc0,6,
-0x010fe0,1,
+0x010f3c,13,
+0x010f74,1,
+0x010f7c,7,
+0x010fa0,17,
+0x010fe8,3,
 0x011000,1,
 0x011008,10,
 0x011034,16,
-0x011080,37,
+0x011080,33,
+0x011110,5,
 0x011128,2,
 0x011134,1,
-0x01113c,10,
-0x011168,4,
-0x01117c,3,
-0x01118c,10,
-0x0111c0,6,
-0x0111e0,1,
+0x01113c,13,
+0x011174,1,
+0x01117c,7,
+0x0111a0,17,
+0x0111e8,3,
 0x011200,1,
 0x011208,10,
 0x011234,16,
-0x011280,37,
+0x011280,33,
+0x011310,5,
 0x011328,2,
 0x011334,1,
-0x01133c,10,
-0x011368,4,
-0x01137c,3,
-0x01138c,10,
-0x0113c0,6,
-0x0113e0,1,
+0x01133c,13,
+0x011374,1,
+0x01137c,7,
+0x0113a0,17,
+0x0113e8,3,
 0x011400,1,
 0x011408,10,
 0x011434,16,
-0x011480,37,
+0x011480,33,
+0x011510,5,
 0x011528,2,
 0x011534,1,
-0x01153c,10,
-0x011568,4,
-0x01157c,3,
-0x01158c,10,
-0x0115c0,6,
-0x0115e0,1,
+0x01153c,13,
+0x011574,1,
+0x01157c,7,
+0x0115a0,17,
+0x0115e8,3,
 0x011600,1,
 0x011608,10,
 0x011634,16,
-0x011680,37,
+0x011680,33,
+0x011710,5,
 0x011728,2,
 0x011734,1,
-0x01173c,10,
-0x011768,4,
-0x01177c,3,
-0x01178c,10,
-0x0117c0,6,
-0x0117e0,1,
+0x01173c,13,
+0x011774,1,
+0x01177c,7,
+0x0117a0,17,
+0x0117e8,3,
 0x011800,1,
 0x011808,10,
 0x011834,16,
-0x011880,37,
+0x011880,33,
+0x011910,5,
 0x011928,2,
 0x011934,1,
-0x01193c,10,
-0x011968,4,
-0x01197c,3,
-0x01198c,10,
-0x0119c0,6,
-0x0119e0,1,
+0x01193c,13,
+0x011974,1,
+0x01197c,7,
+0x0119a0,17,
+0x0119e8,3,
 0x011a00,1,
 0x011a08,10,
 0x011a34,16,
-0x011a80,37,
+0x011a80,33,
+0x011b10,5,
 0x011b28,2,
 0x011b34,1,
-0x011b3c,10,
-0x011b68,4,
-0x011b7c,3,
-0x011b8c,10,
-0x011bc0,6,
-0x011be0,1,
+0x011b3c,13,
+0x011b74,1,
+0x011b7c,7,
+0x011ba0,17,
+0x011be8,3,
 0x011c00,1,
 0x011c08,10,
 0x011c34,16,
-0x011c80,37,
+0x011c80,33,
+0x011d10,5,
 0x011d28,2,
 0x011d34,1,
-0x011d3c,10,
-0x011d68,4,
-0x011d7c,3,
-0x011d8c,10,
-0x011dc0,6,
-0x011de0,1,
+0x011d3c,13,
+0x011d74,1,
+0x011d7c,7,
+0x011da0,17,
+0x011de8,3,
 0x011e00,1,
 0x011e08,10,
 0x011e34,16,
-0x011e80,37,
+0x011e80,33,
+0x011f10,5,
 0x011f28,2,
 0x011f34,1,
-0x011f3c,10,
-0x011f68,4,
-0x011f7c,3,
-0x011f8c,10,
-0x011fc0,6,
-0x011fe0,1,
+0x011f3c,13,
+0x011f74,1,
+0x011f7c,7,
+0x011fa0,17,
+0x011fe8,3,
 0x012000,1,
 0x012008,10,
 0x012034,16,
-0x012080,37,
+0x012080,33,
+0x012110,5,
 0x012128,2,
 0x012134,1,
-0x01213c,10,
-0x012168,4,
-0x01217c,3,
-0x01218c,10,
-0x0121c0,6,
-0x0121e0,1,
+0x01213c,13,
+0x012174,1,
+0x01217c,7,
+0x0121a0,17,
+0x0121e8,3,
 0x012200,1,
 0x012208,10,
 0x012234,16,
-0x012280,37,
+0x012280,33,
+0x012310,5,
 0x012328,2,
 0x012334,1,
-0x01233c,10,
-0x012368,4,
-0x01237c,3,
-0x01238c,10,
-0x0123c0,6,
-0x0123e0,1,
+0x01233c,13,
+0x012374,1,
+0x01237c,7,
+0x0123a0,17,
+0x0123e8,3,
 0x012800,2,
 0x01280c,37,
 0x0128a4,64,
-0x012a00,52,
-0x012ad4,2,
-0x012ae4,38,
-0x012bac,1,
-0x012bb4,1,
-0x012bbc,4,
-0x012bd0,2,
-0x012bdc,2,
-0x012c00,6,
-0x012c20,6,
-0x012c40,6,
-0x012c60,6,
-0x012c80,3,
-0x012d00,10,
-0x012d30,4,
-0x012e00,57,
-0x012f00,1,
+0x012a00,84,
+0x012b54,2,
+0x012b7c,1,
+0x012b84,1,
+0x012b8c,4,
+0x012ba4,1,
+0x012bac,75,
+0x012d00,60,
+0x012dfc,7,
+0x012e20,6,
+0x012e40,6,
+0x012e60,6,
+0x012e80,3,
+0x012f00,14,
+0x012f40,1,
 0x013000,3,
-0x013018,3,
-0x013034,3,
-0x01312c,6,
-0x013190,3,
+0x013028,3,
+0x013050,3,
+0x013078,3,
+0x0130a0,6,
 0x0131ac,1,
 0x0131d8,4,
-0x013200,24,
+0x013200,6,
+0x013220,6,
+0x013240,6,
+0x013260,6,
+0x013280,6,
+0x0132a0,6,
+0x0132c0,3,
 0x013400,6,
 0x013420,3,
-0x013440,2,
+0x013440,3,
 0x013500,13,
 0x013540,1,
 0x013900,1,
 0x014000,1,
 0x014008,10,
 0x014034,16,
-0x014080,37,
+0x014080,33,
+0x014110,5,
 0x014128,2,
 0x014134,1,
-0x01413c,10,
-0x014168,4,
-0x01417c,3,
-0x01418c,10,
-0x0141c0,6,
-0x0141e0,1,
+0x01413c,13,
+0x014174,1,
+0x01417c,7,
+0x0141a0,17,
+0x0141e8,3,
 0x014200,1,
 0x014208,10,
 0x014234,16,
-0x014280,37,
+0x014280,33,
+0x014310,5,
 0x014328,2,
 0x014334,1,
-0x01433c,10,
-0x014368,4,
-0x01437c,3,
-0x01438c,10,
-0x0143c0,6,
-0x0143e0,1,
+0x01433c,13,
+0x014374,1,
+0x01437c,7,
+0x0143a0,17,
+0x0143e8,3,
 0x014400,1,
 0x014408,10,
 0x014434,16,
-0x014480,37,
+0x014480,33,
+0x014510,5,
 0x014528,2,
 0x014534,1,
-0x01453c,10,
-0x014568,4,
-0x01457c,3,
-0x01458c,10,
-0x0145c0,6,
-0x0145e0,1,
+0x01453c,13,
+0x014574,1,
+0x01457c,7,
+0x0145a0,17,
+0x0145e8,3,
 0x014600,1,
 0x014608,10,
 0x014634,16,
-0x014680,37,
+0x014680,33,
+0x014710,5,
 0x014728,2,
 0x014734,1,
-0x01473c,10,
-0x014768,4,
-0x01477c,3,
-0x01478c,10,
-0x0147c0,6,
-0x0147e0,1,
+0x01473c,13,
+0x014774,1,
+0x01477c,7,
+0x0147a0,17,
+0x0147e8,3,
 0x014800,1,
 0x014808,10,
 0x014834,16,
-0x014880,37,
+0x014880,33,
+0x014910,5,
 0x014928,2,
 0x014934,1,
-0x01493c,10,
-0x014968,4,
-0x01497c,3,
-0x01498c,10,
-0x0149c0,6,
-0x0149e0,1,
+0x01493c,13,
+0x014974,1,
+0x01497c,7,
+0x0149a0,17,
+0x0149e8,3,
 0x014a00,1,
 0x014a08,10,
 0x014a34,16,
-0x014a80,37,
+0x014a80,33,
+0x014b10,5,
 0x014b28,2,
 0x014b34,1,
-0x014b3c,10,
-0x014b68,4,
-0x014b7c,3,
-0x014b8c,10,
-0x014bc0,6,
-0x014be0,1,
+0x014b3c,13,
+0x014b74,1,
+0x014b7c,7,
+0x014ba0,17,
+0x014be8,3,
 0x014c00,1,
 0x014c08,10,
 0x014c34,16,
-0x014c80,37,
+0x014c80,33,
+0x014d10,5,
 0x014d28,2,
 0x014d34,1,
-0x014d3c,10,
-0x014d68,4,
-0x014d7c,3,
-0x014d8c,10,
-0x014dc0,6,
-0x014de0,1,
+0x014d3c,13,
+0x014d74,1,
+0x014d7c,7,
+0x014da0,17,
+0x014de8,3,
 0x014e00,1,
 0x014e08,10,
 0x014e34,16,
-0x014e80,37,
+0x014e80,33,
+0x014f10,5,
 0x014f28,2,
 0x014f34,1,
-0x014f3c,10,
-0x014f68,4,
-0x014f7c,3,
-0x014f8c,10,
-0x014fc0,6,
-0x014fe0,1,
+0x014f3c,13,
+0x014f74,1,
+0x014f7c,7,
+0x014fa0,17,
+0x014fe8,3,
 0x015000,1,
 0x015008,10,
 0x015034,16,
-0x015080,37,
+0x015080,33,
+0x015110,5,
 0x015128,2,
 0x015134,1,
-0x01513c,10,
-0x015168,4,
-0x01517c,3,
-0x01518c,10,
-0x0151c0,6,
-0x0151e0,1,
+0x01513c,13,
+0x015174,1,
+0x01517c,7,
+0x0151a0,17,
+0x0151e8,3,
 0x015200,1,
 0x015208,10,
 0x015234,16,
-0x015280,37,
+0x015280,33,
+0x015310,5,
 0x015328,2,
 0x015334,1,
-0x01533c,10,
-0x015368,4,
-0x01537c,3,
-0x01538c,10,
-0x0153c0,6,
-0x0153e0,1,
+0x01533c,13,
+0x015374,1,
+0x01537c,7,
+0x0153a0,17,
+0x0153e8,3,
 0x015400,1,
 0x015408,10,
 0x015434,16,
-0x015480,37,
+0x015480,33,
+0x015510,5,
 0x015528,2,
 0x015534,1,
-0x01553c,10,
-0x015568,4,
-0x01557c,3,
-0x01558c,10,
-0x0155c0,6,
-0x0155e0,1,
+0x01553c,13,
+0x015574,1,
+0x01557c,7,
+0x0155a0,17,
+0x0155e8,3,
 0x015600,1,
 0x015608,10,
 0x015634,16,
-0x015680,37,
+0x015680,33,
+0x015710,5,
 0x015728,2,
 0x015734,1,
-0x01573c,10,
-0x015768,4,
-0x01577c,3,
-0x01578c,10,
-0x0157c0,6,
-0x0157e0,1,
+0x01573c,13,
+0x015774,1,
+0x01577c,7,
+0x0157a0,17,
+0x0157e8,3,
 0x015800,1,
 0x015808,10,
 0x015834,16,
-0x015880,37,
+0x015880,33,
+0x015910,5,
 0x015928,2,
 0x015934,1,
-0x01593c,10,
-0x015968,4,
-0x01597c,3,
-0x01598c,10,
-0x0159c0,6,
-0x0159e0,1,
+0x01593c,13,
+0x015974,1,
+0x01597c,7,
+0x0159a0,17,
+0x0159e8,3,
 0x015a00,1,
 0x015a08,10,
 0x015a34,16,
-0x015a80,37,
+0x015a80,33,
+0x015b10,5,
 0x015b28,2,
 0x015b34,1,
-0x015b3c,10,
-0x015b68,4,
-0x015b7c,3,
-0x015b8c,10,
-0x015bc0,6,
-0x015be0,1,
+0x015b3c,13,
+0x015b74,1,
+0x015b7c,7,
+0x015ba0,17,
+0x015be8,3,
 0x015c00,1,
 0x015c08,10,
 0x015c34,16,
-0x015c80,37,
+0x015c80,33,
+0x015d10,5,
 0x015d28,2,
 0x015d34,1,
-0x015d3c,10,
-0x015d68,4,
-0x015d7c,3,
-0x015d8c,10,
-0x015dc0,6,
-0x015de0,1,
+0x015d3c,13,
+0x015d74,1,
+0x015d7c,7,
+0x015da0,17,
+0x015de8,3,
 0x015e00,1,
 0x015e08,10,
 0x015e34,16,
-0x015e80,37,
+0x015e80,33,
+0x015f10,5,
 0x015f28,2,
 0x015f34,1,
-0x015f3c,10,
-0x015f68,4,
-0x015f7c,3,
-0x015f8c,10,
-0x015fc0,6,
-0x015fe0,1,
+0x015f3c,13,
+0x015f74,1,
+0x015f7c,7,
+0x015fa0,17,
+0x015fe8,3,
 0x016000,1,
 0x016008,10,
 0x016034,16,
-0x016080,37,
+0x016080,33,
+0x016110,5,
 0x016128,2,
 0x016134,1,
-0x01613c,10,
-0x016168,4,
-0x01617c,3,
-0x01618c,10,
-0x0161c0,6,
-0x0161e0,1,
+0x01613c,13,
+0x016174,1,
+0x01617c,7,
+0x0161a0,17,
+0x0161e8,3,
 0x016200,1,
 0x016208,10,
 0x016234,16,
-0x016280,37,
+0x016280,33,
+0x016310,5,
 0x016328,2,
 0x016334,1,
-0x01633c,10,
-0x016368,4,
-0x01637c,3,
-0x01638c,10,
-0x0163c0,6,
-0x0163e0,1,
+0x01633c,13,
+0x016374,1,
+0x01637c,7,
+0x0163a0,17,
+0x0163e8,3,
 0x016800,2,
 0x01680c,37,
 0x0168a4,64,
-0x016a00,52,
-0x016ad4,2,
-0x016ae4,38,
-0x016bac,1,
-0x016bb4,1,
-0x016bbc,4,
-0x016bd0,2,
-0x016bdc,2,
-0x016c00,6,
-0x016c20,6,
-0x016c40,6,
-0x016c60,6,
-0x016c80,3,
-0x016d00,10,
-0x016d30,4,
-0x016e00,57,
-0x016f00,1,
+0x016a00,84,
+0x016b54,2,
+0x016b7c,1,
+0x016b84,1,
+0x016b8c,4,
+0x016ba4,1,
+0x016bac,75,
+0x016d00,60,
+0x016dfc,7,
+0x016e20,6,
+0x016e40,6,
+0x016e60,6,
+0x016e80,3,
+0x016f00,14,
+0x016f40,1,
 0x017000,3,
-0x017018,3,
-0x017034,3,
-0x01712c,6,
-0x017190,3,
+0x017028,3,
+0x017050,3,
+0x017078,3,
+0x0170a0,6,
 0x0171ac,1,
 0x0171d8,4,
-0x017200,24,
+0x017200,6,
+0x017220,6,
+0x017240,6,
+0x017260,6,
+0x017280,6,
+0x0172a0,6,
+0x0172c0,3,
 0x017400,6,
 0x017420,3,
-0x017440,2,
+0x017440,3,
 0x017500,13,
 0x017540,1,
 0x017900,1,
-0x018000,6,
-0x018020,4,
-0x018040,6,
-0x018060,4,
-0x018080,6,
-0x0180a0,4,
-0x0180c0,6,
-0x0180e0,4,
-0x018100,6,
-0x018120,4,
-0x018140,6,
-0x018160,4,
-0x018180,6,
-0x0181a0,4,
-0x0181c0,6,
-0x0181e0,4,
-0x018200,6,
-0x018220,4,
-0x018240,6,
-0x018260,4,
-0x018280,6,
-0x0182a0,4,
-0x0182c0,6,
-0x0182e0,4,
-0x018300,6,
-0x018320,4,
-0x018340,6,
-0x018360,4,
-0x018380,6,
-0x0183a0,4,
-0x0183c0,6,
-0x0183e0,4,
-0x018400,6,
-0x018420,4,
-0x018440,6,
-0x018460,4,
-0x018480,6,
-0x0184a0,4,
-0x0184c0,6,
-0x0184e0,4,
-0x018500,6,
-0x018520,4,
-0x018540,6,
-0x018560,4,
-0x018580,6,
-0x0185a0,4,
-0x0185c0,6,
-0x0185e0,4,
-0x018600,6,
-0x018620,4,
-0x018640,6,
-0x018660,4,
-0x018680,6,
-0x0186a0,4,
-0x0186c0,6,
-0x0186e0,4,
-0x018700,6,
-0x018720,4,
-0x018740,6,
-0x018760,4,
-0x018780,6,
-0x0187a0,4,
-0x0187c0,6,
-0x0187e0,4,
-0x018800,6,
-0x018820,4,
-0x018840,6,
-0x018860,4,
-0x018880,6,
-0x0188a0,4,
-0x0188c0,6,
-0x0188e0,4,
-0x018900,6,
-0x018920,4,
-0x018940,6,
-0x018960,4,
-0x018980,6,
-0x0189a0,4,
-0x0189c0,6,
-0x0189e0,4,
-0x019000,7,
-0x019020,1,
-0x019040,7,
-0x019060,1,
-0x019080,7,
-0x0190a0,1,
-0x0190c0,7,
-0x0190e0,1,
-0x019100,7,
-0x019120,1,
-0x019140,7,
-0x019160,1,
-0x019180,7,
-0x0191a0,1,
-0x0191c0,7,
-0x0191e0,1,
-0x019200,7,
-0x019220,1,
-0x019240,7,
-0x019260,1,
-0x019280,7,
-0x0192a0,1,
-0x0192c0,7,
-0x0192e0,1,
-0x019300,7,
-0x019320,1,
-0x019340,7,
-0x019360,1,
-0x019380,7,
-0x0193a0,1,
-0x0193c0,7,
-0x0193e0,1,
-0x019400,7,
-0x019420,1,
-0x019440,7,
-0x019460,1,
-0x019480,7,
-0x0194a0,1,
-0x0194c0,7,
-0x0194e0,1,
-0x019500,7,
-0x019520,1,
-0x019540,7,
-0x019560,1,
-0x019580,7,
-0x0195a0,1,
-0x0195c0,7,
-0x0195e0,1,
-0x019600,7,
-0x019620,1,
-0x019640,7,
-0x019660,1,
-0x019680,7,
-0x0196a0,1,
-0x0196c0,7,
-0x0196e0,1,
-0x019700,7,
-0x019720,1,
-0x019740,7,
-0x019760,1,
-0x019780,7,
-0x0197a0,1,
-0x0197c0,7,
-0x0197e0,1,
-0x019800,7,
-0x019820,1,
-0x019840,7,
-0x019860,1,
-0x019880,7,
-0x0198a0,1,
-0x0198c0,7,
-0x0198e0,1,
-0x019900,6,
+0x018000,9,
+0x018030,8,
+0x018080,9,
+0x0180b0,8,
+0x018100,9,
+0x018130,8,
+0x018180,9,
+0x0181b0,8,
+0x018200,9,
+0x018230,8,
+0x018280,9,
+0x0182b0,8,
+0x018300,9,
+0x018330,8,
+0x018380,9,
+0x0183b0,8,
+0x018400,9,
+0x018430,8,
+0x018480,9,
+0x0184b0,8,
+0x018500,9,
+0x018530,8,
+0x018580,9,
+0x0185b0,8,
+0x018600,9,
+0x018630,8,
+0x018680,9,
+0x0186b0,8,
+0x018700,9,
+0x018730,8,
+0x018780,9,
+0x0187b0,8,
+0x018800,9,
+0x018830,8,
+0x018880,9,
+0x0188b0,8,
+0x018900,9,
+0x018930,8,
+0x018980,9,
+0x0189b0,8,
+0x018a00,9,
+0x018a30,8,
+0x018a80,9,
+0x018ab0,8,
+0x018b00,9,
+0x018b30,8,
+0x018b80,9,
+0x018bb0,8,
+0x018c00,9,
+0x018c30,8,
+0x018c80,9,
+0x018cb0,8,
+0x018d00,9,
+0x018d30,8,
+0x018d80,9,
+0x018db0,8,
+0x018e00,9,
+0x018e30,8,
+0x018e80,9,
+0x018eb0,8,
+0x018f00,9,
+0x018f30,8,
+0x018f80,9,
+0x018fb0,8,
+0x019000,9,
+0x019030,8,
+0x019080,9,
+0x0190b0,8,
+0x019100,9,
+0x019130,8,
+0x019180,9,
+0x0191b0,8,
+0x019200,6,
+0x019220,3,
+0x019230,10,
+0x019260,3,
+0x019270,10,
+0x0192a0,3,
+0x0192b0,10,
+0x0192e0,3,
+0x0192f0,10,
+0x019320,3,
+0x019330,10,
+0x019360,3,
+0x019370,10,
+0x0193a0,3,
+0x0193b0,10,
+0x0193e0,3,
+0x0193f0,10,
+0x019420,3,
+0x019430,10,
+0x019460,3,
+0x019470,10,
+0x0194a0,3,
+0x0194b0,10,
+0x0194e0,3,
+0x0194f0,10,
+0x019520,3,
+0x019530,10,
+0x019560,3,
+0x019570,10,
+0x0195a0,3,
+0x0195b0,10,
+0x0195e0,3,
+0x0195f0,10,
+0x019620,3,
+0x019630,10,
+0x019660,3,
+0x019670,10,
+0x0196a0,3,
+0x0196b0,10,
+0x0196e0,3,
+0x0196f0,10,
+0x019720,3,
+0x019730,10,
+0x019760,3,
+0x019770,10,
+0x0197a0,3,
+0x0197b0,10,
+0x0197e0,3,
+0x0197f0,10,
+0x019820,3,
+0x019830,10,
+0x019860,3,
+0x019870,10,
+0x0198a0,3,
+0x0198b0,10,
+0x0198e0,3,
+0x0198f0,10,
 0x019920,3,
-0x019980,3,
-0x0199ac,1,
-0x0199c0,3,
-0x0199d0,3,
-0x0199fc,5,
-0x019ff4,41,
-0x01a100,37,
-0x01a200,18,
-0x01b400,2,
-0x01c000,12,
-0x01c03c,13,
-0x01c07c,13,
-0x01c0bc,13,
-0x01c0fc,13,
-0x01c13c,13,
-0x01c17c,13,
-0x01c1bc,13,
-0x01c1fc,13,
-0x01c23c,13,
-0x01c27c,13,
-0x01c2bc,13,
-0x01c2fc,13,
-0x01c33c,13,
-0x01c37c,13,
-0x01c3bc,13,
-0x01c3fc,13,
-0x01c43c,13,
-0x01c47c,13,
-0x01c4bc,13,
-0x01c4fc,13,
-0x01c53c,13,
-0x01c57c,13,
-0x01c5bc,13,
-0x01c5fc,13,
-0x01c63c,13,
-0x01c67c,13,
-0x01c6bc,13,
-0x01c6fc,13,
-0x01c73c,13,
-0x01c77c,13,
-0x01c7bc,13,
-0x01c7fc,13,
-0x01c83c,13,
-0x01c87c,13,
-0x01c8bc,13,
-0x01c8fc,1,
-0x01ca00,2,
-0x01ca1c,3,
-0x01ca3c,3,
-0x01ca5c,3,
-0x01ca7c,3,
-0x01ca9c,3,
-0x01cabc,3,
-0x01cadc,3,
-0x01cafc,3,
-0x01cb1c,3,
-0x01cb3c,3,
-0x01cb5c,3,
-0x01cb7c,3,
-0x01cb9c,3,
-0x01cbbc,3,
-0x01cbdc,3,
-0x01cbfc,3,
-0x01cc1c,3,
-0x01cc3c,3,
-0x01cc5c,3,
-0x01cc7c,3,
-0x01cc9c,3,
-0x01ccbc,3,
-0x01ccdc,3,
-0x01ccfc,3,
-0x01cd1c,3,
-0x01cd3c,3,
-0x01cd5c,3,
-0x01cd7c,3,
-0x01cd9c,3,
-0x01cdbc,3,
-0x01cddc,3,
-0x01cdfc,3,
-0x01ce1c,3,
-0x01ce3c,3,
-0x01ce5c,3,
-0x01ce7c,14,
-0x01cec0,1,
-0x01f3ec,1,
-0x01f3fc,12,
-0x01f440,2,
-0x01f45c,1,
+0x019930,10,
+0x019960,3,
+0x019970,10,
+0x0199a0,3,
+0x0199b0,10,
+0x0199e0,3,
+0x0199f0,10,
+0x019a20,3,
+0x019a30,10,
+0x019a60,3,
+0x019a70,10,
+0x019aa0,3,
+0x019ab0,10,
+0x019ae0,3,
+0x019af0,4,
+0x01a400,13,
+0x01a440,6,
+0x01a460,3,
+0x01a480,8,
+0x01a4b0,7,
+0x01a4d0,3,
+0x01a500,6,
+0x01a520,6,
+0x01a540,6,
+0x01a560,6,
+0x01a580,6,
+0x01a5a0,6,
+0x01a5c0,6,
+0x01a5e0,6,
+0x01a600,6,
+0x01a620,6,
+0x01a640,6,
+0x01a660,6,
+0x01a680,6,
+0x01a6a0,6,
+0x01a6c0,6,
+0x01a6e0,6,
+0x01a700,6,
+0x01a720,6,
+0x01a740,6,
+0x01a760,6,
+0x01a780,6,
+0x01a7a0,6,
+0x01a7c0,6,
+0x01a7e0,6,
+0x01a800,6,
+0x01a820,6,
+0x01a840,6,
+0x01a860,6,
+0x01a880,6,
+0x01a8a0,6,
+0x01a8c0,6,
+0x01a8e0,6,
+0x01a900,6,
+0x01a920,6,
+0x01a940,6,
+0x01a960,6,
+0x01ab00,6,
+0x01ab20,3,
+0x01ab30,10,
+0x01ab60,3,
+0x01ab70,10,
+0x01aba0,3,
+0x01abb0,10,
+0x01abe0,3,
+0x01abf0,9,
+0x01acf4,3,
+0x01b000,38,
+0x01b100,37,
+0x01b200,18,
+0x01b400,6,
+0x01b420,6,
+0x01b440,6,
+0x01b460,6,
+0x01b480,6,
+0x01b4a0,6,
+0x01b4c0,6,
+0x01b4e0,6,
+0x01b500,6,
+0x01b520,6,
+0x01b540,6,
+0x01b560,6,
+0x01b580,6,
+0x01b5a0,6,
+0x01b5c0,6,
+0x01b5e0,6,
+0x01b600,6,
+0x01b620,6,
+0x01b640,3,
+0x01b800,6,
+0x01b820,6,
+0x01b840,6,
+0x01b860,6,
+0x01b880,6,
+0x01b8a0,6,
+0x01b8c0,6,
+0x01b8e0,6,
+0x01b900,6,
+0x01b920,6,
+0x01b940,6,
+0x01b960,6,
+0x01b980,6,
+0x01b9a0,6,
+0x01b9c0,6,
+0x01b9e0,6,
+0x01ba00,6,
+0x01ba20,6,
+0x01ba40,6,
+0x01ba60,3,
+0x01bc00,2,
+0x01c000,22,
+0x01c060,3,
+0x01c070,26,
+0x01c0e0,3,
+0x01c0f0,26,
+0x01c160,3,
+0x01c170,26,
+0x01c1e0,3,
+0x01c1f0,26,
+0x01c260,3,
+0x01c270,26,
+0x01c2e0,3,
+0x01c2f0,26,
+0x01c360,3,
+0x01c370,26,
+0x01c3e0,3,
+0x01c3f0,26,
+0x01c460,3,
+0x01c470,26,
+0x01c4e0,3,
+0x01c4f0,26,
+0x01c560,3,
+0x01c570,26,
+0x01c5e0,3,
+0x01c5f0,26,
+0x01c660,3,
+0x01c670,26,
+0x01c6e0,3,
+0x01c6f0,26,
+0x01c760,3,
+0x01c770,26,
+0x01c7e0,3,
+0x01c7f0,26,
+0x01c860,3,
+0x01c870,26,
+0x01c8e0,3,
+0x01c8f0,26,
+0x01c960,3,
+0x01c970,26,
+0x01c9e0,3,
+0x01c9f0,26,
+0x01ca60,3,
+0x01ca70,26,
+0x01cae0,3,
+0x01caf0,26,
+0x01cb60,3,
+0x01cb70,26,
+0x01cbe0,3,
+0x01cbf0,26,
+0x01cc60,3,
+0x01cc70,26,
+0x01cce0,3,
+0x01ccf0,26,
+0x01cd60,3,
+0x01cd70,26,
+0x01cde0,3,
+0x01cdf0,26,
+0x01ce60,3,
+0x01ce70,26,
+0x01cee0,3,
+0x01cef0,26,
+0x01cf60,3,
+0x01cf70,26,
+0x01cfe0,3,
+0x01cff0,26,
+0x01d060,3,
+0x01d070,26,
+0x01d0e0,3,
+0x01d0f0,26,
+0x01d160,3,
+0x01d170,26,
+0x01d1e0,3,
+0x01d1f0,6,
+0x01d800,6,
+0x01d820,4,
+0x01d840,8,
+0x01d87c,7,
+0x01d8a0,4,
+0x01d8c0,8,
+0x01d8fc,7,
+0x01d920,4,
+0x01d940,8,
+0x01d97c,7,
+0x01d9a0,4,
+0x01d9c0,8,
+0x01d9fc,7,
+0x01da20,4,
+0x01da40,8,
+0x01da7c,7,
+0x01daa0,4,
+0x01dac0,8,
+0x01dafc,7,
+0x01db20,4,
+0x01db40,8,
+0x01db7c,7,
+0x01dba0,4,
+0x01dbc0,8,
+0x01dbfc,7,
+0x01dc20,4,
+0x01dc40,8,
+0x01dc7c,7,
+0x01dca0,4,
+0x01dcc0,8,
+0x01dcfc,7,
+0x01dd20,4,
+0x01dd40,8,
+0x01dd7c,7,
+0x01dda0,4,
+0x01ddc0,8,
+0x01ddfc,7,
+0x01de20,4,
+0x01de40,8,
+0x01de7c,7,
+0x01dea0,4,
+0x01dec0,8,
+0x01defc,7,
+0x01df20,4,
+0x01df40,8,
+0x01df7c,7,
+0x01dfa0,4,
+0x01dfc0,8,
+0x01dffc,7,
+0x01e020,4,
+0x01e040,8,
+0x01e07c,7,
+0x01e0a0,4,
+0x01e0c0,8,
+0x01e0fc,7,
+0x01e120,4,
+0x01e140,8,
+0x01e17c,7,
+0x01e1a0,4,
+0x01e1c0,8,
+0x01e1fc,7,
+0x01e220,4,
+0x01e240,8,
+0x01e27c,7,
+0x01e2a0,4,
+0x01e2c0,8,
+0x01e2fc,7,
+0x01e320,4,
+0x01e340,8,
+0x01e37c,7,
+0x01e3a0,4,
+0x01e3c0,8,
+0x01e3fc,7,
+0x01e420,4,
+0x01e440,8,
+0x01e47c,7,
+0x01e4a0,4,
+0x01e4c0,8,
+0x01e4fc,7,
+0x01e520,4,
+0x01e540,8,
+0x01e57c,7,
+0x01e5a0,4,
+0x01e5c0,8,
+0x01e5fc,7,
+0x01e620,4,
+0x01e640,8,
+0x01e67c,7,
+0x01e6a0,4,
+0x01e6c0,8,
+0x01e6fc,7,
+0x01e720,4,
+0x01e740,8,
+0x01e77c,7,
+0x01e7a0,4,
+0x01e7c0,8,
+0x01e7fc,7,
+0x01e820,4,
+0x01e840,8,
+0x01e87c,7,
+0x01e8a0,4,
+0x01e8c0,8,
+0x01e8fc,7,
+0x01e920,4,
+0x01e940,8,
+0x01e97c,7,
+0x01e9a0,4,
+0x01e9c0,8,
+0x01e9fc,7,
+0x01ea20,4,
+0x01ea40,8,
+0x01ea7c,7,
+0x01eaa0,4,
+0x01eac0,8,
+0x01eafc,1,
+0x01f408,13,
+0x01f440,1,
+0x01f448,1,
+0x01f45c,4,
+0x01f470,10,
+0x01f4a0,6,
+0x01f4c0,6,
+0x01f4e0,3,
 0x01f800,4,
-0x01f818,4,
-0x01f834,4,
-0x01f92c,4,
-0x01f990,4,
+0x01f828,4,
+0x01f850,4,
+0x01f878,4,
+0x01f8a0,4,
 0x01f9ac,1,
 0x01f9d8,4,
-0x01fa00,32,
-0x01fc00,1,
-0x049000,7,
-0x049020,2,
-0x049030,20,
-0x0490b8,4,
-0x0490cc,7,
+0x01fa00,6,
+0x01fa20,6,
+0x01fa40,6,
+0x01fa60,6,
+0x01fa80,6,
+0x01faa0,6,
+0x01fac0,6,
+0x01fae0,6,
+0x01fb00,3,
+0x01fc00,13,
+0x01fc40,3,
+0x01fc50,6,
+0x01fc6c,1,
+0x01fc80,6,
+0x01fca0,6,
+0x01fcc0,6,
+0x01fce0,3,
+0x01fd00,1,
+0x01fd80,6,
+0x01fda0,6,
+0x01fdc0,6,
+0x01fde0,3,
+0x01fe00,1,
+0x01fe08,4,
+0x01fffc,1,
+0x049000,6,
+0x049020,20,
+0x049080,10,
+0x0490b0,1,
+0x0490c0,3,
+0x0490d0,3,
 0x049100,2,
-0x049110,1,
-0x049120,2,
-0x049140,1,
-0x049200,7,
-0x049220,2,
-0x049230,20,
-0x0492b8,4,
-0x0492cc,7,
+0x049110,3,
+0x049120,4,
+0x049140,7,
+0x049160,7,
+0x049180,3,
+0x049190,1,
+0x049200,6,
+0x049220,20,
+0x049280,10,
+0x0492b0,1,
+0x0492c0,3,
+0x0492d0,3,
 0x049300,2,
-0x049310,1,
-0x049320,2,
-0x049340,1,
-0x049400,7,
-0x049420,2,
-0x049430,20,
-0x0494b8,4,
-0x0494cc,7,
+0x049310,3,
+0x049320,4,
+0x049340,7,
+0x049360,7,
+0x049380,3,
+0x049390,1,
+0x049400,6,
+0x049420,20,
+0x049480,10,
+0x0494b0,1,
+0x0494c0,3,
+0x0494d0,3,
 0x049500,2,
-0x049510,1,
-0x049520,2,
-0x049540,1,
+0x049510,3,
+0x049520,4,
+0x049540,7,
+0x049560,7,
+0x049580,3,
+0x049590,1,
 0x049608,2,
 0x049620,1,
 0x049648,2,
 0x0497a0,1,
 0x0497c8,2,
 0x0497e0,1,
-0x049800,2,
-0x049820,1,
-0x049840,20,
-0x049904,7,
-0x049a00,21,
-0x049a60,2,
-0x050200,1,
-0x05020c,16,
-0x050260,1,
-0x0502a0,3,
-0x0502c0,16,
-0x0503bc,1,
+0x049804,28,
+0x049880,2,
+0x0498a0,2,
+0x0498c0,1,
+0x0498e0,1,
+0x049a00,13,
+0x049a40,2,
+0x049a4c,4,
+0x050400,11,
+0x050430,6,
+0x050460,3,
+0x0504a0,3,
+0x050700,13,
+0x050740,7,
+0x050760,7,
 0x051800,162,
 0x051a90,2,
 0x051aa0,2,
 0x051c00,8,
-0x051d00,27,
-0x051d80,2,
+0x051d00,26,
+0x051d84,1,
 0x051d94,9,
+0x051e00,16,
 0x058400,12,
 0x058440,7,
 0x058460,2,
 0x058500,6,
 0x058520,6,
 0x058540,3,
-0x058580,2,
+0x058584,1,
 0x058590,9,
 0x0585e0,7,
-0x058600,7,
-0x058630,11,
-0x058670,19,
+0x058600,10,
+0x058640,10,
+0x058680,15,
+0x0586d8,9,
 0x058800,6,
 0x058820,6,
-0x058840,3,
-0x058900,6,
+0x058840,6,
+0x058860,6,
+0x058880,6,
+0x0588a0,6,
+0x0588c0,6,
+0x0588e0,6,
+0x058900,3,
+0x058a00,6,
+0x058b00,6,
+0x058b20,6,
+0x058b40,6,
+0x058b60,6,
+0x058b80,6,
+0x058ba0,6,
+0x058bc0,3,
 0x060000,32,
 0x060200,64,
 0x060400,96,
 0x060600,2,
 0x060800,96,
 0x060a00,2,
-0x060c00,4,
-0x060fd8,3,
-0x060ff4,3,
-0x061040,8,
-0x061080,1,
-0x0610c0,39,
-0x061160,3,
-0x061200,1,
+0x060c20,8,
+0x060f80,6,
+0x060fa0,7,
+0x060fd8,2,
+0x060fe4,1,
+0x060ff0,10,
+0x061020,16,
+0x061084,1,
+0x0610c0,16,
+0x061204,1,
 0x061220,8,
+0x061250,3,
+0x061260,5,
+0x061280,6,
+0x0612a0,6,
 0x061300,3,
 0x061310,2,
 0x061320,2,
-0x061340,4,
-0x062000,17,
-0x062050,15,
-0x062090,1,
+0x061330,1,
+0x061340,3,
+0x062000,16,
+0x062060,7,
+0x062080,5,
 0x062100,2,
-0x06210c,1,
-0x062114,1,
-0x06211c,5,
-0x063600,18,
-0x063650,9,
-0x063680,1,
-0x06368c,3,
-0x06369c,4,
+0x06210c,2,
+0x062118,1,
+0x062120,1,
+0x062180,10,
+0x0621b0,2,
+0x0621c0,2,
+0x0621d0,5,
+0x062200,3,
+0x062210,3,
+0x062280,4,
+0x063600,5,
+0x063620,14,
+0x063660,5,
+0x063684,1,
+0x06368c,10,
 0x063700,1,
-0x063710,4,
-0x063800,16,
-0x063850,9,
-0x063880,1,
-0x06388c,3,
-0x06389c,4,
-0x06390c,7,
-0x063930,5,
-0x063948,2,
+0x063800,5,
+0x063820,12,
+0x063860,5,
+0x063884,1,
+0x06388c,10,
+0x063904,1,
+0x06390c,5,
+0x063940,1,
+0x063950,2,
 0x0639fc,1,
 0x064000,5,
 0x064020,1,
 0x064fd0,1,
 0x064fe0,1,
 0x064ff0,1,
-0x065000,1,
+0x065000,8,
 0x066000,5,
 0x066020,1,
 0x066030,1,
 0x066fd0,1,
 0x066fe0,1,
 0x066ff0,1,
-0x067000,1,
-0x067020,1,
-0x067100,1,
+0x067000,16,
+0x067100,8,
+0x067124,7,
+0x067144,7,
 0x067200,3,
 0x0677f8,2,
-0x06f000,4,
-0x06f014,10,
-0x06f040,1,
-0x06f048,3,
-0x06f058,1,
-0x06f060,1,
+0x06f008,2,
+0x06f014,11,
+0x06f044,1,
+0x06f04c,3,
+0x06f05c,1,
+0x06f064,1,
 0x06f07c,1,
-0x06f500,1,
-0x06f518,2,
+0x06f500,2,
+0x06f518,1,
+0x06f520,3,
 0x06f540,6,
+0x06f580,10,
+0x06f800,2,
 0x070000,4,
-0x070020,9,
-0x070048,6,
-0x070064,6,
-0x070080,1,
-0x070200,33,
+0x070020,25,
+0x070088,8,
+0x070100,6,
+0x070120,7,
+0x070140,4,
+0x070200,24,
+0x070280,1,
+0x070288,4,
 0x070300,37,
 0x070b00,14,
 0x070b40,14,
-0x070b80,2,
+0x070b84,1,
 0x070c00,1,
 0x070c10,3,
-0x070c40,2,
+0x070c3c,3,
 0x070c50,8,
 0x071000,7,
 0x072000,7,
 0x0731d0,3,
 0x0731e0,3,
 0x0731f0,3,
-0x073200,5,
-0x073230,30,
+0x073200,2,
+0x073210,7,
+0x073230,1,
+0x073240,48,
+0x073338,15,
 0x074000,8,
-0x074040,8,
-0x074800,2,
+0x074044,3,
+0x074060,4,
+0x074080,8,
+0x075000,1024,
 0x07f000,2,
-0x07f018,2,
-0x07f034,2,
-0x07f12c,23,
-0x07f190,2,
+0x07f028,2,
+0x07f050,2,
+0x07f078,2,
+0x07f0a0,23,
 0x07f1ac,1,
 0x07f1d8,4,
-0x07f200,16,
+0x07f200,6,
+0x07f220,6,
+0x07f240,6,
+0x07f260,6,
+0x07f280,3,
 0x07fa00,6,
 0x07fb00,7,
 0x07fb20,7,
 0x07fb40,7,
 0x07fb60,1,
-0x07fc00,1,
+0x07fb70,1,
+0x07fb80,7,
+0x07fc00,3,
 0x080000,32771,
-0x0a0010,7,
-0x0a0030,1,
+0x0a0010,2,
+0x0a001c,6,
 0x0a0038,2,
 0x0a0048,2,
 0x0a0058,2,
-0x0a0068,11,
-0x0a009c,2,
+0x0a0068,15,
 0x0a00ac,14,
 0x0a00f0,1,
 0x0a00fc,35,
 0x0a01e0,1,
 0x0a01e8,5,
 0x0a0200,3,
-0x0a0210,7,
-0x0a0230,1,
+0x0a0210,2,
+0x0a021c,6,
 0x0a0238,2,
 0x0a0248,2,
 0x0a0258,2,
-0x0a0268,11,
-0x0a029c,2,
+0x0a0268,15,
 0x0a02ac,14,
 0x0a02f0,1,
 0x0a02fc,35,
 0x0a03e0,1,
 0x0a03e8,5,
 0x0a0400,3,
-0x0a0410,7,
-0x0a0430,1,
+0x0a0410,2,
+0x0a041c,6,
 0x0a0438,2,
 0x0a0448,2,
 0x0a0458,2,
-0x0a0468,11,
-0x0a049c,2,
+0x0a0468,15,
 0x0a04ac,14,
 0x0a04f0,1,
 0x0a04fc,35,
 0x0a05e0,1,
 0x0a05e8,5,
 0x0a0600,3,
-0x0a0610,7,
-0x0a0630,1,
+0x0a0610,2,
+0x0a061c,6,
 0x0a0638,2,
 0x0a0648,2,
 0x0a0658,2,
-0x0a0668,11,
-0x0a069c,2,
+0x0a0668,15,
 0x0a06ac,14,
 0x0a06f0,1,
 0x0a06fc,35,
 0x0a07e0,1,
 0x0a07e8,5,
 0x0a0800,3,
-0x0a0810,7,
-0x0a0830,1,
+0x0a0810,2,
+0x0a081c,6,
 0x0a0838,2,
 0x0a0848,2,
 0x0a0858,2,
-0x0a0868,11,
-0x0a089c,2,
+0x0a0868,15,
 0x0a08ac,14,
 0x0a08f0,1,
 0x0a08fc,35,
 0x0a09e0,1,
 0x0a09e8,5,
 0x0a0a00,3,
-0x0a0a10,7,
-0x0a0a30,1,
+0x0a0a10,2,
+0x0a0a1c,6,
 0x0a0a38,2,
 0x0a0a48,2,
 0x0a0a58,2,
-0x0a0a68,11,
-0x0a0a9c,2,
+0x0a0a68,15,
 0x0a0aac,14,
 0x0a0af0,1,
 0x0a0afc,35,
 0x0a0be0,1,
 0x0a0be8,5,
 0x0a0c00,3,
-0x0a0c10,7,
-0x0a0c30,1,
+0x0a0c10,2,
+0x0a0c1c,6,
 0x0a0c38,2,
 0x0a0c48,2,
 0x0a0c58,2,
-0x0a0c68,11,
-0x0a0c9c,2,
+0x0a0c68,15,
 0x0a0cac,14,
 0x0a0cf0,1,
 0x0a0cfc,35,
 0x0a0de0,1,
 0x0a0de8,5,
 0x0a0e00,3,
-0x0a0e10,7,
-0x0a0e30,1,
+0x0a0e10,2,
+0x0a0e1c,6,
 0x0a0e38,2,
 0x0a0e48,2,
 0x0a0e58,2,
-0x0a0e68,11,
-0x0a0e9c,2,
+0x0a0e68,15,
 0x0a0eac,14,
 0x0a0ef0,1,
 0x0a0efc,35,
 0x0a1208,2,
 0x0a1218,2,
 0x0a1404,17,
-0x0a1480,33,
-0x0a1540,16,
+0x0a1484,1,
+0x0a14a0,17,
+0x0a1504,1,
+0x0a1540,17,
 0x0a15e0,8,
 0x0a1604,3,
 0x0a1700,33,
 0x0a1800,6,
-0x0a1820,1,
-0x0a1828,1,
-0x0a1830,4,
+0x0a1820,10,
 0x0a1870,1,
-0x0a1c00,1,
-0x0a1c18,1,
-0x0a1c34,1,
-0x0a1d04,2,
-0x0a1d34,1,
-0x0a1d4c,1,
-0x0a1d70,2,
-0x0a1e00,8,
+0x0a1c00,2,
+0x0a1c28,2,
+0x0a1c50,2,
+0x0a1c78,2,
+0x0a1ca0,7,
+0x0a1dac,1,
+0x0a1dd8,4,
+0x0a1e00,6,
+0x0a1e20,6,
+0x0a1e40,6,
+0x0a1e60,6,
+0x0a1e80,3,
 0x0a2010,2,
 0x0a201c,1,
 0x0a2028,2,
 0x0a2040,8,
 0x0a2064,5,
-0x0a20f4,20,
-0x0a2150,20,
-0x0a2210,27,
-0x0a2280,3,
-0x0a2290,2,
-0x0a22a0,4,
-0x0a23fc,129,
-0x0a2800,4,
-0x0a2818,6,
-0x0a2838,6,
-0x0a2858,6,
-0x0a2878,5,
-0x0a2900,4,
-0x0a2918,6,
-0x0a2938,5,
-0x0a2980,4,
-0x0a2998,13,
-0x0a3120,48,
-0x0a3500,41,
-0x0a35c0,2,
-0x0a35d0,4,
+0x0a20d0,8,
+0x0a20f4,22,
+0x0a2150,2,
+0x0a2160,8,
+0x0a2184,3,
+0x0a21a0,8,
+0x0a2200,4,
+0x0a2218,50,
+0x0a2300,8,
+0x0a2330,3,
+0x0a2600,1,
+0x0a2800,6,
+0x0a2820,6,
+0x0a2840,6,
+0x0a2860,6,
+0x0a2880,3,
+0x0a2900,6,
+0x0a2920,6,
+0x0a2940,3,
+0x0a2980,6,
+0x0a29a0,6,
+0x0a29c0,6,
+0x0a29e0,3,
+0x0a2a00,6,
+0x0a2a20,3,
+0x0a2a30,1,
+0x0a3120,6,
+0x0a3140,6,
+0x0a3160,6,
+0x0a3180,6,
+0x0a31a0,6,
+0x0a31c0,6,
 0x0a3604,2,
 0x0a3700,16,
+0x0a3a00,1,
+0x0a3b00,8,
 0x0c1000,1,
-0x0c1018,1,
-0x0c1034,1,
-0x0c112c,9,
-0x0c1190,1,
+0x0c1028,1,
+0x0c1050,1,
+0x0c1078,1,
+0x0c10a0,9,
 0x0c11ac,1,
 0x0c11d8,4,
-0x0c1200,8,
+0x0c1200,6,
+0x0c1220,6,
+0x0c1240,3,
 0x0c1400,6,
 0x0c1420,3,
-0x0c1500,5,
-0x0c1520,11,
-0x0c2000,13,
-0x0c2040,22,
-0x0c20a0,6,
-0x0c20c0,3,
+0x0c1500,13,
+0x0c1540,3,
+0x0c2000,14,
+0x0c2070,3,
+0x0c2080,6,
 0x0c2100,9,
-0x0c2400,2,
-0x0c240c,6,
-0x0c2440,13,
-0x0c2480,16,
-0x0c2800,1,
-0x0c2808,3,
-0x0c281c,8,
-0x0c2840,3,
-0x0c2850,3,
-0x0c2880,1,
-0x0c2888,3,
-0x0c289c,8,
-0x0c28c0,3,
-0x0c28d0,3,
-0x0c2900,1,
-0x0c2908,3,
-0x0c291c,8,
-0x0c2940,3,
-0x0c2950,3,
-0x0c2980,1,
-0x0c2988,3,
-0x0c299c,8,
-0x0c29c0,3,
-0x0c29d0,3,
-0x0c2a00,1,
-0x0c2a08,3,
-0x0c2a1c,8,
-0x0c2a40,3,
-0x0c2a50,3,
-0x0c2a80,1,
-0x0c2a88,3,
-0x0c2a9c,8,
-0x0c2ac0,3,
-0x0c2ad0,3,
-0x0c2b00,1,
-0x0c2b08,3,
-0x0c2b1c,8,
-0x0c2b40,3,
-0x0c2b50,3,
-0x0c2b80,1,
-0x0c2b88,3,
-0x0c2b9c,8,
-0x0c2bc0,3,
-0x0c2bd0,3,
-0x0c2c00,1,
-0x0c2c08,3,
-0x0c2c1c,8,
-0x0c2c40,3,
-0x0c2c50,3,
-0x0c2c80,2,
-0x0c2c94,13,
-0x0c3000,4,
-0x0c3014,6,
-0x0c3030,5,
-0x0c3080,4,
-0x0c3094,6,
-0x0c30b0,5,
-0x0c3100,4,
-0x0c3114,6,
-0x0c3130,5,
-0x0c3180,4,
-0x0c3194,6,
-0x0c31b0,5,
-0x0c3200,3,
-0x0c3210,23,
-0x0c3500,3,
-0x0c3510,12,
-0x0c3580,3,
-0x0c3590,12,
-0x0c3600,3,
-0x0c3610,12,
-0x0c3680,3,
-0x0c3690,12,
-0x0c3700,4,
-0x0c3718,13,
-0x0c3800,25,
-0x0c3880,25,
-0x0c3900,25,
-0x0c3980,25,
-0x0c3a00,17,
-0x0c3a50,3,
-0x0c3a60,3,
+0x0c2204,1,
+0x0c220c,6,
+0x0c2240,13,
+0x0c2280,16,
+0x0c2400,8,
+0x0c2424,15,
+0x0c2464,15,
+0x0c24a4,15,
+0x0c24e4,23,
+0x0c2544,6,
+0x0c2580,10,
+0x0c25ac,1,
+0x0c25b4,5,
+0x0c25cc,1,
+0x0c25d4,5,
+0x0c25ec,1,
+0x0c25f4,13,
+0x0c2680,7,
+0x0c26a0,5,
+0x0c26c0,5,
+0x0c26e0,3,
+0x0c2800,19,
+0x0c2850,10,
+0x0c2880,19,
+0x0c28d0,10,
+0x0c2900,19,
+0x0c2950,10,
+0x0c2980,19,
+0x0c29d0,10,
+0x0c2a00,19,
+0x0c2a50,10,
+0x0c2a80,19,
+0x0c2ad0,10,
+0x0c2b00,19,
+0x0c2b50,10,
+0x0c2b80,19,
+0x0c2bd0,10,
+0x0c2c00,19,
+0x0c2c50,10,
+0x0c2c84,1,
+0x0c2c94,8,
+0x0c2cb8,9,
+0x0c2ce0,4,
+0x0c3000,29,
+0x0c3078,5,
+0x0c3090,2,
+0x0c30a0,10,
+0x0c3100,93,
+0x0c3278,5,
+0x0c3290,2,
+0x0c32a0,10,
+0x0c3300,93,
+0x0c3478,5,
+0x0c3490,2,
+0x0c34a0,10,
+0x0c3500,93,
+0x0c3678,5,
+0x0c3690,2,
+0x0c36a0,10,
+0x0c3700,93,
+0x0c387c,1,
+0x0c3a00,8,
+0x0c3a24,15,
+0x0c3a64,23,
+0x0c3ac4,6,
+0x0c3b00,4,
+0x0c3b20,3,
+0x0c3c00,2,
+0x0c3c40,14,
+0x0c3c80,9,
+0x0c3d00,9,
+0x0c3d2c,1,
+0x0c3d80,6,
+0x0c3e00,2,
+0x0c3e0c,1,
+0x0c3e14,5,
+0x0c3e2c,1,
+0x0c3e34,5,
+0x0c3e4c,1,
+0x0c3e54,5,
+0x0c3e6c,1,
+0x0c3e74,5,
+0x0c3e8c,1,
+0x0c3e94,5,
+0x0c3eac,1,
+0x0c3eb4,3,
 0x0c8000,25,
 0x0c8068,4,
 0x0c807c,4,
 0x0ca0a4,2,
 0x0ca0b0,2,
 0x0ca0c0,14,
-0x0ca100,16,
+0x0ca100,12,
+0x0ca140,4,
 0x0ca160,1,
 0x0ca184,1,
-0x0ca18c,1,
 0x0ca194,2,
 0x0ca1b8,3,
 0x0ca1d0,5,
 0x0ca360,6,
 0x0ca380,6,
 0x0ca3a0,6,
+0x0ca3c0,6,
+0x0ca3e0,6,
+0x0ca400,6,
 0x0ca6fc,1,
-0x0ca800,71,
+0x0ca800,72,
 0x0cb000,4,
 0x0cb044,1,
 0x0cb04c,1,
 0x0cb250,3,
 0x0cb260,2,
 0x0cb270,3,
+0x0cb280,1,
 0x0cb400,5,
 0x0cb59c,1,
 0x0cb5ac,9,
 0x0d0000,5,
 0x0d0020,4,
-0x0d0034,9,
-0x0d005c,7,
+0x0d0034,17,
 0x0d0080,1,
 0x0d00a0,6,
 0x0d0100,5,
 0x0d0120,4,
-0x0d0134,9,
-0x0d015c,7,
+0x0d0134,17,
 0x0d0180,1,
 0x0d01a0,6,
 0x0d0200,5,
 0x0d0220,4,
-0x0d0234,9,
-0x0d025c,7,
+0x0d0234,17,
 0x0d0280,1,
 0x0d02a0,6,
 0x0d0300,5,
 0x0d0320,4,
-0x0d0334,9,
-0x0d035c,7,
+0x0d0334,17,
 0x0d0380,1,
 0x0d03a0,6,
-0x0d0400,4,
-0x0d0440,4,
+0x0d0400,6,
+0x0d0440,6,
 0x0d0480,3,
 0x0d04c0,3,
-0x0d0500,5,
-0x0d0518,8,
+0x0d0500,6,
+0x0d051c,7,
+0x0d0540,1,
 0x0d0c00,13,
-0x0d0c40,11,
+0x0d0c40,12,
 0x0d0c80,13,
-0x0d0cc0,11,
+0x0d0cc0,12,
 0x0d0d00,6,
 0x0d0d20,6,
-0x0d0e00,10,
+0x0d0d80,14,
+0x0d0dc0,2,
 0x0d0e40,11,
-0x0d0e80,8,
+0x0d0e80,6,
+0x0d0ea0,6,
 0x0d1000,2,
 0x0d1010,5,
 0x0d1040,3,
 0x0d1050,3,
-0x0d1060,7,
-0x0d1080,7,
-0x0d10a0,7,
-0x0d10c0,7,
-0x0d1100,7,
-0x0d1140,7,
-0x0d1180,5,
+0x0d1060,32,
+0x0d1100,8,
+0x0d1140,8,
+0x0d1180,3,
+0x0d1190,2,
 0x0d119c,9,
 0x0d1218,9,
 0x0d1240,3,
 0x0d12e4,1,
 0x0d1400,8,
 0x0d1424,2,
-0x0d1500,3,
+0x0d1500,5,
 0x0d1520,4,
-0x0d1540,3,
+0x0d1540,5,
 0x0d1560,4,
 0x0d1800,24,
-0x0d1864,2,
-0x0d1880,6,
-0x0d1900,12,
-0x0d1940,6,
-0x0d1960,6,
+0x0d1864,5,
+0x0d1880,8,
+0x0d1900,13,
 0x0d1980,4,
+0x0d19a0,6,
 0x0d19c0,6,
 0x0d19dc,1,
 0x0d1a00,6,
 0x0d1a1c,1,
 0x0d1a40,1,
+0x0d1a60,1,
 0x0d1a68,23,
+0x0d1ac8,6,
 0x0d1b00,17,
+0x0d1b48,6,
 0x0d1b80,12,
+0x0d1c00,6,
+0x0d1c20,6,
+0x0d1c40,6,
+0x0d1c60,3,
+0x0d1d00,6,
+0x0d1d20,6,
+0x0d1d40,3,
+0x0d1d80,6,
+0x0d1da0,6,
+0x0d1dc0,3,
 0x0d2000,5,
 0x0d2020,4,
-0x0d2034,9,
-0x0d205c,7,
+0x0d2034,17,
 0x0d2080,1,
 0x0d20a0,6,
 0x0d2100,5,
 0x0d2120,4,
-0x0d2134,9,
-0x0d215c,7,
+0x0d2134,17,
 0x0d2180,1,
 0x0d21a0,6,
 0x0d2200,5,
 0x0d2220,4,
-0x0d2234,9,
-0x0d225c,7,
+0x0d2234,17,
 0x0d2280,1,
 0x0d22a0,6,
 0x0d2300,5,
 0x0d2320,4,
-0x0d2334,9,
-0x0d235c,7,
+0x0d2334,17,
 0x0d2380,1,
 0x0d23a0,6,
-0x0d2400,4,
-0x0d2440,4,
+0x0d2400,6,
+0x0d2440,6,
 0x0d2480,3,
 0x0d24c0,3,
-0x0d2500,5,
-0x0d2518,8,
+0x0d2500,6,
+0x0d251c,7,
+0x0d2540,1,
 0x0d2c00,13,
-0x0d2c40,11,
+0x0d2c40,12,
 0x0d2c80,13,
-0x0d2cc0,11,
+0x0d2cc0,12,
 0x0d2d00,6,
 0x0d2d20,6,
-0x0d2e00,10,
+0x0d2d80,14,
+0x0d2dc0,2,
 0x0d2e40,11,
-0x0d2e80,8,
+0x0d2e80,6,
+0x0d2ea0,6,
 0x0d3000,2,
 0x0d3010,5,
 0x0d3040,3,
 0x0d3050,3,
-0x0d3060,7,
-0x0d3080,7,
-0x0d30a0,7,
-0x0d30c0,7,
-0x0d3100,7,
-0x0d3140,7,
-0x0d3180,5,
+0x0d3060,32,
+0x0d3100,8,
+0x0d3140,8,
+0x0d3180,3,
+0x0d3190,2,
 0x0d319c,9,
 0x0d3218,9,
 0x0d3240,3,
 0x0d32e4,1,
 0x0d3400,8,
 0x0d3424,2,
-0x0d3500,3,
+0x0d3500,5,
 0x0d3520,4,
-0x0d3540,3,
+0x0d3540,5,
 0x0d3560,4,
 0x0d3800,24,
-0x0d3864,2,
-0x0d3880,6,
-0x0d3900,12,
-0x0d3940,6,
-0x0d3960,6,
+0x0d3864,5,
+0x0d3880,8,
+0x0d3900,13,
 0x0d3980,4,
+0x0d39a0,6,
 0x0d39c0,6,
 0x0d39dc,1,
 0x0d3a00,6,
 0x0d3a1c,1,
 0x0d3a40,1,
+0x0d3a60,1,
 0x0d3a68,23,
+0x0d3ac8,6,
 0x0d3b00,17,
+0x0d3b48,6,
 0x0d3b80,12,
+0x0d3c00,6,
+0x0d3c20,6,
+0x0d3c40,6,
+0x0d3c60,3,
+0x0d3d00,6,
+0x0d3d20,6,
+0x0d3d40,3,
+0x0d3d80,6,
+0x0d3da0,6,
+0x0d3dc0,3,
 0x0d4000,5,
 0x0d4038,1,
 0x0d4044,1,
+0x0d4050,2,
 0x0d4100,6,
 0x0d8000,6,
 0x0d8020,3,
-0x0d8030,9,
-0x0d8080,6,
-0x0d8100,20,
-0x0d8400,1,
-0x0d8418,1,
-0x0d8434,1,
-0x0d852c,4,
-0x0d8590,1,
-0x0d85ac,1,
-0x0d85d8,4,
-0x0d8600,8,
+0x0d8030,8,
+0x0d8100,6,
+0x0d8120,10,
+0x0d8150,8,
+0x0d8800,6,
+0x0d8820,3,
+0x0d8830,4,
+0x0d8858,2,
+0x0d8864,1,
+0x0d8874,3,
+0x0d8898,2,
+0x0d88a4,1,
+0x0d88b4,3,
 0x0d9000,6,
 0x0d9020,6,
 0x0d9040,3,
 0x0d9080,14,
 0x0d90bc,1,
 0x0d90c4,13,
-0x0d90fc,6,
-0x0d9120,5,
-0x0d9190,10,
-0x0d9200,16,
-0x0d9244,32,
-0x0d9300,26,
+0x0d90fc,5,
+0x0d9120,4,
+0x0d9140,3,
+0x0d9180,3,
+0x0d9190,3,
+0x0d91a0,1,
+0x0d91e0,6,
+0x0d9200,20,
+0x0d925c,30,
+0x0d9300,24,
 0x0d9380,2,
 0x0d93a0,1,
 0x0d93c0,11,
-0x0d9404,4,
-0x0d9418,16,
+0x0d9404,3,
+0x0d9420,11,
 0x0d9460,3,
+0x0d9480,6,
 0x0d9500,6,
+0x0d9520,6,
 0x0d9540,1,
 0x0d9558,2,
 0x0d9600,17,
-0x0d9800,366,
+0x0d9800,410,
 0x0da000,6,
 0x0da020,6,
 0x0da040,3,
 0x0da080,14,
 0x0da0bc,1,
 0x0da0c4,13,
-0x0da0fc,6,
-0x0da120,5,
-0x0da190,10,
-0x0da200,16,
-0x0da244,32,
-0x0da300,26,
+0x0da0fc,5,
+0x0da120,4,
+0x0da140,3,
+0x0da180,3,
+0x0da190,3,
+0x0da1a0,1,
+0x0da1e0,6,
+0x0da200,20,
+0x0da25c,30,
+0x0da300,24,
 0x0da380,2,
 0x0da3a0,1,
 0x0da3c0,11,
-0x0da404,4,
-0x0da418,16,
+0x0da404,3,
+0x0da420,11,
 0x0da460,3,
+0x0da480,6,
 0x0da500,6,
+0x0da520,6,
 0x0da540,1,
 0x0da558,2,
 0x0da600,17,
-0x0da800,366,
-0x0db000,4,
-0x0db020,9,
-0x0db048,6,
-0x0db064,6,
-0x0db080,1,
-0x0db100,4,
-0x0db120,9,
-0x0db148,6,
-0x0db164,6,
-0x0db180,1,
-0x0db200,35,
-0x0db290,6,
-0x0db2b4,6,
-0x0db2d0,5,
-0x0db2e8,5,
-0x0db300,37,
-0x0db400,6,
-0x0db420,3,
-0x0db438,4,
-0x0db454,3,
-0x0db478,4,
-0x0db494,3,
+0x0da800,410,
 0x0db800,5,
 0x0db818,1,
 0x0db854,6,
 0x0db880,2,
 0x0db8a4,1,
-0x0e8000,4,
+0x0db8ac,2,
+0x0dba00,28,
+0x0dba7c,13,
+0x0dbab4,1,
+0x0dbabc,10,
+0x0dbb04,1,
+0x0dbb0c,5,
+0x0dbb24,1,
+0x0dbb34,9,
+0x0dbb60,6,
+0x0dbb80,22,
+0x0dbbe0,3,
+0x0dbbf0,2,
+0x0dbc00,5,
+0x0dbc18,1,
+0x0dbc54,6,
+0x0dbc80,2,
+0x0dbca4,1,
+0x0dbcac,2,
+0x0dbe00,28,
+0x0dbe7c,13,
+0x0dbeb4,1,
+0x0dbebc,10,
+0x0dbf04,1,
+0x0dbf0c,5,
+0x0dbf24,1,
+0x0dbf34,9,
+0x0dbf60,6,
+0x0dbf80,22,
+0x0dbfe0,3,
+0x0dbff0,2,
+0x0dc000,1,
+0x0e8000,1,
+0x0e8008,2,
 0x0e8058,3,
 0x0e8120,2,
 0x0e8130,2,
 0x0e81c4,3,
 0x0e81dc,3,
 0x0e8280,13,
-0x0e8400,24,
+0x0e8400,16,
+0x0e8444,7,
 0x0e8500,4,
-0x0e8800,2,
-0x0e8824,9,
+0x0e8804,1,
+0x0e8824,7,
+0x0e8844,1,
 0x0e884c,27,
 0x0e88d4,2,
 0x0e8c00,1,
 0x0e90f8,1,
 0x0e9100,1,
 0x0e9108,5,
-0x0e9138,4,
+0x0e9138,2,
+0x0e9144,1,
 0x0e9160,13,
 0x0e91a0,3,
 0x0e9200,2,
-0x0e9214,19,
-0x0e9278,10,
+0x0e9214,11,
+0x0e9244,7,
+0x0e92b8,2,
+0x0e92c4,7,
 0x0e9310,1,
 0x0e9340,4,
-0x0e9384,6,
+0x0e9380,7,
 0x0e9400,14,
 0x0e9440,10,
 0x0e947c,1,
 0x0e9d00,3,
 0x0e9d40,2,
 0x0e9d4c,1,
-0x0e9d80,2,
+0x0e9d84,1,
 0x0e9d90,4,
 0x0e9e00,6,
 0x0e9e20,6,
 0x0e9f80,13,
 0x0e9fc0,2,
 0x0ea000,1,
-0x0ea018,1,
-0x0ea034,1,
-0x0ea12c,3,
-0x0ea190,1,
+0x0ea028,1,
+0x0ea050,1,
+0x0ea078,1,
+0x0ea0a0,3,
 0x0ea1ac,1,
 0x0ea1d8,4,
-0x0ea200,8,
+0x0ea200,6,
+0x0ea220,6,
+0x0ea240,3,
 0x0ea400,6,
-0x0ea420,24,
+0x0ea420,2,
+0x0ea430,2,
+0x0ea440,2,
+0x0ea450,6,
+0x0ea470,2,
 0x0ea490,24,
 0x0ea520,8,
-0x0ea600,2,
-0x0ea6f0,71,
+0x0ea604,1,
+0x0ea6f0,72,
 0x0f0000,3,
-0x0f0014,8,
-0x0f0044,28,
+0x0f0014,10,
+0x0f0044,15,
 0x0f00f0,2,
-0x0f0100,5,
+0x0f0100,1,
+0x0f0108,3,
 0x0f0118,1,
-0x0f0130,6,
-0x0f015c,12,
-0x0f0190,3,
+0x0f0130,4,
+0x0f0180,3,
+0x0f0190,2,
 0x0f01a0,3,
 0x0f01c0,2,
 0x0f01d0,10,
 0x0f0200,61,
-0x0f0404,8,
+0x0f0404,9,
 0x0f0440,12,
-0x0f0480,6,
-0x0f04a0,8,
-0x0f04e0,6,
-0x0f0500,6,
-0x0f0520,8,
-0x0f0560,6,
-0x0f0580,1,
-0x0f0588,3,
-0x0f05dc,9,
+0x0f0480,5,
+0x0f04b8,19,
+0x0f05a0,1,
+0x0f05c0,8,
 0x0f0800,17,
 0x0f0850,9,
 0x0f0880,9,
 0x0f099c,5,
 0x0f09bc,5,
 0x0f09dc,1,
-0x0f0a80,3,
-0x0f0a90,4,
+0x0f0a90,2,
 0x0f0c00,128,
 0x0f0e04,1,
 0x0f0e14,9,
 0x0f0e3c,1,
-0x0f1000,1,
-0x0f1200,6,
-0x0f1220,6,
-0x0f1240,6,
-0x0f1260,6,
-0x0f1280,6,
-0x0f12a0,6,
-0x0f12c0,6,
-0x0f12e0,6,
-0x0f1300,3,
+0x0f1000,3,
+0x0f1010,4,
+0x0f1080,10,
+0x0f10c0,1,
+0x0f10e0,2,
+0x0f10ec,1,
+0x0f10f4,3,
+0x0f1400,6,
+0x0f1420,6,
+0x0f1440,6,
+0x0f1460,6,
+0x0f1480,6,
+0x0f14a0,6,
+0x0f14c0,6,
+0x0f14e0,6,
+0x0f1500,6,
+0x0f1520,6,
+0x0f1540,6,
+0x0f1560,6,
+0x0f1580,6,
+0x0f15a0,6,
+0x0f15c0,6,
+0x0f15e0,6,
+0x0f1600,6,
+0x0f1620,3,
+0x0f1800,3,
+0x0f2000,2,
+0x0f200c,3,
+0x0f2020,8,
+0x0f2060,6,
+0x0f2080,2,
+0x0f208c,3,
+0x0f20a0,8,
+0x0f20e0,6,
+0x0f2100,2,
+0x0f210c,3,
+0x0f2120,8,
+0x0f2160,6,
+0x0f2180,2,
+0x0f218c,3,
+0x0f21a0,8,
+0x0f21e0,6,
+0x0f2200,2,
+0x0f220c,3,
+0x0f2220,8,
+0x0f2260,6,
+0x0f2280,2,
+0x0f228c,3,
+0x0f22a0,8,
+0x0f22e0,6,
+0x0f2300,2,
+0x0f230c,3,
+0x0f2320,8,
+0x0f2360,6,
+0x0f2380,2,
+0x0f238c,3,
+0x0f23a0,8,
+0x0f23e0,6,
+0x0f2400,2,
+0x0f240c,3,
+0x0f2420,8,
+0x0f2460,6,
+0x0f2480,2,
+0x0f248c,3,
+0x0f24a0,8,
+0x0f24e0,6,
+0x0f2500,2,
+0x0f250c,3,
+0x0f2520,8,
+0x0f2560,6,
+0x0f2580,2,
+0x0f258c,3,
+0x0f25a0,8,
+0x0f25e0,6,
+0x0f2600,2,
+0x0f260c,3,
+0x0f2620,8,
+0x0f2660,6,
+0x0f2680,2,
+0x0f268c,3,
+0x0f26a0,8,
+0x0f26e0,6,
+0x0f2700,2,
+0x0f270c,3,
+0x0f2720,8,
+0x0f2760,6,
+0x0f2780,2,
+0x0f278c,3,
+0x0f27a0,8,
+0x0f27e0,6,
+0x0f2800,2,
+0x0f280c,3,
+0x0f2820,8,
+0x0f2860,6,
+0x0f2880,2,
+0x0f288c,3,
+0x0f28a0,8,
+0x0f28e0,6,
+0x0f2900,2,
+0x0f290c,3,
+0x0f2920,8,
+0x0f2960,6,
+0x0f2980,2,
+0x0f298c,3,
+0x0f29a0,8,
+0x0f29e0,6,
 0x0f4000,7,
-0x0f4100,2,
-0x0f4180,34,
-0x0f4300,2,
-0x0f4380,42,
+0x0f4020,4,
+0x0f4204,1,
+0x0f4280,35,
+0x0f4310,4,
+0x0f4404,1,
+0x0f4480,34,
+0x0f4510,10,
+0x0f453c,3,
 0x0f4800,7,
-0x0f4900,2,
-0x0f4980,34,
-0x0f4b00,2,
-0x0f4b80,42,
+0x0f4820,4,
+0x0f4a04,1,
+0x0f4a80,35,
+0x0f4b10,4,
+0x0f4c04,1,
+0x0f4c80,34,
+0x0f4d10,10,
+0x0f4d3c,3,
 0x0f5000,7,
-0x0f5100,2,
-0x0f5180,34,
-0x0f5300,2,
-0x0f5380,42,
+0x0f5020,4,
+0x0f5204,1,
+0x0f5280,35,
+0x0f5310,4,
+0x0f5404,1,
+0x0f5480,34,
+0x0f5510,10,
+0x0f553c,3,
 0x0f5800,7,
-0x0f5900,2,
-0x0f5980,34,
-0x0f5b00,2,
-0x0f5b80,42,
+0x0f5820,4,
+0x0f5a04,1,
+0x0f5a80,35,
+0x0f5b10,4,
+0x0f5c04,1,
+0x0f5c80,34,
+0x0f5d10,10,
+0x0f5d3c,3,
 0x0f6000,7,
-0x0f6100,2,
-0x0f6180,34,
-0x0f6300,2,
-0x0f6380,42,
+0x0f6020,4,
+0x0f6204,1,
+0x0f6280,35,
+0x0f6310,4,
+0x0f6404,1,
+0x0f6480,34,
+0x0f6510,10,
+0x0f653c,3,
 0x0f6800,7,
-0x0f6900,2,
-0x0f6980,34,
-0x0f6b00,2,
-0x0f6b80,42,
+0x0f6820,4,
+0x0f6a04,1,
+0x0f6a80,35,
+0x0f6b10,4,
+0x0f6c04,1,
+0x0f6c80,34,
+0x0f6d10,10,
+0x0f6d3c,3,
 0x0f8000,9,
-0x0f8044,6,
-0x0f8080,7,
-0x0f80a0,1,
-0x0f80c0,12,
-0x0f8100,9,
-0x0f8144,6,
-0x0f8180,7,
-0x0f81a0,1,
-0x0f81c0,12,
+0x0f8048,6,
+0x0f8100,6,
+0x0f8120,6,
+0x0f8140,3,
+0x0f8180,6,
+0x0f81c0,3,
+0x0f81d0,2,
 0x0f8200,9,
-0x0f8244,6,
-0x0f8280,7,
-0x0f82a0,1,
-0x0f82c0,12,
-0x0f8300,9,
-0x0f8344,6,
-0x0f8380,7,
-0x0f83a0,1,
-0x0f83c0,12,
+0x0f8248,6,
+0x0f8300,6,
+0x0f8320,6,
+0x0f8340,3,
+0x0f8380,6,
+0x0f83c0,3,
+0x0f83d0,2,
 0x0f8400,9,
-0x0f8444,6,
-0x0f8480,7,
-0x0f84a0,1,
-0x0f84c0,12,
-0x0f8500,9,
-0x0f8544,6,
-0x0f8580,7,
-0x0f85a0,1,
-0x0f85c0,12,
+0x0f8448,6,
+0x0f8500,6,
+0x0f8520,6,
+0x0f8540,3,
+0x0f8580,6,
+0x0f85c0,3,
+0x0f85d0,2,
 0x0f8600,9,
-0x0f8644,6,
-0x0f8680,7,
-0x0f86a0,1,
-0x0f86c0,12,
-0x0f8700,9,
-0x0f8744,6,
-0x0f8780,7,
-0x0f87a0,1,
-0x0f87c0,12,
+0x0f8648,6,
+0x0f8700,6,
+0x0f8720,6,
+0x0f8740,3,
+0x0f8780,6,
+0x0f87c0,3,
+0x0f87d0,2,
 0x0f8800,9,
-0x0f8844,6,
-0x0f8880,7,
-0x0f88a0,1,
-0x0f88c0,12,
-0x0f8900,9,
-0x0f8944,6,
-0x0f8980,7,
-0x0f89a0,1,
-0x0f89c0,12,
+0x0f8848,6,
+0x0f8900,6,
+0x0f8920,6,
+0x0f8940,3,
+0x0f8980,6,
+0x0f89c0,3,
+0x0f89d0,2,
 0x0f8a00,9,
-0x0f8a44,6,
-0x0f8a80,7,
-0x0f8aa0,1,
-0x0f8ac0,12,
-0x0f8b00,9,
-0x0f8b44,6,
-0x0f8b80,7,
-0x0f8ba0,1,
-0x0f8bc0,12,
+0x0f8a48,6,
+0x0f8b00,6,
+0x0f8b20,6,
+0x0f8b40,3,
+0x0f8b80,6,
+0x0f8bc0,3,
+0x0f8bd0,2,
 0x0f8c00,9,
-0x0f8c44,6,
-0x0f8c80,7,
-0x0f8ca0,1,
-0x0f8cc0,12,
-0x0f8d00,9,
-0x0f8d44,6,
-0x0f8d80,7,
-0x0f8da0,1,
-0x0f8dc0,12,
+0x0f8c48,6,
+0x0f8d00,6,
+0x0f8d20,6,
+0x0f8d40,3,
+0x0f8d80,6,
+0x0f8dc0,3,
+0x0f8dd0,2,
 0x0f8e00,9,
-0x0f8e44,6,
-0x0f8e80,7,
-0x0f8ea0,1,
-0x0f8ec0,12,
-0x0f8f00,9,
-0x0f8f44,6,
-0x0f8f80,7,
-0x0f8fa0,1,
-0x0f8fc0,12,
+0x0f8e48,6,
+0x0f8f00,6,
+0x0f8f20,6,
+0x0f8f40,3,
+0x0f8f80,6,
+0x0f8fc0,3,
+0x0f8fd0,2,
 0x0f9000,9,
-0x0f9044,6,
-0x0f9080,7,
-0x0f90a0,1,
-0x0f90c0,12,
-0x0f9100,9,
-0x0f9144,6,
-0x0f9180,7,
-0x0f91a0,1,
-0x0f91c0,12,
+0x0f9048,6,
+0x0f9100,6,
+0x0f9120,6,
+0x0f9140,3,
+0x0f9180,6,
+0x0f91c0,3,
+0x0f91d0,2,
 0x0f9200,9,
-0x0f9244,6,
-0x0f9280,7,
-0x0f92a0,1,
-0x0f92c0,12,
-0x0f9300,9,
-0x0f9344,6,
-0x0f9380,7,
-0x0f93a0,1,
-0x0f93c0,12,
+0x0f9248,6,
+0x0f9300,6,
+0x0f9320,6,
+0x0f9340,3,
+0x0f9380,6,
+0x0f93c0,3,
+0x0f93d0,2,
 0x0f9400,9,
-0x0f9444,6,
-0x0f9480,7,
-0x0f94a0,1,
-0x0f94c0,12,
-0x0f9500,9,
-0x0f9544,6,
-0x0f9580,7,
-0x0f95a0,1,
-0x0f95c0,12,
+0x0f9448,6,
+0x0f9500,6,
+0x0f9520,6,
+0x0f9540,3,
+0x0f9580,6,
+0x0f95c0,3,
+0x0f95d0,2,
 0x0f9600,9,
-0x0f9644,6,
-0x0f9680,7,
-0x0f96a0,1,
-0x0f96c0,12,
-0x0f9700,9,
-0x0f9744,6,
-0x0f9780,7,
-0x0f97a0,1,
-0x0f97c0,12,
+0x0f9648,6,
+0x0f9700,6,
+0x0f9720,6,
+0x0f9740,3,
+0x0f9780,6,
+0x0f97c0,3,
+0x0f97d0,2,
+0x0f9800,9,
+0x0f9848,6,
+0x0f9900,6,
+0x0f9920,6,
+0x0f9940,3,
+0x0f9980,6,
+0x0f99c0,3,
+0x0f99d0,2,
+0x0f9a00,9,
+0x0f9a48,6,
+0x0f9b00,6,
+0x0f9b20,6,
+0x0f9b40,3,
+0x0f9b80,6,
+0x0f9bc0,3,
+0x0f9bd0,2,
+0x0f9c00,9,
+0x0f9c48,6,
+0x0f9d00,6,
+0x0f9d20,6,
+0x0f9d40,3,
+0x0f9d80,6,
+0x0f9dc0,3,
+0x0f9dd0,2,
+0x0f9e00,9,
+0x0f9e48,6,
+0x0f9f00,6,
+0x0f9f20,6,
+0x0f9f40,3,
+0x0f9f80,6,
+0x0f9fc0,3,
+0x0f9fd0,2,
+0x0fa000,9,
+0x0fa048,6,
+0x0fa100,6,
+0x0fa120,6,
+0x0fa140,3,
+0x0fa180,6,
+0x0fa1c0,3,
+0x0fa1d0,2,
+0x0fa200,9,
+0x0fa248,6,
+0x0fa300,6,
+0x0fa320,6,
+0x0fa340,3,
+0x0fa380,6,
+0x0fa3c0,3,
+0x0fa3d0,2,
+0x0fa400,9,
+0x0fa448,6,
+0x0fa480,10,
+0x0fa4c0,1,
+0x0fa4e0,2,
+0x0fa4ec,1,
+0x0fa4f4,9,
+0x0fa520,6,
+0x0fa540,3,
+0x0fa580,4,
+0x0fa5c0,3,
+0x0fa5d0,6,
+0x0fa600,9,
+0x0fa648,6,
+0x0fa680,10,
+0x0fa6c0,1,
+0x0fa6e0,2,
+0x0fa6ec,1,
+0x0fa6f4,9,
+0x0fa720,6,
+0x0fa740,3,
+0x0fa780,4,
+0x0fa7c0,3,
+0x0fa7d0,6,
+0x0fa800,9,
+0x0fa848,6,
+0x0fa880,10,
+0x0fa8c0,1,
+0x0fa8e0,2,
+0x0fa8ec,1,
+0x0fa8f4,9,
+0x0fa920,6,
+0x0fa940,3,
+0x0fa980,6,
+0x0fa9c0,3,
+0x0fa9d0,2,
+0x0faa00,9,
+0x0faa48,6,
+0x0faa80,10,
+0x0faac0,1,
+0x0faae0,2,
+0x0faaec,1,
+0x0faaf4,9,
+0x0fab20,6,
+0x0fab40,3,
+0x0fab80,6,
+0x0fabc0,3,
+0x0fabd0,2,
+0x0fac00,9,
+0x0fac48,6,
+0x0fac80,10,
+0x0facc0,1,
+0x0face0,2,
+0x0facec,1,
+0x0facf4,9,
+0x0fad20,6,
+0x0fad40,3,
+0x0fad80,10,
+0x0fadc0,3,
+0x0fadd0,2,
+0x0fade8,2,
+0x0fae00,9,
+0x0fae48,6,
+0x0fae80,10,
+0x0faec0,1,
+0x0faee0,2,
+0x0faeec,1,
+0x0faef4,9,
+0x0faf20,6,
+0x0faf40,3,
+0x0faf80,8,
+0x0fafc0,3,
+0x0fafd0,2,
 0x100000,6,
-0x100080,9,
-0x100100,6,
-0x100180,9,
-0x100200,9,
-0x100240,24,
-0x100300,2,
+0x100100,30,
+0x100180,5,
+0x100200,6,
+0x100300,30,
+0x100380,5,
+0x100400,11,
+0x100430,29,
+0x100500,2,
+0x10050c,4,
+0x100520,5,
+0x10053c,1,
+0x100544,1,
+0x10054c,5,
+0x100564,3,
+0x100600,4,
+0x100620,6,
+0x100640,6,
+0x100660,6,
+0x100680,6,
+0x1006a0,4,
+0x100800,6,
+0x100820,6,
+0x100840,6,
+0x100860,3,
+0x100884,14,
+0x1008c0,16,
+0x100c00,20,
+0x100c58,4,
+0x100c70,2,
+0x100c7c,7,
+0x100d00,4,
+0x100d30,2,
+0x100d3c,12,
+0x100d70,2,
+0x100d80,3,
+0x100e00,32,
 0x101000,6,
-0x101080,9,
-0x101100,6,
-0x101180,9,
-0x101200,9,
-0x101240,24,
-0x101300,2,
+0x101100,30,
+0x101180,5,
+0x101200,6,
+0x101300,30,
+0x101380,5,
+0x101400,11,
+0x101430,29,
+0x101500,2,
+0x10150c,4,
+0x101520,5,
+0x10153c,1,
+0x101544,1,
+0x10154c,5,
+0x101564,3,
+0x101600,4,
+0x101620,6,
+0x101640,6,
+0x101660,6,
+0x101680,6,
+0x1016a0,4,
+0x101800,6,
+0x101820,6,
+0x101840,6,
+0x101860,3,
+0x101884,14,
+0x1018c0,16,
+0x101c00,20,
+0x101c58,4,
+0x101c70,2,
+0x101c7c,7,
+0x101d00,4,
+0x101d30,2,
+0x101d3c,12,
+0x101d70,2,
+0x101d80,3,
+0x101e00,32,
 0x102000,6,
-0x102080,9,
-0x102100,6,
-0x102180,9,
-0x102200,9,
-0x102240,24,
-0x102300,2,
+0x102100,30,
+0x102180,5,
+0x102200,6,
+0x102300,30,
+0x102380,5,
+0x102400,11,
+0x102430,29,
+0x102500,2,
+0x10250c,4,
+0x102520,5,
+0x10253c,1,
+0x102544,1,
+0x10254c,5,
+0x102564,3,
+0x102600,4,
+0x102620,6,
+0x102640,6,
+0x102660,6,
+0x102680,6,
+0x1026a0,4,
+0x102800,6,
+0x102820,6,
+0x102840,6,
+0x102860,3,
+0x102884,14,
+0x1028c0,16,
+0x102c00,20,
+0x102c58,4,
+0x102c70,2,
+0x102c7c,7,
+0x102d00,4,
+0x102d30,2,
+0x102d3c,12,
+0x102d70,2,
+0x102d80,3,
+0x102e00,32,
 0x103000,6,
-0x103080,9,
-0x103100,6,
-0x103180,9,
-0x103200,9,
-0x103240,24,
-0x103300,2,
+0x103100,30,
+0x103180,5,
+0x103200,6,
+0x103300,30,
+0x103380,5,
+0x103400,11,
+0x103430,29,
+0x103500,2,
+0x10350c,4,
+0x103520,5,
+0x10353c,1,
+0x103544,1,
+0x10354c,5,
+0x103564,3,
+0x103600,4,
+0x103620,6,
+0x103640,6,
+0x103660,6,
+0x103680,6,
+0x1036a0,4,
+0x103800,6,
+0x103820,6,
+0x103840,6,
+0x103860,3,
+0x103884,14,
+0x1038c0,16,
+0x103c00,20,
+0x103c58,4,
+0x103c70,2,
+0x103c7c,7,
+0x103d00,4,
+0x103d30,2,
+0x103d3c,12,
+0x103d70,2,
+0x103d80,3,
+0x103e00,32,
 0x104000,6,
-0x104080,9,
-0x104100,6,
-0x104180,9,
-0x104200,9,
-0x104240,24,
-0x104300,2,
+0x104100,30,
+0x104180,5,
+0x104200,6,
+0x104300,30,
+0x104380,5,
+0x104400,11,
+0x104430,29,
+0x104500,2,
+0x10450c,4,
+0x104520,5,
+0x10453c,1,
+0x104544,1,
+0x10454c,5,
+0x104564,3,
+0x104600,4,
+0x104620,6,
+0x104640,6,
+0x104660,6,
+0x104680,6,
+0x1046a0,4,
+0x104800,6,
+0x104820,6,
+0x104840,6,
+0x104860,3,
+0x104884,14,
+0x1048c0,16,
+0x104c00,20,
+0x104c58,4,
+0x104c70,2,
+0x104c7c,7,
+0x104d00,4,
+0x104d30,2,
+0x104d3c,12,
+0x104d70,2,
+0x104d80,3,
+0x104e00,32,
 0x105000,6,
-0x105080,9,
-0x105100,6,
-0x105180,9,
-0x105200,9,
-0x105240,24,
-0x105300,2,
+0x105100,30,
+0x105180,5,
+0x105200,6,
+0x105300,30,
+0x105380,5,
+0x105400,11,
+0x105430,29,
+0x105500,2,
+0x10550c,4,
+0x105520,5,
+0x10553c,1,
+0x105544,1,
+0x10554c,5,
+0x105564,3,
+0x105600,4,
+0x105620,6,
+0x105640,6,
+0x105660,6,
+0x105680,6,
+0x1056a0,4,
+0x105800,6,
+0x105820,6,
+0x105840,6,
+0x105860,3,
+0x105884,14,
+0x1058c0,16,
+0x105c00,20,
+0x105c58,4,
+0x105c70,2,
+0x105c7c,7,
+0x105d00,4,
+0x105d30,2,
+0x105d3c,12,
+0x105d70,2,
+0x105d80,3,
+0x105e00,32,
 0x106000,6,
-0x106080,9,
-0x106100,6,
-0x106180,9,
-0x106200,9,
-0x106240,24,
-0x106300,2,
+0x106100,30,
+0x106180,5,
+0x106200,6,
+0x106300,30,
+0x106380,5,
+0x106400,11,
+0x106430,29,
+0x106500,2,
+0x10650c,4,
+0x106520,5,
+0x10653c,1,
+0x106544,1,
+0x10654c,5,
+0x106564,3,
+0x106600,4,
+0x106620,6,
+0x106640,6,
+0x106660,6,
+0x106680,6,
+0x1066a0,4,
+0x106800,6,
+0x106820,6,
+0x106840,6,
+0x106860,3,
+0x106884,14,
+0x1068c0,16,
+0x106c00,20,
+0x106c58,4,
+0x106c70,2,
+0x106c7c,7,
+0x106d00,4,
+0x106d30,2,
+0x106d3c,12,
+0x106d70,2,
+0x106d80,3,
+0x106e00,32,
 0x107000,6,
-0x107080,9,
-0x107100,6,
-0x107180,9,
-0x107200,9,
-0x107240,24,
-0x107300,2,
+0x107100,30,
+0x107180,5,
+0x107200,6,
+0x107300,30,
+0x107380,5,
+0x107400,11,
+0x107430,29,
+0x107500,2,
+0x10750c,4,
+0x107520,5,
+0x10753c,1,
+0x107544,1,
+0x10754c,5,
+0x107564,3,
+0x107600,4,
+0x107620,6,
+0x107640,6,
+0x107660,6,
+0x107680,6,
+0x1076a0,4,
+0x107800,6,
+0x107820,6,
+0x107840,6,
+0x107860,3,
+0x107884,14,
+0x1078c0,16,
+0x107c00,20,
+0x107c58,4,
+0x107c70,2,
+0x107c7c,7,
+0x107d00,4,
+0x107d30,2,
+0x107d3c,12,
+0x107d70,2,
+0x107d80,3,
+0x107e00,32,
 0x108000,6,
-0x108080,9,
-0x108100,6,
-0x108180,9,
-0x108200,9,
-0x108240,24,
-0x108300,2,
+0x108100,30,
+0x108180,5,
+0x108200,6,
+0x108300,30,
+0x108380,5,
+0x108400,11,
+0x108430,29,
+0x108500,2,
+0x10850c,4,
+0x108520,5,
+0x10853c,1,
+0x108544,1,
+0x10854c,5,
+0x108564,3,
+0x108600,4,
+0x108620,6,
+0x108640,6,
+0x108660,6,
+0x108680,6,
+0x1086a0,4,
+0x108800,6,
+0x108820,6,
+0x108840,6,
+0x108860,3,
+0x108884,14,
+0x1088c0,16,
+0x108c00,20,
+0x108c58,4,
+0x108c70,2,
+0x108c7c,7,
+0x108d00,4,
+0x108d30,2,
+0x108d3c,12,
+0x108d70,2,
+0x108d80,3,
+0x108e00,32,
 0x109000,6,
-0x109080,9,
-0x109100,6,
-0x109180,9,
-0x109200,9,
-0x109240,24,
-0x109300,2,
-0x114000,5,
+0x109100,30,
+0x109180,5,
+0x109200,6,
+0x109300,30,
+0x109380,5,
+0x109400,11,
+0x109430,29,
+0x109500,2,
+0x10950c,4,
+0x109520,5,
+0x10953c,1,
+0x109544,1,
+0x10954c,5,
+0x109564,3,
+0x109600,4,
+0x109620,6,
+0x109640,6,
+0x109660,6,
+0x109680,6,
+0x1096a0,4,
+0x109800,6,
+0x109820,6,
+0x109840,6,
+0x109860,3,
+0x109884,14,
+0x1098c0,16,
+0x109c00,20,
+0x109c58,4,
+0x109c70,2,
+0x109c7c,7,
+0x109d00,4,
+0x109d30,2,
+0x109d3c,12,
+0x109d70,2,
+0x109d80,3,
+0x109e00,32,
+0x10a000,1,
+0x113ffc,6,
 0x114018,3,
 0x114028,3,
 0x114038,3,
 0x114078,3,
 0x114088,12,
 0x1140c8,13,
-0x114100,25,
-0x114180,9,
+0x114100,29,
+0x114178,11,
 0x1141c0,3,
 0x1141d0,3,
+0x1141e0,6,
 0x114400,5,
-0x114418,5,
-0x114434,5,
-0x11452c,3,
-0x114590,5,
+0x114428,5,
+0x114450,5,
+0x114478,5,
+0x1144a0,4,
 0x1145ac,1,
 0x1145d8,4,
-0x114600,40,
-0x114900,6,
-0x114920,26,
-0x114c00,20,
-0x114c60,2,
-0x114c70,10,
-0x114d00,9,
-0x114d30,7,
-0x114e00,64,
+0x114600,6,
+0x114620,6,
+0x114640,6,
+0x114660,6,
+0x114680,6,
+0x1146a0,6,
+0x1146c0,6,
+0x1146e0,6,
+0x114700,6,
+0x114720,6,
+0x114740,3,
+0x114900,7,
+0x114920,36,
+0x114c00,1,
+0x114c08,1,
+0x114c10,5,
+0x114c38,1,
+0x114c60,7,
 0x115000,1,
+0x115008,11,
+0x115038,10,
+0x115068,3,
+0x115104,4,
+0x115128,3,
+0x115204,5,
+0x115220,10,
+0x115250,3,
+0x115280,6,
+0x1152a0,6,
+0x1152c0,6,
+0x1152e0,3,
+0x115300,7,
 0x140000,6,
-0x140080,9,
-0x140100,6,
-0x140180,9,
-0x140200,9,
-0x140240,24,
-0x140300,2,
+0x140100,30,
+0x140180,5,
+0x140200,6,
+0x140300,30,
+0x140380,5,
+0x140400,11,
+0x140430,29,
+0x140500,2,
+0x14050c,4,
+0x140520,5,
+0x14053c,1,
+0x140544,1,
+0x14054c,5,
+0x140564,3,
+0x140600,4,
+0x140620,6,
+0x140640,6,
+0x140660,6,
+0x140680,6,
+0x1406a0,4,
+0x140800,6,
+0x140820,6,
+0x140840,6,
+0x140860,3,
+0x140884,14,
+0x1408c0,16,
+0x140c00,20,
+0x140c58,4,
+0x140c70,2,
+0x140c7c,7,
+0x140d00,4,
+0x140d30,2,
+0x140d3c,12,
+0x140d70,2,
+0x140d80,3,
+0x140e00,32,
 0x141000,6,
-0x141080,9,
-0x141100,6,
-0x141180,9,
-0x141200,9,
-0x141240,24,
-0x141300,2,
+0x141100,30,
+0x141180,5,
+0x141200,6,
+0x141300,30,
+0x141380,5,
+0x141400,11,
+0x141430,29,
+0x141500,2,
+0x14150c,4,
+0x141520,5,
+0x14153c,1,
+0x141544,1,
+0x14154c,5,
+0x141564,3,
+0x141600,4,
+0x141620,6,
+0x141640,6,
+0x141660,6,
+0x141680,6,
+0x1416a0,4,
+0x141800,6,
+0x141820,6,
+0x141840,6,
+0x141860,3,
+0x141884,14,
+0x1418c0,16,
+0x141c00,20,
+0x141c58,4,
+0x141c70,2,
+0x141c7c,7,
+0x141d00,4,
+0x141d30,2,
+0x141d3c,12,
+0x141d70,2,
+0x141d80,3,
+0x141e00,32,
 0x142000,6,
-0x142080,9,
-0x142100,6,
-0x142180,9,
-0x142200,9,
-0x142240,24,
-0x142300,2,
+0x142100,30,
+0x142180,5,
+0x142200,6,
+0x142300,30,
+0x142380,5,
+0x142400,11,
+0x142430,29,
+0x142500,2,
+0x14250c,4,
+0x142520,5,
+0x14253c,1,
+0x142544,1,
+0x14254c,5,
+0x142564,3,
+0x142600,4,
+0x142620,6,
+0x142640,6,
+0x142660,6,
+0x142680,6,
+0x1426a0,4,
+0x142800,6,
+0x142820,6,
+0x142840,6,
+0x142860,3,
+0x142884,14,
+0x1428c0,16,
+0x142c00,20,
+0x142c58,4,
+0x142c70,2,
+0x142c7c,7,
+0x142d00,4,
+0x142d30,2,
+0x142d3c,12,
+0x142d70,2,
+0x142d80,3,
+0x142e00,32,
 0x143000,6,
-0x143080,9,
-0x143100,6,
-0x143180,9,
-0x143200,9,
-0x143240,24,
-0x143300,2,
+0x143100,30,
+0x143180,5,
+0x143200,6,
+0x143300,30,
+0x143380,5,
+0x143400,11,
+0x143430,29,
+0x143500,2,
+0x14350c,4,
+0x143520,5,
+0x14353c,1,
+0x143544,1,
+0x14354c,5,
+0x143564,3,
+0x143600,4,
+0x143620,6,
+0x143640,6,
+0x143660,6,
+0x143680,6,
+0x1436a0,4,
+0x143800,6,
+0x143820,6,
+0x143840,6,
+0x143860,3,
+0x143884,14,
+0x1438c0,16,
+0x143c00,20,
+0x143c58,4,
+0x143c70,2,
+0x143c7c,7,
+0x143d00,4,
+0x143d30,2,
+0x143d3c,12,
+0x143d70,2,
+0x143d80,3,
+0x143e00,32,
 0x144000,6,
-0x144080,9,
-0x144100,6,
-0x144180,9,
-0x144200,9,
-0x144240,24,
-0x144300,2,
+0x144100,30,
+0x144180,5,
+0x144200,6,
+0x144300,30,
+0x144380,5,
+0x144400,11,
+0x144430,29,
+0x144500,2,
+0x14450c,4,
+0x144520,5,
+0x14453c,1,
+0x144544,1,
+0x14454c,5,
+0x144564,3,
+0x144600,4,
+0x144620,6,
+0x144640,6,
+0x144660,6,
+0x144680,6,
+0x1446a0,4,
+0x144800,6,
+0x144820,6,
+0x144840,6,
+0x144860,3,
+0x144884,14,
+0x1448c0,16,
+0x144c00,20,
+0x144c58,4,
+0x144c70,2,
+0x144c7c,7,
+0x144d00,4,
+0x144d30,2,
+0x144d3c,12,
+0x144d70,2,
+0x144d80,3,
+0x144e00,32,
 0x145000,6,
-0x145080,9,
-0x145100,6,
-0x145180,9,
-0x145200,9,
-0x145240,24,
-0x145300,2,
+0x145100,30,
+0x145180,5,
+0x145200,6,
+0x145300,30,
+0x145380,5,
+0x145400,11,
+0x145430,29,
+0x145500,2,
+0x14550c,4,
+0x145520,5,
+0x14553c,1,
+0x145544,1,
+0x14554c,5,
+0x145564,3,
+0x145600,4,
+0x145620,6,
+0x145640,6,
+0x145660,6,
+0x145680,6,
+0x1456a0,4,
+0x145800,6,
+0x145820,6,
+0x145840,6,
+0x145860,3,
+0x145884,14,
+0x1458c0,16,
+0x145c00,20,
+0x145c58,4,
+0x145c70,2,
+0x145c7c,7,
+0x145d00,4,
+0x145d30,2,
+0x145d3c,12,
+0x145d70,2,
+0x145d80,3,
+0x145e00,32,
 0x146000,6,
-0x146080,9,
-0x146100,6,
-0x146180,9,
-0x146200,9,
-0x146240,24,
-0x146300,2,
+0x146100,30,
+0x146180,5,
+0x146200,6,
+0x146300,30,
+0x146380,5,
+0x146400,11,
+0x146430,29,
+0x146500,2,
+0x14650c,4,
+0x146520,5,
+0x14653c,1,
+0x146544,1,
+0x14654c,5,
+0x146564,3,
+0x146600,4,
+0x146620,6,
+0x146640,6,
+0x146660,6,
+0x146680,6,
+0x1466a0,4,
+0x146800,6,
+0x146820,6,
+0x146840,6,
+0x146860,3,
+0x146884,14,
+0x1468c0,16,
+0x146c00,20,
+0x146c58,4,
+0x146c70,2,
+0x146c7c,7,
+0x146d00,4,
+0x146d30,2,
+0x146d3c,12,
+0x146d70,2,
+0x146d80,3,
+0x146e00,32,
 0x147000,6,
-0x147080,9,
-0x147100,6,
-0x147180,9,
-0x147200,9,
-0x147240,24,
-0x147300,2,
+0x147100,30,
+0x147180,5,
+0x147200,6,
+0x147300,30,
+0x147380,5,
+0x147400,11,
+0x147430,29,
+0x147500,2,
+0x14750c,4,
+0x147520,5,
+0x14753c,1,
+0x147544,1,
+0x14754c,5,
+0x147564,3,
+0x147600,4,
+0x147620,6,
+0x147640,6,
+0x147660,6,
+0x147680,6,
+0x1476a0,4,
+0x147800,6,
+0x147820,6,
+0x147840,6,
+0x147860,3,
+0x147884,14,
+0x1478c0,16,
+0x147c00,20,
+0x147c58,4,
+0x147c70,2,
+0x147c7c,7,
+0x147d00,4,
+0x147d30,2,
+0x147d3c,12,
+0x147d70,2,
+0x147d80,3,
+0x147e00,32,
 0x148000,6,
-0x148080,9,
-0x148100,6,
-0x148180,9,
-0x148200,9,
-0x148240,24,
-0x148300,2,
+0x148100,30,
+0x148180,5,
+0x148200,6,
+0x148300,30,
+0x148380,5,
+0x148400,11,
+0x148430,29,
+0x148500,2,
+0x14850c,4,
+0x148520,5,
+0x14853c,1,
+0x148544,1,
+0x14854c,5,
+0x148564,3,
+0x148600,4,
+0x148620,6,
+0x148640,6,
+0x148660,6,
+0x148680,6,
+0x1486a0,4,
+0x148800,6,
+0x148820,6,
+0x148840,6,
+0x148860,3,
+0x148884,14,
+0x1488c0,16,
+0x148c00,20,
+0x148c58,4,
+0x148c70,2,
+0x148c7c,7,
+0x148d00,4,
+0x148d30,2,
+0x148d3c,12,
+0x148d70,2,
+0x148d80,3,
+0x148e00,32,
 0x149000,6,
-0x149080,9,
-0x149100,6,
-0x149180,9,
-0x149200,9,
-0x149240,24,
-0x149300,2,
-0x154000,5,
+0x149100,30,
+0x149180,5,
+0x149200,6,
+0x149300,30,
+0x149380,5,
+0x149400,11,
+0x149430,29,
+0x149500,2,
+0x14950c,4,
+0x149520,5,
+0x14953c,1,
+0x149544,1,
+0x14954c,5,
+0x149564,3,
+0x149600,4,
+0x149620,6,
+0x149640,6,
+0x149660,6,
+0x149680,6,
+0x1496a0,4,
+0x149800,6,
+0x149820,6,
+0x149840,6,
+0x149860,3,
+0x149884,14,
+0x1498c0,16,
+0x149c00,20,
+0x149c58,4,
+0x149c70,2,
+0x149c7c,7,
+0x149d00,4,
+0x149d30,2,
+0x149d3c,12,
+0x149d70,2,
+0x149d80,3,
+0x149e00,32,
+0x14a000,1,
+0x153ffc,6,
 0x154018,3,
 0x154028,3,
 0x154038,3,
 0x154078,3,
 0x154088,12,
 0x1540c8,13,
-0x154100,25,
-0x154180,9,
+0x154100,29,
+0x154178,11,
 0x1541c0,3,
 0x1541d0,3,
+0x1541e0,6,
 0x154400,5,
-0x154418,5,
-0x154434,5,
-0x15452c,3,
-0x154590,5,
+0x154428,5,
+0x154450,5,
+0x154478,5,
+0x1544a0,4,
 0x1545ac,1,
 0x1545d8,4,
-0x154600,40,
-0x154900,6,
-0x154920,26,
-0x154c00,20,
-0x154c60,2,
-0x154c70,10,
-0x154d00,9,
-0x154d30,7,
-0x154e00,64,
+0x154600,6,
+0x154620,6,
+0x154640,6,
+0x154660,6,
+0x154680,6,
+0x1546a0,6,
+0x1546c0,6,
+0x1546e0,6,
+0x154700,6,
+0x154720,6,
+0x154740,3,
+0x154900,7,
+0x154920,36,
+0x154c00,1,
+0x154c08,1,
+0x154c10,5,
+0x154c38,1,
+0x154c60,7,
 0x155000,1,
+0x155008,11,
+0x155038,10,
+0x155068,3,
+0x155104,4,
+0x155128,3,
+0x155204,5,
+0x155220,10,
+0x155250,3,
+0x155280,6,
+0x1552a0,6,
+0x1552c0,6,
+0x1552e0,3,
+0x155300,7,
 0x180000,6,
 0x180020,6,
 0x180040,6,
 0x180110,1,
 0x200000,5,
 0x200020,4,
-0x200034,9,
-0x20005c,7,
+0x200034,17,
 0x200080,1,
 0x2000a0,6,
 0x200100,5,
 0x200120,4,
-0x200134,9,
-0x20015c,7,
+0x200134,17,
 0x200180,1,
 0x2001a0,6,
 0x200200,5,
 0x200220,4,
-0x200234,9,
-0x20025c,7,
+0x200234,17,
 0x200280,1,
 0x2002a0,6,
 0x200300,5,
 0x200320,4,
-0x200334,9,
-0x20035c,7,
+0x200334,17,
 0x200380,1,
 0x2003a0,6,
-0x200400,4,
-0x200440,4,
+0x200400,6,
+0x200440,6,
 0x200480,3,
 0x2004c0,3,
-0x200500,5,
-0x200518,8,
+0x200500,6,
+0x20051c,7,
+0x200540,1,
 0x200c00,13,
-0x200c40,11,
+0x200c40,12,
 0x200c80,13,
-0x200cc0,11,
+0x200cc0,12,
 0x200d00,6,
 0x200d20,6,
-0x200e00,10,
+0x200d80,14,
+0x200dc0,2,
 0x200e40,11,
-0x200e80,8,
+0x200e80,6,
+0x200ea0,6,
 0x201000,2,
 0x201010,5,
 0x201040,3,
 0x201050,3,
-0x201060,7,
-0x201080,7,
-0x2010a0,7,
-0x2010c0,7,
-0x201100,7,
-0x201140,7,
-0x201180,5,
+0x201060,32,
+0x201100,8,
+0x201140,8,
+0x201180,3,
+0x201190,2,
 0x20119c,9,
 0x201218,9,
 0x201240,3,
 0x2012e4,1,
 0x201400,8,
 0x201424,2,
-0x201500,3,
+0x201500,5,
 0x201520,4,
-0x201540,3,
+0x201540,5,
 0x201560,4,
 0x201800,24,
-0x201864,2,
-0x201880,6,
-0x201900,12,
-0x201940,6,
-0x201960,6,
+0x201864,5,
+0x201880,8,
+0x201900,13,
 0x201980,4,
+0x2019a0,6,
 0x2019c0,6,
 0x2019dc,1,
 0x201a00,6,
 0x201a1c,1,
 0x201a40,1,
+0x201a60,1,
 0x201a68,23,
+0x201ac8,6,
 0x201b00,17,
+0x201b48,6,
 0x201b80,12,
+0x201c00,6,
+0x201c20,6,
+0x201c40,6,
+0x201c60,3,
+0x201d00,6,
+0x201d20,6,
+0x201d40,3,
+0x201d80,6,
+0x201da0,6,
+0x201dc0,3,
 0x202000,5,
 0x202020,4,
-0x202034,9,
-0x20205c,7,
+0x202034,17,
 0x202080,1,
 0x2020a0,6,
 0x202100,5,
 0x202120,4,
-0x202134,9,
-0x20215c,7,
+0x202134,17,
 0x202180,1,
 0x2021a0,6,
 0x202200,5,
 0x202220,4,
-0x202234,9,
-0x20225c,7,
+0x202234,17,
 0x202280,1,
 0x2022a0,6,
 0x202300,5,
 0x202320,4,
-0x202334,9,
-0x20235c,7,
+0x202334,17,
 0x202380,1,
 0x2023a0,6,
-0x202400,4,
-0x202440,4,
+0x202400,6,
+0x202440,6,
 0x202480,3,
 0x2024c0,3,
-0x202500,5,
-0x202518,8,
+0x202500,6,
+0x20251c,7,
+0x202540,1,
 0x202c00,13,
-0x202c40,11,
+0x202c40,12,
 0x202c80,13,
-0x202cc0,11,
+0x202cc0,12,
 0x202d00,6,
 0x202d20,6,
-0x202e00,10,
+0x202d80,14,
+0x202dc0,2,
 0x202e40,11,
-0x202e80,8,
+0x202e80,6,
+0x202ea0,6,
 0x203000,2,
 0x203010,5,
 0x203040,3,
 0x203050,3,
-0x203060,7,
-0x203080,7,
-0x2030a0,7,
-0x2030c0,7,
-0x203100,7,
-0x203140,7,
-0x203180,5,
+0x203060,32,
+0x203100,8,
+0x203140,8,
+0x203180,3,
+0x203190,2,
 0x20319c,9,
 0x203218,9,
 0x203240,3,
 0x2032e4,1,
 0x203400,8,
 0x203424,2,
-0x203500,3,
+0x203500,5,
 0x203520,4,
-0x203540,3,
+0x203540,5,
 0x203560,4,
 0x203800,24,
-0x203864,2,
-0x203880,6,
-0x203900,12,
-0x203940,6,
-0x203960,6,
+0x203864,5,
+0x203880,8,
+0x203900,13,
 0x203980,4,
+0x2039a0,6,
 0x2039c0,6,
 0x2039dc,1,
 0x203a00,6,
 0x203a1c,1,
 0x203a40,1,
+0x203a60,1,
 0x203a68,23,
+0x203ac8,6,
 0x203b00,17,
+0x203b48,6,
 0x203b80,12,
-0x204000,4,
-0x204014,6,
-0x204030,5,
-0x204080,4,
-0x204094,6,
-0x2040b0,5,
-0x204100,4,
-0x204114,6,
-0x204130,5,
-0x204180,4,
-0x204194,6,
-0x2041b0,5,
-0x204200,3,
-0x204210,23,
-0x204500,3,
-0x204510,12,
-0x204580,3,
-0x204590,12,
-0x204600,3,
-0x204610,12,
-0x204680,3,
-0x204690,12,
-0x204700,4,
-0x204718,13,
-0x204800,25,
-0x204880,25,
-0x204900,25,
-0x204980,25,
-0x204a00,17,
-0x204a50,3,
-0x204a60,3,
-0x205000,4,
-0x205014,6,
-0x205030,5,
-0x205080,4,
-0x205094,6,
-0x2050b0,5,
-0x205100,4,
-0x205114,6,
-0x205130,5,
-0x205180,4,
-0x205194,6,
-0x2051b0,5,
-0x205200,3,
-0x205210,23,
-0x205500,3,
-0x205510,12,
-0x205580,3,
-0x205590,12,
-0x205600,3,
-0x205610,12,
-0x205680,3,
-0x205690,12,
-0x205700,4,
-0x205718,13,
-0x205800,25,
-0x205880,25,
-0x205900,25,
-0x205980,25,
-0x205a00,17,
-0x205a50,3,
-0x205a60,3,
-0x206000,13,
-0x206040,22,
-0x2060a0,6,
-0x2060c0,3,
+0x203c00,6,
+0x203c20,6,
+0x203c40,6,
+0x203c60,3,
+0x203d00,6,
+0x203d20,6,
+0x203d40,3,
+0x203d80,6,
+0x203da0,6,
+0x203dc0,3,
+0x204000,29,
+0x204078,5,
+0x204090,2,
+0x2040a0,10,
+0x204100,93,
+0x204278,5,
+0x204290,2,
+0x2042a0,10,
+0x204300,93,
+0x204478,5,
+0x204490,2,
+0x2044a0,10,
+0x204500,93,
+0x204678,5,
+0x204690,2,
+0x2046a0,10,
+0x204700,93,
+0x20487c,1,
+0x204a00,8,
+0x204a24,15,
+0x204a64,23,
+0x204ac4,6,
+0x204b00,4,
+0x204b20,3,
+0x204c00,2,
+0x204c40,14,
+0x204c80,9,
+0x204d00,9,
+0x204d2c,1,
+0x204d80,6,
+0x204e00,2,
+0x204e0c,1,
+0x204e14,5,
+0x204e2c,1,
+0x204e34,5,
+0x204e4c,1,
+0x204e54,5,
+0x204e6c,1,
+0x204e74,5,
+0x204e8c,1,
+0x204e94,5,
+0x204eac,1,
+0x204eb4,3,
+0x205000,29,
+0x205078,5,
+0x205090,2,
+0x2050a0,10,
+0x205100,93,
+0x205278,5,
+0x205290,2,
+0x2052a0,10,
+0x205300,93,
+0x205478,5,
+0x205490,2,
+0x2054a0,10,
+0x205500,93,
+0x205678,5,
+0x205690,2,
+0x2056a0,10,
+0x205700,93,
+0x20587c,1,
+0x205a00,8,
+0x205a24,15,
+0x205a64,23,
+0x205ac4,6,
+0x205b00,4,
+0x205b20,3,
+0x205c00,2,
+0x205c40,14,
+0x205c80,9,
+0x205d00,9,
+0x205d2c,1,
+0x205d80,6,
+0x205e00,2,
+0x205e0c,1,
+0x205e14,5,
+0x205e2c,1,
+0x205e34,5,
+0x205e4c,1,
+0x205e54,5,
+0x205e6c,1,
+0x205e74,5,
+0x205e8c,1,
+0x205e94,5,
+0x205eac,1,
+0x205eb4,3,
+0x206000,14,
+0x206070,3,
+0x206080,6,
 0x206100,9,
-0x206400,2,
-0x20640c,6,
-0x206440,13,
-0x206480,16,
-0x206800,1,
-0x206808,3,
-0x20681c,8,
-0x206840,3,
-0x206850,3,
-0x206880,1,
-0x206888,3,
-0x20689c,8,
-0x2068c0,3,
-0x2068d0,3,
-0x206900,1,
-0x206908,3,
-0x20691c,8,
-0x206940,3,
-0x206950,3,
-0x206980,1,
-0x206988,3,
-0x20699c,8,
-0x2069c0,3,
-0x2069d0,3,
-0x206a00,1,
-0x206a08,3,
-0x206a1c,8,
-0x206a40,3,
-0x206a50,3,
-0x206a80,1,
-0x206a88,3,
-0x206a9c,8,
-0x206ac0,3,
-0x206ad0,3,
-0x206b00,1,
-0x206b08,3,
-0x206b1c,8,
-0x206b40,3,
-0x206b50,3,
-0x206b80,1,
-0x206b88,3,
-0x206b9c,8,
-0x206bc0,3,
-0x206bd0,3,
-0x206c00,1,
-0x206c08,3,
-0x206c1c,8,
-0x206c40,3,
-0x206c50,3,
-0x206c80,2,
-0x206c94,13,
+0x206204,1,
+0x20620c,6,
+0x206240,13,
+0x206280,16,
+0x206400,8,
+0x206424,15,
+0x206464,15,
+0x2064a4,15,
+0x2064e4,23,
+0x206544,6,
+0x206580,10,
+0x2065ac,1,
+0x2065b4,5,
+0x2065cc,1,
+0x2065d4,5,
+0x2065ec,1,
+0x2065f4,13,
+0x206680,7,
+0x2066a0,5,
+0x2066c0,5,
+0x2066e0,3,
+0x206800,19,
+0x206850,10,
+0x206880,19,
+0x2068d0,10,
+0x206900,19,
+0x206950,10,
+0x206980,19,
+0x2069d0,10,
+0x206a00,19,
+0x206a50,10,
+0x206a80,19,
+0x206ad0,10,
+0x206b00,19,
+0x206b50,10,
+0x206b80,19,
+0x206bd0,10,
+0x206c00,19,
+0x206c50,10,
+0x206c84,1,
+0x206c94,8,
+0x206cb8,9,
+0x206ce0,4,
 0x207000,6,
 0x207020,3,
-0x207034,1,
 0x207040,7,
 0x207060,6,
 0x207100,5,
 0x207138,1,
 0x207144,1,
-0x207400,1,
-0x207418,1,
-0x207434,1,
-0x20752c,5,
-0x207590,1,
-0x2075ac,1,
-0x2075d8,4,
-0x207600,8,
+0x207150,2,
 0x208000,6,
 0x208020,3,
 0x208030,9,
-0x208080,6,
-0x208100,20,
+0x208100,6,
+0x208120,10,
+0x208150,8,
 0x208400,1,
-0x208418,1,
-0x208434,1,
-0x20852c,4,
-0x208590,1,
+0x208428,1,
+0x208450,1,
+0x208478,1,
+0x2084a0,8,
 0x2085ac,1,
 0x2085d8,4,
-0x208600,8,
+0x208600,6,
+0x208620,6,
+0x208640,3,
+0x208800,6,
+0x208820,3,
+0x208830,4,
+0x208858,2,
+0x208864,1,
+0x208874,3,
+0x208898,2,
+0x2088a4,1,
+0x2088b4,3,
 0x209000,6,
 0x209020,6,
 0x209040,3,
 0x209080,14,
 0x2090bc,1,
 0x2090c4,13,
-0x2090fc,6,
-0x209120,5,
-0x209190,10,
-0x209200,16,
-0x209244,32,
-0x209300,26,
+0x2090fc,5,
+0x209120,4,
+0x209140,3,
+0x209180,3,
+0x209190,3,
+0x2091a0,1,
+0x2091e0,6,
+0x209200,20,
+0x20925c,30,
+0x209300,24,
 0x209380,2,
 0x2093a0,1,
 0x2093c0,11,
-0x209404,4,
-0x209418,16,
+0x209404,3,
+0x209420,11,
 0x209460,3,
+0x209480,6,
 0x209500,6,
+0x209520,6,
 0x209540,1,
 0x209558,2,
 0x209600,17,
-0x209800,366,
+0x209800,410,
 0x20a000,6,
 0x20a020,6,
 0x20a040,3,
 0x20a080,14,
 0x20a0bc,1,
 0x20a0c4,13,
-0x20a0fc,6,
-0x20a120,5,
-0x20a190,10,
-0x20a200,16,
-0x20a244,32,
-0x20a300,26,
+0x20a0fc,5,
+0x20a120,4,
+0x20a140,3,
+0x20a180,3,
+0x20a190,3,
+0x20a1a0,1,
+0x20a1e0,6,
+0x20a200,20,
+0x20a25c,30,
+0x20a300,24,
 0x20a380,2,
 0x20a3a0,1,
 0x20a3c0,11,
-0x20a404,4,
-0x20a418,16,
+0x20a404,3,
+0x20a420,11,
 0x20a460,3,
+0x20a480,6,
 0x20a500,6,
+0x20a520,6,
 0x20a540,1,
 0x20a558,2,
 0x20a600,17,
-0x20a800,366,
+0x20a800,410,
 0x20b000,4,
-0x20b020,9,
-0x20b048,6,
-0x20b064,6,
-0x20b080,1,
+0x20b020,25,
+0x20b088,8,
 0x20b100,4,
-0x20b120,9,
-0x20b148,6,
-0x20b164,6,
-0x20b180,1,
-0x20b200,35,
-0x20b290,6,
-0x20b2b4,6,
-0x20b2d0,5,
-0x20b2e8,5,
+0x20b120,25,
+0x20b188,8,
+0x20b200,34,
 0x20b300,37,
-0x20b400,6,
-0x20b420,3,
-0x20b438,4,
-0x20b454,3,
-0x20b478,4,
-0x20b494,3,
+0x20b400,16,
+0x20b464,1,
+0x20b474,3,
+0x20b500,6,
+0x20b520,2,
+0x20b530,9,
+0x20b570,10,
+0x20b5a0,2,
+0x20b5b0,9,
+0x20b5f0,4,
+0x20b620,7,
+0x20b640,16,
+0x20b700,6,
+0x20b720,6,
+0x20b740,6,
+0x20b760,6,
+0x20b780,3,
 0x20b800,5,
 0x20b818,1,
 0x20b854,6,
 0x20b880,2,
 0x20b8a4,1,
+0x20b8ac,2,
 0x20ba00,28,
-0x20ba7c,5,
-0x20bab0,2,
+0x20ba7c,13,
+0x20bab4,1,
 0x20babc,10,
-0x20bb00,2,
-0x20bb0c,7,
+0x20bb04,1,
+0x20bb0c,5,
+0x20bb24,1,
 0x20bb34,9,
 0x20bb60,6,
-0x20bb80,8,
+0x20bb80,22,
+0x20bbe0,3,
+0x20bbf0,2,
 0x20bc00,5,
 0x20bc18,1,
 0x20bc54,6,
 0x20bc80,2,
 0x20bca4,1,
+0x20bcac,2,
 0x20be00,28,
-0x20be7c,5,
-0x20beb0,2,
+0x20be7c,13,
+0x20beb4,1,
 0x20bebc,10,
-0x20bf00,2,
-0x20bf0c,7,
+0x20bf04,1,
+0x20bf0c,5,
+0x20bf24,1,
 0x20bf34,9,
 0x20bf60,6,
-0x20bf80,8,
-0x20c000,4,
-0x20c014,10,
-0x20c040,1,
-0x20c048,3,
-0x20c058,1,
-0x20c060,1,
+0x20bf80,22,
+0x20bfe0,3,
+0x20bff0,2,
+0x20c008,2,
+0x20c014,11,
+0x20c044,1,
+0x20c04c,3,
+0x20c05c,1,
+0x20c064,1,
 0x20c07c,1,
-0x20c500,1,
-0x20c518,2,
+0x20c500,2,
+0x20c518,1,
+0x20c520,3,
 0x20c540,6,
-0x20c800,4,
-0x20c814,10,
-0x20c840,1,
-0x20c848,3,
-0x20c858,1,
-0x20c860,1,
+0x20c580,10,
+0x20c808,2,
+0x20c814,11,
+0x20c844,1,
+0x20c84c,3,
+0x20c85c,1,
+0x20c864,1,
 0x20c87c,1,
-0x20cd00,1,
-0x20cd18,2,
+0x20cd00,2,
+0x20cd18,1,
+0x20cd20,3,
 0x20cd40,6,
+0x20cd80,10,
 0x20d800,2,
-0x20d818,2,
-0x20d834,2,
-0x20d92c,6,
-0x20d990,2,
+0x20d828,2,
+0x20d850,2,
+0x20d878,2,
+0x20d8a0,6,
 0x20d9ac,1,
 0x20d9d8,4,
-0x20da00,16,
-0x20dc00,3,
-0x20dc20,2,
-0x20dc40,1,
+0x20da00,6,
+0x20da20,6,
+0x20da40,6,
+0x20da60,6,
+0x20da80,3,
+0x20dc00,6,
+0x20dc20,3,
+0x20dc40,2,
+0x20dc60,1,
 0x210000,5,
 0x210020,4,
-0x210034,9,
-0x21005c,7,
+0x210034,17,
 0x210080,1,
 0x2100a0,6,
 0x210100,5,
 0x210120,4,
-0x210134,9,
-0x21015c,7,
+0x210134,17,
 0x210180,1,
 0x2101a0,6,
 0x210200,5,
 0x210220,4,
-0x210234,9,
-0x21025c,7,
+0x210234,17,
 0x210280,1,
 0x2102a0,6,
 0x210300,5,
 0x210320,4,
-0x210334,9,
-0x21035c,7,
+0x210334,17,
 0x210380,1,
 0x2103a0,6,
-0x210400,4,
-0x210440,4,
+0x210400,6,
+0x210440,6,
 0x210480,3,
 0x2104c0,3,
-0x210500,5,
-0x210518,8,
+0x210500,6,
+0x21051c,7,
+0x210540,1,
 0x210c00,13,
-0x210c40,11,
+0x210c40,12,
 0x210c80,13,
-0x210cc0,11,
+0x210cc0,12,
 0x210d00,6,
 0x210d20,6,
-0x210e00,10,
+0x210d80,14,
+0x210dc0,2,
 0x210e40,11,
-0x210e80,8,
+0x210e80,6,
+0x210ea0,6,
 0x211000,2,
 0x211010,5,
 0x211040,3,
 0x211050,3,
-0x211060,7,
-0x211080,7,
-0x2110a0,7,
-0x2110c0,7,
-0x211100,7,
-0x211140,7,
-0x211180,5,
+0x211060,32,
+0x211100,8,
+0x211140,8,
+0x211180,3,
+0x211190,2,
 0x21119c,9,
 0x211218,9,
 0x211240,3,
 0x2112e4,1,
 0x211400,8,
 0x211424,2,
-0x211500,3,
+0x211500,5,
 0x211520,4,
-0x211540,3,
+0x211540,5,
 0x211560,4,
 0x211800,24,
-0x211864,2,
-0x211880,6,
-0x211900,12,
-0x211940,6,
-0x211960,6,
+0x211864,5,
+0x211880,8,
+0x211900,13,
 0x211980,4,
+0x2119a0,6,
 0x2119c0,6,
 0x2119dc,1,
 0x211a00,6,
 0x211a1c,1,
 0x211a40,1,
+0x211a60,1,
 0x211a68,23,
+0x211ac8,6,
 0x211b00,17,
+0x211b48,6,
 0x211b80,12,
+0x211c00,6,
+0x211c20,6,
+0x211c40,6,
+0x211c60,3,
+0x211d00,6,
+0x211d20,6,
+0x211d40,3,
+0x211d80,6,
+0x211da0,6,
+0x211dc0,3,
 0x212000,5,
 0x212020,4,
-0x212034,9,
-0x21205c,7,
+0x212034,17,
 0x212080,1,
 0x2120a0,6,
 0x212100,5,
 0x212120,4,
-0x212134,9,
-0x21215c,7,
+0x212134,17,
 0x212180,1,
 0x2121a0,6,
 0x212200,5,
 0x212220,4,
-0x212234,9,
-0x21225c,7,
+0x212234,17,
 0x212280,1,
 0x2122a0,6,
 0x212300,5,
 0x212320,4,
-0x212334,9,
-0x21235c,7,
+0x212334,17,
 0x212380,1,
 0x2123a0,6,
-0x212400,4,
-0x212440,4,
+0x212400,6,
+0x212440,6,
 0x212480,3,
 0x2124c0,3,
-0x212500,5,
-0x212518,8,
+0x212500,6,
+0x21251c,7,
+0x212540,1,
 0x212c00,13,
-0x212c40,11,
+0x212c40,12,
 0x212c80,13,
-0x212cc0,11,
+0x212cc0,12,
 0x212d00,6,
 0x212d20,6,
-0x212e00,10,
+0x212d80,14,
+0x212dc0,2,
 0x212e40,11,
-0x212e80,8,
+0x212e80,6,
+0x212ea0,6,
 0x213000,2,
 0x213010,5,
 0x213040,3,
 0x213050,3,
-0x213060,7,
-0x213080,7,
-0x2130a0,7,
-0x2130c0,7,
-0x213100,7,
-0x213140,7,
-0x213180,5,
+0x213060,32,
+0x213100,8,
+0x213140,8,
+0x213180,3,
+0x213190,2,
 0x21319c,9,
 0x213218,9,
 0x213240,3,
 0x2132e4,1,
 0x213400,8,
 0x213424,2,
-0x213500,3,
+0x213500,5,
 0x213520,4,
-0x213540,3,
+0x213540,5,
 0x213560,4,
 0x213800,24,
-0x213864,2,
-0x213880,6,
-0x213900,12,
-0x213940,6,
-0x213960,6,
+0x213864,5,
+0x213880,8,
+0x213900,13,
 0x213980,4,
+0x2139a0,6,
 0x2139c0,6,
 0x2139dc,1,
 0x213a00,6,
 0x213a1c,1,
 0x213a40,1,
+0x213a60,1,
 0x213a68,23,
+0x213ac8,6,
 0x213b00,17,
+0x213b48,6,
 0x213b80,12,
-0x214000,4,
-0x214014,6,
-0x214030,5,
-0x214080,4,
-0x214094,6,
-0x2140b0,5,
-0x214100,4,
-0x214114,6,
-0x214130,5,
-0x214180,4,
-0x214194,6,
-0x2141b0,5,
-0x214200,3,
-0x214210,23,
-0x214500,3,
-0x214510,12,
-0x214580,3,
-0x214590,12,
-0x214600,3,
-0x214610,12,
-0x214680,3,
-0x214690,12,
-0x214700,4,
-0x214718,13,
-0x214800,25,
-0x214880,25,
-0x214900,25,
-0x214980,25,
-0x214a00,17,
-0x214a50,3,
-0x214a60,3,
-0x215000,4,
-0x215014,6,
-0x215030,5,
-0x215080,4,
-0x215094,6,
-0x2150b0,5,
-0x215100,4,
-0x215114,6,
-0x215130,5,
-0x215180,4,
-0x215194,6,
-0x2151b0,5,
-0x215200,3,
-0x215210,23,
-0x215500,3,
-0x215510,12,
-0x215580,3,
-0x215590,12,
-0x215600,3,
-0x215610,12,
-0x215680,3,
-0x215690,12,
-0x215700,4,
-0x215718,13,
-0x215800,25,
-0x215880,25,
-0x215900,25,
-0x215980,25,
-0x215a00,17,
-0x215a50,3,
-0x215a60,3,
-0x216000,13,
-0x216040,22,
-0x2160a0,6,
-0x2160c0,3,
+0x213c00,6,
+0x213c20,6,
+0x213c40,6,
+0x213c60,3,
+0x213d00,6,
+0x213d20,6,
+0x213d40,3,
+0x213d80,6,
+0x213da0,6,
+0x213dc0,3,
+0x214000,29,
+0x214078,5,
+0x214090,2,
+0x2140a0,10,
+0x214100,93,
+0x214278,5,
+0x214290,2,
+0x2142a0,10,
+0x214300,93,
+0x214478,5,
+0x214490,2,
+0x2144a0,10,
+0x214500,93,
+0x214678,5,
+0x214690,2,
+0x2146a0,10,
+0x214700,93,
+0x21487c,1,
+0x214a00,8,
+0x214a24,15,
+0x214a64,23,
+0x214ac4,6,
+0x214b00,4,
+0x214b20,3,
+0x214c00,2,
+0x214c40,14,
+0x214c80,9,
+0x214d00,9,
+0x214d2c,1,
+0x214d80,6,
+0x214e00,2,
+0x214e0c,1,
+0x214e14,5,
+0x214e2c,1,
+0x214e34,5,
+0x214e4c,1,
+0x214e54,5,
+0x214e6c,1,
+0x214e74,5,
+0x214e8c,1,
+0x214e94,5,
+0x214eac,1,
+0x214eb4,3,
+0x215000,29,
+0x215078,5,
+0x215090,2,
+0x2150a0,10,
+0x215100,93,
+0x215278,5,
+0x215290,2,
+0x2152a0,10,
+0x215300,93,
+0x215478,5,
+0x215490,2,
+0x2154a0,10,
+0x215500,93,
+0x215678,5,
+0x215690,2,
+0x2156a0,10,
+0x215700,93,
+0x21587c,1,
+0x215a00,8,
+0x215a24,15,
+0x215a64,23,
+0x215ac4,6,
+0x215b00,4,
+0x215b20,3,
+0x215c00,2,
+0x215c40,14,
+0x215c80,9,
+0x215d00,9,
+0x215d2c,1,
+0x215d80,6,
+0x215e00,2,
+0x215e0c,1,
+0x215e14,5,
+0x215e2c,1,
+0x215e34,5,
+0x215e4c,1,
+0x215e54,5,
+0x215e6c,1,
+0x215e74,5,
+0x215e8c,1,
+0x215e94,5,
+0x215eac,1,
+0x215eb4,3,
+0x216000,14,
+0x216070,3,
+0x216080,6,
 0x216100,9,
-0x216400,2,
-0x21640c,6,
-0x216440,13,
-0x216480,16,
-0x216800,1,
-0x216808,3,
-0x21681c,8,
-0x216840,3,
-0x216850,3,
-0x216880,1,
-0x216888,3,
-0x21689c,8,
-0x2168c0,3,
-0x2168d0,3,
-0x216900,1,
-0x216908,3,
-0x21691c,8,
-0x216940,3,
-0x216950,3,
-0x216980,1,
-0x216988,3,
-0x21699c,8,
-0x2169c0,3,
-0x2169d0,3,
-0x216a00,1,
-0x216a08,3,
-0x216a1c,8,
-0x216a40,3,
-0x216a50,3,
-0x216a80,1,
-0x216a88,3,
-0x216a9c,8,
-0x216ac0,3,
-0x216ad0,3,
-0x216b00,1,
-0x216b08,3,
-0x216b1c,8,
-0x216b40,3,
-0x216b50,3,
-0x216b80,1,
-0x216b88,3,
-0x216b9c,8,
-0x216bc0,3,
-0x216bd0,3,
-0x216c00,1,
-0x216c08,3,
-0x216c1c,8,
-0x216c40,3,
-0x216c50,3,
-0x216c80,2,
-0x216c94,13,
+0x216204,1,
+0x21620c,6,
+0x216240,13,
+0x216280,16,
+0x216400,8,
+0x216424,15,
+0x216464,15,
+0x2164a4,15,
+0x2164e4,23,
+0x216544,6,
+0x216580,10,
+0x2165ac,1,
+0x2165b4,5,
+0x2165cc,1,
+0x2165d4,5,
+0x2165ec,1,
+0x2165f4,13,
+0x216680,7,
+0x2166a0,5,
+0x2166c0,5,
+0x2166e0,3,
+0x216800,19,
+0x216850,10,
+0x216880,19,
+0x2168d0,10,
+0x216900,19,
+0x216950,10,
+0x216980,19,
+0x2169d0,10,
+0x216a00,19,
+0x216a50,10,
+0x216a80,19,
+0x216ad0,10,
+0x216b00,19,
+0x216b50,10,
+0x216b80,19,
+0x216bd0,10,
+0x216c00,19,
+0x216c50,10,
+0x216c84,1,
+0x216c94,8,
+0x216cb8,9,
+0x216ce0,4,
 0x217000,6,
 0x217020,3,
-0x217034,1,
 0x217040,7,
 0x217060,6,
 0x217100,5,
 0x217138,1,
 0x217144,1,
-0x217400,1,
-0x217418,1,
-0x217434,1,
-0x21752c,5,
-0x217590,1,
-0x2175ac,1,
-0x2175d8,4,
-0x217600,8,
+0x217150,2,
 0x218000,6,
 0x218020,3,
 0x218030,9,
-0x218080,6,
-0x218100,20,
+0x218100,6,
+0x218120,10,
+0x218150,8,
 0x218400,1,
-0x218418,1,
-0x218434,1,
-0x21852c,4,
-0x218590,1,
+0x218428,1,
+0x218450,1,
+0x218478,1,
+0x2184a0,8,
 0x2185ac,1,
 0x2185d8,4,
-0x218600,8,
+0x218600,6,
+0x218620,6,
+0x218640,3,
+0x218800,6,
+0x218820,3,
+0x218830,4,
+0x218858,2,
+0x218864,1,
+0x218874,3,
+0x218898,2,
+0x2188a4,1,
+0x2188b4,3,
 0x219000,6,
 0x219020,6,
 0x219040,3,
 0x219080,14,
 0x2190bc,1,
 0x2190c4,13,
-0x2190fc,6,
-0x219120,5,
-0x219190,10,
-0x219200,16,
-0x219244,32,
-0x219300,26,
+0x2190fc,5,
+0x219120,4,
+0x219140,3,
+0x219180,3,
+0x219190,3,
+0x2191a0,1,
+0x2191e0,6,
+0x219200,20,
+0x21925c,30,
+0x219300,24,
 0x219380,2,
 0x2193a0,1,
 0x2193c0,11,
-0x219404,4,
-0x219418,16,
+0x219404,3,
+0x219420,11,
 0x219460,3,
+0x219480,6,
 0x219500,6,
+0x219520,6,
 0x219540,1,
 0x219558,2,
 0x219600,17,
-0x219800,366,
+0x219800,410,
 0x21a000,6,
 0x21a020,6,
 0x21a040,3,
 0x21a080,14,
 0x21a0bc,1,
 0x21a0c4,13,
-0x21a0fc,6,
-0x21a120,5,
-0x21a190,10,
-0x21a200,16,
-0x21a244,32,
-0x21a300,26,
+0x21a0fc,5,
+0x21a120,4,
+0x21a140,3,
+0x21a180,3,
+0x21a190,3,
+0x21a1a0,1,
+0x21a1e0,6,
+0x21a200,20,
+0x21a25c,30,
+0x21a300,24,
 0x21a380,2,
 0x21a3a0,1,
 0x21a3c0,11,
-0x21a404,4,
-0x21a418,16,
+0x21a404,3,
+0x21a420,11,
 0x21a460,3,
+0x21a480,6,
 0x21a500,6,
+0x21a520,6,
 0x21a540,1,
 0x21a558,2,
 0x21a600,17,
-0x21a800,366,
+0x21a800,410,
 0x21b000,4,
-0x21b020,9,
-0x21b048,6,
-0x21b064,6,
-0x21b080,1,
+0x21b020,25,
+0x21b088,8,
 0x21b100,4,
-0x21b120,9,
-0x21b148,6,
-0x21b164,6,
-0x21b180,1,
-0x21b200,35,
-0x21b290,6,
-0x21b2b4,6,
-0x21b2d0,5,
-0x21b2e8,5,
+0x21b120,25,
+0x21b188,8,
+0x21b200,34,
 0x21b300,37,
-0x21b400,6,
-0x21b420,3,
-0x21b438,4,
-0x21b454,3,
-0x21b478,4,
-0x21b494,3,
+0x21b400,16,
+0x21b464,1,
+0x21b474,3,
+0x21b500,6,
+0x21b520,2,
+0x21b530,9,
+0x21b570,10,
+0x21b5a0,2,
+0x21b5b0,9,
+0x21b5f0,4,
+0x21b620,7,
+0x21b640,16,
+0x21b700,6,
+0x21b720,6,
+0x21b740,6,
+0x21b760,6,
+0x21b780,3,
 0x21b800,5,
 0x21b818,1,
 0x21b854,6,
 0x21b880,2,
 0x21b8a4,1,
+0x21b8ac,2,
 0x21ba00,28,
-0x21ba7c,5,
-0x21bab0,2,
+0x21ba7c,13,
+0x21bab4,1,
 0x21babc,10,
-0x21bb00,2,
-0x21bb0c,7,
+0x21bb04,1,
+0x21bb0c,5,
+0x21bb24,1,
 0x21bb34,9,
 0x21bb60,6,
-0x21bb80,8,
+0x21bb80,22,
+0x21bbe0,3,
+0x21bbf0,2,
 0x21bc00,5,
 0x21bc18,1,
 0x21bc54,6,
 0x21bc80,2,
 0x21bca4,1,
+0x21bcac,2,
 0x21be00,28,
-0x21be7c,5,
-0x21beb0,2,
+0x21be7c,13,
+0x21beb4,1,
 0x21bebc,10,
-0x21bf00,2,
-0x21bf0c,7,
+0x21bf04,1,
+0x21bf0c,5,
+0x21bf24,1,
 0x21bf34,9,
 0x21bf60,6,
-0x21bf80,8,
-0x21c000,4,
-0x21c014,10,
-0x21c040,1,
-0x21c048,3,
-0x21c058,1,
-0x21c060,1,
+0x21bf80,22,
+0x21bfe0,3,
+0x21bff0,2,
+0x21c008,2,
+0x21c014,11,
+0x21c044,1,
+0x21c04c,3,
+0x21c05c,1,
+0x21c064,1,
 0x21c07c,1,
-0x21c500,1,
-0x21c518,2,
+0x21c500,2,
+0x21c518,1,
+0x21c520,3,
 0x21c540,6,
-0x21c800,4,
-0x21c814,10,
-0x21c840,1,
-0x21c848,3,
-0x21c858,1,
-0x21c860,1,
+0x21c580,10,
+0x21c808,2,
+0x21c814,11,
+0x21c844,1,
+0x21c84c,3,
+0x21c85c,1,
+0x21c864,1,
 0x21c87c,1,
-0x21cd00,1,
-0x21cd18,2,
+0x21cd00,2,
+0x21cd18,1,
+0x21cd20,3,
 0x21cd40,6,
+0x21cd80,10,
 0x21d800,2,
-0x21d818,2,
-0x21d834,2,
-0x21d92c,6,
-0x21d990,2,
+0x21d828,2,
+0x21d850,2,
+0x21d878,2,
+0x21d8a0,6,
 0x21d9ac,1,
 0x21d9d8,4,
-0x21da00,16,
-0x21dc00,3,
-0x21dc20,2,
-0x21dc40,1,
+0x21da00,6,
+0x21da20,6,
+0x21da40,6,
+0x21da60,6,
+0x21da80,3,
+0x21dc00,6,
+0x21dc20,3,
+0x21dc40,2,
+0x21dc60,1,
 0x220000,5,
 0x220020,4,
-0x220034,9,
-0x22005c,7,
+0x220034,17,
 0x220080,1,
 0x2200a0,6,
 0x220100,5,
 0x220120,4,
-0x220134,9,
-0x22015c,7,
+0x220134,17,
 0x220180,1,
 0x2201a0,6,
 0x220200,5,
 0x220220,4,
-0x220234,9,
-0x22025c,7,
+0x220234,17,
 0x220280,1,
 0x2202a0,6,
 0x220300,5,
 0x220320,4,
-0x220334,9,
-0x22035c,7,
+0x220334,17,
 0x220380,1,
 0x2203a0,6,
-0x220400,4,
-0x220440,4,
+0x220400,6,
+0x220440,6,
 0x220480,3,
 0x2204c0,3,
-0x220500,5,
-0x220518,8,
+0x220500,6,
+0x22051c,7,
+0x220540,1,
 0x220c00,13,
-0x220c40,11,
+0x220c40,12,
 0x220c80,13,
-0x220cc0,11,
+0x220cc0,12,
 0x220d00,6,
 0x220d20,6,
-0x220e00,10,
+0x220d80,14,
+0x220dc0,2,
 0x220e40,11,
-0x220e80,8,
+0x220e80,6,
+0x220ea0,6,
 0x221000,2,
 0x221010,5,
 0x221040,3,
 0x221050,3,
-0x221060,7,
-0x221080,7,
-0x2210a0,7,
-0x2210c0,7,
-0x221100,7,
-0x221140,7,
-0x221180,5,
+0x221060,32,
+0x221100,8,
+0x221140,8,
+0x221180,3,
+0x221190,2,
 0x22119c,9,
 0x221218,9,
 0x221240,3,
 0x2212e4,1,
 0x221400,8,
 0x221424,2,
-0x221500,3,
+0x221500,5,
 0x221520,4,
-0x221540,3,
+0x221540,5,
 0x221560,4,
 0x221800,24,
-0x221864,2,
-0x221880,6,
-0x221900,12,
-0x221940,6,
-0x221960,6,
+0x221864,5,
+0x221880,8,
+0x221900,13,
 0x221980,4,
+0x2219a0,6,
 0x2219c0,6,
 0x2219dc,1,
 0x221a00,6,
 0x221a1c,1,
 0x221a40,1,
+0x221a60,1,
 0x221a68,23,
+0x221ac8,6,
 0x221b00,17,
+0x221b48,6,
 0x221b80,12,
+0x221c00,6,
+0x221c20,6,
+0x221c40,6,
+0x221c60,3,
+0x221d00,6,
+0x221d20,6,
+0x221d40,3,
+0x221d80,6,
+0x221da0,6,
+0x221dc0,3,
 0x222000,5,
 0x222020,4,
-0x222034,9,
-0x22205c,7,
+0x222034,17,
 0x222080,1,
 0x2220a0,6,
 0x222100,5,
 0x222120,4,
-0x222134,9,
-0x22215c,7,
+0x222134,17,
 0x222180,1,
 0x2221a0,6,
 0x222200,5,
 0x222220,4,
-0x222234,9,
-0x22225c,7,
+0x222234,17,
 0x222280,1,
 0x2222a0,6,
 0x222300,5,
 0x222320,4,
-0x222334,9,
-0x22235c,7,
+0x222334,17,
 0x222380,1,
 0x2223a0,6,
-0x222400,4,
-0x222440,4,
+0x222400,6,
+0x222440,6,
 0x222480,3,
 0x2224c0,3,
-0x222500,5,
-0x222518,8,
+0x222500,6,
+0x22251c,7,
+0x222540,1,
 0x222c00,13,
-0x222c40,11,
+0x222c40,12,
 0x222c80,13,
-0x222cc0,11,
+0x222cc0,12,
 0x222d00,6,
 0x222d20,6,
-0x222e00,10,
+0x222d80,14,
+0x222dc0,2,
 0x222e40,11,
-0x222e80,8,
+0x222e80,6,
+0x222ea0,6,
 0x223000,2,
 0x223010,5,
 0x223040,3,
 0x223050,3,
-0x223060,7,
-0x223080,7,
-0x2230a0,7,
-0x2230c0,7,
-0x223100,7,
-0x223140,7,
-0x223180,5,
+0x223060,32,
+0x223100,8,
+0x223140,8,
+0x223180,3,
+0x223190,2,
 0x22319c,9,
 0x223218,9,
 0x223240,3,
 0x2232e4,1,
 0x223400,8,
 0x223424,2,
-0x223500,3,
+0x223500,5,
 0x223520,4,
-0x223540,3,
+0x223540,5,
 0x223560,4,
 0x223800,24,
-0x223864,2,
-0x223880,6,
-0x223900,12,
-0x223940,6,
-0x223960,6,
+0x223864,5,
+0x223880,8,
+0x223900,13,
 0x223980,4,
+0x2239a0,6,
 0x2239c0,6,
 0x2239dc,1,
 0x223a00,6,
 0x223a1c,1,
 0x223a40,1,
+0x223a60,1,
 0x223a68,23,
+0x223ac8,6,
 0x223b00,17,
+0x223b48,6,
 0x223b80,12,
-0x224000,4,
-0x224014,6,
-0x224030,5,
-0x224080,4,
-0x224094,6,
-0x2240b0,5,
-0x224100,4,
-0x224114,6,
-0x224130,5,
-0x224180,4,
-0x224194,6,
-0x2241b0,5,
-0x224200,3,
-0x224210,23,
-0x224500,3,
-0x224510,12,
-0x224580,3,
-0x224590,12,
-0x224600,3,
-0x224610,12,
-0x224680,3,
-0x224690,12,
-0x224700,4,
-0x224718,13,
-0x224800,25,
-0x224880,25,
-0x224900,25,
-0x224980,25,
-0x224a00,17,
-0x224a50,3,
-0x224a60,3,
-0x225000,4,
-0x225014,6,
-0x225030,5,
-0x225080,4,
-0x225094,6,
-0x2250b0,5,
-0x225100,4,
-0x225114,6,
-0x225130,5,
-0x225180,4,
-0x225194,6,
-0x2251b0,5,
-0x225200,3,
-0x225210,23,
-0x225500,3,
-0x225510,12,
-0x225580,3,
-0x225590,12,
-0x225600,3,
-0x225610,12,
-0x225680,3,
-0x225690,12,
-0x225700,4,
-0x225718,13,
-0x225800,25,
-0x225880,25,
-0x225900,25,
-0x225980,25,
-0x225a00,17,
-0x225a50,3,
-0x225a60,3,
-0x226000,13,
-0x226040,22,
-0x2260a0,6,
-0x2260c0,3,
+0x223c00,6,
+0x223c20,6,
+0x223c40,6,
+0x223c60,3,
+0x223d00,6,
+0x223d20,6,
+0x223d40,3,
+0x223d80,6,
+0x223da0,6,
+0x223dc0,3,
+0x224000,29,
+0x224078,5,
+0x224090,2,
+0x2240a0,10,
+0x224100,93,
+0x224278,5,
+0x224290,2,
+0x2242a0,10,
+0x224300,93,
+0x224478,5,
+0x224490,2,
+0x2244a0,10,
+0x224500,93,
+0x224678,5,
+0x224690,2,
+0x2246a0,10,
+0x224700,93,
+0x22487c,1,
+0x224a00,8,
+0x224a24,15,
+0x224a64,23,
+0x224ac4,6,
+0x224b00,4,
+0x224b20,3,
+0x224c00,2,
+0x224c40,14,
+0x224c80,9,
+0x224d00,9,
+0x224d2c,1,
+0x224d80,6,
+0x224e00,2,
+0x224e0c,1,
+0x224e14,5,
+0x224e2c,1,
+0x224e34,5,
+0x224e4c,1,
+0x224e54,5,
+0x224e6c,1,
+0x224e74,5,
+0x224e8c,1,
+0x224e94,5,
+0x224eac,1,
+0x224eb4,3,
+0x225000,29,
+0x225078,5,
+0x225090,2,
+0x2250a0,10,
+0x225100,93,
+0x225278,5,
+0x225290,2,
+0x2252a0,10,
+0x225300,93,
+0x225478,5,
+0x225490,2,
+0x2254a0,10,
+0x225500,93,
+0x225678,5,
+0x225690,2,
+0x2256a0,10,
+0x225700,93,
+0x22587c,1,
+0x225a00,8,
+0x225a24,15,
+0x225a64,23,
+0x225ac4,6,
+0x225b00,4,
+0x225b20,3,
+0x225c00,2,
+0x225c40,14,
+0x225c80,9,
+0x225d00,9,
+0x225d2c,1,
+0x225d80,6,
+0x225e00,2,
+0x225e0c,1,
+0x225e14,5,
+0x225e2c,1,
+0x225e34,5,
+0x225e4c,1,
+0x225e54,5,
+0x225e6c,1,
+0x225e74,5,
+0x225e8c,1,
+0x225e94,5,
+0x225eac,1,
+0x225eb4,3,
+0x226000,14,
+0x226070,3,
+0x226080,6,
 0x226100,9,
-0x226400,2,
-0x22640c,6,
-0x226440,13,
-0x226480,16,
-0x226800,1,
-0x226808,3,
-0x22681c,8,
-0x226840,3,
-0x226850,3,
-0x226880,1,
-0x226888,3,
-0x22689c,8,
-0x2268c0,3,
-0x2268d0,3,
-0x226900,1,
-0x226908,3,
-0x22691c,8,
-0x226940,3,
-0x226950,3,
-0x226980,1,
-0x226988,3,
-0x22699c,8,
-0x2269c0,3,
-0x2269d0,3,
-0x226a00,1,
-0x226a08,3,
-0x226a1c,8,
-0x226a40,3,
-0x226a50,3,
-0x226a80,1,
-0x226a88,3,
-0x226a9c,8,
-0x226ac0,3,
-0x226ad0,3,
-0x226b00,1,
-0x226b08,3,
-0x226b1c,8,
-0x226b40,3,
-0x226b50,3,
-0x226b80,1,
-0x226b88,3,
-0x226b9c,8,
-0x226bc0,3,
-0x226bd0,3,
-0x226c00,1,
-0x226c08,3,
-0x226c1c,8,
-0x226c40,3,
-0x226c50,3,
-0x226c80,2,
-0x226c94,13,
+0x226204,1,
+0x22620c,6,
+0x226240,13,
+0x226280,16,
+0x226400,8,
+0x226424,15,
+0x226464,15,
+0x2264a4,15,
+0x2264e4,23,
+0x226544,6,
+0x226580,10,
+0x2265ac,1,
+0x2265b4,5,
+0x2265cc,1,
+0x2265d4,5,
+0x2265ec,1,
+0x2265f4,13,
+0x226680,7,
+0x2266a0,5,
+0x2266c0,5,
+0x2266e0,3,
+0x226800,19,
+0x226850,10,
+0x226880,19,
+0x2268d0,10,
+0x226900,19,
+0x226950,10,
+0x226980,19,
+0x2269d0,10,
+0x226a00,19,
+0x226a50,10,
+0x226a80,19,
+0x226ad0,10,
+0x226b00,19,
+0x226b50,10,
+0x226b80,19,
+0x226bd0,10,
+0x226c00,19,
+0x226c50,10,
+0x226c84,1,
+0x226c94,8,
+0x226cb8,9,
+0x226ce0,4,
 0x227000,6,
 0x227020,3,
-0x227034,1,
 0x227040,7,
 0x227060,6,
 0x227100,5,
 0x227138,1,
 0x227144,1,
-0x227400,1,
-0x227418,1,
-0x227434,1,
-0x22752c,5,
-0x227590,1,
-0x2275ac,1,
-0x2275d8,4,
-0x227600,8,
+0x227150,2,
 0x228000,6,
 0x228020,3,
 0x228030,9,
-0x228080,6,
-0x228100,20,
+0x228100,6,
+0x228120,10,
+0x228150,8,
 0x228400,1,
-0x228418,1,
-0x228434,1,
-0x22852c,4,
-0x228590,1,
+0x228428,1,
+0x228450,1,
+0x228478,1,
+0x2284a0,8,
 0x2285ac,1,
 0x2285d8,4,
-0x228600,8,
+0x228600,6,
+0x228620,6,
+0x228640,3,
+0x228800,6,
+0x228820,3,
+0x228830,4,
+0x228858,2,
+0x228864,1,
+0x228874,3,
+0x228898,2,
+0x2288a4,1,
+0x2288b4,3,
 0x229000,6,
 0x229020,6,
 0x229040,3,
 0x229080,14,
 0x2290bc,1,
 0x2290c4,13,
-0x2290fc,6,
-0x229120,5,
-0x229190,10,
-0x229200,16,
-0x229244,32,
-0x229300,26,
+0x2290fc,5,
+0x229120,4,
+0x229140,3,
+0x229180,3,
+0x229190,3,
+0x2291a0,1,
+0x2291e0,6,
+0x229200,20,
+0x22925c,30,
+0x229300,24,
 0x229380,2,
 0x2293a0,1,
 0x2293c0,11,
-0x229404,4,
-0x229418,16,
+0x229404,3,
+0x229420,11,
 0x229460,3,
+0x229480,6,
 0x229500,6,
+0x229520,6,
 0x229540,1,
 0x229558,2,
 0x229600,17,
-0x229800,366,
+0x229800,410,
 0x22a000,6,
 0x22a020,6,
 0x22a040,3,
 0x22a080,14,
 0x22a0bc,1,
 0x22a0c4,13,
-0x22a0fc,6,
-0x22a120,5,
-0x22a190,10,
-0x22a200,16,
-0x22a244,32,
-0x22a300,26,
+0x22a0fc,5,
+0x22a120,4,
+0x22a140,3,
+0x22a180,3,
+0x22a190,3,
+0x22a1a0,1,
+0x22a1e0,6,
+0x22a200,20,
+0x22a25c,30,
+0x22a300,24,
 0x22a380,2,
 0x22a3a0,1,
 0x22a3c0,11,
-0x22a404,4,
-0x22a418,16,
+0x22a404,3,
+0x22a420,11,
 0x22a460,3,
+0x22a480,6,
 0x22a500,6,
+0x22a520,6,
 0x22a540,1,
 0x22a558,2,
 0x22a600,17,
-0x22a800,366,
+0x22a800,410,
 0x22b000,4,
-0x22b020,9,
-0x22b048,6,
-0x22b064,6,
-0x22b080,1,
+0x22b020,25,
+0x22b088,8,
 0x22b100,4,
-0x22b120,9,
-0x22b148,6,
-0x22b164,6,
-0x22b180,1,
-0x22b200,35,
-0x22b290,6,
-0x22b2b4,6,
-0x22b2d0,5,
-0x22b2e8,5,
+0x22b120,25,
+0x22b188,8,
+0x22b200,34,
 0x22b300,37,
-0x22b400,6,
-0x22b420,3,
-0x22b438,4,
-0x22b454,3,
-0x22b478,4,
-0x22b494,3,
+0x22b400,16,
+0x22b464,1,
+0x22b474,3,
+0x22b500,6,
+0x22b520,2,
+0x22b530,9,
+0x22b570,10,
+0x22b5a0,2,
+0x22b5b0,9,
+0x22b5f0,4,
+0x22b620,7,
+0x22b640,16,
+0x22b700,6,
+0x22b720,6,
+0x22b740,6,
+0x22b760,6,
+0x22b780,3,
 0x22b800,5,
 0x22b818,1,
 0x22b854,6,
 0x22b880,2,
 0x22b8a4,1,
+0x22b8ac,2,
 0x22ba00,28,
-0x22ba7c,5,
-0x22bab0,2,
+0x22ba7c,13,
+0x22bab4,1,
 0x22babc,10,
-0x22bb00,2,
-0x22bb0c,7,
+0x22bb04,1,
+0x22bb0c,5,
+0x22bb24,1,
 0x22bb34,9,
 0x22bb60,6,
-0x22bb80,8,
+0x22bb80,22,
+0x22bbe0,3,
+0x22bbf0,2,
 0x22bc00,5,
 0x22bc18,1,
 0x22bc54,6,
 0x22bc80,2,
 0x22bca4,1,
+0x22bcac,2,
 0x22be00,28,
-0x22be7c,5,
-0x22beb0,2,
+0x22be7c,13,
+0x22beb4,1,
 0x22bebc,10,
-0x22bf00,2,
-0x22bf0c,7,
+0x22bf04,1,
+0x22bf0c,5,
+0x22bf24,1,
 0x22bf34,9,
 0x22bf60,6,
-0x22bf80,8,
-0x22c000,4,
-0x22c014,10,
-0x22c040,1,
-0x22c048,3,
-0x22c058,1,
-0x22c060,1,
+0x22bf80,22,
+0x22bfe0,3,
+0x22bff0,2,
+0x22c008,2,
+0x22c014,11,
+0x22c044,1,
+0x22c04c,3,
+0x22c05c,1,
+0x22c064,1,
 0x22c07c,1,
-0x22c500,1,
-0x22c518,2,
+0x22c500,2,
+0x22c518,1,
+0x22c520,3,
 0x22c540,6,
-0x22c800,4,
-0x22c814,10,
-0x22c840,1,
-0x22c848,3,
-0x22c858,1,
-0x22c860,1,
+0x22c580,10,
+0x22c808,2,
+0x22c814,11,
+0x22c844,1,
+0x22c84c,3,
+0x22c85c,1,
+0x22c864,1,
 0x22c87c,1,
-0x22cd00,1,
-0x22cd18,2,
+0x22cd00,2,
+0x22cd18,1,
+0x22cd20,3,
 0x22cd40,6,
+0x22cd80,10,
 0x22d800,2,
-0x22d818,2,
-0x22d834,2,
-0x22d92c,6,
-0x22d990,2,
+0x22d828,2,
+0x22d850,2,
+0x22d878,2,
+0x22d8a0,6,
 0x22d9ac,1,
 0x22d9d8,4,
-0x22da00,16,
-0x22dc00,3,
-0x22dc20,2,
-0x22dc40,1,
+0x22da00,6,
+0x22da20,6,
+0x22da40,6,
+0x22da60,6,
+0x22da80,3,
+0x22dc00,6,
+0x22dc20,3,
+0x22dc40,2,
+0x22dc60,1,
 0x230000,5,
 0x230020,4,
-0x230034,9,
-0x23005c,7,
+0x230034,17,
 0x230080,1,
 0x2300a0,6,
 0x230100,5,
 0x230120,4,
-0x230134,9,
-0x23015c,7,
+0x230134,17,
 0x230180,1,
 0x2301a0,6,
 0x230200,5,
 0x230220,4,
-0x230234,9,
-0x23025c,7,
+0x230234,17,
 0x230280,1,
 0x2302a0,6,
 0x230300,5,
 0x230320,4,
-0x230334,9,
-0x23035c,7,
+0x230334,17,
 0x230380,1,
 0x2303a0,6,
-0x230400,4,
-0x230440,4,
+0x230400,6,
+0x230440,6,
 0x230480,3,
 0x2304c0,3,
-0x230500,5,
-0x230518,8,
+0x230500,6,
+0x23051c,7,
+0x230540,1,
 0x230c00,13,
-0x230c40,11,
+0x230c40,12,
 0x230c80,13,
-0x230cc0,11,
+0x230cc0,12,
 0x230d00,6,
 0x230d20,6,
-0x230e00,10,
+0x230d80,14,
+0x230dc0,2,
 0x230e40,11,
-0x230e80,8,
+0x230e80,6,
+0x230ea0,6,
 0x231000,2,
 0x231010,5,
 0x231040,3,
 0x231050,3,
-0x231060,7,
-0x231080,7,
-0x2310a0,7,
-0x2310c0,7,
-0x231100,7,
-0x231140,7,
-0x231180,5,
+0x231060,32,
+0x231100,8,
+0x231140,8,
+0x231180,3,
+0x231190,2,
 0x23119c,9,
 0x231218,9,
 0x231240,3,
 0x2312e4,1,
 0x231400,8,
 0x231424,2,
-0x231500,3,
+0x231500,5,
 0x231520,4,
-0x231540,3,
+0x231540,5,
 0x231560,4,
 0x231800,24,
-0x231864,2,
-0x231880,6,
-0x231900,12,
-0x231940,6,
-0x231960,6,
+0x231864,5,
+0x231880,8,
+0x231900,13,
 0x231980,4,
+0x2319a0,6,
 0x2319c0,6,
 0x2319dc,1,
 0x231a00,6,
 0x231a1c,1,
 0x231a40,1,
+0x231a60,1,
 0x231a68,23,
+0x231ac8,6,
 0x231b00,17,
+0x231b48,6,
 0x231b80,12,
+0x231c00,6,
+0x231c20,6,
+0x231c40,6,
+0x231c60,3,
+0x231d00,6,
+0x231d20,6,
+0x231d40,3,
+0x231d80,6,
+0x231da0,6,
+0x231dc0,3,
 0x232000,5,
 0x232020,4,
-0x232034,9,
-0x23205c,7,
+0x232034,17,
 0x232080,1,
 0x2320a0,6,
 0x232100,5,
 0x232120,4,
-0x232134,9,
-0x23215c,7,
+0x232134,17,
 0x232180,1,
 0x2321a0,6,
 0x232200,5,
 0x232220,4,
-0x232234,9,
-0x23225c,7,
+0x232234,17,
 0x232280,1,
 0x2322a0,6,
 0x232300,5,
 0x232320,4,
-0x232334,9,
-0x23235c,7,
+0x232334,17,
 0x232380,1,
 0x2323a0,6,
-0x232400,4,
-0x232440,4,
+0x232400,6,
+0x232440,6,
 0x232480,3,
 0x2324c0,3,
-0x232500,5,
-0x232518,8,
+0x232500,6,
+0x23251c,7,
+0x232540,1,
 0x232c00,13,
-0x232c40,11,
+0x232c40,12,
 0x232c80,13,
-0x232cc0,11,
+0x232cc0,12,
 0x232d00,6,
 0x232d20,6,
-0x232e00,10,
+0x232d80,14,
+0x232dc0,2,
 0x232e40,11,
-0x232e80,8,
+0x232e80,6,
+0x232ea0,6,
 0x233000,2,
 0x233010,5,
 0x233040,3,
 0x233050,3,
-0x233060,7,
-0x233080,7,
-0x2330a0,7,
-0x2330c0,7,
-0x233100,7,
-0x233140,7,
-0x233180,5,
+0x233060,32,
+0x233100,8,
+0x233140,8,
+0x233180,3,
+0x233190,2,
 0x23319c,9,
 0x233218,9,
 0x233240,3,
 0x2332e4,1,
 0x233400,8,
 0x233424,2,
-0x233500,3,
+0x233500,5,
 0x233520,4,
-0x233540,3,
+0x233540,5,
 0x233560,4,
 0x233800,24,
-0x233864,2,
-0x233880,6,
-0x233900,12,
-0x233940,6,
-0x233960,6,
+0x233864,5,
+0x233880,8,
+0x233900,13,
 0x233980,4,
+0x2339a0,6,
 0x2339c0,6,
 0x2339dc,1,
 0x233a00,6,
 0x233a1c,1,
 0x233a40,1,
+0x233a60,1,
 0x233a68,23,
+0x233ac8,6,
 0x233b00,17,
+0x233b48,6,
 0x233b80,12,
-0x234000,4,
-0x234014,6,
-0x234030,5,
-0x234080,4,
-0x234094,6,
-0x2340b0,5,
-0x234100,4,
-0x234114,6,
-0x234130,5,
-0x234180,4,
-0x234194,6,
-0x2341b0,5,
-0x234200,3,
-0x234210,23,
-0x234500,3,
-0x234510,12,
-0x234580,3,
-0x234590,12,
-0x234600,3,
-0x234610,12,
-0x234680,3,
-0x234690,12,
-0x234700,4,
-0x234718,13,
-0x234800,25,
-0x234880,25,
-0x234900,25,
-0x234980,25,
-0x234a00,17,
-0x234a50,3,
-0x234a60,3,
-0x235000,4,
-0x235014,6,
-0x235030,5,
-0x235080,4,
-0x235094,6,
-0x2350b0,5,
-0x235100,4,
-0x235114,6,
-0x235130,5,
-0x235180,4,
-0x235194,6,
-0x2351b0,5,
-0x235200,3,
-0x235210,23,
-0x235500,3,
-0x235510,12,
-0x235580,3,
-0x235590,12,
-0x235600,3,
-0x235610,12,
-0x235680,3,
-0x235690,12,
-0x235700,4,
-0x235718,13,
-0x235800,25,
-0x235880,25,
-0x235900,25,
-0x235980,25,
-0x235a00,17,
-0x235a50,3,
-0x235a60,3,
-0x236000,13,
-0x236040,22,
-0x2360a0,6,
-0x2360c0,3,
+0x233c00,6,
+0x233c20,6,
+0x233c40,6,
+0x233c60,3,
+0x233d00,6,
+0x233d20,6,
+0x233d40,3,
+0x233d80,6,
+0x233da0,6,
+0x233dc0,3,
+0x234000,29,
+0x234078,5,
+0x234090,2,
+0x2340a0,10,
+0x234100,93,
+0x234278,5,
+0x234290,2,
+0x2342a0,10,
+0x234300,93,
+0x234478,5,
+0x234490,2,
+0x2344a0,10,
+0x234500,93,
+0x234678,5,
+0x234690,2,
+0x2346a0,10,
+0x234700,93,
+0x23487c,1,
+0x234a00,8,
+0x234a24,15,
+0x234a64,23,
+0x234ac4,6,
+0x234b00,4,
+0x234b20,3,
+0x234c00,2,
+0x234c40,14,
+0x234c80,9,
+0x234d00,9,
+0x234d2c,1,
+0x234d80,6,
+0x234e00,2,
+0x234e0c,1,
+0x234e14,5,
+0x234e2c,1,
+0x234e34,5,
+0x234e4c,1,
+0x234e54,5,
+0x234e6c,1,
+0x234e74,5,
+0x234e8c,1,
+0x234e94,5,
+0x234eac,1,
+0x234eb4,3,
+0x235000,29,
+0x235078,5,
+0x235090,2,
+0x2350a0,10,
+0x235100,93,
+0x235278,5,
+0x235290,2,
+0x2352a0,10,
+0x235300,93,
+0x235478,5,
+0x235490,2,
+0x2354a0,10,
+0x235500,93,
+0x235678,5,
+0x235690,2,
+0x2356a0,10,
+0x235700,93,
+0x23587c,1,
+0x235a00,8,
+0x235a24,15,
+0x235a64,23,
+0x235ac4,6,
+0x235b00,4,
+0x235b20,3,
+0x235c00,2,
+0x235c40,14,
+0x235c80,9,
+0x235d00,9,
+0x235d2c,1,
+0x235d80,6,
+0x235e00,2,
+0x235e0c,1,
+0x235e14,5,
+0x235e2c,1,
+0x235e34,5,
+0x235e4c,1,
+0x235e54,5,
+0x235e6c,1,
+0x235e74,5,
+0x235e8c,1,
+0x235e94,5,
+0x235eac,1,
+0x235eb4,3,
+0x236000,14,
+0x236070,3,
+0x236080,6,
 0x236100,9,
-0x236400,2,
-0x23640c,6,
-0x236440,13,
-0x236480,16,
-0x236800,1,
-0x236808,3,
-0x23681c,8,
-0x236840,3,
-0x236850,3,
-0x236880,1,
-0x236888,3,
-0x23689c,8,
-0x2368c0,3,
-0x2368d0,3,
-0x236900,1,
-0x236908,3,
-0x23691c,8,
-0x236940,3,
-0x236950,3,
-0x236980,1,
-0x236988,3,
-0x23699c,8,
-0x2369c0,3,
-0x2369d0,3,
-0x236a00,1,
-0x236a08,3,
-0x236a1c,8,
-0x236a40,3,
-0x236a50,3,
-0x236a80,1,
-0x236a88,3,
-0x236a9c,8,
-0x236ac0,3,
-0x236ad0,3,
-0x236b00,1,
-0x236b08,3,
-0x236b1c,8,
-0x236b40,3,
-0x236b50,3,
-0x236b80,1,
-0x236b88,3,
-0x236b9c,8,
-0x236bc0,3,
-0x236bd0,3,
-0x236c00,1,
-0x236c08,3,
-0x236c1c,8,
-0x236c40,3,
-0x236c50,3,
-0x236c80,2,
-0x236c94,13,
+0x236204,1,
+0x23620c,6,
+0x236240,13,
+0x236280,16,
+0x236400,8,
+0x236424,15,
+0x236464,15,
+0x2364a4,15,
+0x2364e4,23,
+0x236544,6,
+0x236580,10,
+0x2365ac,1,
+0x2365b4,5,
+0x2365cc,1,
+0x2365d4,5,
+0x2365ec,1,
+0x2365f4,13,
+0x236680,7,
+0x2366a0,5,
+0x2366c0,5,
+0x2366e0,3,
+0x236800,19,
+0x236850,10,
+0x236880,19,
+0x2368d0,10,
+0x236900,19,
+0x236950,10,
+0x236980,19,
+0x2369d0,10,
+0x236a00,19,
+0x236a50,10,
+0x236a80,19,
+0x236ad0,10,
+0x236b00,19,
+0x236b50,10,
+0x236b80,19,
+0x236bd0,10,
+0x236c00,19,
+0x236c50,10,
+0x236c84,1,
+0x236c94,8,
+0x236cb8,9,
+0x236ce0,4,
 0x237000,6,
 0x237020,3,
-0x237034,1,
 0x237040,7,
 0x237060,6,
 0x237100,5,
 0x237138,1,
 0x237144,1,
-0x237400,1,
-0x237418,1,
-0x237434,1,
-0x23752c,5,
-0x237590,1,
-0x2375ac,1,
-0x2375d8,4,
-0x237600,8,
+0x237150,2,
 0x238000,6,
 0x238020,3,
 0x238030,9,
-0x238080,6,
-0x238100,20,
+0x238100,6,
+0x238120,10,
+0x238150,8,
 0x238400,1,
-0x238418,1,
-0x238434,1,
-0x23852c,4,
-0x238590,1,
+0x238428,1,
+0x238450,1,
+0x238478,1,
+0x2384a0,8,
 0x2385ac,1,
 0x2385d8,4,
-0x238600,8,
+0x238600,6,
+0x238620,6,
+0x238640,3,
+0x238800,6,
+0x238820,3,
+0x238830,4,
+0x238858,2,
+0x238864,1,
+0x238874,3,
+0x238898,2,
+0x2388a4,1,
+0x2388b4,3,
 0x239000,6,
 0x239020,6,
 0x239040,3,
 0x239080,14,
 0x2390bc,1,
 0x2390c4,13,
-0x2390fc,6,
-0x239120,5,
-0x239190,10,
-0x239200,16,
-0x239244,32,
-0x239300,26,
+0x2390fc,5,
+0x239120,4,
+0x239140,3,
+0x239180,3,
+0x239190,3,
+0x2391a0,1,
+0x2391e0,6,
+0x239200,20,
+0x23925c,30,
+0x239300,24,
 0x239380,2,
 0x2393a0,1,
 0x2393c0,11,
-0x239404,4,
-0x239418,16,
+0x239404,3,
+0x239420,11,
 0x239460,3,
+0x239480,6,
 0x239500,6,
+0x239520,6,
 0x239540,1,
 0x239558,2,
 0x239600,17,
-0x239800,366,
+0x239800,410,
 0x23a000,6,
 0x23a020,6,
 0x23a040,3,
 0x23a080,14,
 0x23a0bc,1,
 0x23a0c4,13,
-0x23a0fc,6,
-0x23a120,5,
-0x23a190,10,
-0x23a200,16,
-0x23a244,32,
-0x23a300,26,
+0x23a0fc,5,
+0x23a120,4,
+0x23a140,3,
+0x23a180,3,
+0x23a190,3,
+0x23a1a0,1,
+0x23a1e0,6,
+0x23a200,20,
+0x23a25c,30,
+0x23a300,24,
 0x23a380,2,
 0x23a3a0,1,
 0x23a3c0,11,
-0x23a404,4,
-0x23a418,16,
+0x23a404,3,
+0x23a420,11,
 0x23a460,3,
+0x23a480,6,
 0x23a500,6,
+0x23a520,6,
 0x23a540,1,
 0x23a558,2,
 0x23a600,17,
-0x23a800,366,
+0x23a800,410,
 0x23b000,4,
-0x23b020,9,
-0x23b048,6,
-0x23b064,6,
-0x23b080,1,
+0x23b020,25,
+0x23b088,8,
 0x23b100,4,
-0x23b120,9,
-0x23b148,6,
-0x23b164,6,
-0x23b180,1,
-0x23b200,35,
-0x23b290,6,
-0x23b2b4,6,
-0x23b2d0,5,
-0x23b2e8,5,
+0x23b120,25,
+0x23b188,8,
+0x23b200,34,
 0x23b300,37,
-0x23b400,6,
-0x23b420,3,
-0x23b438,4,
-0x23b454,3,
-0x23b478,4,
-0x23b494,3,
+0x23b400,16,
+0x23b464,1,
+0x23b474,3,
+0x23b500,6,
+0x23b520,2,
+0x23b530,9,
+0x23b570,10,
+0x23b5a0,2,
+0x23b5b0,9,
+0x23b5f0,4,
+0x23b620,7,
+0x23b640,16,
+0x23b700,6,
+0x23b720,6,
+0x23b740,6,
+0x23b760,6,
+0x23b780,3,
 0x23b800,5,
 0x23b818,1,
 0x23b854,6,
 0x23b880,2,
 0x23b8a4,1,
+0x23b8ac,2,
 0x23ba00,28,
-0x23ba7c,5,
-0x23bab0,2,
+0x23ba7c,13,
+0x23bab4,1,
 0x23babc,10,
-0x23bb00,2,
-0x23bb0c,7,
+0x23bb04,1,
+0x23bb0c,5,
+0x23bb24,1,
 0x23bb34,9,
 0x23bb60,6,
-0x23bb80,8,
+0x23bb80,22,
+0x23bbe0,3,
+0x23bbf0,2,
 0x23bc00,5,
 0x23bc18,1,
 0x23bc54,6,
 0x23bc80,2,
 0x23bca4,1,
+0x23bcac,2,
 0x23be00,28,
-0x23be7c,5,
-0x23beb0,2,
+0x23be7c,13,
+0x23beb4,1,
 0x23bebc,10,
-0x23bf00,2,
-0x23bf0c,7,
+0x23bf04,1,
+0x23bf0c,5,
+0x23bf24,1,
 0x23bf34,9,
 0x23bf60,6,
-0x23bf80,8,
-0x23c000,4,
-0x23c014,10,
-0x23c040,1,
-0x23c048,3,
-0x23c058,1,
-0x23c060,1,
+0x23bf80,22,
+0x23bfe0,3,
+0x23bff0,2,
+0x23c008,2,
+0x23c014,11,
+0x23c044,1,
+0x23c04c,3,
+0x23c05c,1,
+0x23c064,1,
 0x23c07c,1,
-0x23c500,1,
-0x23c518,2,
+0x23c500,2,
+0x23c518,1,
+0x23c520,3,
 0x23c540,6,
-0x23c800,4,
-0x23c814,10,
-0x23c840,1,
-0x23c848,3,
-0x23c858,1,
-0x23c860,1,
+0x23c580,10,
+0x23c808,2,
+0x23c814,11,
+0x23c844,1,
+0x23c84c,3,
+0x23c85c,1,
+0x23c864,1,
 0x23c87c,1,
-0x23cd00,1,
-0x23cd18,2,
+0x23cd00,2,
+0x23cd18,1,
+0x23cd20,3,
 0x23cd40,6,
+0x23cd80,10,
 0x23d800,2,
-0x23d818,2,
-0x23d834,2,
-0x23d92c,6,
-0x23d990,2,
+0x23d828,2,
+0x23d850,2,
+0x23d878,2,
+0x23d8a0,6,
 0x23d9ac,1,
 0x23d9d8,4,
-0x23da00,16,
-0x23dc00,3,
-0x23dc20,2,
-0x23dc40,1,
+0x23da00,6,
+0x23da20,6,
+0x23da40,6,
+0x23da60,6,
+0x23da80,3,
+0x23dc00,6,
+0x23dc20,3,
+0x23dc40,2,
+0x23dc60,1,
 0x240000,5,
 0x240020,4,
-0x240034,9,
-0x24005c,7,
+0x240034,17,
 0x240080,1,
 0x2400a0,6,
 0x240100,5,
 0x240120,4,
-0x240134,9,
-0x24015c,7,
+0x240134,17,
 0x240180,1,
 0x2401a0,6,
 0x240200,5,
 0x240220,4,
-0x240234,9,
-0x24025c,7,
+0x240234,17,
 0x240280,1,
 0x2402a0,6,
 0x240300,5,
 0x240320,4,
-0x240334,9,
-0x24035c,7,
+0x240334,17,
 0x240380,1,
 0x2403a0,6,
-0x240400,4,
-0x240440,4,
+0x240400,6,
+0x240440,6,
 0x240480,3,
 0x2404c0,3,
-0x240500,5,
-0x240518,8,
+0x240500,6,
+0x24051c,7,
+0x240540,1,
 0x240c00,13,
-0x240c40,11,
+0x240c40,12,
 0x240c80,13,
-0x240cc0,11,
+0x240cc0,12,
 0x240d00,6,
 0x240d20,6,
-0x240e00,10,
+0x240d80,14,
+0x240dc0,2,
 0x240e40,11,
-0x240e80,8,
+0x240e80,6,
+0x240ea0,6,
 0x241000,2,
 0x241010,5,
 0x241040,3,
 0x241050,3,
-0x241060,7,
-0x241080,7,
-0x2410a0,7,
-0x2410c0,7,
-0x241100,7,
-0x241140,7,
-0x241180,5,
+0x241060,32,
+0x241100,8,
+0x241140,8,
+0x241180,3,
+0x241190,2,
 0x24119c,9,
 0x241218,9,
 0x241240,3,
 0x2412e4,1,
 0x241400,8,
 0x241424,2,
-0x241500,3,
+0x241500,5,
 0x241520,4,
-0x241540,3,
+0x241540,5,
 0x241560,4,
 0x241800,24,
-0x241864,2,
-0x241880,6,
-0x241900,12,
-0x241940,6,
-0x241960,6,
+0x241864,5,
+0x241880,8,
+0x241900,13,
 0x241980,4,
+0x2419a0,6,
 0x2419c0,6,
 0x2419dc,1,
 0x241a00,6,
 0x241a1c,1,
 0x241a40,1,
+0x241a60,1,
 0x241a68,23,
+0x241ac8,6,
 0x241b00,17,
+0x241b48,6,
 0x241b80,12,
+0x241c00,6,
+0x241c20,6,
+0x241c40,6,
+0x241c60,3,
+0x241d00,6,
+0x241d20,6,
+0x241d40,3,
+0x241d80,6,
+0x241da0,6,
+0x241dc0,3,
 0x242000,5,
 0x242020,4,
-0x242034,9,
-0x24205c,7,
+0x242034,17,
 0x242080,1,
 0x2420a0,6,
 0x242100,5,
 0x242120,4,
-0x242134,9,
-0x24215c,7,
+0x242134,17,
 0x242180,1,
 0x2421a0,6,
 0x242200,5,
 0x242220,4,
-0x242234,9,
-0x24225c,7,
+0x242234,17,
 0x242280,1,
 0x2422a0,6,
 0x242300,5,
 0x242320,4,
-0x242334,9,
-0x24235c,7,
+0x242334,17,
 0x242380,1,
 0x2423a0,6,
-0x242400,4,
-0x242440,4,
+0x242400,6,
+0x242440,6,
 0x242480,3,
 0x2424c0,3,
-0x242500,5,
-0x242518,8,
+0x242500,6,
+0x24251c,7,
+0x242540,1,
 0x242c00,13,
-0x242c40,11,
+0x242c40,12,
 0x242c80,13,
-0x242cc0,11,
+0x242cc0,12,
 0x242d00,6,
 0x242d20,6,
-0x242e00,10,
+0x242d80,14,
+0x242dc0,2,
 0x242e40,11,
-0x242e80,8,
+0x242e80,6,
+0x242ea0,6,
 0x243000,2,
 0x243010,5,
 0x243040,3,
 0x243050,3,
-0x243060,7,
-0x243080,7,
-0x2430a0,7,
-0x2430c0,7,
-0x243100,7,
-0x243140,7,
-0x243180,5,
+0x243060,32,
+0x243100,8,
+0x243140,8,
+0x243180,3,
+0x243190,2,
 0x24319c,9,
 0x243218,9,
 0x243240,3,
 0x2432e4,1,
 0x243400,8,
 0x243424,2,
-0x243500,3,
+0x243500,5,
 0x243520,4,
-0x243540,3,
+0x243540,5,
 0x243560,4,
 0x243800,24,
-0x243864,2,
-0x243880,6,
-0x243900,12,
-0x243940,6,
-0x243960,6,
+0x243864,5,
+0x243880,8,
+0x243900,13,
 0x243980,4,
+0x2439a0,6,
 0x2439c0,6,
 0x2439dc,1,
 0x243a00,6,
 0x243a1c,1,
 0x243a40,1,
+0x243a60,1,
 0x243a68,23,
+0x243ac8,6,
 0x243b00,17,
+0x243b48,6,
 0x243b80,12,
-0x244000,4,
-0x244014,6,
-0x244030,5,
-0x244080,4,
-0x244094,6,
-0x2440b0,5,
-0x244100,4,
-0x244114,6,
-0x244130,5,
-0x244180,4,
-0x244194,6,
-0x2441b0,5,
-0x244200,3,
-0x244210,23,
-0x244500,3,
-0x244510,12,
-0x244580,3,
-0x244590,12,
-0x244600,3,
-0x244610,12,
-0x244680,3,
-0x244690,12,
-0x244700,4,
-0x244718,13,
-0x244800,25,
-0x244880,25,
-0x244900,25,
-0x244980,25,
-0x244a00,17,
-0x244a50,3,
-0x244a60,3,
-0x245000,4,
-0x245014,6,
-0x245030,5,
-0x245080,4,
-0x245094,6,
-0x2450b0,5,
-0x245100,4,
-0x245114,6,
-0x245130,5,
-0x245180,4,
-0x245194,6,
-0x2451b0,5,
-0x245200,3,
-0x245210,23,
-0x245500,3,
-0x245510,12,
-0x245580,3,
-0x245590,12,
-0x245600,3,
-0x245610,12,
-0x245680,3,
-0x245690,12,
-0x245700,4,
-0x245718,13,
-0x245800,25,
-0x245880,25,
-0x245900,25,
-0x245980,25,
-0x245a00,17,
-0x245a50,3,
-0x245a60,3,
-0x246000,13,
-0x246040,22,
-0x2460a0,6,
-0x2460c0,3,
+0x243c00,6,
+0x243c20,6,
+0x243c40,6,
+0x243c60,3,
+0x243d00,6,
+0x243d20,6,
+0x243d40,3,
+0x243d80,6,
+0x243da0,6,
+0x243dc0,3,
+0x244000,29,
+0x244078,5,
+0x244090,2,
+0x2440a0,10,
+0x244100,93,
+0x244278,5,
+0x244290,2,
+0x2442a0,10,
+0x244300,93,
+0x244478,5,
+0x244490,2,
+0x2444a0,10,
+0x244500,93,
+0x244678,5,
+0x244690,2,
+0x2446a0,10,
+0x244700,93,
+0x24487c,1,
+0x244a00,8,
+0x244a24,15,
+0x244a64,23,
+0x244ac4,6,
+0x244b00,4,
+0x244b20,3,
+0x244c00,2,
+0x244c40,14,
+0x244c80,9,
+0x244d00,9,
+0x244d2c,1,
+0x244d80,6,
+0x244e00,2,
+0x244e0c,1,
+0x244e14,5,
+0x244e2c,1,
+0x244e34,5,
+0x244e4c,1,
+0x244e54,5,
+0x244e6c,1,
+0x244e74,5,
+0x244e8c,1,
+0x244e94,5,
+0x244eac,1,
+0x244eb4,3,
+0x245000,29,
+0x245078,5,
+0x245090,2,
+0x2450a0,10,
+0x245100,93,
+0x245278,5,
+0x245290,2,
+0x2452a0,10,
+0x245300,93,
+0x245478,5,
+0x245490,2,
+0x2454a0,10,
+0x245500,93,
+0x245678,5,
+0x245690,2,
+0x2456a0,10,
+0x245700,93,
+0x24587c,1,
+0x245a00,8,
+0x245a24,15,
+0x245a64,23,
+0x245ac4,6,
+0x245b00,4,
+0x245b20,3,
+0x245c00,2,
+0x245c40,14,
+0x245c80,9,
+0x245d00,9,
+0x245d2c,1,
+0x245d80,6,
+0x245e00,2,
+0x245e0c,1,
+0x245e14,5,
+0x245e2c,1,
+0x245e34,5,
+0x245e4c,1,
+0x245e54,5,
+0x245e6c,1,
+0x245e74,5,
+0x245e8c,1,
+0x245e94,5,
+0x245eac,1,
+0x245eb4,3,
+0x246000,14,
+0x246070,3,
+0x246080,6,
 0x246100,9,
-0x246400,2,
-0x24640c,6,
-0x246440,13,
-0x246480,16,
-0x246800,1,
-0x246808,3,
-0x24681c,8,
-0x246840,3,
-0x246850,3,
-0x246880,1,
-0x246888,3,
-0x24689c,8,
-0x2468c0,3,
-0x2468d0,3,
-0x246900,1,
-0x246908,3,
-0x24691c,8,
-0x246940,3,
-0x246950,3,
-0x246980,1,
-0x246988,3,
-0x24699c,8,
-0x2469c0,3,
-0x2469d0,3,
-0x246a00,1,
-0x246a08,3,
-0x246a1c,8,
-0x246a40,3,
-0x246a50,3,
-0x246a80,1,
-0x246a88,3,
-0x246a9c,8,
-0x246ac0,3,
-0x246ad0,3,
-0x246b00,1,
-0x246b08,3,
-0x246b1c,8,
-0x246b40,3,
-0x246b50,3,
-0x246b80,1,
-0x246b88,3,
-0x246b9c,8,
-0x246bc0,3,
-0x246bd0,3,
-0x246c00,1,
-0x246c08,3,
-0x246c1c,8,
-0x246c40,3,
-0x246c50,3,
-0x246c80,2,
-0x246c94,13,
+0x246204,1,
+0x24620c,6,
+0x246240,13,
+0x246280,16,
+0x246400,8,
+0x246424,15,
+0x246464,15,
+0x2464a4,15,
+0x2464e4,23,
+0x246544,6,
+0x246580,10,
+0x2465ac,1,
+0x2465b4,5,
+0x2465cc,1,
+0x2465d4,5,
+0x2465ec,1,
+0x2465f4,13,
+0x246680,7,
+0x2466a0,5,
+0x2466c0,5,
+0x2466e0,3,
+0x246800,19,
+0x246850,10,
+0x246880,19,
+0x2468d0,10,
+0x246900,19,
+0x246950,10,
+0x246980,19,
+0x2469d0,10,
+0x246a00,19,
+0x246a50,10,
+0x246a80,19,
+0x246ad0,10,
+0x246b00,19,
+0x246b50,10,
+0x246b80,19,
+0x246bd0,10,
+0x246c00,19,
+0x246c50,10,
+0x246c84,1,
+0x246c94,8,
+0x246cb8,9,
+0x246ce0,4,
 0x247000,6,
 0x247020,3,
-0x247034,1,
 0x247040,7,
 0x247060,6,
 0x247100,5,
 0x247138,1,
 0x247144,1,
-0x247400,1,
-0x247418,1,
-0x247434,1,
-0x24752c,5,
-0x247590,1,
-0x2475ac,1,
-0x2475d8,4,
-0x247600,8,
+0x247150,2,
 0x248000,6,
 0x248020,3,
 0x248030,9,
-0x248080,6,
-0x248100,20,
+0x248100,6,
+0x248120,10,
+0x248150,8,
 0x248400,1,
-0x248418,1,
-0x248434,1,
-0x24852c,4,
-0x248590,1,
+0x248428,1,
+0x248450,1,
+0x248478,1,
+0x2484a0,8,
 0x2485ac,1,
 0x2485d8,4,
-0x248600,8,
+0x248600,6,
+0x248620,6,
+0x248640,3,
+0x248800,6,
+0x248820,3,
+0x248830,4,
+0x248858,2,
+0x248864,1,
+0x248874,3,
+0x248898,2,
+0x2488a4,1,
+0x2488b4,3,
 0x249000,6,
 0x249020,6,
 0x249040,3,
 0x249080,14,
 0x2490bc,1,
 0x2490c4,13,
-0x2490fc,6,
-0x249120,5,
-0x249190,10,
-0x249200,16,
-0x249244,32,
-0x249300,26,
+0x2490fc,5,
+0x249120,4,
+0x249140,3,
+0x249180,3,
+0x249190,3,
+0x2491a0,1,
+0x2491e0,6,
+0x249200,20,
+0x24925c,30,
+0x249300,24,
 0x249380,2,
 0x2493a0,1,
 0x2493c0,11,
-0x249404,4,
-0x249418,16,
+0x249404,3,
+0x249420,11,
 0x249460,3,
+0x249480,6,
 0x249500,6,
+0x249520,6,
 0x249540,1,
 0x249558,2,
 0x249600,17,
-0x249800,366,
+0x249800,410,
 0x24a000,6,
 0x24a020,6,
 0x24a040,3,
 0x24a080,14,
 0x24a0bc,1,
 0x24a0c4,13,
-0x24a0fc,6,
-0x24a120,5,
-0x24a190,10,
-0x24a200,16,
-0x24a244,32,
-0x24a300,26,
+0x24a0fc,5,
+0x24a120,4,
+0x24a140,3,
+0x24a180,3,
+0x24a190,3,
+0x24a1a0,1,
+0x24a1e0,6,
+0x24a200,20,
+0x24a25c,30,
+0x24a300,24,
 0x24a380,2,
 0x24a3a0,1,
 0x24a3c0,11,
-0x24a404,4,
-0x24a418,16,
+0x24a404,3,
+0x24a420,11,
 0x24a460,3,
+0x24a480,6,
 0x24a500,6,
+0x24a520,6,
 0x24a540,1,
 0x24a558,2,
 0x24a600,17,
-0x24a800,366,
+0x24a800,410,
 0x24b000,4,
-0x24b020,9,
-0x24b048,6,
-0x24b064,6,
-0x24b080,1,
+0x24b020,25,
+0x24b088,8,
 0x24b100,4,
-0x24b120,9,
-0x24b148,6,
-0x24b164,6,
-0x24b180,1,
-0x24b200,35,
-0x24b290,6,
-0x24b2b4,6,
-0x24b2d0,5,
-0x24b2e8,5,
+0x24b120,25,
+0x24b188,8,
+0x24b200,34,
 0x24b300,37,
-0x24b400,6,
-0x24b420,3,
-0x24b438,4,
-0x24b454,3,
-0x24b478,4,
-0x24b494,3,
+0x24b400,16,
+0x24b464,1,
+0x24b474,3,
+0x24b500,6,
+0x24b520,2,
+0x24b530,9,
+0x24b570,10,
+0x24b5a0,2,
+0x24b5b0,9,
+0x24b5f0,4,
+0x24b620,7,
+0x24b640,16,
+0x24b700,6,
+0x24b720,6,
+0x24b740,6,
+0x24b760,6,
+0x24b780,3,
 0x24b800,5,
 0x24b818,1,
 0x24b854,6,
 0x24b880,2,
 0x24b8a4,1,
+0x24b8ac,2,
 0x24ba00,28,
-0x24ba7c,5,
-0x24bab0,2,
+0x24ba7c,13,
+0x24bab4,1,
 0x24babc,10,
-0x24bb00,2,
-0x24bb0c,7,
+0x24bb04,1,
+0x24bb0c,5,
+0x24bb24,1,
 0x24bb34,9,
 0x24bb60,6,
-0x24bb80,8,
+0x24bb80,22,
+0x24bbe0,3,
+0x24bbf0,2,
 0x24bc00,5,
 0x24bc18,1,
 0x24bc54,6,
 0x24bc80,2,
 0x24bca4,1,
+0x24bcac,2,
 0x24be00,28,
-0x24be7c,5,
-0x24beb0,2,
+0x24be7c,13,
+0x24beb4,1,
 0x24bebc,10,
-0x24bf00,2,
-0x24bf0c,7,
+0x24bf04,1,
+0x24bf0c,5,
+0x24bf24,1,
 0x24bf34,9,
 0x24bf60,6,
-0x24bf80,8,
-0x24c000,4,
-0x24c014,10,
-0x24c040,1,
-0x24c048,3,
-0x24c058,1,
-0x24c060,1,
+0x24bf80,22,
+0x24bfe0,3,
+0x24bff0,2,
+0x24c008,2,
+0x24c014,11,
+0x24c044,1,
+0x24c04c,3,
+0x24c05c,1,
+0x24c064,1,
 0x24c07c,1,
-0x24c500,1,
-0x24c518,2,
+0x24c500,2,
+0x24c518,1,
+0x24c520,3,
 0x24c540,6,
-0x24c800,4,
-0x24c814,10,
-0x24c840,1,
-0x24c848,3,
-0x24c858,1,
-0x24c860,1,
+0x24c580,10,
+0x24c808,2,
+0x24c814,11,
+0x24c844,1,
+0x24c84c,3,
+0x24c85c,1,
+0x24c864,1,
 0x24c87c,1,
-0x24cd00,1,
-0x24cd18,2,
+0x24cd00,2,
+0x24cd18,1,
+0x24cd20,3,
 0x24cd40,6,
+0x24cd80,10,
 0x24d800,2,
-0x24d818,2,
-0x24d834,2,
-0x24d92c,6,
-0x24d990,2,
+0x24d828,2,
+0x24d850,2,
+0x24d878,2,
+0x24d8a0,6,
 0x24d9ac,1,
 0x24d9d8,4,
-0x24da00,16,
-0x24dc00,3,
-0x24dc20,2,
-0x24dc40,1,
+0x24da00,6,
+0x24da20,6,
+0x24da40,6,
+0x24da60,6,
+0x24da80,3,
+0x24dc00,6,
+0x24dc20,3,
+0x24dc40,2,
+0x24dc60,1,
 0x250000,5,
 0x250020,4,
-0x250034,9,
-0x25005c,7,
+0x250034,17,
 0x250080,1,
 0x2500a0,6,
 0x250100,5,
 0x250120,4,
-0x250134,9,
-0x25015c,7,
+0x250134,17,
 0x250180,1,
 0x2501a0,6,
 0x250200,5,
 0x250220,4,
-0x250234,9,
-0x25025c,7,
+0x250234,17,
 0x250280,1,
 0x2502a0,6,
 0x250300,5,
 0x250320,4,
-0x250334,9,
-0x25035c,7,
+0x250334,17,
 0x250380,1,
 0x2503a0,6,
-0x250400,4,
-0x250440,4,
+0x250400,6,
+0x250440,6,
 0x250480,3,
 0x2504c0,3,
-0x250500,5,
-0x250518,8,
+0x250500,6,
+0x25051c,7,
+0x250540,1,
 0x250c00,13,
-0x250c40,11,
+0x250c40,12,
 0x250c80,13,
-0x250cc0,11,
+0x250cc0,12,
 0x250d00,6,
 0x250d20,6,
-0x250e00,10,
+0x250d80,14,
+0x250dc0,2,
 0x250e40,11,
-0x250e80,8,
+0x250e80,6,
+0x250ea0,6,
 0x251000,2,
 0x251010,5,
 0x251040,3,
 0x251050,3,
-0x251060,7,
-0x251080,7,
-0x2510a0,7,
-0x2510c0,7,
-0x251100,7,
-0x251140,7,
-0x251180,5,
+0x251060,32,
+0x251100,8,
+0x251140,8,
+0x251180,3,
+0x251190,2,
 0x25119c,9,
 0x251218,9,
 0x251240,3,
 0x2512e4,1,
 0x251400,8,
 0x251424,2,
-0x251500,3,
+0x251500,5,
 0x251520,4,
-0x251540,3,
+0x251540,5,
 0x251560,4,
 0x251800,24,
-0x251864,2,
-0x251880,6,
-0x251900,12,
-0x251940,6,
-0x251960,6,
+0x251864,5,
+0x251880,8,
+0x251900,13,
 0x251980,4,
+0x2519a0,6,
 0x2519c0,6,
 0x2519dc,1,
 0x251a00,6,
 0x251a1c,1,
 0x251a40,1,
+0x251a60,1,
 0x251a68,23,
+0x251ac8,6,
 0x251b00,17,
+0x251b48,6,
 0x251b80,12,
+0x251c00,6,
+0x251c20,6,
+0x251c40,6,
+0x251c60,3,
+0x251d00,6,
+0x251d20,6,
+0x251d40,3,
+0x251d80,6,
+0x251da0,6,
+0x251dc0,3,
 0x252000,5,
 0x252020,4,
-0x252034,9,
-0x25205c,7,
+0x252034,17,
 0x252080,1,
 0x2520a0,6,
 0x252100,5,
 0x252120,4,
-0x252134,9,
-0x25215c,7,
+0x252134,17,
 0x252180,1,
 0x2521a0,6,
 0x252200,5,
 0x252220,4,
-0x252234,9,
-0x25225c,7,
+0x252234,17,
 0x252280,1,
 0x2522a0,6,
 0x252300,5,
 0x252320,4,
-0x252334,9,
-0x25235c,7,
+0x252334,17,
 0x252380,1,
 0x2523a0,6,
-0x252400,4,
-0x252440,4,
+0x252400,6,
+0x252440,6,
 0x252480,3,
 0x2524c0,3,
-0x252500,5,
-0x252518,8,
+0x252500,6,
+0x25251c,7,
+0x252540,1,
 0x252c00,13,
-0x252c40,11,
+0x252c40,12,
 0x252c80,13,
-0x252cc0,11,
+0x252cc0,12,
 0x252d00,6,
 0x252d20,6,
-0x252e00,10,
+0x252d80,14,
+0x252dc0,2,
 0x252e40,11,
-0x252e80,8,
+0x252e80,6,
+0x252ea0,6,
 0x253000,2,
 0x253010,5,
 0x253040,3,
 0x253050,3,
-0x253060,7,
-0x253080,7,
-0x2530a0,7,
-0x2530c0,7,
-0x253100,7,
-0x253140,7,
-0x253180,5,
+0x253060,32,
+0x253100,8,
+0x253140,8,
+0x253180,3,
+0x253190,2,
 0x25319c,9,
 0x253218,9,
 0x253240,3,
 0x2532e4,1,
 0x253400,8,
 0x253424,2,
-0x253500,3,
+0x253500,5,
 0x253520,4,
-0x253540,3,
+0x253540,5,
 0x253560,4,
 0x253800,24,
-0x253864,2,
-0x253880,6,
-0x253900,12,
-0x253940,6,
-0x253960,6,
+0x253864,5,
+0x253880,8,
+0x253900,13,
 0x253980,4,
+0x2539a0,6,
 0x2539c0,6,
 0x2539dc,1,
 0x253a00,6,
 0x253a1c,1,
 0x253a40,1,
+0x253a60,1,
 0x253a68,23,
+0x253ac8,6,
 0x253b00,17,
+0x253b48,6,
 0x253b80,12,
-0x254000,4,
-0x254014,6,
-0x254030,5,
-0x254080,4,
-0x254094,6,
-0x2540b0,5,
-0x254100,4,
-0x254114,6,
-0x254130,5,
-0x254180,4,
-0x254194,6,
-0x2541b0,5,
-0x254200,3,
-0x254210,23,
-0x254500,3,
-0x254510,12,
-0x254580,3,
-0x254590,12,
-0x254600,3,
-0x254610,12,
-0x254680,3,
-0x254690,12,
-0x254700,4,
-0x254718,13,
-0x254800,25,
-0x254880,25,
-0x254900,25,
-0x254980,25,
-0x254a00,17,
-0x254a50,3,
-0x254a60,3,
-0x255000,4,
-0x255014,6,
-0x255030,5,
-0x255080,4,
-0x255094,6,
-0x2550b0,5,
-0x255100,4,
-0x255114,6,
-0x255130,5,
-0x255180,4,
-0x255194,6,
-0x2551b0,5,
-0x255200,3,
-0x255210,23,
-0x255500,3,
-0x255510,12,
-0x255580,3,
-0x255590,12,
-0x255600,3,
-0x255610,12,
-0x255680,3,
-0x255690,12,
-0x255700,4,
-0x255718,13,
-0x255800,25,
-0x255880,25,
-0x255900,25,
-0x255980,25,
-0x255a00,17,
-0x255a50,3,
-0x255a60,3,
-0x256000,13,
-0x256040,22,
-0x2560a0,6,
-0x2560c0,3,
+0x253c00,6,
+0x253c20,6,
+0x253c40,6,
+0x253c60,3,
+0x253d00,6,
+0x253d20,6,
+0x253d40,3,
+0x253d80,6,
+0x253da0,6,
+0x253dc0,3,
+0x254000,29,
+0x254078,5,
+0x254090,2,
+0x2540a0,10,
+0x254100,93,
+0x254278,5,
+0x254290,2,
+0x2542a0,10,
+0x254300,93,
+0x254478,5,
+0x254490,2,
+0x2544a0,10,
+0x254500,93,
+0x254678,5,
+0x254690,2,
+0x2546a0,10,
+0x254700,93,
+0x25487c,1,
+0x254a00,8,
+0x254a24,15,
+0x254a64,23,
+0x254ac4,6,
+0x254b00,4,
+0x254b20,3,
+0x254c00,2,
+0x254c40,14,
+0x254c80,9,
+0x254d00,9,
+0x254d2c,1,
+0x254d80,6,
+0x254e00,2,
+0x254e0c,1,
+0x254e14,5,
+0x254e2c,1,
+0x254e34,5,
+0x254e4c,1,
+0x254e54,5,
+0x254e6c,1,
+0x254e74,5,
+0x254e8c,1,
+0x254e94,5,
+0x254eac,1,
+0x254eb4,3,
+0x255000,29,
+0x255078,5,
+0x255090,2,
+0x2550a0,10,
+0x255100,93,
+0x255278,5,
+0x255290,2,
+0x2552a0,10,
+0x255300,93,
+0x255478,5,
+0x255490,2,
+0x2554a0,10,
+0x255500,93,
+0x255678,5,
+0x255690,2,
+0x2556a0,10,
+0x255700,93,
+0x25587c,1,
+0x255a00,8,
+0x255a24,15,
+0x255a64,23,
+0x255ac4,6,
+0x255b00,4,
+0x255b20,3,
+0x255c00,2,
+0x255c40,14,
+0x255c80,9,
+0x255d00,9,
+0x255d2c,1,
+0x255d80,6,
+0x255e00,2,
+0x255e0c,1,
+0x255e14,5,
+0x255e2c,1,
+0x255e34,5,
+0x255e4c,1,
+0x255e54,5,
+0x255e6c,1,
+0x255e74,5,
+0x255e8c,1,
+0x255e94,5,
+0x255eac,1,
+0x255eb4,3,
+0x256000,14,
+0x256070,3,
+0x256080,6,
 0x256100,9,
-0x256400,2,
-0x25640c,6,
-0x256440,13,
-0x256480,16,
-0x256800,1,
-0x256808,3,
-0x25681c,8,
-0x256840,3,
-0x256850,3,
-0x256880,1,
-0x256888,3,
-0x25689c,8,
-0x2568c0,3,
-0x2568d0,3,
-0x256900,1,
-0x256908,3,
-0x25691c,8,
-0x256940,3,
-0x256950,3,
-0x256980,1,
-0x256988,3,
-0x25699c,8,
-0x2569c0,3,
-0x2569d0,3,
-0x256a00,1,
-0x256a08,3,
-0x256a1c,8,
-0x256a40,3,
-0x256a50,3,
-0x256a80,1,
-0x256a88,3,
-0x256a9c,8,
-0x256ac0,3,
-0x256ad0,3,
-0x256b00,1,
-0x256b08,3,
-0x256b1c,8,
-0x256b40,3,
-0x256b50,3,
-0x256b80,1,
-0x256b88,3,
-0x256b9c,8,
-0x256bc0,3,
-0x256bd0,3,
-0x256c00,1,
-0x256c08,3,
-0x256c1c,8,
-0x256c40,3,
-0x256c50,3,
-0x256c80,2,
-0x256c94,13,
+0x256204,1,
+0x25620c,6,
+0x256240,13,
+0x256280,16,
+0x256400,8,
+0x256424,15,
+0x256464,15,
+0x2564a4,15,
+0x2564e4,23,
+0x256544,6,
+0x256580,10,
+0x2565ac,1,
+0x2565b4,5,
+0x2565cc,1,
+0x2565d4,5,
+0x2565ec,1,
+0x2565f4,13,
+0x256680,7,
+0x2566a0,5,
+0x2566c0,5,
+0x2566e0,3,
+0x256800,19,
+0x256850,10,
+0x256880,19,
+0x2568d0,10,
+0x256900,19,
+0x256950,10,
+0x256980,19,
+0x2569d0,10,
+0x256a00,19,
+0x256a50,10,
+0x256a80,19,
+0x256ad0,10,
+0x256b00,19,
+0x256b50,10,
+0x256b80,19,
+0x256bd0,10,
+0x256c00,19,
+0x256c50,10,
+0x256c84,1,
+0x256c94,8,
+0x256cb8,9,
+0x256ce0,4,
 0x257000,6,
 0x257020,3,
-0x257034,1,
 0x257040,7,
 0x257060,6,
 0x257100,5,
 0x257138,1,
 0x257144,1,
-0x257400,1,
-0x257418,1,
-0x257434,1,
-0x25752c,5,
-0x257590,1,
-0x2575ac,1,
-0x2575d8,4,
-0x257600,8,
+0x257150,2,
 0x258000,6,
 0x258020,3,
 0x258030,9,
-0x258080,6,
-0x258100,20,
+0x258100,6,
+0x258120,10,
+0x258150,8,
 0x258400,1,
-0x258418,1,
-0x258434,1,
-0x25852c,4,
-0x258590,1,
+0x258428,1,
+0x258450,1,
+0x258478,1,
+0x2584a0,8,
 0x2585ac,1,
 0x2585d8,4,
-0x258600,8,
+0x258600,6,
+0x258620,6,
+0x258640,3,
+0x258800,6,
+0x258820,3,
+0x258830,4,
+0x258858,2,
+0x258864,1,
+0x258874,3,
+0x258898,2,
+0x2588a4,1,
+0x2588b4,3,
 0x259000,6,
 0x259020,6,
 0x259040,3,
 0x259080,14,
 0x2590bc,1,
 0x2590c4,13,
-0x2590fc,6,
-0x259120,5,
-0x259190,10,
-0x259200,16,
-0x259244,32,
-0x259300,26,
+0x2590fc,5,
+0x259120,4,
+0x259140,3,
+0x259180,3,
+0x259190,3,
+0x2591a0,1,
+0x2591e0,6,
+0x259200,20,
+0x25925c,30,
+0x259300,24,
 0x259380,2,
 0x2593a0,1,
 0x2593c0,11,
-0x259404,4,
-0x259418,16,
+0x259404,3,
+0x259420,11,
 0x259460,3,
+0x259480,6,
 0x259500,6,
+0x259520,6,
 0x259540,1,
 0x259558,2,
 0x259600,17,
-0x259800,366,
+0x259800,410,
 0x25a000,6,
 0x25a020,6,
 0x25a040,3,
 0x25a080,14,
 0x25a0bc,1,
 0x25a0c4,13,
-0x25a0fc,6,
-0x25a120,5,
-0x25a190,10,
-0x25a200,16,
-0x25a244,32,
-0x25a300,26,
+0x25a0fc,5,
+0x25a120,4,
+0x25a140,3,
+0x25a180,3,
+0x25a190,3,
+0x25a1a0,1,
+0x25a1e0,6,
+0x25a200,20,
+0x25a25c,30,
+0x25a300,24,
 0x25a380,2,
 0x25a3a0,1,
 0x25a3c0,11,
-0x25a404,4,
-0x25a418,16,
+0x25a404,3,
+0x25a420,11,
 0x25a460,3,
+0x25a480,6,
 0x25a500,6,
+0x25a520,6,
 0x25a540,1,
 0x25a558,2,
 0x25a600,17,
-0x25a800,366,
+0x25a800,410,
 0x25b000,4,
-0x25b020,9,
-0x25b048,6,
-0x25b064,6,
-0x25b080,1,
+0x25b020,25,
+0x25b088,8,
 0x25b100,4,
-0x25b120,9,
-0x25b148,6,
-0x25b164,6,
-0x25b180,1,
-0x25b200,35,
-0x25b290,6,
-0x25b2b4,6,
-0x25b2d0,5,
-0x25b2e8,5,
+0x25b120,25,
+0x25b188,8,
+0x25b200,34,
 0x25b300,37,
-0x25b400,6,
-0x25b420,3,
-0x25b438,4,
-0x25b454,3,
-0x25b478,4,
-0x25b494,3,
+0x25b400,16,
+0x25b464,1,
+0x25b474,3,
+0x25b500,6,
+0x25b520,2,
+0x25b530,9,
+0x25b570,10,
+0x25b5a0,2,
+0x25b5b0,9,
+0x25b5f0,4,
+0x25b620,7,
+0x25b640,16,
+0x25b700,6,
+0x25b720,6,
+0x25b740,6,
+0x25b760,6,
+0x25b780,3,
 0x25b800,5,
 0x25b818,1,
 0x25b854,6,
 0x25b880,2,
 0x25b8a4,1,
+0x25b8ac,2,
 0x25ba00,28,
-0x25ba7c,5,
-0x25bab0,2,
+0x25ba7c,13,
+0x25bab4,1,
 0x25babc,10,
-0x25bb00,2,
-0x25bb0c,7,
+0x25bb04,1,
+0x25bb0c,5,
+0x25bb24,1,
 0x25bb34,9,
 0x25bb60,6,
-0x25bb80,8,
+0x25bb80,22,
+0x25bbe0,3,
+0x25bbf0,2,
 0x25bc00,5,
 0x25bc18,1,
 0x25bc54,6,
 0x25bc80,2,
 0x25bca4,1,
+0x25bcac,2,
 0x25be00,28,
-0x25be7c,5,
-0x25beb0,2,
+0x25be7c,13,
+0x25beb4,1,
 0x25bebc,10,
-0x25bf00,2,
-0x25bf0c,7,
+0x25bf04,1,
+0x25bf0c,5,
+0x25bf24,1,
 0x25bf34,9,
 0x25bf60,6,
-0x25bf80,8,
-0x25c000,4,
-0x25c014,10,
-0x25c040,1,
-0x25c048,3,
-0x25c058,1,
-0x25c060,1,
+0x25bf80,22,
+0x25bfe0,3,
+0x25bff0,2,
+0x25c008,2,
+0x25c014,11,
+0x25c044,1,
+0x25c04c,3,
+0x25c05c,1,
+0x25c064,1,
 0x25c07c,1,
-0x25c500,1,
-0x25c518,2,
+0x25c500,2,
+0x25c518,1,
+0x25c520,3,
 0x25c540,6,
-0x25c800,4,
-0x25c814,10,
-0x25c840,1,
-0x25c848,3,
-0x25c858,1,
-0x25c860,1,
+0x25c580,10,
+0x25c808,2,
+0x25c814,11,
+0x25c844,1,
+0x25c84c,3,
+0x25c85c,1,
+0x25c864,1,
 0x25c87c,1,
-0x25cd00,1,
-0x25cd18,2,
+0x25cd00,2,
+0x25cd18,1,
+0x25cd20,3,
 0x25cd40,6,
+0x25cd80,10,
 0x25d800,2,
-0x25d818,2,
-0x25d834,2,
-0x25d92c,6,
-0x25d990,2,
+0x25d828,2,
+0x25d850,2,
+0x25d878,2,
+0x25d8a0,6,
 0x25d9ac,1,
 0x25d9d8,4,
-0x25da00,16,
-0x25dc00,3,
-0x25dc20,2,
-0x25dc40,1,
+0x25da00,6,
+0x25da20,6,
+0x25da40,6,
+0x25da60,6,
+0x25da80,3,
+0x25dc00,6,
+0x25dc20,3,
+0x25dc40,2,
+0x25dc60,1,
 0x260000,5,
 0x260020,4,
-0x260034,9,
-0x26005c,7,
+0x260034,17,
 0x260080,1,
 0x2600a0,6,
 0x260100,5,
 0x260120,4,
-0x260134,9,
-0x26015c,7,
+0x260134,17,
 0x260180,1,
 0x2601a0,6,
 0x260200,5,
 0x260220,4,
-0x260234,9,
-0x26025c,7,
+0x260234,17,
 0x260280,1,
 0x2602a0,6,
 0x260300,5,
 0x260320,4,
-0x260334,9,
-0x26035c,7,
+0x260334,17,
 0x260380,1,
 0x2603a0,6,
-0x260400,4,
-0x260440,4,
+0x260400,6,
+0x260440,6,
 0x260480,3,
 0x2604c0,3,
-0x260500,5,
-0x260518,8,
+0x260500,6,
+0x26051c,7,
+0x260540,1,
 0x260c00,13,
-0x260c40,11,
+0x260c40,12,
 0x260c80,13,
-0x260cc0,11,
+0x260cc0,12,
 0x260d00,6,
 0x260d20,6,
-0x260e00,10,
+0x260d80,14,
+0x260dc0,2,
 0x260e40,11,
-0x260e80,8,
+0x260e80,6,
+0x260ea0,6,
 0x261000,2,
 0x261010,5,
 0x261040,3,
 0x261050,3,
-0x261060,7,
-0x261080,7,
-0x2610a0,7,
-0x2610c0,7,
-0x261100,7,
-0x261140,7,
-0x261180,5,
+0x261060,32,
+0x261100,8,
+0x261140,8,
+0x261180,3,
+0x261190,2,
 0x26119c,9,
 0x261218,9,
 0x261240,3,
 0x2612e4,1,
 0x261400,8,
 0x261424,2,
-0x261500,3,
+0x261500,5,
 0x261520,4,
-0x261540,3,
+0x261540,5,
 0x261560,4,
 0x261800,24,
-0x261864,2,
-0x261880,6,
-0x261900,12,
-0x261940,6,
-0x261960,6,
+0x261864,5,
+0x261880,8,
+0x261900,13,
 0x261980,4,
+0x2619a0,6,
 0x2619c0,6,
 0x2619dc,1,
 0x261a00,6,
 0x261a1c,1,
 0x261a40,1,
+0x261a60,1,
 0x261a68,23,
+0x261ac8,6,
 0x261b00,17,
+0x261b48,6,
 0x261b80,12,
+0x261c00,6,
+0x261c20,6,
+0x261c40,6,
+0x261c60,3,
+0x261d00,6,
+0x261d20,6,
+0x261d40,3,
+0x261d80,6,
+0x261da0,6,
+0x261dc0,3,
 0x262000,5,
 0x262020,4,
-0x262034,9,
-0x26205c,7,
+0x262034,17,
 0x262080,1,
 0x2620a0,6,
 0x262100,5,
 0x262120,4,
-0x262134,9,
-0x26215c,7,
+0x262134,17,
 0x262180,1,
 0x2621a0,6,
 0x262200,5,
 0x262220,4,
-0x262234,9,
-0x26225c,7,
+0x262234,17,
 0x262280,1,
 0x2622a0,6,
 0x262300,5,
 0x262320,4,
-0x262334,9,
-0x26235c,7,
+0x262334,17,
 0x262380,1,
 0x2623a0,6,
-0x262400,4,
-0x262440,4,
+0x262400,6,
+0x262440,6,
 0x262480,3,
 0x2624c0,3,
-0x262500,5,
-0x262518,8,
+0x262500,6,
+0x26251c,7,
+0x262540,1,
 0x262c00,13,
-0x262c40,11,
+0x262c40,12,
 0x262c80,13,
-0x262cc0,11,
+0x262cc0,12,
 0x262d00,6,
 0x262d20,6,
-0x262e00,10,
+0x262d80,14,
+0x262dc0,2,
 0x262e40,11,
-0x262e80,8,
+0x262e80,6,
+0x262ea0,6,
 0x263000,2,
 0x263010,5,
 0x263040,3,
 0x263050,3,
-0x263060,7,
-0x263080,7,
-0x2630a0,7,
-0x2630c0,7,
-0x263100,7,
-0x263140,7,
-0x263180,5,
+0x263060,32,
+0x263100,8,
+0x263140,8,
+0x263180,3,
+0x263190,2,
 0x26319c,9,
 0x263218,9,
 0x263240,3,
 0x2632e4,1,
 0x263400,8,
 0x263424,2,
-0x263500,3,
+0x263500,5,
 0x263520,4,
-0x263540,3,
+0x263540,5,
 0x263560,4,
 0x263800,24,
-0x263864,2,
-0x263880,6,
-0x263900,12,
-0x263940,6,
-0x263960,6,
+0x263864,5,
+0x263880,8,
+0x263900,13,
 0x263980,4,
+0x2639a0,6,
 0x2639c0,6,
 0x2639dc,1,
 0x263a00,6,
 0x263a1c,1,
 0x263a40,1,
+0x263a60,1,
 0x263a68,23,
+0x263ac8,6,
 0x263b00,17,
+0x263b48,6,
 0x263b80,12,
-0x264000,4,
-0x264014,6,
-0x264030,5,
-0x264080,4,
-0x264094,6,
-0x2640b0,5,
-0x264100,4,
-0x264114,6,
-0x264130,5,
-0x264180,4,
-0x264194,6,
-0x2641b0,5,
-0x264200,3,
-0x264210,23,
-0x264500,3,
-0x264510,12,
-0x264580,3,
-0x264590,12,
-0x264600,3,
-0x264610,12,
-0x264680,3,
-0x264690,12,
-0x264700,4,
-0x264718,13,
-0x264800,25,
-0x264880,25,
-0x264900,25,
-0x264980,25,
-0x264a00,17,
-0x264a50,3,
-0x264a60,3,
-0x265000,4,
-0x265014,6,
-0x265030,5,
-0x265080,4,
-0x265094,6,
-0x2650b0,5,
-0x265100,4,
-0x265114,6,
-0x265130,5,
-0x265180,4,
-0x265194,6,
-0x2651b0,5,
-0x265200,3,
-0x265210,23,
-0x265500,3,
-0x265510,12,
-0x265580,3,
-0x265590,12,
-0x265600,3,
-0x265610,12,
-0x265680,3,
-0x265690,12,
-0x265700,4,
-0x265718,13,
-0x265800,25,
-0x265880,25,
-0x265900,25,
-0x265980,25,
-0x265a00,17,
-0x265a50,3,
-0x265a60,3,
-0x266000,13,
-0x266040,22,
-0x2660a0,6,
-0x2660c0,3,
+0x263c00,6,
+0x263c20,6,
+0x263c40,6,
+0x263c60,3,
+0x263d00,6,
+0x263d20,6,
+0x263d40,3,
+0x263d80,6,
+0x263da0,6,
+0x263dc0,3,
+0x264000,29,
+0x264078,5,
+0x264090,2,
+0x2640a0,10,
+0x264100,93,
+0x264278,5,
+0x264290,2,
+0x2642a0,10,
+0x264300,93,
+0x264478,5,
+0x264490,2,
+0x2644a0,10,
+0x264500,93,
+0x264678,5,
+0x264690,2,
+0x2646a0,10,
+0x264700,93,
+0x26487c,1,
+0x264a00,8,
+0x264a24,15,
+0x264a64,23,
+0x264ac4,6,
+0x264b00,4,
+0x264b20,3,
+0x264c00,2,
+0x264c40,14,
+0x264c80,9,
+0x264d00,9,
+0x264d2c,1,
+0x264d80,6,
+0x264e00,2,
+0x264e0c,1,
+0x264e14,5,
+0x264e2c,1,
+0x264e34,5,
+0x264e4c,1,
+0x264e54,5,
+0x264e6c,1,
+0x264e74,5,
+0x264e8c,1,
+0x264e94,5,
+0x264eac,1,
+0x264eb4,3,
+0x265000,29,
+0x265078,5,
+0x265090,2,
+0x2650a0,10,
+0x265100,93,
+0x265278,5,
+0x265290,2,
+0x2652a0,10,
+0x265300,93,
+0x265478,5,
+0x265490,2,
+0x2654a0,10,
+0x265500,93,
+0x265678,5,
+0x265690,2,
+0x2656a0,10,
+0x265700,93,
+0x26587c,1,
+0x265a00,8,
+0x265a24,15,
+0x265a64,23,
+0x265ac4,6,
+0x265b00,4,
+0x265b20,3,
+0x265c00,2,
+0x265c40,14,
+0x265c80,9,
+0x265d00,9,
+0x265d2c,1,
+0x265d80,6,
+0x265e00,2,
+0x265e0c,1,
+0x265e14,5,
+0x265e2c,1,
+0x265e34,5,
+0x265e4c,1,
+0x265e54,5,
+0x265e6c,1,
+0x265e74,5,
+0x265e8c,1,
+0x265e94,5,
+0x265eac,1,
+0x265eb4,3,
+0x266000,14,
+0x266070,3,
+0x266080,6,
 0x266100,9,
-0x266400,2,
-0x26640c,6,
-0x266440,13,
-0x266480,16,
-0x266800,1,
-0x266808,3,
-0x26681c,8,
-0x266840,3,
-0x266850,3,
-0x266880,1,
-0x266888,3,
-0x26689c,8,
-0x2668c0,3,
-0x2668d0,3,
-0x266900,1,
-0x266908,3,
-0x26691c,8,
-0x266940,3,
-0x266950,3,
-0x266980,1,
-0x266988,3,
-0x26699c,8,
-0x2669c0,3,
-0x2669d0,3,
-0x266a00,1,
-0x266a08,3,
-0x266a1c,8,
-0x266a40,3,
-0x266a50,3,
-0x266a80,1,
-0x266a88,3,
-0x266a9c,8,
-0x266ac0,3,
-0x266ad0,3,
-0x266b00,1,
-0x266b08,3,
-0x266b1c,8,
-0x266b40,3,
-0x266b50,3,
-0x266b80,1,
-0x266b88,3,
-0x266b9c,8,
-0x266bc0,3,
-0x266bd0,3,
-0x266c00,1,
-0x266c08,3,
-0x266c1c,8,
-0x266c40,3,
-0x266c50,3,
-0x266c80,2,
-0x266c94,13,
+0x266204,1,
+0x26620c,6,
+0x266240,13,
+0x266280,16,
+0x266400,8,
+0x266424,15,
+0x266464,15,
+0x2664a4,15,
+0x2664e4,23,
+0x266544,6,
+0x266580,10,
+0x2665ac,1,
+0x2665b4,5,
+0x2665cc,1,
+0x2665d4,5,
+0x2665ec,1,
+0x2665f4,13,
+0x266680,7,
+0x2666a0,5,
+0x2666c0,5,
+0x2666e0,3,
+0x266800,19,
+0x266850,10,
+0x266880,19,
+0x2668d0,10,
+0x266900,19,
+0x266950,10,
+0x266980,19,
+0x2669d0,10,
+0x266a00,19,
+0x266a50,10,
+0x266a80,19,
+0x266ad0,10,
+0x266b00,19,
+0x266b50,10,
+0x266b80,19,
+0x266bd0,10,
+0x266c00,19,
+0x266c50,10,
+0x266c84,1,
+0x266c94,8,
+0x266cb8,9,
+0x266ce0,4,
 0x267000,6,
 0x267020,3,
-0x267034,1,
 0x267040,7,
 0x267060,6,
 0x267100,5,
 0x267138,1,
 0x267144,1,
-0x267400,1,
-0x267418,1,
-0x267434,1,
-0x26752c,5,
-0x267590,1,
-0x2675ac,1,
-0x2675d8,4,
-0x267600,8,
+0x267150,2,
 0x268000,6,
 0x268020,3,
 0x268030,9,
-0x268080,6,
-0x268100,20,
+0x268100,6,
+0x268120,10,
+0x268150,8,
 0x268400,1,
-0x268418,1,
-0x268434,1,
-0x26852c,4,
-0x268590,1,
+0x268428,1,
+0x268450,1,
+0x268478,1,
+0x2684a0,8,
 0x2685ac,1,
 0x2685d8,4,
-0x268600,8,
+0x268600,6,
+0x268620,6,
+0x268640,3,
+0x268800,6,
+0x268820,3,
+0x268830,4,
+0x268858,2,
+0x268864,1,
+0x268874,3,
+0x268898,2,
+0x2688a4,1,
+0x2688b4,3,
 0x269000,6,
 0x269020,6,
 0x269040,3,
 0x269080,14,
 0x2690bc,1,
 0x2690c4,13,
-0x2690fc,6,
-0x269120,5,
-0x269190,10,
-0x269200,16,
-0x269244,32,
-0x269300,26,
+0x2690fc,5,
+0x269120,4,
+0x269140,3,
+0x269180,3,
+0x269190,3,
+0x2691a0,1,
+0x2691e0,6,
+0x269200,20,
+0x26925c,30,
+0x269300,24,
 0x269380,2,
 0x2693a0,1,
 0x2693c0,11,
-0x269404,4,
-0x269418,16,
+0x269404,3,
+0x269420,11,
 0x269460,3,
+0x269480,6,
 0x269500,6,
+0x269520,6,
 0x269540,1,
 0x269558,2,
 0x269600,17,
-0x269800,366,
+0x269800,410,
 0x26a000,6,
 0x26a020,6,
 0x26a040,3,
 0x26a080,14,
 0x26a0bc,1,
 0x26a0c4,13,
-0x26a0fc,6,
-0x26a120,5,
-0x26a190,10,
-0x26a200,16,
-0x26a244,32,
-0x26a300,26,
+0x26a0fc,5,
+0x26a120,4,
+0x26a140,3,
+0x26a180,3,
+0x26a190,3,
+0x26a1a0,1,
+0x26a1e0,6,
+0x26a200,20,
+0x26a25c,30,
+0x26a300,24,
 0x26a380,2,
 0x26a3a0,1,
 0x26a3c0,11,
-0x26a404,4,
-0x26a418,16,
+0x26a404,3,
+0x26a420,11,
 0x26a460,3,
+0x26a480,6,
 0x26a500,6,
+0x26a520,6,
 0x26a540,1,
 0x26a558,2,
 0x26a600,17,
-0x26a800,366,
+0x26a800,410,
 0x26b000,4,
-0x26b020,9,
-0x26b048,6,
-0x26b064,6,
-0x26b080,1,
+0x26b020,25,
+0x26b088,8,
 0x26b100,4,
-0x26b120,9,
-0x26b148,6,
-0x26b164,6,
-0x26b180,1,
-0x26b200,35,
-0x26b290,6,
-0x26b2b4,6,
-0x26b2d0,5,
-0x26b2e8,5,
+0x26b120,25,
+0x26b188,8,
+0x26b200,34,
 0x26b300,37,
-0x26b400,6,
-0x26b420,3,
-0x26b438,4,
-0x26b454,3,
-0x26b478,4,
-0x26b494,3,
+0x26b400,16,
+0x26b464,1,
+0x26b474,3,
+0x26b500,6,
+0x26b520,2,
+0x26b530,9,
+0x26b570,10,
+0x26b5a0,2,
+0x26b5b0,9,
+0x26b5f0,4,
+0x26b620,7,
+0x26b640,16,
+0x26b700,6,
+0x26b720,6,
+0x26b740,6,
+0x26b760,6,
+0x26b780,3,
 0x26b800,5,
 0x26b818,1,
 0x26b854,6,
 0x26b880,2,
 0x26b8a4,1,
+0x26b8ac,2,
 0x26ba00,28,
-0x26ba7c,5,
-0x26bab0,2,
+0x26ba7c,13,
+0x26bab4,1,
 0x26babc,10,
-0x26bb00,2,
-0x26bb0c,7,
+0x26bb04,1,
+0x26bb0c,5,
+0x26bb24,1,
 0x26bb34,9,
 0x26bb60,6,
-0x26bb80,8,
+0x26bb80,22,
+0x26bbe0,3,
+0x26bbf0,2,
 0x26bc00,5,
 0x26bc18,1,
 0x26bc54,6,
 0x26bc80,2,
 0x26bca4,1,
+0x26bcac,2,
 0x26be00,28,
-0x26be7c,5,
-0x26beb0,2,
+0x26be7c,13,
+0x26beb4,1,
 0x26bebc,10,
-0x26bf00,2,
-0x26bf0c,7,
+0x26bf04,1,
+0x26bf0c,5,
+0x26bf24,1,
 0x26bf34,9,
 0x26bf60,6,
-0x26bf80,8,
-0x26c000,4,
-0x26c014,10,
-0x26c040,1,
-0x26c048,3,
-0x26c058,1,
-0x26c060,1,
+0x26bf80,22,
+0x26bfe0,3,
+0x26bff0,2,
+0x26c008,2,
+0x26c014,11,
+0x26c044,1,
+0x26c04c,3,
+0x26c05c,1,
+0x26c064,1,
 0x26c07c,1,
-0x26c500,1,
-0x26c518,2,
+0x26c500,2,
+0x26c518,1,
+0x26c520,3,
 0x26c540,6,
-0x26c800,4,
-0x26c814,10,
-0x26c840,1,
-0x26c848,3,
-0x26c858,1,
-0x26c860,1,
+0x26c580,10,
+0x26c808,2,
+0x26c814,11,
+0x26c844,1,
+0x26c84c,3,
+0x26c85c,1,
+0x26c864,1,
 0x26c87c,1,
-0x26cd00,1,
-0x26cd18,2,
+0x26cd00,2,
+0x26cd18,1,
+0x26cd20,3,
 0x26cd40,6,
+0x26cd80,10,
 0x26d800,2,
-0x26d818,2,
-0x26d834,2,
-0x26d92c,6,
-0x26d990,2,
+0x26d828,2,
+0x26d850,2,
+0x26d878,2,
+0x26d8a0,6,
 0x26d9ac,1,
 0x26d9d8,4,
-0x26da00,16,
-0x26dc00,3,
-0x26dc20,2,
-0x26dc40,1,
+0x26da00,6,
+0x26da20,6,
+0x26da40,6,
+0x26da60,6,
+0x26da80,3,
+0x26dc00,6,
+0x26dc20,3,
+0x26dc40,2,
+0x26dc60,1,
 0x270000,5,
 0x270020,4,
-0x270034,9,
-0x27005c,7,
+0x270034,17,
 0x270080,1,
 0x2700a0,6,
 0x270100,5,
 0x270120,4,
-0x270134,9,
-0x27015c,7,
+0x270134,17,
 0x270180,1,
 0x2701a0,6,
 0x270200,5,
 0x270220,4,
-0x270234,9,
-0x27025c,7,
+0x270234,17,
 0x270280,1,
 0x2702a0,6,
 0x270300,5,
 0x270320,4,
-0x270334,9,
-0x27035c,7,
+0x270334,17,
 0x270380,1,
 0x2703a0,6,
-0x270400,4,
-0x270440,4,
+0x270400,6,
+0x270440,6,
 0x270480,3,
 0x2704c0,3,
-0x270500,5,
-0x270518,8,
+0x270500,6,
+0x27051c,7,
+0x270540,1,
 0x270c00,13,
-0x270c40,11,
+0x270c40,12,
 0x270c80,13,
-0x270cc0,11,
+0x270cc0,12,
 0x270d00,6,
 0x270d20,6,
-0x270e00,10,
+0x270d80,14,
+0x270dc0,2,
 0x270e40,11,
-0x270e80,8,
+0x270e80,6,
+0x270ea0,6,
 0x271000,2,
 0x271010,5,
 0x271040,3,
 0x271050,3,
-0x271060,7,
-0x271080,7,
-0x2710a0,7,
-0x2710c0,7,
-0x271100,7,
-0x271140,7,
-0x271180,5,
+0x271060,32,
+0x271100,8,
+0x271140,8,
+0x271180,3,
+0x271190,2,
 0x27119c,9,
 0x271218,9,
 0x271240,3,
 0x2712e4,1,
 0x271400,8,
 0x271424,2,
-0x271500,3,
+0x271500,5,
 0x271520,4,
-0x271540,3,
+0x271540,5,
 0x271560,4,
 0x271800,24,
-0x271864,2,
-0x271880,6,
-0x271900,12,
-0x271940,6,
-0x271960,6,
+0x271864,5,
+0x271880,8,
+0x271900,13,
 0x271980,4,
+0x2719a0,6,
 0x2719c0,6,
 0x2719dc,1,
 0x271a00,6,
 0x271a1c,1,
 0x271a40,1,
+0x271a60,1,
 0x271a68,23,
+0x271ac8,6,
 0x271b00,17,
+0x271b48,6,
 0x271b80,12,
+0x271c00,6,
+0x271c20,6,
+0x271c40,6,
+0x271c60,3,
+0x271d00,6,
+0x271d20,6,
+0x271d40,3,
+0x271d80,6,
+0x271da0,6,
+0x271dc0,3,
 0x272000,5,
 0x272020,4,
-0x272034,9,
-0x27205c,7,
+0x272034,17,
 0x272080,1,
 0x2720a0,6,
 0x272100,5,
 0x272120,4,
-0x272134,9,
-0x27215c,7,
+0x272134,17,
 0x272180,1,
 0x2721a0,6,
 0x272200,5,
 0x272220,4,
-0x272234,9,
-0x27225c,7,
+0x272234,17,
 0x272280,1,
 0x2722a0,6,
 0x272300,5,
 0x272320,4,
-0x272334,9,
-0x27235c,7,
+0x272334,17,
 0x272380,1,
 0x2723a0,6,
-0x272400,4,
-0x272440,4,
+0x272400,6,
+0x272440,6,
 0x272480,3,
 0x2724c0,3,
-0x272500,5,
-0x272518,8,
+0x272500,6,
+0x27251c,7,
+0x272540,1,
 0x272c00,13,
-0x272c40,11,
+0x272c40,12,
 0x272c80,13,
-0x272cc0,11,
+0x272cc0,12,
 0x272d00,6,
 0x272d20,6,
-0x272e00,10,
+0x272d80,14,
+0x272dc0,2,
 0x272e40,11,
-0x272e80,8,
+0x272e80,6,
+0x272ea0,6,
 0x273000,2,
 0x273010,5,
 0x273040,3,
 0x273050,3,
-0x273060,7,
-0x273080,7,
-0x2730a0,7,
-0x2730c0,7,
-0x273100,7,
-0x273140,7,
-0x273180,5,
+0x273060,32,
+0x273100,8,
+0x273140,8,
+0x273180,3,
+0x273190,2,
 0x27319c,9,
 0x273218,9,
 0x273240,3,
 0x2732e4,1,
 0x273400,8,
 0x273424,2,
-0x273500,3,
+0x273500,5,
 0x273520,4,
-0x273540,3,
+0x273540,5,
 0x273560,4,
 0x273800,24,
-0x273864,2,
-0x273880,6,
-0x273900,12,
-0x273940,6,
-0x273960,6,
+0x273864,5,
+0x273880,8,
+0x273900,13,
 0x273980,4,
+0x2739a0,6,
 0x2739c0,6,
 0x2739dc,1,
 0x273a00,6,
 0x273a1c,1,
 0x273a40,1,
+0x273a60,1,
 0x273a68,23,
+0x273ac8,6,
 0x273b00,17,
+0x273b48,6,
 0x273b80,12,
-0x274000,4,
-0x274014,6,
-0x274030,5,
-0x274080,4,
-0x274094,6,
-0x2740b0,5,
-0x274100,4,
-0x274114,6,
-0x274130,5,
-0x274180,4,
-0x274194,6,
-0x2741b0,5,
-0x274200,3,
-0x274210,23,
-0x274500,3,
-0x274510,12,
-0x274580,3,
-0x274590,12,
-0x274600,3,
-0x274610,12,
-0x274680,3,
-0x274690,12,
-0x274700,4,
-0x274718,13,
-0x274800,25,
-0x274880,25,
-0x274900,25,
-0x274980,25,
-0x274a00,17,
-0x274a50,3,
-0x274a60,3,
-0x275000,4,
-0x275014,6,
-0x275030,5,
-0x275080,4,
-0x275094,6,
-0x2750b0,5,
-0x275100,4,
-0x275114,6,
-0x275130,5,
-0x275180,4,
-0x275194,6,
-0x2751b0,5,
-0x275200,3,
-0x275210,23,
-0x275500,3,
-0x275510,12,
-0x275580,3,
-0x275590,12,
-0x275600,3,
-0x275610,12,
-0x275680,3,
-0x275690,12,
-0x275700,4,
-0x275718,13,
-0x275800,25,
-0x275880,25,
-0x275900,25,
-0x275980,25,
-0x275a00,17,
-0x275a50,3,
-0x275a60,3,
-0x276000,13,
-0x276040,22,
-0x2760a0,6,
-0x2760c0,3,
+0x273c00,6,
+0x273c20,6,
+0x273c40,6,
+0x273c60,3,
+0x273d00,6,
+0x273d20,6,
+0x273d40,3,
+0x273d80,6,
+0x273da0,6,
+0x273dc0,3,
+0x274000,29,
+0x274078,5,
+0x274090,2,
+0x2740a0,10,
+0x274100,93,
+0x274278,5,
+0x274290,2,
+0x2742a0,10,
+0x274300,93,
+0x274478,5,
+0x274490,2,
+0x2744a0,10,
+0x274500,93,
+0x274678,5,
+0x274690,2,
+0x2746a0,10,
+0x274700,93,
+0x27487c,1,
+0x274a00,8,
+0x274a24,15,
+0x274a64,23,
+0x274ac4,6,
+0x274b00,4,
+0x274b20,3,
+0x274c00,2,
+0x274c40,14,
+0x274c80,9,
+0x274d00,9,
+0x274d2c,1,
+0x274d80,6,
+0x274e00,2,
+0x274e0c,1,
+0x274e14,5,
+0x274e2c,1,
+0x274e34,5,
+0x274e4c,1,
+0x274e54,5,
+0x274e6c,1,
+0x274e74,5,
+0x274e8c,1,
+0x274e94,5,
+0x274eac,1,
+0x274eb4,3,
+0x275000,29,
+0x275078,5,
+0x275090,2,
+0x2750a0,10,
+0x275100,93,
+0x275278,5,
+0x275290,2,
+0x2752a0,10,
+0x275300,93,
+0x275478,5,
+0x275490,2,
+0x2754a0,10,
+0x275500,93,
+0x275678,5,
+0x275690,2,
+0x2756a0,10,
+0x275700,93,
+0x27587c,1,
+0x275a00,8,
+0x275a24,15,
+0x275a64,23,
+0x275ac4,6,
+0x275b00,4,
+0x275b20,3,
+0x275c00,2,
+0x275c40,14,
+0x275c80,9,
+0x275d00,9,
+0x275d2c,1,
+0x275d80,6,
+0x275e00,2,
+0x275e0c,1,
+0x275e14,5,
+0x275e2c,1,
+0x275e34,5,
+0x275e4c,1,
+0x275e54,5,
+0x275e6c,1,
+0x275e74,5,
+0x275e8c,1,
+0x275e94,5,
+0x275eac,1,
+0x275eb4,3,
+0x276000,14,
+0x276070,3,
+0x276080,6,
 0x276100,9,
-0x276400,2,
-0x27640c,6,
-0x276440,13,
-0x276480,16,
-0x276800,1,
-0x276808,3,
-0x27681c,8,
-0x276840,3,
-0x276850,3,
-0x276880,1,
-0x276888,3,
-0x27689c,8,
-0x2768c0,3,
-0x2768d0,3,
-0x276900,1,
-0x276908,3,
-0x27691c,8,
-0x276940,3,
-0x276950,3,
-0x276980,1,
-0x276988,3,
-0x27699c,8,
-0x2769c0,3,
-0x2769d0,3,
-0x276a00,1,
-0x276a08,3,
-0x276a1c,8,
-0x276a40,3,
-0x276a50,3,
-0x276a80,1,
-0x276a88,3,
-0x276a9c,8,
-0x276ac0,3,
-0x276ad0,3,
-0x276b00,1,
-0x276b08,3,
-0x276b1c,8,
-0x276b40,3,
-0x276b50,3,
-0x276b80,1,
-0x276b88,3,
-0x276b9c,8,
-0x276bc0,3,
-0x276bd0,3,
-0x276c00,1,
-0x276c08,3,
-0x276c1c,8,
-0x276c40,3,
-0x276c50,3,
-0x276c80,2,
-0x276c94,13,
+0x276204,1,
+0x27620c,6,
+0x276240,13,
+0x276280,16,
+0x276400,8,
+0x276424,15,
+0x276464,15,
+0x2764a4,15,
+0x2764e4,23,
+0x276544,6,
+0x276580,10,
+0x2765ac,1,
+0x2765b4,5,
+0x2765cc,1,
+0x2765d4,5,
+0x2765ec,1,
+0x2765f4,13,
+0x276680,7,
+0x2766a0,5,
+0x2766c0,5,
+0x2766e0,3,
+0x276800,19,
+0x276850,10,
+0x276880,19,
+0x2768d0,10,
+0x276900,19,
+0x276950,10,
+0x276980,19,
+0x2769d0,10,
+0x276a00,19,
+0x276a50,10,
+0x276a80,19,
+0x276ad0,10,
+0x276b00,19,
+0x276b50,10,
+0x276b80,19,
+0x276bd0,10,
+0x276c00,19,
+0x276c50,10,
+0x276c84,1,
+0x276c94,8,
+0x276cb8,9,
+0x276ce0,4,
 0x277000,6,
 0x277020,3,
-0x277034,1,
 0x277040,7,
 0x277060,6,
 0x277100,5,
 0x277138,1,
 0x277144,1,
-0x277400,1,
-0x277418,1,
-0x277434,1,
-0x27752c,5,
-0x277590,1,
-0x2775ac,1,
-0x2775d8,4,
-0x277600,8,
+0x277150,2,
 0x278000,6,
 0x278020,3,
 0x278030,9,
-0x278080,6,
-0x278100,20,
+0x278100,6,
+0x278120,10,
+0x278150,8,
 0x278400,1,
-0x278418,1,
-0x278434,1,
-0x27852c,4,
-0x278590,1,
+0x278428,1,
+0x278450,1,
+0x278478,1,
+0x2784a0,8,
 0x2785ac,1,
 0x2785d8,4,
-0x278600,8,
+0x278600,6,
+0x278620,6,
+0x278640,3,
+0x278800,6,
+0x278820,3,
+0x278830,4,
+0x278858,2,
+0x278864,1,
+0x278874,3,
+0x278898,2,
+0x2788a4,1,
+0x2788b4,3,
 0x279000,6,
 0x279020,6,
 0x279040,3,
 0x279080,14,
 0x2790bc,1,
 0x2790c4,13,
-0x2790fc,6,
-0x279120,5,
-0x279190,10,
-0x279200,16,
-0x279244,32,
-0x279300,26,
+0x2790fc,5,
+0x279120,4,
+0x279140,3,
+0x279180,3,
+0x279190,3,
+0x2791a0,1,
+0x2791e0,6,
+0x279200,20,
+0x27925c,30,
+0x279300,24,
 0x279380,2,
 0x2793a0,1,
 0x2793c0,11,
-0x279404,4,
-0x279418,16,
+0x279404,3,
+0x279420,11,
 0x279460,3,
+0x279480,6,
 0x279500,6,
+0x279520,6,
 0x279540,1,
 0x279558,2,
 0x279600,17,
-0x279800,366,
+0x279800,410,
 0x27a000,6,
 0x27a020,6,
 0x27a040,3,
 0x27a080,14,
 0x27a0bc,1,
 0x27a0c4,13,
-0x27a0fc,6,
-0x27a120,5,
-0x27a190,10,
-0x27a200,16,
-0x27a244,32,
-0x27a300,26,
+0x27a0fc,5,
+0x27a120,4,
+0x27a140,3,
+0x27a180,3,
+0x27a190,3,
+0x27a1a0,1,
+0x27a1e0,6,
+0x27a200,20,
+0x27a25c,30,
+0x27a300,24,
 0x27a380,2,
 0x27a3a0,1,
 0x27a3c0,11,
-0x27a404,4,
-0x27a418,16,
+0x27a404,3,
+0x27a420,11,
 0x27a460,3,
+0x27a480,6,
 0x27a500,6,
+0x27a520,6,
 0x27a540,1,
 0x27a558,2,
 0x27a600,17,
-0x27a800,366,
+0x27a800,410,
 0x27b000,4,
-0x27b020,9,
-0x27b048,6,
-0x27b064,6,
-0x27b080,1,
+0x27b020,25,
+0x27b088,8,
 0x27b100,4,
-0x27b120,9,
-0x27b148,6,
-0x27b164,6,
-0x27b180,1,
-0x27b200,35,
-0x27b290,6,
-0x27b2b4,6,
-0x27b2d0,5,
-0x27b2e8,5,
+0x27b120,25,
+0x27b188,8,
+0x27b200,34,
 0x27b300,37,
-0x27b400,6,
-0x27b420,3,
-0x27b438,4,
-0x27b454,3,
-0x27b478,4,
-0x27b494,3,
+0x27b400,16,
+0x27b464,1,
+0x27b474,3,
+0x27b500,6,
+0x27b520,2,
+0x27b530,9,
+0x27b570,10,
+0x27b5a0,2,
+0x27b5b0,9,
+0x27b5f0,4,
+0x27b620,7,
+0x27b640,16,
+0x27b700,6,
+0x27b720,6,
+0x27b740,6,
+0x27b760,6,
+0x27b780,3,
 0x27b800,5,
 0x27b818,1,
 0x27b854,6,
 0x27b880,2,
 0x27b8a4,1,
+0x27b8ac,2,
 0x27ba00,28,
-0x27ba7c,5,
-0x27bab0,2,
+0x27ba7c,13,
+0x27bab4,1,
 0x27babc,10,
-0x27bb00,2,
-0x27bb0c,7,
+0x27bb04,1,
+0x27bb0c,5,
+0x27bb24,1,
 0x27bb34,9,
 0x27bb60,6,
-0x27bb80,8,
+0x27bb80,22,
+0x27bbe0,3,
+0x27bbf0,2,
 0x27bc00,5,
 0x27bc18,1,
 0x27bc54,6,
 0x27bc80,2,
 0x27bca4,1,
+0x27bcac,2,
 0x27be00,28,
-0x27be7c,5,
-0x27beb0,2,
+0x27be7c,13,
+0x27beb4,1,
 0x27bebc,10,
-0x27bf00,2,
-0x27bf0c,7,
+0x27bf04,1,
+0x27bf0c,5,
+0x27bf24,1,
 0x27bf34,9,
 0x27bf60,6,
-0x27bf80,8,
-0x27c000,4,
-0x27c014,10,
-0x27c040,1,
-0x27c048,3,
-0x27c058,1,
-0x27c060,1,
+0x27bf80,22,
+0x27bfe0,3,
+0x27bff0,2,
+0x27c008,2,
+0x27c014,11,
+0x27c044,1,
+0x27c04c,3,
+0x27c05c,1,
+0x27c064,1,
 0x27c07c,1,
-0x27c500,1,
-0x27c518,2,
+0x27c500,2,
+0x27c518,1,
+0x27c520,3,
 0x27c540,6,
-0x27c800,4,
-0x27c814,10,
-0x27c840,1,
-0x27c848,3,
-0x27c858,1,
-0x27c860,1,
+0x27c580,10,
+0x27c808,2,
+0x27c814,11,
+0x27c844,1,
+0x27c84c,3,
+0x27c85c,1,
+0x27c864,1,
 0x27c87c,1,
-0x27cd00,1,
-0x27cd18,2,
+0x27cd00,2,
+0x27cd18,1,
+0x27cd20,3,
 0x27cd40,6,
+0x27cd80,10,
 0x27d800,2,
-0x27d818,2,
-0x27d834,2,
-0x27d92c,6,
-0x27d990,2,
+0x27d828,2,
+0x27d850,2,
+0x27d878,2,
+0x27d8a0,6,
 0x27d9ac,1,
 0x27d9d8,4,
-0x27da00,16,
-0x27dc00,3,
-0x27dc20,2,
-0x27dc40,1,
+0x27da00,6,
+0x27da20,6,
+0x27da40,6,
+0x27da60,6,
+0x27da80,3,
+0x27dc00,6,
+0x27dc20,3,
+0x27dc40,2,
+0x27dc60,1,
 0x280000,5,
 0x280020,4,
-0x280034,9,
-0x28005c,7,
+0x280034,17,
 0x280080,1,
 0x2800a0,6,
 0x280100,5,
 0x280120,4,
-0x280134,9,
-0x28015c,7,
+0x280134,17,
 0x280180,1,
 0x2801a0,6,
 0x280200,5,
 0x280220,4,
-0x280234,9,
-0x28025c,7,
+0x280234,17,
 0x280280,1,
 0x2802a0,6,
 0x280300,5,
 0x280320,4,
-0x280334,9,
-0x28035c,7,
+0x280334,17,
 0x280380,1,
 0x2803a0,6,
-0x280400,4,
-0x280440,4,
+0x280400,6,
+0x280440,6,
 0x280480,3,
 0x2804c0,3,
-0x280500,5,
-0x280518,8,
+0x280500,6,
+0x28051c,7,
+0x280540,1,
 0x280c00,13,
-0x280c40,11,
+0x280c40,12,
 0x280c80,13,
-0x280cc0,11,
+0x280cc0,12,
 0x280d00,6,
 0x280d20,6,
-0x280e00,10,
+0x280d80,14,
+0x280dc0,2,
 0x280e40,11,
-0x280e80,8,
+0x280e80,6,
+0x280ea0,6,
 0x281000,2,
 0x281010,5,
 0x281040,3,
 0x281050,3,
-0x281060,7,
-0x281080,7,
-0x2810a0,7,
-0x2810c0,7,
-0x281100,7,
-0x281140,7,
-0x281180,5,
+0x281060,32,
+0x281100,8,
+0x281140,8,
+0x281180,3,
+0x281190,2,
 0x28119c,9,
 0x281218,9,
 0x281240,3,
 0x2812e4,1,
 0x281400,8,
 0x281424,2,
-0x281500,3,
+0x281500,5,
 0x281520,4,
-0x281540,3,
+0x281540,5,
 0x281560,4,
 0x281800,24,
-0x281864,2,
-0x281880,6,
-0x281900,12,
-0x281940,6,
-0x281960,6,
+0x281864,5,
+0x281880,8,
+0x281900,13,
 0x281980,4,
+0x2819a0,6,
 0x2819c0,6,
 0x2819dc,1,
 0x281a00,6,
 0x281a1c,1,
 0x281a40,1,
+0x281a60,1,
 0x281a68,23,
+0x281ac8,6,
 0x281b00,17,
+0x281b48,6,
 0x281b80,12,
+0x281c00,6,
+0x281c20,6,
+0x281c40,6,
+0x281c60,3,
+0x281d00,6,
+0x281d20,6,
+0x281d40,3,
+0x281d80,6,
+0x281da0,6,
+0x281dc0,3,
 0x282000,5,
 0x282020,4,
-0x282034,9,
-0x28205c,7,
+0x282034,17,
 0x282080,1,
 0x2820a0,6,
 0x282100,5,
 0x282120,4,
-0x282134,9,
-0x28215c,7,
+0x282134,17,
 0x282180,1,
 0x2821a0,6,
 0x282200,5,
 0x282220,4,
-0x282234,9,
-0x28225c,7,
+0x282234,17,
 0x282280,1,
 0x2822a0,6,
 0x282300,5,
 0x282320,4,
-0x282334,9,
-0x28235c,7,
+0x282334,17,
 0x282380,1,
 0x2823a0,6,
-0x282400,4,
-0x282440,4,
+0x282400,6,
+0x282440,6,
 0x282480,3,
 0x2824c0,3,
-0x282500,5,
-0x282518,8,
+0x282500,6,
+0x28251c,7,
+0x282540,1,
 0x282c00,13,
-0x282c40,11,
+0x282c40,12,
 0x282c80,13,
-0x282cc0,11,
+0x282cc0,12,
 0x282d00,6,
 0x282d20,6,
-0x282e00,10,
+0x282d80,14,
+0x282dc0,2,
 0x282e40,11,
-0x282e80,8,
+0x282e80,6,
+0x282ea0,6,
 0x283000,2,
 0x283010,5,
 0x283040,3,
 0x283050,3,
-0x283060,7,
-0x283080,7,
-0x2830a0,7,
-0x2830c0,7,
-0x283100,7,
-0x283140,7,
-0x283180,5,
+0x283060,32,
+0x283100,8,
+0x283140,8,
+0x283180,3,
+0x283190,2,
 0x28319c,9,
 0x283218,9,
 0x283240,3,
 0x2832e4,1,
 0x283400,8,
 0x283424,2,
-0x283500,3,
+0x283500,5,
 0x283520,4,
-0x283540,3,
+0x283540,5,
 0x283560,4,
 0x283800,24,
-0x283864,2,
-0x283880,6,
-0x283900,12,
-0x283940,6,
-0x283960,6,
+0x283864,5,
+0x283880,8,
+0x283900,13,
 0x283980,4,
+0x2839a0,6,
 0x2839c0,6,
 0x2839dc,1,
 0x283a00,6,
 0x283a1c,1,
 0x283a40,1,
+0x283a60,1,
 0x283a68,23,
+0x283ac8,6,
 0x283b00,17,
+0x283b48,6,
 0x283b80,12,
-0x284000,4,
-0x284014,6,
-0x284030,5,
-0x284080,4,
-0x284094,6,
-0x2840b0,5,
-0x284100,4,
-0x284114,6,
-0x284130,5,
-0x284180,4,
-0x284194,6,
-0x2841b0,5,
-0x284200,3,
-0x284210,23,
-0x284500,3,
-0x284510,12,
-0x284580,3,
-0x284590,12,
-0x284600,3,
-0x284610,12,
-0x284680,3,
-0x284690,12,
-0x284700,4,
-0x284718,13,
-0x284800,25,
-0x284880,25,
-0x284900,25,
-0x284980,25,
-0x284a00,17,
-0x284a50,3,
-0x284a60,3,
-0x285000,4,
-0x285014,6,
-0x285030,5,
-0x285080,4,
-0x285094,6,
-0x2850b0,5,
-0x285100,4,
-0x285114,6,
-0x285130,5,
-0x285180,4,
-0x285194,6,
-0x2851b0,5,
-0x285200,3,
-0x285210,23,
-0x285500,3,
-0x285510,12,
-0x285580,3,
-0x285590,12,
-0x285600,3,
-0x285610,12,
-0x285680,3,
-0x285690,12,
-0x285700,4,
-0x285718,13,
-0x285800,25,
-0x285880,25,
-0x285900,25,
-0x285980,25,
-0x285a00,17,
-0x285a50,3,
-0x285a60,3,
-0x286000,13,
-0x286040,22,
-0x2860a0,6,
-0x2860c0,3,
+0x283c00,6,
+0x283c20,6,
+0x283c40,6,
+0x283c60,3,
+0x283d00,6,
+0x283d20,6,
+0x283d40,3,
+0x283d80,6,
+0x283da0,6,
+0x283dc0,3,
+0x284000,29,
+0x284078,5,
+0x284090,2,
+0x2840a0,10,
+0x284100,93,
+0x284278,5,
+0x284290,2,
+0x2842a0,10,
+0x284300,93,
+0x284478,5,
+0x284490,2,
+0x2844a0,10,
+0x284500,93,
+0x284678,5,
+0x284690,2,
+0x2846a0,10,
+0x284700,93,
+0x28487c,1,
+0x284a00,8,
+0x284a24,15,
+0x284a64,23,
+0x284ac4,6,
+0x284b00,4,
+0x284b20,3,
+0x284c00,2,
+0x284c40,14,
+0x284c80,9,
+0x284d00,9,
+0x284d2c,1,
+0x284d80,6,
+0x284e00,2,
+0x284e0c,1,
+0x284e14,5,
+0x284e2c,1,
+0x284e34,5,
+0x284e4c,1,
+0x284e54,5,
+0x284e6c,1,
+0x284e74,5,
+0x284e8c,1,
+0x284e94,5,
+0x284eac,1,
+0x284eb4,3,
+0x285000,29,
+0x285078,5,
+0x285090,2,
+0x2850a0,10,
+0x285100,93,
+0x285278,5,
+0x285290,2,
+0x2852a0,10,
+0x285300,93,
+0x285478,5,
+0x285490,2,
+0x2854a0,10,
+0x285500,93,
+0x285678,5,
+0x285690,2,
+0x2856a0,10,
+0x285700,93,
+0x28587c,1,
+0x285a00,8,
+0x285a24,15,
+0x285a64,23,
+0x285ac4,6,
+0x285b00,4,
+0x285b20,3,
+0x285c00,2,
+0x285c40,14,
+0x285c80,9,
+0x285d00,9,
+0x285d2c,1,
+0x285d80,6,
+0x285e00,2,
+0x285e0c,1,
+0x285e14,5,
+0x285e2c,1,
+0x285e34,5,
+0x285e4c,1,
+0x285e54,5,
+0x285e6c,1,
+0x285e74,5,
+0x285e8c,1,
+0x285e94,5,
+0x285eac,1,
+0x285eb4,3,
+0x286000,14,
+0x286070,3,
+0x286080,6,
 0x286100,9,
-0x286400,2,
-0x28640c,6,
-0x286440,13,
-0x286480,16,
-0x286800,1,
-0x286808,3,
-0x28681c,8,
-0x286840,3,
-0x286850,3,
-0x286880,1,
-0x286888,3,
-0x28689c,8,
-0x2868c0,3,
-0x2868d0,3,
-0x286900,1,
-0x286908,3,
-0x28691c,8,
-0x286940,3,
-0x286950,3,
-0x286980,1,
-0x286988,3,
-0x28699c,8,
-0x2869c0,3,
-0x2869d0,3,
-0x286a00,1,
-0x286a08,3,
-0x286a1c,8,
-0x286a40,3,
-0x286a50,3,
-0x286a80,1,
-0x286a88,3,
-0x286a9c,8,
-0x286ac0,3,
-0x286ad0,3,
-0x286b00,1,
-0x286b08,3,
-0x286b1c,8,
-0x286b40,3,
-0x286b50,3,
-0x286b80,1,
-0x286b88,3,
-0x286b9c,8,
-0x286bc0,3,
-0x286bd0,3,
-0x286c00,1,
-0x286c08,3,
-0x286c1c,8,
-0x286c40,3,
-0x286c50,3,
-0x286c80,2,
-0x286c94,13,
+0x286204,1,
+0x28620c,6,
+0x286240,13,
+0x286280,16,
+0x286400,8,
+0x286424,15,
+0x286464,15,
+0x2864a4,15,
+0x2864e4,23,
+0x286544,6,
+0x286580,10,
+0x2865ac,1,
+0x2865b4,5,
+0x2865cc,1,
+0x2865d4,5,
+0x2865ec,1,
+0x2865f4,13,
+0x286680,7,
+0x2866a0,5,
+0x2866c0,5,
+0x2866e0,3,
+0x286800,19,
+0x286850,10,
+0x286880,19,
+0x2868d0,10,
+0x286900,19,
+0x286950,10,
+0x286980,19,
+0x2869d0,10,
+0x286a00,19,
+0x286a50,10,
+0x286a80,19,
+0x286ad0,10,
+0x286b00,19,
+0x286b50,10,
+0x286b80,19,
+0x286bd0,10,
+0x286c00,19,
+0x286c50,10,
+0x286c84,1,
+0x286c94,8,
+0x286cb8,9,
+0x286ce0,4,
 0x287000,6,
 0x287020,3,
-0x287034,1,
 0x287040,7,
 0x287060,6,
 0x287100,5,
 0x287138,1,
 0x287144,1,
-0x287400,1,
-0x287418,1,
-0x287434,1,
-0x28752c,5,
-0x287590,1,
-0x2875ac,1,
-0x2875d8,4,
-0x287600,8,
+0x287150,2,
 0x288000,6,
 0x288020,3,
 0x288030,9,
-0x288080,6,
-0x288100,20,
+0x288100,6,
+0x288120,10,
+0x288150,8,
 0x288400,1,
-0x288418,1,
-0x288434,1,
-0x28852c,4,
-0x288590,1,
+0x288428,1,
+0x288450,1,
+0x288478,1,
+0x2884a0,8,
 0x2885ac,1,
 0x2885d8,4,
-0x288600,8,
+0x288600,6,
+0x288620,6,
+0x288640,3,
+0x288800,6,
+0x288820,3,
+0x288830,4,
+0x288858,2,
+0x288864,1,
+0x288874,3,
+0x288898,2,
+0x2888a4,1,
+0x2888b4,3,
 0x289000,6,
 0x289020,6,
 0x289040,3,
 0x289080,14,
 0x2890bc,1,
 0x2890c4,13,
-0x2890fc,6,
-0x289120,5,
-0x289190,10,
-0x289200,16,
-0x289244,32,
-0x289300,26,
+0x2890fc,5,
+0x289120,4,
+0x289140,3,
+0x289180,3,
+0x289190,3,
+0x2891a0,1,
+0x2891e0,6,
+0x289200,20,
+0x28925c,30,
+0x289300,24,
 0x289380,2,
 0x2893a0,1,
 0x2893c0,11,
-0x289404,4,
-0x289418,16,
+0x289404,3,
+0x289420,11,
 0x289460,3,
+0x289480,6,
 0x289500,6,
+0x289520,6,
 0x289540,1,
 0x289558,2,
 0x289600,17,
-0x289800,366,
+0x289800,410,
 0x28a000,6,
 0x28a020,6,
 0x28a040,3,
 0x28a080,14,
 0x28a0bc,1,
 0x28a0c4,13,
-0x28a0fc,6,
-0x28a120,5,
-0x28a190,10,
-0x28a200,16,
-0x28a244,32,
-0x28a300,26,
+0x28a0fc,5,
+0x28a120,4,
+0x28a140,3,
+0x28a180,3,
+0x28a190,3,
+0x28a1a0,1,
+0x28a1e0,6,
+0x28a200,20,
+0x28a25c,30,
+0x28a300,24,
 0x28a380,2,
 0x28a3a0,1,
 0x28a3c0,11,
-0x28a404,4,
-0x28a418,16,
+0x28a404,3,
+0x28a420,11,
 0x28a460,3,
+0x28a480,6,
 0x28a500,6,
+0x28a520,6,
 0x28a540,1,
 0x28a558,2,
 0x28a600,17,
-0x28a800,366,
+0x28a800,410,
 0x28b000,4,
-0x28b020,9,
-0x28b048,6,
-0x28b064,6,
-0x28b080,1,
+0x28b020,25,
+0x28b088,8,
 0x28b100,4,
-0x28b120,9,
-0x28b148,6,
-0x28b164,6,
-0x28b180,1,
-0x28b200,35,
-0x28b290,6,
-0x28b2b4,6,
-0x28b2d0,5,
-0x28b2e8,5,
+0x28b120,25,
+0x28b188,8,
+0x28b200,34,
 0x28b300,37,
-0x28b400,6,
-0x28b420,3,
-0x28b438,4,
-0x28b454,3,
-0x28b478,4,
-0x28b494,3,
+0x28b400,16,
+0x28b464,1,
+0x28b474,3,
+0x28b500,6,
+0x28b520,2,
+0x28b530,9,
+0x28b570,10,
+0x28b5a0,2,
+0x28b5b0,9,
+0x28b5f0,4,
+0x28b620,7,
+0x28b640,16,
+0x28b700,6,
+0x28b720,6,
+0x28b740,6,
+0x28b760,6,
+0x28b780,3,
 0x28b800,5,
 0x28b818,1,
 0x28b854,6,
 0x28b880,2,
 0x28b8a4,1,
+0x28b8ac,2,
 0x28ba00,28,
-0x28ba7c,5,
-0x28bab0,2,
+0x28ba7c,13,
+0x28bab4,1,
 0x28babc,10,
-0x28bb00,2,
-0x28bb0c,7,
+0x28bb04,1,
+0x28bb0c,5,
+0x28bb24,1,
 0x28bb34,9,
 0x28bb60,6,
-0x28bb80,8,
+0x28bb80,22,
+0x28bbe0,3,
+0x28bbf0,2,
 0x28bc00,5,
 0x28bc18,1,
 0x28bc54,6,
 0x28bc80,2,
 0x28bca4,1,
+0x28bcac,2,
 0x28be00,28,
-0x28be7c,5,
-0x28beb0,2,
+0x28be7c,13,
+0x28beb4,1,
 0x28bebc,10,
-0x28bf00,2,
-0x28bf0c,7,
+0x28bf04,1,
+0x28bf0c,5,
+0x28bf24,1,
 0x28bf34,9,
 0x28bf60,6,
-0x28bf80,8,
-0x28c000,4,
-0x28c014,10,
-0x28c040,1,
-0x28c048,3,
-0x28c058,1,
-0x28c060,1,
+0x28bf80,22,
+0x28bfe0,3,
+0x28bff0,2,
+0x28c008,2,
+0x28c014,11,
+0x28c044,1,
+0x28c04c,3,
+0x28c05c,1,
+0x28c064,1,
 0x28c07c,1,
-0x28c500,1,
-0x28c518,2,
+0x28c500,2,
+0x28c518,1,
+0x28c520,3,
 0x28c540,6,
-0x28c800,4,
-0x28c814,10,
-0x28c840,1,
-0x28c848,3,
-0x28c858,1,
-0x28c860,1,
+0x28c580,10,
+0x28c808,2,
+0x28c814,11,
+0x28c844,1,
+0x28c84c,3,
+0x28c85c,1,
+0x28c864,1,
 0x28c87c,1,
-0x28cd00,1,
-0x28cd18,2,
+0x28cd00,2,
+0x28cd18,1,
+0x28cd20,3,
 0x28cd40,6,
+0x28cd80,10,
 0x28d800,2,
-0x28d818,2,
-0x28d834,2,
-0x28d92c,6,
-0x28d990,2,
+0x28d828,2,
+0x28d850,2,
+0x28d878,2,
+0x28d8a0,6,
 0x28d9ac,1,
 0x28d9d8,4,
-0x28da00,16,
-0x28dc00,3,
-0x28dc20,2,
-0x28dc40,1,
+0x28da00,6,
+0x28da20,6,
+0x28da40,6,
+0x28da60,6,
+0x28da80,3,
+0x28dc00,6,
+0x28dc20,3,
+0x28dc40,2,
+0x28dc60,1,
 0x290000,5,
 0x290020,4,
-0x290034,9,
-0x29005c,7,
+0x290034,17,
 0x290080,1,
 0x2900a0,6,
 0x290100,5,
 0x290120,4,
-0x290134,9,
-0x29015c,7,
+0x290134,17,
 0x290180,1,
 0x2901a0,6,
 0x290200,5,
 0x290220,4,
-0x290234,9,
-0x29025c,7,
+0x290234,17,
 0x290280,1,
 0x2902a0,6,
 0x290300,5,
 0x290320,4,
-0x290334,9,
-0x29035c,7,
+0x290334,17,
 0x290380,1,
 0x2903a0,6,
-0x290400,4,
-0x290440,4,
+0x290400,6,
+0x290440,6,
 0x290480,3,
 0x2904c0,3,
-0x290500,5,
-0x290518,8,
+0x290500,6,
+0x29051c,7,
+0x290540,1,
 0x290c00,13,
-0x290c40,11,
+0x290c40,12,
 0x290c80,13,
-0x290cc0,11,
+0x290cc0,12,
 0x290d00,6,
 0x290d20,6,
-0x290e00,10,
+0x290d80,14,
+0x290dc0,2,
 0x290e40,11,
-0x290e80,8,
+0x290e80,6,
+0x290ea0,6,
 0x291000,2,
 0x291010,5,
 0x291040,3,
 0x291050,3,
-0x291060,7,
-0x291080,7,
-0x2910a0,7,
-0x2910c0,7,
-0x291100,7,
-0x291140,7,
-0x291180,5,
+0x291060,32,
+0x291100,8,
+0x291140,8,
+0x291180,3,
+0x291190,2,
 0x29119c,9,
 0x291218,9,
 0x291240,3,
 0x2912e4,1,
 0x291400,8,
 0x291424,2,
-0x291500,3,
+0x291500,5,
 0x291520,4,
-0x291540,3,
+0x291540,5,
 0x291560,4,
 0x291800,24,
-0x291864,2,
-0x291880,6,
-0x291900,12,
-0x291940,6,
-0x291960,6,
+0x291864,5,
+0x291880,8,
+0x291900,13,
 0x291980,4,
+0x2919a0,6,
 0x2919c0,6,
 0x2919dc,1,
 0x291a00,6,
 0x291a1c,1,
 0x291a40,1,
+0x291a60,1,
 0x291a68,23,
+0x291ac8,6,
 0x291b00,17,
+0x291b48,6,
 0x291b80,12,
+0x291c00,6,
+0x291c20,6,
+0x291c40,6,
+0x291c60,3,
+0x291d00,6,
+0x291d20,6,
+0x291d40,3,
+0x291d80,6,
+0x291da0,6,
+0x291dc0,3,
 0x292000,5,
 0x292020,4,
-0x292034,9,
-0x29205c,7,
+0x292034,17,
 0x292080,1,
 0x2920a0,6,
 0x292100,5,
 0x292120,4,
-0x292134,9,
-0x29215c,7,
+0x292134,17,
 0x292180,1,
 0x2921a0,6,
 0x292200,5,
 0x292220,4,
-0x292234,9,
-0x29225c,7,
+0x292234,17,
 0x292280,1,
 0x2922a0,6,
 0x292300,5,
 0x292320,4,
-0x292334,9,
-0x29235c,7,
+0x292334,17,
 0x292380,1,
 0x2923a0,6,
-0x292400,4,
-0x292440,4,
+0x292400,6,
+0x292440,6,
 0x292480,3,
 0x2924c0,3,
-0x292500,5,
-0x292518,8,
+0x292500,6,
+0x29251c,7,
+0x292540,1,
 0x292c00,13,
-0x292c40,11,
+0x292c40,12,
 0x292c80,13,
-0x292cc0,11,
+0x292cc0,12,
 0x292d00,6,
 0x292d20,6,
-0x292e00,10,
+0x292d80,14,
+0x292dc0,2,
 0x292e40,11,
-0x292e80,8,
+0x292e80,6,
+0x292ea0,6,
 0x293000,2,
 0x293010,5,
 0x293040,3,
 0x293050,3,
-0x293060,7,
-0x293080,7,
-0x2930a0,7,
-0x2930c0,7,
-0x293100,7,
-0x293140,7,
-0x293180,5,
+0x293060,32,
+0x293100,8,
+0x293140,8,
+0x293180,3,
+0x293190,2,
 0x29319c,9,
 0x293218,9,
 0x293240,3,
 0x2932e4,1,
 0x293400,8,
 0x293424,2,
-0x293500,3,
+0x293500,5,
 0x293520,4,
-0x293540,3,
+0x293540,5,
 0x293560,4,
 0x293800,24,
-0x293864,2,
-0x293880,6,
-0x293900,12,
-0x293940,6,
-0x293960,6,
+0x293864,5,
+0x293880,8,
+0x293900,13,
 0x293980,4,
+0x2939a0,6,
 0x2939c0,6,
 0x2939dc,1,
 0x293a00,6,
 0x293a1c,1,
 0x293a40,1,
+0x293a60,1,
 0x293a68,23,
+0x293ac8,6,
 0x293b00,17,
+0x293b48,6,
 0x293b80,12,
-0x294000,4,
-0x294014,6,
-0x294030,5,
-0x294080,4,
-0x294094,6,
-0x2940b0,5,
-0x294100,4,
-0x294114,6,
-0x294130,5,
-0x294180,4,
-0x294194,6,
-0x2941b0,5,
-0x294200,3,
-0x294210,23,
-0x294500,3,
-0x294510,12,
-0x294580,3,
-0x294590,12,
-0x294600,3,
-0x294610,12,
-0x294680,3,
-0x294690,12,
-0x294700,4,
-0x294718,13,
-0x294800,25,
-0x294880,25,
-0x294900,25,
-0x294980,25,
-0x294a00,17,
-0x294a50,3,
-0x294a60,3,
-0x295000,4,
-0x295014,6,
-0x295030,5,
-0x295080,4,
-0x295094,6,
-0x2950b0,5,
-0x295100,4,
-0x295114,6,
-0x295130,5,
-0x295180,4,
-0x295194,6,
-0x2951b0,5,
-0x295200,3,
-0x295210,23,
-0x295500,3,
-0x295510,12,
-0x295580,3,
-0x295590,12,
-0x295600,3,
-0x295610,12,
-0x295680,3,
-0x295690,12,
-0x295700,4,
-0x295718,13,
-0x295800,25,
-0x295880,25,
-0x295900,25,
-0x295980,25,
-0x295a00,17,
-0x295a50,3,
-0x295a60,3,
-0x296000,13,
-0x296040,22,
-0x2960a0,6,
-0x2960c0,3,
+0x293c00,6,
+0x293c20,6,
+0x293c40,6,
+0x293c60,3,
+0x293d00,6,
+0x293d20,6,
+0x293d40,3,
+0x293d80,6,
+0x293da0,6,
+0x293dc0,3,
+0x294000,29,
+0x294078,5,
+0x294090,2,
+0x2940a0,10,
+0x294100,93,
+0x294278,5,
+0x294290,2,
+0x2942a0,10,
+0x294300,93,
+0x294478,5,
+0x294490,2,
+0x2944a0,10,
+0x294500,93,
+0x294678,5,
+0x294690,2,
+0x2946a0,10,
+0x294700,93,
+0x29487c,1,
+0x294a00,8,
+0x294a24,15,
+0x294a64,23,
+0x294ac4,6,
+0x294b00,4,
+0x294b20,3,
+0x294c00,2,
+0x294c40,14,
+0x294c80,9,
+0x294d00,9,
+0x294d2c,1,
+0x294d80,6,
+0x294e00,2,
+0x294e0c,1,
+0x294e14,5,
+0x294e2c,1,
+0x294e34,5,
+0x294e4c,1,
+0x294e54,5,
+0x294e6c,1,
+0x294e74,5,
+0x294e8c,1,
+0x294e94,5,
+0x294eac,1,
+0x294eb4,3,
+0x295000,29,
+0x295078,5,
+0x295090,2,
+0x2950a0,10,
+0x295100,93,
+0x295278,5,
+0x295290,2,
+0x2952a0,10,
+0x295300,93,
+0x295478,5,
+0x295490,2,
+0x2954a0,10,
+0x295500,93,
+0x295678,5,
+0x295690,2,
+0x2956a0,10,
+0x295700,93,
+0x29587c,1,
+0x295a00,8,
+0x295a24,15,
+0x295a64,23,
+0x295ac4,6,
+0x295b00,4,
+0x295b20,3,
+0x295c00,2,
+0x295c40,14,
+0x295c80,9,
+0x295d00,9,
+0x295d2c,1,
+0x295d80,6,
+0x295e00,2,
+0x295e0c,1,
+0x295e14,5,
+0x295e2c,1,
+0x295e34,5,
+0x295e4c,1,
+0x295e54,5,
+0x295e6c,1,
+0x295e74,5,
+0x295e8c,1,
+0x295e94,5,
+0x295eac,1,
+0x295eb4,3,
+0x296000,14,
+0x296070,3,
+0x296080,6,
 0x296100,9,
-0x296400,2,
-0x29640c,6,
-0x296440,13,
-0x296480,16,
-0x296800,1,
-0x296808,3,
-0x29681c,8,
-0x296840,3,
-0x296850,3,
-0x296880,1,
-0x296888,3,
-0x29689c,8,
-0x2968c0,3,
-0x2968d0,3,
-0x296900,1,
-0x296908,3,
-0x29691c,8,
-0x296940,3,
-0x296950,3,
-0x296980,1,
-0x296988,3,
-0x29699c,8,
-0x2969c0,3,
-0x2969d0,3,
-0x296a00,1,
-0x296a08,3,
-0x296a1c,8,
-0x296a40,3,
-0x296a50,3,
-0x296a80,1,
-0x296a88,3,
-0x296a9c,8,
-0x296ac0,3,
-0x296ad0,3,
-0x296b00,1,
-0x296b08,3,
-0x296b1c,8,
-0x296b40,3,
-0x296b50,3,
-0x296b80,1,
-0x296b88,3,
-0x296b9c,8,
-0x296bc0,3,
-0x296bd0,3,
-0x296c00,1,
-0x296c08,3,
-0x296c1c,8,
-0x296c40,3,
-0x296c50,3,
-0x296c80,2,
-0x296c94,13,
+0x296204,1,
+0x29620c,6,
+0x296240,13,
+0x296280,16,
+0x296400,8,
+0x296424,15,
+0x296464,15,
+0x2964a4,15,
+0x2964e4,23,
+0x296544,6,
+0x296580,10,
+0x2965ac,1,
+0x2965b4,5,
+0x2965cc,1,
+0x2965d4,5,
+0x2965ec,1,
+0x2965f4,13,
+0x296680,7,
+0x2966a0,5,
+0x2966c0,5,
+0x2966e0,3,
+0x296800,19,
+0x296850,10,
+0x296880,19,
+0x2968d0,10,
+0x296900,19,
+0x296950,10,
+0x296980,19,
+0x2969d0,10,
+0x296a00,19,
+0x296a50,10,
+0x296a80,19,
+0x296ad0,10,
+0x296b00,19,
+0x296b50,10,
+0x296b80,19,
+0x296bd0,10,
+0x296c00,19,
+0x296c50,10,
+0x296c84,1,
+0x296c94,8,
+0x296cb8,9,
+0x296ce0,4,
 0x297000,6,
 0x297020,3,
-0x297034,1,
 0x297040,7,
 0x297060,6,
 0x297100,5,
 0x297138,1,
 0x297144,1,
-0x297400,1,
-0x297418,1,
-0x297434,1,
-0x29752c,5,
-0x297590,1,
-0x2975ac,1,
-0x2975d8,4,
-0x297600,8,
+0x297150,2,
 0x298000,6,
 0x298020,3,
 0x298030,9,
-0x298080,6,
-0x298100,20,
+0x298100,6,
+0x298120,10,
+0x298150,8,
 0x298400,1,
-0x298418,1,
-0x298434,1,
-0x29852c,4,
-0x298590,1,
+0x298428,1,
+0x298450,1,
+0x298478,1,
+0x2984a0,8,
 0x2985ac,1,
 0x2985d8,4,
-0x298600,8,
+0x298600,6,
+0x298620,6,
+0x298640,3,
+0x298800,6,
+0x298820,3,
+0x298830,4,
+0x298858,2,
+0x298864,1,
+0x298874,3,
+0x298898,2,
+0x2988a4,1,
+0x2988b4,3,
 0x299000,6,
 0x299020,6,
 0x299040,3,
 0x299080,14,
 0x2990bc,1,
 0x2990c4,13,
-0x2990fc,6,
-0x299120,5,
-0x299190,10,
-0x299200,16,
-0x299244,32,
-0x299300,26,
+0x2990fc,5,
+0x299120,4,
+0x299140,3,
+0x299180,3,
+0x299190,3,
+0x2991a0,1,
+0x2991e0,6,
+0x299200,20,
+0x29925c,30,
+0x299300,24,
 0x299380,2,
 0x2993a0,1,
 0x2993c0,11,
-0x299404,4,
-0x299418,16,
+0x299404,3,
+0x299420,11,
 0x299460,3,
+0x299480,6,
 0x299500,6,
+0x299520,6,
 0x299540,1,
 0x299558,2,
 0x299600,17,
-0x299800,366,
+0x299800,410,
 0x29a000,6,
 0x29a020,6,
 0x29a040,3,
 0x29a080,14,
 0x29a0bc,1,
 0x29a0c4,13,
-0x29a0fc,6,
-0x29a120,5,
-0x29a190,10,
-0x29a200,16,
-0x29a244,32,
-0x29a300,26,
+0x29a0fc,5,
+0x29a120,4,
+0x29a140,3,
+0x29a180,3,
+0x29a190,3,
+0x29a1a0,1,
+0x29a1e0,6,
+0x29a200,20,
+0x29a25c,30,
+0x29a300,24,
 0x29a380,2,
 0x29a3a0,1,
 0x29a3c0,11,
-0x29a404,4,
-0x29a418,16,
+0x29a404,3,
+0x29a420,11,
 0x29a460,3,
+0x29a480,6,
 0x29a500,6,
+0x29a520,6,
 0x29a540,1,
 0x29a558,2,
 0x29a600,17,
-0x29a800,366,
+0x29a800,410,
 0x29b000,4,
-0x29b020,9,
-0x29b048,6,
-0x29b064,6,
-0x29b080,1,
+0x29b020,25,
+0x29b088,8,
 0x29b100,4,
-0x29b120,9,
-0x29b148,6,
-0x29b164,6,
-0x29b180,1,
-0x29b200,35,
-0x29b290,6,
-0x29b2b4,6,
-0x29b2d0,5,
-0x29b2e8,5,
+0x29b120,25,
+0x29b188,8,
+0x29b200,34,
 0x29b300,37,
-0x29b400,6,
-0x29b420,3,
-0x29b438,4,
-0x29b454,3,
-0x29b478,4,
-0x29b494,3,
+0x29b400,16,
+0x29b464,1,
+0x29b474,3,
+0x29b500,6,
+0x29b520,2,
+0x29b530,9,
+0x29b570,10,
+0x29b5a0,2,
+0x29b5b0,9,
+0x29b5f0,4,
+0x29b620,7,
+0x29b640,16,
+0x29b700,6,
+0x29b720,6,
+0x29b740,6,
+0x29b760,6,
+0x29b780,3,
 0x29b800,5,
 0x29b818,1,
 0x29b854,6,
 0x29b880,2,
 0x29b8a4,1,
+0x29b8ac,2,
 0x29ba00,28,
-0x29ba7c,5,
-0x29bab0,2,
+0x29ba7c,13,
+0x29bab4,1,
 0x29babc,10,
-0x29bb00,2,
-0x29bb0c,7,
+0x29bb04,1,
+0x29bb0c,5,
+0x29bb24,1,
 0x29bb34,9,
 0x29bb60,6,
-0x29bb80,8,
+0x29bb80,22,
+0x29bbe0,3,
+0x29bbf0,2,
 0x29bc00,5,
 0x29bc18,1,
 0x29bc54,6,
 0x29bc80,2,
 0x29bca4,1,
+0x29bcac,2,
 0x29be00,28,
-0x29be7c,5,
-0x29beb0,2,
+0x29be7c,13,
+0x29beb4,1,
 0x29bebc,10,
-0x29bf00,2,
-0x29bf0c,7,
+0x29bf04,1,
+0x29bf0c,5,
+0x29bf24,1,
 0x29bf34,9,
 0x29bf60,6,
-0x29bf80,8,
-0x29c000,4,
-0x29c014,10,
-0x29c040,1,
-0x29c048,3,
-0x29c058,1,
-0x29c060,1,
+0x29bf80,22,
+0x29bfe0,3,
+0x29bff0,2,
+0x29c008,2,
+0x29c014,11,
+0x29c044,1,
+0x29c04c,3,
+0x29c05c,1,
+0x29c064,1,
 0x29c07c,1,
-0x29c500,1,
-0x29c518,2,
+0x29c500,2,
+0x29c518,1,
+0x29c520,3,
 0x29c540,6,
-0x29c800,4,
-0x29c814,10,
-0x29c840,1,
-0x29c848,3,
-0x29c858,1,
-0x29c860,1,
+0x29c580,10,
+0x29c808,2,
+0x29c814,11,
+0x29c844,1,
+0x29c84c,3,
+0x29c85c,1,
+0x29c864,1,
 0x29c87c,1,
-0x29cd00,1,
-0x29cd18,2,
+0x29cd00,2,
+0x29cd18,1,
+0x29cd20,3,
 0x29cd40,6,
+0x29cd80,10,
 0x29d800,2,
-0x29d818,2,
-0x29d834,2,
-0x29d92c,6,
-0x29d990,2,
+0x29d828,2,
+0x29d850,2,
+0x29d878,2,
+0x29d8a0,6,
 0x29d9ac,1,
 0x29d9d8,4,
-0x29da00,16,
-0x29dc00,3,
-0x29dc20,2,
-0x29dc40,1,
+0x29da00,6,
+0x29da20,6,
+0x29da40,6,
+0x29da60,6,
+0x29da80,3,
+0x29dc00,6,
+0x29dc20,3,
+0x29dc40,2,
+0x29dc60,1,
 0x2a0000,5,
 0x2a0020,4,
-0x2a0034,9,
-0x2a005c,7,
+0x2a0034,17,
 0x2a0080,1,
 0x2a00a0,6,
 0x2a0100,5,
 0x2a0120,4,
-0x2a0134,9,
-0x2a015c,7,
+0x2a0134,17,
 0x2a0180,1,
 0x2a01a0,6,
 0x2a0200,5,
 0x2a0220,4,
-0x2a0234,9,
-0x2a025c,7,
+0x2a0234,17,
 0x2a0280,1,
 0x2a02a0,6,
 0x2a0300,5,
 0x2a0320,4,
-0x2a0334,9,
-0x2a035c,7,
+0x2a0334,17,
 0x2a0380,1,
 0x2a03a0,6,
-0x2a0400,4,
-0x2a0440,4,
+0x2a0400,6,
+0x2a0440,6,
 0x2a0480,3,
 0x2a04c0,3,
-0x2a0500,5,
-0x2a0518,8,
+0x2a0500,6,
+0x2a051c,7,
+0x2a0540,1,
 0x2a0c00,13,
-0x2a0c40,11,
+0x2a0c40,12,
 0x2a0c80,13,
-0x2a0cc0,11,
+0x2a0cc0,12,
 0x2a0d00,6,
 0x2a0d20,6,
-0x2a0e00,10,
+0x2a0d80,14,
+0x2a0dc0,2,
 0x2a0e40,11,
-0x2a0e80,8,
+0x2a0e80,6,
+0x2a0ea0,6,
 0x2a1000,2,
 0x2a1010,5,
 0x2a1040,3,
 0x2a1050,3,
-0x2a1060,7,
-0x2a1080,7,
-0x2a10a0,7,
-0x2a10c0,7,
-0x2a1100,7,
-0x2a1140,7,
-0x2a1180,5,
+0x2a1060,32,
+0x2a1100,8,
+0x2a1140,8,
+0x2a1180,3,
+0x2a1190,2,
 0x2a119c,9,
 0x2a1218,9,
 0x2a1240,3,
 0x2a12e4,1,
 0x2a1400,8,
 0x2a1424,2,
-0x2a1500,3,
+0x2a1500,5,
 0x2a1520,4,
-0x2a1540,3,
+0x2a1540,5,
 0x2a1560,4,
 0x2a1800,24,
-0x2a1864,2,
-0x2a1880,6,
-0x2a1900,12,
-0x2a1940,6,
-0x2a1960,6,
+0x2a1864,5,
+0x2a1880,8,
+0x2a1900,13,
 0x2a1980,4,
+0x2a19a0,6,
 0x2a19c0,6,
 0x2a19dc,1,
 0x2a1a00,6,
 0x2a1a1c,1,
 0x2a1a40,1,
+0x2a1a60,1,
 0x2a1a68,23,
+0x2a1ac8,6,
 0x2a1b00,17,
+0x2a1b48,6,
 0x2a1b80,12,
+0x2a1c00,6,
+0x2a1c20,6,
+0x2a1c40,6,
+0x2a1c60,3,
+0x2a1d00,6,
+0x2a1d20,6,
+0x2a1d40,3,
+0x2a1d80,6,
+0x2a1da0,6,
+0x2a1dc0,3,
 0x2a2000,5,
 0x2a2020,4,
-0x2a2034,9,
-0x2a205c,7,
+0x2a2034,17,
 0x2a2080,1,
 0x2a20a0,6,
 0x2a2100,5,
 0x2a2120,4,
-0x2a2134,9,
-0x2a215c,7,
+0x2a2134,17,
 0x2a2180,1,
 0x2a21a0,6,
 0x2a2200,5,
 0x2a2220,4,
-0x2a2234,9,
-0x2a225c,7,
+0x2a2234,17,
 0x2a2280,1,
 0x2a22a0,6,
 0x2a2300,5,
 0x2a2320,4,
-0x2a2334,9,
-0x2a235c,7,
+0x2a2334,17,
 0x2a2380,1,
 0x2a23a0,6,
-0x2a2400,4,
-0x2a2440,4,
+0x2a2400,6,
+0x2a2440,6,
 0x2a2480,3,
 0x2a24c0,3,
-0x2a2500,5,
-0x2a2518,8,
+0x2a2500,6,
+0x2a251c,7,
+0x2a2540,1,
 0x2a2c00,13,
-0x2a2c40,11,
+0x2a2c40,12,
 0x2a2c80,13,
-0x2a2cc0,11,
+0x2a2cc0,12,
 0x2a2d00,6,
 0x2a2d20,6,
-0x2a2e00,10,
+0x2a2d80,14,
+0x2a2dc0,2,
 0x2a2e40,11,
-0x2a2e80,8,
+0x2a2e80,6,
+0x2a2ea0,6,
 0x2a3000,2,
 0x2a3010,5,
 0x2a3040,3,
 0x2a3050,3,
-0x2a3060,7,
-0x2a3080,7,
-0x2a30a0,7,
-0x2a30c0,7,
-0x2a3100,7,
-0x2a3140,7,
-0x2a3180,5,
+0x2a3060,32,
+0x2a3100,8,
+0x2a3140,8,
+0x2a3180,3,
+0x2a3190,2,
 0x2a319c,9,
 0x2a3218,9,
 0x2a3240,3,
 0x2a32e4,1,
 0x2a3400,8,
 0x2a3424,2,
-0x2a3500,3,
+0x2a3500,5,
 0x2a3520,4,
-0x2a3540,3,
+0x2a3540,5,
 0x2a3560,4,
 0x2a3800,24,
-0x2a3864,2,
-0x2a3880,6,
-0x2a3900,12,
-0x2a3940,6,
-0x2a3960,6,
+0x2a3864,5,
+0x2a3880,8,
+0x2a3900,13,
 0x2a3980,4,
+0x2a39a0,6,
 0x2a39c0,6,
 0x2a39dc,1,
 0x2a3a00,6,
 0x2a3a1c,1,
 0x2a3a40,1,
+0x2a3a60,1,
 0x2a3a68,23,
+0x2a3ac8,6,
 0x2a3b00,17,
+0x2a3b48,6,
 0x2a3b80,12,
-0x2a4000,4,
-0x2a4014,6,
-0x2a4030,5,
-0x2a4080,4,
-0x2a4094,6,
-0x2a40b0,5,
-0x2a4100,4,
-0x2a4114,6,
-0x2a4130,5,
-0x2a4180,4,
-0x2a4194,6,
-0x2a41b0,5,
-0x2a4200,3,
-0x2a4210,23,
-0x2a4500,3,
-0x2a4510,12,
-0x2a4580,3,
-0x2a4590,12,
-0x2a4600,3,
-0x2a4610,12,
-0x2a4680,3,
-0x2a4690,12,
-0x2a4700,4,
-0x2a4718,13,
-0x2a4800,25,
-0x2a4880,25,
-0x2a4900,25,
-0x2a4980,25,
-0x2a4a00,17,
-0x2a4a50,3,
-0x2a4a60,3,
-0x2a5000,4,
-0x2a5014,6,
-0x2a5030,5,
-0x2a5080,4,
-0x2a5094,6,
-0x2a50b0,5,
-0x2a5100,4,
-0x2a5114,6,
-0x2a5130,5,
-0x2a5180,4,
-0x2a5194,6,
-0x2a51b0,5,
-0x2a5200,3,
-0x2a5210,23,
-0x2a5500,3,
-0x2a5510,12,
-0x2a5580,3,
-0x2a5590,12,
-0x2a5600,3,
-0x2a5610,12,
-0x2a5680,3,
-0x2a5690,12,
-0x2a5700,4,
-0x2a5718,13,
-0x2a5800,25,
-0x2a5880,25,
-0x2a5900,25,
-0x2a5980,25,
-0x2a5a00,17,
-0x2a5a50,3,
-0x2a5a60,3,
-0x2a6000,13,
-0x2a6040,22,
-0x2a60a0,6,
-0x2a60c0,3,
+0x2a3c00,6,
+0x2a3c20,6,
+0x2a3c40,6,
+0x2a3c60,3,
+0x2a3d00,6,
+0x2a3d20,6,
+0x2a3d40,3,
+0x2a3d80,6,
+0x2a3da0,6,
+0x2a3dc0,3,
+0x2a4000,29,
+0x2a4078,5,
+0x2a4090,2,
+0x2a40a0,10,
+0x2a4100,93,
+0x2a4278,5,
+0x2a4290,2,
+0x2a42a0,10,
+0x2a4300,93,
+0x2a4478,5,
+0x2a4490,2,
+0x2a44a0,10,
+0x2a4500,93,
+0x2a4678,5,
+0x2a4690,2,
+0x2a46a0,10,
+0x2a4700,93,
+0x2a487c,1,
+0x2a4a00,8,
+0x2a4a24,15,
+0x2a4a64,23,
+0x2a4ac4,6,
+0x2a4b00,4,
+0x2a4b20,3,
+0x2a4c00,2,
+0x2a4c40,14,
+0x2a4c80,9,
+0x2a4d00,9,
+0x2a4d2c,1,
+0x2a4d80,6,
+0x2a4e00,2,
+0x2a4e0c,1,
+0x2a4e14,5,
+0x2a4e2c,1,
+0x2a4e34,5,
+0x2a4e4c,1,
+0x2a4e54,5,
+0x2a4e6c,1,
+0x2a4e74,5,
+0x2a4e8c,1,
+0x2a4e94,5,
+0x2a4eac,1,
+0x2a4eb4,3,
+0x2a5000,29,
+0x2a5078,5,
+0x2a5090,2,
+0x2a50a0,10,
+0x2a5100,93,
+0x2a5278,5,
+0x2a5290,2,
+0x2a52a0,10,
+0x2a5300,93,
+0x2a5478,5,
+0x2a5490,2,
+0x2a54a0,10,
+0x2a5500,93,
+0x2a5678,5,
+0x2a5690,2,
+0x2a56a0,10,
+0x2a5700,93,
+0x2a587c,1,
+0x2a5a00,8,
+0x2a5a24,15,
+0x2a5a64,23,
+0x2a5ac4,6,
+0x2a5b00,4,
+0x2a5b20,3,
+0x2a5c00,2,
+0x2a5c40,14,
+0x2a5c80,9,
+0x2a5d00,9,
+0x2a5d2c,1,
+0x2a5d80,6,
+0x2a5e00,2,
+0x2a5e0c,1,
+0x2a5e14,5,
+0x2a5e2c,1,
+0x2a5e34,5,
+0x2a5e4c,1,
+0x2a5e54,5,
+0x2a5e6c,1,
+0x2a5e74,5,
+0x2a5e8c,1,
+0x2a5e94,5,
+0x2a5eac,1,
+0x2a5eb4,3,
+0x2a6000,14,
+0x2a6070,3,
+0x2a6080,6,
 0x2a6100,9,
-0x2a6400,2,
-0x2a640c,6,
-0x2a6440,13,
-0x2a6480,16,
-0x2a6800,1,
-0x2a6808,3,
-0x2a681c,8,
-0x2a6840,3,
-0x2a6850,3,
-0x2a6880,1,
-0x2a6888,3,
-0x2a689c,8,
-0x2a68c0,3,
-0x2a68d0,3,
-0x2a6900,1,
-0x2a6908,3,
-0x2a691c,8,
-0x2a6940,3,
-0x2a6950,3,
-0x2a6980,1,
-0x2a6988,3,
-0x2a699c,8,
-0x2a69c0,3,
-0x2a69d0,3,
-0x2a6a00,1,
-0x2a6a08,3,
-0x2a6a1c,8,
-0x2a6a40,3,
-0x2a6a50,3,
-0x2a6a80,1,
-0x2a6a88,3,
-0x2a6a9c,8,
-0x2a6ac0,3,
-0x2a6ad0,3,
-0x2a6b00,1,
-0x2a6b08,3,
-0x2a6b1c,8,
-0x2a6b40,3,
-0x2a6b50,3,
-0x2a6b80,1,
-0x2a6b88,3,
-0x2a6b9c,8,
-0x2a6bc0,3,
-0x2a6bd0,3,
-0x2a6c00,1,
-0x2a6c08,3,
-0x2a6c1c,8,
-0x2a6c40,3,
-0x2a6c50,3,
-0x2a6c80,2,
-0x2a6c94,13,
+0x2a6204,1,
+0x2a620c,6,
+0x2a6240,13,
+0x2a6280,16,
+0x2a6400,8,
+0x2a6424,15,
+0x2a6464,15,
+0x2a64a4,15,
+0x2a64e4,23,
+0x2a6544,6,
+0x2a6580,10,
+0x2a65ac,1,
+0x2a65b4,5,
+0x2a65cc,1,
+0x2a65d4,5,
+0x2a65ec,1,
+0x2a65f4,13,
+0x2a6680,7,
+0x2a66a0,5,
+0x2a66c0,5,
+0x2a66e0,3,
+0x2a6800,19,
+0x2a6850,10,
+0x2a6880,19,
+0x2a68d0,10,
+0x2a6900,19,
+0x2a6950,10,
+0x2a6980,19,
+0x2a69d0,10,
+0x2a6a00,19,
+0x2a6a50,10,
+0x2a6a80,19,
+0x2a6ad0,10,
+0x2a6b00,19,
+0x2a6b50,10,
+0x2a6b80,19,
+0x2a6bd0,10,
+0x2a6c00,19,
+0x2a6c50,10,
+0x2a6c84,1,
+0x2a6c94,8,
+0x2a6cb8,9,
+0x2a6ce0,4,
 0x2a7000,6,
 0x2a7020,3,
-0x2a7034,1,
 0x2a7040,7,
 0x2a7060,6,
 0x2a7100,5,
 0x2a7138,1,
 0x2a7144,1,
-0x2a7400,1,
-0x2a7418,1,
-0x2a7434,1,
-0x2a752c,5,
-0x2a7590,1,
-0x2a75ac,1,
-0x2a75d8,4,
-0x2a7600,8,
+0x2a7150,2,
 0x2a8000,6,
 0x2a8020,3,
 0x2a8030,9,
-0x2a8080,6,
-0x2a8100,20,
+0x2a8100,6,
+0x2a8120,10,
+0x2a8150,8,
 0x2a8400,1,
-0x2a8418,1,
-0x2a8434,1,
-0x2a852c,4,
-0x2a8590,1,
+0x2a8428,1,
+0x2a8450,1,
+0x2a8478,1,
+0x2a84a0,8,
 0x2a85ac,1,
 0x2a85d8,4,
-0x2a8600,8,
+0x2a8600,6,
+0x2a8620,6,
+0x2a8640,3,
+0x2a8800,6,
+0x2a8820,3,
+0x2a8830,4,
+0x2a8858,2,
+0x2a8864,1,
+0x2a8874,3,
+0x2a8898,2,
+0x2a88a4,1,
+0x2a88b4,3,
 0x2a9000,6,
 0x2a9020,6,
 0x2a9040,3,
 0x2a9080,14,
 0x2a90bc,1,
 0x2a90c4,13,
-0x2a90fc,6,
-0x2a9120,5,
-0x2a9190,10,
-0x2a9200,16,
-0x2a9244,32,
-0x2a9300,26,
+0x2a90fc,5,
+0x2a9120,4,
+0x2a9140,3,
+0x2a9180,3,
+0x2a9190,3,
+0x2a91a0,1,
+0x2a91e0,6,
+0x2a9200,20,
+0x2a925c,30,
+0x2a9300,24,
 0x2a9380,2,
 0x2a93a0,1,
 0x2a93c0,11,
-0x2a9404,4,
-0x2a9418,16,
+0x2a9404,3,
+0x2a9420,11,
 0x2a9460,3,
+0x2a9480,6,
 0x2a9500,6,
+0x2a9520,6,
 0x2a9540,1,
 0x2a9558,2,
 0x2a9600,17,
-0x2a9800,366,
+0x2a9800,410,
 0x2aa000,6,
 0x2aa020,6,
 0x2aa040,3,
 0x2aa080,14,
 0x2aa0bc,1,
 0x2aa0c4,13,
-0x2aa0fc,6,
-0x2aa120,5,
-0x2aa190,10,
-0x2aa200,16,
-0x2aa244,32,
-0x2aa300,26,
+0x2aa0fc,5,
+0x2aa120,4,
+0x2aa140,3,
+0x2aa180,3,
+0x2aa190,3,
+0x2aa1a0,1,
+0x2aa1e0,6,
+0x2aa200,20,
+0x2aa25c,30,
+0x2aa300,24,
 0x2aa380,2,
 0x2aa3a0,1,
 0x2aa3c0,11,
-0x2aa404,4,
-0x2aa418,16,
+0x2aa404,3,
+0x2aa420,11,
 0x2aa460,3,
+0x2aa480,6,
 0x2aa500,6,
+0x2aa520,6,
 0x2aa540,1,
 0x2aa558,2,
 0x2aa600,17,
-0x2aa800,366,
+0x2aa800,410,
 0x2ab000,4,
-0x2ab020,9,
-0x2ab048,6,
-0x2ab064,6,
-0x2ab080,1,
+0x2ab020,25,
+0x2ab088,8,
 0x2ab100,4,
-0x2ab120,9,
-0x2ab148,6,
-0x2ab164,6,
-0x2ab180,1,
-0x2ab200,35,
-0x2ab290,6,
-0x2ab2b4,6,
-0x2ab2d0,5,
-0x2ab2e8,5,
+0x2ab120,25,
+0x2ab188,8,
+0x2ab200,34,
 0x2ab300,37,
-0x2ab400,6,
-0x2ab420,3,
-0x2ab438,4,
-0x2ab454,3,
-0x2ab478,4,
-0x2ab494,3,
+0x2ab400,16,
+0x2ab464,1,
+0x2ab474,3,
+0x2ab500,6,
+0x2ab520,2,
+0x2ab530,9,
+0x2ab570,10,
+0x2ab5a0,2,
+0x2ab5b0,9,
+0x2ab5f0,4,
+0x2ab620,7,
+0x2ab640,16,
+0x2ab700,6,
+0x2ab720,6,
+0x2ab740,6,
+0x2ab760,6,
+0x2ab780,3,
 0x2ab800,5,
 0x2ab818,1,
 0x2ab854,6,
 0x2ab880,2,
 0x2ab8a4,1,
+0x2ab8ac,2,
 0x2aba00,28,
-0x2aba7c,5,
-0x2abab0,2,
+0x2aba7c,13,
+0x2abab4,1,
 0x2ababc,10,
-0x2abb00,2,
-0x2abb0c,7,
+0x2abb04,1,
+0x2abb0c,5,
+0x2abb24,1,
 0x2abb34,9,
 0x2abb60,6,
-0x2abb80,8,
+0x2abb80,22,
+0x2abbe0,3,
+0x2abbf0,2,
 0x2abc00,5,
 0x2abc18,1,
 0x2abc54,6,
 0x2abc80,2,
 0x2abca4,1,
+0x2abcac,2,
 0x2abe00,28,
-0x2abe7c,5,
-0x2abeb0,2,
+0x2abe7c,13,
+0x2abeb4,1,
 0x2abebc,10,
-0x2abf00,2,
-0x2abf0c,7,
+0x2abf04,1,
+0x2abf0c,5,
+0x2abf24,1,
 0x2abf34,9,
 0x2abf60,6,
-0x2abf80,8,
-0x2ac000,4,
-0x2ac014,10,
-0x2ac040,1,
-0x2ac048,3,
-0x2ac058,1,
-0x2ac060,1,
+0x2abf80,22,
+0x2abfe0,3,
+0x2abff0,2,
+0x2ac008,2,
+0x2ac014,11,
+0x2ac044,1,
+0x2ac04c,3,
+0x2ac05c,1,
+0x2ac064,1,
 0x2ac07c,1,
-0x2ac500,1,
-0x2ac518,2,
+0x2ac500,2,
+0x2ac518,1,
+0x2ac520,3,
 0x2ac540,6,
-0x2ac800,4,
-0x2ac814,10,
-0x2ac840,1,
-0x2ac848,3,
-0x2ac858,1,
-0x2ac860,1,
+0x2ac580,10,
+0x2ac808,2,
+0x2ac814,11,
+0x2ac844,1,
+0x2ac84c,3,
+0x2ac85c,1,
+0x2ac864,1,
 0x2ac87c,1,
-0x2acd00,1,
-0x2acd18,2,
+0x2acd00,2,
+0x2acd18,1,
+0x2acd20,3,
 0x2acd40,6,
+0x2acd80,10,
 0x2ad800,2,
-0x2ad818,2,
-0x2ad834,2,
-0x2ad92c,6,
-0x2ad990,2,
+0x2ad828,2,
+0x2ad850,2,
+0x2ad878,2,
+0x2ad8a0,6,
 0x2ad9ac,1,
 0x2ad9d8,4,
-0x2ada00,16,
-0x2adc00,3,
-0x2adc20,2,
-0x2adc40,1,
+0x2ada00,6,
+0x2ada20,6,
+0x2ada40,6,
+0x2ada60,6,
+0x2ada80,3,
+0x2adc00,6,
+0x2adc20,3,
+0x2adc40,2,
+0x2adc60,1,
 0x2b0000,5,
 0x2b0020,4,
-0x2b0034,9,
-0x2b005c,7,
+0x2b0034,17,
 0x2b0080,1,
 0x2b00a0,6,
 0x2b0100,5,
 0x2b0120,4,
-0x2b0134,9,
-0x2b015c,7,
+0x2b0134,17,
 0x2b0180,1,
 0x2b01a0,6,
 0x2b0200,5,
 0x2b0220,4,
-0x2b0234,9,
-0x2b025c,7,
+0x2b0234,17,
 0x2b0280,1,
 0x2b02a0,6,
 0x2b0300,5,
 0x2b0320,4,
-0x2b0334,9,
-0x2b035c,7,
+0x2b0334,17,
 0x2b0380,1,
 0x2b03a0,6,
-0x2b0400,4,
-0x2b0440,4,
+0x2b0400,6,
+0x2b0440,6,
 0x2b0480,3,
 0x2b04c0,3,
-0x2b0500,5,
-0x2b0518,8,
+0x2b0500,6,
+0x2b051c,7,
+0x2b0540,1,
 0x2b0c00,13,
-0x2b0c40,11,
+0x2b0c40,12,
 0x2b0c80,13,
-0x2b0cc0,11,
+0x2b0cc0,12,
 0x2b0d00,6,
 0x2b0d20,6,
-0x2b0e00,10,
+0x2b0d80,14,
+0x2b0dc0,2,
 0x2b0e40,11,
-0x2b0e80,8,
+0x2b0e80,6,
+0x2b0ea0,6,
 0x2b1000,2,
 0x2b1010,5,
 0x2b1040,3,
 0x2b1050,3,
-0x2b1060,7,
-0x2b1080,7,
-0x2b10a0,7,
-0x2b10c0,7,
-0x2b1100,7,
-0x2b1140,7,
-0x2b1180,5,
+0x2b1060,32,
+0x2b1100,8,
+0x2b1140,8,
+0x2b1180,3,
+0x2b1190,2,
 0x2b119c,9,
 0x2b1218,9,
 0x2b1240,3,
 0x2b12e4,1,
 0x2b1400,8,
 0x2b1424,2,
-0x2b1500,3,
+0x2b1500,5,
 0x2b1520,4,
-0x2b1540,3,
+0x2b1540,5,
 0x2b1560,4,
 0x2b1800,24,
-0x2b1864,2,
-0x2b1880,6,
-0x2b1900,12,
-0x2b1940,6,
-0x2b1960,6,
+0x2b1864,5,
+0x2b1880,8,
+0x2b1900,13,
 0x2b1980,4,
+0x2b19a0,6,
 0x2b19c0,6,
 0x2b19dc,1,
 0x2b1a00,6,
 0x2b1a1c,1,
 0x2b1a40,1,
+0x2b1a60,1,
 0x2b1a68,23,
+0x2b1ac8,6,
 0x2b1b00,17,
+0x2b1b48,6,
 0x2b1b80,12,
+0x2b1c00,6,
+0x2b1c20,6,
+0x2b1c40,6,
+0x2b1c60,3,
+0x2b1d00,6,
+0x2b1d20,6,
+0x2b1d40,3,
+0x2b1d80,6,
+0x2b1da0,6,
+0x2b1dc0,3,
 0x2b2000,5,
 0x2b2020,4,
-0x2b2034,9,
-0x2b205c,7,
+0x2b2034,17,
 0x2b2080,1,
 0x2b20a0,6,
 0x2b2100,5,
 0x2b2120,4,
-0x2b2134,9,
-0x2b215c,7,
+0x2b2134,17,
 0x2b2180,1,
 0x2b21a0,6,
 0x2b2200,5,
 0x2b2220,4,
-0x2b2234,9,
-0x2b225c,7,
+0x2b2234,17,
 0x2b2280,1,
 0x2b22a0,6,
 0x2b2300,5,
 0x2b2320,4,
-0x2b2334,9,
-0x2b235c,7,
+0x2b2334,17,
 0x2b2380,1,
 0x2b23a0,6,
-0x2b2400,4,
-0x2b2440,4,
+0x2b2400,6,
+0x2b2440,6,
 0x2b2480,3,
 0x2b24c0,3,
-0x2b2500,5,
-0x2b2518,8,
+0x2b2500,6,
+0x2b251c,7,
+0x2b2540,1,
 0x2b2c00,13,
-0x2b2c40,11,
+0x2b2c40,12,
 0x2b2c80,13,
-0x2b2cc0,11,
+0x2b2cc0,12,
 0x2b2d00,6,
 0x2b2d20,6,
-0x2b2e00,10,
+0x2b2d80,14,
+0x2b2dc0,2,
 0x2b2e40,11,
-0x2b2e80,8,
+0x2b2e80,6,
+0x2b2ea0,6,
 0x2b3000,2,
 0x2b3010,5,
 0x2b3040,3,
 0x2b3050,3,
-0x2b3060,7,
-0x2b3080,7,
-0x2b30a0,7,
-0x2b30c0,7,
-0x2b3100,7,
-0x2b3140,7,
-0x2b3180,5,
+0x2b3060,32,
+0x2b3100,8,
+0x2b3140,8,
+0x2b3180,3,
+0x2b3190,2,
 0x2b319c,9,
 0x2b3218,9,
 0x2b3240,3,
 0x2b32e4,1,
 0x2b3400,8,
 0x2b3424,2,
-0x2b3500,3,
+0x2b3500,5,
 0x2b3520,4,
-0x2b3540,3,
+0x2b3540,5,
 0x2b3560,4,
 0x2b3800,24,
-0x2b3864,2,
-0x2b3880,6,
-0x2b3900,12,
-0x2b3940,6,
-0x2b3960,6,
+0x2b3864,5,
+0x2b3880,8,
+0x2b3900,13,
 0x2b3980,4,
+0x2b39a0,6,
 0x2b39c0,6,
 0x2b39dc,1,
 0x2b3a00,6,
 0x2b3a1c,1,
 0x2b3a40,1,
+0x2b3a60,1,
 0x2b3a68,23,
+0x2b3ac8,6,
 0x2b3b00,17,
+0x2b3b48,6,
 0x2b3b80,12,
-0x2b4000,4,
-0x2b4014,6,
-0x2b4030,5,
-0x2b4080,4,
-0x2b4094,6,
-0x2b40b0,5,
-0x2b4100,4,
-0x2b4114,6,
-0x2b4130,5,
-0x2b4180,4,
-0x2b4194,6,
-0x2b41b0,5,
-0x2b4200,3,
-0x2b4210,23,
-0x2b4500,3,
-0x2b4510,12,
-0x2b4580,3,
-0x2b4590,12,
-0x2b4600,3,
-0x2b4610,12,
-0x2b4680,3,
-0x2b4690,12,
-0x2b4700,4,
-0x2b4718,13,
-0x2b4800,25,
-0x2b4880,25,
-0x2b4900,25,
-0x2b4980,25,
-0x2b4a00,17,
-0x2b4a50,3,
-0x2b4a60,3,
-0x2b5000,4,
-0x2b5014,6,
-0x2b5030,5,
-0x2b5080,4,
-0x2b5094,6,
-0x2b50b0,5,
-0x2b5100,4,
-0x2b5114,6,
-0x2b5130,5,
-0x2b5180,4,
-0x2b5194,6,
-0x2b51b0,5,
-0x2b5200,3,
-0x2b5210,23,
-0x2b5500,3,
-0x2b5510,12,
-0x2b5580,3,
-0x2b5590,12,
-0x2b5600,3,
-0x2b5610,12,
-0x2b5680,3,
-0x2b5690,12,
-0x2b5700,4,
-0x2b5718,13,
-0x2b5800,25,
-0x2b5880,25,
-0x2b5900,25,
-0x2b5980,25,
-0x2b5a00,17,
-0x2b5a50,3,
-0x2b5a60,3,
-0x2b6000,13,
-0x2b6040,22,
-0x2b60a0,6,
-0x2b60c0,3,
+0x2b3c00,6,
+0x2b3c20,6,
+0x2b3c40,6,
+0x2b3c60,3,
+0x2b3d00,6,
+0x2b3d20,6,
+0x2b3d40,3,
+0x2b3d80,6,
+0x2b3da0,6,
+0x2b3dc0,3,
+0x2b4000,29,
+0x2b4078,5,
+0x2b4090,2,
+0x2b40a0,10,
+0x2b4100,93,
+0x2b4278,5,
+0x2b4290,2,
+0x2b42a0,10,
+0x2b4300,93,
+0x2b4478,5,
+0x2b4490,2,
+0x2b44a0,10,
+0x2b4500,93,
+0x2b4678,5,
+0x2b4690,2,
+0x2b46a0,10,
+0x2b4700,93,
+0x2b487c,1,
+0x2b4a00,8,
+0x2b4a24,15,
+0x2b4a64,23,
+0x2b4ac4,6,
+0x2b4b00,4,
+0x2b4b20,3,
+0x2b4c00,2,
+0x2b4c40,14,
+0x2b4c80,9,
+0x2b4d00,9,
+0x2b4d2c,1,
+0x2b4d80,6,
+0x2b4e00,2,
+0x2b4e0c,1,
+0x2b4e14,5,
+0x2b4e2c,1,
+0x2b4e34,5,
+0x2b4e4c,1,
+0x2b4e54,5,
+0x2b4e6c,1,
+0x2b4e74,5,
+0x2b4e8c,1,
+0x2b4e94,5,
+0x2b4eac,1,
+0x2b4eb4,3,
+0x2b5000,29,
+0x2b5078,5,
+0x2b5090,2,
+0x2b50a0,10,
+0x2b5100,93,
+0x2b5278,5,
+0x2b5290,2,
+0x2b52a0,10,
+0x2b5300,93,
+0x2b5478,5,
+0x2b5490,2,
+0x2b54a0,10,
+0x2b5500,93,
+0x2b5678,5,
+0x2b5690,2,
+0x2b56a0,10,
+0x2b5700,93,
+0x2b587c,1,
+0x2b5a00,8,
+0x2b5a24,15,
+0x2b5a64,23,
+0x2b5ac4,6,
+0x2b5b00,4,
+0x2b5b20,3,
+0x2b5c00,2,
+0x2b5c40,14,
+0x2b5c80,9,
+0x2b5d00,9,
+0x2b5d2c,1,
+0x2b5d80,6,
+0x2b5e00,2,
+0x2b5e0c,1,
+0x2b5e14,5,
+0x2b5e2c,1,
+0x2b5e34,5,
+0x2b5e4c,1,
+0x2b5e54,5,
+0x2b5e6c,1,
+0x2b5e74,5,
+0x2b5e8c,1,
+0x2b5e94,5,
+0x2b5eac,1,
+0x2b5eb4,3,
+0x2b6000,14,
+0x2b6070,3,
+0x2b6080,6,
 0x2b6100,9,
-0x2b6400,2,
-0x2b640c,6,
-0x2b6440,13,
-0x2b6480,16,
-0x2b6800,1,
-0x2b6808,3,
-0x2b681c,8,
-0x2b6840,3,
-0x2b6850,3,
-0x2b6880,1,
-0x2b6888,3,
-0x2b689c,8,
-0x2b68c0,3,
-0x2b68d0,3,
-0x2b6900,1,
-0x2b6908,3,
-0x2b691c,8,
-0x2b6940,3,
-0x2b6950,3,
-0x2b6980,1,
-0x2b6988,3,
-0x2b699c,8,
-0x2b69c0,3,
-0x2b69d0,3,
-0x2b6a00,1,
-0x2b6a08,3,
-0x2b6a1c,8,
-0x2b6a40,3,
-0x2b6a50,3,
-0x2b6a80,1,
-0x2b6a88,3,
-0x2b6a9c,8,
-0x2b6ac0,3,
-0x2b6ad0,3,
-0x2b6b00,1,
-0x2b6b08,3,
-0x2b6b1c,8,
-0x2b6b40,3,
-0x2b6b50,3,
-0x2b6b80,1,
-0x2b6b88,3,
-0x2b6b9c,8,
-0x2b6bc0,3,
-0x2b6bd0,3,
-0x2b6c00,1,
-0x2b6c08,3,
-0x2b6c1c,8,
-0x2b6c40,3,
-0x2b6c50,3,
-0x2b6c80,2,
-0x2b6c94,13,
+0x2b6204,1,
+0x2b620c,6,
+0x2b6240,13,
+0x2b6280,16,
+0x2b6400,8,
+0x2b6424,15,
+0x2b6464,15,
+0x2b64a4,15,
+0x2b64e4,23,
+0x2b6544,6,
+0x2b6580,10,
+0x2b65ac,1,
+0x2b65b4,5,
+0x2b65cc,1,
+0x2b65d4,5,
+0x2b65ec,1,
+0x2b65f4,13,
+0x2b6680,7,
+0x2b66a0,5,
+0x2b66c0,5,
+0x2b66e0,3,
+0x2b6800,19,
+0x2b6850,10,
+0x2b6880,19,
+0x2b68d0,10,
+0x2b6900,19,
+0x2b6950,10,
+0x2b6980,19,
+0x2b69d0,10,
+0x2b6a00,19,
+0x2b6a50,10,
+0x2b6a80,19,
+0x2b6ad0,10,
+0x2b6b00,19,
+0x2b6b50,10,
+0x2b6b80,19,
+0x2b6bd0,10,
+0x2b6c00,19,
+0x2b6c50,10,
+0x2b6c84,1,
+0x2b6c94,8,
+0x2b6cb8,9,
+0x2b6ce0,4,
 0x2b7000,6,
 0x2b7020,3,
-0x2b7034,1,
 0x2b7040,7,
 0x2b7060,6,
 0x2b7100,5,
 0x2b7138,1,
 0x2b7144,1,
-0x2b7400,1,
-0x2b7418,1,
-0x2b7434,1,
-0x2b752c,5,
-0x2b7590,1,
-0x2b75ac,1,
-0x2b75d8,4,
-0x2b7600,8,
+0x2b7150,2,
 0x2b8000,6,
 0x2b8020,3,
 0x2b8030,9,
-0x2b8080,6,
-0x2b8100,20,
+0x2b8100,6,
+0x2b8120,10,
+0x2b8150,8,
 0x2b8400,1,
-0x2b8418,1,
-0x2b8434,1,
-0x2b852c,4,
-0x2b8590,1,
+0x2b8428,1,
+0x2b8450,1,
+0x2b8478,1,
+0x2b84a0,8,
 0x2b85ac,1,
 0x2b85d8,4,
-0x2b8600,8,
+0x2b8600,6,
+0x2b8620,6,
+0x2b8640,3,
+0x2b8800,6,
+0x2b8820,3,
+0x2b8830,4,
+0x2b8858,2,
+0x2b8864,1,
+0x2b8874,3,
+0x2b8898,2,
+0x2b88a4,1,
+0x2b88b4,3,
 0x2b9000,6,
 0x2b9020,6,
 0x2b9040,3,
 0x2b9080,14,
 0x2b90bc,1,
 0x2b90c4,13,
-0x2b90fc,6,
-0x2b9120,5,
-0x2b9190,10,
-0x2b9200,16,
-0x2b9244,32,
-0x2b9300,26,
+0x2b90fc,5,
+0x2b9120,4,
+0x2b9140,3,
+0x2b9180,3,
+0x2b9190,3,
+0x2b91a0,1,
+0x2b91e0,6,
+0x2b9200,20,
+0x2b925c,30,
+0x2b9300,24,
 0x2b9380,2,
 0x2b93a0,1,
 0x2b93c0,11,
-0x2b9404,4,
-0x2b9418,16,
+0x2b9404,3,
+0x2b9420,11,
 0x2b9460,3,
+0x2b9480,6,
 0x2b9500,6,
+0x2b9520,6,
 0x2b9540,1,
 0x2b9558,2,
 0x2b9600,17,
-0x2b9800,366,
+0x2b9800,410,
 0x2ba000,6,
 0x2ba020,6,
 0x2ba040,3,
 0x2ba080,14,
 0x2ba0bc,1,
 0x2ba0c4,13,
-0x2ba0fc,6,
-0x2ba120,5,
-0x2ba190,10,
-0x2ba200,16,
-0x2ba244,32,
-0x2ba300,26,
+0x2ba0fc,5,
+0x2ba120,4,
+0x2ba140,3,
+0x2ba180,3,
+0x2ba190,3,
+0x2ba1a0,1,
+0x2ba1e0,6,
+0x2ba200,20,
+0x2ba25c,30,
+0x2ba300,24,
 0x2ba380,2,
 0x2ba3a0,1,
 0x2ba3c0,11,
-0x2ba404,4,
-0x2ba418,16,
+0x2ba404,3,
+0x2ba420,11,
 0x2ba460,3,
+0x2ba480,6,
 0x2ba500,6,
+0x2ba520,6,
 0x2ba540,1,
 0x2ba558,2,
 0x2ba600,17,
-0x2ba800,366,
+0x2ba800,410,
 0x2bb000,4,
-0x2bb020,9,
-0x2bb048,6,
-0x2bb064,6,
-0x2bb080,1,
+0x2bb020,25,
+0x2bb088,8,
 0x2bb100,4,
-0x2bb120,9,
-0x2bb148,6,
-0x2bb164,6,
-0x2bb180,1,
-0x2bb200,35,
-0x2bb290,6,
-0x2bb2b4,6,
-0x2bb2d0,5,
-0x2bb2e8,5,
+0x2bb120,25,
+0x2bb188,8,
+0x2bb200,34,
 0x2bb300,37,
-0x2bb400,6,
-0x2bb420,3,
-0x2bb438,4,
-0x2bb454,3,
-0x2bb478,4,
-0x2bb494,3,
+0x2bb400,16,
+0x2bb464,1,
+0x2bb474,3,
+0x2bb500,6,
+0x2bb520,2,
+0x2bb530,9,
+0x2bb570,10,
+0x2bb5a0,2,
+0x2bb5b0,9,
+0x2bb5f0,4,
+0x2bb620,7,
+0x2bb640,16,
+0x2bb700,6,
+0x2bb720,6,
+0x2bb740,6,
+0x2bb760,6,
+0x2bb780,3,
 0x2bb800,5,
 0x2bb818,1,
 0x2bb854,6,
 0x2bb880,2,
 0x2bb8a4,1,
+0x2bb8ac,2,
 0x2bba00,28,
-0x2bba7c,5,
-0x2bbab0,2,
+0x2bba7c,13,
+0x2bbab4,1,
 0x2bbabc,10,
-0x2bbb00,2,
-0x2bbb0c,7,
+0x2bbb04,1,
+0x2bbb0c,5,
+0x2bbb24,1,
 0x2bbb34,9,
 0x2bbb60,6,
-0x2bbb80,8,
+0x2bbb80,22,
+0x2bbbe0,3,
+0x2bbbf0,2,
 0x2bbc00,5,
 0x2bbc18,1,
 0x2bbc54,6,
 0x2bbc80,2,
 0x2bbca4,1,
+0x2bbcac,2,
 0x2bbe00,28,
-0x2bbe7c,5,
-0x2bbeb0,2,
+0x2bbe7c,13,
+0x2bbeb4,1,
 0x2bbebc,10,
-0x2bbf00,2,
-0x2bbf0c,7,
+0x2bbf04,1,
+0x2bbf0c,5,
+0x2bbf24,1,
 0x2bbf34,9,
 0x2bbf60,6,
-0x2bbf80,8,
-0x2bc000,4,
-0x2bc014,10,
-0x2bc040,1,
-0x2bc048,3,
-0x2bc058,1,
-0x2bc060,1,
+0x2bbf80,22,
+0x2bbfe0,3,
+0x2bbff0,2,
+0x2bc008,2,
+0x2bc014,11,
+0x2bc044,1,
+0x2bc04c,3,
+0x2bc05c,1,
+0x2bc064,1,
 0x2bc07c,1,
-0x2bc500,1,
-0x2bc518,2,
+0x2bc500,2,
+0x2bc518,1,
+0x2bc520,3,
 0x2bc540,6,
-0x2bc800,4,
-0x2bc814,10,
-0x2bc840,1,
-0x2bc848,3,
-0x2bc858,1,
-0x2bc860,1,
+0x2bc580,10,
+0x2bc808,2,
+0x2bc814,11,
+0x2bc844,1,
+0x2bc84c,3,
+0x2bc85c,1,
+0x2bc864,1,
 0x2bc87c,1,
-0x2bcd00,1,
-0x2bcd18,2,
+0x2bcd00,2,
+0x2bcd18,1,
+0x2bcd20,3,
 0x2bcd40,6,
+0x2bcd80,10,
 0x2bd800,2,
-0x2bd818,2,
-0x2bd834,2,
-0x2bd92c,6,
-0x2bd990,2,
+0x2bd828,2,
+0x2bd850,2,
+0x2bd878,2,
+0x2bd8a0,6,
 0x2bd9ac,1,
 0x2bd9d8,4,
-0x2bda00,16,
-0x2bdc00,3,
-0x2bdc20,2,
-0x2bdc40,1,
+0x2bda00,6,
+0x2bda20,6,
+0x2bda40,6,
+0x2bda60,6,
+0x2bda80,3,
+0x2bdc00,6,
+0x2bdc20,3,
+0x2bdc40,2,
+0x2bdc60,1,
 0x2c0000,5,
 0x2c0020,4,
-0x2c0034,9,
-0x2c005c,7,
+0x2c0034,17,
 0x2c0080,1,
 0x2c00a0,6,
 0x2c0100,5,
 0x2c0120,4,
-0x2c0134,9,
-0x2c015c,7,
+0x2c0134,17,
 0x2c0180,1,
 0x2c01a0,6,
 0x2c0200,5,
 0x2c0220,4,
-0x2c0234,9,
-0x2c025c,7,
+0x2c0234,17,
 0x2c0280,1,
 0x2c02a0,6,
 0x2c0300,5,
 0x2c0320,4,
-0x2c0334,9,
-0x2c035c,7,
+0x2c0334,17,
 0x2c0380,1,
 0x2c03a0,6,
-0x2c0400,4,
-0x2c0440,4,
+0x2c0400,6,
+0x2c0440,6,
 0x2c0480,3,
 0x2c04c0,3,
-0x2c0500,5,
-0x2c0518,8,
+0x2c0500,6,
+0x2c051c,7,
+0x2c0540,1,
 0x2c0c00,13,
-0x2c0c40,11,
+0x2c0c40,12,
 0x2c0c80,13,
-0x2c0cc0,11,
+0x2c0cc0,12,
 0x2c0d00,6,
 0x2c0d20,6,
-0x2c0e00,10,
+0x2c0d80,14,
+0x2c0dc0,2,
 0x2c0e40,11,
-0x2c0e80,8,
+0x2c0e80,6,
+0x2c0ea0,6,
 0x2c1000,2,
 0x2c1010,5,
 0x2c1040,3,
 0x2c1050,3,
-0x2c1060,7,
-0x2c1080,7,
-0x2c10a0,7,
-0x2c10c0,7,
-0x2c1100,7,
-0x2c1140,7,
-0x2c1180,5,
+0x2c1060,32,
+0x2c1100,8,
+0x2c1140,8,
+0x2c1180,3,
+0x2c1190,2,
 0x2c119c,9,
 0x2c1218,9,
 0x2c1240,3,
 0x2c12e4,1,
 0x2c1400,8,
 0x2c1424,2,
-0x2c1500,3,
+0x2c1500,5,
 0x2c1520,4,
-0x2c1540,3,
+0x2c1540,5,
 0x2c1560,4,
 0x2c1800,24,
-0x2c1864,2,
-0x2c1880,6,
-0x2c1900,12,
-0x2c1940,6,
-0x2c1960,6,
+0x2c1864,5,
+0x2c1880,8,
+0x2c1900,13,
 0x2c1980,4,
+0x2c19a0,6,
 0x2c19c0,6,
 0x2c19dc,1,
 0x2c1a00,6,
 0x2c1a1c,1,
 0x2c1a40,1,
+0x2c1a60,1,
 0x2c1a68,23,
+0x2c1ac8,6,
 0x2c1b00,17,
+0x2c1b48,6,
 0x2c1b80,12,
+0x2c1c00,6,
+0x2c1c20,6,
+0x2c1c40,6,
+0x2c1c60,3,
+0x2c1d00,6,
+0x2c1d20,6,
+0x2c1d40,3,
+0x2c1d80,6,
+0x2c1da0,6,
+0x2c1dc0,3,
 0x2c2000,5,
 0x2c2020,4,
-0x2c2034,9,
-0x2c205c,7,
+0x2c2034,17,
 0x2c2080,1,
 0x2c20a0,6,
 0x2c2100,5,
 0x2c2120,4,
-0x2c2134,9,
-0x2c215c,7,
+0x2c2134,17,
 0x2c2180,1,
 0x2c21a0,6,
 0x2c2200,5,
 0x2c2220,4,
-0x2c2234,9,
-0x2c225c,7,
+0x2c2234,17,
 0x2c2280,1,
 0x2c22a0,6,
 0x2c2300,5,
 0x2c2320,4,
-0x2c2334,9,
-0x2c235c,7,
+0x2c2334,17,
 0x2c2380,1,
 0x2c23a0,6,
-0x2c2400,4,
-0x2c2440,4,
+0x2c2400,6,
+0x2c2440,6,
 0x2c2480,3,
 0x2c24c0,3,
-0x2c2500,5,
-0x2c2518,8,
+0x2c2500,6,
+0x2c251c,7,
+0x2c2540,1,
 0x2c2c00,13,
-0x2c2c40,11,
+0x2c2c40,12,
 0x2c2c80,13,
-0x2c2cc0,11,
+0x2c2cc0,12,
 0x2c2d00,6,
 0x2c2d20,6,
-0x2c2e00,10,
+0x2c2d80,14,
+0x2c2dc0,2,
 0x2c2e40,11,
-0x2c2e80,8,
+0x2c2e80,6,
+0x2c2ea0,6,
 0x2c3000,2,
 0x2c3010,5,
 0x2c3040,3,
 0x2c3050,3,
-0x2c3060,7,
-0x2c3080,7,
-0x2c30a0,7,
-0x2c30c0,7,
-0x2c3100,7,
-0x2c3140,7,
-0x2c3180,5,
+0x2c3060,32,
+0x2c3100,8,
+0x2c3140,8,
+0x2c3180,3,
+0x2c3190,2,
 0x2c319c,9,
 0x2c3218,9,
 0x2c3240,3,
 0x2c32e4,1,
 0x2c3400,8,
 0x2c3424,2,
-0x2c3500,3,
+0x2c3500,5,
 0x2c3520,4,
-0x2c3540,3,
+0x2c3540,5,
 0x2c3560,4,
 0x2c3800,24,
-0x2c3864,2,
-0x2c3880,6,
-0x2c3900,12,
-0x2c3940,6,
-0x2c3960,6,
+0x2c3864,5,
+0x2c3880,8,
+0x2c3900,13,
 0x2c3980,4,
+0x2c39a0,6,
 0x2c39c0,6,
 0x2c39dc,1,
 0x2c3a00,6,
 0x2c3a1c,1,
 0x2c3a40,1,
+0x2c3a60,1,
 0x2c3a68,23,
+0x2c3ac8,6,
 0x2c3b00,17,
+0x2c3b48,6,
 0x2c3b80,12,
-0x2c4000,4,
-0x2c4014,6,
-0x2c4030,5,
-0x2c4080,4,
-0x2c4094,6,
-0x2c40b0,5,
-0x2c4100,4,
-0x2c4114,6,
-0x2c4130,5,
-0x2c4180,4,
-0x2c4194,6,
-0x2c41b0,5,
-0x2c4200,3,
-0x2c4210,23,
-0x2c4500,3,
-0x2c4510,12,
-0x2c4580,3,
-0x2c4590,12,
-0x2c4600,3,
-0x2c4610,12,
-0x2c4680,3,
-0x2c4690,12,
-0x2c4700,4,
-0x2c4718,13,
-0x2c4800,25,
-0x2c4880,25,
-0x2c4900,25,
-0x2c4980,25,
-0x2c4a00,17,
-0x2c4a50,3,
-0x2c4a60,3,
-0x2c5000,4,
-0x2c5014,6,
-0x2c5030,5,
-0x2c5080,4,
-0x2c5094,6,
-0x2c50b0,5,
-0x2c5100,4,
-0x2c5114,6,
-0x2c5130,5,
-0x2c5180,4,
-0x2c5194,6,
-0x2c51b0,5,
-0x2c5200,3,
-0x2c5210,23,
-0x2c5500,3,
-0x2c5510,12,
-0x2c5580,3,
-0x2c5590,12,
-0x2c5600,3,
-0x2c5610,12,
-0x2c5680,3,
-0x2c5690,12,
-0x2c5700,4,
-0x2c5718,13,
-0x2c5800,25,
-0x2c5880,25,
-0x2c5900,25,
-0x2c5980,25,
-0x2c5a00,17,
-0x2c5a50,3,
-0x2c5a60,3,
-0x2c6000,13,
-0x2c6040,22,
-0x2c60a0,6,
-0x2c60c0,3,
+0x2c3c00,6,
+0x2c3c20,6,
+0x2c3c40,6,
+0x2c3c60,3,
+0x2c3d00,6,
+0x2c3d20,6,
+0x2c3d40,3,
+0x2c3d80,6,
+0x2c3da0,6,
+0x2c3dc0,3,
+0x2c4000,29,
+0x2c4078,5,
+0x2c4090,2,
+0x2c40a0,10,
+0x2c4100,93,
+0x2c4278,5,
+0x2c4290,2,
+0x2c42a0,10,
+0x2c4300,93,
+0x2c4478,5,
+0x2c4490,2,
+0x2c44a0,10,
+0x2c4500,93,
+0x2c4678,5,
+0x2c4690,2,
+0x2c46a0,10,
+0x2c4700,93,
+0x2c487c,1,
+0x2c4a00,8,
+0x2c4a24,15,
+0x2c4a64,23,
+0x2c4ac4,6,
+0x2c4b00,4,
+0x2c4b20,3,
+0x2c4c00,2,
+0x2c4c40,14,
+0x2c4c80,9,
+0x2c4d00,9,
+0x2c4d2c,1,
+0x2c4d80,6,
+0x2c4e00,2,
+0x2c4e0c,1,
+0x2c4e14,5,
+0x2c4e2c,1,
+0x2c4e34,5,
+0x2c4e4c,1,
+0x2c4e54,5,
+0x2c4e6c,1,
+0x2c4e74,5,
+0x2c4e8c,1,
+0x2c4e94,5,
+0x2c4eac,1,
+0x2c4eb4,3,
+0x2c5000,29,
+0x2c5078,5,
+0x2c5090,2,
+0x2c50a0,10,
+0x2c5100,93,
+0x2c5278,5,
+0x2c5290,2,
+0x2c52a0,10,
+0x2c5300,93,
+0x2c5478,5,
+0x2c5490,2,
+0x2c54a0,10,
+0x2c5500,93,
+0x2c5678,5,
+0x2c5690,2,
+0x2c56a0,10,
+0x2c5700,93,
+0x2c587c,1,
+0x2c5a00,8,
+0x2c5a24,15,
+0x2c5a64,23,
+0x2c5ac4,6,
+0x2c5b00,4,
+0x2c5b20,3,
+0x2c5c00,2,
+0x2c5c40,14,
+0x2c5c80,9,
+0x2c5d00,9,
+0x2c5d2c,1,
+0x2c5d80,6,
+0x2c5e00,2,
+0x2c5e0c,1,
+0x2c5e14,5,
+0x2c5e2c,1,
+0x2c5e34,5,
+0x2c5e4c,1,
+0x2c5e54,5,
+0x2c5e6c,1,
+0x2c5e74,5,
+0x2c5e8c,1,
+0x2c5e94,5,
+0x2c5eac,1,
+0x2c5eb4,3,
+0x2c6000,14,
+0x2c6070,3,
+0x2c6080,6,
 0x2c6100,9,
-0x2c6400,2,
-0x2c640c,6,
-0x2c6440,13,
-0x2c6480,16,
-0x2c6800,1,
-0x2c6808,3,
-0x2c681c,8,
-0x2c6840,3,
-0x2c6850,3,
-0x2c6880,1,
-0x2c6888,3,
-0x2c689c,8,
-0x2c68c0,3,
-0x2c68d0,3,
-0x2c6900,1,
-0x2c6908,3,
-0x2c691c,8,
-0x2c6940,3,
-0x2c6950,3,
-0x2c6980,1,
-0x2c6988,3,
-0x2c699c,8,
-0x2c69c0,3,
-0x2c69d0,3,
-0x2c6a00,1,
-0x2c6a08,3,
-0x2c6a1c,8,
-0x2c6a40,3,
-0x2c6a50,3,
-0x2c6a80,1,
-0x2c6a88,3,
-0x2c6a9c,8,
-0x2c6ac0,3,
-0x2c6ad0,3,
-0x2c6b00,1,
-0x2c6b08,3,
-0x2c6b1c,8,
-0x2c6b40,3,
-0x2c6b50,3,
-0x2c6b80,1,
-0x2c6b88,3,
-0x2c6b9c,8,
-0x2c6bc0,3,
-0x2c6bd0,3,
-0x2c6c00,1,
-0x2c6c08,3,
-0x2c6c1c,8,
-0x2c6c40,3,
-0x2c6c50,3,
-0x2c6c80,2,
-0x2c6c94,13,
+0x2c6204,1,
+0x2c620c,6,
+0x2c6240,13,
+0x2c6280,16,
+0x2c6400,8,
+0x2c6424,15,
+0x2c6464,15,
+0x2c64a4,15,
+0x2c64e4,23,
+0x2c6544,6,
+0x2c6580,10,
+0x2c65ac,1,
+0x2c65b4,5,
+0x2c65cc,1,
+0x2c65d4,5,
+0x2c65ec,1,
+0x2c65f4,13,
+0x2c6680,7,
+0x2c66a0,5,
+0x2c66c0,5,
+0x2c66e0,3,
+0x2c6800,19,
+0x2c6850,10,
+0x2c6880,19,
+0x2c68d0,10,
+0x2c6900,19,
+0x2c6950,10,
+0x2c6980,19,
+0x2c69d0,10,
+0x2c6a00,19,
+0x2c6a50,10,
+0x2c6a80,19,
+0x2c6ad0,10,
+0x2c6b00,19,
+0x2c6b50,10,
+0x2c6b80,19,
+0x2c6bd0,10,
+0x2c6c00,19,
+0x2c6c50,10,
+0x2c6c84,1,
+0x2c6c94,8,
+0x2c6cb8,9,
+0x2c6ce0,4,
 0x2c7000,6,
 0x2c7020,3,
-0x2c7034,1,
 0x2c7040,7,
 0x2c7060,6,
 0x2c7100,5,
 0x2c7138,1,
 0x2c7144,1,
-0x2c7400,1,
-0x2c7418,1,
-0x2c7434,1,
-0x2c752c,5,
-0x2c7590,1,
-0x2c75ac,1,
-0x2c75d8,4,
-0x2c7600,8,
+0x2c7150,2,
 0x2c8000,6,
 0x2c8020,3,
 0x2c8030,9,
-0x2c8080,6,
-0x2c8100,20,
+0x2c8100,6,
+0x2c8120,10,
+0x2c8150,8,
 0x2c8400,1,
-0x2c8418,1,
-0x2c8434,1,
-0x2c852c,4,
-0x2c8590,1,
+0x2c8428,1,
+0x2c8450,1,
+0x2c8478,1,
+0x2c84a0,8,
 0x2c85ac,1,
 0x2c85d8,4,
-0x2c8600,8,
+0x2c8600,6,
+0x2c8620,6,
+0x2c8640,3,
+0x2c8800,6,
+0x2c8820,3,
+0x2c8830,4,
+0x2c8858,2,
+0x2c8864,1,
+0x2c8874,3,
+0x2c8898,2,
+0x2c88a4,1,
+0x2c88b4,3,
 0x2c9000,6,
 0x2c9020,6,
 0x2c9040,3,
 0x2c9080,14,
 0x2c90bc,1,
 0x2c90c4,13,
-0x2c90fc,6,
-0x2c9120,5,
-0x2c9190,10,
-0x2c9200,16,
-0x2c9244,32,
-0x2c9300,26,
+0x2c90fc,5,
+0x2c9120,4,
+0x2c9140,3,
+0x2c9180,3,
+0x2c9190,3,
+0x2c91a0,1,
+0x2c91e0,6,
+0x2c9200,20,
+0x2c925c,30,
+0x2c9300,24,
 0x2c9380,2,
 0x2c93a0,1,
 0x2c93c0,11,
-0x2c9404,4,
-0x2c9418,16,
+0x2c9404,3,
+0x2c9420,11,
 0x2c9460,3,
+0x2c9480,6,
 0x2c9500,6,
+0x2c9520,6,
 0x2c9540,1,
 0x2c9558,2,
 0x2c9600,17,
-0x2c9800,366,
+0x2c9800,410,
 0x2ca000,6,
 0x2ca020,6,
 0x2ca040,3,
 0x2ca080,14,
 0x2ca0bc,1,
 0x2ca0c4,13,
-0x2ca0fc,6,
-0x2ca120,5,
-0x2ca190,10,
-0x2ca200,16,
-0x2ca244,32,
-0x2ca300,26,
+0x2ca0fc,5,
+0x2ca120,4,
+0x2ca140,3,
+0x2ca180,3,
+0x2ca190,3,
+0x2ca1a0,1,
+0x2ca1e0,6,
+0x2ca200,20,
+0x2ca25c,30,
+0x2ca300,24,
 0x2ca380,2,
 0x2ca3a0,1,
 0x2ca3c0,11,
-0x2ca404,4,
-0x2ca418,16,
+0x2ca404,3,
+0x2ca420,11,
 0x2ca460,3,
+0x2ca480,6,
 0x2ca500,6,
+0x2ca520,6,
 0x2ca540,1,
 0x2ca558,2,
 0x2ca600,17,
-0x2ca800,366,
+0x2ca800,410,
 0x2cb000,4,
-0x2cb020,9,
-0x2cb048,6,
-0x2cb064,6,
-0x2cb080,1,
+0x2cb020,25,
+0x2cb088,8,
 0x2cb100,4,
-0x2cb120,9,
-0x2cb148,6,
-0x2cb164,6,
-0x2cb180,1,
-0x2cb200,35,
-0x2cb290,6,
-0x2cb2b4,6,
-0x2cb2d0,5,
-0x2cb2e8,5,
+0x2cb120,25,
+0x2cb188,8,
+0x2cb200,34,
 0x2cb300,37,
-0x2cb400,6,
-0x2cb420,3,
-0x2cb438,4,
-0x2cb454,3,
-0x2cb478,4,
-0x2cb494,3,
+0x2cb400,16,
+0x2cb464,1,
+0x2cb474,3,
+0x2cb500,6,
+0x2cb520,2,
+0x2cb530,9,
+0x2cb570,10,
+0x2cb5a0,2,
+0x2cb5b0,9,
+0x2cb5f0,4,
+0x2cb620,7,
+0x2cb640,16,
+0x2cb700,6,
+0x2cb720,6,
+0x2cb740,6,
+0x2cb760,6,
+0x2cb780,3,
 0x2cb800,5,
 0x2cb818,1,
 0x2cb854,6,
 0x2cb880,2,
 0x2cb8a4,1,
+0x2cb8ac,2,
 0x2cba00,28,
-0x2cba7c,5,
-0x2cbab0,2,
+0x2cba7c,13,
+0x2cbab4,1,
 0x2cbabc,10,
-0x2cbb00,2,
-0x2cbb0c,7,
+0x2cbb04,1,
+0x2cbb0c,5,
+0x2cbb24,1,
 0x2cbb34,9,
 0x2cbb60,6,
-0x2cbb80,8,
+0x2cbb80,22,
+0x2cbbe0,3,
+0x2cbbf0,2,
 0x2cbc00,5,
 0x2cbc18,1,
 0x2cbc54,6,
 0x2cbc80,2,
 0x2cbca4,1,
+0x2cbcac,2,
 0x2cbe00,28,
-0x2cbe7c,5,
-0x2cbeb0,2,
+0x2cbe7c,13,
+0x2cbeb4,1,
 0x2cbebc,10,
-0x2cbf00,2,
-0x2cbf0c,7,
+0x2cbf04,1,
+0x2cbf0c,5,
+0x2cbf24,1,
 0x2cbf34,9,
 0x2cbf60,6,
-0x2cbf80,8,
-0x2cc000,4,
-0x2cc014,10,
-0x2cc040,1,
-0x2cc048,3,
-0x2cc058,1,
-0x2cc060,1,
+0x2cbf80,22,
+0x2cbfe0,3,
+0x2cbff0,2,
+0x2cc008,2,
+0x2cc014,11,
+0x2cc044,1,
+0x2cc04c,3,
+0x2cc05c,1,
+0x2cc064,1,
 0x2cc07c,1,
-0x2cc500,1,
-0x2cc518,2,
+0x2cc500,2,
+0x2cc518,1,
+0x2cc520,3,
 0x2cc540,6,
-0x2cc800,4,
-0x2cc814,10,
-0x2cc840,1,
-0x2cc848,3,
-0x2cc858,1,
-0x2cc860,1,
+0x2cc580,10,
+0x2cc808,2,
+0x2cc814,11,
+0x2cc844,1,
+0x2cc84c,3,
+0x2cc85c,1,
+0x2cc864,1,
 0x2cc87c,1,
-0x2ccd00,1,
-0x2ccd18,2,
+0x2ccd00,2,
+0x2ccd18,1,
+0x2ccd20,3,
 0x2ccd40,6,
+0x2ccd80,10,
 0x2cd800,2,
-0x2cd818,2,
-0x2cd834,2,
-0x2cd92c,6,
-0x2cd990,2,
+0x2cd828,2,
+0x2cd850,2,
+0x2cd878,2,
+0x2cd8a0,6,
 0x2cd9ac,1,
 0x2cd9d8,4,
-0x2cda00,16,
-0x2cdc00,3,
-0x2cdc20,2,
-0x2cdc40,1,
+0x2cda00,6,
+0x2cda20,6,
+0x2cda40,6,
+0x2cda60,6,
+0x2cda80,3,
+0x2cdc00,6,
+0x2cdc20,3,
+0x2cdc40,2,
+0x2cdc60,1,
 0x2d0000,5,
 0x2d0020,4,
-0x2d0034,9,
-0x2d005c,7,
+0x2d0034,17,
 0x2d0080,1,
 0x2d00a0,6,
 0x2d0100,5,
 0x2d0120,4,
-0x2d0134,9,
-0x2d015c,7,
+0x2d0134,17,
 0x2d0180,1,
 0x2d01a0,6,
 0x2d0200,5,
 0x2d0220,4,
-0x2d0234,9,
-0x2d025c,7,
+0x2d0234,17,
 0x2d0280,1,
 0x2d02a0,6,
 0x2d0300,5,
 0x2d0320,4,
-0x2d0334,9,
-0x2d035c,7,
+0x2d0334,17,
 0x2d0380,1,
 0x2d03a0,6,
-0x2d0400,4,
-0x2d0440,4,
+0x2d0400,6,
+0x2d0440,6,
 0x2d0480,3,
 0x2d04c0,3,
-0x2d0500,5,
-0x2d0518,8,
+0x2d0500,6,
+0x2d051c,7,
+0x2d0540,1,
 0x2d0c00,13,
-0x2d0c40,11,
+0x2d0c40,12,
 0x2d0c80,13,
-0x2d0cc0,11,
+0x2d0cc0,12,
 0x2d0d00,6,
 0x2d0d20,6,
-0x2d0e00,10,
+0x2d0d80,14,
+0x2d0dc0,2,
 0x2d0e40,11,
-0x2d0e80,8,
+0x2d0e80,6,
+0x2d0ea0,6,
 0x2d1000,2,
 0x2d1010,5,
 0x2d1040,3,
 0x2d1050,3,
-0x2d1060,7,
-0x2d1080,7,
-0x2d10a0,7,
-0x2d10c0,7,
-0x2d1100,7,
-0x2d1140,7,
-0x2d1180,5,
+0x2d1060,32,
+0x2d1100,8,
+0x2d1140,8,
+0x2d1180,3,
+0x2d1190,2,
 0x2d119c,9,
 0x2d1218,9,
 0x2d1240,3,
 0x2d12e4,1,
 0x2d1400,8,
 0x2d1424,2,
-0x2d1500,3,
+0x2d1500,5,
 0x2d1520,4,
-0x2d1540,3,
+0x2d1540,5,
 0x2d1560,4,
 0x2d1800,24,
-0x2d1864,2,
-0x2d1880,6,
-0x2d1900,12,
-0x2d1940,6,
-0x2d1960,6,
+0x2d1864,5,
+0x2d1880,8,
+0x2d1900,13,
 0x2d1980,4,
+0x2d19a0,6,
 0x2d19c0,6,
 0x2d19dc,1,
 0x2d1a00,6,
 0x2d1a1c,1,
 0x2d1a40,1,
+0x2d1a60,1,
 0x2d1a68,23,
+0x2d1ac8,6,
 0x2d1b00,17,
+0x2d1b48,6,
 0x2d1b80,12,
+0x2d1c00,6,
+0x2d1c20,6,
+0x2d1c40,6,
+0x2d1c60,3,
+0x2d1d00,6,
+0x2d1d20,6,
+0x2d1d40,3,
+0x2d1d80,6,
+0x2d1da0,6,
+0x2d1dc0,3,
 0x2d2000,5,
 0x2d2020,4,
-0x2d2034,9,
-0x2d205c,7,
+0x2d2034,17,
 0x2d2080,1,
 0x2d20a0,6,
 0x2d2100,5,
 0x2d2120,4,
-0x2d2134,9,
-0x2d215c,7,
+0x2d2134,17,
 0x2d2180,1,
 0x2d21a0,6,
 0x2d2200,5,
 0x2d2220,4,
-0x2d2234,9,
-0x2d225c,7,
+0x2d2234,17,
 0x2d2280,1,
 0x2d22a0,6,
 0x2d2300,5,
 0x2d2320,4,
-0x2d2334,9,
-0x2d235c,7,
+0x2d2334,17,
 0x2d2380,1,
 0x2d23a0,6,
-0x2d2400,4,
-0x2d2440,4,
+0x2d2400,6,
+0x2d2440,6,
 0x2d2480,3,
 0x2d24c0,3,
-0x2d2500,5,
-0x2d2518,8,
+0x2d2500,6,
+0x2d251c,7,
+0x2d2540,1,
 0x2d2c00,13,
-0x2d2c40,11,
+0x2d2c40,12,
 0x2d2c80,13,
-0x2d2cc0,11,
+0x2d2cc0,12,
 0x2d2d00,6,
 0x2d2d20,6,
-0x2d2e00,10,
+0x2d2d80,14,
+0x2d2dc0,2,
 0x2d2e40,11,
-0x2d2e80,8,
+0x2d2e80,6,
+0x2d2ea0,6,
 0x2d3000,2,
 0x2d3010,5,
 0x2d3040,3,
 0x2d3050,3,
-0x2d3060,7,
-0x2d3080,7,
-0x2d30a0,7,
-0x2d30c0,7,
-0x2d3100,7,
-0x2d3140,7,
-0x2d3180,5,
+0x2d3060,32,
+0x2d3100,8,
+0x2d3140,8,
+0x2d3180,3,
+0x2d3190,2,
 0x2d319c,9,
 0x2d3218,9,
 0x2d3240,3,
 0x2d32e4,1,
 0x2d3400,8,
 0x2d3424,2,
-0x2d3500,3,
+0x2d3500,5,
 0x2d3520,4,
-0x2d3540,3,
+0x2d3540,5,
 0x2d3560,4,
 0x2d3800,24,
-0x2d3864,2,
-0x2d3880,6,
-0x2d3900,12,
-0x2d3940,6,
-0x2d3960,6,
+0x2d3864,5,
+0x2d3880,8,
+0x2d3900,13,
 0x2d3980,4,
+0x2d39a0,6,
 0x2d39c0,6,
 0x2d39dc,1,
 0x2d3a00,6,
 0x2d3a1c,1,
 0x2d3a40,1,
+0x2d3a60,1,
 0x2d3a68,23,
+0x2d3ac8,6,
 0x2d3b00,17,
+0x2d3b48,6,
 0x2d3b80,12,
-0x2d4000,4,
-0x2d4014,6,
-0x2d4030,5,
-0x2d4080,4,
-0x2d4094,6,
-0x2d40b0,5,
-0x2d4100,4,
-0x2d4114,6,
-0x2d4130,5,
-0x2d4180,4,
-0x2d4194,6,
-0x2d41b0,5,
-0x2d4200,3,
-0x2d4210,23,
-0x2d4500,3,
-0x2d4510,12,
-0x2d4580,3,
-0x2d4590,12,
-0x2d4600,3,
-0x2d4610,12,
-0x2d4680,3,
-0x2d4690,12,
-0x2d4700,4,
-0x2d4718,13,
-0x2d4800,25,
-0x2d4880,25,
-0x2d4900,25,
-0x2d4980,25,
-0x2d4a00,17,
-0x2d4a50,3,
-0x2d4a60,3,
-0x2d5000,4,
-0x2d5014,6,
-0x2d5030,5,
-0x2d5080,4,
-0x2d5094,6,
-0x2d50b0,5,
-0x2d5100,4,
-0x2d5114,6,
-0x2d5130,5,
-0x2d5180,4,
-0x2d5194,6,
-0x2d51b0,5,
-0x2d5200,3,
-0x2d5210,23,
-0x2d5500,3,
-0x2d5510,12,
-0x2d5580,3,
-0x2d5590,12,
-0x2d5600,3,
-0x2d5610,12,
-0x2d5680,3,
-0x2d5690,12,
-0x2d5700,4,
-0x2d5718,13,
-0x2d5800,25,
-0x2d5880,25,
-0x2d5900,25,
-0x2d5980,25,
-0x2d5a00,17,
-0x2d5a50,3,
-0x2d5a60,3,
-0x2d6000,13,
-0x2d6040,22,
-0x2d60a0,6,
-0x2d60c0,3,
+0x2d3c00,6,
+0x2d3c20,6,
+0x2d3c40,6,
+0x2d3c60,3,
+0x2d3d00,6,
+0x2d3d20,6,
+0x2d3d40,3,
+0x2d3d80,6,
+0x2d3da0,6,
+0x2d3dc0,3,
+0x2d4000,29,
+0x2d4078,5,
+0x2d4090,2,
+0x2d40a0,10,
+0x2d4100,93,
+0x2d4278,5,
+0x2d4290,2,
+0x2d42a0,10,
+0x2d4300,93,
+0x2d4478,5,
+0x2d4490,2,
+0x2d44a0,10,
+0x2d4500,93,
+0x2d4678,5,
+0x2d4690,2,
+0x2d46a0,10,
+0x2d4700,93,
+0x2d487c,1,
+0x2d4a00,8,
+0x2d4a24,15,
+0x2d4a64,23,
+0x2d4ac4,6,
+0x2d4b00,4,
+0x2d4b20,3,
+0x2d4c00,2,
+0x2d4c40,14,
+0x2d4c80,9,
+0x2d4d00,9,
+0x2d4d2c,1,
+0x2d4d80,6,
+0x2d4e00,2,
+0x2d4e0c,1,
+0x2d4e14,5,
+0x2d4e2c,1,
+0x2d4e34,5,
+0x2d4e4c,1,
+0x2d4e54,5,
+0x2d4e6c,1,
+0x2d4e74,5,
+0x2d4e8c,1,
+0x2d4e94,5,
+0x2d4eac,1,
+0x2d4eb4,3,
+0x2d5000,29,
+0x2d5078,5,
+0x2d5090,2,
+0x2d50a0,10,
+0x2d5100,93,
+0x2d5278,5,
+0x2d5290,2,
+0x2d52a0,10,
+0x2d5300,93,
+0x2d5478,5,
+0x2d5490,2,
+0x2d54a0,10,
+0x2d5500,93,
+0x2d5678,5,
+0x2d5690,2,
+0x2d56a0,10,
+0x2d5700,93,
+0x2d587c,1,
+0x2d5a00,8,
+0x2d5a24,15,
+0x2d5a64,23,
+0x2d5ac4,6,
+0x2d5b00,4,
+0x2d5b20,3,
+0x2d5c00,2,
+0x2d5c40,14,
+0x2d5c80,9,
+0x2d5d00,9,
+0x2d5d2c,1,
+0x2d5d80,6,
+0x2d5e00,2,
+0x2d5e0c,1,
+0x2d5e14,5,
+0x2d5e2c,1,
+0x2d5e34,5,
+0x2d5e4c,1,
+0x2d5e54,5,
+0x2d5e6c,1,
+0x2d5e74,5,
+0x2d5e8c,1,
+0x2d5e94,5,
+0x2d5eac,1,
+0x2d5eb4,3,
+0x2d6000,14,
+0x2d6070,3,
+0x2d6080,6,
 0x2d6100,9,
-0x2d6400,2,
-0x2d640c,6,
-0x2d6440,13,
-0x2d6480,16,
-0x2d6800,1,
-0x2d6808,3,
-0x2d681c,8,
-0x2d6840,3,
-0x2d6850,3,
-0x2d6880,1,
-0x2d6888,3,
-0x2d689c,8,
-0x2d68c0,3,
-0x2d68d0,3,
-0x2d6900,1,
-0x2d6908,3,
-0x2d691c,8,
-0x2d6940,3,
-0x2d6950,3,
-0x2d6980,1,
-0x2d6988,3,
-0x2d699c,8,
-0x2d69c0,3,
-0x2d69d0,3,
-0x2d6a00,1,
-0x2d6a08,3,
-0x2d6a1c,8,
-0x2d6a40,3,
-0x2d6a50,3,
-0x2d6a80,1,
-0x2d6a88,3,
-0x2d6a9c,8,
-0x2d6ac0,3,
-0x2d6ad0,3,
-0x2d6b00,1,
-0x2d6b08,3,
-0x2d6b1c,8,
-0x2d6b40,3,
-0x2d6b50,3,
-0x2d6b80,1,
-0x2d6b88,3,
-0x2d6b9c,8,
-0x2d6bc0,3,
-0x2d6bd0,3,
-0x2d6c00,1,
-0x2d6c08,3,
-0x2d6c1c,8,
-0x2d6c40,3,
-0x2d6c50,3,
-0x2d6c80,2,
-0x2d6c94,13,
+0x2d6204,1,
+0x2d620c,6,
+0x2d6240,13,
+0x2d6280,16,
+0x2d6400,8,
+0x2d6424,15,
+0x2d6464,15,
+0x2d64a4,15,
+0x2d64e4,23,
+0x2d6544,6,
+0x2d6580,10,
+0x2d65ac,1,
+0x2d65b4,5,
+0x2d65cc,1,
+0x2d65d4,5,
+0x2d65ec,1,
+0x2d65f4,13,
+0x2d6680,7,
+0x2d66a0,5,
+0x2d66c0,5,
+0x2d66e0,3,
+0x2d6800,19,
+0x2d6850,10,
+0x2d6880,19,
+0x2d68d0,10,
+0x2d6900,19,
+0x2d6950,10,
+0x2d6980,19,
+0x2d69d0,10,
+0x2d6a00,19,
+0x2d6a50,10,
+0x2d6a80,19,
+0x2d6ad0,10,
+0x2d6b00,19,
+0x2d6b50,10,
+0x2d6b80,19,
+0x2d6bd0,10,
+0x2d6c00,19,
+0x2d6c50,10,
+0x2d6c84,1,
+0x2d6c94,8,
+0x2d6cb8,9,
+0x2d6ce0,4,
 0x2d7000,6,
 0x2d7020,3,
-0x2d7034,1,
 0x2d7040,7,
 0x2d7060,6,
 0x2d7100,5,
 0x2d7138,1,
 0x2d7144,1,
-0x2d7400,1,
-0x2d7418,1,
-0x2d7434,1,
-0x2d752c,5,
-0x2d7590,1,
-0x2d75ac,1,
-0x2d75d8,4,
-0x2d7600,8,
+0x2d7150,2,
 0x2d8000,6,
 0x2d8020,3,
 0x2d8030,9,
-0x2d8080,6,
-0x2d8100,20,
+0x2d8100,6,
+0x2d8120,10,
+0x2d8150,8,
 0x2d8400,1,
-0x2d8418,1,
-0x2d8434,1,
-0x2d852c,4,
-0x2d8590,1,
+0x2d8428,1,
+0x2d8450,1,
+0x2d8478,1,
+0x2d84a0,8,
 0x2d85ac,1,
 0x2d85d8,4,
-0x2d8600,8,
+0x2d8600,6,
+0x2d8620,6,
+0x2d8640,3,
+0x2d8800,6,
+0x2d8820,3,
+0x2d8830,4,
+0x2d8858,2,
+0x2d8864,1,
+0x2d8874,3,
+0x2d8898,2,
+0x2d88a4,1,
+0x2d88b4,3,
 0x2d9000,6,
 0x2d9020,6,
 0x2d9040,3,
 0x2d9080,14,
 0x2d90bc,1,
 0x2d90c4,13,
-0x2d90fc,6,
-0x2d9120,5,
-0x2d9190,10,
-0x2d9200,16,
-0x2d9244,32,
-0x2d9300,26,
+0x2d90fc,5,
+0x2d9120,4,
+0x2d9140,3,
+0x2d9180,3,
+0x2d9190,3,
+0x2d91a0,1,
+0x2d91e0,6,
+0x2d9200,20,
+0x2d925c,30,
+0x2d9300,24,
 0x2d9380,2,
 0x2d93a0,1,
 0x2d93c0,11,
-0x2d9404,4,
-0x2d9418,16,
+0x2d9404,3,
+0x2d9420,11,
 0x2d9460,3,
+0x2d9480,6,
 0x2d9500,6,
+0x2d9520,6,
 0x2d9540,1,
 0x2d9558,2,
 0x2d9600,17,
-0x2d9800,366,
+0x2d9800,410,
 0x2da000,6,
 0x2da020,6,
 0x2da040,3,
 0x2da080,14,
 0x2da0bc,1,
 0x2da0c4,13,
-0x2da0fc,6,
-0x2da120,5,
-0x2da190,10,
-0x2da200,16,
-0x2da244,32,
-0x2da300,26,
+0x2da0fc,5,
+0x2da120,4,
+0x2da140,3,
+0x2da180,3,
+0x2da190,3,
+0x2da1a0,1,
+0x2da1e0,6,
+0x2da200,20,
+0x2da25c,30,
+0x2da300,24,
 0x2da380,2,
 0x2da3a0,1,
 0x2da3c0,11,
-0x2da404,4,
-0x2da418,16,
+0x2da404,3,
+0x2da420,11,
 0x2da460,3,
+0x2da480,6,
 0x2da500,6,
+0x2da520,6,
 0x2da540,1,
 0x2da558,2,
 0x2da600,17,
-0x2da800,366,
+0x2da800,410,
 0x2db000,4,
-0x2db020,9,
-0x2db048,6,
-0x2db064,6,
-0x2db080,1,
+0x2db020,25,
+0x2db088,8,
 0x2db100,4,
-0x2db120,9,
-0x2db148,6,
-0x2db164,6,
-0x2db180,1,
-0x2db200,35,
-0x2db290,6,
-0x2db2b4,6,
-0x2db2d0,5,
-0x2db2e8,5,
+0x2db120,25,
+0x2db188,8,
+0x2db200,34,
 0x2db300,37,
-0x2db400,6,
-0x2db420,3,
-0x2db438,4,
-0x2db454,3,
-0x2db478,4,
-0x2db494,3,
+0x2db400,16,
+0x2db464,1,
+0x2db474,3,
+0x2db500,6,
+0x2db520,2,
+0x2db530,9,
+0x2db570,10,
+0x2db5a0,2,
+0x2db5b0,9,
+0x2db5f0,4,
+0x2db620,7,
+0x2db640,16,
+0x2db700,6,
+0x2db720,6,
+0x2db740,6,
+0x2db760,6,
+0x2db780,3,
 0x2db800,5,
 0x2db818,1,
 0x2db854,6,
 0x2db880,2,
 0x2db8a4,1,
+0x2db8ac,2,
 0x2dba00,28,
-0x2dba7c,5,
-0x2dbab0,2,
+0x2dba7c,13,
+0x2dbab4,1,
 0x2dbabc,10,
-0x2dbb00,2,
-0x2dbb0c,7,
+0x2dbb04,1,
+0x2dbb0c,5,
+0x2dbb24,1,
 0x2dbb34,9,
 0x2dbb60,6,
-0x2dbb80,8,
+0x2dbb80,22,
+0x2dbbe0,3,
+0x2dbbf0,2,
 0x2dbc00,5,
 0x2dbc18,1,
 0x2dbc54,6,
 0x2dbc80,2,
 0x2dbca4,1,
+0x2dbcac,2,
 0x2dbe00,28,
-0x2dbe7c,5,
-0x2dbeb0,2,
+0x2dbe7c,13,
+0x2dbeb4,1,
 0x2dbebc,10,
-0x2dbf00,2,
-0x2dbf0c,7,
+0x2dbf04,1,
+0x2dbf0c,5,
+0x2dbf24,1,
 0x2dbf34,9,
 0x2dbf60,6,
-0x2dbf80,8,
-0x2dc000,4,
-0x2dc014,10,
-0x2dc040,1,
-0x2dc048,3,
-0x2dc058,1,
-0x2dc060,1,
+0x2dbf80,22,
+0x2dbfe0,3,
+0x2dbff0,2,
+0x2dc008,2,
+0x2dc014,11,
+0x2dc044,1,
+0x2dc04c,3,
+0x2dc05c,1,
+0x2dc064,1,
 0x2dc07c,1,
-0x2dc500,1,
-0x2dc518,2,
+0x2dc500,2,
+0x2dc518,1,
+0x2dc520,3,
 0x2dc540,6,
-0x2dc800,4,
-0x2dc814,10,
-0x2dc840,1,
-0x2dc848,3,
-0x2dc858,1,
-0x2dc860,1,
+0x2dc580,10,
+0x2dc808,2,
+0x2dc814,11,
+0x2dc844,1,
+0x2dc84c,3,
+0x2dc85c,1,
+0x2dc864,1,
 0x2dc87c,1,
-0x2dcd00,1,
-0x2dcd18,2,
+0x2dcd00,2,
+0x2dcd18,1,
+0x2dcd20,3,
 0x2dcd40,6,
+0x2dcd80,10,
 0x2dd800,2,
-0x2dd818,2,
-0x2dd834,2,
-0x2dd92c,6,
-0x2dd990,2,
+0x2dd828,2,
+0x2dd850,2,
+0x2dd878,2,
+0x2dd8a0,6,
 0x2dd9ac,1,
 0x2dd9d8,4,
-0x2dda00,16,
-0x2ddc00,3,
-0x2ddc20,2,
-0x2ddc40,1,
+0x2dda00,6,
+0x2dda20,6,
+0x2dda40,6,
+0x2dda60,6,
+0x2dda80,3,
+0x2ddc00,6,
+0x2ddc20,3,
+0x2ddc40,2,
+0x2ddc60,1,
 0x2e0000,5,
 0x2e0020,4,
-0x2e0034,9,
-0x2e005c,7,
+0x2e0034,17,
 0x2e0080,1,
 0x2e00a0,6,
 0x2e0100,5,
 0x2e0120,4,
-0x2e0134,9,
-0x2e015c,7,
+0x2e0134,17,
 0x2e0180,1,
 0x2e01a0,6,
 0x2e0200,5,
 0x2e0220,4,
-0x2e0234,9,
-0x2e025c,7,
+0x2e0234,17,
 0x2e0280,1,
 0x2e02a0,6,
 0x2e0300,5,
 0x2e0320,4,
-0x2e0334,9,
-0x2e035c,7,
+0x2e0334,17,
 0x2e0380,1,
 0x2e03a0,6,
-0x2e0400,4,
-0x2e0440,4,
+0x2e0400,6,
+0x2e0440,6,
 0x2e0480,3,
 0x2e04c0,3,
-0x2e0500,5,
-0x2e0518,8,
+0x2e0500,6,
+0x2e051c,7,
+0x2e0540,1,
 0x2e0c00,13,
-0x2e0c40,11,
+0x2e0c40,12,
 0x2e0c80,13,
-0x2e0cc0,11,
+0x2e0cc0,12,
 0x2e0d00,6,
 0x2e0d20,6,
-0x2e0e00,10,
+0x2e0d80,14,
+0x2e0dc0,2,
 0x2e0e40,11,
-0x2e0e80,8,
+0x2e0e80,6,
+0x2e0ea0,6,
 0x2e1000,2,
 0x2e1010,5,
 0x2e1040,3,
 0x2e1050,3,
-0x2e1060,7,
-0x2e1080,7,
-0x2e10a0,7,
-0x2e10c0,7,
-0x2e1100,7,
-0x2e1140,7,
-0x2e1180,5,
+0x2e1060,32,
+0x2e1100,8,
+0x2e1140,8,
+0x2e1180,3,
+0x2e1190,2,
 0x2e119c,9,
 0x2e1218,9,
 0x2e1240,3,
 0x2e12e4,1,
 0x2e1400,8,
 0x2e1424,2,
-0x2e1500,3,
+0x2e1500,5,
 0x2e1520,4,
-0x2e1540,3,
+0x2e1540,5,
 0x2e1560,4,
 0x2e1800,24,
-0x2e1864,2,
-0x2e1880,6,
-0x2e1900,12,
-0x2e1940,6,
-0x2e1960,6,
+0x2e1864,5,
+0x2e1880,8,
+0x2e1900,13,
 0x2e1980,4,
+0x2e19a0,6,
 0x2e19c0,6,
 0x2e19dc,1,
 0x2e1a00,6,
 0x2e1a1c,1,
 0x2e1a40,1,
+0x2e1a60,1,
 0x2e1a68,23,
+0x2e1ac8,6,
 0x2e1b00,17,
+0x2e1b48,6,
 0x2e1b80,12,
+0x2e1c00,6,
+0x2e1c20,6,
+0x2e1c40,6,
+0x2e1c60,3,
+0x2e1d00,6,
+0x2e1d20,6,
+0x2e1d40,3,
+0x2e1d80,6,
+0x2e1da0,6,
+0x2e1dc0,3,
 0x2e2000,5,
 0x2e2020,4,
-0x2e2034,9,
-0x2e205c,7,
+0x2e2034,17,
 0x2e2080,1,
 0x2e20a0,6,
 0x2e2100,5,
 0x2e2120,4,
-0x2e2134,9,
-0x2e215c,7,
+0x2e2134,17,
 0x2e2180,1,
 0x2e21a0,6,
 0x2e2200,5,
 0x2e2220,4,
-0x2e2234,9,
-0x2e225c,7,
+0x2e2234,17,
 0x2e2280,1,
 0x2e22a0,6,
 0x2e2300,5,
 0x2e2320,4,
-0x2e2334,9,
-0x2e235c,7,
+0x2e2334,17,
 0x2e2380,1,
 0x2e23a0,6,
-0x2e2400,4,
-0x2e2440,4,
+0x2e2400,6,
+0x2e2440,6,
 0x2e2480,3,
 0x2e24c0,3,
-0x2e2500,5,
-0x2e2518,8,
+0x2e2500,6,
+0x2e251c,7,
+0x2e2540,1,
 0x2e2c00,13,
-0x2e2c40,11,
+0x2e2c40,12,
 0x2e2c80,13,
-0x2e2cc0,11,
+0x2e2cc0,12,
 0x2e2d00,6,
 0x2e2d20,6,
-0x2e2e00,10,
+0x2e2d80,14,
+0x2e2dc0,2,
 0x2e2e40,11,
-0x2e2e80,8,
+0x2e2e80,6,
+0x2e2ea0,6,
 0x2e3000,2,
 0x2e3010,5,
 0x2e3040,3,
 0x2e3050,3,
-0x2e3060,7,
-0x2e3080,7,
-0x2e30a0,7,
-0x2e30c0,7,
-0x2e3100,7,
-0x2e3140,7,
-0x2e3180,5,
+0x2e3060,32,
+0x2e3100,8,
+0x2e3140,8,
+0x2e3180,3,
+0x2e3190,2,
 0x2e319c,9,
 0x2e3218,9,
 0x2e3240,3,
 0x2e32e4,1,
 0x2e3400,8,
 0x2e3424,2,
-0x2e3500,3,
+0x2e3500,5,
 0x2e3520,4,
-0x2e3540,3,
+0x2e3540,5,
 0x2e3560,4,
 0x2e3800,24,
-0x2e3864,2,
-0x2e3880,6,
-0x2e3900,12,
-0x2e3940,6,
-0x2e3960,6,
+0x2e3864,5,
+0x2e3880,8,
+0x2e3900,13,
 0x2e3980,4,
+0x2e39a0,6,
 0x2e39c0,6,
 0x2e39dc,1,
 0x2e3a00,6,
 0x2e3a1c,1,
 0x2e3a40,1,
+0x2e3a60,1,
 0x2e3a68,23,
+0x2e3ac8,6,
 0x2e3b00,17,
+0x2e3b48,6,
 0x2e3b80,12,
-0x2e4000,4,
-0x2e4014,6,
-0x2e4030,5,
-0x2e4080,4,
-0x2e4094,6,
-0x2e40b0,5,
-0x2e4100,4,
-0x2e4114,6,
-0x2e4130,5,
-0x2e4180,4,
-0x2e4194,6,
-0x2e41b0,5,
-0x2e4200,3,
-0x2e4210,23,
-0x2e4500,3,
-0x2e4510,12,
-0x2e4580,3,
-0x2e4590,12,
-0x2e4600,3,
-0x2e4610,12,
-0x2e4680,3,
-0x2e4690,12,
-0x2e4700,4,
-0x2e4718,13,
-0x2e4800,25,
-0x2e4880,25,
-0x2e4900,25,
-0x2e4980,25,
-0x2e4a00,17,
-0x2e4a50,3,
-0x2e4a60,3,
-0x2e5000,4,
-0x2e5014,6,
-0x2e5030,5,
-0x2e5080,4,
-0x2e5094,6,
-0x2e50b0,5,
-0x2e5100,4,
-0x2e5114,6,
-0x2e5130,5,
-0x2e5180,4,
-0x2e5194,6,
-0x2e51b0,5,
-0x2e5200,3,
-0x2e5210,23,
-0x2e5500,3,
-0x2e5510,12,
-0x2e5580,3,
-0x2e5590,12,
-0x2e5600,3,
-0x2e5610,12,
-0x2e5680,3,
-0x2e5690,12,
-0x2e5700,4,
-0x2e5718,13,
-0x2e5800,25,
-0x2e5880,25,
-0x2e5900,25,
-0x2e5980,25,
-0x2e5a00,17,
-0x2e5a50,3,
-0x2e5a60,3,
-0x2e6000,13,
-0x2e6040,22,
-0x2e60a0,6,
-0x2e60c0,3,
+0x2e3c00,6,
+0x2e3c20,6,
+0x2e3c40,6,
+0x2e3c60,3,
+0x2e3d00,6,
+0x2e3d20,6,
+0x2e3d40,3,
+0x2e3d80,6,
+0x2e3da0,6,
+0x2e3dc0,3,
+0x2e4000,29,
+0x2e4078,5,
+0x2e4090,2,
+0x2e40a0,10,
+0x2e4100,93,
+0x2e4278,5,
+0x2e4290,2,
+0x2e42a0,10,
+0x2e4300,93,
+0x2e4478,5,
+0x2e4490,2,
+0x2e44a0,10,
+0x2e4500,93,
+0x2e4678,5,
+0x2e4690,2,
+0x2e46a0,10,
+0x2e4700,93,
+0x2e487c,1,
+0x2e4a00,8,
+0x2e4a24,15,
+0x2e4a64,23,
+0x2e4ac4,6,
+0x2e4b00,4,
+0x2e4b20,3,
+0x2e4c00,2,
+0x2e4c40,14,
+0x2e4c80,9,
+0x2e4d00,9,
+0x2e4d2c,1,
+0x2e4d80,6,
+0x2e4e00,2,
+0x2e4e0c,1,
+0x2e4e14,5,
+0x2e4e2c,1,
+0x2e4e34,5,
+0x2e4e4c,1,
+0x2e4e54,5,
+0x2e4e6c,1,
+0x2e4e74,5,
+0x2e4e8c,1,
+0x2e4e94,5,
+0x2e4eac,1,
+0x2e4eb4,3,
+0x2e5000,29,
+0x2e5078,5,
+0x2e5090,2,
+0x2e50a0,10,
+0x2e5100,93,
+0x2e5278,5,
+0x2e5290,2,
+0x2e52a0,10,
+0x2e5300,93,
+0x2e5478,5,
+0x2e5490,2,
+0x2e54a0,10,
+0x2e5500,93,
+0x2e5678,5,
+0x2e5690,2,
+0x2e56a0,10,
+0x2e5700,93,
+0x2e587c,1,
+0x2e5a00,8,
+0x2e5a24,15,
+0x2e5a64,23,
+0x2e5ac4,6,
+0x2e5b00,4,
+0x2e5b20,3,
+0x2e5c00,2,
+0x2e5c40,14,
+0x2e5c80,9,
+0x2e5d00,9,
+0x2e5d2c,1,
+0x2e5d80,6,
+0x2e5e00,2,
+0x2e5e0c,1,
+0x2e5e14,5,
+0x2e5e2c,1,
+0x2e5e34,5,
+0x2e5e4c,1,
+0x2e5e54,5,
+0x2e5e6c,1,
+0x2e5e74,5,
+0x2e5e8c,1,
+0x2e5e94,5,
+0x2e5eac,1,
+0x2e5eb4,3,
+0x2e6000,14,
+0x2e6070,3,
+0x2e6080,6,
 0x2e6100,9,
-0x2e6400,2,
-0x2e640c,6,
-0x2e6440,13,
-0x2e6480,16,
-0x2e6800,1,
-0x2e6808,3,
-0x2e681c,8,
-0x2e6840,3,
-0x2e6850,3,
-0x2e6880,1,
-0x2e6888,3,
-0x2e689c,8,
-0x2e68c0,3,
-0x2e68d0,3,
-0x2e6900,1,
-0x2e6908,3,
-0x2e691c,8,
-0x2e6940,3,
-0x2e6950,3,
-0x2e6980,1,
-0x2e6988,3,
-0x2e699c,8,
-0x2e69c0,3,
-0x2e69d0,3,
-0x2e6a00,1,
-0x2e6a08,3,
-0x2e6a1c,8,
-0x2e6a40,3,
-0x2e6a50,3,
-0x2e6a80,1,
-0x2e6a88,3,
-0x2e6a9c,8,
-0x2e6ac0,3,
-0x2e6ad0,3,
-0x2e6b00,1,
-0x2e6b08,3,
-0x2e6b1c,8,
-0x2e6b40,3,
-0x2e6b50,3,
-0x2e6b80,1,
-0x2e6b88,3,
-0x2e6b9c,8,
-0x2e6bc0,3,
-0x2e6bd0,3,
-0x2e6c00,1,
-0x2e6c08,3,
-0x2e6c1c,8,
-0x2e6c40,3,
-0x2e6c50,3,
-0x2e6c80,2,
-0x2e6c94,13,
+0x2e6204,1,
+0x2e620c,6,
+0x2e6240,13,
+0x2e6280,16,
+0x2e6400,8,
+0x2e6424,15,
+0x2e6464,15,
+0x2e64a4,15,
+0x2e64e4,23,
+0x2e6544,6,
+0x2e6580,10,
+0x2e65ac,1,
+0x2e65b4,5,
+0x2e65cc,1,
+0x2e65d4,5,
+0x2e65ec,1,
+0x2e65f4,13,
+0x2e6680,7,
+0x2e66a0,5,
+0x2e66c0,5,
+0x2e66e0,3,
+0x2e6800,19,
+0x2e6850,10,
+0x2e6880,19,
+0x2e68d0,10,
+0x2e6900,19,
+0x2e6950,10,
+0x2e6980,19,
+0x2e69d0,10,
+0x2e6a00,19,
+0x2e6a50,10,
+0x2e6a80,19,
+0x2e6ad0,10,
+0x2e6b00,19,
+0x2e6b50,10,
+0x2e6b80,19,
+0x2e6bd0,10,
+0x2e6c00,19,
+0x2e6c50,10,
+0x2e6c84,1,
+0x2e6c94,8,
+0x2e6cb8,9,
+0x2e6ce0,4,
 0x2e7000,6,
 0x2e7020,3,
-0x2e7034,1,
 0x2e7040,7,
 0x2e7060,6,
 0x2e7100,5,
 0x2e7138,1,
 0x2e7144,1,
-0x2e7400,1,
-0x2e7418,1,
-0x2e7434,1,
-0x2e752c,5,
-0x2e7590,1,
-0x2e75ac,1,
-0x2e75d8,4,
-0x2e7600,8,
+0x2e7150,2,
 0x2e8000,6,
 0x2e8020,3,
 0x2e8030,9,
-0x2e8080,6,
-0x2e8100,20,
+0x2e8100,6,
+0x2e8120,10,
+0x2e8150,8,
 0x2e8400,1,
-0x2e8418,1,
-0x2e8434,1,
-0x2e852c,4,
-0x2e8590,1,
+0x2e8428,1,
+0x2e8450,1,
+0x2e8478,1,
+0x2e84a0,8,
 0x2e85ac,1,
 0x2e85d8,4,
-0x2e8600,8,
+0x2e8600,6,
+0x2e8620,6,
+0x2e8640,3,
+0x2e8800,6,
+0x2e8820,3,
+0x2e8830,4,
+0x2e8858,2,
+0x2e8864,1,
+0x2e8874,3,
+0x2e8898,2,
+0x2e88a4,1,
+0x2e88b4,3,
 0x2e9000,6,
 0x2e9020,6,
 0x2e9040,3,
 0x2e9080,14,
 0x2e90bc,1,
 0x2e90c4,13,
-0x2e90fc,6,
-0x2e9120,5,
-0x2e9190,10,
-0x2e9200,16,
-0x2e9244,32,
-0x2e9300,26,
+0x2e90fc,5,
+0x2e9120,4,
+0x2e9140,3,
+0x2e9180,3,
+0x2e9190,3,
+0x2e91a0,1,
+0x2e91e0,6,
+0x2e9200,20,
+0x2e925c,30,
+0x2e9300,24,
 0x2e9380,2,
 0x2e93a0,1,
 0x2e93c0,11,
-0x2e9404,4,
-0x2e9418,16,
+0x2e9404,3,
+0x2e9420,11,
 0x2e9460,3,
+0x2e9480,6,
 0x2e9500,6,
+0x2e9520,6,
 0x2e9540,1,
 0x2e9558,2,
 0x2e9600,17,
-0x2e9800,366,
+0x2e9800,410,
 0x2ea000,6,
 0x2ea020,6,
 0x2ea040,3,
 0x2ea080,14,
 0x2ea0bc,1,
 0x2ea0c4,13,
-0x2ea0fc,6,
-0x2ea120,5,
-0x2ea190,10,
-0x2ea200,16,
-0x2ea244,32,
-0x2ea300,26,
+0x2ea0fc,5,
+0x2ea120,4,
+0x2ea140,3,
+0x2ea180,3,
+0x2ea190,3,
+0x2ea1a0,1,
+0x2ea1e0,6,
+0x2ea200,20,
+0x2ea25c,30,
+0x2ea300,24,
 0x2ea380,2,
 0x2ea3a0,1,
 0x2ea3c0,11,
-0x2ea404,4,
-0x2ea418,16,
+0x2ea404,3,
+0x2ea420,11,
 0x2ea460,3,
+0x2ea480,6,
 0x2ea500,6,
+0x2ea520,6,
 0x2ea540,1,
 0x2ea558,2,
 0x2ea600,17,
-0x2ea800,366,
+0x2ea800,410,
 0x2eb000,4,
-0x2eb020,9,
-0x2eb048,6,
-0x2eb064,6,
-0x2eb080,1,
+0x2eb020,25,
+0x2eb088,8,
 0x2eb100,4,
-0x2eb120,9,
-0x2eb148,6,
-0x2eb164,6,
-0x2eb180,1,
-0x2eb200,35,
-0x2eb290,6,
-0x2eb2b4,6,
-0x2eb2d0,5,
-0x2eb2e8,5,
+0x2eb120,25,
+0x2eb188,8,
+0x2eb200,34,
 0x2eb300,37,
-0x2eb400,6,
-0x2eb420,3,
-0x2eb438,4,
-0x2eb454,3,
-0x2eb478,4,
-0x2eb494,3,
+0x2eb400,16,
+0x2eb464,1,
+0x2eb474,3,
+0x2eb500,6,
+0x2eb520,2,
+0x2eb530,9,
+0x2eb570,10,
+0x2eb5a0,2,
+0x2eb5b0,9,
+0x2eb5f0,4,
+0x2eb620,7,
+0x2eb640,16,
+0x2eb700,6,
+0x2eb720,6,
+0x2eb740,6,
+0x2eb760,6,
+0x2eb780,3,
 0x2eb800,5,
 0x2eb818,1,
 0x2eb854,6,
 0x2eb880,2,
 0x2eb8a4,1,
+0x2eb8ac,2,
 0x2eba00,28,
-0x2eba7c,5,
-0x2ebab0,2,
+0x2eba7c,13,
+0x2ebab4,1,
 0x2ebabc,10,
-0x2ebb00,2,
-0x2ebb0c,7,
+0x2ebb04,1,
+0x2ebb0c,5,
+0x2ebb24,1,
 0x2ebb34,9,
 0x2ebb60,6,
-0x2ebb80,8,
+0x2ebb80,22,
+0x2ebbe0,3,
+0x2ebbf0,2,
 0x2ebc00,5,
 0x2ebc18,1,
 0x2ebc54,6,
 0x2ebc80,2,
 0x2ebca4,1,
+0x2ebcac,2,
 0x2ebe00,28,
-0x2ebe7c,5,
-0x2ebeb0,2,
+0x2ebe7c,13,
+0x2ebeb4,1,
 0x2ebebc,10,
-0x2ebf00,2,
-0x2ebf0c,7,
+0x2ebf04,1,
+0x2ebf0c,5,
+0x2ebf24,1,
 0x2ebf34,9,
 0x2ebf60,6,
-0x2ebf80,8,
-0x2ec000,4,
-0x2ec014,10,
-0x2ec040,1,
-0x2ec048,3,
-0x2ec058,1,
-0x2ec060,1,
+0x2ebf80,22,
+0x2ebfe0,3,
+0x2ebff0,2,
+0x2ec008,2,
+0x2ec014,11,
+0x2ec044,1,
+0x2ec04c,3,
+0x2ec05c,1,
+0x2ec064,1,
 0x2ec07c,1,
-0x2ec500,1,
-0x2ec518,2,
+0x2ec500,2,
+0x2ec518,1,
+0x2ec520,3,
 0x2ec540,6,
-0x2ec800,4,
-0x2ec814,10,
-0x2ec840,1,
-0x2ec848,3,
-0x2ec858,1,
-0x2ec860,1,
+0x2ec580,10,
+0x2ec808,2,
+0x2ec814,11,
+0x2ec844,1,
+0x2ec84c,3,
+0x2ec85c,1,
+0x2ec864,1,
 0x2ec87c,1,
-0x2ecd00,1,
-0x2ecd18,2,
+0x2ecd00,2,
+0x2ecd18,1,
+0x2ecd20,3,
 0x2ecd40,6,
+0x2ecd80,10,
 0x2ed800,2,
-0x2ed818,2,
-0x2ed834,2,
-0x2ed92c,6,
-0x2ed990,2,
+0x2ed828,2,
+0x2ed850,2,
+0x2ed878,2,
+0x2ed8a0,6,
 0x2ed9ac,1,
 0x2ed9d8,4,
-0x2eda00,16,
-0x2edc00,3,
-0x2edc20,2,
-0x2edc40,1,
+0x2eda00,6,
+0x2eda20,6,
+0x2eda40,6,
+0x2eda60,6,
+0x2eda80,3,
+0x2edc00,6,
+0x2edc20,3,
+0x2edc40,2,
+0x2edc60,1,
 0x2f0000,5,
 0x2f0020,4,
-0x2f0034,9,
-0x2f005c,7,
+0x2f0034,17,
 0x2f0080,1,
 0x2f00a0,6,
 0x2f0100,5,
 0x2f0120,4,
-0x2f0134,9,
-0x2f015c,7,
+0x2f0134,17,
 0x2f0180,1,
 0x2f01a0,6,
 0x2f0200,5,
 0x2f0220,4,
-0x2f0234,9,
-0x2f025c,7,
+0x2f0234,17,
 0x2f0280,1,
 0x2f02a0,6,
 0x2f0300,5,
 0x2f0320,4,
-0x2f0334,9,
-0x2f035c,7,
+0x2f0334,17,
 0x2f0380,1,
 0x2f03a0,6,
-0x2f0400,4,
-0x2f0440,4,
+0x2f0400,6,
+0x2f0440,6,
 0x2f0480,3,
 0x2f04c0,3,
-0x2f0500,5,
-0x2f0518,8,
+0x2f0500,6,
+0x2f051c,7,
+0x2f0540,1,
 0x2f0c00,13,
-0x2f0c40,11,
+0x2f0c40,12,
 0x2f0c80,13,
-0x2f0cc0,11,
+0x2f0cc0,12,
 0x2f0d00,6,
 0x2f0d20,6,
-0x2f0e00,10,
+0x2f0d80,14,
+0x2f0dc0,2,
 0x2f0e40,11,
-0x2f0e80,8,
+0x2f0e80,6,
+0x2f0ea0,6,
 0x2f1000,2,
 0x2f1010,5,
 0x2f1040,3,
 0x2f1050,3,
-0x2f1060,7,
-0x2f1080,7,
-0x2f10a0,7,
-0x2f10c0,7,
-0x2f1100,7,
-0x2f1140,7,
-0x2f1180,5,
+0x2f1060,32,
+0x2f1100,8,
+0x2f1140,8,
+0x2f1180,3,
+0x2f1190,2,
 0x2f119c,9,
 0x2f1218,9,
 0x2f1240,3,
 0x2f12e4,1,
 0x2f1400,8,
 0x2f1424,2,
-0x2f1500,3,
+0x2f1500,5,
 0x2f1520,4,
-0x2f1540,3,
+0x2f1540,5,
 0x2f1560,4,
 0x2f1800,24,
-0x2f1864,2,
-0x2f1880,6,
-0x2f1900,12,
-0x2f1940,6,
-0x2f1960,6,
+0x2f1864,5,
+0x2f1880,8,
+0x2f1900,13,
 0x2f1980,4,
+0x2f19a0,6,
 0x2f19c0,6,
 0x2f19dc,1,
 0x2f1a00,6,
 0x2f1a1c,1,
 0x2f1a40,1,
+0x2f1a60,1,
 0x2f1a68,23,
+0x2f1ac8,6,
 0x2f1b00,17,
+0x2f1b48,6,
 0x2f1b80,12,
+0x2f1c00,6,
+0x2f1c20,6,
+0x2f1c40,6,
+0x2f1c60,3,
+0x2f1d00,6,
+0x2f1d20,6,
+0x2f1d40,3,
+0x2f1d80,6,
+0x2f1da0,6,
+0x2f1dc0,3,
 0x2f2000,5,
 0x2f2020,4,
-0x2f2034,9,
-0x2f205c,7,
+0x2f2034,17,
 0x2f2080,1,
 0x2f20a0,6,
 0x2f2100,5,
 0x2f2120,4,
-0x2f2134,9,
-0x2f215c,7,
+0x2f2134,17,
 0x2f2180,1,
 0x2f21a0,6,
 0x2f2200,5,
 0x2f2220,4,
-0x2f2234,9,
-0x2f225c,7,
+0x2f2234,17,
 0x2f2280,1,
 0x2f22a0,6,
 0x2f2300,5,
 0x2f2320,4,
-0x2f2334,9,
-0x2f235c,7,
+0x2f2334,17,
 0x2f2380,1,
 0x2f23a0,6,
-0x2f2400,4,
-0x2f2440,4,
+0x2f2400,6,
+0x2f2440,6,
 0x2f2480,3,
 0x2f24c0,3,
-0x2f2500,5,
-0x2f2518,8,
+0x2f2500,6,
+0x2f251c,7,
+0x2f2540,1,
 0x2f2c00,13,
-0x2f2c40,11,
+0x2f2c40,12,
 0x2f2c80,13,
-0x2f2cc0,11,
+0x2f2cc0,12,
 0x2f2d00,6,
 0x2f2d20,6,
-0x2f2e00,10,
+0x2f2d80,14,
+0x2f2dc0,2,
 0x2f2e40,11,
-0x2f2e80,8,
+0x2f2e80,6,
+0x2f2ea0,6,
 0x2f3000,2,
 0x2f3010,5,
 0x2f3040,3,
 0x2f3050,3,
-0x2f3060,7,
-0x2f3080,7,
-0x2f30a0,7,
-0x2f30c0,7,
-0x2f3100,7,
-0x2f3140,7,
-0x2f3180,5,
+0x2f3060,32,
+0x2f3100,8,
+0x2f3140,8,
+0x2f3180,3,
+0x2f3190,2,
 0x2f319c,9,
 0x2f3218,9,
 0x2f3240,3,
 0x2f32e4,1,
 0x2f3400,8,
 0x2f3424,2,
-0x2f3500,3,
+0x2f3500,5,
 0x2f3520,4,
-0x2f3540,3,
+0x2f3540,5,
 0x2f3560,4,
 0x2f3800,24,
-0x2f3864,2,
-0x2f3880,6,
-0x2f3900,12,
-0x2f3940,6,
-0x2f3960,6,
+0x2f3864,5,
+0x2f3880,8,
+0x2f3900,13,
 0x2f3980,4,
+0x2f39a0,6,
 0x2f39c0,6,
 0x2f39dc,1,
 0x2f3a00,6,
 0x2f3a1c,1,
 0x2f3a40,1,
+0x2f3a60,1,
 0x2f3a68,23,
+0x2f3ac8,6,
 0x2f3b00,17,
+0x2f3b48,6,
 0x2f3b80,12,
-0x2f4000,4,
-0x2f4014,6,
-0x2f4030,5,
-0x2f4080,4,
-0x2f4094,6,
-0x2f40b0,5,
-0x2f4100,4,
-0x2f4114,6,
-0x2f4130,5,
-0x2f4180,4,
-0x2f4194,6,
-0x2f41b0,5,
-0x2f4200,3,
-0x2f4210,23,
-0x2f4500,3,
-0x2f4510,12,
-0x2f4580,3,
-0x2f4590,12,
-0x2f4600,3,
-0x2f4610,12,
-0x2f4680,3,
-0x2f4690,12,
-0x2f4700,4,
-0x2f4718,13,
-0x2f4800,25,
-0x2f4880,25,
-0x2f4900,25,
-0x2f4980,25,
-0x2f4a00,17,
-0x2f4a50,3,
-0x2f4a60,3,
-0x2f5000,4,
-0x2f5014,6,
-0x2f5030,5,
-0x2f5080,4,
-0x2f5094,6,
-0x2f50b0,5,
-0x2f5100,4,
-0x2f5114,6,
-0x2f5130,5,
-0x2f5180,4,
-0x2f5194,6,
-0x2f51b0,5,
-0x2f5200,3,
-0x2f5210,23,
-0x2f5500,3,
-0x2f5510,12,
-0x2f5580,3,
-0x2f5590,12,
-0x2f5600,3,
-0x2f5610,12,
-0x2f5680,3,
-0x2f5690,12,
-0x2f5700,4,
-0x2f5718,13,
-0x2f5800,25,
-0x2f5880,25,
-0x2f5900,25,
-0x2f5980,25,
-0x2f5a00,17,
-0x2f5a50,3,
-0x2f5a60,3,
-0x2f6000,13,
-0x2f6040,22,
-0x2f60a0,6,
-0x2f60c0,3,
+0x2f3c00,6,
+0x2f3c20,6,
+0x2f3c40,6,
+0x2f3c60,3,
+0x2f3d00,6,
+0x2f3d20,6,
+0x2f3d40,3,
+0x2f3d80,6,
+0x2f3da0,6,
+0x2f3dc0,3,
+0x2f4000,29,
+0x2f4078,5,
+0x2f4090,2,
+0x2f40a0,10,
+0x2f4100,93,
+0x2f4278,5,
+0x2f4290,2,
+0x2f42a0,10,
+0x2f4300,93,
+0x2f4478,5,
+0x2f4490,2,
+0x2f44a0,10,
+0x2f4500,93,
+0x2f4678,5,
+0x2f4690,2,
+0x2f46a0,10,
+0x2f4700,93,
+0x2f487c,1,
+0x2f4a00,8,
+0x2f4a24,15,
+0x2f4a64,23,
+0x2f4ac4,6,
+0x2f4b00,4,
+0x2f4b20,3,
+0x2f4c00,2,
+0x2f4c40,14,
+0x2f4c80,9,
+0x2f4d00,9,
+0x2f4d2c,1,
+0x2f4d80,6,
+0x2f4e00,2,
+0x2f4e0c,1,
+0x2f4e14,5,
+0x2f4e2c,1,
+0x2f4e34,5,
+0x2f4e4c,1,
+0x2f4e54,5,
+0x2f4e6c,1,
+0x2f4e74,5,
+0x2f4e8c,1,
+0x2f4e94,5,
+0x2f4eac,1,
+0x2f4eb4,3,
+0x2f5000,29,
+0x2f5078,5,
+0x2f5090,2,
+0x2f50a0,10,
+0x2f5100,93,
+0x2f5278,5,
+0x2f5290,2,
+0x2f52a0,10,
+0x2f5300,93,
+0x2f5478,5,
+0x2f5490,2,
+0x2f54a0,10,
+0x2f5500,93,
+0x2f5678,5,
+0x2f5690,2,
+0x2f56a0,10,
+0x2f5700,93,
+0x2f587c,1,
+0x2f5a00,8,
+0x2f5a24,15,
+0x2f5a64,23,
+0x2f5ac4,6,
+0x2f5b00,4,
+0x2f5b20,3,
+0x2f5c00,2,
+0x2f5c40,14,
+0x2f5c80,9,
+0x2f5d00,9,
+0x2f5d2c,1,
+0x2f5d80,6,
+0x2f5e00,2,
+0x2f5e0c,1,
+0x2f5e14,5,
+0x2f5e2c,1,
+0x2f5e34,5,
+0x2f5e4c,1,
+0x2f5e54,5,
+0x2f5e6c,1,
+0x2f5e74,5,
+0x2f5e8c,1,
+0x2f5e94,5,
+0x2f5eac,1,
+0x2f5eb4,3,
+0x2f6000,14,
+0x2f6070,3,
+0x2f6080,6,
 0x2f6100,9,
-0x2f6400,2,
-0x2f640c,6,
-0x2f6440,13,
-0x2f6480,16,
-0x2f6800,1,
-0x2f6808,3,
-0x2f681c,8,
-0x2f6840,3,
-0x2f6850,3,
-0x2f6880,1,
-0x2f6888,3,
-0x2f689c,8,
-0x2f68c0,3,
-0x2f68d0,3,
-0x2f6900,1,
-0x2f6908,3,
-0x2f691c,8,
-0x2f6940,3,
-0x2f6950,3,
-0x2f6980,1,
-0x2f6988,3,
-0x2f699c,8,
-0x2f69c0,3,
-0x2f69d0,3,
-0x2f6a00,1,
-0x2f6a08,3,
-0x2f6a1c,8,
-0x2f6a40,3,
-0x2f6a50,3,
-0x2f6a80,1,
-0x2f6a88,3,
-0x2f6a9c,8,
-0x2f6ac0,3,
-0x2f6ad0,3,
-0x2f6b00,1,
-0x2f6b08,3,
-0x2f6b1c,8,
-0x2f6b40,3,
-0x2f6b50,3,
-0x2f6b80,1,
-0x2f6b88,3,
-0x2f6b9c,8,
-0x2f6bc0,3,
-0x2f6bd0,3,
-0x2f6c00,1,
-0x2f6c08,3,
-0x2f6c1c,8,
-0x2f6c40,3,
-0x2f6c50,3,
-0x2f6c80,2,
-0x2f6c94,13,
+0x2f6204,1,
+0x2f620c,6,
+0x2f6240,13,
+0x2f6280,16,
+0x2f6400,8,
+0x2f6424,15,
+0x2f6464,15,
+0x2f64a4,15,
+0x2f64e4,23,
+0x2f6544,6,
+0x2f6580,10,
+0x2f65ac,1,
+0x2f65b4,5,
+0x2f65cc,1,
+0x2f65d4,5,
+0x2f65ec,1,
+0x2f65f4,13,
+0x2f6680,7,
+0x2f66a0,5,
+0x2f66c0,5,
+0x2f66e0,3,
+0x2f6800,19,
+0x2f6850,10,
+0x2f6880,19,
+0x2f68d0,10,
+0x2f6900,19,
+0x2f6950,10,
+0x2f6980,19,
+0x2f69d0,10,
+0x2f6a00,19,
+0x2f6a50,10,
+0x2f6a80,19,
+0x2f6ad0,10,
+0x2f6b00,19,
+0x2f6b50,10,
+0x2f6b80,19,
+0x2f6bd0,10,
+0x2f6c00,19,
+0x2f6c50,10,
+0x2f6c84,1,
+0x2f6c94,8,
+0x2f6cb8,9,
+0x2f6ce0,4,
 0x2f7000,6,
 0x2f7020,3,
-0x2f7034,1,
 0x2f7040,7,
 0x2f7060,6,
 0x2f7100,5,
 0x2f7138,1,
 0x2f7144,1,
-0x2f7400,1,
-0x2f7418,1,
-0x2f7434,1,
-0x2f752c,5,
-0x2f7590,1,
-0x2f75ac,1,
-0x2f75d8,4,
-0x2f7600,8,
+0x2f7150,2,
 0x2f8000,6,
 0x2f8020,3,
 0x2f8030,9,
-0x2f8080,6,
-0x2f8100,20,
+0x2f8100,6,
+0x2f8120,10,
+0x2f8150,8,
 0x2f8400,1,
-0x2f8418,1,
-0x2f8434,1,
-0x2f852c,4,
-0x2f8590,1,
+0x2f8428,1,
+0x2f8450,1,
+0x2f8478,1,
+0x2f84a0,8,
 0x2f85ac,1,
 0x2f85d8,4,
-0x2f8600,8,
+0x2f8600,6,
+0x2f8620,6,
+0x2f8640,3,
+0x2f8800,6,
+0x2f8820,3,
+0x2f8830,4,
+0x2f8858,2,
+0x2f8864,1,
+0x2f8874,3,
+0x2f8898,2,
+0x2f88a4,1,
+0x2f88b4,3,
 0x2f9000,6,
 0x2f9020,6,
 0x2f9040,3,
 0x2f9080,14,
 0x2f90bc,1,
 0x2f90c4,13,
-0x2f90fc,6,
-0x2f9120,5,
-0x2f9190,10,
-0x2f9200,16,
-0x2f9244,32,
-0x2f9300,26,
+0x2f90fc,5,
+0x2f9120,4,
+0x2f9140,3,
+0x2f9180,3,
+0x2f9190,3,
+0x2f91a0,1,
+0x2f91e0,6,
+0x2f9200,20,
+0x2f925c,30,
+0x2f9300,24,
 0x2f9380,2,
 0x2f93a0,1,
 0x2f93c0,11,
-0x2f9404,4,
-0x2f9418,16,
+0x2f9404,3,
+0x2f9420,11,
 0x2f9460,3,
+0x2f9480,6,
 0x2f9500,6,
+0x2f9520,6,
 0x2f9540,1,
 0x2f9558,2,
 0x2f9600,17,
-0x2f9800,366,
+0x2f9800,410,
 0x2fa000,6,
 0x2fa020,6,
 0x2fa040,3,
 0x2fa080,14,
 0x2fa0bc,1,
 0x2fa0c4,13,
-0x2fa0fc,6,
-0x2fa120,5,
-0x2fa190,10,
-0x2fa200,16,
-0x2fa244,32,
-0x2fa300,26,
+0x2fa0fc,5,
+0x2fa120,4,
+0x2fa140,3,
+0x2fa180,3,
+0x2fa190,3,
+0x2fa1a0,1,
+0x2fa1e0,6,
+0x2fa200,20,
+0x2fa25c,30,
+0x2fa300,24,
 0x2fa380,2,
 0x2fa3a0,1,
 0x2fa3c0,11,
-0x2fa404,4,
-0x2fa418,16,
+0x2fa404,3,
+0x2fa420,11,
 0x2fa460,3,
+0x2fa480,6,
 0x2fa500,6,
+0x2fa520,6,
 0x2fa540,1,
 0x2fa558,2,
 0x2fa600,17,
-0x2fa800,366,
+0x2fa800,410,
 0x2fb000,4,
-0x2fb020,9,
-0x2fb048,6,
-0x2fb064,6,
-0x2fb080,1,
+0x2fb020,25,
+0x2fb088,8,
 0x2fb100,4,
-0x2fb120,9,
-0x2fb148,6,
-0x2fb164,6,
-0x2fb180,1,
-0x2fb200,35,
-0x2fb290,6,
-0x2fb2b4,6,
-0x2fb2d0,5,
-0x2fb2e8,5,
+0x2fb120,25,
+0x2fb188,8,
+0x2fb200,34,
 0x2fb300,37,
-0x2fb400,6,
-0x2fb420,3,
-0x2fb438,4,
-0x2fb454,3,
-0x2fb478,4,
-0x2fb494,3,
+0x2fb400,16,
+0x2fb464,1,
+0x2fb474,3,
+0x2fb500,6,
+0x2fb520,2,
+0x2fb530,9,
+0x2fb570,10,
+0x2fb5a0,2,
+0x2fb5b0,9,
+0x2fb5f0,4,
+0x2fb620,7,
+0x2fb640,16,
+0x2fb700,6,
+0x2fb720,6,
+0x2fb740,6,
+0x2fb760,6,
+0x2fb780,3,
 0x2fb800,5,
 0x2fb818,1,
 0x2fb854,6,
 0x2fb880,2,
 0x2fb8a4,1,
+0x2fb8ac,2,
 0x2fba00,28,
-0x2fba7c,5,
-0x2fbab0,2,
+0x2fba7c,13,
+0x2fbab4,1,
 0x2fbabc,10,
-0x2fbb00,2,
-0x2fbb0c,7,
+0x2fbb04,1,
+0x2fbb0c,5,
+0x2fbb24,1,
 0x2fbb34,9,
 0x2fbb60,6,
-0x2fbb80,8,
+0x2fbb80,22,
+0x2fbbe0,3,
+0x2fbbf0,2,
 0x2fbc00,5,
 0x2fbc18,1,
 0x2fbc54,6,
 0x2fbc80,2,
 0x2fbca4,1,
+0x2fbcac,2,
 0x2fbe00,28,
-0x2fbe7c,5,
-0x2fbeb0,2,
+0x2fbe7c,13,
+0x2fbeb4,1,
 0x2fbebc,10,
-0x2fbf00,2,
-0x2fbf0c,7,
+0x2fbf04,1,
+0x2fbf0c,5,
+0x2fbf24,1,
 0x2fbf34,9,
 0x2fbf60,6,
-0x2fbf80,8,
-0x2fc000,4,
-0x2fc014,10,
-0x2fc040,1,
-0x2fc048,3,
-0x2fc058,1,
-0x2fc060,1,
+0x2fbf80,22,
+0x2fbfe0,3,
+0x2fbff0,2,
+0x2fc008,2,
+0x2fc014,11,
+0x2fc044,1,
+0x2fc04c,3,
+0x2fc05c,1,
+0x2fc064,1,
 0x2fc07c,1,
-0x2fc500,1,
-0x2fc518,2,
+0x2fc500,2,
+0x2fc518,1,
+0x2fc520,3,
 0x2fc540,6,
-0x2fc800,4,
-0x2fc814,10,
-0x2fc840,1,
-0x2fc848,3,
-0x2fc858,1,
-0x2fc860,1,
+0x2fc580,10,
+0x2fc808,2,
+0x2fc814,11,
+0x2fc844,1,
+0x2fc84c,3,
+0x2fc85c,1,
+0x2fc864,1,
 0x2fc87c,1,
-0x2fcd00,1,
-0x2fcd18,2,
+0x2fcd00,2,
+0x2fcd18,1,
+0x2fcd20,3,
 0x2fcd40,6,
+0x2fcd80,10,
 0x2fd800,2,
-0x2fd818,2,
-0x2fd834,2,
-0x2fd92c,6,
-0x2fd990,2,
+0x2fd828,2,
+0x2fd850,2,
+0x2fd878,2,
+0x2fd8a0,6,
 0x2fd9ac,1,
 0x2fd9d8,4,
-0x2fda00,16,
-0x2fdc00,3,
-0x2fdc20,2,
-0x2fdc40,1,
+0x2fda00,6,
+0x2fda20,6,
+0x2fda40,6,
+0x2fda60,6,
+0x2fda80,3,
+0x2fdc00,6,
+0x2fdc20,3,
+0x2fdc40,2,
+0x2fdc60,1,
 0x300000,5,
 0x300020,4,
-0x300034,9,
-0x30005c,7,
+0x300034,17,
 0x300080,1,
 0x3000a0,6,
 0x300100,5,
 0x300120,4,
-0x300134,9,
-0x30015c,7,
+0x300134,17,
 0x300180,1,
 0x3001a0,6,
 0x300200,5,
 0x300220,4,
-0x300234,9,
-0x30025c,7,
+0x300234,17,
 0x300280,1,
 0x3002a0,6,
 0x300300,5,
 0x300320,4,
-0x300334,9,
-0x30035c,7,
+0x300334,17,
 0x300380,1,
 0x3003a0,6,
-0x300400,4,
-0x300440,4,
+0x300400,6,
+0x300440,6,
 0x300480,3,
 0x3004c0,3,
-0x300500,5,
-0x300518,8,
+0x300500,6,
+0x30051c,7,
+0x300540,1,
 0x300c00,13,
-0x300c40,11,
+0x300c40,12,
 0x300c80,13,
-0x300cc0,11,
+0x300cc0,12,
 0x300d00,6,
 0x300d20,6,
-0x300e00,10,
+0x300d80,14,
+0x300dc0,2,
 0x300e40,11,
-0x300e80,8,
+0x300e80,6,
+0x300ea0,6,
 0x301000,2,
 0x301010,5,
 0x301040,3,
 0x301050,3,
-0x301060,7,
-0x301080,7,
-0x3010a0,7,
-0x3010c0,7,
-0x301100,7,
-0x301140,7,
-0x301180,5,
+0x301060,32,
+0x301100,8,
+0x301140,8,
+0x301180,3,
+0x301190,2,
 0x30119c,9,
 0x301218,9,
 0x301240,3,
 0x3012e4,1,
 0x301400,8,
 0x301424,2,
-0x301500,3,
+0x301500,5,
 0x301520,4,
-0x301540,3,
+0x301540,5,
 0x301560,4,
 0x301800,24,
-0x301864,2,
-0x301880,6,
-0x301900,12,
-0x301940,6,
-0x301960,6,
+0x301864,5,
+0x301880,8,
+0x301900,13,
 0x301980,4,
+0x3019a0,6,
 0x3019c0,6,
 0x3019dc,1,
 0x301a00,6,
 0x301a1c,1,
 0x301a40,1,
+0x301a60,1,
 0x301a68,23,
+0x301ac8,6,
 0x301b00,17,
+0x301b48,6,
 0x301b80,12,
+0x301c00,6,
+0x301c20,6,
+0x301c40,6,
+0x301c60,3,
+0x301d00,6,
+0x301d20,6,
+0x301d40,3,
+0x301d80,6,
+0x301da0,6,
+0x301dc0,3,
 0x302000,5,
 0x302020,4,
-0x302034,9,
-0x30205c,7,
+0x302034,17,
 0x302080,1,
 0x3020a0,6,
 0x302100,5,
 0x302120,4,
-0x302134,9,
-0x30215c,7,
+0x302134,17,
 0x302180,1,
 0x3021a0,6,
 0x302200,5,
 0x302220,4,
-0x302234,9,
-0x30225c,7,
+0x302234,17,
 0x302280,1,
 0x3022a0,6,
 0x302300,5,
 0x302320,4,
-0x302334,9,
-0x30235c,7,
+0x302334,17,
 0x302380,1,
 0x3023a0,6,
-0x302400,4,
-0x302440,4,
+0x302400,6,
+0x302440,6,
 0x302480,3,
 0x3024c0,3,
-0x302500,5,
-0x302518,8,
+0x302500,6,
+0x30251c,7,
+0x302540,1,
 0x302c00,13,
-0x302c40,11,
+0x302c40,12,
 0x302c80,13,
-0x302cc0,11,
+0x302cc0,12,
 0x302d00,6,
 0x302d20,6,
-0x302e00,10,
+0x302d80,14,
+0x302dc0,2,
 0x302e40,11,
-0x302e80,8,
+0x302e80,6,
+0x302ea0,6,
 0x303000,2,
 0x303010,5,
 0x303040,3,
 0x303050,3,
-0x303060,7,
-0x303080,7,
-0x3030a0,7,
-0x3030c0,7,
-0x303100,7,
-0x303140,7,
-0x303180,5,
+0x303060,32,
+0x303100,8,
+0x303140,8,
+0x303180,3,
+0x303190,2,
 0x30319c,9,
 0x303218,9,
 0x303240,3,
 0x3032e4,1,
 0x303400,8,
 0x303424,2,
-0x303500,3,
+0x303500,5,
 0x303520,4,
-0x303540,3,
+0x303540,5,
 0x303560,4,
 0x303800,24,
-0x303864,2,
-0x303880,6,
-0x303900,12,
-0x303940,6,
-0x303960,6,
+0x303864,5,
+0x303880,8,
+0x303900,13,
 0x303980,4,
+0x3039a0,6,
 0x3039c0,6,
 0x3039dc,1,
 0x303a00,6,
 0x303a1c,1,
 0x303a40,1,
+0x303a60,1,
 0x303a68,23,
+0x303ac8,6,
 0x303b00,17,
+0x303b48,6,
 0x303b80,12,
-0x304000,4,
-0x304014,6,
-0x304030,5,
-0x304080,4,
-0x304094,6,
-0x3040b0,5,
-0x304100,4,
-0x304114,6,
-0x304130,5,
-0x304180,4,
-0x304194,6,
-0x3041b0,5,
-0x304200,3,
-0x304210,23,
-0x304500,3,
-0x304510,12,
-0x304580,3,
-0x304590,12,
-0x304600,3,
-0x304610,12,
-0x304680,3,
-0x304690,12,
-0x304700,4,
-0x304718,13,
-0x304800,25,
-0x304880,25,
-0x304900,25,
-0x304980,25,
-0x304a00,17,
-0x304a50,3,
-0x304a60,3,
-0x305000,4,
-0x305014,6,
-0x305030,5,
-0x305080,4,
-0x305094,6,
-0x3050b0,5,
-0x305100,4,
-0x305114,6,
-0x305130,5,
-0x305180,4,
-0x305194,6,
-0x3051b0,5,
-0x305200,3,
-0x305210,23,
-0x305500,3,
-0x305510,12,
-0x305580,3,
-0x305590,12,
-0x305600,3,
-0x305610,12,
-0x305680,3,
-0x305690,12,
-0x305700,4,
-0x305718,13,
-0x305800,25,
-0x305880,25,
-0x305900,25,
-0x305980,25,
-0x305a00,17,
-0x305a50,3,
-0x305a60,3,
-0x306000,13,
-0x306040,22,
-0x3060a0,6,
-0x3060c0,3,
+0x303c00,6,
+0x303c20,6,
+0x303c40,6,
+0x303c60,3,
+0x303d00,6,
+0x303d20,6,
+0x303d40,3,
+0x303d80,6,
+0x303da0,6,
+0x303dc0,3,
+0x304000,29,
+0x304078,5,
+0x304090,2,
+0x3040a0,10,
+0x304100,93,
+0x304278,5,
+0x304290,2,
+0x3042a0,10,
+0x304300,93,
+0x304478,5,
+0x304490,2,
+0x3044a0,10,
+0x304500,93,
+0x304678,5,
+0x304690,2,
+0x3046a0,10,
+0x304700,93,
+0x30487c,1,
+0x304a00,8,
+0x304a24,15,
+0x304a64,23,
+0x304ac4,6,
+0x304b00,4,
+0x304b20,3,
+0x304c00,2,
+0x304c40,14,
+0x304c80,9,
+0x304d00,9,
+0x304d2c,1,
+0x304d80,6,
+0x304e00,2,
+0x304e0c,1,
+0x304e14,5,
+0x304e2c,1,
+0x304e34,5,
+0x304e4c,1,
+0x304e54,5,
+0x304e6c,1,
+0x304e74,5,
+0x304e8c,1,
+0x304e94,5,
+0x304eac,1,
+0x304eb4,3,
+0x305000,29,
+0x305078,5,
+0x305090,2,
+0x3050a0,10,
+0x305100,93,
+0x305278,5,
+0x305290,2,
+0x3052a0,10,
+0x305300,93,
+0x305478,5,
+0x305490,2,
+0x3054a0,10,
+0x305500,93,
+0x305678,5,
+0x305690,2,
+0x3056a0,10,
+0x305700,93,
+0x30587c,1,
+0x305a00,8,
+0x305a24,15,
+0x305a64,23,
+0x305ac4,6,
+0x305b00,4,
+0x305b20,3,
+0x305c00,2,
+0x305c40,14,
+0x305c80,9,
+0x305d00,9,
+0x305d2c,1,
+0x305d80,6,
+0x305e00,2,
+0x305e0c,1,
+0x305e14,5,
+0x305e2c,1,
+0x305e34,5,
+0x305e4c,1,
+0x305e54,5,
+0x305e6c,1,
+0x305e74,5,
+0x305e8c,1,
+0x305e94,5,
+0x305eac,1,
+0x305eb4,3,
+0x306000,14,
+0x306070,3,
+0x306080,6,
 0x306100,9,
-0x306400,2,
-0x30640c,6,
-0x306440,13,
-0x306480,16,
-0x306800,1,
-0x306808,3,
-0x30681c,8,
-0x306840,3,
-0x306850,3,
-0x306880,1,
-0x306888,3,
-0x30689c,8,
-0x3068c0,3,
-0x3068d0,3,
-0x306900,1,
-0x306908,3,
-0x30691c,8,
-0x306940,3,
-0x306950,3,
-0x306980,1,
-0x306988,3,
-0x30699c,8,
-0x3069c0,3,
-0x3069d0,3,
-0x306a00,1,
-0x306a08,3,
-0x306a1c,8,
-0x306a40,3,
-0x306a50,3,
-0x306a80,1,
-0x306a88,3,
-0x306a9c,8,
-0x306ac0,3,
-0x306ad0,3,
-0x306b00,1,
-0x306b08,3,
-0x306b1c,8,
-0x306b40,3,
-0x306b50,3,
-0x306b80,1,
-0x306b88,3,
-0x306b9c,8,
-0x306bc0,3,
-0x306bd0,3,
-0x306c00,1,
-0x306c08,3,
-0x306c1c,8,
-0x306c40,3,
-0x306c50,3,
-0x306c80,2,
-0x306c94,13,
+0x306204,1,
+0x30620c,6,
+0x306240,13,
+0x306280,16,
+0x306400,8,
+0x306424,15,
+0x306464,15,
+0x3064a4,15,
+0x3064e4,23,
+0x306544,6,
+0x306580,10,
+0x3065ac,1,
+0x3065b4,5,
+0x3065cc,1,
+0x3065d4,5,
+0x3065ec,1,
+0x3065f4,13,
+0x306680,7,
+0x3066a0,5,
+0x3066c0,5,
+0x3066e0,3,
+0x306800,19,
+0x306850,10,
+0x306880,19,
+0x3068d0,10,
+0x306900,19,
+0x306950,10,
+0x306980,19,
+0x3069d0,10,
+0x306a00,19,
+0x306a50,10,
+0x306a80,19,
+0x306ad0,10,
+0x306b00,19,
+0x306b50,10,
+0x306b80,19,
+0x306bd0,10,
+0x306c00,19,
+0x306c50,10,
+0x306c84,1,
+0x306c94,8,
+0x306cb8,9,
+0x306ce0,4,
 0x307000,6,
 0x307020,3,
-0x307034,1,
 0x307040,7,
 0x307060,6,
 0x307100,5,
 0x307138,1,
 0x307144,1,
-0x307400,1,
-0x307418,1,
-0x307434,1,
-0x30752c,5,
-0x307590,1,
-0x3075ac,1,
-0x3075d8,4,
-0x307600,8,
+0x307150,2,
 0x308000,6,
 0x308020,3,
 0x308030,9,
-0x308080,6,
-0x308100,20,
+0x308100,6,
+0x308120,10,
+0x308150,8,
 0x308400,1,
-0x308418,1,
-0x308434,1,
-0x30852c,4,
-0x308590,1,
+0x308428,1,
+0x308450,1,
+0x308478,1,
+0x3084a0,8,
 0x3085ac,1,
 0x3085d8,4,
-0x308600,8,
+0x308600,6,
+0x308620,6,
+0x308640,3,
+0x308800,6,
+0x308820,3,
+0x308830,4,
+0x308858,2,
+0x308864,1,
+0x308874,3,
+0x308898,2,
+0x3088a4,1,
+0x3088b4,3,
 0x309000,6,
 0x309020,6,
 0x309040,3,
 0x309080,14,
 0x3090bc,1,
 0x3090c4,13,
-0x3090fc,6,
-0x309120,5,
-0x309190,10,
-0x309200,16,
-0x309244,32,
-0x309300,26,
+0x3090fc,5,
+0x309120,4,
+0x309140,3,
+0x309180,3,
+0x309190,3,
+0x3091a0,1,
+0x3091e0,6,
+0x309200,20,
+0x30925c,30,
+0x309300,24,
 0x309380,2,
 0x3093a0,1,
 0x3093c0,11,
-0x309404,4,
-0x309418,16,
+0x309404,3,
+0x309420,11,
 0x309460,3,
+0x309480,6,
 0x309500,6,
+0x309520,6,
 0x309540,1,
 0x309558,2,
 0x309600,17,
-0x309800,366,
+0x309800,410,
 0x30a000,6,
 0x30a020,6,
 0x30a040,3,
 0x30a080,14,
 0x30a0bc,1,
 0x30a0c4,13,
-0x30a0fc,6,
-0x30a120,5,
-0x30a190,10,
-0x30a200,16,
-0x30a244,32,
-0x30a300,26,
+0x30a0fc,5,
+0x30a120,4,
+0x30a140,3,
+0x30a180,3,
+0x30a190,3,
+0x30a1a0,1,
+0x30a1e0,6,
+0x30a200,20,
+0x30a25c,30,
+0x30a300,24,
 0x30a380,2,
 0x30a3a0,1,
 0x30a3c0,11,
-0x30a404,4,
-0x30a418,16,
+0x30a404,3,
+0x30a420,11,
 0x30a460,3,
+0x30a480,6,
 0x30a500,6,
+0x30a520,6,
 0x30a540,1,
 0x30a558,2,
 0x30a600,17,
-0x30a800,366,
+0x30a800,410,
 0x30b000,4,
-0x30b020,9,
-0x30b048,6,
-0x30b064,6,
-0x30b080,1,
+0x30b020,25,
+0x30b088,8,
 0x30b100,4,
-0x30b120,9,
-0x30b148,6,
-0x30b164,6,
-0x30b180,1,
-0x30b200,35,
-0x30b290,6,
-0x30b2b4,6,
-0x30b2d0,5,
-0x30b2e8,5,
+0x30b120,25,
+0x30b188,8,
+0x30b200,34,
 0x30b300,37,
-0x30b400,6,
-0x30b420,3,
-0x30b438,4,
-0x30b454,3,
-0x30b478,4,
-0x30b494,3,
+0x30b400,16,
+0x30b464,1,
+0x30b474,3,
+0x30b500,6,
+0x30b520,2,
+0x30b530,9,
+0x30b570,10,
+0x30b5a0,2,
+0x30b5b0,9,
+0x30b5f0,4,
+0x30b620,7,
+0x30b640,16,
+0x30b700,6,
+0x30b720,6,
+0x30b740,6,
+0x30b760,6,
+0x30b780,3,
 0x30b800,5,
 0x30b818,1,
 0x30b854,6,
 0x30b880,2,
 0x30b8a4,1,
+0x30b8ac,2,
 0x30ba00,28,
-0x30ba7c,5,
-0x30bab0,2,
+0x30ba7c,13,
+0x30bab4,1,
 0x30babc,10,
-0x30bb00,2,
-0x30bb0c,7,
+0x30bb04,1,
+0x30bb0c,5,
+0x30bb24,1,
 0x30bb34,9,
 0x30bb60,6,
-0x30bb80,8,
+0x30bb80,22,
+0x30bbe0,3,
+0x30bbf0,2,
 0x30bc00,5,
 0x30bc18,1,
 0x30bc54,6,
 0x30bc80,2,
 0x30bca4,1,
+0x30bcac,2,
 0x30be00,28,
-0x30be7c,5,
-0x30beb0,2,
+0x30be7c,13,
+0x30beb4,1,
 0x30bebc,10,
-0x30bf00,2,
-0x30bf0c,7,
+0x30bf04,1,
+0x30bf0c,5,
+0x30bf24,1,
 0x30bf34,9,
 0x30bf60,6,
-0x30bf80,8,
-0x30c000,4,
-0x30c014,10,
-0x30c040,1,
-0x30c048,3,
-0x30c058,1,
-0x30c060,1,
+0x30bf80,22,
+0x30bfe0,3,
+0x30bff0,2,
+0x30c008,2,
+0x30c014,11,
+0x30c044,1,
+0x30c04c,3,
+0x30c05c,1,
+0x30c064,1,
 0x30c07c,1,
-0x30c500,1,
-0x30c518,2,
+0x30c500,2,
+0x30c518,1,
+0x30c520,3,
 0x30c540,6,
-0x30c800,4,
-0x30c814,10,
-0x30c840,1,
-0x30c848,3,
-0x30c858,1,
-0x30c860,1,
+0x30c580,10,
+0x30c808,2,
+0x30c814,11,
+0x30c844,1,
+0x30c84c,3,
+0x30c85c,1,
+0x30c864,1,
 0x30c87c,1,
-0x30cd00,1,
-0x30cd18,2,
+0x30cd00,2,
+0x30cd18,1,
+0x30cd20,3,
 0x30cd40,6,
+0x30cd80,10,
 0x30d800,2,
-0x30d818,2,
-0x30d834,2,
-0x30d92c,6,
-0x30d990,2,
+0x30d828,2,
+0x30d850,2,
+0x30d878,2,
+0x30d8a0,6,
 0x30d9ac,1,
 0x30d9d8,4,
-0x30da00,16,
-0x30dc00,3,
-0x30dc20,2,
-0x30dc40,1,
+0x30da00,6,
+0x30da20,6,
+0x30da40,6,
+0x30da60,6,
+0x30da80,3,
+0x30dc00,6,
+0x30dc20,3,
+0x30dc40,2,
+0x30dc60,1,
 0x310000,5,
 0x310020,4,
-0x310034,9,
-0x31005c,7,
+0x310034,17,
 0x310080,1,
 0x3100a0,6,
 0x310100,5,
 0x310120,4,
-0x310134,9,
-0x31015c,7,
+0x310134,17,
 0x310180,1,
 0x3101a0,6,
 0x310200,5,
 0x310220,4,
-0x310234,9,
-0x31025c,7,
+0x310234,17,
 0x310280,1,
 0x3102a0,6,
 0x310300,5,
 0x310320,4,
-0x310334,9,
-0x31035c,7,
+0x310334,17,
 0x310380,1,
 0x3103a0,6,
-0x310400,4,
-0x310440,4,
+0x310400,6,
+0x310440,6,
 0x310480,3,
 0x3104c0,3,
-0x310500,5,
-0x310518,8,
+0x310500,6,
+0x31051c,7,
+0x310540,1,
 0x310c00,13,
-0x310c40,11,
+0x310c40,12,
 0x310c80,13,
-0x310cc0,11,
+0x310cc0,12,
 0x310d00,6,
 0x310d20,6,
-0x310e00,10,
+0x310d80,14,
+0x310dc0,2,
 0x310e40,11,
-0x310e80,8,
+0x310e80,6,
+0x310ea0,6,
 0x311000,2,
 0x311010,5,
 0x311040,3,
 0x311050,3,
-0x311060,7,
-0x311080,7,
-0x3110a0,7,
-0x3110c0,7,
-0x311100,7,
-0x311140,7,
-0x311180,5,
+0x311060,32,
+0x311100,8,
+0x311140,8,
+0x311180,3,
+0x311190,2,
 0x31119c,9,
 0x311218,9,
 0x311240,3,
 0x3112e4,1,
 0x311400,8,
 0x311424,2,
-0x311500,3,
+0x311500,5,
 0x311520,4,
-0x311540,3,
+0x311540,5,
 0x311560,4,
 0x311800,24,
-0x311864,2,
-0x311880,6,
-0x311900,12,
-0x311940,6,
-0x311960,6,
+0x311864,5,
+0x311880,8,
+0x311900,13,
 0x311980,4,
+0x3119a0,6,
 0x3119c0,6,
 0x3119dc,1,
 0x311a00,6,
 0x311a1c,1,
 0x311a40,1,
+0x311a60,1,
 0x311a68,23,
+0x311ac8,6,
 0x311b00,17,
+0x311b48,6,
 0x311b80,12,
+0x311c00,6,
+0x311c20,6,
+0x311c40,6,
+0x311c60,3,
+0x311d00,6,
+0x311d20,6,
+0x311d40,3,
+0x311d80,6,
+0x311da0,6,
+0x311dc0,3,
 0x312000,5,
 0x312020,4,
-0x312034,9,
-0x31205c,7,
+0x312034,17,
 0x312080,1,
 0x3120a0,6,
 0x312100,5,
 0x312120,4,
-0x312134,9,
-0x31215c,7,
+0x312134,17,
 0x312180,1,
 0x3121a0,6,
 0x312200,5,
 0x312220,4,
-0x312234,9,
-0x31225c,7,
+0x312234,17,
 0x312280,1,
 0x3122a0,6,
 0x312300,5,
 0x312320,4,
-0x312334,9,
-0x31235c,7,
+0x312334,17,
 0x312380,1,
 0x3123a0,6,
-0x312400,4,
-0x312440,4,
+0x312400,6,
+0x312440,6,
 0x312480,3,
 0x3124c0,3,
-0x312500,5,
-0x312518,8,
+0x312500,6,
+0x31251c,7,
+0x312540,1,
 0x312c00,13,
-0x312c40,11,
+0x312c40,12,
 0x312c80,13,
-0x312cc0,11,
+0x312cc0,12,
 0x312d00,6,
 0x312d20,6,
-0x312e00,10,
+0x312d80,14,
+0x312dc0,2,
 0x312e40,11,
-0x312e80,8,
+0x312e80,6,
+0x312ea0,6,
 0x313000,2,
 0x313010,5,
 0x313040,3,
 0x313050,3,
-0x313060,7,
-0x313080,7,
-0x3130a0,7,
-0x3130c0,7,
-0x313100,7,
-0x313140,7,
-0x313180,5,
+0x313060,32,
+0x313100,8,
+0x313140,8,
+0x313180,3,
+0x313190,2,
 0x31319c,9,
 0x313218,9,
 0x313240,3,
 0x3132e4,1,
 0x313400,8,
 0x313424,2,
-0x313500,3,
+0x313500,5,
 0x313520,4,
-0x313540,3,
+0x313540,5,
 0x313560,4,
 0x313800,24,
-0x313864,2,
-0x313880,6,
-0x313900,12,
-0x313940,6,
-0x313960,6,
+0x313864,5,
+0x313880,8,
+0x313900,13,
 0x313980,4,
+0x3139a0,6,
 0x3139c0,6,
 0x3139dc,1,
 0x313a00,6,
 0x313a1c,1,
 0x313a40,1,
+0x313a60,1,
 0x313a68,23,
+0x313ac8,6,
 0x313b00,17,
+0x313b48,6,
 0x313b80,12,
-0x314000,4,
-0x314014,6,
-0x314030,5,
-0x314080,4,
-0x314094,6,
-0x3140b0,5,
-0x314100,4,
-0x314114,6,
-0x314130,5,
-0x314180,4,
-0x314194,6,
-0x3141b0,5,
-0x314200,3,
-0x314210,23,
-0x314500,3,
-0x314510,12,
-0x314580,3,
-0x314590,12,
-0x314600,3,
-0x314610,12,
-0x314680,3,
-0x314690,12,
-0x314700,4,
-0x314718,13,
-0x314800,25,
-0x314880,25,
-0x314900,25,
-0x314980,25,
-0x314a00,17,
-0x314a50,3,
-0x314a60,3,
-0x315000,4,
-0x315014,6,
-0x315030,5,
-0x315080,4,
-0x315094,6,
-0x3150b0,5,
-0x315100,4,
-0x315114,6,
-0x315130,5,
-0x315180,4,
-0x315194,6,
-0x3151b0,5,
-0x315200,3,
-0x315210,23,
-0x315500,3,
-0x315510,12,
-0x315580,3,
-0x315590,12,
-0x315600,3,
-0x315610,12,
-0x315680,3,
-0x315690,12,
-0x315700,4,
-0x315718,13,
-0x315800,25,
-0x315880,25,
-0x315900,25,
-0x315980,25,
-0x315a00,17,
-0x315a50,3,
-0x315a60,3,
-0x316000,13,
-0x316040,22,
-0x3160a0,6,
-0x3160c0,3,
+0x313c00,6,
+0x313c20,6,
+0x313c40,6,
+0x313c60,3,
+0x313d00,6,
+0x313d20,6,
+0x313d40,3,
+0x313d80,6,
+0x313da0,6,
+0x313dc0,3,
+0x314000,29,
+0x314078,5,
+0x314090,2,
+0x3140a0,10,
+0x314100,93,
+0x314278,5,
+0x314290,2,
+0x3142a0,10,
+0x314300,93,
+0x314478,5,
+0x314490,2,
+0x3144a0,10,
+0x314500,93,
+0x314678,5,
+0x314690,2,
+0x3146a0,10,
+0x314700,93,
+0x31487c,1,
+0x314a00,8,
+0x314a24,15,
+0x314a64,23,
+0x314ac4,6,
+0x314b00,4,
+0x314b20,3,
+0x314c00,2,
+0x314c40,14,
+0x314c80,9,
+0x314d00,9,
+0x314d2c,1,
+0x314d80,6,
+0x314e00,2,
+0x314e0c,1,
+0x314e14,5,
+0x314e2c,1,
+0x314e34,5,
+0x314e4c,1,
+0x314e54,5,
+0x314e6c,1,
+0x314e74,5,
+0x314e8c,1,
+0x314e94,5,
+0x314eac,1,
+0x314eb4,3,
+0x315000,29,
+0x315078,5,
+0x315090,2,
+0x3150a0,10,
+0x315100,93,
+0x315278,5,
+0x315290,2,
+0x3152a0,10,
+0x315300,93,
+0x315478,5,
+0x315490,2,
+0x3154a0,10,
+0x315500,93,
+0x315678,5,
+0x315690,2,
+0x3156a0,10,
+0x315700,93,
+0x31587c,1,
+0x315a00,8,
+0x315a24,15,
+0x315a64,23,
+0x315ac4,6,
+0x315b00,4,
+0x315b20,3,
+0x315c00,2,
+0x315c40,14,
+0x315c80,9,
+0x315d00,9,
+0x315d2c,1,
+0x315d80,6,
+0x315e00,2,
+0x315e0c,1,
+0x315e14,5,
+0x315e2c,1,
+0x315e34,5,
+0x315e4c,1,
+0x315e54,5,
+0x315e6c,1,
+0x315e74,5,
+0x315e8c,1,
+0x315e94,5,
+0x315eac,1,
+0x315eb4,3,
+0x316000,14,
+0x316070,3,
+0x316080,6,
 0x316100,9,
-0x316400,2,
-0x31640c,6,
-0x316440,13,
-0x316480,16,
-0x316800,1,
-0x316808,3,
-0x31681c,8,
-0x316840,3,
-0x316850,3,
-0x316880,1,
-0x316888,3,
-0x31689c,8,
-0x3168c0,3,
-0x3168d0,3,
-0x316900,1,
-0x316908,3,
-0x31691c,8,
-0x316940,3,
-0x316950,3,
-0x316980,1,
-0x316988,3,
-0x31699c,8,
-0x3169c0,3,
-0x3169d0,3,
-0x316a00,1,
-0x316a08,3,
-0x316a1c,8,
-0x316a40,3,
-0x316a50,3,
-0x316a80,1,
-0x316a88,3,
-0x316a9c,8,
-0x316ac0,3,
-0x316ad0,3,
-0x316b00,1,
-0x316b08,3,
-0x316b1c,8,
-0x316b40,3,
-0x316b50,3,
-0x316b80,1,
-0x316b88,3,
-0x316b9c,8,
-0x316bc0,3,
-0x316bd0,3,
-0x316c00,1,
-0x316c08,3,
-0x316c1c,8,
-0x316c40,3,
-0x316c50,3,
-0x316c80,2,
-0x316c94,13,
+0x316204,1,
+0x31620c,6,
+0x316240,13,
+0x316280,16,
+0x316400,8,
+0x316424,15,
+0x316464,15,
+0x3164a4,15,
+0x3164e4,23,
+0x316544,6,
+0x316580,10,
+0x3165ac,1,
+0x3165b4,5,
+0x3165cc,1,
+0x3165d4,5,
+0x3165ec,1,
+0x3165f4,13,
+0x316680,7,
+0x3166a0,5,
+0x3166c0,5,
+0x3166e0,3,
+0x316800,19,
+0x316850,10,
+0x316880,19,
+0x3168d0,10,
+0x316900,19,
+0x316950,10,
+0x316980,19,
+0x3169d0,10,
+0x316a00,19,
+0x316a50,10,
+0x316a80,19,
+0x316ad0,10,
+0x316b00,19,
+0x316b50,10,
+0x316b80,19,
+0x316bd0,10,
+0x316c00,19,
+0x316c50,10,
+0x316c84,1,
+0x316c94,8,
+0x316cb8,9,
+0x316ce0,4,
 0x317000,6,
 0x317020,3,
-0x317034,1,
 0x317040,7,
 0x317060,6,
 0x317100,5,
 0x317138,1,
 0x317144,1,
-0x317400,1,
-0x317418,1,
-0x317434,1,
-0x31752c,5,
-0x317590,1,
-0x3175ac,1,
-0x3175d8,4,
-0x317600,8,
+0x317150,2,
 0x318000,6,
 0x318020,3,
 0x318030,9,
-0x318080,6,
-0x318100,20,
+0x318100,6,
+0x318120,10,
+0x318150,8,
 0x318400,1,
-0x318418,1,
-0x318434,1,
-0x31852c,4,
-0x318590,1,
+0x318428,1,
+0x318450,1,
+0x318478,1,
+0x3184a0,8,
 0x3185ac,1,
 0x3185d8,4,
-0x318600,8,
+0x318600,6,
+0x318620,6,
+0x318640,3,
+0x318800,6,
+0x318820,3,
+0x318830,4,
+0x318858,2,
+0x318864,1,
+0x318874,3,
+0x318898,2,
+0x3188a4,1,
+0x3188b4,3,
 0x319000,6,
 0x319020,6,
 0x319040,3,
 0x319080,14,
 0x3190bc,1,
 0x3190c4,13,
-0x3190fc,6,
-0x319120,5,
-0x319190,10,
-0x319200,16,
-0x319244,32,
-0x319300,26,
+0x3190fc,5,
+0x319120,4,
+0x319140,3,
+0x319180,3,
+0x319190,3,
+0x3191a0,1,
+0x3191e0,6,
+0x319200,20,
+0x31925c,30,
+0x319300,24,
 0x319380,2,
 0x3193a0,1,
 0x3193c0,11,
-0x319404,4,
-0x319418,16,
+0x319404,3,
+0x319420,11,
 0x319460,3,
+0x319480,6,
 0x319500,6,
+0x319520,6,
 0x319540,1,
 0x319558,2,
 0x319600,17,
-0x319800,366,
+0x319800,410,
 0x31a000,6,
 0x31a020,6,
 0x31a040,3,
 0x31a080,14,
 0x31a0bc,1,
 0x31a0c4,13,
-0x31a0fc,6,
-0x31a120,5,
-0x31a190,10,
-0x31a200,16,
-0x31a244,32,
-0x31a300,26,
+0x31a0fc,5,
+0x31a120,4,
+0x31a140,3,
+0x31a180,3,
+0x31a190,3,
+0x31a1a0,1,
+0x31a1e0,6,
+0x31a200,20,
+0x31a25c,30,
+0x31a300,24,
 0x31a380,2,
 0x31a3a0,1,
 0x31a3c0,11,
-0x31a404,4,
-0x31a418,16,
+0x31a404,3,
+0x31a420,11,
 0x31a460,3,
+0x31a480,6,
 0x31a500,6,
+0x31a520,6,
 0x31a540,1,
 0x31a558,2,
 0x31a600,17,
-0x31a800,366,
+0x31a800,410,
 0x31b000,4,
-0x31b020,9,
-0x31b048,6,
-0x31b064,6,
-0x31b080,1,
+0x31b020,25,
+0x31b088,8,
 0x31b100,4,
-0x31b120,9,
-0x31b148,6,
-0x31b164,6,
-0x31b180,1,
-0x31b200,35,
-0x31b290,6,
-0x31b2b4,6,
-0x31b2d0,5,
-0x31b2e8,5,
+0x31b120,25,
+0x31b188,8,
+0x31b200,34,
 0x31b300,37,
-0x31b400,6,
-0x31b420,3,
-0x31b438,4,
-0x31b454,3,
-0x31b478,4,
-0x31b494,3,
+0x31b400,16,
+0x31b464,1,
+0x31b474,3,
+0x31b500,6,
+0x31b520,2,
+0x31b530,9,
+0x31b570,10,
+0x31b5a0,2,
+0x31b5b0,9,
+0x31b5f0,4,
+0x31b620,7,
+0x31b640,16,
+0x31b700,6,
+0x31b720,6,
+0x31b740,6,
+0x31b760,6,
+0x31b780,3,
 0x31b800,5,
 0x31b818,1,
 0x31b854,6,
 0x31b880,2,
 0x31b8a4,1,
+0x31b8ac,2,
 0x31ba00,28,
-0x31ba7c,5,
-0x31bab0,2,
+0x31ba7c,13,
+0x31bab4,1,
 0x31babc,10,
-0x31bb00,2,
-0x31bb0c,7,
+0x31bb04,1,
+0x31bb0c,5,
+0x31bb24,1,
 0x31bb34,9,
 0x31bb60,6,
-0x31bb80,8,
+0x31bb80,22,
+0x31bbe0,3,
+0x31bbf0,2,
 0x31bc00,5,
 0x31bc18,1,
 0x31bc54,6,
 0x31bc80,2,
 0x31bca4,1,
+0x31bcac,2,
 0x31be00,28,
-0x31be7c,5,
-0x31beb0,2,
+0x31be7c,13,
+0x31beb4,1,
 0x31bebc,10,
-0x31bf00,2,
-0x31bf0c,7,
+0x31bf04,1,
+0x31bf0c,5,
+0x31bf24,1,
 0x31bf34,9,
 0x31bf60,6,
-0x31bf80,8,
-0x31c000,4,
-0x31c014,10,
-0x31c040,1,
-0x31c048,3,
-0x31c058,1,
-0x31c060,1,
+0x31bf80,22,
+0x31bfe0,3,
+0x31bff0,2,
+0x31c008,2,
+0x31c014,11,
+0x31c044,1,
+0x31c04c,3,
+0x31c05c,1,
+0x31c064,1,
 0x31c07c,1,
-0x31c500,1,
-0x31c518,2,
+0x31c500,2,
+0x31c518,1,
+0x31c520,3,
 0x31c540,6,
-0x31c800,4,
-0x31c814,10,
-0x31c840,1,
-0x31c848,3,
-0x31c858,1,
-0x31c860,1,
+0x31c580,10,
+0x31c808,2,
+0x31c814,11,
+0x31c844,1,
+0x31c84c,3,
+0x31c85c,1,
+0x31c864,1,
 0x31c87c,1,
-0x31cd00,1,
-0x31cd18,2,
+0x31cd00,2,
+0x31cd18,1,
+0x31cd20,3,
 0x31cd40,6,
+0x31cd80,10,
 0x31d800,2,
-0x31d818,2,
-0x31d834,2,
-0x31d92c,6,
-0x31d990,2,
+0x31d828,2,
+0x31d850,2,
+0x31d878,2,
+0x31d8a0,6,
 0x31d9ac,1,
 0x31d9d8,4,
-0x31da00,16,
-0x31dc00,3,
-0x31dc20,2,
-0x31dc40,1,
+0x31da00,6,
+0x31da20,6,
+0x31da40,6,
+0x31da60,6,
+0x31da80,3,
+0x31dc00,6,
+0x31dc20,3,
+0x31dc40,2,
+0x31dc60,1,
index 96298c288f5f0191b42bbf751d73b0069bab1b9c..2a3632791954502ba97130aa8eb392a0d0f42da8 100644 (file)
@@ -56,5 +56,7 @@ int mib_swreset(mfile *mf);
 int mib_get_chunk_size(mfile *mf);
 int mib_acces_reg_mad(mfile *mf, u_int8_t *data);
 
+int mib_smp_set(mfile* mf, u_int8_t* data, u_int16_t attr_id, u_int32_t attr_mod);
+int mib_smp_get(mfile* mf, u_int8_t* data, u_int16_t attr_id, u_int32_t attr_mod);
 
 #endif
index da853970e00d7b4ae052f9dcbe45cd5c8da4f611..3fb30c16d639b452c4cd2b5749f4468a6c50c21b 100644 (file)
@@ -57,7 +57,6 @@
 #include <string.h>
 #include <signal.h>
 
-
 #ifdef MST_UL
 #include <errno.h>
 #include "mtcr.h"
@@ -65,6 +64,7 @@
 #endif
 
 #include "mtcr_ib.h"
+#include <mtcr.h>
 
 #include <infiniband/mad.h>
 
                       return -1;\
                   }\
     } while(0)
+
     #define MY_GetProcAddress(ivm, func_name)  MY_GetPointerAddress(ivm, func_name, f_##func_name)
+    #define MY_GetProcAddressIgnoreFail(ivm, func_name) \
+            ivm->func_name = (f_##func_name)GetProcAddress(ivm->dl_handle, #func_name)
     #define MY_GetVarAddress(ivm, var_name)    MY_GetPointerAddress(ivm, var_name, void*)
 
     #define DLL_HANDLE HINSTANCE
                           return -1;\
                       } \
     } while(0)
+
+    #define MY_DLSYM_IGNORE_FAIL(mf, func_name) \
+                          mf->func_name = dlsym(mf->dl_handle, #func_name)
+
     #define OP_NOT_SUPPORTED EOPNOTSUPP
     #define IBMAD_CALL_CONV
 
@@ -193,8 +200,12 @@ typedef uint8_t* IBMAD_CALL_CONV (*f_ib_vendor_call_via)(void *data, ib_portid_t
                                          const struct ibmad_port *srcport);
 typedef uint8_t* IBMAD_CALL_CONV (*f_smp_query_via)(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
                                     unsigned timeout, const struct ibmad_port *srcport);
+typedef uint8_t* IBMAD_CALL_CONV (*f_smp_query_status_via)(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
+                                    unsigned timeout, int *rstatus, const struct ibmad_port *srcport);
 typedef uint8_t* IBMAD_CALL_CONV (*f_smp_set_via)(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
                                   unsigned timeout, const struct ibmad_port *srcport );
+typedef uint8_t* IBMAD_CALL_CONV (*f_smp_set_status_via)(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
+                                  unsigned timeout, int *rstatus, const struct ibmad_port *srcport );
 
 typedef void IBMAD_CALL_CONV (*f_mad_rpc_set_retries)(struct ibmad_port *port, int retries);
 typedef void IBMAD_CALL_CONV (*f_mad_rpc_set_timeout)(struct ibmad_port *port, int timeout);
@@ -224,7 +235,9 @@ struct __ibvsmad_hndl_t
     f_ib_vendor_call_via        ib_vendor_call_via;
     f_ib_resolve_portid_str_via ib_resolve_portid_str_via;
     f_smp_query_via             smp_query_via;
+    f_smp_query_status_via      smp_query_status_via;
     f_smp_set_via               smp_set_via;
+    f_smp_set_status_via        smp_set_status_via;
     f_mad_rpc_set_retries       mad_rpc_set_retries;
     f_mad_rpc_set_timeout       mad_rpc_set_timeout;
     f_mad_get_field             mad_get_field;
@@ -391,7 +404,9 @@ int process_dynamic_linking(ibvs_mad *ivm, int mad_init)
         MY_GetProcAddress(ivm, ib_vendor_call_via       );
         MY_GetProcAddress(ivm, ib_resolve_portid_str_via);
         MY_GetProcAddress(ivm, smp_query_via            );
+        MY_GetProcAddressIgnoreFail(ivm, smp_query_status_via );
         MY_GetProcAddress(ivm, smp_set_via              );
+        MY_GetProcAddressIgnoreFail(ivm, smp_set_status_via );
         MY_GetProcAddress(ivm, mad_rpc_set_retries      );
         MY_GetProcAddress(ivm, mad_rpc_set_timeout      );
         MY_GetProcAddress(ivm, portid2str               );
@@ -427,7 +442,7 @@ int process_dynamic_linking(ibvs_mad *ivm, int mad_init)
         }
     }
     if (!ivm->dl_handle) {
-        const char* errstr = dlerror();
+        const char* errstr=dlerror();
         IBERROR(("%s", errstr));
         //free(ivm);
         return -1;
@@ -441,12 +456,14 @@ int process_dynamic_linking(ibvs_mad *ivm, int mad_init)
     MY_DLSYM(ivm, ib_vendor_call_via       );
     MY_DLSYM(ivm, ib_resolve_portid_str_via);
     MY_DLSYM(ivm, smp_query_via            );
+    MY_DLSYM_IGNORE_FAIL(ivm, smp_query_status_via );
     MY_DLSYM(ivm, smp_set_via              );
+    MY_DLSYM_IGNORE_FAIL(ivm, smp_set_status_via   );
     MY_DLSYM(ivm, mad_rpc_set_retries      );
     MY_DLSYM(ivm, mad_rpc_set_timeout      );
     MY_DLSYM(ivm, mad_get_field            );
-    MY_DLSYM(ivm, portid2str              );
-    MY_DLSYM(ivm, ibdebug               );
+    MY_DLSYM(ivm, portid2str               );
+    MY_DLSYM(ivm, ibdebug                  );
     return 0;
 }
 
@@ -883,14 +900,92 @@ mib_swreset(mfile *mf)
 
 #define IB_SMP_ATTR_REG_ACCESS 0xff52
 
+static int mib_status_translate(int status)
+{
+    switch ((status >> 2) & 0x7) {
+    case 1:
+        return ME_MAD_BAD_VER;
+    case 2:
+        return ME_MAD_METHOD_NOT_SUPP;
+    case 3:
+        return ME_MAD_METHOD_ATTR_COMB_NOT_SUPP;
+    case 7:
+        return ME_MAD_BAD_DATA;
+    }
+
+    if (status & 0x1)
+        return ME_MAD_BUSY;
+    else if ((status >> 1) & 0x1)
+        return ME_MAD_REDIRECT;
+
+    return ME_MAD_GENERAL_ERR;
+}
+
 int mib_acces_reg_mad(mfile *mf, u_int8_t *data)
 {
     u_int8_t* p;
     ibvs_mad* h = (ibvs_mad*)(mf->ctx);
+    int status = -1;
+
     // Call smp set function
-    p = h->smp_set_via(data, &(h->portid), IB_SMP_ATTR_REG_ACCESS, 0, 0, h->srcport);
-    if (!p) {
-        return -1;
+    if (h->smp_set_status_via) {
+        p = h->smp_set_status_via(data, &(h->portid), IB_SMP_ATTR_REG_ACCESS, 0, 0, &status, h->srcport);
+    } else {
+        p = h->smp_set_via(data, &(h->portid), IB_SMP_ATTR_REG_ACCESS, 0, 0, h->srcport);
     }
-    return 0;
+    if (!p || status > 0) {
+        if (status != -1) {
+            return mib_status_translate(status);
+        } else {
+            return -1;
+        }
+    }
+
+    return ME_OK;
+}
+
+int mib_smp_set(mfile* mf, u_int8_t* data, u_int16_t attr_id, u_int32_t attr_mod)
+{
+    u_int8_t* p;
+    int status = -1;
+    ibvs_mad* h = (ibvs_mad*)(mf->ctx);
+    // Call smp set function
+    if (h->smp_set_status_via) {
+        p = h->smp_set_status_via(data, &(h->portid), attr_id, attr_mod, 0, &status, h->srcport);
+    } else {
+        p = h->smp_set_via(data, &(h->portid), attr_id, attr_mod, 0, h->srcport);
+    }
+    if (!p || status > 0) {
+        if (status != -1) {
+            return mib_status_translate(status);
+        } else {
+            return -1;
+        }
+    }
+
+    return ME_OK;
+}
+
+int mib_smp_get(mfile* mf, u_int8_t* data, u_int16_t attr_id, u_int32_t attr_mod)
+{
+    u_int8_t* p;
+    int status = -1;
+    ibvs_mad* h = (ibvs_mad*)(mf->ctx);
+
+    // Call smp set function
+    if (h->smp_query_status_via) {
+        p = h->smp_query_status_via(data, &(h->portid), attr_id, attr_mod, 0, &status, h->srcport);
+    } else {
+        p = h->smp_query_via(data, &(h->portid), attr_id, attr_mod, 0, h->srcport);
+    }
+
+    if (!p || status > 0) {
+        if (status != -1) {
+            return mib_status_translate(status);
+        } else {
+            return -1;
+        }
+    }
+
+    return ME_OK;
 }
index 3efe2daed32446b89ba1856603bc11125a143752..1cae007bb19b92bca5ded94e38b480f272671aa5 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
index b6f83c40b689034a7635784e3f21f060c9ce628e..87caa05c4b49668ddea2c447aa9c5a6a379c5ea8 100644 (file)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -234,12 +233,17 @@ static int translate_status(int status) {
        switch (status) {
        case 0x0:
                return ME_OK;
+       case 0x1:
+           return ME_CMDIF_BUSY;
        case 0x2:
                return ME_CMDIF_BAD_OP;
+       case 0x3:
+           return ME_CMDIF_UNKN_TLV;
        case 0x4:
                return ME_CMDIF_BAD_SYS;
        default:
-               return ME_CR_ERROR;
+           //fprintf(stderr, "-D- Unknown status: 0x%x\n", status);
+               return ME_CMDIF_BAD_STATUS;
        }
 }
 
@@ -258,7 +262,7 @@ static int tools_cmdif_mbox_read(mfile* mf, u_int32_t offset, u_int64_t* output)
        *output = cmdif.out_param;
        //printf("-D- outparam: 0x%lx\n", cmdif.out_param);
        if (rc || cmdif.status) {
-               return ME_CR_ERROR;
+               return rc ? rc : translate_status(cmdif.status);
        }
        //printf("-D- mbox read OK\n");
        return ME_OK;
@@ -278,7 +282,7 @@ static int tools_cmdif_mbox_write(mfile* mf, u_int32_t offset, u_int64_t input)
        int rc = tools_cmdif_send_cmd_int(mf, &cmdif);
 
        if (rc || cmdif.status) {
-               return ME_CR_ERROR;
+               return rc ? rc : translate_status(cmdif.status);
        }
        return ME_OK;
 }
index 704d5e620c9d864c6034729d8abf319598288ee9..7d3c8b54faa62764d9b0e8898e5e90571d3b22e4 100644 (file)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef _MTCR_TOOLS_CIF     /* guard */
 #define _MTCR_TOOLS_CIF
 
index cef82f29387a6d2ec441963b79e55afdfc2f59e4..5a49e73829632924a766bd3a24bf35687fed38c7 100644 (file)
@@ -428,7 +428,7 @@ int mtcr_mmap(struct pcicr_context *mf, const char *name, off_t off, int ioctl_n
             return -1;
             }
         }
-    */
+     */
     mf->fd = open(name, O_RDWR | O_SYNC);
     if (mf->fd < 0)
         return -1;
@@ -456,6 +456,7 @@ int mtcr_mmap(struct pcicr_context *mf, const char *name, off_t off, int ioctl_n
 int mtcr_pcicr_mread4(mfile *mf, unsigned int offset, u_int32_t *value)
 {
     struct pcicr_context *ctx = mf->ctx;
+
     if (offset >= MTCR_MAP_SIZE) {
         errno = EINVAL;
         return 0;
@@ -908,6 +909,10 @@ dev_info* mdevices_info(int mask, int* len)
         rc = mdevices(devs, size, mask);
     } while (rc == -1);
 
+    if ( rc <= 0 ) {
+        len = 0;
+        return NULL;
+    }
     // For each device read
     dev_info* dev_info_arr = (dev_info*) malloc(sizeof(dev_info)*rc);
     memset(dev_info_arr, 0, sizeof(dev_info)*rc);
@@ -1476,7 +1481,7 @@ static int mreg_send_wrapper(mfile* mf, u_int8_t *data, int r_icmd_size, int w_i
                 return ME_MAD_SEND_FAILED;
             }
     } else if (supports_icmd(mf)) {
-    #ifdef MST_UL //ugly hack to avoid compiler warrnings
+    #if defined(MST_UL) && !defined(MST_UL_ICMD) //ugly hack to avoid compiler warrnings
         if (0) {
             rc = icmd_send_command_int(mf, FLASH_REG_ACCESS, data, w_icmd_size, r_icmd_size, 0);
         }
@@ -1719,15 +1724,34 @@ const char* m_err2str(MError status)
 
        // TOOLS HCR access errors
    case ME_CMDIF_BUSY:
-          return "Tools HCR busy.";
+          return "Tools HCR busy";
    case ME_CMDIF_TOUT:
-          return "Tools HCR time out.";
+          return "Tools HCR time out";
    case ME_CMDIF_BAD_OP:
           return "Operation not supported";
    case ME_CMDIF_NOT_SUPP:
-          return "Tools HCR not supported.";
+          return "Tools HCR not supported";
    case ME_CMDIF_BAD_SYS:
-          return "bad system status (driver may be down or Fw does not support this operation).";
+          return "bad system status (driver may be down or Fw does not support this operation)";
+   case ME_CMDIF_UNKN_TLV:
+       return "Unknown TLV";
+
+    // MAD IFC errors
+   case ME_MAD_BUSY:
+       return "Temporarily busy. MAD discarded. This is not an error";
+   case ME_MAD_REDIRECT:
+       return "Redirection. This is not an error";
+   case ME_MAD_BAD_VER:
+       return "Bad version";
+   case ME_MAD_METHOD_NOT_SUPP:
+       return "Method not supported";
+   case ME_MAD_METHOD_ATTR_COMB_NOT_SUPP:
+       return "Method and attribute combination isn't supported";
+   case ME_MAD_BAD_DATA:
+       return "Bad attribute modifer or field";
+   case ME_MAD_GENERAL_ERR:
+       return "Unknown MAD error";
+
    default:
        return "Unknown error code";
    }
index 14c3d31f89ff0f65c9928462f2a45470470ba3b7..24823612d3710f8a1251f9fc54da07ecdfee463b 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #include "packets_common.h"
 #include <stdio.h>
 #include <stdlib.h>
index e67bd06df02dbf27c05b2a15200b9bc4c1f04103..daf28fe615b177b25a71cbbf15f785ece9e12f69 100644 (file)
  *      - Redistributions of source code must retain the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer.
- * 
+ *
  *      - Redistributions in binary form must reproduce the above
  *        copyright notice, this list of conditions and the following
  *        disclaimer in the documentation and/or other materials
  *        provided with the distribution.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef packet_common_H
 #define packet_common_H
 
index 337170a364195fcc4974e66a03eb4305121bd6a6..f6b92c2d4bde2dcfa8c7efb3ec180c49e0963491 100644 (file)
  * SOFTWARE.
  */
 
-
 #include "reg_access.h"
 
-#define REG_ID_PPTCS 0x5801
-#define REG_ID_PGMP  0x5802
-#define REG_ID_PPTS  0x5803
-#define REG_ID_PLTS  0x5804
-#define REG_ID_PLSRP 0x5805
-#define REG_ID_PGPS  0x5806
-#define REG_ID_PAOS  0x5006
-#define REG_ID_PTYS  0x5004
-#define REG_ID_MCIA  0x9014
-#define REG_ID_MTMP  0x900a
-#define REG_ID_PMLP  0x5002
 #define REG_ID_MFPA  0x9010
 #define REG_ID_MFBA  0x9011
 #define REG_ID_MFBE  0x9012
+#define REG_ID_PMDIO 0x9017
+#define REG_ID_PMDIC 0x9021
 #define REG_ID_MNVA  0x9024
 #define REG_ID_MNVI  0x9025
 #define REG_ID_MNVIA 0x9029
 
-// for debug:
-#ifdef _ENABLE_DEBUG_
-# define DEBUG_PRINT_SEND(data_struct, struct_name)\
-       printf("-I- Data Sent:\n");\
-       register_access_##struct_name##_print(data_struct, stdout, 1)
-# define DEBUG_PRINT_RECIEVE(data_struct, struct_name)\
-       printf("-I- Data Recieved:\n");\
-       register_access_##struct_name##_print(data_struct, stdout, 1)
-#else
-# define DEBUG_PRINT_SEND(data_struct, struct_name)
-# define DEBUG_PRINT_RECIEVE(data_struct, struct_name)
-#endif
+// TODO: get correct register ID for mfrl mfai
+#define REG_ID_MFRL 0x9028
+#define REG_ID_MFAI 0x9029
 
 // for debug:
+//#define _ENABLE_DEBUG_
 #ifdef _ENABLE_DEBUG_
-# define DEBUG_PRINT_SEND2(data_struct, struct_name)\
-       printf("-I- Data Sent:\n");\
-       tools_##struct_name##_print(data_struct, stdout, 1)
-# define DEBUG_PRINT_RECIEVE2(data_struct, struct_name)\
-       printf("-I- Data Recieved:\n");\
-       tools_##struct_name##_print(data_struct, stdout, 1)
+# define DEBUG_PRINT_SEND(data_struct, struct_name, method, prefix)\
+       printf("-I- Data Sent (Method: %s):\n", method == REG_ACCESS_METHOD_SET ? "SET" : "GET");\
+       prefix##_##struct_name##_print(data_struct, stdout, 1)
+# define DEBUG_PRINT_RECIEVE(data_struct, struct_name, method, prefix)\
+       printf("-I- Data Received (Mehtod: %s):\n", method == REG_ACCESS_METHOD_SET ? "SET" : "GET");\
+       prefix##_##struct_name##_print(data_struct, stdout, 1)
 #else
-# define DEBUG_PRINT_SEND2(data_struct, struct_name)
-# define DEBUG_PRINT_RECIEVE2(data_struct, struct_name)
+# define DEBUG_PRINT_SEND(data_struct, struct_name, method, prefix)
+# define DEBUG_PRINT_RECIEVE(data_struct, struct_name, method, prefix)
 #endif
 
 /***************************************************/
 
 // register access for variable size registers (like mfba)
 
-#define REG_ACCCESS_VAR(mf, methdod, reg_id, data_struct, struct_name, reg_size , r_reg_size, w_reg_size)\
-    int status = 0, rc;\
-    int max_data_size = register_access_##struct_name##_size();\
+#define REG_ACCCESS_VAR(mf, methdod, reg_id, data_struct, struct_name, reg_size , r_reg_size, w_reg_size, prefix)\
+    int status = 0;\
+    int rc;\
+    int max_data_size = prefix##_##struct_name##_size();\
     u_int8_t data[max_data_size];\
-    register_access_##struct_name##_pack(data_struct, data);\
+    prefix##_##struct_name##_pack(data_struct, data);\
     if (method != REG_ACCESS_METHOD_GET && method != REG_ACCESS_METHOD_SET) {\
         return ME_REG_ACCESS_BAD_METHOD;\
     }\
-    DEBUG_PRINT_SEND(data_struct, struct_name);\
+    DEBUG_PRINT_SEND(data_struct, struct_name, method, prefix);\
     rc = maccess_reg(mf, reg_id, (maccess_reg_method_t)method, data, reg_size, r_reg_size, w_reg_size, &status);\
-    register_access_##struct_name##_unpack(data_struct, data);\
-    DEBUG_PRINT_RECIEVE(data_struct, struct_name);\
+    prefix##_##struct_name##_unpack(data_struct, data);\
+    DEBUG_PRINT_RECIEVE(data_struct, struct_name, method, prefix);\
     if (rc || status) {\
         return (reg_access_status_t)rc;\
     }\
     return ME_OK
 
 // register access for static sized registers
-#define REG_ACCCESS(mf, methdod, reg_id, data_struct, struct_name)\
-       int data_size = register_access_##struct_name##_size();\
-       REG_ACCCESS_VAR(mf, methdod, reg_id, data_struct, struct_name, data_size, data_size, data_size)\
-
-
-// register access for registers defined in tools.adb  (this is why I DONT like MACROS!!!)
-
-#define REG_ACCESS_TOOLS(mf, methdod, reg_id, data_struct, struct_name, reg_size , r_reg_size, w_reg_size)\
-    int status = 0, rc;\
-    int max_data_size = tools_##struct_name##_size();\
-    u_int8_t data[max_data_size];\
-    tools_##struct_name##_pack(data_struct, data);\
-    if (method != REG_ACCESS_METHOD_GET && method != REG_ACCESS_METHOD_SET) {\
-        return ME_REG_ACCESS_BAD_METHOD;\
-    }\
-    DEBUG_PRINT_SEND2(data_struct, struct_name);\
-    rc = maccess_reg(mf, reg_id, (maccess_reg_method_t)method, data, reg_size, r_reg_size, w_reg_size, &status);\
-    tools_##struct_name##_unpack(data_struct, data);\
-    DEBUG_PRINT_RECIEVE2(data_struct, struct_name);\
-    if (rc || status) {\
-        return (reg_access_status_t)rc;\
-    }\
-    return ME_OK
-
+#define REG_ACCCESS(mf, methdod, reg_id, data_struct, struct_name, prefix)\
+       int data_size = prefix##_##struct_name##_size();\
+       REG_ACCCESS_VAR(mf, methdod, reg_id, data_struct, struct_name, data_size, data_size, data_size, prefix)
 
 /************************************
  * Function: reg_access_mfba
@@ -141,7 +103,7 @@ reg_access_status_t reg_access_mfba(mfile* mf, reg_access_method_t method, struc
                r_size_reg -= mfba->size;
        }
        //printf("-D- MFBA: data size: %d, reg_size: %d, r_size_reg: %d, w_size_reg: %d\n",mfba->size,reg_size,r_size_reg,w_size_reg);
-    REG_ACCCESS_VAR(mf, method, REG_ID_MFBA, mfba, mfba, reg_size, r_size_reg, w_size_reg);
+    REG_ACCCESS_VAR(mf, method, REG_ID_MFBA, mfba, mfba, reg_size, r_size_reg, w_size_reg, register_access);
 }
 
 /************************************
@@ -149,7 +111,7 @@ reg_access_status_t reg_access_mfba(mfile* mf, reg_access_method_t method, struc
  ************************************/
 reg_access_status_t reg_access_mfbe(mfile* mf, reg_access_method_t method, struct register_access_mfbe* mfbe)
 {
-    REG_ACCCESS(mf, method, REG_ID_MFBE, mfbe, mfbe);
+    REG_ACCCESS(mf, method, REG_ID_MFBE, mfbe, mfbe, register_access);
 }
 
 /************************************
@@ -157,16 +119,16 @@ reg_access_status_t reg_access_mfbe(mfile* mf, reg_access_method_t method, struc
  ************************************/
 reg_access_status_t reg_access_mfpa(mfile* mf, reg_access_method_t method, struct register_access_mfpa* mfpa)
 {
-    REG_ACCCESS(mf, method, REG_ID_MFPA, mfpa, mfpa);
+    REG_ACCCESS(mf, method, REG_ID_MFPA, mfpa, mfpa, register_access);
 }
 
 /************************************
  * Function: reg_access_mnva
  ************************************/
-reg_access_status_t reg_access_mnva (mfile* mf, reg_access_method_t method, struct tools_mnva* mnva)
+reg_access_status_t reg_access_mnva (mfile* mf, reg_access_method_t method, struct tools_open_mnva* mnva)
 {
        // reg_size is in bytes
-       u_int32_t reg_size = (mnva->mnv_hdr.length << 2) + tools_mnv_hdr_size();
+       u_int32_t reg_size = (mnva->mnv_hdr.length << 2) + tools_open_mnv_hdr_size();
        u_int32_t r_size_reg = reg_size;
        u_int32_t w_size_reg= reg_size;
        if (method == REG_ACCESS_METHOD_GET) {
@@ -174,31 +136,29 @@ reg_access_status_t reg_access_mnva (mfile* mf, reg_access_method_t method, stru
        } else {
                r_size_reg -= mnva->mnv_hdr.length << 2;
        }
-       REG_ACCESS_TOOLS(mf, method, REG_ID_MNVA, mnva, mnva, reg_size , r_size_reg, w_size_reg);
+       REG_ACCCESS_VAR(mf, method, REG_ID_MNVA, mnva, mnva, reg_size , r_size_reg, w_size_reg, tools_open);
 }
 
 /************************************
  * Function: reg_access_mnvi
  ************************************/
-reg_access_status_t reg_access_mnvi (mfile* mf, reg_access_method_t method, struct tools_mnvi* mnvi)
+reg_access_status_t reg_access_mnvi (mfile* mf, reg_access_method_t method, struct tools_open_mnvi* mnvi)
 {
        if (method != REG_ACCESS_METHOD_SET ) { // this register supports only set method
                return ME_REG_ACCESS_BAD_METHOD;
        }
-       u_int32_t reg_size = tools_mnvi_size();
-       REG_ACCESS_TOOLS(mf, method, REG_ID_MNVI, mnvi, mnvi, reg_size , reg_size, reg_size);
+       REG_ACCCESS(mf, method, REG_ID_MNVI, mnvi, mnvi, tools_open);
 }
 
 /************************************
- * Function: reg_access_mnvia
+ * Function: reg_access_mnvi
  ************************************/
-reg_access_status_t reg_access_mnvia (mfile* mf, reg_access_method_t method, struct tools_mnvia* mnvia)
+reg_access_status_t reg_access_mnvia (mfile* mf, reg_access_method_t method, struct tools_open_mnvia* mnvia)
 {
        if (method != REG_ACCESS_METHOD_SET ) { // this register supports only set method
                return ME_REG_ACCESS_BAD_METHOD;
        }
-       u_int32_t reg_size = tools_mnvia_size();
-       REG_ACCESS_TOOLS(mf, method, REG_ID_MNVIA, mnvia, mnvia, reg_size , reg_size, reg_size);
+       REG_ACCCESS(mf, method, REG_ID_MNVIA, mnvia, mnvia, tools_open);
 }
 
 /************************************
index 6176dfed51b10b5f5e89784d0e5c7076572561e2..c021ab9b1ea54fbd6e888e898830697b73e5a575 100644 (file)
@@ -30,7 +30,6 @@
  * SOFTWARE.
  */
 
-
 #ifndef REG_ACCESS_H
 #define REG_ACCESS_H
 #ifdef __cplusplus
@@ -38,10 +37,10 @@ extern "C" {
 #endif
 
 #include <mtcr.h>
-#include <tools_layouts/register_access_layouts.h>
+#include <tools_layouts/register_access_open_layouts.h>
 
 // Hack, we include this for the MNV registers as they are not officialy a part of register_access so we defined them in tools.adb
-#include <tools_layouts/tools_layouts.h>
+#include <tools_layouts/tools_open_layouts.h>
 
 enum { // header lengths in bytes
     REG_ACCESS_MFBA_HEADER_LEN = 12,
@@ -55,13 +54,14 @@ typedef enum {
 // we use the same error messages as mtcr
 typedef MError reg_access_status_t;
 
+
 const char* reg_access_err2str(reg_access_status_t status);
 reg_access_status_t reg_access_mfba (mfile* mf, reg_access_method_t method, struct register_access_mfba* mfba);
 reg_access_status_t reg_access_mfbe (mfile* mf, reg_access_method_t method, struct register_access_mfbe* mfbe);
 reg_access_status_t reg_access_mfpa (mfile* mf, reg_access_method_t method, struct register_access_mfpa* mfpa);
-reg_access_status_t reg_access_mnva (mfile* mf, reg_access_method_t method, struct tools_mnva* mnva);
-reg_access_status_t reg_access_mnvi (mfile* mf, reg_access_method_t method, struct tools_mnvi* mnvi);
-reg_access_status_t reg_access_mnvia (mfile* mf, reg_access_method_t method, struct tools_mnvia* mnvia);
+reg_access_status_t reg_access_mnva (mfile* mf, reg_access_method_t method, struct tools_open_mnva* mnva);
+reg_access_status_t reg_access_mnvi (mfile* mf, reg_access_method_t method, struct tools_open_mnvi* mnvi);
+reg_access_status_t reg_access_mnvia (mfile* mf, reg_access_method_t method, struct tools_open_mnvia* mnvia);
 
 #ifdef __cplusplus
 }
index 6bd767085d59b2bbd18da018f327be2653e1078a..acd4fd9257a609fd1366e32d9e8f572c612573ba 100755 (executable)
@@ -144,6 +144,7 @@ fi
 
 
 mlx4_core_ko=`modinfo mlx4_core | grep filename | awk '{print $NF}'`
+mlx4_core_ko=`readlink -f $mlx4_core_ko`
 if [ $OS_TYPE = "DEBIAN" ]; then
     RPM_CHECK_FAIL=0
     RPM_CUR_BOOTED_KER=1
index 0717143c11eab150fd092f0fd0bf30410874847c..a760c43fcad9ffbb00bbe99948047eebad3d2adb 100644 (file)
@@ -36,6 +36,5 @@ AM_CFLAGS = -Wall -W -g -MP -MD -pipe $(COMPILER_FPIC)
 noinst_LIBRARIES = libtools_layouts.a
 
 libtools_layouts_a_SOURCES = cibfw_layouts.c adb_to_c_utils.c adb_to_c_utils.h cibfw_layouts.h \
-                                                               register_access_layouts.c register_access_layouts.c \
-                                                               tools_layouts.c tools_layouts.h
-
+                                                               register_access_open_layouts.h register_access_open_layouts.c \
+                                                               tools_open_layouts.c tools_open_layouts.h
diff --git a/tools_layouts/register_access_layouts.c b/tools_layouts/register_access_layouts.c
deleted file mode 100644 (file)
index 8120255..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/***
- *** This file was generated at "2014-03-11 10:09:59"
- *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access.adb --file-prefix register_access --prefix register_access_
- ***    and modified to fit the needs of mstflint.
- ***/
-#include "register_access_layouts.h"
-
-void register_access_Byte_pack(const struct register_access_Byte *ptr_struct, u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=0;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->val);
-
-}
-
-void register_access_Byte_unpack(struct register_access_Byte *ptr_struct, const u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=0;
-       ptr_struct->val = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-
-}
-
-void register_access_Byte_print(const struct register_access_Byte *ptr_struct, FILE* file, int indent_level){
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "======== Byte ========\n");
-       int i=0;
-       (void)i;(void)ptr_struct;
-       (void)file;
-       (void)indent_level;
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "val                  : "UH_FMT"\n", ptr_struct->val);
-
-}
-
-int register_access_Byte_size(){
-        return 1;
-}
-
-void register_access_Byte_dump(const struct register_access_Byte *ptr_struct, FILE* file) {
-       register_access_Byte_print(ptr_struct, file, 0);
-}
-
-void register_access_mfpa_pack(const struct register_access_mfpa *ptr_struct, u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
-
-       offset=23;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
-
-       offset=40;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->boot_address);
-
-       offset=156;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->flash_num);
-
-       offset=168;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->jedec_id);
-
-       offset=214;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->sector_size);
-
-       offset=200;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->block_allignment);
-
-       offset=224;
-       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->capability_mask);
-
-}
-
-void register_access_mfpa_unpack(struct register_access_mfpa *ptr_struct, const u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-       offset=23;
-       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-       offset=40;
-       ptr_struct->boot_address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
-
-       offset=156;
-       ptr_struct->flash_num = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
-
-       offset=168;
-       ptr_struct->jedec_id = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
-
-       offset=214;
-       ptr_struct->sector_size = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
-
-       offset=200;
-       ptr_struct->block_allignment = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-
-       offset=224;
-       ptr_struct->capability_mask = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
-
-}
-
-void register_access_mfpa_print(const struct register_access_mfpa *ptr_struct, FILE* file, int indent_level){
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "======== mfpa ========\n");
-       int i=0;
-       (void)i;(void)ptr_struct;
-       (void)file;
-       (void)indent_level;
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "boot_address         : "UH_FMT"\n", ptr_struct->boot_address);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "flash_num            : "UH_FMT"\n", ptr_struct->flash_num);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "jedec_id             : "UH_FMT"\n", ptr_struct->jedec_id);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "sector_size          : "UH_FMT"\n", ptr_struct->sector_size);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "block_allignment     : "UH_FMT"\n", ptr_struct->block_allignment);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "capability_mask      : "U32H_FMT"\n", ptr_struct->capability_mask);
-
-}
-
-int register_access_mfpa_size(){
-        return 36;
-}
-
-void register_access_mfpa_dump(const struct register_access_mfpa *ptr_struct, FILE* file) {
-       register_access_mfpa_print(ptr_struct, file, 0);
-}
-
-void register_access_mfba_pack(const struct register_access_mfba *ptr_struct, u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
-
-       offset=23;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
-
-       offset=55;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 9, (u_int32_t)ptr_struct->size);
-
-       offset=72;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->address);
-
-       for (i=0; i < 64; i++) {
-       offset=adb2c_calc_array_field_address(96, 32, i, 2144, 0);
-       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->data[i]);
-       }
-
-}
-
-void register_access_mfba_unpack(struct register_access_mfba *ptr_struct, const u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-       offset=23;
-       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-       offset=55;
-       ptr_struct->size = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 9);
-
-       offset=72;
-       ptr_struct->address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
-
-       for (i=0; i < 64; i++) {
-       offset=adb2c_calc_array_field_address(96, 32, i, 2144, 0);
-       ptr_struct->data[i] = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
-       }
-
-}
-
-void register_access_mfba_print(const struct register_access_mfba *ptr_struct, FILE* file, int indent_level){
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "======== mfba ========\n");
-       int i=0;
-       (void)i;(void)ptr_struct;
-       (void)file;
-       (void)indent_level;
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "size                 : "UH_FMT"\n", ptr_struct->size);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "address              : "UH_FMT"\n", ptr_struct->address);
-
-       for (i=0; i < 64; i++) {
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "data[%3d]            : "U32H_FMT"\n", i, ptr_struct->data[i]);
-       }
-
-}
-
-int register_access_mfba_size(){
-        return 268;
-}
-
-void register_access_mfba_dump(const struct register_access_mfba *ptr_struct, FILE* file) {
-       register_access_mfba_print(ptr_struct, file, 0);
-}
-
-void register_access_mfbe_pack(const struct register_access_mfbe *ptr_struct, u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
-
-       offset=23;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
-
-       offset=72;
-       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->address);
-
-}
-
-void register_access_mfbe_unpack(struct register_access_mfbe *ptr_struct, const u_int8_t* ptr_buff){
-       u_int32_t offset;
-       int i=0;
-       (void)offset;
-       (void)i;
-       (void)ptr_struct;
-       (void)ptr_buff;
-
-       offset=26;
-       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-       offset=23;
-       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-       offset=72;
-       ptr_struct->address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
-
-}
-
-void register_access_mfbe_print(const struct register_access_mfbe *ptr_struct, FILE* file, int indent_level){
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "======== mfbe ========\n");
-       int i=0;
-       (void)i;(void)ptr_struct;
-       (void)file;
-       (void)indent_level;
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
-
-       adb2c_add_indentation(file, indent_level);
-       fprintf(file, "address              : "UH_FMT"\n", ptr_struct->address);
-
-}
-
-int register_access_mfbe_size(){
-        return 12;
-}
-
-void register_access_mfbe_dump(const struct register_access_mfbe *ptr_struct, FILE* file) {
-       register_access_mfbe_print(ptr_struct, file, 0);
-}
diff --git a/tools_layouts/register_access_layouts.h b/tools_layouts/register_access_layouts.h
deleted file mode 100644 (file)
index dda2ab3..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/***
- *** This file was generated at "2014-03-11 10:09:59"
- *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access.adb --file-prefix register_access --prefix register_access_
- ***    and modified to fit the needs of mstflint.
- ***/
-#ifndef REGISTER_ACCESS_LAYOUTS_H
-#define REGISTER_ACCESS_LAYOUTS_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "adb_to_c_utils.h"/* Description -   */
-/* Size in bytes - 1 */
-struct register_access_Byte {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-       /* Description -  */
-       /* 0.0 - 0.7 */
-        u_int8_t val;
-};
-
-/* Description -   */
-/* Size in bytes - 36 */
-struct register_access_mfpa {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-       /* Description - Flash Select */
-       /* 0.4 - 0.5 */
-        u_int8_t fs;
-       /* Description - Parallel */
-       /* 0.8 - 0.8 */
-        u_int8_t p;
-/*---------------- DWORD[1] (Offset 0x4) ----------------*/
-       /* Description - address in bytes */
-       /* 4.0 - 4.23 */
-        u_int32_t boot_address;
-/*---------------- DWORD[4] (Offset 0x10) ----------------*/
-       /* Description - number of flash devices connected */
-       /* 16.0 - 16.3 */
-        u_int8_t flash_num;
-/*---------------- DWORD[5] (Offset 0x14) ----------------*/
-       /* Description - Flash JEDEC ID */
-       /* 20.0 - 20.23 */
-        u_int32_t jedec_id;
-/*---------------- DWORD[6] (Offset 0x18) ----------------*/
-       /* Description - Flash sectore size */
-       /* 24.0 - 24.9 */
-        u_int16_t sector_size;
-       /* Description -  */
-       /* 24.16 - 24.23 */
-        u_int8_t block_allignment;
-/*---------------- DWORD[7] (Offset 0x1c) ----------------*/
-       /* Description - capability mask ;bit 0:Parallel flash Support;else:Reserved  */
-       /* 28.0 - 32.31 */
-        u_int32_t capability_mask;
-};
-
-/* Description -   */
-/* Size in bytes - 268 */
-struct register_access_mfba {/* Nodes */
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-       /* Description - Flash Select */
-       /* 0.4 - 0.5 */
-        u_int8_t fs;
-       /* Description - Parallel */
-       /* 0.8 - 0.8 */
-        u_int8_t p;
-/*---------------- DWORD[1] (Offset 0x4) ----------------*/
-       /* Description - Transaction size */
-       /* 4.0 - 4.8 */
-        u_int16_t size;
-/*---------------- DWORD[2] (Offset 0x8) ----------------*/
-       /* Description - address in bytes */
-       /* 8.0 - 8.23 */
-        u_int32_t address;
-/*---------------- DWORD[3] (Offset 0xc) ----------------*/
-       /* Description - data */
-       /* 12.0 - 268.31 */
-        u_int32_t data[64];
-};
-
-/* Description -   */
-/* Size in bytes - 12 */
-struct register_access_mfbe {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-       /* Description - Flash Select */
-       /* 0.4 - 0.5 */
-        u_int8_t fs;
-       /* Description - Parallel */
-       /* 0.8 - 0.8 */
-        u_int8_t p;
-/*---------------- DWORD[2] (Offset 0x8) ----------------*/
-       /* Description - address in bytes */
-       /* 8.0 - 8.23 */
-        u_int32_t address;
-};
-
-/*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
-/* Byte */
-void register_access_Byte_pack(const struct register_access_Byte *ptr_struct, u_int8_t* ptr_buff);
-void register_access_Byte_unpack(struct register_access_Byte *ptr_struct, const u_int8_t* ptr_buff);
-void register_access_Byte_print(const struct register_access_Byte *ptr_struct, FILE* file, int indent_level);
-int register_access_Byte_size();
-#define REGISTER_ACCESS_BYTE_SIZE    (0x1)
-void register_access_Byte_dump(const struct register_access_Byte *ptr_struct, FILE* file);
-/* mfpa */
-void register_access_mfpa_pack(const struct register_access_mfpa *ptr_struct, u_int8_t* ptr_buff);
-void register_access_mfpa_unpack(struct register_access_mfpa *ptr_struct, const u_int8_t* ptr_buff);
-void register_access_mfpa_print(const struct register_access_mfpa *ptr_struct, FILE* file, int indent_level);
-int register_access_mfpa_size();
-#define REGISTER_ACCESS_MFPA_SIZE    (0x24)
-void register_access_mfpa_dump(const struct register_access_mfpa *ptr_struct, FILE* file);
-/* mfba */
-void register_access_mfba_pack(const struct register_access_mfba *ptr_struct, u_int8_t* ptr_buff);
-void register_access_mfba_unpack(struct register_access_mfba *ptr_struct, const u_int8_t* ptr_buff);
-void register_access_mfba_print(const struct register_access_mfba *ptr_struct, FILE* file, int indent_level);
-int register_access_mfba_size();
-#define REGISTER_ACCESS_MFBA_SIZE    (0x10c)
-void register_access_mfba_dump(const struct register_access_mfba *ptr_struct, FILE* file);
-/* mfbe */
-void register_access_mfbe_pack(const struct register_access_mfbe *ptr_struct, u_int8_t* ptr_buff);
-void register_access_mfbe_unpack(struct register_access_mfbe *ptr_struct, const u_int8_t* ptr_buff);
-void register_access_mfbe_print(const struct register_access_mfbe *ptr_struct, FILE* file, int indent_level);
-int register_access_mfbe_size();
-#define REGISTER_ACCESS_MFBE_SIZE    (0xc)
-void register_access_mfbe_dump(const struct register_access_mfbe *ptr_struct, FILE* file);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // REGISTER_ACCESS_LAYOUTS_H
diff --git a/tools_layouts/register_access_open_layouts.c b/tools_layouts/register_access_open_layouts.c
new file mode 100644 (file)
index 0000000..2752339
--- /dev/null
@@ -0,0 +1,326 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2014-07-08 14:00:34"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access_open/register_access_open.adb --file-prefix register_access_open --prefix register_access_
+ ***/
+#include "register_access_open_layouts.h"
+
+void register_access_mfba_pack(const struct register_access_mfba *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
+
+       offset=23;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
+
+       offset=55;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 9, (u_int32_t)ptr_struct->size);
+
+       offset=72;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->address);
+
+       for (i=0; i < 64; i++) {
+       offset=adb2c_calc_array_field_address(96, 32, i, 2144, 0);
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->data[i]);
+       }
+
+}
+
+void register_access_mfba_unpack(struct register_access_mfba *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=23;
+       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=55;
+       ptr_struct->size = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 9);
+
+       offset=72;
+       ptr_struct->address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
+
+       for (i=0; i < 64; i++) {
+       offset=adb2c_calc_array_field_address(96, 32, i, 2144, 0);
+       ptr_struct->data[i] = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+       }
+
+}
+
+void register_access_mfba_print(const struct register_access_mfba *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mfba ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "size                 : "UH_FMT"\n", ptr_struct->size);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "address              : "UH_FMT"\n", ptr_struct->address);
+
+       for (i=0; i < 64; i++) {
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "data[%3d]            : "U32H_FMT"\n", i, ptr_struct->data[i]);
+       }
+
+}
+
+int register_access_mfba_size(){
+        return 268;
+}
+
+void register_access_mfba_dump(const struct register_access_mfba *ptr_struct, FILE* file) {
+       register_access_mfba_print(ptr_struct, file, 0);
+}
+
+void register_access_mfpa_pack(const struct register_access_mfpa *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
+
+       offset=23;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
+
+       offset=40;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->boot_address);
+
+       offset=156;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->flash_num);
+
+       offset=168;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->jedec_id);
+
+       offset=214;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 10, (u_int32_t)ptr_struct->sector_size);
+
+       offset=200;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->block_allignment);
+
+       offset=224;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->capability_mask);
+
+}
+
+void register_access_mfpa_unpack(struct register_access_mfpa *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=23;
+       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=40;
+       ptr_struct->boot_address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
+
+       offset=156;
+       ptr_struct->flash_num = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+
+       offset=168;
+       ptr_struct->jedec_id = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
+
+       offset=214;
+       ptr_struct->sector_size = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 10);
+
+       offset=200;
+       ptr_struct->block_allignment = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=224;
+       ptr_struct->capability_mask = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void register_access_mfpa_print(const struct register_access_mfpa *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mfpa ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_address         : "UH_FMT"\n", ptr_struct->boot_address);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "flash_num            : "UH_FMT"\n", ptr_struct->flash_num);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "jedec_id             : "UH_FMT"\n", ptr_struct->jedec_id);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "sector_size          : "UH_FMT"\n", ptr_struct->sector_size);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "block_allignment     : "UH_FMT"\n", ptr_struct->block_allignment);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "capability_mask      : "U32H_FMT"\n", ptr_struct->capability_mask);
+
+}
+
+int register_access_mfpa_size(){
+        return 36;
+}
+
+void register_access_mfpa_dump(const struct register_access_mfpa *ptr_struct, FILE* file) {
+       register_access_mfpa_print(ptr_struct, file, 0);
+}
+
+void register_access_mfbe_pack(const struct register_access_mfbe *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->fs);
+
+       offset=23;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->p);
+
+       offset=72;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 24, (u_int32_t)ptr_struct->address);
+
+}
+
+void register_access_mfbe_unpack(struct register_access_mfbe *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=26;
+       ptr_struct->fs = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=23;
+       ptr_struct->p = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=72;
+       ptr_struct->address = (u_int32_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 24);
+
+}
+
+void register_access_mfbe_print(const struct register_access_mfbe *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mfbe ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "fs                   : "UH_FMT"\n", ptr_struct->fs);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "p                    : "UH_FMT"\n", ptr_struct->p);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "address              : "UH_FMT"\n", ptr_struct->address);
+
+}
+
+int register_access_mfbe_size(){
+        return 12;
+}
+
+void register_access_mfbe_dump(const struct register_access_mfbe *ptr_struct, FILE* file) {
+       register_access_mfbe_print(ptr_struct, file, 0);
+}
+
+void register_access_register_access_open_Nodes_pack(const union register_access_register_access_open_Nodes *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 268);
+}
+
+void register_access_register_access_open_Nodes_unpack(union register_access_register_access_open_Nodes *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 268);
+}
+
+void register_access_register_access_open_Nodes_print(const union register_access_register_access_open_Nodes *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== register_access_open_Nodes ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mfbe:\n");
+       register_access_mfbe_print(&(ptr_struct->mfbe), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mfpa:\n");
+       register_access_mfpa_print(&(ptr_struct->mfpa), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mfba:\n");
+       register_access_mfba_print(&(ptr_struct->mfba), file, indent_level + 1);
+
+}
+
+int register_access_register_access_open_Nodes_size(){
+        return 268;
+}
+
+void register_access_register_access_open_Nodes_dump(const union register_access_register_access_open_Nodes *ptr_struct, FILE* file) {
+       register_access_register_access_open_Nodes_print(ptr_struct, file, 0);
+}
+
diff --git a/tools_layouts/register_access_open_layouts.h b/tools_layouts/register_access_open_layouts.h
new file mode 100644 (file)
index 0000000..9e5962d
--- /dev/null
@@ -0,0 +1,155 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2014-07-08 14:00:34"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access_open/register_access_open.adb --file-prefix register_access_open --prefix register_access_
+ ***/
+#ifndef REGISTER_ACCESS_OPEN_LAYOUTS_H
+#define REGISTER_ACCESS_OPEN_LAYOUTS_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "adb_to_c_utils.h"/* Description -   */
+/* Size in bytes - 268 */
+struct register_access_mfba {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Flash Select */
+       /* 0.4 - 0.5 */
+        u_int8_t fs;
+       /* Description - Parallel */
+       /* 0.8 - 0.8 */
+        u_int8_t p;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - Transaction size */
+       /* 4.0 - 4.8 */
+        u_int16_t size;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - address in bytes */
+       /* 8.0 - 8.23 */
+        u_int32_t address;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+       /* Description - data */
+       /* 12.0 - 268.31 */
+        u_int32_t data[64];
+};
+
+/* Description -   */
+/* Size in bytes - 36 */
+struct register_access_mfpa {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Flash Select */
+       /* 0.4 - 0.5 */
+        u_int8_t fs;
+       /* Description - Parallel */
+       /* 0.8 - 0.8 */
+        u_int8_t p;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - address in bytes */
+       /* 4.0 - 4.23 */
+        u_int32_t boot_address;
+/*---------------- DWORD[4] (Offset 0x10) ----------------*/
+       /* Description - number of flash devices connected */
+       /* 16.0 - 16.3 */
+        u_int8_t flash_num;
+/*---------------- DWORD[5] (Offset 0x14) ----------------*/
+       /* Description - Flash JEDEC ID */
+       /* 20.0 - 20.23 */
+        u_int32_t jedec_id;
+/*---------------- DWORD[6] (Offset 0x18) ----------------*/
+       /* Description - Flash sectore size */
+       /* 24.0 - 24.9 */
+        u_int16_t sector_size;
+       /* Description -  */
+       /* 24.16 - 24.23 */
+        u_int8_t block_allignment;
+/*---------------- DWORD[7] (Offset 0x1c) ----------------*/
+       /* Description - capability mask ;bit 0:Parallel flash Support;else:Reserved  */
+       /* 28.0 - 32.31 */
+        u_int32_t capability_mask;
+};
+
+/* Description -   */
+/* Size in bytes - 12 */
+struct register_access_mfbe {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Flash Select */
+       /* 0.4 - 0.5 */
+        u_int8_t fs;
+       /* Description - Parallel */
+       /* 0.8 - 0.8 */
+        u_int8_t p;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - address in bytes */
+       /* 8.0 - 8.23 */
+        u_int32_t address;
+};
+
+/* Description -   */
+/* Size in bytes - 268 */
+union register_access_register_access_open_Nodes {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 12.31 */
+        struct register_access_mfbe mfbe;
+       /* Description -  */
+       /* 0.0 - 36.31 */
+        struct register_access_mfpa mfpa;
+       /* Description -  */
+       /* 0.0 - 268.31 */
+        struct register_access_mfba mfba;
+};
+
+
+/*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
+/* mfba */
+void register_access_mfba_pack(const struct register_access_mfba *ptr_struct, u_int8_t* ptr_buff);
+void register_access_mfba_unpack(struct register_access_mfba *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_mfba_print(const struct register_access_mfba *ptr_struct, FILE* file, int indent_level);
+int register_access_mfba_size();
+#define REGISTER_ACCESS_MFBA_SIZE    (0x10c)
+void register_access_mfba_dump(const struct register_access_mfba *ptr_struct, FILE* file);
+/* mfpa */
+void register_access_mfpa_pack(const struct register_access_mfpa *ptr_struct, u_int8_t* ptr_buff);
+void register_access_mfpa_unpack(struct register_access_mfpa *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_mfpa_print(const struct register_access_mfpa *ptr_struct, FILE* file, int indent_level);
+int register_access_mfpa_size();
+#define REGISTER_ACCESS_MFPA_SIZE    (0x24)
+void register_access_mfpa_dump(const struct register_access_mfpa *ptr_struct, FILE* file);
+/* mfbe */
+void register_access_mfbe_pack(const struct register_access_mfbe *ptr_struct, u_int8_t* ptr_buff);
+void register_access_mfbe_unpack(struct register_access_mfbe *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_mfbe_print(const struct register_access_mfbe *ptr_struct, FILE* file, int indent_level);
+int register_access_mfbe_size();
+#define REGISTER_ACCESS_MFBE_SIZE    (0xc)
+void register_access_mfbe_dump(const struct register_access_mfbe *ptr_struct, FILE* file);
+/* register_access_open_Nodes */
+void register_access_register_access_open_Nodes_pack(const union register_access_register_access_open_Nodes *ptr_struct, u_int8_t* ptr_buff);
+void register_access_register_access_open_Nodes_unpack(union register_access_register_access_open_Nodes *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_register_access_open_Nodes_print(const union register_access_register_access_open_Nodes *ptr_struct, FILE* file, int indent_level);
+int register_access_register_access_open_Nodes_size();
+#define REGISTER_ACCESS_REGISTER_ACCESS_OPEN_NODES_SIZE    (0x10c)
+void register_access_register_access_open_Nodes_dump(const union register_access_register_access_open_Nodes *ptr_struct, FILE* file);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // REGISTER_ACCESS_OPEN_LAYOUTS_H
diff --git a/tools_layouts/tools_layouts.c b/tools_layouts/tools_layouts.c
deleted file mode 100644 (file)
index 39ae8e5..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/***
- *** This file was generated at "2014-03-11 10:10:14"
- *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools/tools.adb --file-prefix tools --prefix tools_
- ***    and modified to fit the needs of mstflint.
- ***/
-#include "tools_layouts.h"
-
-void tools_mnv_hdr_pack(const struct tools_mnv_hdr *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=16;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->type);
-
-    offset=2;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->length);
-
-    offset=40;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->type_mod);
-
-    offset=39;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->shadow);
-
-    offset=37;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->pad_cnt);
-
-    offset=32;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->version);
-
-}
-
-void tools_mnv_hdr_unpack(struct tools_mnv_hdr *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=16;
-    ptr_struct->type = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
-
-    offset=2;
-    ptr_struct->length = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
-
-    offset=40;
-    ptr_struct->type_mod = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-
-    offset=39;
-    ptr_struct->shadow = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=37;
-    ptr_struct->pad_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-    offset=32;
-    ptr_struct->version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
-
-}
-
-void tools_mnv_hdr_print(const struct tools_mnv_hdr *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== mnv_hdr ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "type                 : "UH_FMT"\n", ptr_struct->type);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "length               : "UH_FMT"\n", ptr_struct->length);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "type_mod             : "UH_FMT"\n", ptr_struct->type_mod);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "shadow               : "UH_FMT"\n", ptr_struct->shadow);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "pad_cnt              : "UH_FMT"\n", ptr_struct->pad_cnt);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "version              : "UH_FMT"\n", ptr_struct->version);
-
-}
-
-int tools_mnv_hdr_size(){
-     return 8;
-}
-
-void tools_mnv_hdr_dump(const struct tools_mnv_hdr *ptr_struct, FILE* file) {
-    tools_mnv_hdr_print(ptr_struct, file, 0);
-}
-
-void tools_mnvia_pack(const struct tools_mnvia *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_mnvia_unpack(struct tools_mnvia *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_mnvia_print(const struct tools_mnvia *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== mnvia ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "mnv_hdr:\n");
-    tools_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
-
-}
-
-int tools_mnvia_size(){
-     return 8;
-}
-
-void tools_mnvia_dump(const struct tools_mnvia *ptr_struct, FILE* file) {
-    tools_mnvia_print(ptr_struct, file, 0);
-}
-
-void tools_mnvi_pack(const struct tools_mnvi *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_mnvi_unpack(struct tools_mnvi *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-}
-
-void tools_mnvi_print(const struct tools_mnvi *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== mnvi ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "mnv_hdr:\n");
-    tools_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
-
-}
-
-int tools_mnvi_size(){
-     return 8;
-}
-
-void tools_mnvi_dump(const struct tools_mnvi *ptr_struct, FILE* file) {
-    tools_mnvi_print(ptr_struct, file, 0);
-}
-
-void tools_mnva_pack(const struct tools_mnva *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-    for (i=0; i < 128; i++) {
-    offset=adb2c_calc_array_field_address(88, 8, i, 2048, 1);
-    adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->data[i]);
-    }
-
-}
-
-void tools_mnva_unpack(struct tools_mnva *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    tools_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
-
-    for (i=0; i < 128; i++) {
-    offset=adb2c_calc_array_field_address(88, 8, i, 2048, 1);
-    ptr_struct->data[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
-    }
-
-}
-
-void tools_mnva_print(const struct tools_mnva *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== mnva ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "mnv_hdr:\n");
-    tools_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
-
-    for (i=0; i < 128; i++) {
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "data[%3d]            : "UH_FMT"\n", i, ptr_struct->data[i]);
-    }
-
-}
-
-int tools_mnva_size(){
-     return 256;
-}
-
-void tools_mnva_dump(const struct tools_mnva *ptr_struct, FILE* file) {
-    tools_mnva_print(ptr_struct, file, 0);
-}
-
-void tools_sriov_pack(const struct tools_sriov *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=16;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->total_vfs);
-
-    offset=0;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->sriov_en);
-
-}
-
-void tools_sriov_unpack(struct tools_sriov *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=16;
-    ptr_struct->total_vfs = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
-
-    offset=0;
-    ptr_struct->sriov_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-}
-
-void tools_sriov_print(const struct tools_sriov *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== sriov ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "total_vfs            : "UH_FMT"\n", ptr_struct->total_vfs);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "sriov_en             : "UH_FMT"\n", ptr_struct->sriov_en);
-
-}
-
-int tools_sriov_size(){
-     return 4;
-}
-
-void tools_sriov_dump(const struct tools_sriov *ptr_struct, FILE* file) {
-    tools_sriov_print(ptr_struct, file, 0);
-}
-
-void tools_bar_size_pack(const struct tools_bar_size *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->log_uar_bar_size);
-
-}
-
-void tools_bar_size_unpack(struct tools_bar_size *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=0;
-    ptr_struct->log_uar_bar_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
-
-}
-
-void tools_bar_size_print(const struct tools_bar_size *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== bar_size ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "log_uar_bar_size     : "U32H_FMT"\n", ptr_struct->log_uar_bar_size);
-
-}
-
-int tools_bar_size_size(){
-     return 4;
-}
-
-void tools_bar_size_dump(const struct tools_bar_size *ptr_struct, FILE* file) {
-    tools_bar_size_print(ptr_struct, file, 0);
-}
-
-void tools_vpi_settings_pack(const struct tools_vpi_settings *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=30;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->network_link_type);
-
-}
-
-void tools_vpi_settings_unpack(struct tools_vpi_settings *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=30;
-    ptr_struct->network_link_type = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
-
-}
-
-void tools_vpi_settings_print(const struct tools_vpi_settings *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== vpi_settings ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "network_link_type    : "UH_FMT"\n", ptr_struct->network_link_type);
-
-}
-
-int tools_vpi_settings_size(){
-     return 4;
-}
-
-void tools_vpi_settings_dump(const struct tools_vpi_settings *ptr_struct, FILE* file) {
-    tools_vpi_settings_print(ptr_struct, file, 0);
-}
-
-void tools_wol_pack(const struct tools_wol *ptr_struct, u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=22;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved0);
-
-    offset=21;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_magic);
-
-    offset=20;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved1);
-
-    offset=19;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved2);
-
-    offset=18;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved3);
-
-    offset=17;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved4);
-
-    offset=16;
-    adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->reserved5);
-
-}
-
-void tools_wol_unpack(struct tools_wol *ptr_struct, const u_int8_t* ptr_buff){
-    u_int32_t offset;
-    int i=0;
-    (void)offset;
-    (void)i;
-    (void)ptr_struct;
-    (void)ptr_buff;
-
-    offset=22;
-    ptr_struct->reserved0 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=21;
-    ptr_struct->en_wol_magic = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=20;
-    ptr_struct->reserved1 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=19;
-    ptr_struct->reserved2 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=18;
-    ptr_struct->reserved3 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=17;
-    ptr_struct->reserved4 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-    offset=16;
-    ptr_struct->reserved5 = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
-
-}
-
-void tools_wol_print(const struct tools_wol *ptr_struct, FILE* file, int indent_level){
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "======== wol ========\n");
-    int i=0;
-    (void)i;(void)ptr_struct;
-    (void)file;
-    (void)indent_level;
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved0   : "UH_FMT"\n", ptr_struct->reserved0);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "en_wol_magic         : "UH_FMT"\n", ptr_struct->en_wol_magic);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved1           : "UH_FMT"\n", ptr_struct->reserved1);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved2            : "UH_FMT"\n", ptr_struct->reserved2);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved3            : "UH_FMT"\n", ptr_struct->reserved3);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved4            : "UH_FMT"\n", ptr_struct->reserved4);
-
-    adb2c_add_indentation(file, indent_level);
-    fprintf(file, "reserved5           : "UH_FMT"\n", ptr_struct->reserved5);
-
-}
-
-int tools_wol_size(){
-     return 8;
-}
-
-void tools_wol_dump(const struct tools_wol *ptr_struct, FILE* file) {
-    tools_wol_print(ptr_struct, file, 0);
-}
-
diff --git a/tools_layouts/tools_layouts.h b/tools_layouts/tools_layouts.h
deleted file mode 100644 (file)
index e1d3ced..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/***
- *** This file was generated at "2014-03-11 10:10:14"
- *** by:
- ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools/tools.adb --file-prefix tools --prefix tools_
- ***    and modified to fit the needs of mstflint.
- ***/
-#ifndef TOOLS_LAYOUTS_H
-#define TOOLS_LAYOUTS_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "adb_to_c_utils.h"
-
-/* Description -   */
-/* Size in bytes - 8 */
-struct tools_mnv_hdr {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description - Tlv type */
-    /* 0.0 - 0.15 */
-     u_int16_t type;
-    /* Description - size of tlv data in dwords (not including header) */
-    /* 0.18 - 0.29 */
-     u_int16_t length;
-/*---------------- DWORD[1] (Offset 0x4) ----------------*/
-    /* Description - Type Modifier. E.G.: Port number when the config is port related */
-    /* 4.16 - 4.23 */
-     u_int8_t type_mod;
-    /* Description - Shadow: i.e if set the Fw will not update the tlv immediately but wait for a command */
-    /* 4.24 - 4.24 */
-     u_int8_t shadow;
-    /* Description - Pad count: for non dword alligned tlvs */
-    /* 4.25 - 4.26 */
-     u_int8_t pad_cnt;
-    /* Description - Data version can be set by caller or left as 0. */
-    /* 4.28 - 8.31 */
-     u_int8_t version;
-};
-
-/* Description -   */
-/* Size in bytes - 8 */
-struct tools_mnvia {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description -  */
-    /* 0.0 - 8.31 */
-     struct tools_mnv_hdr mnv_hdr;
-};
-
-/* Description -   */
-/* Size in bytes - 8 */
-struct tools_mnvi {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description -  */
-    /* 0.0 - 8.31 */
-     struct tools_mnv_hdr mnv_hdr;
-};
-
-/* Description -   */
-/* Size in bytes - 256 */
-struct tools_mnva {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description -  */
-    /* 0.0 - 8.31 */
-     struct tools_mnv_hdr mnv_hdr;
-/*---------------- DWORD[2] (Offset 0x8) ----------------*/
-    /* Description -  */
-    /* 8.24 - 136.23 */
-     u_int8_t data[128];
-};
-
-/* Description -   */
-/* Size in bytes - 4 */
-struct tools_sriov {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description - The total number of VFs that can be supported. */
-    /* 0.0 - 0.15 */
-     u_int16_t total_vfs;
-    /* Description - 1 when SRIOV is enabled: SRIOV capability will appear on the PCI configuration header. */
-    /* 0.31 - 4.31 */
-     u_int8_t sriov_en;
-};
-
-/* Description -   */
-/* Size in bytes - 4 */
-struct tools_bar_size {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description - Base 2 log of the size of the physical function\92s first BAR, in MBs. E.g. for 8MB the value is 3. */
-    /* 0.0 - 4.31 */
-     u_int32_t log_uar_bar_size;
-};
-
-/* Description -   */
-/* Size in bytes - 4 */
-struct tools_vpi_settings {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* Description - Default link type:
-0  InfiniBand
-1  Ethernet
- */
-    /* 0.0 - 0.1 */
-     u_int8_t network_link_type;
-};
-
-/* Description -   */
-/* Size in bytes - 8 */
-struct tools_wol {
-/*---------------- DWORD[0] (Offset 0x0) ----------------*/
-    /* 0.9 - 0.9 */
-     u_int8_t reserved0;
-    /* Description - Enable Wake on magic packet */
-    /* 0.10 - 0.10 */
-     u_int8_t en_wol_magic;
-    /* 0.11 - 0.11 */
-     u_int8_t reserved1;
-    /* 0.12 - 0.12 */
-     u_int8_t reserved2;
-    /* 0.13 - 0.13 */
-     u_int8_t reserved3;
-    /* 0.14 - 0.14 */
-     u_int8_t reserved4;
-    /* 0.15 - 0.15 */
-     u_int8_t reserved5;
-};
-/*---------------- DWORD[8] (Offset 0x20) ----------------*/
-/*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
-
-/* mnv_hdr */
-void tools_mnv_hdr_pack(const struct tools_mnv_hdr *ptr_struct, u_int8_t* ptr_buff);
-void tools_mnv_hdr_unpack(struct tools_mnv_hdr *ptr_struct, const u_int8_t* ptr_buff);
-void tools_mnv_hdr_print(const struct tools_mnv_hdr *ptr_struct, FILE* file, int indent_level);
-int tools_mnv_hdr_size();
-#define TOOLS_MNV_HDR_SIZE    (0x8)
-void tools_mnv_hdr_dump(const struct tools_mnv_hdr *ptr_struct, FILE* file);
-/* mnvia */
-void tools_mnvia_pack(const struct tools_mnvia *ptr_struct, u_int8_t* ptr_buff);
-void tools_mnvia_unpack(struct tools_mnvia *ptr_struct, const u_int8_t* ptr_buff);
-void tools_mnvia_print(const struct tools_mnvia *ptr_struct, FILE* file, int indent_level);
-int tools_mnvia_size();
-#define TOOLS_MNVIA_SIZE    (0x8)
-void tools_mnvia_dump(const struct tools_mnvia *ptr_struct, FILE* file);
-/* mnvi */
-void tools_mnvi_pack(const struct tools_mnvi *ptr_struct, u_int8_t* ptr_buff);
-void tools_mnvi_unpack(struct tools_mnvi *ptr_struct, const u_int8_t* ptr_buff);
-void tools_mnvi_print(const struct tools_mnvi *ptr_struct, FILE* file, int indent_level);
-int tools_mnvi_size();
-#define TOOLS_MNVI_SIZE    (0x8)
-void tools_mnvi_dump(const struct tools_mnvi *ptr_struct, FILE* file);
-/* mnva */
-void tools_mnva_pack(const struct tools_mnva *ptr_struct, u_int8_t* ptr_buff);
-void tools_mnva_unpack(struct tools_mnva *ptr_struct, const u_int8_t* ptr_buff);
-void tools_mnva_print(const struct tools_mnva *ptr_struct, FILE* file, int indent_level);
-int tools_mnva_size();
-#define TOOLS_MNVA_SIZE    (0x100)
-void tools_mnva_dump(const struct tools_mnva *ptr_struct, FILE* file);
-/* sriov */
-void tools_sriov_pack(const struct tools_sriov *ptr_struct, u_int8_t* ptr_buff);
-void tools_sriov_unpack(struct tools_sriov *ptr_struct, const u_int8_t* ptr_buff);
-void tools_sriov_print(const struct tools_sriov *ptr_struct, FILE* file, int indent_level);
-int tools_sriov_size();
-#define TOOLS_SRIOV_SIZE    (0x4)
-void tools_sriov_dump(const struct tools_sriov *ptr_struct, FILE* file);
-/* bar_size */
-void tools_bar_size_pack(const struct tools_bar_size *ptr_struct, u_int8_t* ptr_buff);
-void tools_bar_size_unpack(struct tools_bar_size *ptr_struct, const u_int8_t* ptr_buff);
-void tools_bar_size_print(const struct tools_bar_size *ptr_struct, FILE* file, int indent_level);
-int tools_bar_size_size();
-#define TOOLS_BAR_SIZE_SIZE    (0x4)
-void tools_bar_size_dump(const struct tools_bar_size *ptr_struct, FILE* file);
-/* vpi_settings */
-void tools_vpi_settings_pack(const struct tools_vpi_settings *ptr_struct, u_int8_t* ptr_buff);
-void tools_vpi_settings_unpack(struct tools_vpi_settings *ptr_struct, const u_int8_t* ptr_buff);
-void tools_vpi_settings_print(const struct tools_vpi_settings *ptr_struct, FILE* file, int indent_level);
-int tools_vpi_settings_size();
-#define TOOLS_VPI_SETTINGS_SIZE    (0x4)
-void tools_vpi_settings_dump(const struct tools_vpi_settings *ptr_struct, FILE* file);
-/* wol */
-void tools_wol_pack(const struct tools_wol *ptr_struct, u_int8_t* ptr_buff);
-void tools_wol_unpack(struct tools_wol *ptr_struct, const u_int8_t* ptr_buff);
-void tools_wol_print(const struct tools_wol *ptr_struct, FILE* file, int indent_level);
-int tools_wol_size();
-#define TOOLS_WOL_SIZE    (0x8)
-void tools_wol_dump(const struct tools_wol *ptr_struct, FILE* file);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // TOOLS_LAYOUTS_H
diff --git a/tools_layouts/tools_open_layouts.c b/tools_layouts/tools_open_layouts.c
new file mode 100644 (file)
index 0000000..0e086a3
--- /dev/null
@@ -0,0 +1,996 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2014-07-08 14:00:09"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
+ ***/
+#include "tools_open_layouts.h"
+
+void tools_open_pmdio_addr_data_pack(const struct tools_open_pmdio_addr_data *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->data);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->addr);
+
+}
+
+void tools_open_pmdio_addr_data_unpack(struct tools_open_pmdio_addr_data *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       ptr_struct->data = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=0;
+       ptr_struct->addr = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+}
+
+void tools_open_pmdio_addr_data_print(const struct tools_open_pmdio_addr_data *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== pmdio_addr_data ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "data                 : "UH_FMT"\n", ptr_struct->data);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "addr                 : "UH_FMT"\n", ptr_struct->addr);
+
+}
+
+int tools_open_pmdio_addr_data_size(){
+        return 4;
+}
+
+void tools_open_pmdio_addr_data_dump(const struct tools_open_pmdio_addr_data *ptr_struct, FILE* file) {
+       tools_open_pmdio_addr_data_print(ptr_struct, file, 0);
+}
+
+void tools_open_mnv_hdr_pack(const struct tools_open_mnv_hdr *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->type);
+
+       offset=2;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->length);
+
+       offset=40;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->type_mod);
+
+       offset=39;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->shadow);
+
+       offset=37;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->pad_cnt);
+
+       offset=32;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 4, (u_int32_t)ptr_struct->version);
+
+}
+
+void tools_open_mnv_hdr_unpack(struct tools_open_mnv_hdr *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       ptr_struct->type = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=2;
+       ptr_struct->length = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+       offset=40;
+       ptr_struct->type_mod = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=39;
+       ptr_struct->shadow = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=37;
+       ptr_struct->pad_cnt = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=32;
+       ptr_struct->version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 4);
+
+}
+
+void tools_open_mnv_hdr_print(const struct tools_open_mnv_hdr *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mnv_hdr ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "type                 : "UH_FMT"\n", ptr_struct->type);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "length               : "UH_FMT"\n", ptr_struct->length);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "type_mod             : "UH_FMT"\n", ptr_struct->type_mod);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "shadow               : "UH_FMT"\n", ptr_struct->shadow);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pad_cnt              : "UH_FMT"\n", ptr_struct->pad_cnt);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "version              : "UH_FMT"\n", ptr_struct->version);
+
+}
+
+int tools_open_mnv_hdr_size(){
+        return 8;
+}
+
+void tools_open_mnv_hdr_dump(const struct tools_open_mnv_hdr *ptr_struct, FILE* file) {
+       tools_open_mnv_hdr_print(ptr_struct, file, 0);
+}
+
+void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=29;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->operation);
+
+       offset=22;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->clause);
+
+       offset=8;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->local_port);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->lock);
+
+       offset=59;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 5, (u_int32_t)ptr_struct->reg_adr_mmd);
+
+       offset=48;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->last_op_idx);
+
+       offset=40;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->num_ops_done);
+
+       for (i=0; i < 64; i++) {
+       offset=adb2c_calc_array_field_address(64, 32, i, 2112, 1);
+       tools_open_pmdio_addr_data_pack(&(ptr_struct->mdio_trans[i]), ptr_buff + offset/8);
+       }
+
+}
+
+void tools_open_pmdio_unpack(struct tools_open_pmdio *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=29;
+       ptr_struct->operation = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 3);
+
+       offset=22;
+       ptr_struct->clause = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=8;
+       ptr_struct->local_port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=0;
+       ptr_struct->lock = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=59;
+       ptr_struct->reg_adr_mmd = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 5);
+
+       offset=48;
+       ptr_struct->last_op_idx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=40;
+       ptr_struct->num_ops_done = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       for (i=0; i < 64; i++) {
+       offset=adb2c_calc_array_field_address(64, 32, i, 2112, 1);
+       tools_open_pmdio_addr_data_unpack(&(ptr_struct->mdio_trans[i]), ptr_buff + offset/8);
+       }
+
+}
+
+void tools_open_pmdio_print(const struct tools_open_pmdio *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== pmdio ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "operation            : "UH_FMT"\n", ptr_struct->operation);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "clause               : "UH_FMT"\n", ptr_struct->clause);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "local_port           : "UH_FMT"\n", ptr_struct->local_port);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "lock                 : "UH_FMT"\n", ptr_struct->lock);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "reg_adr_mmd          : "UH_FMT"\n", ptr_struct->reg_adr_mmd);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "last_op_idx          : "UH_FMT"\n", ptr_struct->last_op_idx);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "num_ops_done         : "UH_FMT"\n", ptr_struct->num_ops_done);
+
+       for (i=0; i < 64; i++) {
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mdio_trans[%3d]:\n", i);
+       tools_open_pmdio_addr_data_print(&(ptr_struct->mdio_trans[i]), file, indent_level + 1);
+       }
+
+}
+
+int tools_open_pmdio_size(){
+        return 264;
+}
+
+void tools_open_pmdio_dump(const struct tools_open_pmdio *ptr_struct, FILE* file) {
+       tools_open_pmdio_print(ptr_struct, file, 0);
+}
+
+void tools_open_pmdic_pack(const struct tools_open_pmdic *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=8;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->local_port);
+
+       offset=56;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->operation_cap);
+
+       offset=38;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->clause);
+
+       offset=32;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->mdio_preset);
+
+       offset=88;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->misc_cap);
+
+}
+
+void tools_open_pmdic_unpack(struct tools_open_pmdic *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=8;
+       ptr_struct->local_port = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=56;
+       ptr_struct->operation_cap = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=38;
+       ptr_struct->clause = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=32;
+       ptr_struct->mdio_preset = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=88;
+       ptr_struct->misc_cap = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+}
+
+void tools_open_pmdic_print(const struct tools_open_pmdic *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== pmdic ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "local_port           : "UH_FMT"\n", ptr_struct->local_port);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "operation_cap        : "UH_FMT"\n", ptr_struct->operation_cap);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "clause               : "UH_FMT"\n", ptr_struct->clause);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mdio_preset          : "UH_FMT"\n", ptr_struct->mdio_preset);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "misc_cap             : "UH_FMT"\n", ptr_struct->misc_cap);
+
+}
+
+int tools_open_pmdic_size(){
+        return 12;
+}
+
+void tools_open_pmdic_dump(const struct tools_open_pmdic *ptr_struct, FILE* file) {
+       tools_open_pmdic_print(ptr_struct, file, 0);
+}
+
+void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+}
+
+void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+}
+
+void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mnvia ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnv_hdr:\n");
+       tools_open_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
+
+}
+
+int tools_open_mnvia_size(){
+        return 8;
+}
+
+void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file) {
+       tools_open_mnvia_print(ptr_struct, file, 0);
+}
+
+void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+}
+
+void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+}
+
+void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mnvi ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnv_hdr:\n");
+       tools_open_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
+
+}
+
+int tools_open_mnvi_size(){
+        return 8;
+}
+
+void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file) {
+       tools_open_mnvi_print(ptr_struct, file, 0);
+}
+
+void tools_open_mnva_pack(const struct tools_open_mnva *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_pack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+       for (i=0; i < 128; i++) {
+       offset=adb2c_calc_array_field_address(88, 8, i, 2048, 1);
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->data[i]);
+       }
+
+}
+
+void tools_open_mnva_unpack(struct tools_open_mnva *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       tools_open_mnv_hdr_unpack(&(ptr_struct->mnv_hdr), ptr_buff + offset/8);
+
+       for (i=0; i < 128; i++) {
+       offset=adb2c_calc_array_field_address(88, 8, i, 2048, 1);
+       ptr_struct->data[i] = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+       }
+
+}
+
+void tools_open_mnva_print(const struct tools_open_mnva *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mnva ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnv_hdr:\n");
+       tools_open_mnv_hdr_print(&(ptr_struct->mnv_hdr), file, indent_level + 1);
+
+       for (i=0; i < 128; i++) {
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "data[%3d]            : "UH_FMT"\n", i, ptr_struct->data[i]);
+       }
+
+}
+
+int tools_open_mnva_size(){
+        return 256;
+}
+
+void tools_open_mnva_dump(const struct tools_open_mnva *ptr_struct, FILE* file) {
+       tools_open_mnva_print(ptr_struct, file, 0);
+}
+
+void tools_open_sriov_pack(const struct tools_open_sriov *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->total_vfs);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->sriov_en);
+
+}
+
+void tools_open_sriov_unpack(struct tools_open_sriov *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       ptr_struct->total_vfs = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=0;
+       ptr_struct->sriov_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_sriov_print(const struct tools_open_sriov *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== sriov ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "total_vfs            : "UH_FMT"\n", ptr_struct->total_vfs);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "sriov_en             : "UH_FMT"\n", ptr_struct->sriov_en);
+
+}
+
+int tools_open_sriov_size(){
+        return 4;
+}
+
+void tools_open_sriov_dump(const struct tools_open_sriov *ptr_struct, FILE* file) {
+       tools_open_sriov_print(ptr_struct, file, 0);
+}
+
+void tools_open_bar_size_pack(const struct tools_open_bar_size *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->log_uar_bar_size);
+
+}
+
+void tools_open_bar_size_unpack(struct tools_open_bar_size *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       ptr_struct->log_uar_bar_size = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void tools_open_bar_size_print(const struct tools_open_bar_size *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== bar_size ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "log_uar_bar_size     : "U32H_FMT"\n", ptr_struct->log_uar_bar_size);
+
+}
+
+int tools_open_bar_size_size(){
+        return 4;
+}
+
+void tools_open_bar_size_dump(const struct tools_open_bar_size *ptr_struct, FILE* file) {
+       tools_open_bar_size_print(ptr_struct, file, 0);
+}
+
+void tools_open_vpi_settings_pack(const struct tools_open_vpi_settings *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=30;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->network_link_type);
+
+}
+
+void tools_open_vpi_settings_unpack(struct tools_open_vpi_settings *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=30;
+       ptr_struct->network_link_type = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+}
+
+void tools_open_vpi_settings_print(const struct tools_open_vpi_settings *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== vpi_settings ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "network_link_type    : "UH_FMT"\n", ptr_struct->network_link_type);
+
+}
+
+int tools_open_vpi_settings_size(){
+        return 4;
+}
+
+void tools_open_vpi_settings_dump(const struct tools_open_vpi_settings *ptr_struct, FILE* file) {
+       tools_open_vpi_settings_print(ptr_struct, file, 0);
+}
+
+void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=22;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_psswd_magic);
+
+       offset=21;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_magic);
+
+       offset=20;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_arp);
+
+       offset=19;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_bc);
+
+       offset=18;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_mc);
+
+       offset=17;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_uc);
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->en_wol_phy);
+
+}
+
+void tools_open_wol_unpack(struct tools_open_wol *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=22;
+       ptr_struct->en_wol_psswd_magic = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=21;
+       ptr_struct->en_wol_magic = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=20;
+       ptr_struct->en_wol_arp = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=19;
+       ptr_struct->en_wol_bc = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=18;
+       ptr_struct->en_wol_mc = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=17;
+       ptr_struct->en_wol_uc = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=16;
+       ptr_struct->en_wol_phy = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_wol_print(const struct tools_open_wol *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== wol ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_psswd_magic   : "UH_FMT"\n", ptr_struct->en_wol_psswd_magic);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_magic         : "UH_FMT"\n", ptr_struct->en_wol_magic);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_arp           : "UH_FMT"\n", ptr_struct->en_wol_arp);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_bc            : "UH_FMT"\n", ptr_struct->en_wol_bc);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_mc            : "UH_FMT"\n", ptr_struct->en_wol_mc);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_uc            : "UH_FMT"\n", ptr_struct->en_wol_uc);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "en_wol_phy           : "UH_FMT"\n", ptr_struct->en_wol_phy);
+
+}
+
+int tools_open_wol_size(){
+        return 8;
+}
+
+void tools_open_wol_dump(const struct tools_open_wol *ptr_struct, FILE* file) {
+       tools_open_wol_print(ptr_struct, file, 0);
+}
+
+void tools_open_phy_reg_pack(const union tools_open_phy_reg *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 264);
+}
+
+void tools_open_phy_reg_unpack(union tools_open_phy_reg *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 264);
+}
+
+void tools_open_phy_reg_print(const union tools_open_phy_reg *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== phy_reg ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pmdic:\n");
+       tools_open_pmdic_print(&(ptr_struct->pmdic), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pmdio:\n");
+       tools_open_pmdio_print(&(ptr_struct->pmdio), file, indent_level + 1);
+
+}
+
+int tools_open_phy_reg_size(){
+        return 264;
+}
+
+void tools_open_phy_reg_dump(const union tools_open_phy_reg *ptr_struct, FILE* file) {
+       tools_open_phy_reg_print(ptr_struct, file, 0);
+}
+
+void tools_open_mnv_cfg_pack(const union tools_open_mnv_cfg *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 256);
+}
+
+void tools_open_mnv_cfg_unpack(union tools_open_mnv_cfg *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 256);
+}
+
+void tools_open_mnv_cfg_print(const union tools_open_mnv_cfg *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mnv_cfg ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnva:\n");
+       tools_open_mnva_print(&(ptr_struct->mnva), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnvi:\n");
+       tools_open_mnvi_print(&(ptr_struct->mnvi), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mnvia:\n");
+       tools_open_mnvia_print(&(ptr_struct->mnvia), file, indent_level + 1);
+
+}
+
+int tools_open_mnv_cfg_size(){
+        return 256;
+}
+
+void tools_open_mnv_cfg_dump(const union tools_open_mnv_cfg *ptr_struct, FILE* file) {
+       tools_open_mnv_cfg_print(ptr_struct, file, 0);
+}
+
+void tools_open_nv_cfg_pack(const union tools_open_nv_cfg *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 256);
+}
+
+void tools_open_nv_cfg_unpack(union tools_open_nv_cfg *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 256);
+}
+
+void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== nv_cfg ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "wol:\n");
+       tools_open_wol_print(&(ptr_struct->wol), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "vpi_settings:\n");
+       tools_open_vpi_settings_print(&(ptr_struct->vpi_settings), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "bar_size:\n");
+       tools_open_bar_size_print(&(ptr_struct->bar_size), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "sriov:\n");
+       tools_open_sriov_print(&(ptr_struct->sriov), file, indent_level + 1);
+
+}
+
+int tools_open_nv_cfg_size(){
+        return 256;
+}
+
+void tools_open_nv_cfg_dump(const union tools_open_nv_cfg *ptr_struct, FILE* file) {
+       tools_open_nv_cfg_print(ptr_struct, file, 0);
+}
+
+void tools_open_tools_open_pack(const union tools_open_tools_open *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 1048576);
+}
+
+void tools_open_tools_open_unpack(union tools_open_tools_open *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 1048576);
+}
+
+void tools_open_tools_open_print(const union tools_open_tools_open *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== tools_open ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "NVConfig:\n");
+       tools_open_nv_cfg_print(&(ptr_struct->NVConfig), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "MNV_Reg:\n");
+       tools_open_mnv_cfg_print(&(ptr_struct->MNV_Reg), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "Phy_Reg:\n");
+       tools_open_phy_reg_print(&(ptr_struct->Phy_Reg), file, indent_level + 1);
+
+}
+
+int tools_open_tools_open_size(){
+        return 1048576;
+}
+
+void tools_open_tools_open_dump(const union tools_open_tools_open *ptr_struct, FILE* file) {
+       tools_open_tools_open_print(ptr_struct, file, 0);
+}
+
+void tools_open_uint64_pack(const struct tools_open_uint64 *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->hi);
+
+       offset=32;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->lo);
+
+}
+
+void tools_open_uint64_unpack(struct tools_open_uint64 *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       ptr_struct->hi = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=32;
+       ptr_struct->lo = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void tools_open_uint64_print(const struct tools_open_uint64 *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== uint64 ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "hi                   : "U32H_FMT"\n", ptr_struct->hi);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "lo                   : "U32H_FMT"\n", ptr_struct->lo);
+
+}
+
+int tools_open_uint64_size(){
+        return 8;
+}
+
+void tools_open_uint64_dump(const struct tools_open_uint64 *ptr_struct, FILE* file) {
+       tools_open_uint64_print(ptr_struct, file, 0);
+}
+
diff --git a/tools_layouts/tools_open_layouts.h b/tools_layouts/tools_open_layouts.h
new file mode 100644 (file)
index 0000000..7cc9234
--- /dev/null
@@ -0,0 +1,440 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2014-07-08 14:00:09"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
+ ***/
+#ifndef TOOLS_OPEN_LAYOUTS_H
+#define TOOLS_OPEN_LAYOUTS_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "adb_to_c_utils.h"/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_pmdio_addr_data {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Data (Clause 22) / Address/Data (Clause 45) */
+       /* 0.0 - 0.15 */
+        u_int16_t data;
+       /* Description - Address (Clause 45)
+This field is only valid for Address + Read and Address + Write operations, providing the address. For other Clause 45 operations the data field provides the address when appropriate.
+ */
+       /* 0.16 - 4.31 */
+        u_int16_t addr;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_mnv_hdr {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Tlv type */
+       /* 0.0 - 0.15 */
+        u_int16_t type;
+       /* Description - size of tlv data in dwords (not including header) */
+       /* 0.18 - 0.29 */
+        u_int16_t length;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - Type Modifier. E.G.: Port number when the config is port related */
+       /* 4.16 - 4.23 */
+        u_int8_t type_mod;
+       /* Description - Shadow: i.e if set the Fw will not update the tlv immediately but wait for a command */
+       /* 4.24 - 4.24 */
+        u_int8_t shadow;
+       /* Description - Pad count: for non dword alligned tlvs */
+       /* 4.25 - 4.26 */
+        u_int8_t pad_cnt;
+       /* Description - Data version can be set by caller or left as 0. */
+       /* 4.28 - 8.31 */
+        u_int8_t version;
+};
+
+/* Description -   */
+/* Size in bytes - 264 */
+struct tools_open_pmdio {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - 000 - NOP
+001 - Address (reserved for Clause 22)
+010 - Read
+011 - Write
+100 - Post Read Increment Address (reserved for Clause 22)
+110 - Address + Read - Generates Address cycle and then Read cycle in Clause 45 (reserved for Clause 22)
+111 - Address + Write - Generates Address cycle and then Write cycle in Clause 45 (reserved for Clause 22)
+ */
+       /* 0.0 - 0.2 */
+        u_int8_t operation;
+       /* Description - MDIO I/F definition:
+00 - Clause 22
+01 - Clause 45
+ */
+       /* 0.8 - 0.9 */
+        u_int8_t clause;
+       /* Description - Local port number */
+       /* 0.16 - 0.23 */
+        u_int8_t local_port;
+       /* Description - Lock bit. Setting this bit will lock the access to port's MDIO
+Used for operations that requires continuous MDIO accesses.
+
+In order to guarantee atomicity of some operations, the port MDIO interface can be locked to a specific interface.
+When the lock bit is set, no MDIO accesses through another interface (FW/driver/tools) are allowed on the port.
+An attempt to set the lock bit while it is locked by another interface should return a RESOURCE/_BUSY status.
+ */
+       /* 0.31 - 4.31 */
+        u_int8_t lock;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - Reg Address (Clause 22) / MDIO Manageable Device address (Clause 45) */
+       /* 4.0 - 4.4 */
+        u_int8_t reg_adr_mmd;
+       /* Description - Index of last entry in the operations list. 0 means single operation (backward compatible).
+Valid values are 0..63
+ */
+       /* 4.8 - 4.15 */
+        u_int8_t last_op_idx;
+       /* Description - Number of operations actually executed by FW. Driver write 0 to this field. FW increment the field with any execution of an entry in the operations list. */
+       /* 4.16 - 4.23 */
+        u_int8_t num_ops_done;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - addr/data entry */
+       /* 8.0 - 264.31 */
+        struct tools_open_pmdio_addr_data mdio_trans[64];
+};
+
+/* Description -   */
+/* Size in bytes - 12 */
+struct tools_open_pmdic {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Local port number */
+       /* 0.16 - 0.23 */
+        u_int8_t local_port;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - Bit 0 - NOP
+Bit 1 - Address (reserved for Clause 22)
+Bit 2 - Read
+Bit 3 - Write
+Bit 4 - Post Read Increment Address (reserved for Clause 22)
+Bit 6 - Address + Read - Generates Address cycle and then Read cycle in Clause 45 (reserved for Clause 22)
+Bit 7- Address + Write - Generates Address cycle and then Write cycle in Clause 45 (reserved for Clause 22)
+ */
+       /* 4.0 - 4.7 */
+        u_int8_t operation_cap;
+       /* Description - MDIO I/F definition:
+00 - Clause 22
+01 - Clause 45
+ */
+       /* 4.24 - 4.25 */
+        u_int8_t clause;
+       /* Description - MDIO present:
+00 - MDIO not present
+01 - External MDIO present
+ */
+       /* 4.30 - 8.31 */
+        u_int8_t mdio_preset;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - Bit 0 External Phy FW master
+Used for external Phy FW burning. When set, the MDIO I/F is used for an external phy FW burn
+ */
+       /* 8.0 - 8.7 */
+        u_int8_t misc_cap;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_mnvia {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_mnv_hdr mnv_hdr;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_mnvi {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_mnv_hdr mnv_hdr;
+};
+
+/* Description -   */
+/* Size in bytes - 256 */
+struct tools_open_mnva {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_mnv_hdr mnv_hdr;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description -  */
+       /* 8.24 - 136.23 */
+        u_int8_t data[128];
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_sriov {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - The total number of VFs that can be supported. */
+       /* 0.0 - 0.15 */
+        u_int16_t total_vfs;
+       /* Description - 1 when SRIOV is enabled: SRIOV capability will appear on the PCI configuration header. */
+       /* 0.31 - 4.31 */
+        u_int8_t sriov_en;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_bar_size {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Base 2 log of the size of the physical function\92s first BAR, in MBs. E.g. for 8MB the value is 3. */
+       /* 0.0 - 4.31 */
+        u_int32_t log_uar_bar_size;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_vpi_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Default link type:
+0  InfiniBand
+1  Ethernet
+ */
+       /* 0.0 - 0.1 */
+        u_int8_t network_link_type;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_wol {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Enable Wake on secure on password magic packet */
+       /* 0.9 - 0.9 */
+        u_int8_t en_wol_psswd_magic;
+       /* Description - Enable Wake on magic packet */
+       /* 0.10 - 0.10 */
+        u_int8_t en_wol_magic;
+       /* Description - Enable Wake on ARP */
+       /* 0.11 - 0.11 */
+        u_int8_t en_wol_arp;
+       /* Description - Enable Wake on broadcast message */
+       /* 0.12 - 0.12 */
+        u_int8_t en_wol_bc;
+       /* Description - Enable Wake on multicast message */
+       /* 0.13 - 0.13 */
+        u_int8_t en_wol_mc;
+       /* Description - Enable Wake on unicast message */
+       /* 0.14 - 0.14 */
+        u_int8_t en_wol_uc;
+       /* Description - Enable Wake on PHY activity */
+       /* 0.15 - 0.15 */
+        u_int8_t en_wol_phy;
+};
+
+/* Description -   */
+/* Size in bytes - 264 */
+union tools_open_phy_reg {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 12.31 */
+        struct tools_open_pmdic pmdic;
+       /* Description -  */
+       /* 0.0 - 264.31 */
+        struct tools_open_pmdio pmdio;
+};
+
+/* Description -   */
+/* Size in bytes - 256 */
+union tools_open_mnv_cfg {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 256.31 */
+        struct tools_open_mnva mnva;
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_mnvi mnvi;
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_mnvia mnvia;
+};
+
+/* Description -   */
+/* Size in bytes - 256 */
+union tools_open_nv_cfg {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 8.31 */
+        struct tools_open_wol wol;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_vpi_settings vpi_settings;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_bar_size bar_size;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_sriov sriov;
+};
+
+/* Description -   */
+/* Size in bytes - 1048576 */
+union tools_open_tools_open {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Non-Volatile Cfg Tlvs */
+       /* 0.0 - 256.31 */
+        union tools_open_nv_cfg NVConfig;
+       /* Description - Misc NV Registers, this is temporary untill we integrate with fw db */
+       /* 0.0 - 256.31 */
+        union tools_open_mnv_cfg MNV_Reg;
+       /* Description - Register for accessing FW managed external PHY */
+       /* 0.0 - 264.31 */
+        union tools_open_phy_reg Phy_Reg;
+};
+
+/* Description -   */
+/* Size in bytes - 8 */
+struct tools_open_uint64 {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        u_int32_t hi;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description -  */
+       /* 4.0 - 8.31 */
+        u_int32_t lo;
+};
+
+
+/*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
+/* pmdio_addr_data */
+void tools_open_pmdio_addr_data_pack(const struct tools_open_pmdio_addr_data *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_pmdio_addr_data_unpack(struct tools_open_pmdio_addr_data *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_pmdio_addr_data_print(const struct tools_open_pmdio_addr_data *ptr_struct, FILE* file, int indent_level);
+int tools_open_pmdio_addr_data_size();
+#define TOOLS_OPEN_PMDIO_ADDR_DATA_SIZE    (0x4)
+void tools_open_pmdio_addr_data_dump(const struct tools_open_pmdio_addr_data *ptr_struct, FILE* file);
+/* mnv_hdr */
+void tools_open_mnv_hdr_pack(const struct tools_open_mnv_hdr *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnv_hdr_unpack(struct tools_open_mnv_hdr *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnv_hdr_print(const struct tools_open_mnv_hdr *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnv_hdr_size();
+#define TOOLS_OPEN_MNV_HDR_SIZE    (0x8)
+void tools_open_mnv_hdr_dump(const struct tools_open_mnv_hdr *ptr_struct, FILE* file);
+/* pmdio */
+void tools_open_pmdio_pack(const struct tools_open_pmdio *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_pmdio_unpack(struct tools_open_pmdio *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_pmdio_print(const struct tools_open_pmdio *ptr_struct, FILE* file, int indent_level);
+int tools_open_pmdio_size();
+#define TOOLS_OPEN_PMDIO_SIZE    (0x108)
+void tools_open_pmdio_dump(const struct tools_open_pmdio *ptr_struct, FILE* file);
+/* pmdic */
+void tools_open_pmdic_pack(const struct tools_open_pmdic *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_pmdic_unpack(struct tools_open_pmdic *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_pmdic_print(const struct tools_open_pmdic *ptr_struct, FILE* file, int indent_level);
+int tools_open_pmdic_size();
+#define TOOLS_OPEN_PMDIC_SIZE    (0xc)
+void tools_open_pmdic_dump(const struct tools_open_pmdic *ptr_struct, FILE* file);
+/* mnvia */
+void tools_open_mnvia_pack(const struct tools_open_mnvia *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnvia_unpack(struct tools_open_mnvia *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnvia_print(const struct tools_open_mnvia *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnvia_size();
+#define TOOLS_OPEN_MNVIA_SIZE    (0x8)
+void tools_open_mnvia_dump(const struct tools_open_mnvia *ptr_struct, FILE* file);
+/* mnvi */
+void tools_open_mnvi_pack(const struct tools_open_mnvi *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnvi_unpack(struct tools_open_mnvi *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnvi_print(const struct tools_open_mnvi *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnvi_size();
+#define TOOLS_OPEN_MNVI_SIZE    (0x8)
+void tools_open_mnvi_dump(const struct tools_open_mnvi *ptr_struct, FILE* file);
+/* mnva */
+void tools_open_mnva_pack(const struct tools_open_mnva *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnva_unpack(struct tools_open_mnva *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnva_print(const struct tools_open_mnva *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnva_size();
+#define TOOLS_OPEN_MNVA_SIZE    (0x100)
+void tools_open_mnva_dump(const struct tools_open_mnva *ptr_struct, FILE* file);
+/* sriov */
+void tools_open_sriov_pack(const struct tools_open_sriov *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_sriov_unpack(struct tools_open_sriov *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_sriov_print(const struct tools_open_sriov *ptr_struct, FILE* file, int indent_level);
+int tools_open_sriov_size();
+#define TOOLS_OPEN_SRIOV_SIZE    (0x4)
+void tools_open_sriov_dump(const struct tools_open_sriov *ptr_struct, FILE* file);
+/* bar_size */
+void tools_open_bar_size_pack(const struct tools_open_bar_size *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_bar_size_unpack(struct tools_open_bar_size *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_bar_size_print(const struct tools_open_bar_size *ptr_struct, FILE* file, int indent_level);
+int tools_open_bar_size_size();
+#define TOOLS_OPEN_BAR_SIZE_SIZE    (0x4)
+void tools_open_bar_size_dump(const struct tools_open_bar_size *ptr_struct, FILE* file);
+/* vpi_settings */
+void tools_open_vpi_settings_pack(const struct tools_open_vpi_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_vpi_settings_unpack(struct tools_open_vpi_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_vpi_settings_print(const struct tools_open_vpi_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_vpi_settings_size();
+#define TOOLS_OPEN_VPI_SETTINGS_SIZE    (0x4)
+void tools_open_vpi_settings_dump(const struct tools_open_vpi_settings *ptr_struct, FILE* file);
+/* wol */
+void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_wol_unpack(struct tools_open_wol *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_wol_print(const struct tools_open_wol *ptr_struct, FILE* file, int indent_level);
+int tools_open_wol_size();
+#define TOOLS_OPEN_WOL_SIZE    (0x8)
+void tools_open_wol_dump(const struct tools_open_wol *ptr_struct, FILE* file);
+/* phy_reg */
+void tools_open_phy_reg_pack(const union tools_open_phy_reg *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_phy_reg_unpack(union tools_open_phy_reg *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_phy_reg_print(const union tools_open_phy_reg *ptr_struct, FILE* file, int indent_level);
+int tools_open_phy_reg_size();
+#define TOOLS_OPEN_PHY_REG_SIZE    (0x108)
+void tools_open_phy_reg_dump(const union tools_open_phy_reg *ptr_struct, FILE* file);
+/* mnv_cfg */
+void tools_open_mnv_cfg_pack(const union tools_open_mnv_cfg *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_mnv_cfg_unpack(union tools_open_mnv_cfg *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_mnv_cfg_print(const union tools_open_mnv_cfg *ptr_struct, FILE* file, int indent_level);
+int tools_open_mnv_cfg_size();
+#define TOOLS_OPEN_MNV_CFG_SIZE    (0x100)
+void tools_open_mnv_cfg_dump(const union tools_open_mnv_cfg *ptr_struct, FILE* file);
+/* nv_cfg */
+void tools_open_nv_cfg_pack(const union tools_open_nv_cfg *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_nv_cfg_unpack(union tools_open_nv_cfg *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* file, int indent_level);
+int tools_open_nv_cfg_size();
+#define TOOLS_OPEN_NV_CFG_SIZE    (0x100)
+void tools_open_nv_cfg_dump(const union tools_open_nv_cfg *ptr_struct, FILE* file);
+/* tools_open */
+void tools_open_tools_open_pack(const union tools_open_tools_open *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_tools_open_unpack(union tools_open_tools_open *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_tools_open_print(const union tools_open_tools_open *ptr_struct, FILE* file, int indent_level);
+int tools_open_tools_open_size();
+#define TOOLS_OPEN_TOOLS_OPEN_SIZE    (0x100000)
+void tools_open_tools_open_dump(const union tools_open_tools_open *ptr_struct, FILE* file);
+/* uint64 */
+void tools_open_uint64_pack(const struct tools_open_uint64 *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_uint64_unpack(struct tools_open_uint64 *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_uint64_print(const struct tools_open_uint64 *ptr_struct, FILE* file, int indent_level);
+int tools_open_uint64_size();
+#define TOOLS_OPEN_UINT64_SIZE    (0x8)
+void tools_open_uint64_dump(const struct tools_open_uint64 *ptr_struct, FILE* file);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // TOOLS_OPEN_LAYOUTS_H