/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
<<<<<<< Updated upstream
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
=======
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
>>>>>>> Stashed changes
 * limitations under the License.
 */

package org.apache.jdo.tck.pc.fieldtypes;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.Locale;
import java.util.TreeMap;

public class TreeMapStringKeyCollections {
  public int identifier;
  public TreeMap<String, Object> TreeMapOfString_Object0;
  public TreeMap<String, Object> TreeMapOfString_Object1;
  public TreeMap<String, Object> TreeMapOfString_Object2;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass3;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass4;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass5;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface6;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface7;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface8;
  public TreeMap<String, String> TreeMapOfString_String9;
  public TreeMap<String, String> TreeMapOfString_String10;
  public TreeMap<String, String> TreeMapOfString_String11;
  public TreeMap<String, Date> TreeMapOfString_Date12;
  public TreeMap<String, Date> TreeMapOfString_Date13;
  public TreeMap<String, Date> TreeMapOfString_Date14;
  public TreeMap<String, Locale> TreeMapOfString_Locale15;
  public TreeMap<String, Locale> TreeMapOfString_Locale16;
  public TreeMap<String, Locale> TreeMapOfString_Locale17;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal18;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal19;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal20;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger21;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger22;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger23;
  public TreeMap<String, Byte> TreeMapOfString_Byte24;
  public TreeMap<String, Byte> TreeMapOfString_Byte25;
  public TreeMap<String, Byte> TreeMapOfString_Byte26;
  public TreeMap<String, Double> TreeMapOfString_Double27;
  public TreeMap<String, Double> TreeMapOfString_Double28;
  public TreeMap<String, Double> TreeMapOfString_Double29;
  public TreeMap<String, Float> TreeMapOfString_Float30;
  public TreeMap<String, Float> TreeMapOfString_Float31;
  public TreeMap<String, Float> TreeMapOfString_Float32;
  public TreeMap<String, Integer> TreeMapOfString_Integer33;
  public TreeMap<String, Integer> TreeMapOfString_Integer34;
  public TreeMap<String, Integer> TreeMapOfString_Integer35;
  public TreeMap<String, Long> TreeMapOfString_Long36;
  public TreeMap<String, Long> TreeMapOfString_Long37;
  public TreeMap<String, Long> TreeMapOfString_Long38;
  public TreeMap<String, Short> TreeMapOfString_Short39;
  public TreeMap<String, Short> TreeMapOfString_Short40;
  public TreeMap<String, Short> TreeMapOfString_Short41;
  public TreeMap<String, Object> TreeMapOfString_Object42;
  public TreeMap<String, Object> TreeMapOfString_Object43;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass45;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass46;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface48;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface49;
  public TreeMap<String, String> TreeMapOfString_String51;
  public TreeMap<String, String> TreeMapOfString_String52;
  public TreeMap<String, Date> TreeMapOfString_Date54;
  public TreeMap<String, Date> TreeMapOfString_Date55;
  public TreeMap<String, Locale> TreeMapOfString_Locale57;
  public TreeMap<String, Locale> TreeMapOfString_Locale58;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal60;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal61;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger63;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger64;
  public TreeMap<String, Byte> TreeMapOfString_Byte66;
  public TreeMap<String, Byte> TreeMapOfString_Byte67;
  public TreeMap<String, Double> TreeMapOfString_Double69;
  public TreeMap<String, Double> TreeMapOfString_Double70;
  public TreeMap<String, Float> TreeMapOfString_Float72;
  public TreeMap<String, Float> TreeMapOfString_Float73;
  public TreeMap<String, Integer> TreeMapOfString_Integer75;
  public TreeMap<String, Integer> TreeMapOfString_Integer76;
  public TreeMap<String, Long> TreeMapOfString_Long78;
  public TreeMap<String, Long> TreeMapOfString_Long79;
  public TreeMap<String, Short> TreeMapOfString_Short81;
  public TreeMap<String, Short> TreeMapOfString_Short82;
  public TreeMap<String, Object> TreeMapOfString_Object84;
  public TreeMap<String, Object> TreeMapOfString_Object86;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass87;
  public TreeMap<String, SimpleClass> TreeMapOfString_SimpleClass89;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface90;
  public TreeMap<String, SimpleInterface> TreeMapOfString_SimpleInterface92;
  public TreeMap<String, String> TreeMapOfString_String93;
  public TreeMap<String, String> TreeMapOfString_String95;
  public TreeMap<String, Date> TreeMapOfString_Date96;
  public TreeMap<String, Date> TreeMapOfString_Date98;
  public TreeMap<String, Locale> TreeMapOfString_Locale99;
  public TreeMap<String, Locale> TreeMapOfString_Locale101;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal102;
  public TreeMap<String, BigDecimal> TreeMapOfString_BigDecimal104;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger105;
  public TreeMap<String, BigInteger> TreeMapOfString_BigInteger107;
  public TreeMap<String, Byte> TreeMapOfString_Byte108;
  public TreeMap<String, Byte> TreeMapOfString_Byte110;
  public TreeMap<String, Double> TreeMapOfString_Double111;
  public TreeMap<String, Double> TreeMapOfString_Double113;
  public TreeMap<String, Float> TreeMapOfString_Float114;
  public TreeMap<String, Float> TreeMapOfString_Float116;
  public TreeMap<String, Integer> TreeMapOfString_Integer117;
  public TreeMap<String, Integer> TreeMapOfString_Integer119;
  public TreeMap<String, Long> TreeMapOfString_Long120;
  public TreeMap<String, Long> TreeMapOfString_Long122;
  public TreeMap<String, Short> TreeMapOfString_Short123;
  public TreeMap<String, Short> TreeMapOfString_Short125;

