From: Ben Pfaff Date: Sat, 4 Jul 2020 00:30:17 +0000 (+0000) Subject: successfully parse trhough the model on descriptives-only, correlations-only X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=f77d98821e46cac467892c240ac1f4757378d784 successfully parse trhough the model on descriptives-only, correlations-only --- diff --git a/dump-float.c b/dump-float.c index 718d2a113b..7f5b7c880f 100644 --- a/dump-float.c +++ b/dump-float.c @@ -21,7 +21,7 @@ print_float (const uint8_t *b) int main (void) { - uint8_t b[] = { 0xc3, 0xe2, 0xb7, 0xc2, 0xb0, 0xe1, 0xb0, 0xfa }; + uint8_t b[] = { 0, 0, 0, 0, 0, 0, 8, 0x40 }; int n = sizeof b; for (int i = 0; i <= n - 8; i++) print_double (b + i); diff --git a/dump-spo2.c b/dump-spo2.c index 971fbab8ea..2ed8b7fc24 100644 --- a/dump-spo2.c +++ b/dump-spo2.c @@ -21,6 +21,8 @@ int version; unsigned int pos; +static int n_dims; + #define XSTR(x) #x #define STR(x) XSTR(x) #define WHERE __FILE__":" STR(__LINE__) @@ -465,6 +467,7 @@ parse_heading(const char *name) match_u16_assert(0xffff); match_u16_assert(0); match_string2_assert(name); + printf("%#x: %s\n", pos, name); } static void @@ -502,10 +505,11 @@ put_safe(const char *s) static void parse_flexible(void); +static int count; static void parse_DspString(void) { - printf("%#x: DspString(", pos); + printf("%#x: DspString#%d(", pos, count++); if (match_byte(2)) { printf("%f, \"", get_double()); @@ -521,6 +525,7 @@ parse_DspString(void) put_safe(get_string1()); printf("\")\n"); } + } static void @@ -532,10 +537,8 @@ match_DspString(void) } static void -match_DspSimpleText(void) -{ /* 03 80 */ - match_byte_assert(3); - match_byte_assert(0x80); +parse_DspSimpleText(void) +{ match_byte_assert(0); if (match_byte(0)) { @@ -544,6 +547,15 @@ match_DspSimpleText(void) match_byte_assert(0); match_zeros_assert(4); } + /* Followed by DspString or DspNumber. */ +} + +static void +match_DspSimpleText(void) +{ /* 03 80 */ + match_byte_assert(3); + match_byte_assert(0x80); + parse_DspSimpleText(); } static void @@ -562,12 +574,11 @@ parse_weirdness(void) } static void -match_NavTreeViewItem(void) +parse_NavTreeViewItem(void) { /* 07 80 */ - match_byte_assert(7); - match_byte_assert(0x80); + int start_pos = pos; match_zeros_assert(1); - if (!match_byte(0) && !match_byte(7) && !match_byte(2)) + if (!match_byte(0) && !match_byte(7) && !match_byte(2) && !match_byte(0xc)) match_byte_assert(8); match_zeros_assert(3); pos++; @@ -630,13 +641,22 @@ match_NavTreeViewItem(void) match_zeros_assert(3); } //fprintf(stderr, "%#x ", pos - 16); + hex_dump(stdout, start_pos, pos - start_pos); +} + +static void +match_NavTreeViewItem(void) +{ + match_byte_assert(7); + match_byte_assert(0x80); + parse_NavTreeViewItem(); } static void parse_DspNumber(void) { + printf("%#x: DspNumber#%d(", pos, count++); match_byte_assert(1); - printf("DspNumber("); parse_format(); match_byte_assert(0x80); match_byte(2); @@ -647,7 +667,8 @@ parse_DspNumber(void) static void match_DspNumber(void) { - match_byte_assert(0x2a); + if (!match_byte(0x18) && !match_byte(0x19)) + match_byte_assert(0x2a); match_byte_assert(0x80); parse_DspNumber(); } @@ -656,8 +677,6 @@ static void parse_DspCell(void) { match_byte_assert(0); - match_DspSimpleText(); - parse_flexible(); /* DspString or DspNumber. */ } static void @@ -684,15 +703,78 @@ match_NavLog(void) } static void -parse_PMModelItemInfo(void) -{ /* 54 80 */ - match_byte_assert(0); - pos += 1; /* Counter */ - match_zeros_assert(7); - pos += 3; - if (!match_byte(0)) - match_byte_assert(0xe); +parse_category(int j) +{ + get_u16(); match_byte_assert(0); + get_u16(); match_byte_assert(0); + match_u32_assert(j); + match_u32_assert(0); + if (get_u16() == 0xffff) + match_u16_assert(0xffff); + else + match_u16_assert(0x0e74); match_byte_assert(0); + match_DspSimpleText(); + match_DspString(); + match_u32_assert(0); +} + +static void +parse_dimension(int i) +{ + printf ("%#x: dimension %d\n", pos, i); + if (i == 0) + { + match_zeros_assert(5); + match_u32_assert(1); + get_u16(); match_u16_assert(0x0e74); match_byte_assert(0); + match_DspSimpleText(); + match_DspString(); + + int n_categories = get_u32(); + for (int j = 0; j < n_categories; j++) + parse_category(j); + } + else + { + match_zeros_assert(6); + + int n_units16 = get_u32(); + match_u16_assert(1); + for (int j = 0; j < n_units16; j++) + get_u16(); + + match_byte_assert(0); + + int n_units32 = get_u32(); + match_u16_assert(0); + for (int j = 0; j < n_units32; j++) + get_u32(); + + get_u16(); match_byte_assert(0); + + get_u16(); match_byte_assert(0); + get_u16(); match_byte_assert(0); + match_u32_assert(0); + match_u32_assert(1); + + get_u16(); match_u16_assert(0x0e74); match_byte_assert(0); + match_DspSimpleText(); + match_DspString(); + + int n_categories = get_u32(); + for (int j = 0; j < n_categories; j++) + parse_category(j); + } +} + +static void +parse_PMModelItemInfo(void) +{ + for (int i = 0; i < n_dims; i++) + parse_dimension(i); + printf("%#x: end of model\n", pos); + exit(0); } static void @@ -701,8 +783,8 @@ match_PMModelItemInfo(void) match_byte_assert(0x54); match_byte_assert(0x80); parse_PMModelItemInfo(); - match_DspSimpleText(); - match_DspString(); + /* DspSimpleText */ + /* DspString */ } static void @@ -724,8 +806,7 @@ parse_NavHead(void) if (!match_byte(1)) match_byte_assert(0); match_zeros_assert(3); - match_DspSimpleText(); - parse_flexible(); + /* DspSimpleText */ } static void @@ -807,29 +888,30 @@ static void parse_PVPivotView(void) { match_byte_assert(5); - match_zeros_assert(4); + printf ("PVPivotView(%d)\n", get_u32()); } static void parse_NDimensional__DspCell(void) { match_byte_assert(0); - match_u32_assert(1); + n_dims = get_u32(); + printf ("NDimensional__DspCell(n_dims=%d)\n", n_dims); } static void parse_IndexedCollection(void) { - match_byte_assert(0); - if (match_byte(0)) + printf("IndexedCollection"); + for (size_t i = 0; ; i++) { - match_zeros_assert(12); - } - else - { - get_u32(); + match_byte_assert(0); + printf("%c%d", i ? 'x' : '(', get_u32()); match_u16_assert(1); + if (!match_u16(0x8011)) + break; } + printf(")\n"); } static void @@ -883,6 +965,22 @@ parse_PVCellStyle(void) match_zeros_assert(2); } +static void +skip_item(const char *name) +{ + int start_pos = pos; + printf("%#x: skipping %s bytes...", pos, name); + while (data[pos + 1] != 0x80 + && !(data[pos] == 0xff && data[pos + 1] == 0xff + && data[pos + 2] == 0 && data[pos + 3] == 0)) + { + assert(pos < n); + pos++; + } + printf("until %#x:", pos); + hex_dump(stdout, start_pos, pos - start_pos); +} + static void parse_flexible(void) { @@ -891,14 +989,34 @@ parse_flexible(void) { match_u16_assert(0); char *heading = get_string2(); - if (!strcmp(heading, "DspCell")) + printf("%#x: %s\n", pos, heading); + if (!strcmp(heading, "NavRoot")) + { + match_byte_assert(2); + match_zeros_assert(32); + } + else if (!strcmp(heading, "NavPivot")) + { + hex_dump(stdout, pos, 021); + pos += 0x21; + } + else if (!strcmp(heading, "DspCell")) parse_DspCell(); + else if (!strcmp(heading, "DspSimpleText")) + parse_DspSimpleText(); else if (!strcmp(heading, "DspNumber")) parse_DspNumber(); else if (!strcmp(heading, "DspString")) parse_DspString(); else if (!strcmp(heading, "NavHead")) parse_NavHead(); + else if (!strcmp(heading, "NavTreeViewItem")) + { + if (0) + parse_NavTreeViewItem(); + else + skip_item(heading); + } else if (!strcmp(heading, "IndexedCollection")) parse_IndexedCollection(); else if (!strcmp(heading, "NavOleItem")) @@ -929,6 +1047,8 @@ parse_flexible(void) parse_PVSeparatorStyle(); else if (!strcmp(heading, "PVCellStyle")) parse_PVCellStyle(); + else if (!strcmp(heading, "PVTextStyle")) + exit(0); else { fprintf(stderr, "don't know %s at offset 0x%x: ", heading, start); @@ -938,7 +1058,7 @@ parse_flexible(void) } else if (data[pos + 1] == 0x80) { - if (data[pos] == 0x2a && data[pos + 1] == 0x80) + if ((data[pos] == 0x2a || data[pos] == 0x18 || data[pos] == 0x19) && data[pos + 1] == 0x80) match_DspNumber(); else if (data[pos] == 0x27 && data[pos + 1] == 0x80) match_DspCell(); @@ -953,8 +1073,10 @@ parse_flexible(void) { /* 3c 80 */ /* 39 80 */ + printf("%#x: %02x %02x ", pos, data[pos], data[pos + 1]); pos += 2; parse_format(); + printf ("\n"); /* match_byte_assert(0x01); match_byte_assert(0x02); match_byte_assert(0x0d); */ @@ -966,7 +1088,7 @@ parse_flexible(void) if (match_byte(2)) { printf ("15 80(%f", get_double()); - printf (" %s)\n", get_string1()); + printf (" \"%s\")\n", get_string1()); if (match_byte(1)) { match_byte_assert(0); @@ -987,8 +1109,6 @@ parse_flexible(void) match_byte_assert(0); if (match_u32(0xc)) match_u16_assert(1); - else - match_zeros_assert(13); } } else if (data[pos] == 0x9 && data[pos + 1] == 0x80) @@ -999,10 +1119,21 @@ parse_flexible(void) match_NavOleItem(); else if (data[pos] == 0x11 || data[pos] == 0x13) { + int type = data[pos]; pos += 2; match_byte_assert(0); - if (match_u32(0xc) || match_u32(0xd)) - match_u16_assert(1); + if (data[pos] != 0) + { + int x = get_u32(); + int y = get_u16(); + if (y == 0) + { + int index = get_u32(); + printf("%02x 80(footnote %d)\n", type, index); + } + else + printf("%02x 80(%d %d)\n", type, x, y); + } else match_zeros_assert(13); } @@ -1058,8 +1189,11 @@ parse_flexible(void) data[pos] == 0x3e || data[pos] == 0x46) { + printf ("%#x: %02x %02x(%02x %02x %02x)\n", + pos, data[pos], data[pos + 1], + data[pos + 2], data[pos + 3], data[pos + 4]); pos += 2; - parse_format(); + pos += 3; } else { @@ -1129,15 +1263,20 @@ parse_flexible(void) } } #endif - else //if (match_u16(2) || match_u16(3) || match_u16(4) || match_u16(5) || match_u16(6) || match_u16(7) || match_u16(8) || match_u16(9)) + else if (match_u16(1)) { - while (data[pos + 1] != 0x80 - && (data[pos] != 0xff || data[pos + 1] != 0xff)) - { - assert(pos < n); - pos++; - } + int start_pos = pos; + char *title = get_string1(); + printf("%#x: title(\"%s\", ", start_pos, title); + match_u32_assert(0); + char *id = get_string1(); + printf("\"%s\")\n", id); + match_byte_assert(0); + match_u32_assert(3); + match_u16_assert(1); } + else //if (match_u16(2) || match_u16(3) || match_u16(4) || match_u16(5) || match_u16(6) || match_u16(7) || match_u16(8) || match_u16(9)) + skip_item("unknown"); #if 0 else if (match_byte(7) || match_byte(4) || match_byte(5) || match_byte(6) || match_byte(8) || match_byte(9) || match_byte(0xb) || match_byte(0xc) || match_byte(0x15) || match_byte(0x16) || match_byte(0x17) || match_byte(0x18) || match_byte(0x1e) || match_byte(0x1a)) { @@ -1268,7 +1407,7 @@ main(int argc, char *argv[]) data[n + i] = i % 2 ? 0xaa : 0x55; close(fd); - setvbuf (stdout, NULL, _IOLBF, 0); + setvbuf (stdout, NULL, _IONBF, 0); match_byte_assert(4); match_u32_assert(0); @@ -1276,6 +1415,18 @@ main(int argc, char *argv[]) match_u32_assert(1); match_byte_assert(0x63); + for (;;) + { + if (data[pos] == 0) + { + //printf("zero\n"); + pos++; + } + else + parse_flexible(); + } + exit(0); + parse_heading("NavRoot"); match_byte_assert(2); match_zeros_assert(32); @@ -1343,7 +1494,10 @@ main(int argc, char *argv[]) for (;;) { if (data[pos] == 0) - pos++; + { + //printf("zero\n"); + pos++; + } else parse_flexible(); } @@ -1427,7 +1581,10 @@ main(int argc, char *argv[]) while (data[pos] != 1) { if (data[pos] == 0) - pos++; + { + printf("zero\n"); + pos++; + } else parse_flexible(); } diff --git a/spo-notes b/spo-notes index 95b212e052..b14c001cc8 100644 --- a/spo-notes +++ b/spo-notes @@ -204,7 +204,7 @@ NavTitle 02 00 00 00 00 00 00 00 00 18 00 00 00 03 .. .. .. 00 04 00 00 .. .. f 80 02 80 01 02 28 05 00 01 80 01 02 28 05 00 01 ff -80 01 03 28 05 80 02 +80 01 03 28 05 80 02 80 00 03 80 00 00 00 00 00 00 00 00 00 00 .. @@ -255,7 +255,7 @@ ZMAW_zaj3.dump ---------------------------------------------------------------------- rec:PMModelItemInfo 00 - .. .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Contents" 07 .. .. .. 55 80 .. 57 80 .. + .. .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Contents" 07 .. .. .. 55 80 .. 57 80 .. 00 .. .. .. .. .. .. .. 07 .. 74 0e cell F40.2 "Output Created" .. .. .. .. 55 80 .. 57 80 .. 01 .. .. .. .. .. .. .. 08 .. 74 0e cell F40.2 "Comments" .. .. .. .. 55 80 .. 57 80 .. .. .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Input" 06 .. .. .. 55 80 .. 57 80 .. @@ -264,7 +264,7 @@ rec:PMModelItemInfo 00 04 .. .. .. .. .. .. .. 0e .. 74 0e cell F40.2 "Filter" .. .. .. .. 55 80 .. 57 80 .. 05 .. .. .. .. .. .. .. 11 .. 74 0e cell F40.2 "Weight" .. .. .. .. 55 80 .. 57 80 .. 06 .. .. .. .. .. .. .. 12 .. 74 0e cell F40.2 "Split File" .. .. .. .. 55 80 .. 57 80 .. - 07 .. .. .. .. .. .. .. 13 .. 74 0e cell F40.2 "N of Rows in Working Data File" .. .. .. .. 55 80 .. 57 80 .. + 07 .. .. .. .. .. .. .. 13 .. 74 0e cell F40.2 "N of Rows in Working Data File" .. .. .. .. 55 80 .. 57 80 .. .. .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Missing Value Handling" 02 .. .. .. 55 80 .. 57 80 .. 08 .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Definition of Missing" .. .. .. .. 55 80 .. 57 80 .. 09 .. .. .. .. .. .. .. .. .. .. .. cell F40.2 "Cases Used" .. .. .. .. 55 80 .. 57 80 .. @@ -727,7 +727,7 @@ When the top-level "Output" node is selected for save: (This is a valid spot for the file to contain 00000000 then eof) 02ee ffff 0000 "NavLog" -02fa 02 i0*2 i24 +02fa 02 i0*2 i24 0307 (i0 | i-40) (i691 | i987) (2-3 digit negative int) i1 0317 i0 0318 03 80 00*10 @@ -1068,7 +1068,7 @@ Just past "Cluster", using boot/Contents as exemplary: Notes Output Created 16-JAN-2008 02:45:55 -Comments +Comments Input Data \\Ugly\amead\consulting\center\Dell\Exams\RE\analyses\Blended15\pilotdata-2008-01-15.csv Active Dataset raw1 Filter @@ -1077,6 +1077,519 @@ Input Data \\Ugly\amead\consulting\center\Dell\Exams\RE\analyses\Blended15\pilot N of Rows in Working Data File 366 Missing Value Handling Definition of Missing User-defined missing values are treated as missing. Cases Used Statistics are based on all cases with valid data. -Syntax FREQUENCIES VARIABLES=exam_id exam_name restarts /ORDER= ANALYSIS . +Syntax FREQUENCIES VARIABLES=exam_id exam_name restarts /ORDER= ANALYSIS . Resources Elapsed Time 0:00:00.02 Processor Time 0:00:00.03 + +NavRoot appears to be a container node in the tree +(not necessarily the actual root of the tree though). + +descriptives-only.spo +ffff 0000 "DspNumber" +01 +F40.5 80 02 257.0 "257" +11 80 00 01 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 + +18 80 +01 +F40.5 80 02 1.0 "1" +11 80 00 01 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 + +18 80 +01 +F40.5 80 02 3.0 "3" +11 80 00 01 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 + +18 80 +01 +F40.2 80 02 1.13 "1.13" +11 80 00 01 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 + +01 +F40.3 80 02 .383 ".383" +11 80 00 02 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 + +01 +F40.3 80 02 2.986 "2.986" +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 + +01 +F40.3 80 02 .152 ".152" +11 80 00 02 00 00 00 01 00 +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 + +01 +F40.3 80 02 8.794 "8.794" +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 + +01 +F40.3 80 02 .303 ".303" +11 80 00 07 00 00 00 01 00 +11 80 00 01 00 00 00 01 00 + +15 80 00 +03 80 00 00 00 00 00 00 00 00 00 00 18 80 +01 +F40.5 80 02 + +descriptives-only.spo: +ffff 0000 "PMModelItemInfo" + +-- DIMENSION 1 -- +00 +00 00 00 00 + +01 00 00 00 +13 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 "Stat Type" i2 # <- number of children + +13 84 00 +15 84 00 +00 00 00 00 +00 00 00 00 +14 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Statistic" i0 + +13 84 00 +15 84 00 +01 00 00 00 +00 00 00 00 +17 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Std. Error" i0 + +-- DIMENSION 2 -- + +00 00 + +00 00 00 00 +i2 # <-- number of 2-byte units below +01 00 +19 04, 1d 04 + +00 + +i2 # <-- number of 4-byte units below +00 00 +i0, i1 + +11 84 00 + +13 84 00 +15 84 00 +00 00 00 00 +01 00 00 00 +15 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Statistics" i7 + +13 84 00 +15 84 00 +00 00 00 00 +00 00 00 00 +10 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "N" i0 + +13 84 00 +15 84 00 +01 00 00 00 +00 00 00 00 +0e 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Minimum" i0 + +13 84 00 +15 84 00 +02 00 00 00 +00 00 00 00 +0c 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Maximum" i0 + +13 84 00 +15 84 00 +03 00 00 00 +00 00 00 00 +0d 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Mean" i0 + +13 84 00 +15 84 00 +04 00 00 00 +00 00 00 00 +16 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Std. Deviation" i0 + +13 84 00 +15 84 00 +05 00 00 00 +00 00 00 00 +12 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Skewness" i0 + +13 84 00 +15 84 00 +06 00 00 00 +00 00 00 00 +0b 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Kurtosis" i0 + +-- DIMENSION 3 -- + +00 00 00 00 00 00 +i7 # <- number of 2-byte units below +01 00 +26 04, 2a 04, 2e 04, 32 04, 36 04, 3a 04, 3e 04 + +00 + +i7 # <- number of 4-byte units below +00 00 +i0, i1, i2, i3, i4, i5, i6 + +11 84 00 + +13 84 00 +15 84 00 +00 00 00 00 +01 00 00 00 +1a 07 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Variables" i30 + +13 84 00 +15 84 00 +00 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "Race" i0 + +13 84 00 +15 + + + +IndexedCollection: correlations-only (8x19x3) +00 08 00 00 00 01 00 11 80 +00 13 00 00 00 01 00 11 80 +00 03 00 00 00 01 00 +descriptives-only (30x7x1) +00 1e 00 00 00 01 00 11 80 +00 07 00 00 00 01 00 11 80 +00 01 00 00 00 01 00 + +correlations-only.spo: +ffff 0000 "PMModelItemInfo" + +-- DIMENSION 1 -- +00 +00 00 00 00 + +01 00 00 00 +91 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Statistics" i3 + +1b 86 00 +1d 86 00 +00 00 00 00 +00 00 00 00 +98 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Pearson Correlation" i0 + +1b 86 00 +1d 86 00 +01 00 00 00 +00 00 00 00 +99 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Sig. (2-tailed)" i0 + +1b 86 00 +1d 86 00 +02 00 00 00 +00 00 00 00 +94 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "N" i0 + +-- DIMENSION 2 -- + +00 00 + +00 00 00 00 +i3 # <-- number of 2-byte units below +01 00 +21 06, 25 06, 29 06 +00 + +i3 # <-- number of 4-byte units below +00 00 +i0, i1, i2 + +19 86 00 + +1b 86 00 +1d 86 00 +00 00 00 00 +01 00 00 00 +90 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Variables" i19 + +1b 86 00 +1d 86 00 +00 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "OC" i0 + +1b 86 00 +1d 86 00 +01 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "MA" i0 + +1b 86 00 +1d 86 00 +02 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "SPL" i0 + +1b 86 00 +1d 86 00 +03 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "EX" i0 + +1b 86 00 +1d 86 00 +04 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "A" i0 + +1b 86 00 +1d 86 00 +05 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "TM" i0 + +1b 86 00 +1d 86 00 +06 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "IND" i0 + +1b 86 00 +1d 86 00 +07 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "SC" i0 + +1b 86 00 +1d 86 00 +08 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 "DOMINANT" i0 + +1b 86 00 +1d 86 00 +09 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "PARTICIPATIVE" i0 + +1b 86 00 +1d 86 00 +0a 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "AFFABLE" i0 + +1b 86 00 +1d 86 00 +0b 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "DUTIFUL" i0 + +1b 86 00 +1d 86 00 +0c 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "ORDERLY" i0 + +1b 86 00 +1d 86 00 +0d 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "COMPETENT" i0 + +1b 86 00 +1d 86 00 +0e 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "AGGRESSIVE" i0 + +1b 86 00 +1d 86 00 +0f 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "DISTRUSTFUL" i0 + +1b 86 00 +1d 86 00 +10 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "ARTISTIC" i0 + +1b 86 00 +1d 86 00 +11 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "VISIONARY" i0 + +1b 86 00 +1d 86 00 +12 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "CALM" i0 + +-- DIMENSION 3 -- + +00 00 + +00 00 00 00 +i19 # <- number of 2-byte units below +01 00 +32 06, 36 06, 3a 06, 3e 06, 42 06, 46 06, 4a 06, 4e 06, 52 06, 56 06, 5a 06, 5e 06, 62 06, 66 06, 6a 06, 6e 06, 72 06, 76 06, 7a 06 + +00 + +i19 # <- number of 4-byte units below +00 00 +i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18 + +19 86 00 + +1b 86 00 +1d 86 00 +00 00 00 00 +01 00 00 00 +95 1a 74 0e 00 +03 80 00 00 00 00 00 00 00 00 00 00 +05 80 01 F40.2 00 01 "Variables" i8 + +1b 86 00 +1d 86 00 +00 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "Quick learner" i0 + +1b 86 00 +1d 86 00 +01 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "Work ethic" i0 + +1b 86 00 +1d 86 00 +02 00 00 00 +00 00 00 00 +ff ff ff ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 F40.2 00 01 "Team-orientation" +00 00 00 00 1b 86 +00 1d 86 00 03 00 00 00 00 00 00 00 ff ff ff ff +00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 +F40.2 00 01 "Confidence/Resilience" +00 00 00 00 1b +86 00 1d 86 00 04 00 00 00 00 00 00 00 ff ff ff +ff 00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 +01 F40.2 00 01 "Initiative" +00 00 00 00 1b 86 00 1d 86 00 05 00 00 00 00 +00 00 00 ff ff ff ff 00 +03 80 00 00 00 00 00 10 +00 00 00 00 +05 80 01 F40.2 00 01 "Conscientious" +00 00 00 00 1b 86 +00 1d 86 00 06 00 00 00 00 00 00 00 ff ff ff ff +00 +03 80 00 00 00 00 00 10 00 00 00 00 +05 80 01 +F40.2 00 01 "Perseverance" +00 00 00 00 1b 86 00 1d 86 00 07 00 00 00 +00 00 00 00 ff ff ff ff 00 +03 80 00 00 00 00 00 +10 00 00 00 00 +05 80 01 F40.2 00 01 "Overall" +00 00 00 00 00 00 00 00 00 00 08 +00 00 00 01 00 83 06 87 06 8b 06 8f 06 93 06 97 +06 9b 06 9f 06 00 08 00 00 00 00 00 00 00 00 00 +01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 +05 00 00 00 06 00 00 00 07 00 00 00 00 02 00 00 +00 01 00