  public static final String[] fieldSpecs = {
    "public TreeMap TreeMapOfString_Object0",
    "embedded-value=true public TreeMap TreeMapOfString_Object1",
    "embedded-value=false public TreeMap TreeMapOfString_Object2",
    "public TreeMap TreeMapOfString_SimpleClass3",
    "embedded-value=true public TreeMap TreeMapOfString_SimpleClass4",
    "embedded-value=false public TreeMap TreeMapOfString_SimpleClass5",
    "public TreeMap TreeMapOfString_SimpleInterface6",
    "embedded-value=true public TreeMap TreeMapOfString_SimpleInterface7",
    "embedded-value=false public TreeMap TreeMapOfString_SimpleInterface8",
    "public TreeMap TreeMapOfString_String9",
    "embedded-value=true public TreeMap TreeMapOfString_String10",
    "embedded-value=false public TreeMap TreeMapOfString_String11",
    "public TreeMap TreeMapOfString_Date12",
    "embedded-value=true public TreeMap TreeMapOfString_Date13",
    "embedded-value=false public TreeMap TreeMapOfString_Date14",
    "public TreeMap TreeMapOfString_Locale15",
    "embedded-value=true public TreeMap TreeMapOfString_Locale16",
    "embedded-value=false public TreeMap TreeMapOfString_Locale17",
    "public TreeMap TreeMapOfString_BigDecimal18",
    "embedded-value=true public TreeMap TreeMapOfString_BigDecimal19",
    "embedded-value=false public TreeMap TreeMapOfString_BigDecimal20",
    "public TreeMap TreeMapOfString_BigInteger21",
    "embedded-value=true public TreeMap TreeMapOfString_BigInteger22",
    "embedded-value=false public TreeMap TreeMapOfString_BigInteger23",
    "public TreeMap TreeMapOfString_Byte24",
    "embedded-value=true public TreeMap TreeMapOfString_Byte25",
    "embedded-value=false public TreeMap TreeMapOfString_Byte26",
    "public TreeMap TreeMapOfString_Double27",
    "embedded-value=true public TreeMap TreeMapOfString_Double28",
    "embedded-value=false public TreeMap TreeMapOfString_Double29",
    "public TreeMap TreeMapOfString_Float30",
    "embedded-value=true public TreeMap TreeMapOfString_Float31",
    "embedded-value=false public TreeMap TreeMapOfString_Float32",
    "public TreeMap TreeMapOfString_Integer33",
    "embedded-value=true public TreeMap TreeMapOfString_Integer34",
    "embedded-value=false public TreeMap TreeMapOfString_Integer35",
    "public TreeMap TreeMapOfString_Long36",
    "embedded-value=true public TreeMap TreeMapOfString_Long37",
    "embedded-value=false public TreeMap TreeMapOfString_Long38",
    "public TreeMap TreeMapOfString_Short39",
    "embedded-value=true public TreeMap TreeMapOfString_Short40",
    "embedded-value=false public TreeMap TreeMapOfString_Short41",
    "embedded-key=true  public TreeMap TreeMapOfString_Object42",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Object43",
    "embedded-key=true  public TreeMap TreeMapOfString_SimpleClass45",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_SimpleClass46",
    "embedded-key=true  public TreeMap TreeMapOfString_SimpleInterface48",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_SimpleInterface49",
    "embedded-key=true  public TreeMap TreeMapOfString_String51",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_String52",
    "embedded-key=true  public TreeMap TreeMapOfString_Date54",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Date55",
    "embedded-key=true  public TreeMap TreeMapOfString_Locale57",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Locale58",
    "embedded-key=true  public TreeMap TreeMapOfString_BigDecimal60",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_BigDecimal61",
    "embedded-key=true  public TreeMap TreeMapOfString_BigInteger63",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_BigInteger64",
    "embedded-key=true  public TreeMap TreeMapOfString_Byte66",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Byte67",
    "embedded-key=true  public TreeMap TreeMapOfString_Double69",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Double70",
    "embedded-key=true  public TreeMap TreeMapOfString_Float72",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Float73",
    "embedded-key=true  public TreeMap TreeMapOfString_Integer75",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Integer76",
    "embedded-key=true  public TreeMap TreeMapOfString_Long78",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Long79",
    "embedded-key=true  public TreeMap TreeMapOfString_Short81",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_Short82",
    "embedded-key=false  public TreeMap TreeMapOfString_Object84",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Object86",
    "embedded-key=false  public TreeMap TreeMapOfString_SimpleClass87",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_SimpleClass89",
    "embedded-key=false  public TreeMap TreeMapOfString_SimpleInterface90",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_SimpleInterface92",
    "embedded-key=false  public TreeMap TreeMapOfString_String93",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_String95",
    "embedded-key=false  public TreeMap TreeMapOfString_Date96",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Date98",
    "embedded-key=false  public TreeMap TreeMapOfString_Locale99",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Locale101",
    "embedded-key=false  public TreeMap TreeMapOfString_BigDecimal102",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_BigDecimal104",
    "embedded-key=false  public TreeMap TreeMapOfString_BigInteger105",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_BigInteger107",
    "embedded-key=false  public TreeMap TreeMapOfString_Byte108",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Byte110",
    "embedded-key=false  public TreeMap TreeMapOfString_Double111",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Double113",
    "embedded-key=false  public TreeMap TreeMapOfString_Float114",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Float116",
    "embedded-key=false  public TreeMap TreeMapOfString_Integer117",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Integer119",
    "embedded-key=false  public TreeMap TreeMapOfString_Long120",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Long122",
    "embedded-key=false  public TreeMap TreeMapOfString_Short123",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_Short125"
  };

  public int getLength() {
    return fieldSpecs.length;
  }

  public TreeMap<?, ?> get(int index) {
    switch (index) {
      case (0):
        return TreeMapOfString_Object0;
      case (1):
        return TreeMapOfString_Object1;
      case (2):
        return TreeMapOfString_Object2;
      case (3):
        return TreeMapOfString_SimpleClass3;
      case (4):
        return TreeMapOfString_SimpleClass4;
      case (5):
        return TreeMapOfString_SimpleClass5;
      case (6):
        return TreeMapOfString_SimpleInterface6;
      case (7):
        return TreeMapOfString_SimpleInterface7;
      case (8):
        return TreeMapOfString_SimpleInterface8;
      case (9):
        return TreeMapOfString_String9;
      case (10):
        return TreeMapOfString_String10;
      case (11):
        return TreeMapOfString_String11;
      case (12):
        return TreeMapOfString_Date12;
      case (13):
        return TreeMapOfString_Date13;
      case (14):
        return TreeMapOfString_Date14;
      case (15):
        return TreeMapOfString_Locale15;
      case (16):
        return TreeMapOfString_Locale16;
      case (17):
        return TreeMapOfString_Locale17;
      case (18):
        return TreeMapOfString_BigDecimal18;
      case (19):
        return TreeMapOfString_BigDecimal19;
      case (20):
        return TreeMapOfString_BigDecimal20;
      case (21):
        return TreeMapOfString_BigInteger21;
      case (22):
        return TreeMapOfString_BigInteger22;
      case (23):
        return TreeMapOfString_BigInteger23;
      case (24):
        return TreeMapOfString_Byte24;
      case (25):
        return TreeMapOfString_Byte25;
      case (26):
        return TreeMapOfString_Byte26;
      case (27):
        return TreeMapOfString_Double27;
      case (28):
        return TreeMapOfString_Double28;
      case (29):
        return TreeMapOfString_Double29;
      case (30):
        return TreeMapOfString_Float30;
      case (31):
        return TreeMapOfString_Float31;
      case (32):
        return TreeMapOfString_Float32;
      case (33):
        return TreeMapOfString_Integer33;
      case (34):
        return TreeMapOfString_Integer34;
      case (35):
        return TreeMapOfString_Integer35;
      case (36):
        return TreeMapOfString_Long36;
      case (37):
        return TreeMapOfString_Long37;
      case (38):
        return TreeMapOfString_Long38;
      case (39):
        return TreeMapOfString_Short39;
      case (40):
        return TreeMapOfString_Short40;
      case (41):
        return TreeMapOfString_Short41;
      case (42):
        return TreeMapOfString_Object42;
      case (43):
        return TreeMapOfString_Object43;
      case (44):
        return TreeMapOfString_SimpleClass45;
      case (45):
        return TreeMapOfString_SimpleClass46;
      case (46):
        return TreeMapOfString_SimpleInterface48;
      case (47):
        return TreeMapOfString_SimpleInterface49;
      case (48):
        return TreeMapOfString_String51;
      case (49):
        return TreeMapOfString_String52;
      case (50):
        return TreeMapOfString_Date54;
      case (51):
        return TreeMapOfString_Date55;
      case (52):
        return TreeMapOfString_Locale57;
      case (53):
        return TreeMapOfString_Locale58;
      case (54):
        return TreeMapOfString_BigDecimal60;
      case (55):
        return TreeMapOfString_BigDecimal61;
      case (56):
        return TreeMapOfString_BigInteger63;
      case (57):
        return TreeMapOfString_BigInteger64;
      case (58):
        return TreeMapOfString_Byte66;
      case (59):
        return TreeMapOfString_Byte67;
      case (60):
        return TreeMapOfString_Double69;
      case (61):
        return TreeMapOfString_Double70;
      case (62):
        return TreeMapOfString_Float72;
      case (63):
        return TreeMapOfString_Float73;
      case (64):
        return TreeMapOfString_Integer75;
      case (65):
        return TreeMapOfString_Integer76;
      case (66):
        return TreeMapOfString_Long78;
      case (67):
        return TreeMapOfString_Long79;
      case (68):
        return TreeMapOfString_Short81;
      case (69):
        return TreeMapOfString_Short82;
      case (70):
        return TreeMapOfString_Object84;
      case (71):
        return TreeMapOfString_Object86;
      case (72):
        return TreeMapOfString_SimpleClass87;
      case (73):
        return TreeMapOfString_SimpleClass89;
      case (74):
        return TreeMapOfString_SimpleInterface90;
      case (75):
        return TreeMapOfString_SimpleInterface92;
      case (76):
        return TreeMapOfString_String93;
      case (77):
        return TreeMapOfString_String95;
      case (78):
        return TreeMapOfString_Date96;
      case (79):
        return TreeMapOfString_Date98;
      case (80):
        return TreeMapOfString_Locale99;
      case (81):
        return TreeMapOfString_Locale101;
      case (82):
        return TreeMapOfString_BigDecimal102;
      case (83):
        return TreeMapOfString_BigDecimal104;
      case (84):
        return TreeMapOfString_BigInteger105;
      case (85):
        return TreeMapOfString_BigInteger107;
      case (86):
        return TreeMapOfString_Byte108;
      case (87):
        return TreeMapOfString_Byte110;
      case (88):
        return TreeMapOfString_Double111;
      case (89):
        return TreeMapOfString_Double113;
      case (90):
        return TreeMapOfString_Float114;
      case (91):
        return TreeMapOfString_Float116;
      case (92):
        return TreeMapOfString_Integer117;
      case (93):
        return TreeMapOfString_Integer119;
      case (94):
        return TreeMapOfString_Long120;
      case (95):
        return TreeMapOfString_Long122;
      case (96):
        return TreeMapOfString_Short123;
      case (97):
        return TreeMapOfString_Short125;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  @SuppressWarnings("unchecked")
  public boolean set(int index, @SuppressWarnings("rawtypes") TreeMap value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        TreeMapOfString_Object0 = value;
        break;
      case (1):
        TreeMapOfString_Object1 = value;
        break;
      case (2):
        TreeMapOfString_Object2 = value;
        break;
      case (3):
        TreeMapOfString_SimpleClass3 = value;
        break;
      case (4):
        TreeMapOfString_SimpleClass4 = value;
        break;
      case (5):
        TreeMapOfString_SimpleClass5 = value;
        break;
      case (6):
        TreeMapOfString_SimpleInterface6 = value;
        break;
      case (7):
        TreeMapOfString_SimpleInterface7 = value;
        break;
      case (8):
        TreeMapOfString_SimpleInterface8 = value;
        break;
      case (9):
        TreeMapOfString_String9 = value;
        break;
      case (10):
        TreeMapOfString_String10 = value;
        break;
      case (11):
        TreeMapOfString_String11 = value;
        break;
      case (12):
        TreeMapOfString_Date12 = value;
        break;
      case (13):
        TreeMapOfString_Date13 = value;
        break;
      case (14):
        TreeMapOfString_Date14 = value;
        break;
      case (15):
        TreeMapOfString_Locale15 = value;
        break;
      case (16):
        TreeMapOfString_Locale16 = value;
        break;
      case (17):
        TreeMapOfString_Locale17 = value;
        break;
      case (18):
        TreeMapOfString_BigDecimal18 = value;
        break;
      case (19):
        TreeMapOfString_BigDecimal19 = value;
        break;
      case (20):
        TreeMapOfString_BigDecimal20 = value;
        break;
      case (21):
        TreeMapOfString_BigInteger21 = value;
        break;
      case (22):
        TreeMapOfString_BigInteger22 = value;
        break;
      case (23):
        TreeMapOfString_BigInteger23 = value;
        break;
      case (24):
        TreeMapOfString_Byte24 = value;
        break;
      case (25):
        TreeMapOfString_Byte25 = value;
        break;
      case (26):
        TreeMapOfString_Byte26 = value;
        break;
      case (27):
        TreeMapOfString_Double27 = value;
        break;
      case (28):
        TreeMapOfString_Double28 = value;
        break;
      case (29):
        TreeMapOfString_Double29 = value;
        break;
      case (30):
        TreeMapOfString_Float30 = value;
        break;
      case (31):
        TreeMapOfString_Float31 = value;
        break;
      case (32):
        TreeMapOfString_Float32 = value;
        break;
      case (33):
        TreeMapOfString_Integer33 = value;
        break;
      case (34):
        TreeMapOfString_Integer34 = value;
        break;
      case (35):
        TreeMapOfString_Integer35 = value;
        break;
      case (36):
        TreeMapOfString_Long36 = value;
        break;
      case (37):
        TreeMapOfString_Long37 = value;
        break;
      case (38):
        TreeMapOfString_Long38 = value;
        break;
      case (39):
        TreeMapOfString_Short39 = value;
        break;
      case (40):
        TreeMapOfString_Short40 = value;
        break;
      case (41):
        TreeMapOfString_Short41 = value;
        break;
      case (42):
        TreeMapOfString_Object42 = value;
        break;
      case (43):
        TreeMapOfString_Object43 = value;
        break;
      case (44):
        TreeMapOfString_SimpleClass45 = value;
        break;
      case (45):
        TreeMapOfString_SimpleClass46 = value;
        break;
      case (46):
        TreeMapOfString_SimpleInterface48 = value;
        break;
      case (47):
        TreeMapOfString_SimpleInterface49 = value;
        break;
      case (48):
        TreeMapOfString_String51 = value;
        break;
      case (49):
        TreeMapOfString_String52 = value;
        break;
      case (50):
        TreeMapOfString_Date54 = value;
        break;
      case (51):
        TreeMapOfString_Date55 = value;
        break;
      case (52):
        TreeMapOfString_Locale57 = value;
        break;
      case (53):
        TreeMapOfString_Locale58 = value;
        break;
      case (54):
        TreeMapOfString_BigDecimal60 = value;
        break;
      case (55):
        TreeMapOfString_BigDecimal61 = value;
        break;
      case (56):
        TreeMapOfString_BigInteger63 = value;
        break;
      case (57):
        TreeMapOfString_BigInteger64 = value;
        break;
      case (58):
        TreeMapOfString_Byte66 = value;
        break;
      case (59):
        TreeMapOfString_Byte67 = value;
        break;
      case (60):
        TreeMapOfString_Double69 = value;
        break;
      case (61):
        TreeMapOfString_Double70 = value;
        break;
      case (62):
        TreeMapOfString_Float72 = value;
        break;
      case (63):
        TreeMapOfString_Float73 = value;
        break;
      case (64):
        TreeMapOfString_Integer75 = value;
        break;
      case (65):
        TreeMapOfString_Integer76 = value;
        break;
      case (66):
        TreeMapOfString_Long78 = value;
        break;
      case (67):
        TreeMapOfString_Long79 = value;
        break;
      case (68):
        TreeMapOfString_Short81 = value;
        break;
      case (69):
        TreeMapOfString_Short82 = value;
        break;
      case (70):
        TreeMapOfString_Object84 = value;
        break;
      case (71):
        TreeMapOfString_Object86 = value;
        break;
      case (72):
        TreeMapOfString_SimpleClass87 = value;
        break;
      case (73):
        TreeMapOfString_SimpleClass89 = value;
        break;
      case (74):
        TreeMapOfString_SimpleInterface90 = value;
        break;
      case (75):
        TreeMapOfString_SimpleInterface92 = value;
        break;
      case (76):
        TreeMapOfString_String93 = value;
        break;
      case (77):
        TreeMapOfString_String95 = value;
        break;
      case (78):
        TreeMapOfString_Date96 = value;
        break;
      case (79):
        TreeMapOfString_Date98 = value;
        break;
      case (80):
        TreeMapOfString_Locale99 = value;
        break;
      case (81):
        TreeMapOfString_Locale101 = value;
        break;
      case (82):
        TreeMapOfString_BigDecimal102 = value;
        break;
      case (83):
        TreeMapOfString_BigDecimal104 = value;
        break;
      case (84):
        TreeMapOfString_BigInteger105 = value;
        break;
      case (85):
        TreeMapOfString_BigInteger107 = value;
        break;
      case (86):
        TreeMapOfString_Byte108 = value;
        break;
      case (87):
        TreeMapOfString_Byte110 = value;
        break;
      case (88):
        TreeMapOfString_Double111 = value;
        break;
      case (89):
        TreeMapOfString_Double113 = value;
        break;
      case (90):
        TreeMapOfString_Float114 = value;
        break;
      case (91):
        TreeMapOfString_Float116 = value;
        break;
      case (92):
        TreeMapOfString_Integer117 = value;
        break;
      case (93):
        TreeMapOfString_Integer119 = value;
        break;
      case (94):
        TreeMapOfString_Long120 = value;
        break;
      case (95):
        TreeMapOfString_Long122 = value;
        break;
      case (96):
        TreeMapOfString_Short123 = value;
        break;
      case (97):
        TreeMapOfString_Short125 = value;
        break;
      default:
        throw new IndexOutOfBoundsException();
    }
    return true;
  }

  public static class Oid implements Serializable {

    private static final long serialVersionUID = 1L;

    public int identifier;

    public Oid() {}

    public Oid(String s) {
      identifier = Integer.parseInt(justTheId(s));
    }

    public String toString() {
      return this.getClass().getName() + ": " + identifier;
    }

    public int hashCode() {
      return identifier;
    }

    public boolean equals(Object other) {
      if (other != null && (other instanceof Oid)) {
        Oid k = (Oid) other;
        return k.identifier == this.identifier;
      }
      return false;
    }

    protected static String justTheId(String str) {
      return str.substring(str.indexOf(':') + 1);
    }
  }
}
