Sandkassa: Difference between revisions

From Maria GDK Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 10: Line 10:


<source lang="csharp">
<source lang="csharp">
// Generated by the protocol buffer compiler. DO NOT EDIT!
// ZipOutputStream.cs
// source: simpledrawobject.proto
//
#pragma warning disable 1591, 0612, 3021
// ------------------------------------------------------------------
#region Designer generated code
//
// Copyright (c) 2009 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// last saved (in emacs):
// Time-stamp: <2011-July-28 06:34:30>
//
// ------------------------------------------------------------------
//
// This module defines the ZipOutputStream class, which is a stream metaphor for
// generating zip files.  This class does not depend on Ionic.Zip.ZipFile, but rather
// stands alongside it as an alternative "container" for ZipEntry.  It replicates a
// subset of the properties, including these:
//
//  - Comment
//  - Encryption
//  - Password
//  - CodecBufferSize
//  - CompressionLevel
//  - CompressionMethod
//  - EnableZip64 (UseZip64WhenSaving)
//  - IgnoreCase (!CaseSensitiveRetrieval)
//
// It adds these novel methods:
//
//  - PutNextEntry
//
//
// ------------------------------------------------------------------
//


using pb = global::Google.Protobuf;
using System;
using pbc = global::Google.Protobuf.Collections;
using System.Threading;
using pbr = global::Google.Protobuf.Reflection;
using System.Collections.Generic;
using scg = global::System.Collections.Generic;
using System.IO;
namespace TPG.DrawObjects.Serialize.Protoc {
using Ionic.Zip;


  /// <summary>Holder for reflection information generated from simpledrawobject.proto</summary>
namespace Ionic.Zip
  public static partial class SimpledrawobjectReflection {
{
 
    #region Descriptor
    /// <summary>File descriptor for simpledrawobject.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;
 
    static SimpledrawobjectReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "ChZzaW1wbGVkcmF3b2JqZWN0LnByb3RvEgh0dXRvcmlhbCLmAgoNR2VvUG9p",
            "bnRQcm90bxJACg1maWVsZF9pbmRleGVzGAEgAygLMikudHV0b3JpYWwuR2Vv",
            "UG9pbnRQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIXCg9pbnZhbGlkX2luZGV4",
            "ZXMYAiADKA0SEQoJbG9uZ2l0dWRlGAMgASgBEhAKCGxhdGl0dWRlGAQgASgB",
            "EgwKBFRleHQYBSABKAkSEAoIYWx0aXR1ZGUYBiABKAESRwoQcG9pbnRJbmZv",
            "cm1hdGlvbhgHIAMoCzItLnR1dG9yaWFsLkdlb1BvaW50UHJvdG8uUG9pbnRJ",
            "bmZvcm1hdGlvbkVudHJ5GjMKEUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgB",
            "IAEoDRINCgV2YWx1ZRgCIAEoCToCOAEaNwoVUG9pbnRJbmZvcm1hdGlvbkVu",
            "dHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEihAMKF0dlb1No",
            "aWZ0ZWRJbnRQb2ludFByb3RvEkoKDWZpZWxkX2luZGV4ZXMYASADKAsyMy50",
            "dXRvcmlhbC5HZW9TaGlmdGVkSW50UG9pbnRQcm90by5GaWVsZEluZGV4ZXNF",
            "bnRyeRIXCg9pbnZhbGlkX2luZGV4ZXMYAiADKA0SEQoJbG9uZ2l0dWRlGAMg",
            "ASgREhAKCGxhdGl0dWRlGAQgASgREgwKBFRleHQYBSABKAkSEAoIYWx0aXR1",
            "ZGUYBiABKAESUQoQcG9pbnRJbmZvcm1hdGlvbhgHIAMoCzI3LnR1dG9yaWFs",
            "Lkdlb1NoaWZ0ZWRJbnRQb2ludFByb3RvLlBvaW50SW5mb3JtYXRpb25FbnRy",
            "eRozChFGaWVsZEluZGV4ZXNFbnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUY",
            "AiABKAk6AjgBGjcKFVBvaW50SW5mb3JtYXRpb25FbnRyeRILCgNrZXkYASAB",
            "KAkSDQoFdmFsdWUYAiABKAk6AjgBInMKEFBvaW50SW5mb3JtYXRpb24SMgoE",
            "aW5mbxgBIAMoCzIkLnR1dG9yaWFsLlBvaW50SW5mb3JtYXRpb24uSW5mb0Vu",
            "dHJ5GisKCUluZm9FbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6",
            "AjgBIowBChRHZW9Eb3VibGVQb2ludHNQcm90bxIRCglsb25naXR1ZGUYASAD",
            "KAESEAoIbGF0aXR1ZGUYAiADKAESDAoEVGV4dBgDIAMoCRIQCghhbHRpdHVk",
            "ZRgEIAMoARIvCgtpbmZvcm1hdGlvbhgFIAMoCzIaLnR1dG9yaWFsLlBvaW50",
            "SW5mb3JtYXRpb24ikAEKGEdlb1NoaWZ0ZWRJbnRQb2ludHNQcm90bxIRCgls",
            "b25naXR1ZGUYASADKBESEAoIbGF0aXR1ZGUYAiADKBESDAoEVGV4dBgDIAMo",
            "CRIQCghhbHRpdHVkZRgEIAMoARIvCgtpbmZvcm1hdGlvbhgFIAMoCzIaLnR1",
            "dG9yaWFsLlBvaW50SW5mb3JtYXRpb24i4gUKD0RhdGFGaWVsZHNQcm90bxJC",
            "Cg1maWVsZF9pbmRleGVzGAEgAygLMisudHV0b3JpYWwuRGF0YUZpZWxkc1By",
            "b3RvLkZpZWxkSW5kZXhlc0VudHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMo",
            "DRIMCgRuYW1lGAMgASgJEhUKDUhpZXJhcmNoeUNvZGUYBCABKAkSEQoJRHJh",
            "d0RlcHRoGAUgASgFEhUKDVJvdGF0aW9uQW5nbGUYBiABKAISDwoHVmVyc2lv",
            "bhgHIAEoDRITCgtBbHBoYUZhY3RvchgIIAEoAhIeChZNb3ZlbWVudEluZGlj",
            "YXRvckNvbG9yGAkgASgNEiQKHE9mZnNldExvY2F0aW9uSW5kaWNhdG9yQ29s",
            "b3IYCiABKA0SFQoNTGFiZWxGb250TmFtZRgLIAEoCRIVCg1MYWJlbEZvbnRT",
            "aXplGAwgASgNEiAKGExhYmVsRm9udEZvcmVncm91bmRDb2xvchgNIAEoDRIX",
            "Cg9NaW5EeW5hbWljU2NhbGUYDiABKAISFwoPTWF4RHluYW1pY1NjYWxlGA8g",
            "ASgCEj8KC0V4dHJhRmllbGRzGBAgAygLMioudHV0b3JpYWwuRGF0YUZpZWxk",
            "c1Byb3RvLkV4dHJhRmllbGRzRW50cnkSTwoTVGFjdGljYWxFeHRyYUZpZWxk",
            "cxgRIAMoCzIyLnR1dG9yaWFsLkRhdGFGaWVsZHNQcm90by5UYWN0aWNhbEV4",
            "dHJhRmllbGRzRW50cnkaMwoRRmllbGRJbmRleGVzRW50cnkSCwoDa2V5GAEg",
            "ASgNEg0KBXZhbHVlGAIgASgJOgI4ARoyChBFeHRyYUZpZWxkc0VudHJ5EgsK",
            "A2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaOgoYVGFjdGljYWxFeHRy",
            "YUZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEi",
            "lAQKE1RhY3RpY2FsRmllbGRzUHJvdG8SRgoNZmllbGRfaW5kZXhlcxgBIAMo",
            "CzIvLnR1dG9yaWFsLlRhY3RpY2FsRmllbGRzUHJvdG8uRmllbGRJbmRleGVz",
            "RW50cnkSFwoPaW52YWxpZF9pbmRleGVzGAIgAygNEhgKEE1pbmVmaWVsZE9w",
            "YWNpdHkYAyABKAISFwoPU3ltYm9sSW5kaWNhdG9yGAQgASgJEh0KFUFkZGl0",
            "aW9uYWxJbmZvcm1hdGlvbhgFIAMoCRIZChFVbmlxdWVEZXNpZ25hdGlvbhgG",
            "IAMoCRIVCg1EYXRlVGltZUdyb3VwGAcgAygJEiMKG09mZnNldExvY2F0aW9u",
            "RGlzcGxhY2VtZW50WBgIIAEoAhIjChtPZmZzZXRMb2NhdGlvbkRpc3BsYWNl",
            "bWVudFkYCSABKAISEAoIUXVhbnRpdHkYCiABKAISGQoRTnVjbGVhcldlYXBv",
            "blR5cGUYCyABKAkSGwoTRGlyZWN0aW9uT2ZNb3ZlbWVudBgMIAEoCRIVCg1B",
            "bHRpdHVkZURlcHRoGA0gASgCEhAKCERpc3RhbmNlGA4gASgCEg8KB0F6aW11",
            "dGgYDyABKAISFQoNVGFjdGljYWxFbnVtcxgQIAEoBxozChFGaWVsZEluZGV4",
            "ZXNFbnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIrMHChJH",
            "ZW5lcmljRmllbGRzUHJvdG8SRQoNZmllbGRfaW5kZXhlcxgBIAMoCzIuLnR1",
            "dG9yaWFsLkdlbmVyaWNGaWVsZHNQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIX",
            "Cg9pbnZhbGlkX2luZGV4ZXMYAiADKA0SEQoJTGluZUNvbG9yGAMgASgNEhUK",
            "DUxpbmVEYXNoU3R5bGUYBCADKAISGwoTTGluZURhc2hTdHlsZU9mZnNldBgF",
            "IAEoAhIXCg9DZW50ZXJMaW5lV2lkdGgYBiABKAISFwoPQ2VudGVyTGluZUNv",
            "bG9yGAcgASgNEhsKE0NlbnRlckxpbmVEYXNoU3R5bGUYCCADKAISIQoZQ2Vu",
            "dGVyTGluZURhc2hTdHlsZU9mZnNldBgJIAEoAhIRCglMaW5lV2lkdGgYCiAB",
            "KAISGAoQTGluZU91dGxpbmVXaWR0aBgLIAEoAhIYChBMaW5lT3V0bGluZUNv",
            "bG9yGAwgASgNEhsKE0ZpbGxGb3JlZ3JvdW5kQ29sb3IYDSABKA0SGwoTRmls",
            "bEJhY2tncm91bmRDb2xvchgOIAEoDRIXCg9CdWZmZXJMaW5lQ29sb3IYDyAB",
            "KA0SGwoTQnVmZmVyTGluZURhc2hTdHlsZRgQIAMoAhIhChlCdWZmZXJMaW5l",
            "RGFzaFN0eWxlT2Zmc2V0GBEgASgCEhcKD0J1ZmZlckxpbmVXaWR0aBgSIAEo",
            "AhITCgtCdWZmZXJXaWR0aBgTIAEoAhIMCgRUZXh0GBQgASgJEhAKCEZvbnRO",
            "YW1lGBUgASgJEhAKCEZvbnRTaXplGBYgASgNEhsKE0ZvbnRGb3JlZ3JvdW5k",
            "Q29sb3IYFyABKA0SGwoTRm9udEJhY2tncm91bmRDb2xvchgYIAEoDRIXCg9O",
            "dW1iZXJPZlJhZGlhbHMYGSABKAUSEgoKU3ltYm9sVHlwZRgaIAEoCRISCgpT",
            "eW1ib2xDb2RlGBsgASgJEhMKC0dlbmVyaWNUeXBlGBwgASgJEhgKEFVuY2Vy",
            "dGFpbnR5QW5nbGUYHSABKAISDgoGTWFyZ2luGB4gASgCEhMKC01pbkZvbnRT",
            "aXplGB8gASgNEhcKD01pbkZvbnRNYXBTY2FsZRggIAEoDRIXCg9NYXhGb250",
            "TWFwU2NhbGUYISABKA0SFAoMR2VuZXJpY0VudW1zGCIgASgHGjMKEUZpZWxk",
            "SW5kZXhlc0VudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1ZRgCIAEoCToCOAEi",
            "3QEKGVZlcnRpY2FsRGlzdGFuY2VEYXRhUHJvdG8STAoNZmllbGRfaW5kZXhl",
            "cxgBIAMoCzI1LnR1dG9yaWFsLlZlcnRpY2FsRGlzdGFuY2VEYXRhUHJvdG8u",
            "RmllbGRJbmRleGVzRW50cnkSFwoPaW52YWxpZF9pbmRleGVzGAIgAygNEhAK",
            "CFVuaXRUeXBlGAMgASgJEhIKCkRpbWVuc2lvbnMYBCABKAIaMwoRRmllbGRJ",
            "bmRleGVzRW50cnkSCwoDa2V5GAEgASgNEg0KBXZhbHVlGAIgASgJOgI4ASKx",
            "AgoSU3VyZmFjZVZvbHVtZVByb3RvEkUKDWZpZWxkX2luZGV4ZXMYASADKAsy",
            "Li50dXRvcmlhbC5TdXJmYWNlVm9sdW1lUHJvdG8uRmllbGRJbmRleGVzRW50",
            "cnkSFwoPaW52YWxpZF9pbmRleGVzGAIgAygNEkIKFUxvd2VyVmVydGljYWxE",
            "aXN0YW5jZRgDIAEoCzIjLnR1dG9yaWFsLlZlcnRpY2FsRGlzdGFuY2VEYXRh",
            "UHJvdG8SQgoVVXBwZXJWZXJ0aWNhbERpc3RhbmNlGAQgASgLMiMudHV0b3Jp",
            "YWwuVmVydGljYWxEaXN0YW5jZURhdGFQcm90bxozChFGaWVsZEluZGV4ZXNF",
            "bnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIqoCCg5PcmJp",
            "dEFyZWFQcm90bxJBCg1maWVsZF9pbmRleGVzGAEgAygLMioudHV0b3JpYWwu",
            "T3JiaXRBcmVhUHJvdG8uRmllbGRJbmRleGVzRW50cnkSFwoPaW52YWxpZF9p",
            "bmRleGVzGAIgAygNEisKCkZpcnN0UG9pbnQYAyABKAsyFy50dXRvcmlhbC5H",
            "ZW9Qb2ludFByb3RvEiwKC1NlY29uZFBvaW50GAQgASgLMhcudHV0b3JpYWwu",
            "R2VvUG9pbnRQcm90bxINCgVXaWR0aBgFIAEoAhIdChVPcmJpdEFyZWFBbGln",
            "bWVudENvZGUYBiABKA0aMwoRRmllbGRJbmRleGVzRW50cnkSCwoDa2V5GAEg",
            "ASgNEg0KBXZhbHVlGAIgASgJOgI4ASLSAgoYT3JiaXRBcmVhU2hpZnRlZElu",
            "dFByb3RvEksKDWZpZWxkX2luZGV4ZXMYASADKAsyNC50dXRvcmlhbC5PcmJp",
            "dEFyZWFTaGlmdGVkSW50UHJvdG8uRmllbGRJbmRleGVzRW50cnkSFwoPaW52",
            "YWxpZF9pbmRleGVzGAIgAygNEjUKCkZpcnN0UG9pbnQYAyABKAsyIS50dXRv",
            "cmlhbC5HZW9TaGlmdGVkSW50UG9pbnRQcm90bxI2CgtTZWNvbmRQb2ludBgE",
            "IAEoCzIhLnR1dG9yaWFsLkdlb1NoaWZ0ZWRJbnRQb2ludFByb3RvEg0KBVdp",
            "ZHRoGAUgASgCEh0KFU9yYml0QXJlYUFsaWdtZW50Q29kZRgGIAEoDRozChFG",
            "aWVsZEluZGV4ZXNFbnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUYAiABKAk6",
            "AjgBIqoCCgxGYW5BcmVhUHJvdG8SPwoNZmllbGRfaW5kZXhlcxgBIAMoCzIo",
            "LnR1dG9yaWFsLkZhbkFyZWFQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIXCg9p",
            "bnZhbGlkX2luZGV4ZXMYAiADKA0SFAoMTWluaW11bVJhbmdlGAMgASgCEhQK",
            "DE1heGltdW1SYW5nZRgEIAEoAhIYChBPcmllbnRhdGlvbkFuZ2xlGAUgASgC",
            "EhcKD1NlY3RvclNpemVBbmdsZRgGIAEoAhIsCgtWZXJ0ZXhQb2ludBgHIAEo",
            "CzIXLnR1dG9yaWFsLkdlb1BvaW50UHJvdG8aMwoRRmllbGRJbmRleGVzRW50",
            "cnkSCwoDa2V5GAEgASgNEg0KBXZhbHVlGAIgASgJOgI4ASLMAgoYRmFuQXJl",
            "YUFzU2hpZnRlZEludFByb3RvEksKDWZpZWxkX2luZGV4ZXMYASADKAsyNC50",
            "dXRvcmlhbC5GYW5BcmVhQXNTaGlmdGVkSW50UHJvdG8uRmllbGRJbmRleGVz",
            "RW50cnkSFwoPaW52YWxpZF9pbmRleGVzGAIgAygNEhQKDE1pbmltdW1SYW5n",
            "ZRgDIAEoAhIUCgxNYXhpbXVtUmFuZ2UYBCABKAISGAoQT3JpZW50YXRpb25B",
            "bmdsZRgFIAEoAhIXCg9TZWN0b3JTaXplQW5nbGUYBiABKAISNgoLVmVydGV4",
            "UG9pbnQYByABKAsyIS50dXRvcmlhbC5HZW9TaGlmdGVkSW50UG9pbnRQcm90",
            "bxozChFGaWVsZEluZGV4ZXNFbnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUY",
            "AiABKAk6AjgBIrYBChFDb3JyaWRvckFyZWFQcm90bxJECg1maWVsZF9pbmRl",
            "eGVzGAEgAygLMi0udHV0b3JpYWwuQ29ycmlkb3JBcmVhUHJvdG8uRmllbGRJ",
            "bmRleGVzRW50cnkSFwoPaW52YWxpZF9pbmRleGVzGAIgAygNEg0KBVdpZHRo",
            "GAMgASgCGjMKEUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgBIAEoDRINCgV2",
            "YWx1ZRgCIAEoCToCOAEiyAIKDEVsbGlwc2VQcm90bxI/Cg1maWVsZF9pbmRl",
            "eGVzGAEgAygLMigudHV0b3JpYWwuRWxsaXBzZVByb3RvLkZpZWxkSW5kZXhl",
            "c0VudHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMoDRIsCgtDZW50cmVQb2lu",
            "dBgDIAEoCzIXLnR1dG9yaWFsLkdlb1BvaW50UHJvdG8SPAobRmlyc3RDb25q",
            "dWdhdGVEaWFtZXRlclBvaW50GAQgASgLMhcudHV0b3JpYWwuR2VvUG9pbnRQ",
            "cm90bxI9ChxTZWNvbmRDb25qdWdhdGVEaWFtZXRlclBvaW50GAUgASgLMhcu",
            "dHV0b3JpYWwuR2VvUG9pbnRQcm90bxozChFGaWVsZEluZGV4ZXNFbnRyeRIL",
            "CgNrZXkYASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIv4CChhFbGxpcHNlQXNT",
            "aGlmdGVkSW50UHJvdG8SSwoNZmllbGRfaW5kZXhlcxgBIAMoCzI0LnR1dG9y",
            "aWFsLkVsbGlwc2VBc1NoaWZ0ZWRJbnRQcm90by5GaWVsZEluZGV4ZXNFbnRy",
            "eRIXCg9pbnZhbGlkX2luZGV4ZXMYAiADKA0SNgoLQ2VudHJlUG9pbnQYAyAB",
            "KAsyIS50dXRvcmlhbC5HZW9TaGlmdGVkSW50UG9pbnRQcm90bxJGChtGaXJz",
            "dENvbmp1Z2F0ZURpYW1ldGVyUG9pbnQYBCABKAsyIS50dXRvcmlhbC5HZW9T",
            "aGlmdGVkSW50UG9pbnRQcm90bxJHChxTZWNvbmRDb25qdWdhdGVEaWFtZXRl",
            "clBvaW50GAUgASgLMiEudHV0b3JpYWwuR2VvU2hpZnRlZEludFBvaW50UHJv",
            "dG8aMwoRRmllbGRJbmRleGVzRW50cnkSCwoDa2V5GAEgASgNEg0KBXZhbHVl",
            "GAIgASgJOgI4ASK+AQoKUG9pbnRQcm90bxI9Cg1maWVsZF9pbmRleGVzGAEg",
            "AygLMiYudHV0b3JpYWwuUG9pbnRQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIX",
            "Cg9pbnZhbGlkX2luZGV4ZXMYAiADKA0SEQoJbG9uZ2l0dWRlGAMgASgBEhAK",
            "CGxhdGl0dWRlGAQgASgBGjMKEUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgB",
            "IAEoDRINCgV2YWx1ZRgCIAEoCToCOAEi0gEKFFBvaW50U2hpZnRlZEludFBy",
            "b3RvEkcKDWZpZWxkX2luZGV4ZXMYASADKAsyMC50dXRvcmlhbC5Qb2ludFNo",
            "aWZ0ZWRJbnRQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIXCg9pbnZhbGlkX2lu",
            "ZGV4ZXMYAiADKA0SEQoJbG9uZ2l0dWRlGAMgASgREhAKCGxhdGl0dWRlGAQg",
            "ASgRGjMKEUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1",
            "ZRgCIAEoCToCOAEimwIKD1JhbmdlUmluZ3NQcm90bxJCCg1maWVsZF9pbmRl",
            "eGVzGAEgAygLMisudHV0b3JpYWwuUmFuZ2VSaW5nc1Byb3RvLkZpZWxkSW5k",
            "ZXhlc0VudHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMoDRIsCgtWZXJ0ZXhQ",
            "b2ludBgDIAEoCzIXLnR1dG9yaWFsLkdlb1BvaW50UHJvdG8SGQoRUmFuZ2VC",
            "ZXR3ZWVuUmluZ3MYBCABKAISFAoMTWF4aW11bVJhbmdlGAUgASgCEhcKD051",
            "bWJlck9mUmFkaWFscxgGIAEoDRozChFGaWVsZEluZGV4ZXNFbnRyeRILCgNr",
            "ZXkYASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIrkCChlSYW5nZVJpbmdzU2hp",
            "ZnRlZEludFByb3RvEkwKDWZpZWxkX2luZGV4ZXMYASADKAsyNS50dXRvcmlh",
            "bC5SYW5nZVJpbmdzU2hpZnRlZEludFByb3RvLkZpZWxkSW5kZXhlc0VudHJ5",
            "EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMoDRI2CgtWZXJ0ZXhQb2ludBgDIAEo",
            "CzIhLnR1dG9yaWFsLkdlb1NoaWZ0ZWRJbnRQb2ludFByb3RvEhkKEVJhbmdl",
            "QmV0d2VlblJpbmdzGAQgASgCEhQKDE1heGltdW1SYW5nZRgFIAEoAhIXCg9O",
            "dW1iZXJPZlJhZGlhbHMYBiABKA0aMwoRRmllbGRJbmRleGVzRW50cnkSCwoD",
            "a2V5GAEgASgNEg0KBXZhbHVlGAIgASgJOgI4ASLaAQoQVm9sUG9seUFyZWFQ",
            "cm90bxJDCg1maWVsZF9pbmRleGVzGAEgAygLMiwudHV0b3JpYWwuVm9sUG9s",
            "eUFyZWFQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIXCg9pbnZhbGlkX2luZGV4",
            "ZXMYAiADKA0SMwoNU3VyZmFjZVZvbHVtZRgDIAEoCzIcLnR1dG9yaWFsLlN1",
            "cmZhY2VWb2x1bWVQcm90bxozChFGaWVsZEluZGV4ZXNFbnRyeRILCgNrZXkY",
            "ASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIsoCChFWb2xPcmJpdEFyZWFQcm90",
            "bxJECg1maWVsZF9pbmRleGVzGAEgAygLMi0udHV0b3JpYWwuVm9sT3JiaXRB",
            "cmVhUHJvdG8uRmllbGRJbmRleGVzRW50cnkSFwoPaW52YWxpZF9pbmRleGVz",
            "GAIgAygNEjMKDVN1cmZhY2VWb2x1bWUYAyABKAsyHC50dXRvcmlhbC5TdXJm",
            "YWNlVm9sdW1lUHJvdG8SKwoJT3JiaXRBcmVhGAQgASgLMhgudHV0b3JpYWwu",
            "T3JiaXRBcmVhUHJvdG8SPwoTU2hpZnRlZEludE9yYml0QXJlYRgFIAEoCzIi",
            "LnR1dG9yaWFsLk9yYml0QXJlYVNoaWZ0ZWRJbnRQcm90bxozChFGaWVsZElu",
            "ZGV4ZXNFbnRyeRILCgNrZXkYASABKA0SDQoFdmFsdWUYAiABKAk6AjgBIsAC",
            "Cg9Wb2xGYW5BcmVhUHJvdG8SQgoNZmllbGRfaW5kZXhlcxgBIAMoCzIrLnR1",
            "dG9yaWFsLlZvbEZhbkFyZWFQcm90by5GaWVsZEluZGV4ZXNFbnRyeRIXCg9p",
            "bnZhbGlkX2luZGV4ZXMYAiADKA0SMwoNU3VyZmFjZVZvbHVtZRgDIAEoCzIc",
            "LnR1dG9yaWFsLlN1cmZhY2VWb2x1bWVQcm90bxInCgdGYW5BcmVhGAQgASgL",
            "MhYudHV0b3JpYWwuRmFuQXJlYVByb3RvEj0KEVNoaWZ0ZWRJbnRGYW5BcmVh",
            "GAUgASgLMiIudHV0b3JpYWwuRmFuQXJlYUFzU2hpZnRlZEludFByb3RvGjMK",
            "EUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1ZRgCIAEo",
            "CToCOAEiwAIKD1ZvbEVsbGlwc2VQcm90bxJCCg1maWVsZF9pbmRleGVzGAEg",
            "AygLMisudHV0b3JpYWwuVm9sRWxsaXBzZVByb3RvLkZpZWxkSW5kZXhlc0Vu",
            "dHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMoDRIzCg1TdXJmYWNlVm9sdW1l",
            "GAMgASgLMhwudHV0b3JpYWwuU3VyZmFjZVZvbHVtZVByb3RvEicKB0VsbGlw",
            "c2UYBCABKAsyFi50dXRvcmlhbC5FbGxpcHNlUHJvdG8SPQoRU2hpZnRlZElu",
            "dEVsbGlwc2UYBSABKAsyIi50dXRvcmlhbC5FbGxpcHNlQXNTaGlmdGVkSW50",
            "UHJvdG8aMwoRRmllbGRJbmRleGVzRW50cnkSCwoDa2V5GAEgASgNEg0KBXZh",
            "bHVlGAIgASgJOgI4ASKVAgoUVm9sQ29ycmlkb3JBcmVhUHJvdG8SRwoNZmll",
            "bGRfaW5kZXhlcxgBIAMoCzIwLnR1dG9yaWFsLlZvbENvcnJpZG9yQXJlYVBy",
            "b3RvLkZpZWxkSW5kZXhlc0VudHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMo",
            "DRIzCg1TdXJmYWNlVm9sdW1lGAMgASgLMhwudHV0b3JpYWwuU3VyZmFjZVZv",
            "bHVtZVByb3RvEjEKDENvcnJpZG9yQXJlYRgEIAEoCzIbLnR1dG9yaWFsLkNv",
            "cnJpZG9yQXJlYVByb3RvGjMKEUZpZWxkSW5kZXhlc0VudHJ5EgsKA2tleRgB",
            "IAEoDRINCgV2YWx1ZRgCIAEoCToCOAEiCwoJTGluZVByb3RvIhIKEFBvbHln",
            "b25BcmVhUHJvdG8iqQwKFVNpbXBsZURyYXdPYmplY3RQcm90bxJICg1maWVs",
            "ZF9pbmRleGVzGAEgAygLMjEudHV0b3JpYWwuU2ltcGxlRHJhd09iamVjdFBy",
            "b3RvLkZpZWxkSW5kZXhlc0VudHJ5EhcKD2ludmFsaWRfaW5kZXhlcxgCIAMo",
            "DRIKCgJJZBgDIAEoCRIuCgtkYXRhX2ZpZWxkcxgEIAEoCzIZLnR1dG9yaWFs",
            "LkRhdGFGaWVsZHNQcm90bxI7ChJUYWN0aWNhbERhdGFGaWVsZHMYBSABKAsy",
            "HS50dXRvcmlhbC5UYWN0aWNhbEZpZWxkc1Byb3RvSAASOQoRR2VuZXJpY0Rh",
            "dGFGaWVsZHMYBiABKAsyHC50dXRvcmlhbC5HZW5lcmljRmllbGRzUHJvdG9I",
            "ABIZChFCb29sZWFuQXR0cmlidXRlcxgHIAEoDRIzCglHZW9Qb2ludHMYCCAB",
            "KAsyHi50dXRvcmlhbC5HZW9Eb3VibGVQb2ludHNQcm90b0gBEkEKE0dlb1No",
            "aWZ0ZWRJbnRQb2ludHMYCSABKAsyIi50dXRvcmlhbC5HZW9TaGlmdGVkSW50",
            "UG9pbnRzUHJvdG9IARIzCgxDb3JyaWRvckFyZWEYCiABKAsyGy50dXRvcmlh",
            "bC5Db3JyaWRvckFyZWFQcm90b0gCEikKB0ZhbkFyZWEYCyABKAsyFi50dXRv",
            "cmlhbC5GYW5BcmVhUHJvdG9IAhIpCgdFbGxpcHNlGAwgASgLMhYudHV0b3Jp",
            "YWwuRWxsaXBzZVByb3RvSAISMQoLVm9sUG9seUFyZWEYDSABKAsyGi50dXRv",
            "cmlhbC5Wb2xQb2x5QXJlYVByb3RvSAISMwoMVm9sT3JiaXRBcmVhGA4gASgL",
            "MhsudHV0b3JpYWwuVm9sT3JiaXRBcmVhUHJvdG9IAhIvCgpWb2xGYW5BcmVh",
            "GA8gASgLMhkudHV0b3JpYWwuVm9sRmFuQXJlYVByb3RvSAISLwoKVm9sRWxs",
            "aXBzZRgQIAEoCzIZLnR1dG9yaWFsLlZvbEVsbGlwc2VQcm90b0gCEjkKD1Zv",
            "bENvcnJpZG9yQXJlYRgRIAEoCzIeLnR1dG9yaWFsLlZvbENvcnJpZG9yQXJl",
            "YVByb3RvSAISLQoJT3JiaXRBcmVhGBIgASgLMhgudHV0b3JpYWwuT3JiaXRB",
            "cmVhUHJvdG9IAhIlCgVQb2ludBgTIAEoCzIULnR1dG9yaWFsLlBvaW50UHJv",
            "dG9IAhIvCgpSYW5nZVJpbmdzGBQgASgLMhkudHV0b3JpYWwuUmFuZ2VSaW5n",
            "c1Byb3RvSAISIwoETGluZRgVIAEoCzITLnR1dG9yaWFsLkxpbmVQcm90b0gC",
            "EjEKC1BvbHlnb25BcmVhGBYgASgLMhoudHV0b3JpYWwuUG9seWdvbkFyZWFQ",
            "cm90b0gCEjkKD1NoaWZ0ZWRJbnRQb2ludBgXIAEoCzIeLnR1dG9yaWFsLlBv",
            "aW50U2hpZnRlZEludFByb3RvSAISQQoTU2hpZnRlZEludE9yYml0QXJlYRgY",
            "IAEoCzIiLnR1dG9yaWFsLk9yYml0QXJlYVNoaWZ0ZWRJbnRQcm90b0gCEj8K",
            "EVNoaWZ0ZWRJbnRFbGxpcHNlGBkgASgLMiIudHV0b3JpYWwuRWxsaXBzZUFz",
            "U2hpZnRlZEludFByb3RvSAISPwoRU2hpZnRlZEludEZhbkFyZWEYGiABKAsy",
            "Ii50dXRvcmlhbC5GYW5BcmVhQXNTaGlmdGVkSW50UHJvdG9IAhJDChRTaGlm",
            "dGVkSW50UmFuZ2VSaW5ncxgbIAEoCzIjLnR1dG9yaWFsLlJhbmdlUmluZ3NT",
            "aGlmdGVkSW50UHJvdG9IAhI/ChZjb21wb3NpdGVfZHJhd19vYmplY3RzGBwg",
            "AygLMh8udHV0b3JpYWwuU2ltcGxlRHJhd09iamVjdFByb3RvGjMKEUZpZWxk",
            "SW5kZXhlc0VudHJ5EgsKA2tleRgBIAEoDRINCgV2YWx1ZRgCIAEoCToCOAFC",
            "EwoRdHlwZV9maWVsZHNvYmplY3RCDwoNdHlwZV9nZW9wb2ludEIWChR0eXBl",
            "X2ltcGxlbWVudGF0aW9ucyJkChZTaW1wbGVEcmF3T2JqZWN0c1Byb3RvEjQK",
            "C2RyYXdvYmplY3RzGAEgAygLMh8udHV0b3JpYWwuU2ltcGxlRHJhd09iamVj",
            "dFByb3RvEhQKDGRhdGFfdmVyc2lvbhgCIAEoDSLuAQoPRHJhd09iamVjdFBy",
            "b3RvEjkKEHNpbXBsZWRyYXdvYmplY3QYASABKAsyHy50dXRvcmlhbC5TaW1w",
            "bGVEcmF3T2JqZWN0UHJvdG8SEQoJYzI1MjVDb2RlGAIgASgJEhcKD1VzZURl",
            "ZmF1bHRFbnVtcxgDIAEoDRIkChxVc2VEZWZhdWx0VmFsdWVzSW5EYXRhRmll",
            "bGRzGAQgASgNEigKIFVzZURlZmF1bHRWYWx1ZXNJbkV4dGVuZGVkRmllbGRz",
            "GAUgASgNEiQKHFVzZURlZmF1bHRWYWx1ZXNJblR5cGVGaWVsZHMYBiABKA0i",
            "WAoQRHJhd09iamVjdHNQcm90bxIuCgtkcmF3b2JqZWN0cxgBIAMoCzIZLnR1",
            "dG9yaWFsLkRyYXdPYmplY3RQcm90bxIUCgxkYXRhX3ZlcnNpb24YAiABKA1C",
            "WwogdHBnLmRyYXdvYmplY3RzLnNlcmlhbGl6ZS5wcm90b2NCFE1hcmlhRHJh",
            "d09iamVjdFByb3RvqgIgVFBHLkRyYXdPYmplY3RzLlNlcmlhbGl6ZS5Qcm90",
            "b2NiBnByb3RvMw=="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto), global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Longitude", "Latitude", "Text", "Altitude", "PointInformation" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto), global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Longitude", "Latitude", "Text", "Altitude", "PointInformation" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.PointInformation), global::TPG.DrawObjects.Serialize.Protoc.PointInformation.Parser, new[]{ "Info" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto), global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto.Parser, new[]{ "Longitude", "Latitude", "Text", "Altitude", "Information" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto), global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto.Parser, new[]{ "Longitude", "Latitude", "Text", "Altitude", "Information" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto), global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Name", "HierarchyCode", "DrawDepth", "RotationAngle", "Version", "AlphaFactor", "MovementIndicatorColor", "OffsetLocationIndicatorColor", "LabelFontName", "LabelFontSize", "LabelFontForegroundColor", "MinDynamicScale", "MaxDynamicScale", "ExtraFields", "TacticalExtraFields" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto), global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "MinefieldOpacity", "SymbolIndicator", "AdditionalInformation", "UniqueDesignation", "DateTimeGroup", "OffsetLocationDisplacementX", "OffsetLocationDisplacementY", "Quantity", "NuclearWeaponType", "DirectionOfMovement", "AltitudeDepth", "Distance", "Azimuth", "TacticalEnums" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto), global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "LineColor", "LineDashStyle", "LineDashStyleOffset", "CenterLineWidth", "CenterLineColor", "CenterLineDashStyle", "CenterLineDashStyleOffset", "LineWidth", "LineOutlineWidth", "LineOutlineColor", "FillForegroundColor", "FillBackgroundColor", "BufferLineColor", "BufferLineDashStyle", "BufferLineDashStyleOffset", "BufferLineWidth", "BufferWidth", "Text", "FontName", "FontSize", "FontForegroundColor", "FontBackgroundColor", "NumberOfRadials", "SymbolType", "SymbolCode", "GenericType", "UncertaintyAngle", "Margin", "MinFontSize", "MinFontMapScale", "MaxFontMapScale", "GenericEnums" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto), global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "UnitType", "Dimensions" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto), global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "LowerVerticalDistance", "UpperVerticalDistance" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto), global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "FirstPoint", "SecondPoint", "Width", "OrbitAreaAligmentCode" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto), global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "FirstPoint", "SecondPoint", "Width", "OrbitAreaAligmentCode" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto), global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "MinimumRange", "MaximumRange", "OrientationAngle", "SectorSizeAngle", "VertexPoint" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto), global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "MinimumRange", "MaximumRange", "OrientationAngle", "SectorSizeAngle", "VertexPoint" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto), global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Width" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.EllipseProto), global::TPG.DrawObjects.Serialize.Protoc.EllipseProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "CentrePoint", "FirstConjugateDiameterPoint", "SecondConjugateDiameterPoint" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto), global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "CentrePoint", "FirstConjugateDiameterPoint", "SecondConjugateDiameterPoint" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.PointProto), global::TPG.DrawObjects.Serialize.Protoc.PointProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Longitude", "Latitude" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto), global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Longitude", "Latitude" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto), global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "VertexPoint", "RangeBetweenRings", "MaximumRange", "NumberOfRadials" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto), global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "VertexPoint", "RangeBetweenRings", "MaximumRange", "NumberOfRadials" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto), global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "SurfaceVolume" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto), global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "SurfaceVolume", "OrbitArea", "ShiftedIntOrbitArea" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto), global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "SurfaceVolume", "FanArea", "ShiftedIntFanArea" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto), global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "SurfaceVolume", "Ellipse", "ShiftedIntEllipse" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto), global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "SurfaceVolume", "CorridorArea" }, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.LineProto), global::TPG.DrawObjects.Serialize.Protoc.LineProto.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto), global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto), global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto.Parser, new[]{ "FieldIndexes", "InvalidIndexes", "Id", "DataFields", "TacticalDataFields", "GenericDataFields", "BooleanAttributes", "GeoPoints", "GeoShiftedIntPoints", "CorridorArea", "FanArea", "Ellipse", "VolPolyArea", "VolOrbitArea", "VolFanArea", "VolEllipse", "VolCorridorArea", "OrbitArea", "Point", "RangeRings", "Line", "PolygonArea", "ShiftedIntPoint", "ShiftedIntOrbitArea", "ShiftedIntEllipse", "ShiftedIntFanArea", "ShiftedIntRangeRings", "CompositeDrawObjects" }, new[]{ "TypeFieldsobject", "TypeGeopoint", "TypeImplementations" }, null, new pbr::GeneratedClrTypeInfo[] { null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectsProto), global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectsProto.Parser, new[]{ "Drawobjects", "DataVersion" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto), global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto.Parser, new[]{ "Simpledrawobject", "C2525Code", "UseDefaultEnums", "UseDefaultValuesInDataFields", "UseDefaultValuesInExtendedFields", "UseDefaultValuesInTypeFields" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::TPG.DrawObjects.Serialize.Protoc.DrawObjectsProto), global::TPG.DrawObjects.Serialize.Protoc.DrawObjectsProto.Parser, new[]{ "Drawobjects", "DataVersion" }, null, null, null)
          }));
    }
    #endregion
 
  }
  #region Messages
  public sealed partial class GeoPointProto : pb::IMessage<GeoPointProto> {
    private static readonly pb::MessageParser<GeoPointProto> _parser = new pb::MessageParser<GeoPointProto>(() => new GeoPointProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GeoPointProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[0]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoPointProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoPointProto(GeoPointProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      longitude_ = other.longitude_;
      latitude_ = other.latitude_;
      text_ = other.text_;
      altitude_ = other.altitude_;
      pointInformation_ = other.pointInformation_.Clone();
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoPointProto Clone() {
      return new GeoPointProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
     /// <summary>
     /// <summary>
     ///Key is field index#, Value is version info
     ///   Provides a stream metaphor for generating zip files.
     /// </summary>
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     ///
     public pbc::MapField<uint, string> FieldIndexes {
    /// <remarks>
      get { return fieldIndexes_; }
    /// <para>
     }
    ///  This class writes zip files, as defined in the <see
    ///  href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">specification
    ///  for zip files described by PKWare</see>.  The compression for this
    ///  implementation is provided by a managed-code version of Zlib, included with
    ///  DotNetZip in the classes in the Ionic.Zlib namespace.
    /// </para>
    ///
    /// <para>
    ///  This class provides an alternative programming model to the one enabled by the
    ///  <see cref="ZipFile"/> class. Use this when creating zip files, as an
    ///  alternative to the <see cref="ZipFile"/> class, when you would like to use a
    ///  <c>Stream</c> type to write the zip file.
    /// </para>
    ///
    /// <para>
    ///  Both the <c>ZipOutputStream</c> class and the <c>ZipFile</c> class can be used
    ///  to create zip files. Both of them support many of the common zip features,
    ///  including Unicode, different compression levels, and ZIP64.  They provide
    ///  very similar performance when creating zip files.
    /// </para>
    ///
    /// <para>
    ///  The <c>ZipFile</c> class is generally easier to use than
    ///  <c>ZipOutputStream</c> and should be considered a higher-level interface.  For
    ///  example, when creating a zip file via calls to the <c>PutNextEntry()</c> and
    ///  <c>Write()</c> methods on the <c>ZipOutputStream</c> class, the caller is
    ///  responsible for opening the file, reading the bytes from the file, writing
    ///  those bytes into the <c>ZipOutputStream</c>, setting the attributes on the
    ///  <c>ZipEntry</c>, and setting the created, last modified, and last accessed
    ///  timestamps on the zip entry. All of these things are done automatically by a
    ///  call to <see cref="ZipFile.AddFile(string,string)">ZipFile.AddFile()</see>.
    ///  For this reason, the <c>ZipOutputStream</c> is generally recommended for use
    ///  only when your application emits arbitrary data, not necessarily data from a
    ///  filesystem file, directly into a zip file, and does so using a <c>Stream</c>
    ///  metaphor.
    /// </para>
    ///
    /// <para>
    ///  Aside from the differences in programming model, there are other
    ///  differences in capability between the two classes.
    /// </para>
    ///
    /// <list type="bullet">
    ///  <item>
    ///    <c>ZipFile</c> can be used to read and extract zip files, in addition to
    ///    creating zip files. <c>ZipOutputStream</c> cannot read zip files. If you want
    ///    to use a stream to read zip files, check out the <see cref="ZipInputStream"/> class.
    ///  </item>
    ///
    ///  <item>
    ///    <c>ZipOutputStream</c> does not support the creation of segmented or spanned
    ///    zip files.
    ///  </item>
    ///
    ///  <item>
    ///    <c>ZipOutputStream</c> cannot produce a self-extracting archive.
    ///  </item>
    /// </list>
    ///
    /// <para>
    ///  Be aware that the <c>ZipOutputStream</c> class implements the <see
    ///  cref="System.IDisposable"/> interface.  In order for
    ///  <c>ZipOutputStream</c> to produce a valid zip file, you use use it within
    ///  a using clause (<c>Using</c> in VB), or call the <c>Dispose()</c> method
    ///  explicitly.  See the examples for how to employ a using clause.
    /// </para>
    ///
    /// <para>
    ///  Also, a note regarding compression performance: On the desktop .NET
    ///  Framework, DotNetZip can use a multi-threaded compression implementation
    ///  that provides significant speed increases on large files, over 300k or so,
    ///  at the cost of increased memory use at runtime.  (The output of the
    ///  compression is almost exactly the same size).  But, the multi-threaded
    ///  approach incurs a performance hit on smaller files. There's no way for the
    ///  ZipOutputStream to know whether parallel compression will be beneficial,
    ///  because the ZipOutputStream does not know how much data you will write
    ///  through the stream.  You may wish to set the <see
    ///  cref="ParallelDeflateThreshold"/> property to zero, if you are compressing
    ///  large files through <c>ZipOutputStream</c>. This will cause parallel
    ///  compression to be used, always.
    /// </para>
    /// </remarks>
     public class ZipOutputStream : Stream
    {
        /// <summary>
        ///  Create a ZipOutputStream, wrapping an existing stream.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///  The <see cref="ZipFile"/> class is generally easier to use when creating
        ///  zip files. The ZipOutputStream offers a different metaphor for creating a
        ///  zip file, based on the <see cref="System.IO.Stream"/> class.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <param name="stream">
        /// The stream to wrap. It must be writable. This stream will be closed at
        /// the time the ZipOutputStream is closed.
        /// </param>
        ///
        /// <example>
        ///
        ///  This example shows how to create a zip file, using the
        ///  ZipOutputStream class.
        ///
        /// <code lang="C#">
        /// private void Zipup()
        /// {
        ///    if (filesToZip.Count == 0)
        ///    {
        ///        System.Console.WriteLine("Nothing to do.");
        ///        return;
        ///    }
        ///
        ///    using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite ))
        ///     {
        ///        using (var output= new ZipOutputStream(raw))
        ///        {
        ///            output.Password = "VerySecret!";
        ///            output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///
        ///            foreach (string inputFileName in filesToZip)
        ///            {
        ///                System.Console.WriteLine("file: {0}", inputFileName);
        ///
        ///                output.PutNextEntry(inputFileName);
        ///                using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write ))
        ///                {
        ///                    byte[] buffer= new byte[2048];
        ///                    int n;
        ///                    while ((n= input.Read(buffer,0,buffer.Length)) > 0)
        ///                    {
        ///                        output.Write(buffer,0,n);
        ///                    }
        ///                }
        ///            }
        ///        }
        ///    }
        /// }
        /// </code>
        ///
        /// <code lang="VB">
        /// Private Sub Zipup()
        ///    Dim outputFileName As String = "XmlData.zip"
        ///    Dim filesToZip As String() = Directory.GetFiles(".", "*.xml")
        ///    If (filesToZip.Length = 0) Then
        ///        Console.WriteLine("Nothing to do.")
        ///    Else
        ///        Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite)
        ///            Using output As ZipOutputStream = New ZipOutputStream(raw)
        ///                output.Password = "VerySecret!"
        ///                output.Encryption = EncryptionAlgorithm.WinZipAes256
        ///                Dim inputFileName As String
        ///                For Each inputFileName In filesToZip
        ///                    Console.WriteLine("file: {0}", inputFileName)
        ///                    output.PutNextEntry(inputFileName)
        ///                    Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        ///                        Dim n As Integer
        ///                        Dim buffer As Byte() = New Byte(2048) {}
        ///                        Do While (n = input.Read(buffer, 0, buffer.Length) > 0)
        ///                            output.Write(buffer, 0, n)
        ///                        Loop
        ///                    End Using
        ///                Next
        ///            End Using
        ///        End Using
        ///    End If
        /// End Sub
        /// </code>
        /// </example>
        public ZipOutputStream(Stream stream) : this(stream, false) { }


    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }


    /// <summary>Field number for the "longitude" field.</summary>
        /// <summary>
     public const int LongitudeFieldNumber = 3;
        ///  Create a ZipOutputStream that writes to a filesystem file.
     private double longitude_;
        /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public double Longitude {
        /// <remarks>
      get { return longitude_; }
        ///  The <see cref="ZipFile"/> class is generally easier to use when creating
      set {
        ///  zip files. The ZipOutputStream offers a different metaphor for creating a
         longitude_ = value;
        ///  zip file, based on the <see cref="System.IO.Stream"/> class.
      }
        /// </remarks>
     }
        ///
        /// <param name="fileName">
        ///  The name of the zip file to create.
        /// </param>
        ///
        /// <example>
        ///
        ///  This example shows how to create a zip file, using the
        ///  ZipOutputStream class.
        ///
        /// <code lang="C#">
        /// private void Zipup()
        /// {
        ///     if (filesToZip.Count == 0)
        ///    {
        ///        System.Console.WriteLine("Nothing to do.");
        ///        return;
        ///     }
        ///
        ///    using (var output= new ZipOutputStream(outputFileName))
        ///    {
        ///        output.Password = "VerySecret!";
        ///        output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///
        ///        foreach (string inputFileName in filesToZip)
        ///        {
        ///            System.Console.WriteLine("file: {0}", inputFileName);
        ///
        ///            output.PutNextEntry(inputFileName);
        ///            using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read,
        ///                                          FileShare.Read | FileShare.Write ))
        ///            {
        ///                byte[] buffer= new byte[2048];
        ///                int n;
        ///                while ((n= input.Read(buffer,0,buffer.Length)) > 0)
        ///                {
        ///                    output.Write(buffer,0,n);
        ///                }
        ///            }
        ///        }
        ///    }
        /// }
        /// </code>
        ///
        /// <code lang="VB">
        /// Private Sub Zipup()
        ///    Dim outputFileName As String = "XmlData.zip"
        ///    Dim filesToZip As String() = Directory.GetFiles(".", "*.xml")
        ///    If (filesToZip.Length = 0) Then
        ///        Console.WriteLine("Nothing to do.")
        ///    Else
        ///        Using output As ZipOutputStream = New ZipOutputStream(outputFileName)
        ///            output.Password = "VerySecret!"
        ///            output.Encryption = EncryptionAlgorithm.WinZipAes256
        ///            Dim inputFileName As String
        ///            For Each inputFileName In filesToZip
        ///                Console.WriteLine("file: {0}", inputFileName)
         ///                output.PutNextEntry(inputFileName)
        ///                Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        ///                    Dim n As Integer
        ///                    Dim buffer As Byte() = New Byte(2048) {}
        ///                    Do While (n = input.Read(buffer, 0, buffer.Length) > 0)
        ///                        output.Write(buffer, 0, n)
        ///                    Loop
        ///                End Using
        ///            Next
        ///        End Using
        ///     End If
        /// End Sub
        /// </code>
        /// </example>
        public ZipOutputStream(String fileName)
        {
            Stream stream = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            _Init(stream, false, fileName);
        }


    /// <summary>Field number for the "latitude" field.</summary>
    public const int LatitudeFieldNumber = 4;
    private double latitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double Latitude {
      get { return latitude_; }
      set {
        latitude_ = value;
      }
    }


    /// <summary>Field number for the "Text" field.</summary>
        /// <summary>
    public const int TextFieldNumber = 5;
        ///  Create a ZipOutputStream.
    private string text_ = "";
        /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public string Text {
        /// <remarks>
      get { return text_; }
        ///  See the documentation for the <see
      set {
        ///  cref="ZipOutputStream(Stream)">ZipOutputStream(Stream)</see>
         text_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        ///  constructor for an example.
      }
        /// </remarks>
    }
        ///
        /// <param name="stream">
        ///  The stream to wrap. It must be writable.
        /// </param>
        ///
        /// <param name="leaveOpen">
        ///  true if the application would like the stream
         ///  to remain open after the <c>ZipOutputStream</c> has been closed.
        /// </param>
        public ZipOutputStream(Stream stream, bool leaveOpen)
        {
            _Init(stream, leaveOpen, null);
        }


    /// <summary>Field number for the "altitude" field.</summary>
         private void _Init(Stream stream, bool leaveOpen, string name)
    public const int AltitudeFieldNumber = 6;
         {
    private double altitude_;
            // workitem 9307
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _outputStream = stream.CanRead ? stream : new CountingStream(stream);
    public double Altitude {
            CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
      get { return altitude_; }
            CompressionMethod = Ionic.Zip.CompressionMethod.Deflate;
      set {
            _encryption = EncryptionAlgorithm.None;
         altitude_ = value;
            _entriesWritten = new Dictionary<String, ZipEntry>(StringComparer.Ordinal);
      }
            _zip64 = Zip64Option.Never;
    }
            _leaveUnderlyingStreamOpen = leaveOpen;
 
            Strategy = Ionic.Zlib.CompressionStrategy.Default;
    /// <summary>Field number for the "pointInformation" field.</summary>
            _name = name ?? "(stream)";
    public const int PointInformationFieldNumber = 7;
#if !NETCF
    private static readonly pbc::MapField<string, string>.Codec _map_pointInformation_codec
            ParallelDeflateThreshold = -1L;
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 58);
#endif
    private readonly pbc::MapField<string, string> pointInformation_ = new pbc::MapField<string, string>();
         }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, string> PointInformation {
      get { return pointInformation_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GeoPointProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GeoPointProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Longitude != other.Longitude) return false;
      if (Latitude != other.Latitude) return false;
      if (Text != other.Text) return false;
      if (Altitude != other.Altitude) return false;
      if (!PointInformation.Equals(other.PointInformation)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Longitude != 0D) hash ^= Longitude.GetHashCode();
      if (Latitude != 0D) hash ^= Latitude.GetHashCode();
      if (Text.Length != 0) hash ^= Text.GetHashCode();
      if (Altitude != 0D) hash ^= Altitude.GetHashCode();
      hash ^= PointInformation.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Longitude != 0D) {
        output.WriteRawTag(25);
        output.WriteDouble(Longitude);
      }
      if (Latitude != 0D) {
        output.WriteRawTag(33);
        output.WriteDouble(Latitude);
      }
      if (Text.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(Text);
      }
      if (Altitude != 0D) {
        output.WriteRawTag(49);
        output.WriteDouble(Altitude);
      }
      pointInformation_.WriteTo(output, _map_pointInformation_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Longitude != 0D) {
        size += 1 + 8;
      }
      if (Latitude != 0D) {
        size += 1 + 8;
      }
      if (Text.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Text);
      }
      if (Altitude != 0D) {
         size += 1 + 8;
      }
      size += pointInformation_.CalculateSize(_map_pointInformation_codec);
      return size;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GeoPointProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Longitude != 0D) {
        Longitude = other.Longitude;
      }
      if (other.Latitude != 0D) {
        Latitude = other.Latitude;
      }
      if (other.Text.Length != 0) {
        Text = other.Text;
      }
      if (other.Altitude != 0D) {
        Altitude = other.Altitude;
      }
      pointInformation_.Add(other.pointInformation_);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>Provides a string representation of the instance.</summary>
    public void MergeFrom(pb::CodedInputStream input) {
        /// <remarks>
      uint tag;
        ///  <para>
      while ((tag = input.ReadTag()) != 0) {
        ///    This can be useful for debugging purposes.
         switch(tag) {
         ///  </para>
          default:
        /// </remarks>
            input.SkipLastField();
        /// <returns>a string representation of the instance.</returns>
            break;
        public override String ToString()
          case 10: {
        {
             fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
             return String.Format ("ZipOutputStream::{0}(leaveOpen({1})))", _name, _leaveUnderlyingStreamOpen);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 25: {
            Longitude = input.ReadDouble();
            break;
          }
          case 33: {
            Latitude = input.ReadDouble();
            break;
          }
          case 42: {
            Text = input.ReadString();
            break;
          }
          case 49: {
            Altitude = input.ReadDouble();
            break;
          }
          case 58: {
            pointInformation_.AddEntriesFrom(input, _map_pointInformation_codec);
            break;
          }
         }
         }
      }
    }


  }


   public sealed partial class GeoShiftedIntPointProto : pb::IMessage<GeoShiftedIntPointProto> {
        /// <summary>
    private static readonly pb::MessageParser<GeoShiftedIntPointProto> _parser = new pb::MessageParser<GeoShiftedIntPointProto>(() => new GeoShiftedIntPointProto());
        ///  Sets the password to be used on the <c>ZipOutputStream</c> instance.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<GeoShiftedIntPointProto> Parser { get { return _parser; } }
        ///
        /// <remarks>
        ///
        /// <para>
        ///  When writing a zip archive, this password is applied to the entries, not
        ///  to the zip archive itself. It applies to any <c>ZipEntry</c> subsequently
        ///  written to the <c>ZipOutputStream</c>.
        /// </para>
        ///
        /// <para>
        ///  Using a password does not encrypt or protect the "directory" of the
        ///  archive - the list of entries contained in the archive.  If you set the
        ///  <c>Password</c> property, the password actually applies to individual
        ///  entries that are added to the archive, subsequent to the setting of this
        ///  property.  The list of filenames in the archive that is eventually created
        ///  will appear in clear text, but the contents of the individual files are
        ///   encrypted.  This is how Zip encryption works.
        /// </para>
        ///
        /// <para>
        ///  If you set this property, and then add a set of entries to the archive via
        ///  calls to <c>PutNextEntry</c>, then each entry is encrypted with that
        ///  password.  You may also want to change the password between adding
        ///  different entries. If you set the password, add an entry, then set the
        ///  password to <c>null</c> (<c>Nothing</c> in VB), and add another entry, the
        ///  first entry is encrypted and the second is not.
        /// </para>
        ///
        /// <para>
        ///  When setting the <c>Password</c>, you may also want to explicitly set the <see
        ///  cref="Encryption"/> property, to specify how to encrypt the entries added
        ///  to the ZipFile.  If you set the <c>Password</c> to a non-null value and do not
        ///  set <see cref="Encryption"/>, then PKZip 2.0 ("Weak") encryption is used.
        ///  This encryption is relatively weak but is very interoperable. If
        ///  you set the password to a <c>null</c> value (<c>Nothing</c> in VB),
        ///  <c>Encryption</c> is reset to None.
        /// </para>
        ///
        /// <para>
        ///  Special case: if you wrap a ZipOutputStream around a non-seekable stream,
        ///  and use encryption, and emit an entry of zero bytes, the <c>Close()</c> or
        ///  <c>PutNextEntry()</c> following the entry will throw an exception.
        /// </para>
        ///
        /// </remarks>
        public String Password
        {
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                _password = value;
    public static pbr::MessageDescriptor Descriptor {
                if (_password == null)
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[1]; }
                {
    }
                    _encryption = EncryptionAlgorithm.None;
 
                }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                else if (_encryption == EncryptionAlgorithm.None)
    pbr::MessageDescriptor pb::IMessage.Descriptor {
                {
      get { return Descriptor; }
                    _encryption = EncryptionAlgorithm.PkzipWeak;
    }
                }
 
             }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoShiftedIntPointProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoShiftedIntPointProto(GeoShiftedIntPointProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      longitude_ = other.longitude_;
      latitude_ = other.latitude_;
      text_ = other.text_;
      altitude_ = other.altitude_;
      pointInformation_ = other.pointInformation_.Clone();
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoShiftedIntPointProto Clone() {
      return new GeoShiftedIntPointProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "longitude" field.</summary>
    public const int LongitudeFieldNumber = 3;
    private int longitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int Longitude {
      get { return longitude_; }
      set {
        longitude_ = value;
      }
    }
 
    /// <summary>Field number for the "latitude" field.</summary>
    public const int LatitudeFieldNumber = 4;
    private int latitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int Latitude {
      get { return latitude_; }
      set {
        latitude_ = value;
      }
    }
 
    /// <summary>Field number for the "Text" field.</summary>
    public const int TextFieldNumber = 5;
    private string text_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Text {
      get { return text_; }
      set {
        text_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "altitude" field.</summary>
    public const int AltitudeFieldNumber = 6;
    private double altitude_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public double Altitude {
      get { return altitude_; }
      set {
        altitude_ = value;
      }
    }
 
    /// <summary>Field number for the "pointInformation" field.</summary>
    public const int PointInformationFieldNumber = 7;
    private static readonly pbc::MapField<string, string>.Codec _map_pointInformation_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 58);
    private readonly pbc::MapField<string, string> pointInformation_ = new pbc::MapField<string, string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, string> PointInformation {
      get { return pointInformation_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GeoShiftedIntPointProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GeoShiftedIntPointProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Longitude != other.Longitude) return false;
      if (Latitude != other.Latitude) return false;
      if (Text != other.Text) return false;
      if (Altitude != other.Altitude) return false;
      if (!PointInformation.Equals(other.PointInformation)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Longitude != 0) hash ^= Longitude.GetHashCode();
      if (Latitude != 0) hash ^= Latitude.GetHashCode();
      if (Text.Length != 0) hash ^= Text.GetHashCode();
      if (Altitude != 0D) hash ^= Altitude.GetHashCode();
      hash ^= PointInformation.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Longitude != 0) {
        output.WriteRawTag(24);
        output.WriteSInt32(Longitude);
      }
      if (Latitude != 0) {
        output.WriteRawTag(32);
        output.WriteSInt32(Latitude);
      }
      if (Text.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(Text);
      }
      if (Altitude != 0D) {
        output.WriteRawTag(49);
        output.WriteDouble(Altitude);
      }
      pointInformation_.WriteTo(output, _map_pointInformation_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Longitude != 0) {
        size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Longitude);
      }
      if (Latitude != 0) {
        size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Latitude);
      }
      if (Text.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Text);
      }
      if (Altitude != 0D) {
        size += 1 + 8;
      }
      size += pointInformation_.CalculateSize(_map_pointInformation_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GeoShiftedIntPointProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Longitude != 0) {
        Longitude = other.Longitude;
      }
      if (other.Latitude != 0) {
        Latitude = other.Latitude;
      }
      if (other.Text.Length != 0) {
        Text = other.Text;
      }
      if (other.Altitude != 0D) {
        Altitude = other.Altitude;
      }
      pointInformation_.Add(other.pointInformation_);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 24: {
            Longitude = input.ReadSInt32();
             break;
          }
          case 32: {
            Latitude = input.ReadSInt32();
            break;
          }
          case 42: {
            Text = input.ReadString();
            break;
          }
          case 49: {
            Altitude = input.ReadDouble();
            break;
          }
          case 58: {
            pointInformation_.AddEntriesFrom(input, _map_pointInformation_codec);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class PointInformation : pb::IMessage<PointInformation> {
        /// <summary>
    private static readonly pb::MessageParser<PointInformation> _parser = new pb::MessageParser<PointInformation>(() => new PointInformation());
        ///  The Encryption to use for entries added to the <c>ZipOutputStream</c>.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<PointInformation> Parser { get { return _parser; } }
        ///
 
        /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <para>
    public static pbr::MessageDescriptor Descriptor {
        ///  The specified Encryption is applied to the entries subsequently
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[2]; }
        ///  written to the <c>ZipOutputStream</c> instance.
    }
        /// </para>
 
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <para>
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        ///  If you set this to something other than
      get { return Descriptor; }
        ///  EncryptionAlgorithm.None, you will also need to set the
    }
        ///   <see cref="Password"/> to a non-null, non-empty value in
 
        ///  order to actually get encryption on the entry.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </para>
    public PointInformation() {
        ///
      OnConstruction();
        /// </remarks>
    }
         ///
 
        /// <seealso cref="Password">ZipOutputStream.Password</seealso>
    partial void OnConstruction();
        /// <seealso cref="Ionic.Zip.ZipEntry.Encryption">ZipEntry.Encryption</seealso>
 
        public EncryptionAlgorithm Encryption
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        {
    public PointInformation(PointInformation other) : this() {
            get
      info_ = other.info_.Clone();
            {
    }
                return _encryption;
 
            }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            set
    public PointInformation Clone() {
            {
      return new PointInformation(this);
                if (_disposed)
    }
                {
 
                    _exceptionPending = true;
    /// <summary>Field number for the "info" field.</summary>
                    throw new System.InvalidOperationException("The stream has been closed.");
    public const int InfoFieldNumber = 1;
                }
    private static readonly pbc::MapField<string, string>.Codec _map_info_codec
                if (value == EncryptionAlgorithm.Unsupported)
         = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 10);
                {
    private readonly pbc::MapField<string, string> info_ = new pbc::MapField<string, string>();
                    _exceptionPending = true;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    throw new InvalidOperationException("You may not set Encryption to that value.");
    public pbc::MapField<string, string> Info {
                }
      get { return info_; }
                _encryption = value;
    }
             }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PointInformation);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PointInformation other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!Info.Equals(other.Info)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= Info.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      info_.WriteTo(output, _map_info_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += info_.CalculateSize(_map_info_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PointInformation other) {
      if (other == null) {
        return;
      }
      info_.Add(other.info_);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
             info_.AddEntriesFrom(input, _map_info_codec);
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class GeoDoublePointsProto : pb::IMessage<GeoDoublePointsProto> {
    private static readonly pb::MessageParser<GeoDoublePointsProto> _parser = new pb::MessageParser<GeoDoublePointsProto>(() => new GeoDoublePointsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GeoDoublePointsProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[3]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoDoublePointsProto() {
      OnConstruction();
    }
    partial void OnConstruction();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoDoublePointsProto(GeoDoublePointsProto other) : this() {
      longitude_ = other.longitude_.Clone();
      latitude_ = other.latitude_.Clone();
      text_ = other.text_.Clone();
      altitude_ = other.altitude_.Clone();
      information_ = other.information_.Clone();
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoDoublePointsProto Clone() {
      return new GeoDoublePointsProto(this);
    }


    /// <summary>Field number for the "longitude" field.</summary>
    public const int LongitudeFieldNumber = 1;
    private static readonly pb::FieldCodec<double> _repeated_longitude_codec
        = pb::FieldCodec.ForDouble(10);
    private readonly pbc::RepeatedField<double> longitude_ = new pbc::RepeatedField<double>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<double> Longitude {
      get { return longitude_; }
    }


    /// <summary>Field number for the "latitude" field.</summary>
        /// <summary>
    public const int LatitudeFieldNumber = 2;
         ///   Size of the work buffer to use for the ZLIB codec during compression.
    private static readonly pb::FieldCodec<double> _repeated_latitude_codec
         /// </summary>
         = pb::FieldCodec.ForDouble(18);
        ///
    private readonly pbc::RepeatedField<double> latitude_ = new pbc::RepeatedField<double>();
         /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  Setting this may affect performance. For larger files, setting this to a
    public pbc::RepeatedField<double> Latitude {
         ///  larger size may improve performance, but I'm not sure. Sorry, I don't
      get { return latitude_; }
        ///  currently have good recommendations on how to set it. You can test it if
    }
         ///  you like.
 
        /// </remarks>
    /// <summary>Field number for the "Text" field.</summary>
        public int CodecBufferSize
    public const int TextFieldNumber = 3;
         {
    private static readonly pb::FieldCodec<string> _repeated_text_codec
             get;
         = pb::FieldCodec.ForString(26);
             set;
    private readonly pbc::RepeatedField<string> text_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> Text {
      get { return text_; }
    }
 
    /// <summary>Field number for the "altitude" field.</summary>
    public const int AltitudeFieldNumber = 4;
    private static readonly pb::FieldCodec<double> _repeated_altitude_codec
         = pb::FieldCodec.ForDouble(34);
    private readonly pbc::RepeatedField<double> altitude_ = new pbc::RepeatedField<double>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<double> Altitude {
      get { return altitude_; }
    }
 
    /// <summary>Field number for the "information" field.</summary>
    public const int InformationFieldNumber = 5;
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> _repeated_information_codec
         = pb::FieldCodec.ForMessage(42, global::TPG.DrawObjects.Serialize.Protoc.PointInformation.Parser);
    private readonly pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> information_ = new pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> Information {
      get { return information_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GeoDoublePointsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GeoDoublePointsProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
         return true;
      }
      if(!longitude_.Equals(other.longitude_)) return false;
      if(!latitude_.Equals(other.latitude_)) return false;
      if(!text_.Equals(other.text_)) return false;
      if(!altitude_.Equals(other.altitude_)) return false;
      if(!information_.Equals(other.information_)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= longitude_.GetHashCode();
      hash ^= latitude_.GetHashCode();
      hash ^= text_.GetHashCode();
      hash ^= altitude_.GetHashCode();
      hash ^= information_.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      longitude_.WriteTo(output, _repeated_longitude_codec);
      latitude_.WriteTo(output, _repeated_latitude_codec);
      text_.WriteTo(output, _repeated_text_codec);
      altitude_.WriteTo(output, _repeated_altitude_codec);
      information_.WriteTo(output, _repeated_information_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += longitude_.CalculateSize(_repeated_longitude_codec);
      size += latitude_.CalculateSize(_repeated_latitude_codec);
      size += text_.CalculateSize(_repeated_text_codec);
      size += altitude_.CalculateSize(_repeated_altitude_codec);
      size += information_.CalculateSize(_repeated_information_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GeoDoublePointsProto other) {
      if (other == null) {
         return;
      }
      longitude_.Add(other.longitude_);
      latitude_.Add(other.latitude_);
      text_.Add(other.text_);
      altitude_.Add(other.altitude_);
      information_.Add(other.information_);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10:
          case 9: {
            longitude_.AddEntriesFrom(input, _repeated_longitude_codec);
            break;
          }
          case 18:
          case 17: {
            latitude_.AddEntriesFrom(input, _repeated_latitude_codec);
            break;
          }
          case 26: {
            text_.AddEntriesFrom(input, _repeated_text_codec);
            break;
          }
          case 34:
          case 33: {
            altitude_.AddEntriesFrom(input, _repeated_altitude_codec);
            break;
          }
          case 42: {
            information_.AddEntriesFrom(input, _repeated_information_codec);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class GeoShiftedIntPointsProto : pb::IMessage<GeoShiftedIntPointsProto> {
        /// <summary>
    private static readonly pb::MessageParser<GeoShiftedIntPointsProto> _parser = new pb::MessageParser<GeoShiftedIntPointsProto>(() => new GeoShiftedIntPointsProto());
        ///  The compression strategy to use for all entries.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<GeoShiftedIntPointsProto> Parser { get { return _parser; } }
        ///
 
        /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///   Set the Strategy used by the ZLIB-compatible compressor, when compressing
    public static pbr::MessageDescriptor Descriptor {
         ///   data for the entries in the zip archive. Different compression strategies
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[4]; }
         ///  work better on different sorts of data. The strategy parameter can affect
    }
        ///   the compression ratio and the speed of compression but not the correctness
 
         ///   of the compresssion.  For more information see <see
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  cref="Ionic.Zlib.CompressionStrategy "/>.
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        /// </remarks>
      get { return Descriptor; }
         public Ionic.Zlib.CompressionStrategy Strategy
    }
         {
 
             get;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
             set;
    public GeoShiftedIntPointsProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoShiftedIntPointsProto(GeoShiftedIntPointsProto other) : this() {
      longitude_ = other.longitude_.Clone();
      latitude_ = other.latitude_.Clone();
      text_ = other.text_.Clone();
      altitude_ = other.altitude_.Clone();
      information_ = other.information_.Clone();
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GeoShiftedIntPointsProto Clone() {
      return new GeoShiftedIntPointsProto(this);
    }
 
    /// <summary>Field number for the "longitude" field.</summary>
    public const int LongitudeFieldNumber = 1;
    private static readonly pb::FieldCodec<int> _repeated_longitude_codec
         = pb::FieldCodec.ForSInt32(10);
    private readonly pbc::RepeatedField<int> longitude_ = new pbc::RepeatedField<int>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<int> Longitude {
      get { return longitude_; }
    }
 
    /// <summary>Field number for the "latitude" field.</summary>
    public const int LatitudeFieldNumber = 2;
    private static readonly pb::FieldCodec<int> _repeated_latitude_codec
         = pb::FieldCodec.ForSInt32(18);
    private readonly pbc::RepeatedField<int> latitude_ = new pbc::RepeatedField<int>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<int> Latitude {
      get { return latitude_; }
    }
 
    /// <summary>Field number for the "Text" field.</summary>
    public const int TextFieldNumber = 3;
    private static readonly pb::FieldCodec<string> _repeated_text_codec
         = pb::FieldCodec.ForString(26);
    private readonly pbc::RepeatedField<string> text_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> Text {
      get { return text_; }
    }
 
    /// <summary>Field number for the "altitude" field.</summary>
    public const int AltitudeFieldNumber = 4;
    private static readonly pb::FieldCodec<double> _repeated_altitude_codec
         = pb::FieldCodec.ForDouble(34);
    private readonly pbc::RepeatedField<double> altitude_ = new pbc::RepeatedField<double>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<double> Altitude {
      get { return altitude_; }
    }
 
    /// <summary>Field number for the "information" field.</summary>
    public const int InformationFieldNumber = 5;
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> _repeated_information_codec
         = pb::FieldCodec.ForMessage(42, global::TPG.DrawObjects.Serialize.Protoc.PointInformation.Parser);
    private readonly pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> information_ = new pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.PointInformation> Information {
      get { return information_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GeoShiftedIntPointsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GeoShiftedIntPointsProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
         return true;
      }
      if(!longitude_.Equals(other.longitude_)) return false;
      if(!latitude_.Equals(other.latitude_)) return false;
      if(!text_.Equals(other.text_)) return false;
      if(!altitude_.Equals(other.altitude_)) return false;
      if(!information_.Equals(other.information_)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= longitude_.GetHashCode();
      hash ^= latitude_.GetHashCode();
      hash ^= text_.GetHashCode();
      hash ^= altitude_.GetHashCode();
      hash ^= information_.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      longitude_.WriteTo(output, _repeated_longitude_codec);
      latitude_.WriteTo(output, _repeated_latitude_codec);
      text_.WriteTo(output, _repeated_text_codec);
      altitude_.WriteTo(output, _repeated_altitude_codec);
      information_.WriteTo(output, _repeated_information_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += longitude_.CalculateSize(_repeated_longitude_codec);
      size += latitude_.CalculateSize(_repeated_latitude_codec);
      size += text_.CalculateSize(_repeated_text_codec);
      size += altitude_.CalculateSize(_repeated_altitude_codec);
      size += information_.CalculateSize(_repeated_information_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GeoShiftedIntPointsProto other) {
      if (other == null) {
        return;
      }
      longitude_.Add(other.longitude_);
      latitude_.Add(other.latitude_);
      text_.Add(other.text_);
      altitude_.Add(other.altitude_);
      information_.Add(other.information_);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
             input.SkipLastField();
            break;
          case 10:
          case 8: {
            longitude_.AddEntriesFrom(input, _repeated_longitude_codec);
             break;
          }
          case 18:
          case 16: {
            latitude_.AddEntriesFrom(input, _repeated_latitude_codec);
            break;
          }
          case 26: {
            text_.AddEntriesFrom(input, _repeated_text_codec);
            break;
          }
          case 34:
          case 33: {
            altitude_.AddEntriesFrom(input, _repeated_altitude_codec);
            break;
          }
          case 42: {
            information_.AddEntriesFrom(input, _repeated_information_codec);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class DataFieldsProto : pb::IMessage<DataFieldsProto> {
         /// <summary>
    private static readonly pb::MessageParser<DataFieldsProto> _parser = new pb::MessageParser<DataFieldsProto>(() => new DataFieldsProto());
         ///   The type of timestamp attached to the ZipEntry.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// </summary>
    public static pb::MessageParser<DataFieldsProto> Parser { get { return _parser; } }
         ///
 
         /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///   Set this in order to specify the kind of timestamp that should be emitted
    public static pbr::MessageDescriptor Descriptor {
         ///   into the zip file for each entry.
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[5]; }
         /// </remarks>
    }
         public ZipEntryTimestamp Timestamp
 
         {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            get
    pbr::MessageDescriptor pb::IMessage.Descriptor {
            {
      get { return Descriptor; }
                return _timestamp;
    }
            }
 
            set
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            {
    public DataFieldsProto() {
                if (_disposed)
      OnConstruction();
                {
    }
                    _exceptionPending = true;
 
                    throw new System.InvalidOperationException("The stream has been closed.");
    partial void OnConstruction();
                }
 
                _timestamp = value;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
             }
    public DataFieldsProto(DataFieldsProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      name_ = other.name_;
      hierarchyCode_ = other.hierarchyCode_;
      drawDepth_ = other.drawDepth_;
      rotationAngle_ = other.rotationAngle_;
      version_ = other.version_;
      alphaFactor_ = other.alphaFactor_;
      movementIndicatorColor_ = other.movementIndicatorColor_;
      offsetLocationIndicatorColor_ = other.offsetLocationIndicatorColor_;
      labelFontName_ = other.labelFontName_;
      labelFontSize_ = other.labelFontSize_;
      labelFontForegroundColor_ = other.labelFontForegroundColor_;
      minDynamicScale_ = other.minDynamicScale_;
      maxDynamicScale_ = other.maxDynamicScale_;
      extraFields_ = other.extraFields_.Clone();
      tacticalExtraFields_ = other.tacticalExtraFields_.Clone();
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DataFieldsProto Clone() {
      return new DataFieldsProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///field_version_info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    /// <summary>
    ///field_invalid_indices
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 3;
    private string name_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Name {
      get { return name_; }
      set {
         name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "HierarchyCode" field.</summary>
    public const int HierarchyCodeFieldNumber = 4;
    private string hierarchyCode_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string HierarchyCode {
      get { return hierarchyCode_; }
      set {
         hierarchyCode_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "DrawDepth" field.</summary>
    public const int DrawDepthFieldNumber = 5;
    private int drawDepth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int DrawDepth {
      get { return drawDepth_; }
      set {
         drawDepth_ = value;
      }
    }
 
    /// <summary>Field number for the "RotationAngle" field.</summary>
    public const int RotationAngleFieldNumber = 6;
    private float rotationAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float RotationAngle {
      get { return rotationAngle_; }
      set {
         rotationAngle_ = value;
      }
    }
 
    /// <summary>Field number for the "Version" field.</summary>
    public const int VersionFieldNumber = 7;
    private uint version_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint Version {
      get { return version_; }
      set {
         version_ = value;
      }
    }
 
    /// <summary>Field number for the "AlphaFactor" field.</summary>
    public const int AlphaFactorFieldNumber = 8;
    private float alphaFactor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float AlphaFactor {
      get { return alphaFactor_; }
      set {
        alphaFactor_ = value;
      }
    }
 
    /// <summary>Field number for the "MovementIndicatorColor" field.</summary>
    public const int MovementIndicatorColorFieldNumber = 9;
    private uint movementIndicatorColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint MovementIndicatorColor {
      get { return movementIndicatorColor_; }
      set {
         movementIndicatorColor_ = value;
      }
    }
 
    /// <summary>Field number for the "OffsetLocationIndicatorColor" field.</summary>
    public const int OffsetLocationIndicatorColorFieldNumber = 10;
    private uint offsetLocationIndicatorColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint OffsetLocationIndicatorColor {
      get { return offsetLocationIndicatorColor_; }
      set {
         offsetLocationIndicatorColor_ = value;
      }
    }
 
    /// <summary>Field number for the "LabelFontName" field.</summary>
    public const int LabelFontNameFieldNumber = 11;
    private string labelFontName_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string LabelFontName {
      get { return labelFontName_; }
      set {
         labelFontName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "LabelFontSize" field.</summary>
    public const int LabelFontSizeFieldNumber = 12;
    private uint labelFontSize_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint LabelFontSize {
      get { return labelFontSize_; }
      set {
        labelFontSize_ = value;
      }
    }
 
    /// <summary>Field number for the "LabelFontForegroundColor" field.</summary>
    public const int LabelFontForegroundColorFieldNumber = 13;
    private uint labelFontForegroundColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint LabelFontForegroundColor {
      get { return labelFontForegroundColor_; }
      set {
        labelFontForegroundColor_ = value;
      }
    }
 
    /// <summary>Field number for the "MinDynamicScale" field.</summary>
    public const int MinDynamicScaleFieldNumber = 14;
    private float minDynamicScale_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MinDynamicScale {
      get { return minDynamicScale_; }
      set {
        minDynamicScale_ = value;
      }
    }
 
    /// <summary>Field number for the "MaxDynamicScale" field.</summary>
    public const int MaxDynamicScaleFieldNumber = 15;
    private float maxDynamicScale_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MaxDynamicScale {
      get { return maxDynamicScale_; }
      set {
        maxDynamicScale_ = value;
      }
    }
 
    /// <summary>Field number for the "ExtraFields" field.</summary>
    public const int ExtraFieldsFieldNumber = 16;
    private static readonly pbc::MapField<string, string>.Codec _map_extraFields_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 130);
    private readonly pbc::MapField<string, string> extraFields_ = new pbc::MapField<string, string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, string> ExtraFields {
      get { return extraFields_; }
    }
 
    /// <summary>Field number for the "TacticalExtraFields" field.</summary>
    public const int TacticalExtraFieldsFieldNumber = 17;
    private static readonly pbc::MapField<string, string>.Codec _map_tacticalExtraFields_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10), pb::FieldCodec.ForString(18), 138);
    private readonly pbc::MapField<string, string> tacticalExtraFields_ = new pbc::MapField<string, string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<string, string> TacticalExtraFields {
      get { return tacticalExtraFields_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DataFieldsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DataFieldsProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Name != other.Name) return false;
      if (HierarchyCode != other.HierarchyCode) return false;
      if (DrawDepth != other.DrawDepth) return false;
      if (RotationAngle != other.RotationAngle) return false;
      if (Version != other.Version) return false;
      if (AlphaFactor != other.AlphaFactor) return false;
      if (MovementIndicatorColor != other.MovementIndicatorColor) return false;
      if (OffsetLocationIndicatorColor != other.OffsetLocationIndicatorColor) return false;
      if (LabelFontName != other.LabelFontName) return false;
      if (LabelFontSize != other.LabelFontSize) return false;
      if (LabelFontForegroundColor != other.LabelFontForegroundColor) return false;
      if (MinDynamicScale != other.MinDynamicScale) return false;
      if (MaxDynamicScale != other.MaxDynamicScale) return false;
      if (!ExtraFields.Equals(other.ExtraFields)) return false;
      if (!TacticalExtraFields.Equals(other.TacticalExtraFields)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (HierarchyCode.Length != 0) hash ^= HierarchyCode.GetHashCode();
      if (DrawDepth != 0) hash ^= DrawDepth.GetHashCode();
      if (RotationAngle != 0F) hash ^= RotationAngle.GetHashCode();
      if (Version != 0) hash ^= Version.GetHashCode();
      if (AlphaFactor != 0F) hash ^= AlphaFactor.GetHashCode();
      if (MovementIndicatorColor != 0) hash ^= MovementIndicatorColor.GetHashCode();
      if (OffsetLocationIndicatorColor != 0) hash ^= OffsetLocationIndicatorColor.GetHashCode();
      if (LabelFontName.Length != 0) hash ^= LabelFontName.GetHashCode();
      if (LabelFontSize != 0) hash ^= LabelFontSize.GetHashCode();
      if (LabelFontForegroundColor != 0) hash ^= LabelFontForegroundColor.GetHashCode();
      if (MinDynamicScale != 0F) hash ^= MinDynamicScale.GetHashCode();
      if (MaxDynamicScale != 0F) hash ^= MaxDynamicScale.GetHashCode();
      hash ^= ExtraFields.GetHashCode();
      hash ^= TacticalExtraFields.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Name.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Name);
      }
      if (HierarchyCode.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(HierarchyCode);
      }
      if (DrawDepth != 0) {
        output.WriteRawTag(40);
        output.WriteInt32(DrawDepth);
      }
      if (RotationAngle != 0F) {
        output.WriteRawTag(53);
        output.WriteFloat(RotationAngle);
      }
      if (Version != 0) {
        output.WriteRawTag(56);
        output.WriteUInt32(Version);
      }
      if (AlphaFactor != 0F) {
        output.WriteRawTag(69);
        output.WriteFloat(AlphaFactor);
      }
      if (MovementIndicatorColor != 0) {
        output.WriteRawTag(72);
        output.WriteUInt32(MovementIndicatorColor);
      }
      if (OffsetLocationIndicatorColor != 0) {
        output.WriteRawTag(80);
        output.WriteUInt32(OffsetLocationIndicatorColor);
      }
      if (LabelFontName.Length != 0) {
        output.WriteRawTag(90);
        output.WriteString(LabelFontName);
      }
      if (LabelFontSize != 0) {
        output.WriteRawTag(96);
        output.WriteUInt32(LabelFontSize);
      }
      if (LabelFontForegroundColor != 0) {
        output.WriteRawTag(104);
        output.WriteUInt32(LabelFontForegroundColor);
      }
      if (MinDynamicScale != 0F) {
        output.WriteRawTag(117);
        output.WriteFloat(MinDynamicScale);
      }
      if (MaxDynamicScale != 0F) {
        output.WriteRawTag(125);
        output.WriteFloat(MaxDynamicScale);
      }
      extraFields_.WriteTo(output, _map_extraFields_codec);
      tacticalExtraFields_.WriteTo(output, _map_tacticalExtraFields_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (HierarchyCode.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(HierarchyCode);
      }
      if (DrawDepth != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DrawDepth);
      }
      if (RotationAngle != 0F) {
        size += 1 + 4;
      }
      if (Version != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Version);
      }
      if (AlphaFactor != 0F) {
        size += 1 + 4;
      }
      if (MovementIndicatorColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(MovementIndicatorColor);
      }
      if (OffsetLocationIndicatorColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(OffsetLocationIndicatorColor);
      }
      if (LabelFontName.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(LabelFontName);
      }
      if (LabelFontSize != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(LabelFontSize);
      }
      if (LabelFontForegroundColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(LabelFontForegroundColor);
      }
      if (MinDynamicScale != 0F) {
        size += 1 + 4;
      }
      if (MaxDynamicScale != 0F) {
        size += 1 + 4;
      }
      size += extraFields_.CalculateSize(_map_extraFields_codec);
      size += tacticalExtraFields_.CalculateSize(_map_tacticalExtraFields_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DataFieldsProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.HierarchyCode.Length != 0) {
        HierarchyCode = other.HierarchyCode;
      }
      if (other.DrawDepth != 0) {
        DrawDepth = other.DrawDepth;
      }
      if (other.RotationAngle != 0F) {
        RotationAngle = other.RotationAngle;
      }
      if (other.Version != 0) {
        Version = other.Version;
      }
      if (other.AlphaFactor != 0F) {
        AlphaFactor = other.AlphaFactor;
      }
      if (other.MovementIndicatorColor != 0) {
        MovementIndicatorColor = other.MovementIndicatorColor;
      }
      if (other.OffsetLocationIndicatorColor != 0) {
        OffsetLocationIndicatorColor = other.OffsetLocationIndicatorColor;
      }
      if (other.LabelFontName.Length != 0) {
        LabelFontName = other.LabelFontName;
      }
      if (other.LabelFontSize != 0) {
        LabelFontSize = other.LabelFontSize;
      }
      if (other.LabelFontForegroundColor != 0) {
        LabelFontForegroundColor = other.LabelFontForegroundColor;
      }
      if (other.MinDynamicScale != 0F) {
        MinDynamicScale = other.MinDynamicScale;
      }
      if (other.MaxDynamicScale != 0F) {
        MaxDynamicScale = other.MaxDynamicScale;
      }
      extraFields_.Add(other.extraFields_);
      tacticalExtraFields_.Add(other.tacticalExtraFields_);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            Name = input.ReadString();
            break;
          }
          case 34: {
            HierarchyCode = input.ReadString();
            break;
          }
          case 40: {
            DrawDepth = input.ReadInt32();
            break;
          }
          case 53: {
            RotationAngle = input.ReadFloat();
            break;
          }
          case 56: {
            Version = input.ReadUInt32();
            break;
          }
          case 69: {
            AlphaFactor = input.ReadFloat();
            break;
          }
          case 72: {
            MovementIndicatorColor = input.ReadUInt32();
            break;
          }
          case 80: {
            OffsetLocationIndicatorColor = input.ReadUInt32();
            break;
          }
          case 90: {
            LabelFontName = input.ReadString();
            break;
          }
          case 96: {
            LabelFontSize = input.ReadUInt32();
            break;
          }
          case 104: {
            LabelFontForegroundColor = input.ReadUInt32();
            break;
          }
          case 117: {
            MinDynamicScale = input.ReadFloat();
            break;
          }
          case 125: {
            MaxDynamicScale = input.ReadFloat();
            break;
          }
          case 130: {
             extraFields_.AddEntriesFrom(input, _map_extraFields_codec);
            break;
          }
          case 138: {
            tacticalExtraFields_.AddEntriesFrom(input, _map_tacticalExtraFields_codec);
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class TacticalFieldsProto : pb::IMessage<TacticalFieldsProto> {
    private static readonly pb::MessageParser<TacticalFieldsProto> _parser = new pb::MessageParser<TacticalFieldsProto>(() => new TacticalFieldsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<TacticalFieldsProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[6]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TacticalFieldsProto() {
      OnConstruction();
    }


    partial void OnConstruction();


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public TacticalFieldsProto(TacticalFieldsProto other) : this() {
         ///   Sets the compression level to be used for entries subsequently added to
      fieldIndexes_ = other.fieldIndexes_.Clone();
        ///   the zip archive.
      invalidIndexes_ = other.invalidIndexes_.Clone();
        /// </summary>
      minefieldOpacity_ = other.minefieldOpacity_;
        ///
      symbolIndicator_ = other.symbolIndicator_;
        /// <remarks>
      additionalInformation_ = other.additionalInformation_.Clone();
         /// <para>
      uniqueDesignation_ = other.uniqueDesignation_.Clone();
         ///   Varying the compression level used on entries can affect the
      dateTimeGroup_ = other.dateTimeGroup_.Clone();
         ///   size-vs-speed tradeoff when compression and decompressing data streams
      offsetLocationDisplacementX_ = other.offsetLocationDisplacementX_;
         ///   or files.
      offsetLocationDisplacementY_ = other.offsetLocationDisplacementY_;
         /// </para>
      quantity_ = other.quantity_;
         ///
      nuclearWeaponType_ = other.nuclearWeaponType_;
         /// <para>
      directionOfMovement_ = other.directionOfMovement_;
         ///   As with some other properties on the <c>ZipOutputStream</c> class, like <see
      altitudeDepth_ = other.altitudeDepth_;
         ///   cref="Password"/>, and <see cref="Encryption"/>,
      distance_ = other.distance_;
         ///   setting this property on a <c>ZipOutputStream</c>
      azimuth_ = other.azimuth_;
         ///   instance will cause the specified <c>CompressionLevel</c> to be used on all
      tacticalEnums_ = other.tacticalEnums_;
         ///   <see cref="ZipEntry"/> items that are subsequently added to the
    }
         ///   <c>ZipOutputStream</c> instance.
 
         /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public TacticalFieldsProto Clone() {
        /// <para>
      return new TacticalFieldsProto(this);
        ///   If you do not set this property, the default compression level is used,
    }
        ///   which normally gives a good balance of compression efficiency and
 
         ///    compression speed. In some tests, using <c>BestCompression</c> can
    /// <summary>Field number for the "field_indexes" field.</summary>
         ///    double the time it takes to compress, while delivering just a small
    public const int FieldIndexesFieldNumber = 1;
         ///    increase in compression efficiency. This behavior will vary with the
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         ///    type of data you compress. If you are in doubt, just leave this setting
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
         ///    alone, and accept the default.
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
         ///  </para>
    /// <summary>
         /// </remarks>
    ///Key is field index#, Value is version info
         public Ionic.Zlib.CompressionLevel CompressionLevel
    /// </summary>
         {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
             get;
    public pbc::MapField<uint, string> FieldIndexes {
             set;
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "MinefieldOpacity" field.</summary>
    public const int MinefieldOpacityFieldNumber = 3;
    private float minefieldOpacity_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MinefieldOpacity {
      get { return minefieldOpacity_; }
      set {
         minefieldOpacity_ = value;
      }
    }
 
    /// <summary>Field number for the "SymbolIndicator" field.</summary>
    public const int SymbolIndicatorFieldNumber = 4;
    private string symbolIndicator_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string SymbolIndicator {
      get { return symbolIndicator_; }
      set {
         symbolIndicator_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "AdditionalInformation" field.</summary>
    public const int AdditionalInformationFieldNumber = 5;
    private static readonly pb::FieldCodec<string> _repeated_additionalInformation_codec
         = pb::FieldCodec.ForString(42);
    private readonly pbc::RepeatedField<string> additionalInformation_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> AdditionalInformation {
      get { return additionalInformation_; }
    }
 
    /// <summary>Field number for the "UniqueDesignation" field.</summary>
    public const int UniqueDesignationFieldNumber = 6;
    private static readonly pb::FieldCodec<string> _repeated_uniqueDesignation_codec
         = pb::FieldCodec.ForString(50);
    private readonly pbc::RepeatedField<string> uniqueDesignation_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> UniqueDesignation {
      get { return uniqueDesignation_; }
    }
 
    /// <summary>Field number for the "DateTimeGroup" field.</summary>
    public const int DateTimeGroupFieldNumber = 7;
    private static readonly pb::FieldCodec<string> _repeated_dateTimeGroup_codec
         = pb::FieldCodec.ForString(58);
    private readonly pbc::RepeatedField<string> dateTimeGroup_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> DateTimeGroup {
      get { return dateTimeGroup_; }
    }
 
    /// <summary>Field number for the "OffsetLocationDisplacementX" field.</summary>
    public const int OffsetLocationDisplacementXFieldNumber = 8;
    private float offsetLocationDisplacementX_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float OffsetLocationDisplacementX {
      get { return offsetLocationDisplacementX_; }
      set {
         offsetLocationDisplacementX_ = value;
      }
    }
 
    /// <summary>Field number for the "OffsetLocationDisplacementY" field.</summary>
    public const int OffsetLocationDisplacementYFieldNumber = 9;
    private float offsetLocationDisplacementY_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float OffsetLocationDisplacementY {
      get { return offsetLocationDisplacementY_; }
      set {
         offsetLocationDisplacementY_ = value;
      }
    }
 
    /// <summary>Field number for the "Quantity" field.</summary>
    public const int QuantityFieldNumber = 10;
    private float quantity_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Quantity {
      get { return quantity_; }
      set {
         quantity_ = value;
      }
    }
 
    /// <summary>Field number for the "NuclearWeaponType" field.</summary>
    public const int NuclearWeaponTypeFieldNumber = 11;
    private string nuclearWeaponType_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string NuclearWeaponType {
      get { return nuclearWeaponType_; }
      set {
         nuclearWeaponType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "DirectionOfMovement" field.</summary>
    public const int DirectionOfMovementFieldNumber = 12;
    private string directionOfMovement_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string DirectionOfMovement {
      get { return directionOfMovement_; }
      set {
         directionOfMovement_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "AltitudeDepth" field.</summary>
    public const int AltitudeDepthFieldNumber = 13;
    private float altitudeDepth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float AltitudeDepth {
      get { return altitudeDepth_; }
      set {
         altitudeDepth_ = value;
      }
    }
 
    /// <summary>Field number for the "Distance" field.</summary>
    public const int DistanceFieldNumber = 14;
    private float distance_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Distance {
      get { return distance_; }
      set {
         distance_ = value;
      }
    }
 
    /// <summary>Field number for the "Azimuth" field.</summary>
    public const int AzimuthFieldNumber = 15;
    private float azimuth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Azimuth {
      get { return azimuth_; }
      set {
         azimuth_ = value;
      }
    }
 
    /// <summary>Field number for the "TacticalEnums" field.</summary>
    public const int TacticalEnumsFieldNumber = 16;
    private uint tacticalEnums_;
    /// <summary>
    /// Tactical enum attributes are mapped into this attribute
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint TacticalEnums {
      get { return tacticalEnums_; }
      set {
         tacticalEnums_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as TacticalFieldsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(TacticalFieldsProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
         return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (MinefieldOpacity != other.MinefieldOpacity) return false;
      if (SymbolIndicator != other.SymbolIndicator) return false;
      if(!additionalInformation_.Equals(other.additionalInformation_)) return false;
      if(!uniqueDesignation_.Equals(other.uniqueDesignation_)) return false;
      if(!dateTimeGroup_.Equals(other.dateTimeGroup_)) return false;
      if (OffsetLocationDisplacementX != other.OffsetLocationDisplacementX) return false;
      if (OffsetLocationDisplacementY != other.OffsetLocationDisplacementY) return false;
      if (Quantity != other.Quantity) return false;
      if (NuclearWeaponType != other.NuclearWeaponType) return false;
      if (DirectionOfMovement != other.DirectionOfMovement) return false;
      if (AltitudeDepth != other.AltitudeDepth) return false;
      if (Distance != other.Distance) return false;
      if (Azimuth != other.Azimuth) return false;
      if (TacticalEnums != other.TacticalEnums) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (MinefieldOpacity != 0F) hash ^= MinefieldOpacity.GetHashCode();
      if (SymbolIndicator.Length != 0) hash ^= SymbolIndicator.GetHashCode();
      hash ^= additionalInformation_.GetHashCode();
      hash ^= uniqueDesignation_.GetHashCode();
      hash ^= dateTimeGroup_.GetHashCode();
      if (OffsetLocationDisplacementX != 0F) hash ^= OffsetLocationDisplacementX.GetHashCode();
      if (OffsetLocationDisplacementY != 0F) hash ^= OffsetLocationDisplacementY.GetHashCode();
      if (Quantity != 0F) hash ^= Quantity.GetHashCode();
      if (NuclearWeaponType.Length != 0) hash ^= NuclearWeaponType.GetHashCode();
      if (DirectionOfMovement.Length != 0) hash ^= DirectionOfMovement.GetHashCode();
      if (AltitudeDepth != 0F) hash ^= AltitudeDepth.GetHashCode();
      if (Distance != 0F) hash ^= Distance.GetHashCode();
      if (Azimuth != 0F) hash ^= Azimuth.GetHashCode();
      if (TacticalEnums != 0) hash ^= TacticalEnums.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (MinefieldOpacity != 0F) {
         output.WriteRawTag(29);
        output.WriteFloat(MinefieldOpacity);
      }
      if (SymbolIndicator.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(SymbolIndicator);
      }
      additionalInformation_.WriteTo(output, _repeated_additionalInformation_codec);
      uniqueDesignation_.WriteTo(output, _repeated_uniqueDesignation_codec);
      dateTimeGroup_.WriteTo(output, _repeated_dateTimeGroup_codec);
      if (OffsetLocationDisplacementX != 0F) {
         output.WriteRawTag(69);
        output.WriteFloat(OffsetLocationDisplacementX);
      }
      if (OffsetLocationDisplacementY != 0F) {
        output.WriteRawTag(77);
        output.WriteFloat(OffsetLocationDisplacementY);
      }
      if (Quantity != 0F) {
        output.WriteRawTag(85);
        output.WriteFloat(Quantity);
      }
      if (NuclearWeaponType.Length != 0) {
        output.WriteRawTag(90);
        output.WriteString(NuclearWeaponType);
      }
      if (DirectionOfMovement.Length != 0) {
        output.WriteRawTag(98);
        output.WriteString(DirectionOfMovement);
      }
      if (AltitudeDepth != 0F) {
        output.WriteRawTag(109);
        output.WriteFloat(AltitudeDepth);
      }
      if (Distance != 0F) {
        output.WriteRawTag(117);
        output.WriteFloat(Distance);
      }
      if (Azimuth != 0F) {
        output.WriteRawTag(125);
        output.WriteFloat(Azimuth);
      }
      if (TacticalEnums != 0) {
        output.WriteRawTag(133, 1);
        output.WriteFixed32(TacticalEnums);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (MinefieldOpacity != 0F) {
         size += 1 + 4;
      }
      if (SymbolIndicator.Length != 0) {
         size += 1 + pb::CodedOutputStream.ComputeStringSize(SymbolIndicator);
      }
      size += additionalInformation_.CalculateSize(_repeated_additionalInformation_codec);
      size += uniqueDesignation_.CalculateSize(_repeated_uniqueDesignation_codec);
      size += dateTimeGroup_.CalculateSize(_repeated_dateTimeGroup_codec);
      if (OffsetLocationDisplacementX != 0F) {
        size += 1 + 4;
      }
      if (OffsetLocationDisplacementY != 0F) {
        size += 1 + 4;
      }
      if (Quantity != 0F) {
        size += 1 + 4;
      }
      if (NuclearWeaponType.Length != 0) {
         size += 1 + pb::CodedOutputStream.ComputeStringSize(NuclearWeaponType);
      }
      if (DirectionOfMovement.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(DirectionOfMovement);
      }
      if (AltitudeDepth != 0F) {
        size += 1 + 4;
      }
      if (Distance != 0F) {
        size += 1 + 4;
      }
      if (Azimuth != 0F) {
        size += 1 + 4;
      }
      if (TacticalEnums != 0) {
        size += 2 + 4;
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(TacticalFieldsProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.MinefieldOpacity != 0F) {
         MinefieldOpacity = other.MinefieldOpacity;
      }
      if (other.SymbolIndicator.Length != 0) {
        SymbolIndicator = other.SymbolIndicator;
      }
      additionalInformation_.Add(other.additionalInformation_);
      uniqueDesignation_.Add(other.uniqueDesignation_);
      dateTimeGroup_.Add(other.dateTimeGroup_);
      if (other.OffsetLocationDisplacementX != 0F) {
        OffsetLocationDisplacementX = other.OffsetLocationDisplacementX;
      }
      if (other.OffsetLocationDisplacementY != 0F) {
        OffsetLocationDisplacementY = other.OffsetLocationDisplacementY;
      }
      if (other.Quantity != 0F) {
        Quantity = other.Quantity;
      }
      if (other.NuclearWeaponType.Length != 0) {
        NuclearWeaponType = other.NuclearWeaponType;
      }
      if (other.DirectionOfMovement.Length != 0) {
        DirectionOfMovement = other.DirectionOfMovement;
      }
      if (other.AltitudeDepth != 0F) {
        AltitudeDepth = other.AltitudeDepth;
      }
      if (other.Distance != 0F) {
        Distance = other.Distance;
      }
      if (other.Azimuth != 0F) {
        Azimuth = other.Azimuth;
      }
      if (other.TacticalEnums != 0) {
        TacticalEnums = other.TacticalEnums;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 29: {
            MinefieldOpacity = input.ReadFloat();
            break;
          }
          case 34: {
            SymbolIndicator = input.ReadString();
            break;
          }
          case 42: {
            additionalInformation_.AddEntriesFrom(input, _repeated_additionalInformation_codec);
            break;
          }
          case 50: {
            uniqueDesignation_.AddEntriesFrom(input, _repeated_uniqueDesignation_codec);
            break;
          }
          case 58: {
            dateTimeGroup_.AddEntriesFrom(input, _repeated_dateTimeGroup_codec);
            break;
          }
          case 69: {
            OffsetLocationDisplacementX = input.ReadFloat();
            break;
          }
          case 77: {
            OffsetLocationDisplacementY = input.ReadFloat();
            break;
          }
          case 85: {
            Quantity = input.ReadFloat();
            break;
          }
          case 90: {
            NuclearWeaponType = input.ReadString();
            break;
          }
          case 98: {
            DirectionOfMovement = input.ReadString();
            break;
          }
          case 109: {
            AltitudeDepth = input.ReadFloat();
            break;
          }
          case 117: {
            Distance = input.ReadFloat();
            break;
          }
          case 125: {
            Azimuth = input.ReadFloat();
            break;
          }
          case 133: {
            TacticalEnums = input.ReadFixed32();
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class GenericFieldsProto : pb::IMessage<GenericFieldsProto> {
    private static readonly pb::MessageParser<GenericFieldsProto> _parser = new pb::MessageParser<GenericFieldsProto>(() => new GenericFieldsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GenericFieldsProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[7]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GenericFieldsProto() {
      OnConstruction();
    }
    partial void OnConstruction();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GenericFieldsProto(GenericFieldsProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      lineColor_ = other.lineColor_;
      lineDashStyle_ = other.lineDashStyle_.Clone();
      lineDashStyleOffset_ = other.lineDashStyleOffset_;
      centerLineWidth_ = other.centerLineWidth_;
      centerLineColor_ = other.centerLineColor_;
      centerLineDashStyle_ = other.centerLineDashStyle_.Clone();
      centerLineDashStyleOffset_ = other.centerLineDashStyleOffset_;
      lineWidth_ = other.lineWidth_;
      lineOutlineWidth_ = other.lineOutlineWidth_;
      lineOutlineColor_ = other.lineOutlineColor_;
      fillForegroundColor_ = other.fillForegroundColor_;
      fillBackgroundColor_ = other.fillBackgroundColor_;
      bufferLineColor_ = other.bufferLineColor_;
      bufferLineDashStyle_ = other.bufferLineDashStyle_.Clone();
      bufferLineDashStyleOffset_ = other.bufferLineDashStyleOffset_;
      bufferLineWidth_ = other.bufferLineWidth_;
      bufferWidth_ = other.bufferWidth_;
      text_ = other.text_;
      fontName_ = other.fontName_;
      fontSize_ = other.fontSize_;
      fontForegroundColor_ = other.fontForegroundColor_;
      fontBackgroundColor_ = other.fontBackgroundColor_;
      numberOfRadials_ = other.numberOfRadials_;
      symbolType_ = other.symbolType_;
      symbolCode_ = other.symbolCode_;
      genericType_ = other.genericType_;
      uncertaintyAngle_ = other.uncertaintyAngle_;
      margin_ = other.margin_;
      minFontSize_ = other.minFontSize_;
      minFontMapScale_ = other.minFontMapScale_;
      maxFontMapScale_ = other.maxFontMapScale_;
      genericEnums_ = other.genericEnums_;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GenericFieldsProto Clone() {
      return new GenericFieldsProto(this);
    }
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
    /// <summary>Field number for the "LineColor" field.</summary>
    public const int LineColorFieldNumber = 3;
    private uint lineColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint LineColor {
      get { return lineColor_; }
      set {
        lineColor_ = value;
      }
    }
    /// <summary>Field number for the "LineDashStyle" field.</summary>
    public const int LineDashStyleFieldNumber = 4;
    private static readonly pb::FieldCodec<float> _repeated_lineDashStyle_codec
        = pb::FieldCodec.ForFloat(34);
    private readonly pbc::RepeatedField<float> lineDashStyle_ = new pbc::RepeatedField<float>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<float> LineDashStyle {
      get { return lineDashStyle_; }
    }
    /// <summary>Field number for the "LineDashStyleOffset" field.</summary>
    public const int LineDashStyleOffsetFieldNumber = 5;
    private float lineDashStyleOffset_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float LineDashStyleOffset {
      get { return lineDashStyleOffset_; }
      set {
        lineDashStyleOffset_ = value;
      }
    }
    /// <summary>Field number for the "CenterLineWidth" field.</summary>
    public const int CenterLineWidthFieldNumber = 6;
    private float centerLineWidth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float CenterLineWidth {
      get { return centerLineWidth_; }
      set {
        centerLineWidth_ = value;
      }
    }
    /// <summary>Field number for the "CenterLineColor" field.</summary>
    public const int CenterLineColorFieldNumber = 7;
    private uint centerLineColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint CenterLineColor {
      get { return centerLineColor_; }
      set {
        centerLineColor_ = value;
      }
    }
    /// <summary>Field number for the "CenterLineDashStyle" field.</summary>
    public const int CenterLineDashStyleFieldNumber = 8;
    private static readonly pb::FieldCodec<float> _repeated_centerLineDashStyle_codec
        = pb::FieldCodec.ForFloat(66);
    private readonly pbc::RepeatedField<float> centerLineDashStyle_ = new pbc::RepeatedField<float>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<float> CenterLineDashStyle {
      get { return centerLineDashStyle_; }
    }
    /// <summary>Field number for the "CenterLineDashStyleOffset" field.</summary>
    public const int CenterLineDashStyleOffsetFieldNumber = 9;
    private float centerLineDashStyleOffset_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float CenterLineDashStyleOffset {
      get { return centerLineDashStyleOffset_; }
      set {
        centerLineDashStyleOffset_ = value;
      }
    }
    /// <summary>Field number for the "LineWidth" field.</summary>
    public const int LineWidthFieldNumber = 10;
    private float lineWidth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float LineWidth {
      get { return lineWidth_; }
      set {
        lineWidth_ = value;
      }
    }
    /// <summary>Field number for the "LineOutlineWidth" field.</summary>
    public const int LineOutlineWidthFieldNumber = 11;
    private float lineOutlineWidth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float LineOutlineWidth {
      get { return lineOutlineWidth_; }
      set {
        lineOutlineWidth_ = value;
      }
    }
    /// <summary>Field number for the "LineOutlineColor" field.</summary>
    public const int LineOutlineColorFieldNumber = 12;
    private uint lineOutlineColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint LineOutlineColor {
      get { return lineOutlineColor_; }
      set {
        lineOutlineColor_ = value;
      }
    }
    /// <summary>Field number for the "FillForegroundColor" field.</summary>
    public const int FillForegroundColorFieldNumber = 13;
    private uint fillForegroundColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint FillForegroundColor {
      get { return fillForegroundColor_; }
      set {
        fillForegroundColor_ = value;
      }
    }
    /// <summary>Field number for the "FillBackgroundColor" field.</summary>
    public const int FillBackgroundColorFieldNumber = 14;
    private uint fillBackgroundColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint FillBackgroundColor {
      get { return fillBackgroundColor_; }
      set {
        fillBackgroundColor_ = value;
      }
    }
    /// <summary>Field number for the "BufferLineColor" field.</summary>
    public const int BufferLineColorFieldNumber = 15;
    private uint bufferLineColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint BufferLineColor {
      get { return bufferLineColor_; }
      set {
        bufferLineColor_ = value;
      }
    }
    /// <summary>Field number for the "BufferLineDashStyle" field.</summary>
    public const int BufferLineDashStyleFieldNumber = 16;
    private static readonly pb::FieldCodec<float> _repeated_bufferLineDashStyle_codec
        = pb::FieldCodec.ForFloat(130);
    private readonly pbc::RepeatedField<float> bufferLineDashStyle_ = new pbc::RepeatedField<float>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<float> BufferLineDashStyle {
      get { return bufferLineDashStyle_; }
    }
    /// <summary>Field number for the "BufferLineDashStyleOffset" field.</summary>
    public const int BufferLineDashStyleOffsetFieldNumber = 17;
    private float bufferLineDashStyleOffset_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float BufferLineDashStyleOffset {
      get { return bufferLineDashStyleOffset_; }
      set {
        bufferLineDashStyleOffset_ = value;
      }
    }
    /// <summary>Field number for the "BufferLineWidth" field.</summary>
    public const int BufferLineWidthFieldNumber = 18;
    private float bufferLineWidth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float BufferLineWidth {
      get { return bufferLineWidth_; }
      set {
        bufferLineWidth_ = value;
      }
    }
    /// <summary>Field number for the "BufferWidth" field.</summary>
    public const int BufferWidthFieldNumber = 19;
    private float bufferWidth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float BufferWidth {
      get { return bufferWidth_; }
      set {
        bufferWidth_ = value;
      }
    }
    /// <summary>Field number for the "Text" field.</summary>
    public const int TextFieldNumber = 20;
    private string text_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Text {
      get { return text_; }
      set {
        text_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
    /// <summary>Field number for the "FontName" field.</summary>
    public const int FontNameFieldNumber = 21;
    private string fontName_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string FontName {
      get { return fontName_; }
      set {
        fontName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
    /// <summary>Field number for the "FontSize" field.</summary>
    public const int FontSizeFieldNumber = 22;
    private uint fontSize_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint FontSize {
      get { return fontSize_; }
      set {
        fontSize_ = value;
      }
    }
    /// <summary>Field number for the "FontForegroundColor" field.</summary>
    public const int FontForegroundColorFieldNumber = 23;
    private uint fontForegroundColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint FontForegroundColor {
      get { return fontForegroundColor_; }
      set {
        fontForegroundColor_ = value;
      }
    }
    /// <summary>Field number for the "FontBackgroundColor" field.</summary>
    public const int FontBackgroundColorFieldNumber = 24;
    private uint fontBackgroundColor_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint FontBackgroundColor {
      get { return fontBackgroundColor_; }
      set {
        fontBackgroundColor_ = value;
      }
    }
    /// <summary>Field number for the "NumberOfRadials" field.</summary>
    public const int NumberOfRadialsFieldNumber = 25;
    private int numberOfRadials_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int NumberOfRadials {
      get { return numberOfRadials_; }
      set {
        numberOfRadials_ = value;
      }
    }
    /// <summary>Field number for the "SymbolType" field.</summary>
    public const int SymbolTypeFieldNumber = 26;
    private string symbolType_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string SymbolType {
      get { return symbolType_; }
      set {
        symbolType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
    /// <summary>Field number for the "SymbolCode" field.</summary>
    public const int SymbolCodeFieldNumber = 27;
    private string symbolCode_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string SymbolCode {
      get { return symbolCode_; }
      set {
        symbolCode_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
    /// <summary>Field number for the "GenericType" field.</summary>
    public const int GenericTypeFieldNumber = 28;
    private string genericType_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string GenericType {
      get { return genericType_; }
      set {
        genericType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
    /// <summary>Field number for the "UncertaintyAngle" field.</summary>
    public const int UncertaintyAngleFieldNumber = 29;
    private float uncertaintyAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float UncertaintyAngle {
      get { return uncertaintyAngle_; }
      set {
        uncertaintyAngle_ = value;
      }
    }
    /// <summary>Field number for the "Margin" field.</summary>
    public const int MarginFieldNumber = 30;
    private float margin_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Margin {
      get { return margin_; }
      set {
        margin_ = value;
      }
    }


    /// <summary>Field number for the "MinFontSize" field.</summary>
         /// <summary>
    public const int MinFontSizeFieldNumber = 31;
         ///   The compression method used on each entry added to the ZipOutputStream.
    private uint minFontSize_;
         /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public Ionic.Zip.CompressionMethod CompressionMethod
    public uint MinFontSize {
         {
      get { return minFontSize_; }
             get;
      set {
             set;
         minFontSize_ = value;
      }
    }
 
    /// <summary>Field number for the "MinFontMapScale" field.</summary>
    public const int MinFontMapScaleFieldNumber = 32;
    private uint minFontMapScale_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint MinFontMapScale {
      get { return minFontMapScale_; }
      set {
         minFontMapScale_ = value;
      }
    }
 
    /// <summary>Field number for the "MaxFontMapScale" field.</summary>
    public const int MaxFontMapScaleFieldNumber = 33;
    private uint maxFontMapScale_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint MaxFontMapScale {
      get { return maxFontMapScale_; }
      set {
         maxFontMapScale_ = value;
      }
    }
 
    /// <summary>Field number for the "GenericEnums" field.</summary>
    public const int GenericEnumsFieldNumber = 34;
    private uint genericEnums_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint GenericEnums {
      get { return genericEnums_; }
      set {
         genericEnums_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GenericFieldsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GenericFieldsProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (LineColor != other.LineColor) return false;
      if(!lineDashStyle_.Equals(other.lineDashStyle_)) return false;
      if (LineDashStyleOffset != other.LineDashStyleOffset) return false;
      if (CenterLineWidth != other.CenterLineWidth) return false;
      if (CenterLineColor != other.CenterLineColor) return false;
      if(!centerLineDashStyle_.Equals(other.centerLineDashStyle_)) return false;
      if (CenterLineDashStyleOffset != other.CenterLineDashStyleOffset) return false;
      if (LineWidth != other.LineWidth) return false;
      if (LineOutlineWidth != other.LineOutlineWidth) return false;
      if (LineOutlineColor != other.LineOutlineColor) return false;
      if (FillForegroundColor != other.FillForegroundColor) return false;
      if (FillBackgroundColor != other.FillBackgroundColor) return false;
      if (BufferLineColor != other.BufferLineColor) return false;
      if(!bufferLineDashStyle_.Equals(other.bufferLineDashStyle_)) return false;
      if (BufferLineDashStyleOffset != other.BufferLineDashStyleOffset) return false;
      if (BufferLineWidth != other.BufferLineWidth) return false;
      if (BufferWidth != other.BufferWidth) return false;
      if (Text != other.Text) return false;
      if (FontName != other.FontName) return false;
      if (FontSize != other.FontSize) return false;
      if (FontForegroundColor != other.FontForegroundColor) return false;
      if (FontBackgroundColor != other.FontBackgroundColor) return false;
      if (NumberOfRadials != other.NumberOfRadials) return false;
      if (SymbolType != other.SymbolType) return false;
      if (SymbolCode != other.SymbolCode) return false;
      if (GenericType != other.GenericType) return false;
      if (UncertaintyAngle != other.UncertaintyAngle) return false;
      if (Margin != other.Margin) return false;
      if (MinFontSize != other.MinFontSize) return false;
      if (MinFontMapScale != other.MinFontMapScale) return false;
      if (MaxFontMapScale != other.MaxFontMapScale) return false;
      if (GenericEnums != other.GenericEnums) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (LineColor != 0) hash ^= LineColor.GetHashCode();
      hash ^= lineDashStyle_.GetHashCode();
      if (LineDashStyleOffset != 0F) hash ^= LineDashStyleOffset.GetHashCode();
      if (CenterLineWidth != 0F) hash ^= CenterLineWidth.GetHashCode();
      if (CenterLineColor != 0) hash ^= CenterLineColor.GetHashCode();
      hash ^= centerLineDashStyle_.GetHashCode();
      if (CenterLineDashStyleOffset != 0F) hash ^= CenterLineDashStyleOffset.GetHashCode();
      if (LineWidth != 0F) hash ^= LineWidth.GetHashCode();
      if (LineOutlineWidth != 0F) hash ^= LineOutlineWidth.GetHashCode();
      if (LineOutlineColor != 0) hash ^= LineOutlineColor.GetHashCode();
      if (FillForegroundColor != 0) hash ^= FillForegroundColor.GetHashCode();
      if (FillBackgroundColor != 0) hash ^= FillBackgroundColor.GetHashCode();
      if (BufferLineColor != 0) hash ^= BufferLineColor.GetHashCode();
      hash ^= bufferLineDashStyle_.GetHashCode();
      if (BufferLineDashStyleOffset != 0F) hash ^= BufferLineDashStyleOffset.GetHashCode();
      if (BufferLineWidth != 0F) hash ^= BufferLineWidth.GetHashCode();
      if (BufferWidth != 0F) hash ^= BufferWidth.GetHashCode();
      if (Text.Length != 0) hash ^= Text.GetHashCode();
      if (FontName.Length != 0) hash ^= FontName.GetHashCode();
      if (FontSize != 0) hash ^= FontSize.GetHashCode();
      if (FontForegroundColor != 0) hash ^= FontForegroundColor.GetHashCode();
      if (FontBackgroundColor != 0) hash ^= FontBackgroundColor.GetHashCode();
      if (NumberOfRadials != 0) hash ^= NumberOfRadials.GetHashCode();
      if (SymbolType.Length != 0) hash ^= SymbolType.GetHashCode();
      if (SymbolCode.Length != 0) hash ^= SymbolCode.GetHashCode();
      if (GenericType.Length != 0) hash ^= GenericType.GetHashCode();
      if (UncertaintyAngle != 0F) hash ^= UncertaintyAngle.GetHashCode();
      if (Margin != 0F) hash ^= Margin.GetHashCode();
      if (MinFontSize != 0) hash ^= MinFontSize.GetHashCode();
      if (MinFontMapScale != 0) hash ^= MinFontMapScale.GetHashCode();
      if (MaxFontMapScale != 0) hash ^= MaxFontMapScale.GetHashCode();
      if (GenericEnums != 0) hash ^= GenericEnums.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (LineColor != 0) {
        output.WriteRawTag(24);
        output.WriteUInt32(LineColor);
      }
      lineDashStyle_.WriteTo(output, _repeated_lineDashStyle_codec);
      if (LineDashStyleOffset != 0F) {
        output.WriteRawTag(45);
        output.WriteFloat(LineDashStyleOffset);
      }
      if (CenterLineWidth != 0F) {
        output.WriteRawTag(53);
        output.WriteFloat(CenterLineWidth);
      }
      if (CenterLineColor != 0) {
        output.WriteRawTag(56);
        output.WriteUInt32(CenterLineColor);
      }
      centerLineDashStyle_.WriteTo(output, _repeated_centerLineDashStyle_codec);
      if (CenterLineDashStyleOffset != 0F) {
        output.WriteRawTag(77);
        output.WriteFloat(CenterLineDashStyleOffset);
      }
      if (LineWidth != 0F) {
        output.WriteRawTag(85);
        output.WriteFloat(LineWidth);
      }
      if (LineOutlineWidth != 0F) {
        output.WriteRawTag(93);
        output.WriteFloat(LineOutlineWidth);
      }
      if (LineOutlineColor != 0) {
        output.WriteRawTag(96);
        output.WriteUInt32(LineOutlineColor);
      }
      if (FillForegroundColor != 0) {
        output.WriteRawTag(104);
        output.WriteUInt32(FillForegroundColor);
      }
      if (FillBackgroundColor != 0) {
        output.WriteRawTag(112);
        output.WriteUInt32(FillBackgroundColor);
      }
      if (BufferLineColor != 0) {
        output.WriteRawTag(120);
        output.WriteUInt32(BufferLineColor);
      }
      bufferLineDashStyle_.WriteTo(output, _repeated_bufferLineDashStyle_codec);
      if (BufferLineDashStyleOffset != 0F) {
        output.WriteRawTag(141, 1);
        output.WriteFloat(BufferLineDashStyleOffset);
      }
      if (BufferLineWidth != 0F) {
        output.WriteRawTag(149, 1);
        output.WriteFloat(BufferLineWidth);
      }
      if (BufferWidth != 0F) {
        output.WriteRawTag(157, 1);
        output.WriteFloat(BufferWidth);
      }
      if (Text.Length != 0) {
        output.WriteRawTag(162, 1);
        output.WriteString(Text);
      }
      if (FontName.Length != 0) {
        output.WriteRawTag(170, 1);
        output.WriteString(FontName);
      }
      if (FontSize != 0) {
        output.WriteRawTag(176, 1);
        output.WriteUInt32(FontSize);
      }
      if (FontForegroundColor != 0) {
        output.WriteRawTag(184, 1);
        output.WriteUInt32(FontForegroundColor);
      }
      if (FontBackgroundColor != 0) {
        output.WriteRawTag(192, 1);
        output.WriteUInt32(FontBackgroundColor);
      }
      if (NumberOfRadials != 0) {
        output.WriteRawTag(200, 1);
        output.WriteInt32(NumberOfRadials);
      }
      if (SymbolType.Length != 0) {
        output.WriteRawTag(210, 1);
        output.WriteString(SymbolType);
      }
      if (SymbolCode.Length != 0) {
        output.WriteRawTag(218, 1);
        output.WriteString(SymbolCode);
      }
      if (GenericType.Length != 0) {
        output.WriteRawTag(226, 1);
        output.WriteString(GenericType);
      }
      if (UncertaintyAngle != 0F) {
        output.WriteRawTag(237, 1);
        output.WriteFloat(UncertaintyAngle);
      }
      if (Margin != 0F) {
        output.WriteRawTag(245, 1);
        output.WriteFloat(Margin);
      }
      if (MinFontSize != 0) {
        output.WriteRawTag(248, 1);
        output.WriteUInt32(MinFontSize);
      }
      if (MinFontMapScale != 0) {
        output.WriteRawTag(128, 2);
        output.WriteUInt32(MinFontMapScale);
      }
      if (MaxFontMapScale != 0) {
        output.WriteRawTag(136, 2);
        output.WriteUInt32(MaxFontMapScale);
      }
      if (GenericEnums != 0) {
        output.WriteRawTag(149, 2);
        output.WriteFixed32(GenericEnums);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (LineColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(LineColor);
      }
      size += lineDashStyle_.CalculateSize(_repeated_lineDashStyle_codec);
      if (LineDashStyleOffset != 0F) {
        size += 1 + 4;
      }
      if (CenterLineWidth != 0F) {
        size += 1 + 4;
      }
      if (CenterLineColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(CenterLineColor);
      }
      size += centerLineDashStyle_.CalculateSize(_repeated_centerLineDashStyle_codec);
      if (CenterLineDashStyleOffset != 0F) {
        size += 1 + 4;
      }
      if (LineWidth != 0F) {
        size += 1 + 4;
      }
      if (LineOutlineWidth != 0F) {
        size += 1 + 4;
      }
      if (LineOutlineColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(LineOutlineColor);
      }
      if (FillForegroundColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(FillForegroundColor);
      }
      if (FillBackgroundColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(FillBackgroundColor);
      }
      if (BufferLineColor != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(BufferLineColor);
      }
      size += bufferLineDashStyle_.CalculateSize(_repeated_bufferLineDashStyle_codec);
      if (BufferLineDashStyleOffset != 0F) {
        size += 2 + 4;
      }
      if (BufferLineWidth != 0F) {
        size += 2 + 4;
      }
      if (BufferWidth != 0F) {
        size += 2 + 4;
      }
      if (Text.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(Text);
      }
      if (FontName.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(FontName);
      }
      if (FontSize != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(FontSize);
      }
      if (FontForegroundColor != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(FontForegroundColor);
      }
      if (FontBackgroundColor != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(FontBackgroundColor);
      }
      if (NumberOfRadials != 0) {
        size += 2 + pb::CodedOutputStream.ComputeInt32Size(NumberOfRadials);
      }
      if (SymbolType.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(SymbolType);
      }
      if (SymbolCode.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(SymbolCode);
      }
      if (GenericType.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(GenericType);
      }
      if (UncertaintyAngle != 0F) {
        size += 2 + 4;
      }
      if (Margin != 0F) {
        size += 2 + 4;
      }
      if (MinFontSize != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(MinFontSize);
      }
      if (MinFontMapScale != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(MinFontMapScale);
      }
      if (MaxFontMapScale != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(MaxFontMapScale);
      }
      if (GenericEnums != 0) {
        size += 2 + 4;
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GenericFieldsProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.LineColor != 0) {
        LineColor = other.LineColor;
      }
      lineDashStyle_.Add(other.lineDashStyle_);
      if (other.LineDashStyleOffset != 0F) {
        LineDashStyleOffset = other.LineDashStyleOffset;
      }
      if (other.CenterLineWidth != 0F) {
        CenterLineWidth = other.CenterLineWidth;
      }
      if (other.CenterLineColor != 0) {
        CenterLineColor = other.CenterLineColor;
      }
      centerLineDashStyle_.Add(other.centerLineDashStyle_);
      if (other.CenterLineDashStyleOffset != 0F) {
        CenterLineDashStyleOffset = other.CenterLineDashStyleOffset;
      }
      if (other.LineWidth != 0F) {
        LineWidth = other.LineWidth;
      }
      if (other.LineOutlineWidth != 0F) {
        LineOutlineWidth = other.LineOutlineWidth;
      }
      if (other.LineOutlineColor != 0) {
        LineOutlineColor = other.LineOutlineColor;
      }
      if (other.FillForegroundColor != 0) {
        FillForegroundColor = other.FillForegroundColor;
      }
      if (other.FillBackgroundColor != 0) {
        FillBackgroundColor = other.FillBackgroundColor;
      }
      if (other.BufferLineColor != 0) {
        BufferLineColor = other.BufferLineColor;
      }
      bufferLineDashStyle_.Add(other.bufferLineDashStyle_);
      if (other.BufferLineDashStyleOffset != 0F) {
        BufferLineDashStyleOffset = other.BufferLineDashStyleOffset;
      }
      if (other.BufferLineWidth != 0F) {
        BufferLineWidth = other.BufferLineWidth;
      }
      if (other.BufferWidth != 0F) {
        BufferWidth = other.BufferWidth;
      }
      if (other.Text.Length != 0) {
        Text = other.Text;
      }
      if (other.FontName.Length != 0) {
        FontName = other.FontName;
      }
      if (other.FontSize != 0) {
        FontSize = other.FontSize;
      }
      if (other.FontForegroundColor != 0) {
        FontForegroundColor = other.FontForegroundColor;
      }
      if (other.FontBackgroundColor != 0) {
        FontBackgroundColor = other.FontBackgroundColor;
      }
      if (other.NumberOfRadials != 0) {
        NumberOfRadials = other.NumberOfRadials;
      }
      if (other.SymbolType.Length != 0) {
        SymbolType = other.SymbolType;
      }
      if (other.SymbolCode.Length != 0) {
        SymbolCode = other.SymbolCode;
      }
      if (other.GenericType.Length != 0) {
        GenericType = other.GenericType;
      }
      if (other.UncertaintyAngle != 0F) {
        UncertaintyAngle = other.UncertaintyAngle;
      }
      if (other.Margin != 0F) {
        Margin = other.Margin;
      }
      if (other.MinFontSize != 0) {
        MinFontSize = other.MinFontSize;
      }
      if (other.MinFontMapScale != 0) {
        MinFontMapScale = other.MinFontMapScale;
      }
      if (other.MaxFontMapScale != 0) {
        MaxFontMapScale = other.MaxFontMapScale;
      }
      if (other.GenericEnums != 0) {
        GenericEnums = other.GenericEnums;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 24: {
            LineColor = input.ReadUInt32();
            break;
          }
          case 34:
          case 37: {
            lineDashStyle_.AddEntriesFrom(input, _repeated_lineDashStyle_codec);
            break;
          }
          case 45: {
            LineDashStyleOffset = input.ReadFloat();
            break;
          }
          case 53: {
            CenterLineWidth = input.ReadFloat();
            break;
          }
          case 56: {
            CenterLineColor = input.ReadUInt32();
            break;
          }
          case 66:
          case 69: {
            centerLineDashStyle_.AddEntriesFrom(input, _repeated_centerLineDashStyle_codec);
            break;
          }
          case 77: {
            CenterLineDashStyleOffset = input.ReadFloat();
            break;
          }
          case 85: {
            LineWidth = input.ReadFloat();
            break;
          }
          case 93: {
            LineOutlineWidth = input.ReadFloat();
            break;
          }
          case 96: {
            LineOutlineColor = input.ReadUInt32();
            break;
          }
          case 104: {
            FillForegroundColor = input.ReadUInt32();
            break;
          }
          case 112: {
            FillBackgroundColor = input.ReadUInt32();
            break;
          }
          case 120: {
            BufferLineColor = input.ReadUInt32();
            break;
          }
          case 130:
          case 133: {
            bufferLineDashStyle_.AddEntriesFrom(input, _repeated_bufferLineDashStyle_codec);
            break;
          }
          case 141: {
            BufferLineDashStyleOffset = input.ReadFloat();
            break;
          }
          case 149: {
            BufferLineWidth = input.ReadFloat();
            break;
          }
          case 157: {
            BufferWidth = input.ReadFloat();
            break;
          }
          case 162: {
            Text = input.ReadString();
            break;
          }
          case 170: {
            FontName = input.ReadString();
            break;
          }
          case 176: {
            FontSize = input.ReadUInt32();
            break;
          }
          case 184: {
            FontForegroundColor = input.ReadUInt32();
            break;
          }
          case 192: {
            FontBackgroundColor = input.ReadUInt32();
            break;
          }
          case 200: {
            NumberOfRadials = input.ReadInt32();
            break;
          }
          case 210: {
            SymbolType = input.ReadString();
            break;
          }
          case 218: {
            SymbolCode = input.ReadString();
            break;
          }
          case 226: {
            GenericType = input.ReadString();
            break;
          }
          case 237: {
            UncertaintyAngle = input.ReadFloat();
            break;
          }
          case 245: {
            Margin = input.ReadFloat();
            break;
          }
          case 248: {
            MinFontSize = input.ReadUInt32();
            break;
          }
          case 256: {
            MinFontMapScale = input.ReadUInt32();
            break;
          }
          case 264: {
            MaxFontMapScale = input.ReadUInt32();
            break;
          }
          case 277: {
            GenericEnums = input.ReadFixed32();
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class VerticalDistanceDataProto : pb::IMessage<VerticalDistanceDataProto> {
        /// <summary>
    private static readonly pb::MessageParser<VerticalDistanceDataProto> _parser = new pb::MessageParser<VerticalDistanceDataProto>(() => new VerticalDistanceDataProto());
        ///  A comment attached to the zip archive.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<VerticalDistanceDataProto> Parser { get { return _parser; } }
        ///
 
        /// <remarks>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///
    public static pbr::MessageDescriptor Descriptor {
        /// <para>
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[8]; }
        ///   The application sets this property to specify a comment to be embedded
    }
        ///   into the generated zip archive.
 
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        /// <para>
      get { return Descriptor; }
        ///  According to <see
    }
        ///   href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">PKWARE's
 
        ///  zip specification</see>, the comment is not encrypted, even if there is a
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  password set on the zip file.
    public VerticalDistanceDataProto() {
        /// </para>
      OnConstruction();
        ///
    }
        /// <para>
 
        ///   The specification does not describe how to indicate the encoding used
    partial void OnConstruction();
        ///   on a comment string. Many "compliant" zip tools and libraries use
 
         ///   IBM437 as the code page for comments; DotNetZip, too, follows that
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  practice. On the other hand, there are situations where you want a
    public VerticalDistanceDataProto(VerticalDistanceDataProto other) : this() {
         ///  Comment to be encoded with something else, for example using code page
      fieldIndexes_ = other.fieldIndexes_.Clone();
         ///  950 "Big-5 Chinese". To fill that need, DotNetZip will encode the
      invalidIndexes_ = other.invalidIndexes_.Clone();
        ///  comment following the same procedure it follows for encoding
      unitType_ = other.unitType_;
        ///  filenames: (a) if <see cref="AlternateEncodingUsage"/> is
      dimensions_ = other.dimensions_;
        ///  <c>Never</c>, it uses the default encoding (IBM437). (b) if <see
    }
         ///  cref="AlternateEncodingUsage"/> is <c>Always</c>, it always uses the
 
         ///  alternate encoding (<see cref="AlternateEncoding"/>). (c) if <see
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  cref="AlternateEncodingUsage"/> is <c>AsNecessary</c>, it uses the
    public VerticalDistanceDataProto Clone() {
        ///  alternate encoding only if the default encoding is not sufficient for
      return new VerticalDistanceDataProto(this);
         ///  encoding the comment - in other words if decoding the result does not
    }
         ///  produce the original string. This decision is taken at the time of
 
        ///  the call to <c>ZipFile.Save()</c>.
    /// <summary>Field number for the "field_indexes" field.</summary>
         /// </para>
    public const int FieldIndexesFieldNumber = 1;
        ///
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        /// </remarks>
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
         public string Comment
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
         {
    /// <summary>
             get { return _comment; }
    ///Key is field index#, Value is version info
             set
    /// </summary>
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_disposed)
    public pbc::MapField<uint, string> FieldIndexes {
                {
      get { return fieldIndexes_; }
                    _exceptionPending = true;
    }
                    throw new System.InvalidOperationException("The stream has been closed.");
 
                }
    /// <summary>Field number for the "invalid_indexes" field.</summary>
                _comment = value;
    public const int InvalidIndexesFieldNumber = 2;
             }
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "UnitType" field.</summary>
    public const int UnitTypeFieldNumber = 3;
    private string unitType_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UnitType {
      get { return unitType_; }
      set {
         unitType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "Dimensions" field.</summary>
    public const int DimensionsFieldNumber = 4;
    private float dimensions_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Dimensions {
      get { return dimensions_; }
      set {
         dimensions_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VerticalDistanceDataProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VerticalDistanceDataProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
         return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (UnitType != other.UnitType) return false;
      if (Dimensions != other.Dimensions) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (UnitType.Length != 0) hash ^= UnitType.GetHashCode();
      if (Dimensions != 0F) hash ^= Dimensions.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (UnitType.Length != 0) {
         output.WriteRawTag(26);
        output.WriteString(UnitType);
      }
      if (Dimensions != 0F) {
         output.WriteRawTag(37);
        output.WriteFloat(Dimensions);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (UnitType.Length != 0) {
         size += 1 + pb::CodedOutputStream.ComputeStringSize(UnitType);
      }
      if (Dimensions != 0F) {
         size += 1 + 4;
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VerticalDistanceDataProto other) {
      if (other == null) {
         return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.UnitType.Length != 0) {
         UnitType = other.UnitType;
      }
      if (other.Dimensions != 0F) {
         Dimensions = other.Dimensions;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            UnitType = input.ReadString();
            break;
          }
          case 37: {
            Dimensions = input.ReadFloat();
             break;
          }
         }
         }
      }
    }
  }
  public sealed partial class SurfaceVolumeProto : pb::IMessage<SurfaceVolumeProto> {
    private static readonly pb::MessageParser<SurfaceVolumeProto> _parser = new pb::MessageParser<SurfaceVolumeProto>(() => new SurfaceVolumeProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SurfaceVolumeProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[9]; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public SurfaceVolumeProto() {
        ///   Specify whether to use ZIP64 extensions when saving a zip archive.
      OnConstruction();
         /// </summary>
    }
        ///
 
        /// <remarks>
    partial void OnConstruction();
        /// <para>
 
         ///   The default value for the property is <see
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///   cref="Zip64Option.Never"/>. <see cref="Zip64Option.AsNecessary"/> is
    public SurfaceVolumeProto(SurfaceVolumeProto other) : this() {
         ///  safest, in the sense that you will not get an Exception if a
      fieldIndexes_ = other.fieldIndexes_.Clone();
         ///  pre-ZIP64 limit is exceeded.
      invalidIndexes_ = other.invalidIndexes_.Clone();
         /// </para>
      LowerVerticalDistance = other.lowerVerticalDistance_ != null ? other.LowerVerticalDistance.Clone() : null;
         ///
      UpperVerticalDistance = other.upperVerticalDistance_ != null ? other.UpperVerticalDistance.Clone() : null;
         /// <para>
    }
         ///  You must set this property before calling <c>Write()</c>.
 
         /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///
    public SurfaceVolumeProto Clone() {
         /// </remarks>
      return new SurfaceVolumeProto(this);
         public Zip64Option EnableZip64
    }
         {
 
             get
    /// <summary>Field number for the "field_indexes" field.</summary>
             {
    public const int FieldIndexesFieldNumber = 1;
                return _zip64;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "LowerVerticalDistance" field.</summary>
    public const int LowerVerticalDistanceFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto lowerVerticalDistance_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto LowerVerticalDistance {
      get { return lowerVerticalDistance_; }
      set {
         lowerVerticalDistance_ = value;
      }
    }
 
    /// <summary>Field number for the "UpperVerticalDistance" field.</summary>
    public const int UpperVerticalDistanceFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto upperVerticalDistance_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto UpperVerticalDistance {
      get { return upperVerticalDistance_; }
      set {
        upperVerticalDistance_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SurfaceVolumeProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SurfaceVolumeProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(LowerVerticalDistance, other.LowerVerticalDistance)) return false;
      if (!object.Equals(UpperVerticalDistance, other.UpperVerticalDistance)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (lowerVerticalDistance_ != null) hash ^= LowerVerticalDistance.GetHashCode();
      if (upperVerticalDistance_ != null) hash ^= UpperVerticalDistance.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (lowerVerticalDistance_ != null) {
         output.WriteRawTag(26);
         output.WriteMessage(LowerVerticalDistance);
      }
      if (upperVerticalDistance_ != null) {
         output.WriteRawTag(34);
         output.WriteMessage(UpperVerticalDistance);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (lowerVerticalDistance_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(LowerVerticalDistance);
      }
      if (upperVerticalDistance_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UpperVerticalDistance);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SurfaceVolumeProto other) {
      if (other == null) {
         return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.lowerVerticalDistance_ != null) {
         if (lowerVerticalDistance_ == null) {
          lowerVerticalDistance_ = new global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto();
         }
        LowerVerticalDistance.MergeFrom(other.LowerVerticalDistance);
      }
      if (other.upperVerticalDistance_ != null) {
         if (upperVerticalDistance_ == null) {
          upperVerticalDistance_ = new global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto();
        }
        UpperVerticalDistance.MergeFrom(other.UpperVerticalDistance);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
             fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
             break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (lowerVerticalDistance_ == null) {
              lowerVerticalDistance_ = new global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto();
             }
             }
             input.ReadMessage(lowerVerticalDistance_);
             set
             break;
             {
          }
                if (_disposed)
          case 34: {
                {
            if (upperVerticalDistance_ == null) {
                    _exceptionPending = true;
              upperVerticalDistance_ = new global::TPG.DrawObjects.Serialize.Protoc.VerticalDistanceDataProto();
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _zip64 = value;
             }
             }
            input.ReadMessage(upperVerticalDistance_);
            break;
          }
         }
         }
      }
    }


  }


   public sealed partial class OrbitAreaProto : pb::IMessage<OrbitAreaProto> {
        /// <summary>
    private static readonly pb::MessageParser<OrbitAreaProto> _parser = new pb::MessageParser<OrbitAreaProto>(() => new OrbitAreaProto());
        ///   Indicates whether ZIP64 extensions were used when saving the zip archive.
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// </summary>
    public static pb::MessageParser<OrbitAreaProto> Parser { get { return _parser; } }
        ///
        /// <remarks>
        ///  The value is defined only after the <c>ZipOutputStream</c> has been closed.
        /// </remarks>
        public bool OutputUsedZip64
        {
            get
            {
                return _anyEntriesUsedZip64 || _directoryNeededZip64;
            }
        }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[10]; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        ///  Whether the ZipOutputStream should use case-insensitive comparisons when
      get { return Descriptor; }
        ///  checking for uniqueness of zip entries.
    }
        /// </summary>
        ///
        /// <remarks>
        ///  <para>
        ///  Though the zip specification doesn't prohibit zipfiles with duplicate
        ///  entries, Sane zip files have no duplicates, and the DotNetZip library
        ///  cannot create zip files with duplicate entries. If an application attempts
        ///  to call <see cref="PutNextEntry(String)"/> with a name that duplicates one
        ///  already used within the archive, the library will throw an Exception.
        ///  </para>
        ///  <para>
        ///  This property allows the application to specify whether the
        ///  ZipOutputStream instance considers ordinal case when checking for
        ///  uniqueness of zip entries.
        ///  </para>
        /// </remarks>
        public bool IgnoreCase
        {
          get
          {
              return !_DontIgnoreCase;
          }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          set
    public OrbitAreaProto() {
          {
      OnConstruction();
              _DontIgnoreCase = !value;
    }
          }


    partial void OnConstruction();
        }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrbitAreaProto(OrbitAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      FirstPoint = other.firstPoint_ != null ? other.FirstPoint.Clone() : null;
      SecondPoint = other.secondPoint_ != null ? other.SecondPoint.Clone() : null;
      width_ = other.width_;
      orbitAreaAligmentCode_ = other.orbitAreaAligmentCode_;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public OrbitAreaProto Clone() {
        ///  Indicates whether to encode entry filenames and entry comments using
      return new OrbitAreaProto(this);
        ///  Unicode (UTF-8).
    }
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///  <see href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">The
        ///  PKWare zip specification</see> provides for encoding file names and file
        ///  comments in either the IBM437 code page, or in UTF-8.  This flag selects
        ///  the encoding according to that specification.  By default, this flag is
        ///  false, and filenames and comments are encoded into the zip file in the
        ///  IBM437 codepage.  Setting this flag to true will specify that filenames
        ///  and comments that cannot be encoded with IBM437 will be encoded with
        ///  UTF-8.
        /// </para>
        ///
        /// <para>
        ///  Zip files created with strict adherence to the PKWare specification with
        ///  respect to UTF-8 encoding can contain entries with filenames containing
        ///  any combination of Unicode characters, including the full range of
        ///  characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other
        ///  alphabets.  However, because at this time, the UTF-8 portion of the PKWare
        ///  specification is not broadly supported by other zip libraries and
        ///  utilities, such zip files may not be readable by your favorite zip tool or
        ///  archiver. In other words, interoperability will decrease if you set this
        ///  flag to true.
        /// </para>
        ///
        /// <para>
        ///  In particular, Zip files created with strict adherence to the PKWare
        ///  specification with respect to UTF-8 encoding will not work well with
        ///  Explorer in Windows XP or Windows Vista, because Windows compressed
        ///  folders, as far as I know, do not support UTF-8 in zip files.  Vista can
        ///  read the zip files, but shows the filenames incorrectly. Unpacking from
        ///  Windows Vista Explorer will result in filenames that have rubbish
        ///  characters in place of the high-order UTF-8 bytes.
        /// </para>
        ///
        /// <para>
        ///  Also, zip files that use UTF-8 encoding will not work well with Java
        ///  applications that use the java.util.zip classes, as of v5.0 of the Java
        ///  runtime. The Java runtime does not correctly implement the PKWare
        ///  specification in this regard.
        /// </para>
        ///
        /// <para>
        ///  As a result, we have the unfortunate situation that "correct" behavior by
        ///  the DotNetZip library with regard to Unicode encoding of filenames during
        ///  zip creation will result in zip files that are readable by strictly
        ///  compliant and current tools (for example the most recent release of the
        ///  commercial WinZip tool); but these zip files will not be readable by
        ///  various other tools or libraries, including Windows Explorer.
        /// </para>
        ///
        /// <para>
        ///  The DotNetZip library can read and write zip files with UTF8-encoded
        ///  entries, according to the PKware spec.  If you use DotNetZip for both
        ///  creating and reading the zip file, and you use UTF-8, there will be no
        ///  loss of information in the filenames. For example, using a self-extractor
        ///  created by this library will allow you to unpack files correctly with no
        ///  loss of information in the filenames.
        /// </para>
        ///
        /// <para>
        ///  If you do not set this flag, it will remain false.  If this flag is false,
        ///  the <c>ZipOutputStream</c> will encode all filenames and comments using
        ///  the IBM437 codepage.  This can cause "loss of information" on some
        ///  filenames, but the resulting zipfile will be more interoperable with other
        ///  utilities. As an example of the loss of information, diacritics can be
        ///  lost.  The o-tilde character will be down-coded to plain o.  The c with a
        ///  cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c.
        ///  Likewise, the O-stroke character (Unicode 248), used in Danish and
        ///  Norwegian, will be down-coded to plain o. Chinese characters cannot be
        ///  represented in codepage IBM437; when using the default encoding, Chinese
        ///  characters in filenames will be represented as ?. These are all examples
        ///  of "information loss".
        /// </para>
        ///
        /// <para>
        ///  The loss of information associated to the use of the IBM437 encoding is
        ///  inconvenient, and can also lead to runtime errors. For example, using
        ///  IBM437, any sequence of 4 Chinese characters will be encoded as ????.  If
        ///  your application creates a <c>ZipOutputStream</c>, does not set the
        ///  encoding, then adds two files, each with names of four Chinese characters
        ///  each, this will result in a duplicate filename exception.  In the case
        ///  where you add a single file with a name containing four Chinese
        ///  characters, the zipfile will save properly, but extracting that file
        ///  later, with any zip tool, will result in an error, because the question
        ///  mark is not legal for use within filenames on Windows.  These are just a
        ///  few examples of the problems associated to loss of information.
        /// </para>
        ///
        /// <para>
        ///  This flag is independent of the encoding of the content within the entries
        ///  in the zip file. Think of the zip file as a container - it supports an
        ///  encoding.  Within the container are other "containers" - the file entries
        ///  themselves.  The encoding within those entries is independent of the
        ///  encoding of the zip archive container for those entries.
        /// </para>
        ///
        /// <para>
        ///  Rather than specify the encoding in a binary fashion using this flag, an
        ///  application can specify an arbitrary encoding via the <see
        ///  cref="ProvisionalAlternateEncoding"/> property.  Setting the encoding
        ///  explicitly when creating zip archives will result in non-compliant zip
        ///  files that, curiously, are fairly interoperable.  The challenge is, the
        ///  PKWare specification does not provide for a way to specify that an entry
        ///  in a zip archive uses a code page that is neither IBM437 nor UTF-8.
        ///  Therefore if you set the encoding explicitly when creating a zip archive,
        ///  you must take care upon reading the zip archive to use the same code page.
        ///  If you get it wrong, the behavior is undefined and may result in incorrect
        ///  filenames, exceptions, stomach upset, hair loss, and acne.
        /// </para>
        /// </remarks>
        /// <seealso cref="ProvisionalAlternateEncoding"/>
        [Obsolete("Beginning with v1.9.1.6 of DotNetZip, this property is obsolete. It will be removed in a future version of the library. Use AlternateEncoding and AlternateEncodingUsage instead.")]
        public bool UseUnicodeAsNecessary
        {
            get
            {
                return (_alternateEncoding == System.Text.Encoding.UTF8) &&
                    (AlternateEncodingUsage == ZipOption.AsNecessary);
            }
            set
            {
                if (value)
                {
                    _alternateEncoding = System.Text.Encoding.UTF8;
                    _alternateEncodingUsage = ZipOption.AsNecessary;


    /// <summary>Field number for the "field_indexes" field.</summary>
                }
    public const int FieldIndexesFieldNumber = 1;
                else
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
                {
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
                    _alternateEncoding = Ionic.Zip.ZipOutputStream.DefaultEncoding;
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
                    _alternateEncodingUsage = ZipOption.Never;
    /// <summary>
                }
    ///Key is field index#, Value is version info
            }
    /// </summary>
         }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }


    /// <summary>Field number for the "FirstPoint" field.</summary>
    public const int FirstPointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto firstPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto FirstPoint {
      get { return firstPoint_; }
      set {
        firstPoint_ = value;
      }
    }


    /// <summary>Field number for the "SecondPoint" field.</summary>
        /// <summary>
    public const int SecondPointFieldNumber = 4;
        ///  The text encoding to use when emitting entries into the zip archive, for
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto secondPoint_;
        ///  those entries whose filenames or comments cannot be encoded with the
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  default (IBM437) encoding.
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto SecondPoint {
        /// </summary>
      get { return secondPoint_; }
        ///
      set {
        /// <remarks>
         secondPoint_ = value;
        /// <para>
      }
        ///  In <see href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">its
    }
        ///  zip specification</see>, PKWare describes two options for encoding
 
        ///  filenames and comments: using IBM437 or UTF-8. But, some archiving tools
    /// <summary>Field number for the "Width" field.</summary>
        ///  or libraries do not follow the specification, and instead encode
    public const int WidthFieldNumber = 5;
        ///  characters using the system default code page. For example, WinRAR when
    private float width_;
        ///  run on a machine in Shanghai may encode filenames with the Big-5 Chinese
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  (950) code page. This behavior is contrary to the Zip specification, but
    public float Width {
        ///  it occurs anyway.
      get { return width_; }
        /// </para>
      set {
        ///
         width_ = value;
         /// <para>
      }
        ///  When using DotNetZip to write zip archives that will be read by one of
    }
        ///  these other archivers, set this property to specify the code page to use
 
        ///   when encoding the <see cref="ZipEntry.FileName"/> and <see
    /// <summary>Field number for the "OrbitAreaAligmentCode" field.</summary>
        ///  cref="ZipEntry.Comment"/> for each <c>ZipEntry</c> in the zip file, for
    public const int OrbitAreaAligmentCodeFieldNumber = 6;
        ///  values that cannot be encoded with the default codepage for zip files,
    private uint orbitAreaAligmentCode_;
        ///  IBM437. This is why this property is "provisional". In all cases, IBM437
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  is used where possible, in other words, where no loss of data would
    public uint OrbitAreaAligmentCode {
        ///  result. It is possible, therefore, to have a given entry with a
      get { return orbitAreaAligmentCode_; }
         ///   <c>Comment</c> encoded in IBM437 and a <c>FileName</c> encoded with the
      set {
        ///  specified "provisional" codepage.
         orbitAreaAligmentCode_ = value;
        /// </para>
      }
        ///
    }
        /// <para>
 
        ///  Be aware that a zip file created after you've explicitly set the
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  <c>ProvisionalAlternateEncoding</c> property to a value other than
    public override bool Equals(object other) {
        ///  IBM437 may not be compliant to the PKWare specification, and may not be
      return Equals(other as OrbitAreaProto);
        ///  readable by compliant archivers. On the other hand, many (most?)
    }
        ///  archivers are non-compliant and can read zip files created in arbitrary
 
        ///  code pages.  The trick is to use or specify the proper codepage when
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  reading the zip.
    public bool Equals(OrbitAreaProto other) {
        /// </para>
      if (ReferenceEquals(other, null)) {
        ///
         return false;
         /// <para>
      }
        ///  When creating a zip archive using this library, it is possible to change
      if (ReferenceEquals(other, this)) {
         ///  the value of <c>ProvisionalAlternateEncoding</c> between each entry you
         return true;
        ///  add, and between adding entries and the call to <c>Close()</c>. Don't do
      }
        ///  this. It will likely result in a zipfile that is not readable. For best
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
        ///  interoperability, either leave <c>ProvisionalAlternateEncoding</c>
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
        ///  alone, or specify it only once, before adding any entries to the
      if (!object.Equals(FirstPoint, other.FirstPoint)) return false;
        ///  <c>ZipOutputStream</c> instance. There is one exception to this
      if (!object.Equals(SecondPoint, other.SecondPoint)) return false;
        ///  recommendation, described later.
      if (Width != other.Width) return false;
        /// </para>
      if (OrbitAreaAligmentCode != other.OrbitAreaAligmentCode) return false;
        ///
      return true;
        /// <para>
    }
        ///  When using an arbitrary, non-UTF8 code page for encoding, there is no
 
        ///  standard way for the creator application - whether DotNetZip, WinZip,
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  WinRar, or something else - to formally specify in the zip file which
    public override int GetHashCode() {
        ///  codepage has been used for the entries. As a result, readers of zip files
      int hash = 1;
        ///  are not able to inspect the zip file and determine the codepage that was
      hash ^= FieldIndexes.GetHashCode();
        ///  used for the entries contained within it. It is left to the application
      hash ^= invalidIndexes_.GetHashCode();
        ///  or user to determine the necessary codepage when reading zip files encoded
      if (firstPoint_ != null) hash ^= FirstPoint.GetHashCode();
        ///  this way. If you use an incorrect codepage when reading a zipfile, you
      if (secondPoint_ != null) hash ^= SecondPoint.GetHashCode();
        ///  will get entries with filenames that are incorrect, and the incorrect
      if (Width != 0F) hash ^= Width.GetHashCode();
        ///  filenames may even contain characters that are not legal for use within
      if (OrbitAreaAligmentCode != 0) hash ^= OrbitAreaAligmentCode.GetHashCode();
        ///  filenames in Windows. Extracting entries with illegal characters in the
      return hash;
        ///  filenames will lead to exceptions. It's too bad, but this is just the way
    }
        ///  things are with code pages in zip files. Caveat Emptor.
 
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public override string ToString() {
        /// <para>
      return pb::JsonFormatter.ToDiagnosticString(this);
        ///  One possible approach for specifying the code page for a given zip file is
    }
         ///  to describe the code page in a human-readable form in the Zip comment. For
 
         ///  example, the comment may read "Entries in this archive are encoded in the
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///  Big5 code page". For maximum interoperability, the zip comment in this
    public void WriteTo(pb::CodedOutputStream output) {
         ///  case should be encoded in the default, IBM437 code page. In this case,
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
         ///  the zip comment is encoded using a different page than the filenames. To
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
         ///  do this, Specify <c>ProvisionalAlternateEncoding</c> to your desired
      if (firstPoint_ != null) {
        ///  region-specific code page, once before adding any entries, and then set
         output.WriteRawTag(26);
        ///  the <see cref="Comment"/> property and reset
         output.WriteMessage(FirstPoint);
         ///  <c>ProvisionalAlternateEncoding</c> to IBM437 before calling <c>Close()</c>.
      }
         /// </para>
      if (secondPoint_ != null) {
        /// </remarks>
         output.WriteRawTag(34);
        [Obsolete("use AlternateEncoding and AlternateEncodingUsage instead.")]
         output.WriteMessage(SecondPoint);
        public System.Text.Encoding ProvisionalAlternateEncoding
      }
         {
      if (Width != 0F) {
            get
         output.WriteRawTag(45);
            {
         output.WriteFloat(Width);
                if (_alternateEncodingUsage == ZipOption.AsNecessary)
      }
                    return _alternateEncoding;
      if (OrbitAreaAligmentCode != 0) {
                return null;
         output.WriteRawTag(48);
            }
         output.WriteUInt32(OrbitAreaAligmentCode);
            set
      }
            {
    }
                _alternateEncoding = value;
 
                _alternateEncodingUsage = ZipOption.AsNecessary;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            }
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (firstPoint_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(FirstPoint);
      }
      if (secondPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecondPoint);
      }
      if (Width != 0F) {
        size += 1 + 4;
      }
      if (OrbitAreaAligmentCode != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(OrbitAreaAligmentCode);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(OrbitAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.firstPoint_ != null) {
        if (firstPoint_ == null) {
          firstPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
         }
         }
        FirstPoint.MergeFrom(other.FirstPoint);
      }
      if (other.secondPoint_ != null) {
        if (secondPoint_ == null) {
          secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        SecondPoint.MergeFrom(other.SecondPoint);
      }
      if (other.Width != 0F) {
        Width = other.Width;
      }
      if (other.OrbitAreaAligmentCode != 0) {
        OrbitAreaAligmentCode = other.OrbitAreaAligmentCode;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public void MergeFrom(pb::CodedInputStream input) {
        ///  A Text Encoding to use when encoding the filenames and comments for
      uint tag;
        ///  all the ZipEntry items, during a ZipFile.Save() operation.
      while ((tag = input.ReadTag()) != 0) {
         /// </summary>
         switch(tag) {
        /// <remarks>
          default:
        ///  <para>
            input.SkipLastField();
        ///    Whether the encoding specified here is used during the save depends
            break;
        ///    on <see cref="AlternateEncodingUsage"/>.
          case 10: {
        ///  </para>
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
        /// </remarks>
            break;
        public System.Text.Encoding AlternateEncoding
          }
        {
          case 18:
             get
          case 16: {
             {
             invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
                return _alternateEncoding;
            break;
          }
          case 26: {
             if (firstPoint_ == null) {
              firstPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
             }
             }
             input.ReadMessage(firstPoint_);
             set
             break;
             {
          }
                _alternateEncoding = value;
          case 34: {
            if (secondPoint_ == null) {
              secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
             }
             }
            input.ReadMessage(secondPoint_);
            break;
          }
          case 45: {
            Width = input.ReadFloat();
            break;
          }
          case 48: {
            OrbitAreaAligmentCode = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class OrbitAreaShiftedIntProto : pb::IMessage<OrbitAreaShiftedIntProto> {
    private static readonly pb::MessageParser<OrbitAreaShiftedIntProto> _parser = new pb::MessageParser<OrbitAreaShiftedIntProto>(() => new OrbitAreaShiftedIntProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<OrbitAreaShiftedIntProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[11]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrbitAreaShiftedIntProto() {
      OnConstruction();
    }
    partial void OnConstruction();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrbitAreaShiftedIntProto(OrbitAreaShiftedIntProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      FirstPoint = other.firstPoint_ != null ? other.FirstPoint.Clone() : null;
      SecondPoint = other.secondPoint_ != null ? other.SecondPoint.Clone() : null;
      width_ = other.width_;
      orbitAreaAligmentCode_ = other.orbitAreaAligmentCode_;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrbitAreaShiftedIntProto Clone() {
      return new OrbitAreaShiftedIntProto(this);
    }
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }


    /// <summary>Field number for the "invalid_indexes" field.</summary>
        /// <summary>
    public const int InvalidIndexesFieldNumber = 2;
         ///   A flag that tells if and when this instance should apply
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         ///   AlternateEncoding to encode the filenames and comments associated to
         = pb::FieldCodec.ForUInt32(18);
         ///   of ZipEntry objects contained within this instance.
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
         /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public ZipOption AlternateEncodingUsage
    public pbc::RepeatedField<uint> InvalidIndexes {
         {
      get { return invalidIndexes_; }
             get
    }
             {
 
                return _alternateEncodingUsage;
    /// <summary>Field number for the "FirstPoint" field.</summary>
    public const int FirstPointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto firstPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto FirstPoint {
      get { return firstPoint_; }
      set {
         firstPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "SecondPoint" field.</summary>
    public const int SecondPointFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto secondPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto SecondPoint {
      get { return secondPoint_; }
      set {
         secondPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "Width" field.</summary>
    public const int WidthFieldNumber = 5;
    private float width_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float Width {
      get { return width_; }
      set {
         width_ = value;
      }
    }
 
    /// <summary>Field number for the "OrbitAreaAligmentCode" field.</summary>
    public const int OrbitAreaAligmentCodeFieldNumber = 6;
    private uint orbitAreaAligmentCode_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint OrbitAreaAligmentCode {
      get { return orbitAreaAligmentCode_; }
      set {
         orbitAreaAligmentCode_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as OrbitAreaShiftedIntProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(OrbitAreaShiftedIntProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(FirstPoint, other.FirstPoint)) return false;
      if (!object.Equals(SecondPoint, other.SecondPoint)) return false;
      if (Width != other.Width) return false;
      if (OrbitAreaAligmentCode != other.OrbitAreaAligmentCode) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (firstPoint_ != null) hash ^= FirstPoint.GetHashCode();
      if (secondPoint_ != null) hash ^= SecondPoint.GetHashCode();
      if (Width != 0F) hash ^= Width.GetHashCode();
      if (OrbitAreaAligmentCode != 0) hash ^= OrbitAreaAligmentCode.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (firstPoint_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(FirstPoint);
      }
      if (secondPoint_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(SecondPoint);
      }
      if (Width != 0F) {
        output.WriteRawTag(45);
        output.WriteFloat(Width);
      }
      if (OrbitAreaAligmentCode != 0) {
        output.WriteRawTag(48);
        output.WriteUInt32(OrbitAreaAligmentCode);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (firstPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FirstPoint);
      }
      if (secondPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecondPoint);
      }
      if (Width != 0F) {
        size += 1 + 4;
      }
      if (OrbitAreaAligmentCode != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(OrbitAreaAligmentCode);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(OrbitAreaShiftedIntProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.firstPoint_ != null) {
        if (firstPoint_ == null) {
          firstPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
        }
        FirstPoint.MergeFrom(other.FirstPoint);
      }
      if (other.secondPoint_ != null) {
        if (secondPoint_ == null) {
          secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
        }
        SecondPoint.MergeFrom(other.SecondPoint);
      }
      if (other.Width != 0F) {
        Width = other.Width;
      }
      if (other.OrbitAreaAligmentCode != 0) {
        OrbitAreaAligmentCode = other.OrbitAreaAligmentCode;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (firstPoint_ == null) {
              firstPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
             }
             }
             input.ReadMessage(firstPoint_);
             set
             break;
             {
          }
                _alternateEncodingUsage = value;
          case 34: {
            if (secondPoint_ == null) {
              secondPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
             }
             }
            input.ReadMessage(secondPoint_);
            break;
          }
          case 45: {
            Width = input.ReadFloat();
            break;
          }
          case 48: {
            OrbitAreaAligmentCode = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }
  }


  public sealed partial class FanAreaProto : pb::IMessage<FanAreaProto> {
        /// <summary>
    private static readonly pb::MessageParser<FanAreaProto> _parser = new pb::MessageParser<FanAreaProto>(() => new FanAreaProto());
         /// The default text encoding used in zip archives.  It is numeric 437, also
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// known as IBM437.
    public static pb::MessageParser<FanAreaProto> Parser { get { return _parser; } }
         /// </summary>
 
         /// <seealso cref="Ionic.Zip.ZipFile.ProvisionalAlternateEncoding"/>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         public static System.Text.Encoding DefaultEncoding
    public static pbr::MessageDescriptor Descriptor {
         {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[12]; }
            get
    }
            {
 
                return System.Text.Encoding.GetEncoding("IBM437");
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public FanAreaProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public FanAreaProto(FanAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      minimumRange_ = other.minimumRange_;
      maximumRange_ = other.maximumRange_;
      orientationAngle_ = other.orientationAngle_;
      sectorSizeAngle_ = other.sectorSizeAngle_;
      VertexPoint = other.vertexPoint_ != null ? other.VertexPoint.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public FanAreaProto Clone() {
      return new FanAreaProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "MinimumRange" field.</summary>
    public const int MinimumRangeFieldNumber = 3;
    private float minimumRange_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MinimumRange {
      get { return minimumRange_; }
      set {
         minimumRange_ = value;
      }
    }
 
    /// <summary>Field number for the "MaximumRange" field.</summary>
    public const int MaximumRangeFieldNumber = 4;
    private float maximumRange_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MaximumRange {
      get { return maximumRange_; }
      set {
         maximumRange_ = value;
      }
    }
 
    /// <summary>Field number for the "OrientationAngle" field.</summary>
    public const int OrientationAngleFieldNumber = 5;
    private float orientationAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float OrientationAngle {
      get { return orientationAngle_; }
      set {
        orientationAngle_ = value;
      }
    }
 
    /// <summary>Field number for the "SectorSizeAngle" field.</summary>
    public const int SectorSizeAngleFieldNumber = 6;
    private float sectorSizeAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float SectorSizeAngle {
      get { return sectorSizeAngle_; }
      set {
        sectorSizeAngle_ = value;
      }
    }
 
    /// <summary>Field number for the "VertexPoint" field.</summary>
    public const int VertexPointFieldNumber = 7;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto vertexPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto VertexPoint {
      get { return vertexPoint_; }
      set {
         vertexPoint_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as FanAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(FanAreaProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (MinimumRange != other.MinimumRange) return false;
      if (MaximumRange != other.MaximumRange) return false;
      if (OrientationAngle != other.OrientationAngle) return false;
      if (SectorSizeAngle != other.SectorSizeAngle) return false;
      if (!object.Equals(VertexPoint, other.VertexPoint)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (MinimumRange != 0F) hash ^= MinimumRange.GetHashCode();
      if (MaximumRange != 0F) hash ^= MaximumRange.GetHashCode();
      if (OrientationAngle != 0F) hash ^= OrientationAngle.GetHashCode();
      if (SectorSizeAngle != 0F) hash ^= SectorSizeAngle.GetHashCode();
      if (vertexPoint_ != null) hash ^= VertexPoint.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (MinimumRange != 0F) {
        output.WriteRawTag(29);
        output.WriteFloat(MinimumRange);
      }
      if (MaximumRange != 0F) {
        output.WriteRawTag(37);
        output.WriteFloat(MaximumRange);
      }
      if (OrientationAngle != 0F) {
        output.WriteRawTag(45);
        output.WriteFloat(OrientationAngle);
      }
      if (SectorSizeAngle != 0F) {
        output.WriteRawTag(53);
        output.WriteFloat(SectorSizeAngle);
      }
      if (vertexPoint_ != null) {
        output.WriteRawTag(58);
        output.WriteMessage(VertexPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (MinimumRange != 0F) {
        size += 1 + 4;
      }
      if (MaximumRange != 0F) {
        size += 1 + 4;
      }
      if (OrientationAngle != 0F) {
        size += 1 + 4;
      }
      if (SectorSizeAngle != 0F) {
        size += 1 + 4;
      }
      if (vertexPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(VertexPoint);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(FanAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.MinimumRange != 0F) {
        MinimumRange = other.MinimumRange;
      }
      if (other.MaximumRange != 0F) {
        MaximumRange = other.MaximumRange;
      }
      if (other.OrientationAngle != 0F) {
        OrientationAngle = other.OrientationAngle;
      }
      if (other.SectorSizeAngle != 0F) {
        SectorSizeAngle = other.SectorSizeAngle;
      }
      if (other.vertexPoint_ != null) {
        if (vertexPoint_ == null) {
          vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        VertexPoint.MergeFrom(other.VertexPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 29: {
            MinimumRange = input.ReadFloat();
            break;
          }
          case 37: {
            MaximumRange = input.ReadFloat();
            break;
          }
          case 45: {
            OrientationAngle = input.ReadFloat();
            break;
          }
          case 53: {
            SectorSizeAngle = input.ReadFloat();
            break;
          }
          case 58: {
            if (vertexPoint_ == null) {
              vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
             }
             }
            input.ReadMessage(vertexPoint_);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class FanAreaAsShiftedIntProto : pb::IMessage<FanAreaAsShiftedIntProto> {
#if !NETCF
    private static readonly pb::MessageParser<FanAreaAsShiftedIntProto> _parser = new pb::MessageParser<FanAreaAsShiftedIntProto>(() => new FanAreaAsShiftedIntProto());
        /// <summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  The size threshold for an entry, above which a parallel deflate is used.
    public static pb::MessageParser<FanAreaAsShiftedIntProto> Parser { get { return _parser; } }
        /// </summary>
 
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <remarks>
    public static pbr::MessageDescriptor Descriptor {
         ///
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[13]; }
        ///  <para>
    }
        ///     DotNetZip will use multiple threads to compress any ZipEntry, when
 
        ///     the <c>CompressionMethod</c> is Deflate, and if the entry is
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///    larger than the given size. Zero means "always use parallel
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        ///     deflate", while -1 means "never use parallel deflate".
      get { return Descriptor; }
        ///   </para>
    }
        ///
 
        ///  <para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///    If the entry size cannot be known before compression, as with any entry
    public FanAreaAsShiftedIntProto() {
        ///     added via a ZipOutputStream, then Parallel deflate will never be
      OnConstruction();
        ///     performed, unless the value of this property is zero.
    }
        ///  </para>
 
        ///
    partial void OnConstruction();
        ///   <para>
 
        ///    A parallel deflate operations will speed up the compression of
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///     large files, on computers with multiple CPUs or multiple CPU
    public FanAreaAsShiftedIntProto(FanAreaAsShiftedIntProto other) : this() {
        ///     cores. For files above 1mb, on a dual core or dual-cpu (2p)
      fieldIndexes_ = other.fieldIndexes_.Clone();
        ///     machine, the time required to compress the file can be 70% of the
      invalidIndexes_ = other.invalidIndexes_.Clone();
         ///    single-threaded deflate. For very large files on 4p machines the
      minimumRange_ = other.minimumRange_;
         ///     compression can be done in 30% of the normal time. The downside
      maximumRange_ = other.maximumRange_;
        ///    is that parallel deflate consumes extra memory during the deflate,
      orientationAngle_ = other.orientationAngle_;
        ///     and the deflation is slightly less effective.
      sectorSizeAngle_ = other.sectorSizeAngle_;
         ///   </para>
      VertexPoint = other.vertexPoint_ != null ? other.VertexPoint.Clone() : null;
        ///
    }
         ///   <para>
 
         ///     Parallel deflate tends to not be as effective as single-threaded deflate
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///     because the original data stream is split into multiple independent
    public FanAreaAsShiftedIntProto Clone() {
        ///     buffers, each of which is compressed in parallel. But because they are
      return new FanAreaAsShiftedIntProto(this);
        ///     treated independently, there is no opportunity to share compression
    }
         ///    dictionaries, and additional framing bytes must be added to the output
 
         ///    stream. For that reason, a deflated stream may be slightly larger when
    /// <summary>Field number for the "field_indexes" field.</summary>
        ///     compressed using parallel deflate, as compared to a traditional
    public const int FieldIndexesFieldNumber = 1;
        ///     single-threaded deflate. For files of about 512k, the increase over the
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        ///     normal deflate is as much as 5% of the total compressed size. For larger
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
        ///     files, the difference can be as small as 0.1%.
     private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
         ///  </para>
    /// <summary>
         ///
    ///Key is field index#, Value is version info
         ///  <para>
    /// </summary>
         ///    Multi-threaded compression does not give as much an advantage when using
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         ///    Encryption. This is primarily because encryption tends to slow down
     public pbc::MapField<uint, string> FieldIndexes {
         ///    the entire pipeline. Also, multi-threaded compression gives less of an
      get { return fieldIndexes_; }
         ///    advantage when using lower compression levels, for example <see
    }
         ///    cref="Ionic.Zlib.CompressionLevel.BestSpeed"/>. You may have to perform
 
        ///     some tests to determine the best approach for your situation.
    /// <summary>Field number for the "invalid_indexes" field.</summary>
         ///  </para>
    public const int InvalidIndexesFieldNumber = 2;
         ///
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         ///  <para>
         = pb::FieldCodec.ForUInt32(18);
         ///    The default value for this property is -1, which means parallel
     private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
         ///     compression will not be performed unless you set it to zero.
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  </para>
    public pbc::RepeatedField<uint> InvalidIndexes {
        ///
      get { return invalidIndexes_; }
         /// </remarks>
    }
        public long ParallelDeflateThreshold
 
         {
    /// <summary>Field number for the "MinimumRange" field.</summary>
            set
     public const int MinimumRangeFieldNumber = 3;
            {
     private float minimumRange_;
                if ((value != 0) && (value != -1) && (value < 64 * 1024))
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    throw new ArgumentOutOfRangeException("value must be greater than 64k, or 0, or -1");
     public float MinimumRange {
                _ParallelDeflateThreshold = value;
      get { return minimumRange_; }
             }
      set {
             get
         minimumRange_ = value;
             {
      }
                return _ParallelDeflateThreshold;
    }
 
    /// <summary>Field number for the "MaximumRange" field.</summary>
    public const int MaximumRangeFieldNumber = 4;
     private float maximumRange_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MaximumRange {
      get { return maximumRange_; }
      set {
         maximumRange_ = value;
      }
    }
 
    /// <summary>Field number for the "OrientationAngle" field.</summary>
     public const int OrientationAngleFieldNumber = 5;
     private float orientationAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float OrientationAngle {
      get { return orientationAngle_; }
      set {
         orientationAngle_ = value;
      }
    }
 
    /// <summary>Field number for the "SectorSizeAngle" field.</summary>
    public const int SectorSizeAngleFieldNumber = 6;
    private float sectorSizeAngle_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float SectorSizeAngle {
      get { return sectorSizeAngle_; }
      set {
         sectorSizeAngle_ = value;
      }
    }
 
    /// <summary>Field number for the "VertexPoint" field.</summary>
    public const int VertexPointFieldNumber = 7;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto vertexPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto VertexPoint {
      get { return vertexPoint_; }
      set {
         vertexPoint_ = value;
      }
     }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as FanAreaAsShiftedIntProto);
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public bool Equals(FanAreaAsShiftedIntProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
         return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (MinimumRange != other.MinimumRange) return false;
      if (MaximumRange != other.MaximumRange) return false;
      if (OrientationAngle != other.OrientationAngle) return false;
      if (SectorSizeAngle != other.SectorSizeAngle) return false;
      if (!object.Equals(VertexPoint, other.VertexPoint)) return false;
      return true;
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (MinimumRange != 0F) hash ^= MinimumRange.GetHashCode();
      if (MaximumRange != 0F) hash ^= MaximumRange.GetHashCode();
      if (OrientationAngle != 0F) hash ^= OrientationAngle.GetHashCode();
      if (SectorSizeAngle != 0F) hash ^= SectorSizeAngle.GetHashCode();
      if (vertexPoint_ != null) hash ^= VertexPoint.GetHashCode();
      return hash;
     }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (MinimumRange != 0F) {
         output.WriteRawTag(29);
         output.WriteFloat(MinimumRange);
      }
      if (MaximumRange != 0F) {
         output.WriteRawTag(37);
         output.WriteFloat(MaximumRange);
      }
      if (OrientationAngle != 0F) {
         output.WriteRawTag(45);
         output.WriteFloat(OrientationAngle);
      }
      if (SectorSizeAngle != 0F) {
         output.WriteRawTag(53);
         output.WriteFloat(SectorSizeAngle);
      }
      if (vertexPoint_ != null) {
        output.WriteRawTag(58);
        output.WriteMessage(VertexPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (MinimumRange != 0F) {
         size += 1 + 4;
      }
      if (MaximumRange != 0F) {
         size += 1 + 4;
      }
      if (OrientationAngle != 0F) {
         size += 1 + 4;
      }
      if (SectorSizeAngle != 0F) {
         size += 1 + 4;
      }
      if (vertexPoint_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(VertexPoint);
      }
      return size;
     }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(FanAreaAsShiftedIntProto other) {
      if (other == null) {
         return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.MinimumRange != 0F) {
         MinimumRange = other.MinimumRange;
      }
      if (other.MaximumRange != 0F) {
        MaximumRange = other.MaximumRange;
      }
      if (other.OrientationAngle != 0F) {
        OrientationAngle = other.OrientationAngle;
      }
      if (other.SectorSizeAngle != 0F) {
        SectorSizeAngle = other.SectorSizeAngle;
      }
      if (other.vertexPoint_ != null) {
        if (vertexPoint_ == null) {
          vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
        }
        VertexPoint.MergeFrom(other.VertexPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 29: {
            MinimumRange = input.ReadFloat();
             break;
          }
          case 37: {
             MaximumRange = input.ReadFloat();
             break;
          }
          case 45: {
            OrientationAngle = input.ReadFloat();
            break;
          }
          case 53: {
            SectorSizeAngle = input.ReadFloat();
            break;
          }
          case 58: {
            if (vertexPoint_ == null) {
              vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
             }
             }
            input.ReadMessage(vertexPoint_);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class CorridorAreaProto : pb::IMessage<CorridorAreaProto> {
        /// <summary>
    private static readonly pb::MessageParser<CorridorAreaProto> _parser = new pb::MessageParser<CorridorAreaProto>(() => new CorridorAreaProto());
        ///  The maximum number of buffer pairs to use when performing
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  parallel compression.
    public static pb::MessageParser<CorridorAreaProto> Parser { get { return _parser; } }
        /// </summary>
 
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <remarks>
    public static pbr::MessageDescriptor Descriptor {
        /// <para>
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[14]; }
        ///  This property sets an upper limit on the number of memory
    }
        ///  buffer pairs to create when performing parallel
 
        ///  compression. The implementation of the parallel
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  compression stream allocates multiple buffers to
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        ///  facilitate parallel compression. As each buffer fills up,
      get { return Descriptor; }
        ///  the stream uses <see
    }
        ///  cref="System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)">
 
        ///  ThreadPool.QueueUserWorkItem()</see> to compress those
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  buffers in a background threadpool thread. After a buffer
    public CorridorAreaProto() {
        ///  is compressed, it is re-ordered and written to the output
      OnConstruction();
        ///  stream.
    }
        /// </para>
 
        ///
    partial void OnConstruction();
        /// <para>
 
         ///  A higher number of buffer pairs enables a higher degree of
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  parallelism, which tends to increase the speed of compression on
    public CorridorAreaProto(CorridorAreaProto other) : this() {
        ///  multi-cpu computers. On the other hand, a higher number of buffer
      fieldIndexes_ = other.fieldIndexes_.Clone();
        ///  pairs also implies a larger memory consumption, more active worker
      invalidIndexes_ = other.invalidIndexes_.Clone();
        ///  threads, and a higher cpu utilization for any compression. This
      width_ = other.width_;
        ///   property enables the application to limit its memory consumption and
    }
        ///   CPU utilization behavior depending on requirements.
 
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public CorridorAreaProto Clone() {
        /// <para>
      return new CorridorAreaProto(this);
        ///   For each compression "task" that occurs in parallel, there are 2
    }
        ///  buffers allocated: one for input and one for output.  This property
 
         ///  sets a limit for the number of pairs. The total amount of storage
    /// <summary>Field number for the "field_indexes" field.</summary>
        ///  space allocated for buffering will then be (N*S*2), where N is the
    public const int FieldIndexesFieldNumber = 1;
        ///  number of buffer pairs, S is the size of each buffer (<see
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        ///  cref="CodecBufferSize"/>). By default, DotNetZip allocates 4 buffer
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
        ///  pairs per CPU core, so if your machine has 4 cores, and you retain
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        ///   the default buffer size of 128k, then the
    /// <summary>
        ///   ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer
    ///Key is field index#, Value is version info
        ///  memory in total, or 4mb, in blocks of 128kb. If you then set this
    /// </summary>
         ///  property to 8, then the number will be 8 * 2 * 128kb of buffer
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  memory, or 2mb.
    public pbc::MapField<uint, string> FieldIndexes {
        /// </para>
      get { return fieldIndexes_; }
        ///
    }
        /// <para>
 
        ///  CPU utilization will also go up with additional buffers, because a
    /// <summary>Field number for the "invalid_indexes" field.</summary>
         ///  larger number of buffer pairs allows a larger number of background
    public const int InvalidIndexesFieldNumber = 2;
        ///  threads to compress in parallel. If you find that parallel
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        ///  compression is consuming too much memory or CPU, you can adjust this
         = pb::FieldCodec.ForUInt32(18);
         ///  value downward.
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
    public pbc::RepeatedField<uint> InvalidIndexes {
        /// <para>
      get { return invalidIndexes_; }
        ///  The default value is 16. Different values may deliver better or
    }
        ///  worse results, depending on your priorities and the dynamic
 
        ///  performance characteristics of your storage and compute resources.
    /// <summary>Field number for the "Width" field.</summary>
        /// </para>
    public const int WidthFieldNumber = 3;
        ///
    private float width_;
        /// <para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///  This property is not the number of buffer pairs to use; it is an
    public float Width {
        ///  upper limit. An illustration: Suppose you have an application that
      get { return width_; }
        ///  uses the default value of this property (which is 16), and it runs
      set {
        ///  on a machine with 2 CPU cores. In that case, DotNetZip will allocate
         width_ = value;
         ///  4 buffer pairs per CPU core, for a total of 8 pairs. The upper
      }
         ///  limit specified by this property has no effect.
    }
        /// </para>
 
        ///
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <para>
    public override bool Equals(object other) {
        ///  The application can set this value at any time, but it is
      return Equals(other as CorridorAreaProto);
        ///  effective only if set before calling
    }
        ///  <c>ZipOutputStream.Write()</c> for the first time.
 
        /// </para>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// </remarks>
    public bool Equals(CorridorAreaProto other) {
        ///
      if (ReferenceEquals(other, null)) {
        /// <seealso cref="ParallelDeflateThreshold"/>
         return false;
         ///
      }
         public int ParallelDeflateMaxBufferPairs
      if (ReferenceEquals(other, this)) {
         {
         return true;
             get
      }
             {
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
                return _maxBufferPairs;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
             }
      if (Width != other.Width) return false;
            set
      return true;
            {
    }
                if (value < 4)
 
                    throw new ArgumentOutOfRangeException("ParallelDeflateMaxBufferPairs",
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                                                "Value must be 4 or greater.");
    public override int GetHashCode() {
                _maxBufferPairs = value;
      int hash = 1;
            }
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Width != 0F) hash ^= Width.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Width != 0F) {
         output.WriteRawTag(29);
         output.WriteFloat(Width);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Width != 0F) {
         size += 1 + 4;
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(CorridorAreaProto other) {
      if (other == null) {
         return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Width != 0F) {
         Width = other.Width;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
             break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 29: {
            Width = input.ReadFloat();
            break;
          }
         }
         }
      }
#endif
    }
 
  }
 
  public sealed partial class EllipseProto : pb::IMessage<EllipseProto> {
    private static readonly pb::MessageParser<EllipseProto> _parser = new pb::MessageParser<EllipseProto>(() => new EllipseProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<EllipseProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[15]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseProto(EllipseProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      CentrePoint = other.centrePoint_ != null ? other.CentrePoint.Clone() : null;
      FirstConjugateDiameterPoint = other.firstConjugateDiameterPoint_ != null ? other.FirstConjugateDiameterPoint.Clone() : null;
      SecondConjugateDiameterPoint = other.secondConjugateDiameterPoint_ != null ? other.SecondConjugateDiameterPoint.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseProto Clone() {
      return new EllipseProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "CentrePoint" field.</summary>
    public const int CentrePointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto centrePoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto CentrePoint {
      get { return centrePoint_; }
      set {
        centrePoint_ = value;
      }
    }
 
    /// <summary>Field number for the "FirstConjugateDiameterPoint" field.</summary>
    public const int FirstConjugateDiameterPointFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto firstConjugateDiameterPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto FirstConjugateDiameterPoint {
      get { return firstConjugateDiameterPoint_; }
      set {
        firstConjugateDiameterPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "SecondConjugateDiameterPoint" field.</summary>
    public const int SecondConjugateDiameterPointFieldNumber = 5;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto secondConjugateDiameterPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto SecondConjugateDiameterPoint {
      get { return secondConjugateDiameterPoint_; }
      set {
        secondConjugateDiameterPoint_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as EllipseProto);
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(EllipseProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(CentrePoint, other.CentrePoint)) return false;
      if (!object.Equals(FirstConjugateDiameterPoint, other.FirstConjugateDiameterPoint)) return false;
      if (!object.Equals(SecondConjugateDiameterPoint, other.SecondConjugateDiameterPoint)) return false;
      return true;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         private void InsureUniqueEntry(ZipEntry ze1)
    public override int GetHashCode() {
         {
      int hash = 1;
            if (_entriesWritten.ContainsKey(ze1.FileName))
      hash ^= FieldIndexes.GetHashCode();
            {
      hash ^= invalidIndexes_.GetHashCode();
                _exceptionPending = true;
      if (centrePoint_ != null) hash ^= CentrePoint.GetHashCode();
                throw new ArgumentException(String.Format("The entry '{0}' already exists in the zip archive.", ze1.FileName));
      if (firstConjugateDiameterPoint_ != null) hash ^= FirstConjugateDiameterPoint.GetHashCode();
      if (secondConjugateDiameterPoint_ != null) hash ^= SecondConjugateDiameterPoint.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (centrePoint_ != null) {
         output.WriteRawTag(26);
        output.WriteMessage(CentrePoint);
      }
      if (firstConjugateDiameterPoint_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(FirstConjugateDiameterPoint);
      }
      if (secondConjugateDiameterPoint_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(SecondConjugateDiameterPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (centrePoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CentrePoint);
      }
      if (firstConjugateDiameterPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FirstConjugateDiameterPoint);
      }
      if (secondConjugateDiameterPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecondConjugateDiameterPoint);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(EllipseProto other) {
      if (other == null) {
         return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.centrePoint_ != null) {
        if (centrePoint_ == null) {
          centrePoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        CentrePoint.MergeFrom(other.CentrePoint);
      }
      if (other.firstConjugateDiameterPoint_ != null) {
        if (firstConjugateDiameterPoint_ == null) {
          firstConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        FirstConjugateDiameterPoint.MergeFrom(other.FirstConjugateDiameterPoint);
      }
      if (other.secondConjugateDiameterPoint_ != null) {
        if (secondConjugateDiameterPoint_ == null) {
          secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        SecondConjugateDiameterPoint.MergeFrom(other.SecondConjugateDiameterPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (centrePoint_ == null) {
              centrePoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
             }
             }
            input.ReadMessage(centrePoint_);
            break;
          }
          case 34: {
            if (firstConjugateDiameterPoint_ == null) {
              firstConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
            }
            input.ReadMessage(firstConjugateDiameterPoint_);
            break;
          }
          case 42: {
            if (secondConjugateDiameterPoint_ == null) {
              secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
            }
            input.ReadMessage(secondConjugateDiameterPoint_);
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class EllipseAsShiftedIntProto : pb::IMessage<EllipseAsShiftedIntProto> {
         internal Stream OutputStream
    private static readonly pb::MessageParser<EllipseAsShiftedIntProto> _parser = new pb::MessageParser<EllipseAsShiftedIntProto>(() => new EllipseAsShiftedIntProto());
         {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            get
    public static pb::MessageParser<EllipseAsShiftedIntProto> Parser { get { return _parser; } }
            {
 
                return _outputStream;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            }
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[16]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseAsShiftedIntProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseAsShiftedIntProto(EllipseAsShiftedIntProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      CentrePoint = other.centrePoint_ != null ? other.CentrePoint.Clone() : null;
      FirstConjugateDiameterPoint = other.firstConjugateDiameterPoint_ != null ? other.FirstConjugateDiameterPoint.Clone() : null;
      SecondConjugateDiameterPoint = other.secondConjugateDiameterPoint_ != null ? other.SecondConjugateDiameterPoint.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EllipseAsShiftedIntProto Clone() {
      return new EllipseAsShiftedIntProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "CentrePoint" field.</summary>
    public const int CentrePointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto centrePoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto CentrePoint {
      get { return centrePoint_; }
      set {
        centrePoint_ = value;
      }
    }
 
    /// <summary>Field number for the "FirstConjugateDiameterPoint" field.</summary>
    public const int FirstConjugateDiameterPointFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto firstConjugateDiameterPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto FirstConjugateDiameterPoint {
      get { return firstConjugateDiameterPoint_; }
      set {
         firstConjugateDiameterPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "SecondConjugateDiameterPoint" field.</summary>
    public const int SecondConjugateDiameterPointFieldNumber = 5;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto secondConjugateDiameterPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto SecondConjugateDiameterPoint {
      get { return secondConjugateDiameterPoint_; }
      set {
        secondConjugateDiameterPoint_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as EllipseAsShiftedIntProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(EllipseAsShiftedIntProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(CentrePoint, other.CentrePoint)) return false;
      if (!object.Equals(FirstConjugateDiameterPoint, other.FirstConjugateDiameterPoint)) return false;
      if (!object.Equals(SecondConjugateDiameterPoint, other.SecondConjugateDiameterPoint)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (centrePoint_ != null) hash ^= CentrePoint.GetHashCode();
      if (firstConjugateDiameterPoint_ != null) hash ^= FirstConjugateDiameterPoint.GetHashCode();
      if (secondConjugateDiameterPoint_ != null) hash ^= SecondConjugateDiameterPoint.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (centrePoint_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(CentrePoint);
      }
      if (firstConjugateDiameterPoint_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(FirstConjugateDiameterPoint);
      }
      if (secondConjugateDiameterPoint_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(SecondConjugateDiameterPoint);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (centrePoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CentrePoint);
      }
      if (firstConjugateDiameterPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FirstConjugateDiameterPoint);
      }
      if (secondConjugateDiameterPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecondConjugateDiameterPoint);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(EllipseAsShiftedIntProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.centrePoint_ != null) {
        if (centrePoint_ == null) {
          centrePoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
        }
        CentrePoint.MergeFrom(other.CentrePoint);
      }
      if (other.firstConjugateDiameterPoint_ != null) {
        if (firstConjugateDiameterPoint_ == null) {
          firstConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
         }
         }
        FirstConjugateDiameterPoint.MergeFrom(other.FirstConjugateDiameterPoint);
      }
      if (other.secondConjugateDiameterPoint_ != null) {
        if (secondConjugateDiameterPoint_ == null) {
          secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
        }
        SecondConjugateDiameterPoint.MergeFrom(other.SecondConjugateDiameterPoint);
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        internal String Name
    public void MergeFrom(pb::CodedInputStream input) {
         {
      uint tag;
             get
      while ((tag = input.ReadTag()) != 0) {
             {
         switch(tag) {
                return _name;
          default:
            input.SkipLastField();
            break;
          case 10: {
             fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (centrePoint_ == null) {
              centrePoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
            }
            input.ReadMessage(centrePoint_);
            break;
          }
          case 34: {
             if (firstConjugateDiameterPoint_ == null) {
              firstConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
             }
             }
            input.ReadMessage(firstConjugateDiameterPoint_);
            break;
          }
          case 42: {
            if (secondConjugateDiameterPoint_ == null) {
              secondConjugateDiameterPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
            }
            input.ReadMessage(secondConjugateDiameterPoint_);
            break;
          }
         }
         }
      }
    }


   }
        /// <summary>
        ///   Returns true if an entry by the given name has already been written
        ///  to the ZipOutputStream.
        /// </summary>
        ///
        /// <param name="name">
        ///  The name of the entry to scan for.
        /// </param>
        ///
        /// <returns>
        /// true if an entry by the given name has already been written.
        /// </returns>
        public bool ContainsEntry(string name)
        {
            return _entriesWritten.ContainsKey(SharedUtilities.NormalizePathForUseInZipFile(name));
        }


  public sealed partial class PointProto : pb::IMessage<PointProto> {
    private static readonly pb::MessageParser<PointProto> _parser = new pb::MessageParser<PointProto>(() => new PointProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PointProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public static pbr::MessageDescriptor Descriptor {
        ///  Write the data from the buffer to the stream.
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[17]; }
        /// </summary>
    }
        ///
        /// <remarks>
        ///  As the application writes data into this stream, the data may be
        ///  compressed and encrypted before being written out to the underlying
        ///  stream, depending on the settings of the <see cref="CompressionLevel"/>
        ///  and the <see cref="Encryption"/> properties.
        /// </remarks>
        ///
        /// <param name="buffer">The buffer holding data to write to the stream.</param>
        /// <param name="offset">the offset within that data array to find the first byte to write.</param>
        /// <param name="count">the number of bytes to write.</param>
        public override void Write(byte[] buffer, int offset, int count)
        {
            if (_disposed)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("The stream has been closed.");
            }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (buffer==null)
    pbr::MessageDescriptor pb::IMessage.Descriptor {
            {
      get { return Descriptor; }
                _exceptionPending = true;
    }
                throw new System.ArgumentNullException("buffer");
            }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (_currentEntry == null)
    public PointProto() {
            {
      OnConstruction();
                _exceptionPending = true;
    }
                throw new System.InvalidOperationException("You must call PutNextEntry() before calling Write().");
            }


    partial void OnConstruction();
            if (_currentEntry.IsDirectory)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("You cannot Write() data for an entry that is a directory.");
            }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (_needToWriteEntryHeader)
    public PointProto(PointProto other) : this() {
                _InitiateCurrentEntry(false);
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      longitude_ = other.longitude_;
      latitude_ = other.latitude_;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (count != 0)
    public PointProto Clone() {
                _entryOutputStream.Write(buffer, offset, count);
      return new PointProto(this);
        }
    }


    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }


    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }


    /// <summary>Field number for the "longitude" field.</summary>
        /// <summary>
    public const int LongitudeFieldNumber = 3;
        ///  Specify the name of the next entry that will be written to the zip file.
    private double longitude_;
        /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        ///
     public double Longitude {
        /// <remarks>
      get { return longitude_; }
        /// <para>
      set {
        ///  Call this method just before calling <see cref="Write(byte[], int, int)"/>, to
         longitude_ = value;
        ///  specify the name of the entry that the next set of bytes written to
      }
        ///  the <c>ZipOutputStream</c> belongs to. All subsequent calls to <c>Write</c>,
     }
        ///  until the next call to <c>PutNextEntry</c>,
        ///  will be inserted into the named entry in the zip file.
        /// </para>
        ///
        /// <para>
        ///  If the <paramref name="entryName"/> used in <c>PutNextEntry()</c> ends in
        ///  a slash, then the entry added is marked as a directory. Because directory
        ///  entries do not contain data, a call to <c>Write()</c>, before an
        ///  intervening additional call to <c>PutNextEntry()</c>, will throw an
        ///  exception.
        /// </para>
        ///
        /// <para>
        ///  If you don't call <c>Write()</c> between two calls to
        ///  <c>PutNextEntry()</c>, the first entry is inserted into the zip file as a
        ///  file of zero size.  This may be what you want.
        /// </para>
        ///
        /// <para>
        ///  Because <c>PutNextEntry()</c> closes out the prior entry, if any, this
        ///  method may throw if there is a problem with the prior entry.
        /// </para>
        ///
        /// <para>
        ///  This method returns the <c>ZipEntry</c>.  You can modify public properties
        ///  on the <c>ZipEntry</c>, such as <see cref="ZipEntry.Encryption"/>, <see
        ///  cref="ZipEntry.Password"/>, and so on, until the first call to
        ///  <c>ZipOutputStream.Write()</c>, or until the next call to
        ///  <c>PutNextEntry()</c>.  If you modify the <c>ZipEntry</c> <em>after</em>
        ///  having called <c>Write()</c>, you may get a runtime exception, or you may
        ///  silently get an invalid zip archive.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <example>
        ///
        ///  This example shows how to create a zip file, using the
        ///  <c>ZipOutputStream</c> class.
        ///
        /// <code>
        /// private void Zipup()
        /// {
        ///     using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite ))
        ///     {
        ///        using (var output= new ZipOutputStream(fs))
        ///        {
        ///            output.Password = "VerySecret!";
        ///            output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///            output.PutNextEntry("entry1.txt");
        ///            byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1.");
        ///            output.Write(buffer,0,buffer.Length);
        ///            output.PutNextEntry("entry2.txt");  // this will be zero length
        ///            output.PutNextEntry("entry3.txt");
         ///            buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3.");
        ///            output.Write(buffer,0,buffer.Length);
        ///        }
        ///     }
        /// }
        /// </code>
        /// </example>
        ///
        /// <param name="entryName">
        ///  The name of the entry to be added, including any path to be used
        ///  within the zip file.
        /// </param>
        ///
        /// <returns>
        ///  The ZipEntry created.
        /// </returns>
        ///
        public ZipEntry PutNextEntry(String entryName)
        {
            if (String.IsNullOrEmpty(entryName))
                throw new ArgumentNullException("entryName");


    /// <summary>Field number for the "latitude" field.</summary>
            if (_disposed)
    public const int LatitudeFieldNumber = 4;
            {
    private double latitude_;
                _exceptionPending = true;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                throw new System.InvalidOperationException("The stream has been closed.");
    public double Latitude {
            }
      get { return latitude_; }
      set {
        latitude_ = value;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _FinishCurrentEntry();
    public override bool Equals(object other) {
            _currentEntry = ZipEntry.CreateForZipOutputStream(entryName);
      return Equals(other as PointProto);
            _currentEntry._container = new ZipContainer(this);
    }
            _currentEntry._BitField |= 0x0008;  // workitem 8932
            _currentEntry.SetEntryTimes(DateTime.Now, DateTime.Now, DateTime.Now);
            _currentEntry.CompressionLevel = this.CompressionLevel;
            _currentEntry.CompressionMethod = this.CompressionMethod;
            _currentEntry.Password = _password; // workitem 13909
            _currentEntry.Encryption = this.Encryption;
            // workitem 12634
            _currentEntry.AlternateEncoding = this.AlternateEncoding;
            _currentEntry.AlternateEncodingUsage = this.AlternateEncodingUsage;


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (entryName.EndsWith("/")) _currentEntry.MarkAsDirectory();
    public bool Equals(PointProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Longitude != other.Longitude) return false;
      if (Latitude != other.Latitude) return false;
      return true;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _currentEntry.EmitTimesInWindowsFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Windows) != 0);
    public override int GetHashCode() {
            _currentEntry.EmitTimesInUnixFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Unix) != 0);
      int hash = 1;
            InsureUniqueEntry(_currentEntry);
      hash ^= FieldIndexes.GetHashCode();
            _needToWriteEntryHeader = true;
      hash ^= invalidIndexes_.GetHashCode();
      if (Longitude != 0D) hash ^= Longitude.GetHashCode();
      if (Latitude != 0D) hash ^= Latitude.GetHashCode();
      return hash;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            return _currentEntry;
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Longitude != 0D) {
        output.WriteRawTag(25);
        output.WriteDouble(Longitude);
      }
      if (Latitude != 0D) {
        output.WriteRawTag(33);
        output.WriteDouble(Latitude);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Longitude != 0D) {
        size += 1 + 8;
      }
      if (Latitude != 0D) {
        size += 1 + 8;
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PointProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Longitude != 0D) {
        Longitude = other.Longitude;
      }
      if (other.Latitude != 0D) {
        Latitude = other.Latitude;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 25: {
            Longitude = input.ReadDouble();
            break;
          }
          case 33: {
            Latitude = input.ReadDouble();
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class PointShiftedIntProto : pb::IMessage<PointShiftedIntProto> {
    private static readonly pb::MessageParser<PointShiftedIntProto> _parser = new pb::MessageParser<PointShiftedIntProto>(() => new PointShiftedIntProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PointShiftedIntProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        private void _InitiateCurrentEntry(bool finishing)
    public static pbr::MessageDescriptor Descriptor {
        {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[18]; }
            // If finishing==true, this means we're initiating the entry at the time of
    }
            // Close() or PutNextEntry(). If this happens, it means no data was written
            // for the entry - Write() was never called. (The usual case us to call
            // _InitiateCurrentEntry(bool) from within Write().)  If finishing==true,
            // the entry could be either a zero-byte file or a directory.


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _entriesWritten.Add(_currentEntry.FileName,_currentEntry);
    pbr::MessageDescriptor pb::IMessage.Descriptor {
            _entryCount++; // could use _entriesWritten.Count, but I don't want to incur
      get { return Descriptor; }
            // the cost.
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (_entryCount > 65534 && _zip64 == Zip64Option.Never)
    public PointShiftedIntProto() {
            {
      OnConstruction();
                _exceptionPending = true;
    }
                throw new System.InvalidOperationException("Too many entries. Consider setting ZipOutputStream.EnableZip64.");
            }


    partial void OnConstruction();
            // Write out the header.
            //
            // If finishing, and encryption is in use, then we don't want to emit the
            // normal encryption header.  Signal that with a cycle=99 to turn off
            // encryption for zero-byte entries or directories.
            //
            // If finishing, then we know the stream length is zero.  Else, unknown
            // stream length.  Passing stream length == 0 allows an optimization so as
            // not to setup an encryption or deflation stream, when stream length is
            // zero.


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            _currentEntry.WriteHeader(_outputStream, finishing ? 99 : 0);
    public PointShiftedIntProto(PointShiftedIntProto other) : this() {
            _currentEntry.StoreRelativeOffset();
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      longitude_ = other.longitude_;
      latitude_ = other.latitude_;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (!_currentEntry.IsDirectory)
    public PointShiftedIntProto Clone() {
            {
      return new PointShiftedIntProto(this);
                _currentEntry.WriteSecurityMetadata(_outputStream);
    }
                _currentEntry.PrepOutputStream(_outputStream,
                                              finishing ? 0 : -1,
                                              out _outputCounter,
                                              out _encryptor,
                                              out _deflater,
                                              out _entryOutputStream);
            }
            _needToWriteEntryHeader = false;
        }


    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }


    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }


    /// <summary>Field number for the "longitude" field.</summary>
        private void _FinishCurrentEntry()
    public const int LongitudeFieldNumber = 3;
        {
    private int longitude_;
            if (_currentEntry != null)
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            {
    public int Longitude {
                if (_needToWriteEntryHeader)
      get { return longitude_; }
                    _InitiateCurrentEntry(true); // an empty entry - no writes
      set {
        longitude_ = value;
      }
    }


    /// <summary>Field number for the "latitude" field.</summary>
                _currentEntry.FinishOutputStream(_outputStream, _outputCounter, _encryptor, _deflater, _entryOutputStream);
    public const int LatitudeFieldNumber = 4;
                _currentEntry.PostProcessOutput(_outputStream);
    private int latitude_;
                // workitem 12964
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_currentEntry.OutputUsedZip64!=null)
    public int Latitude {
                    _anyEntriesUsedZip64 |= _currentEntry.OutputUsedZip64.Value;
      get { return latitude_; }
      set {
        latitude_ = value;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                // reset all the streams
    public override bool Equals(object other) {
                _outputCounter = null; _encryptor = _deflater = null; _entryOutputStream = null;
      return Equals(other as PointShiftedIntProto);
             }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PointShiftedIntProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Longitude != other.Longitude) return false;
      if (Latitude != other.Latitude) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Longitude != 0) hash ^= Longitude.GetHashCode();
      if (Latitude != 0) hash ^= Latitude.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Longitude != 0) {
        output.WriteRawTag(24);
        output.WriteSInt32(Longitude);
      }
      if (Latitude != 0) {
        output.WriteRawTag(32);
        output.WriteSInt32(Latitude);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Longitude != 0) {
        size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Longitude);
      }
      if (Latitude != 0) {
        size += 1 + pb::CodedOutputStream.ComputeSInt32Size(Latitude);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PointShiftedIntProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Longitude != 0) {
        Longitude = other.Longitude;
      }
      if (other.Latitude != 0) {
        Latitude = other.Latitude;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 24: {
            Longitude = input.ReadSInt32();
            break;
          }
          case 32: {
             Latitude = input.ReadSInt32();
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class RangeRingsProto : pb::IMessage<RangeRingsProto> {
    private static readonly pb::MessageParser<RangeRingsProto> _parser = new pb::MessageParser<RangeRingsProto>(() => new RangeRingsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<RangeRingsProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public static pbr::MessageDescriptor Descriptor {
        /// Dispose the stream
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[19]; }
        /// </summary>
    }
        ///
        /// <remarks>
        /// <para>
        ///  This method writes the Zip Central directory, then closes the stream.  The
        ///  application must call Dispose() (or Close) in order to produce a valid zip file.
        /// </para>
        ///
        /// <para>
        ///  Typically the application will call <c>Dispose()</c> implicitly, via a <c>using</c>
        ///  statement in C#, or a <c>Using</c> statement in VB.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <param name="disposing">set this to true, always.</param>
        protected override void Dispose(bool disposing)
        {
            if (_disposed) return;


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            if (disposing) // not called from finalizer
    pbr::MessageDescriptor pb::IMessage.Descriptor {
            {
      get { return Descriptor; }
                // handle pending exceptions
    }
                if (!_exceptionPending)
                {
                    _FinishCurrentEntry();
                    _directoryNeededZip64 = ZipOutput.WriteCentralDirectoryStructure(_outputStream,
                                                                                    _entriesWritten.Values,
                                                                                    1, // _numberOfSegmentsForMostRecentSave,
                                                                                    _zip64,
                                                                                    Comment,
                                                                                    new ZipContainer(this));
                    Stream wrappedStream = null;
                    CountingStream cs = _outputStream as CountingStream;
                    if (cs != null)
                    {
                        wrappedStream = cs.WrappedStream;
#if NETCF
                    cs.Close();
#else
                        cs.Dispose();
#endif
                    }
                    else
                    {
                        wrappedStream = _outputStream;
                    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    if (!_leaveUnderlyingStreamOpen)
    public RangeRingsProto() {
                    {
      OnConstruction();
#if NETCF
    }
                    wrappedStream.Close();
 
#else
    partial void OnConstruction();
                        wrappedStream.Dispose();
 
#endif
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                    }
    public RangeRingsProto(RangeRingsProto other) : this() {
                    _outputStream = null;
      fieldIndexes_ = other.fieldIndexes_.Clone();
                }
      invalidIndexes_ = other.invalidIndexes_.Clone();
      VertexPoint = other.vertexPoint_ != null ? other.VertexPoint.Clone() : null;
      rangeBetweenRings_ = other.rangeBetweenRings_;
      maximumRange_ = other.maximumRange_;
      numberOfRadials_ = other.numberOfRadials_;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public RangeRingsProto Clone() {
      return new RangeRingsProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "VertexPoint" field.</summary>
    public const int VertexPointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto vertexPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto VertexPoint {
      get { return vertexPoint_; }
      set {
        vertexPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "RangeBetweenRings" field.</summary>
    public const int RangeBetweenRingsFieldNumber = 4;
    private float rangeBetweenRings_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float RangeBetweenRings {
      get { return rangeBetweenRings_; }
      set {
        rangeBetweenRings_ = value;
      }
    }
 
    /// <summary>Field number for the "MaximumRange" field.</summary>
    public const int MaximumRangeFieldNumber = 5;
    private float maximumRange_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MaximumRange {
      get { return maximumRange_; }
      set {
        maximumRange_ = value;
      }
    }
 
    /// <summary>Field number for the "NumberOfRadials" field.</summary>
    public const int NumberOfRadialsFieldNumber = 6;
    private uint numberOfRadials_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint NumberOfRadials {
      get { return numberOfRadials_; }
      set {
        numberOfRadials_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as RangeRingsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(RangeRingsProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(VertexPoint, other.VertexPoint)) return false;
      if (RangeBetweenRings != other.RangeBetweenRings) return false;
      if (MaximumRange != other.MaximumRange) return false;
      if (NumberOfRadials != other.NumberOfRadials) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (vertexPoint_ != null) hash ^= VertexPoint.GetHashCode();
      if (RangeBetweenRings != 0F) hash ^= RangeBetweenRings.GetHashCode();
      if (MaximumRange != 0F) hash ^= MaximumRange.GetHashCode();
      if (NumberOfRadials != 0) hash ^= NumberOfRadials.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (vertexPoint_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(VertexPoint);
      }
      if (RangeBetweenRings != 0F) {
        output.WriteRawTag(37);
        output.WriteFloat(RangeBetweenRings);
      }
      if (MaximumRange != 0F) {
        output.WriteRawTag(45);
        output.WriteFloat(MaximumRange);
      }
      if (NumberOfRadials != 0) {
        output.WriteRawTag(48);
        output.WriteUInt32(NumberOfRadials);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (vertexPoint_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(VertexPoint);
      }
      if (RangeBetweenRings != 0F) {
        size += 1 + 4;
      }
      if (MaximumRange != 0F) {
        size += 1 + 4;
      }
      if (NumberOfRadials != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumberOfRadials);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(RangeRingsProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.vertexPoint_ != null) {
        if (vertexPoint_ == null) {
          vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
        }
        VertexPoint.MergeFrom(other.VertexPoint);
      }
      if (other.RangeBetweenRings != 0F) {
        RangeBetweenRings = other.RangeBetweenRings;
      }
      if (other.MaximumRange != 0F) {
        MaximumRange = other.MaximumRange;
      }
      if (other.NumberOfRadials != 0) {
        NumberOfRadials = other.NumberOfRadials;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (vertexPoint_ == null) {
              vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoPointProto();
             }
             }
             input.ReadMessage(vertexPoint_);
             _disposed = true;
            break;
          }
          case 37: {
            RangeBetweenRings = input.ReadFloat();
            break;
          }
          case 45: {
            MaximumRange = input.ReadFloat();
            break;
          }
          case 48: {
            NumberOfRadials = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }


  }


  public sealed partial class RangeRingsShiftedIntProto : pb::IMessage<RangeRingsShiftedIntProto> {
    private static readonly pb::MessageParser<RangeRingsShiftedIntProto> _parser = new pb::MessageParser<RangeRingsShiftedIntProto>(() => new RangeRingsShiftedIntProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<RangeRingsShiftedIntProto> Parser { get { return _parser; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public static pbr::MessageDescriptor Descriptor {
        /// Always returns false.
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[20]; }
        /// </summary>
    }
        public override bool CanRead { get { return false; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    pbr::MessageDescriptor pb::IMessage.Descriptor {
        /// Always returns false.
      get { return Descriptor; }
        /// </summary>
    }
        public override bool CanSeek { get { return false; } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public RangeRingsShiftedIntProto() {
        /// Always returns true.
      OnConstruction();
        /// </summary>
    }
        public override bool CanWrite { get { return true; } }


    partial void OnConstruction();
        /// <summary>
        /// Always returns a NotSupportedException.
        /// </summary>
        public override long Length { get { throw new NotSupportedException(); } }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public RangeRingsShiftedIntProto(RangeRingsShiftedIntProto other) : this() {
        /// Setting this property always returns a NotSupportedException. Getting it
      fieldIndexes_ = other.fieldIndexes_.Clone();
        /// returns the value of the Position on the underlying stream.
      invalidIndexes_ = other.invalidIndexes_.Clone();
        /// </summary>
      VertexPoint = other.vertexPoint_ != null ? other.VertexPoint.Clone() : null;
        public override long Position
      rangeBetweenRings_ = other.rangeBetweenRings_;
        {
      maximumRange_ = other.maximumRange_;
            get { return _outputStream.Position; }
      numberOfRadials_ = other.numberOfRadials_;
            set { throw new NotSupportedException(); }
    }
        }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public RangeRingsShiftedIntProto Clone() {
        /// This is a no-op.
      return new RangeRingsShiftedIntProto(this);
        /// </summary>
    }
        public override void Flush() { }


    /// <summary>Field number for the "field_indexes" field.</summary>
        /// <summary>
    public const int FieldIndexesFieldNumber = 1;
         /// This method always throws a NotSupportedException.
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        /// </summary>
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
         /// <param name="buffer">ignored</param>
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
         /// <param name="offset">ignored</param>
    /// <summary>
         /// <param name="count">ignored</param>
    ///Key is field index#, Value is version info
         /// <returns>nothing</returns>
    /// </summary>
         public override int Read(byte[] buffer, int offset, int count)
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         {
    public pbc::MapField<uint, string> FieldIndexes {
            throw new NotSupportedException("Read");
      get { return fieldIndexes_; }
        }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "VertexPoint" field.</summary>
    public const int VertexPointFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto vertexPoint_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto VertexPoint {
      get { return vertexPoint_; }
      set {
         vertexPoint_ = value;
      }
    }
 
    /// <summary>Field number for the "RangeBetweenRings" field.</summary>
    public const int RangeBetweenRingsFieldNumber = 4;
    private float rangeBetweenRings_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float RangeBetweenRings {
      get { return rangeBetweenRings_; }
      set {
         rangeBetweenRings_ = value;
      }
    }
 
    /// <summary>Field number for the "MaximumRange" field.</summary>
    public const int MaximumRangeFieldNumber = 5;
    private float maximumRange_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public float MaximumRange {
      get { return maximumRange_; }
      set {
         maximumRange_ = value;
      }
    }
 
    /// <summary>Field number for the "NumberOfRadials" field.</summary>
    public const int NumberOfRadialsFieldNumber = 6;
    private uint numberOfRadials_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint NumberOfRadials {
      get { return numberOfRadials_; }
      set {
         numberOfRadials_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as RangeRingsShiftedIntProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(RangeRingsShiftedIntProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(VertexPoint, other.VertexPoint)) return false;
      if (RangeBetweenRings != other.RangeBetweenRings) return false;
      if (MaximumRange != other.MaximumRange) return false;
      if (NumberOfRadials != other.NumberOfRadials) return false;
      return true;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
         /// <summary>
    public override int GetHashCode() {
         /// This method always throws a NotSupportedException.
      int hash = 1;
         /// </summary>
      hash ^= FieldIndexes.GetHashCode();
         /// <param name="offset">ignored</param>
      hash ^= invalidIndexes_.GetHashCode();
         /// <param name="origin">ignored</param>
      if (vertexPoint_ != null) hash ^= VertexPoint.GetHashCode();
         /// <returns>nothing</returns>
      if (RangeBetweenRings != 0F) hash ^= RangeBetweenRings.GetHashCode();
         public override long Seek(long offset, SeekOrigin origin)
      if (MaximumRange != 0F) hash ^= MaximumRange.GetHashCode();
         {
      if (NumberOfRadials != 0) hash ^= NumberOfRadials.GetHashCode();
            throw new NotSupportedException("Seek");
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (vertexPoint_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(VertexPoint);
      }
      if (RangeBetweenRings != 0F) {
        output.WriteRawTag(37);
        output.WriteFloat(RangeBetweenRings);
      }
      if (MaximumRange != 0F) {
         output.WriteRawTag(45);
         output.WriteFloat(MaximumRange);
      }
      if (NumberOfRadials != 0) {
         output.WriteRawTag(48);
         output.WriteUInt32(NumberOfRadials);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (vertexPoint_ != null) {
         size += 1 + pb::CodedOutputStream.ComputeMessageSize(VertexPoint);
      }
      if (RangeBetweenRings != 0F) {
        size += 1 + 4;
      }
      if (MaximumRange != 0F) {
         size += 1 + 4;
      }
      if (NumberOfRadials != 0) {
         size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumberOfRadials);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(RangeRingsShiftedIntProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.vertexPoint_ != null) {
         if (vertexPoint_ == null) {
          vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
         }
         }
        VertexPoint.MergeFrom(other.VertexPoint);
      }
      if (other.RangeBetweenRings != 0F) {
        RangeBetweenRings = other.RangeBetweenRings;
      }
      if (other.MaximumRange != 0F) {
        MaximumRange = other.MaximumRange;
      }
      if (other.NumberOfRadials != 0) {
        NumberOfRadials = other.NumberOfRadials;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        /// <summary>
    public void MergeFrom(pb::CodedInputStream input) {
        /// This method always throws a NotSupportedException.
      uint tag;
        /// </summary>
      while ((tag = input.ReadTag()) != 0) {
        /// <param name="value">ignored</param>
         switch(tag) {
         public override void SetLength(long value)
          default:
        {
            input.SkipLastField();
             throw new NotSupportedException();
            break;
          case 10: {
             fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (vertexPoint_ == null) {
              vertexPoint_ = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointProto();
            }
            input.ReadMessage(vertexPoint_);
            break;
          }
          case 37: {
            RangeBetweenRings = input.ReadFloat();
            break;
          }
          case 45: {
            MaximumRange = input.ReadFloat();
            break;
          }
          case 48: {
            NumberOfRadials = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class VolPolyAreaProto : pb::IMessage<VolPolyAreaProto> {
    private static readonly pb::MessageParser<VolPolyAreaProto> _parser = new pb::MessageParser<VolPolyAreaProto>(() => new VolPolyAreaProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<VolPolyAreaProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[21]; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolPolyAreaProto() {
      OnConstruction();
    }


    partial void OnConstruction();
        private EncryptionAlgorithm _encryption;
        private ZipEntryTimestamp _timestamp;
        internal String _password;
        private String _comment;
        private Stream _outputStream;
        private ZipEntry _currentEntry;
        internal Zip64Option _zip64;
        private Dictionary<String, ZipEntry> _entriesWritten;
        private int _entryCount;
        private ZipOption _alternateEncodingUsage = ZipOption.Never;
        private System.Text.Encoding _alternateEncoding
            = System.Text.Encoding.GetEncoding("IBM437"); // default = IBM437


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        private bool _leaveUnderlyingStreamOpen;
    public VolPolyAreaProto(VolPolyAreaProto other) : this() {
        private bool _disposed;
      fieldIndexes_ = other.fieldIndexes_.Clone();
        private bool _exceptionPending; // **see note below
      invalidIndexes_ = other.invalidIndexes_.Clone();
        private bool _anyEntriesUsedZip64, _directoryNeededZip64;
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
        private CountingStream _outputCounter;
    }
        private Stream _encryptor;
        private Stream _deflater;
        private Ionic.Crc.CrcCalculatorStream _entryOutputStream;
        private bool _needToWriteEntryHeader;
        private string _name;
        private bool _DontIgnoreCase;
#if !NETCF
        internal Ionic.Zlib.ParallelDeflateOutputStream ParallelDeflater;
        private long _ParallelDeflateThreshold;
        private int _maxBufferPairs = 16;
#endif


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        // **Note regarding exceptions:
    public VolPolyAreaProto Clone() {
      return new VolPolyAreaProto(this);
    }


    /// <summary>Field number for the "field_indexes" field.</summary>
        // When ZipOutputStream is employed within a using clause, which
    public const int FieldIndexesFieldNumber = 1;
        // is the typical scenario, and an exception is thrown within
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         // the scope of the using, Close()/Dispose() is invoked
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
        // implicitly before processing the initial exception. In that
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
        // case, _exceptionPending is true, and we don't want to try to
    /// <summary>
        // write anything in the Close/Dispose logic.  Doing so can
    ///Key is field index#, Value is version info
        // cause additional exceptions that mask the original one. So,
    /// </summary>
        // the _exceptionPending flag is used to track that, and to
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        // allow the original exception to be propagated to the
    public pbc::MapField<uint, string> FieldIndexes {
        // application without extra "noise."
      get { return fieldIndexes_; }
    }


    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
     }
     }


    /// <summary>Field number for the "SurfaceVolume" field.</summary>
    public const int SurfaceVolumeFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
      get { return surfaceVolume_; }
      set {
        surfaceVolume_ = value;
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VolPolyAreaProto);
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VolPolyAreaProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) return false;
      return true;
    }


     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     internal class ZipContainer
     public override int GetHashCode() {
     {
      int hash = 1;
        private ZipFile _zf;
      hash ^= FieldIndexes.GetHashCode();
        private ZipOutputStream _zos;
      hash ^= invalidIndexes_.GetHashCode();
        private ZipInputStream _zis;
      if (surfaceVolume_ != null) hash ^= SurfaceVolume.GetHashCode();
      return hash;
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ZipContainer(Object o)
    public override string ToString() {
         {
      return pb::JsonFormatter.ToDiagnosticString(this);
            _zf = (o as ZipFile);
    }
            _zos = (o as ZipOutputStream);
 
            _zis = (o as ZipInputStream);
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
         output.WriteRawTag(26);
        output.WriteMessage(SurfaceVolume);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VolPolyAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.surfaceVolume_ != null) {
        if (surfaceVolume_ == null) {
          surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
         }
         }
        SurfaceVolume.MergeFrom(other.SurfaceVolume);
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public ZipFile ZipFile
    public void MergeFrom(pb::CodedInputStream input) {
         {
      uint tag;
             get { return _zf; }
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
            input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (surfaceVolume_ == null) {
              surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
            }
            input.ReadMessage(surfaceVolume_);
            break;
          }
         }
         }
      }
    }
  }


  public sealed partial class VolOrbitAreaProto : pb::IMessage<VolOrbitAreaProto> {
         public ZipOutputStream ZipOutputStream
    private static readonly pb::MessageParser<VolOrbitAreaProto> _parser = new pb::MessageParser<VolOrbitAreaProto>(() => new VolOrbitAreaProto());
         {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            get { return _zos; }
    public static pb::MessageParser<VolOrbitAreaProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[22]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolOrbitAreaProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolOrbitAreaProto(VolOrbitAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
      OrbitArea = other.orbitArea_ != null ? other.OrbitArea.Clone() : null;
      ShiftedIntOrbitArea = other.shiftedIntOrbitArea_ != null ? other.ShiftedIntOrbitArea.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolOrbitAreaProto Clone() {
      return new VolOrbitAreaProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "SurfaceVolume" field.</summary>
    public const int SurfaceVolumeFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
      get { return surfaceVolume_; }
      set {
        surfaceVolume_ = value;
      }
    }
 
    /// <summary>Field number for the "OrbitArea" field.</summary>
    public const int OrbitAreaFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto orbitArea_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto OrbitArea {
      get { return orbitArea_; }
      set {
         orbitArea_ = value;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntOrbitArea" field.</summary>
    public const int ShiftedIntOrbitAreaFieldNumber = 5;
    private global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto shiftedIntOrbitArea_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto ShiftedIntOrbitArea {
      get { return shiftedIntOrbitArea_; }
      set {
        shiftedIntOrbitArea_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VolOrbitAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VolOrbitAreaProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) return false;
      if (!object.Equals(OrbitArea, other.OrbitArea)) return false;
      if (!object.Equals(ShiftedIntOrbitArea, other.ShiftedIntOrbitArea)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (surfaceVolume_ != null) hash ^= SurfaceVolume.GetHashCode();
      if (orbitArea_ != null) hash ^= OrbitArea.GetHashCode();
      if (shiftedIntOrbitArea_ != null) hash ^= ShiftedIntOrbitArea.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(SurfaceVolume);
      }
      if (orbitArea_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(OrbitArea);
      }
      if (shiftedIntOrbitArea_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(ShiftedIntOrbitArea);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      if (orbitArea_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(OrbitArea);
      }
      if (shiftedIntOrbitArea_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntOrbitArea);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VolOrbitAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.surfaceVolume_ != null) {
        if (surfaceVolume_ == null) {
          surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
        }
        SurfaceVolume.MergeFrom(other.SurfaceVolume);
      }
      if (other.orbitArea_ != null) {
        if (orbitArea_ == null) {
          orbitArea_ = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto();
        }
        OrbitArea.MergeFrom(other.OrbitArea);
      }
      if (other.shiftedIntOrbitArea_ != null) {
        if (shiftedIntOrbitArea_ == null) {
          shiftedIntOrbitArea_ = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto();
         }
         }
        ShiftedIntOrbitArea.MergeFrom(other.ShiftedIntOrbitArea);
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public string Name
    public void MergeFrom(pb::CodedInputStream input) {
         {
      uint tag;
             get
      while ((tag = input.ReadTag()) != 0) {
             {
         switch(tag) {
                if (_zf != null) return _zf.Name;
          default:
                if (_zis != null) throw new NotSupportedException();
             input.SkipLastField();
                return _zos.Name;
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (surfaceVolume_ == null) {
              surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
            }
            input.ReadMessage(surfaceVolume_);
            break;
          }
          case 34: {
            if (orbitArea_ == null) {
              orbitArea_ = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto();
             }
             }
            input.ReadMessage(orbitArea_);
            break;
          }
          case 42: {
            if (shiftedIntOrbitArea_ == null) {
              shiftedIntOrbitArea_ = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto();
            }
            input.ReadMessage(shiftedIntOrbitArea_);
            break;
          }
         }
         }
      }
    }


  }
         public string Password
 
         {
  public sealed partial class VolFanAreaProto : pb::IMessage<VolFanAreaProto> {
            get
    private static readonly pb::MessageParser<VolFanAreaProto> _parser = new pb::MessageParser<VolFanAreaProto>(() => new VolFanAreaProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf._Password;
    public static pb::MessageParser<VolFanAreaProto> Parser { get { return _parser; } }
                if (_zis != null) return _zis._Password;
 
                return _zos._password;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            }
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[23]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolFanAreaProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolFanAreaProto(VolFanAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
      FanArea = other.fanArea_ != null ? other.FanArea.Clone() : null;
      ShiftedIntFanArea = other.shiftedIntFanArea_ != null ? other.ShiftedIntFanArea.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolFanAreaProto Clone() {
      return new VolFanAreaProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "SurfaceVolume" field.</summary>
    public const int SurfaceVolumeFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
      get { return surfaceVolume_; }
      set {
        surfaceVolume_ = value;
      }
    }
 
    /// <summary>Field number for the "FanArea" field.</summary>
    public const int FanAreaFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto fanArea_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto FanArea {
      get { return fanArea_; }
      set {
         fanArea_ = value;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntFanArea" field.</summary>
    public const int ShiftedIntFanAreaFieldNumber = 5;
    private global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto shiftedIntFanArea_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto ShiftedIntFanArea {
      get { return shiftedIntFanArea_; }
      set {
        shiftedIntFanArea_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VolFanAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VolFanAreaProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) return false;
      if (!object.Equals(FanArea, other.FanArea)) return false;
      if (!object.Equals(ShiftedIntFanArea, other.ShiftedIntFanArea)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (surfaceVolume_ != null) hash ^= SurfaceVolume.GetHashCode();
      if (fanArea_ != null) hash ^= FanArea.GetHashCode();
      if (shiftedIntFanArea_ != null) hash ^= ShiftedIntFanArea.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(SurfaceVolume);
      }
      if (fanArea_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(FanArea);
      }
      if (shiftedIntFanArea_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(ShiftedIntFanArea);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      if (fanArea_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FanArea);
      }
      if (shiftedIntFanArea_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntFanArea);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VolFanAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.surfaceVolume_ != null) {
        if (surfaceVolume_ == null) {
          surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
         }
         }
        SurfaceVolume.MergeFrom(other.SurfaceVolume);
      }
      if (other.fanArea_ != null) {
        if (fanArea_ == null) {
          fanArea_ = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto();
        }
        FanArea.MergeFrom(other.FanArea);
      }
      if (other.shiftedIntFanArea_ != null) {
        if (shiftedIntFanArea_ == null) {
          shiftedIntFanArea_ = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto();
        }
        ShiftedIntFanArea.MergeFrom(other.ShiftedIntFanArea);
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public Zip64Option Zip64
    public void MergeFrom(pb::CodedInputStream input) {
         {
      uint tag;
             get
      while ((tag = input.ReadTag()) != 0) {
             {
         switch(tag) {
                if (_zf != null) return _zf._zip64;
          default:
                if (_zis != null) throw new NotSupportedException();
             input.SkipLastField();
                return _zos._zip64;
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (surfaceVolume_ == null) {
              surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
             }
             }
            input.ReadMessage(surfaceVolume_);
            break;
          }
          case 34: {
            if (fanArea_ == null) {
              fanArea_ = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto();
            }
            input.ReadMessage(fanArea_);
            break;
          }
          case 42: {
            if (shiftedIntFanArea_ == null) {
              shiftedIntFanArea_ = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto();
            }
            input.ReadMessage(shiftedIntFanArea_);
            break;
          }
         }
         }
      }
    }


  }
         public int BufferSize
 
         {
  public sealed partial class VolEllipseProto : pb::IMessage<VolEllipseProto> {
            get
    private static readonly pb::MessageParser<VolEllipseProto> _parser = new pb::MessageParser<VolEllipseProto>(() => new VolEllipseProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.BufferSize;
    public static pb::MessageParser<VolEllipseProto> Parser { get { return _parser; } }
                if (_zis != null) throw new NotSupportedException();
 
                return 0;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            }
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[24]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolEllipseProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolEllipseProto(VolEllipseProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
      Ellipse = other.ellipse_ != null ? other.Ellipse.Clone() : null;
      ShiftedIntEllipse = other.shiftedIntEllipse_ != null ? other.ShiftedIntEllipse.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolEllipseProto Clone() {
      return new VolEllipseProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
         = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "SurfaceVolume" field.</summary>
    public const int SurfaceVolumeFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
      get { return surfaceVolume_; }
      set {
         surfaceVolume_ = value;
      }
    }
 
    /// <summary>Field number for the "Ellipse" field.</summary>
    public const int EllipseFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.EllipseProto ellipse_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.EllipseProto Ellipse {
      get { return ellipse_; }
      set {
        ellipse_ = value;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntEllipse" field.</summary>
    public const int ShiftedIntEllipseFieldNumber = 5;
    private global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto shiftedIntEllipse_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto ShiftedIntEllipse {
      get { return shiftedIntEllipse_; }
      set {
        shiftedIntEllipse_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VolEllipseProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VolEllipseProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) return false;
      if (!object.Equals(Ellipse, other.Ellipse)) return false;
      if (!object.Equals(ShiftedIntEllipse, other.ShiftedIntEllipse)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (surfaceVolume_ != null) hash ^= SurfaceVolume.GetHashCode();
      if (ellipse_ != null) hash ^= Ellipse.GetHashCode();
      if (shiftedIntEllipse_ != null) hash ^= ShiftedIntEllipse.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(SurfaceVolume);
      }
      if (ellipse_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(Ellipse);
      }
      if (shiftedIntEllipse_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(ShiftedIntEllipse);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      if (ellipse_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Ellipse);
      }
      if (shiftedIntEllipse_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntEllipse);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VolEllipseProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.surfaceVolume_ != null) {
        if (surfaceVolume_ == null) {
          surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
         }
         }
        SurfaceVolume.MergeFrom(other.SurfaceVolume);
      }
      if (other.ellipse_ != null) {
        if (ellipse_ == null) {
          ellipse_ = new global::TPG.DrawObjects.Serialize.Protoc.EllipseProto();
        }
        Ellipse.MergeFrom(other.Ellipse);
      }
      if (other.shiftedIntEllipse_ != null) {
        if (shiftedIntEllipse_ == null) {
          shiftedIntEllipse_ = new global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto();
        }
        ShiftedIntEllipse.MergeFrom(other.ShiftedIntEllipse);
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
#if !NETCF
    public void MergeFrom(pb::CodedInputStream input) {
         public Ionic.Zlib.ParallelDeflateOutputStream ParallelDeflater
      uint tag;
        {
      while ((tag = input.ReadTag()) != 0) {
             get
         switch(tag) {
             {
          default:
                if (_zf != null) return _zf.ParallelDeflater;
            input.SkipLastField();
                if (_zis != null) return null;
            break;
                return _zos.ParallelDeflater;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
             invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
             break;
          }
          case 26: {
            if (surfaceVolume_ == null) {
              surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
            }
            input.ReadMessage(surfaceVolume_);
            break;
          }
          case 34: {
            if (ellipse_ == null) {
              ellipse_ = new global::TPG.DrawObjects.Serialize.Protoc.EllipseProto();
             }
             }
             input.ReadMessage(ellipse_);
             set
             break;
             {
          }
                if (_zf != null) _zf.ParallelDeflater = value;
          case 42: {
                else if (_zos != null) _zos.ParallelDeflater = value;
            if (shiftedIntEllipse_ == null) {
              shiftedIntEllipse_ = new global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto();
             }
             }
            input.ReadMessage(shiftedIntEllipse_);
            break;
          }
         }
         }
      }
    }


  }
         public long ParallelDeflateThreshold
 
         {
  public sealed partial class VolCorridorAreaProto : pb::IMessage<VolCorridorAreaProto> {
            get
    private static readonly pb::MessageParser<VolCorridorAreaProto> _parser = new pb::MessageParser<VolCorridorAreaProto>(() => new VolCorridorAreaProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.ParallelDeflateThreshold;
    public static pb::MessageParser<VolCorridorAreaProto> Parser { get { return _parser; } }
                return _zos.ParallelDeflateThreshold;
 
            }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[25]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolCorridorAreaProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolCorridorAreaProto(VolCorridorAreaProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      SurfaceVolume = other.surfaceVolume_ != null ? other.SurfaceVolume.Clone() : null;
      CorridorArea = other.corridorArea_ != null ? other.CorridorArea.Clone() : null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public VolCorridorAreaProto Clone() {
      return new VolCorridorAreaProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
         = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "SurfaceVolume" field.</summary>
    public const int SurfaceVolumeFieldNumber = 3;
    private global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto surfaceVolume_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto SurfaceVolume {
      get { return surfaceVolume_; }
      set {
         surfaceVolume_ = value;
      }
    }
 
    /// <summary>Field number for the "CorridorArea" field.</summary>
    public const int CorridorAreaFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto corridorArea_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto CorridorArea {
      get { return corridorArea_; }
      set {
        corridorArea_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as VolCorridorAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(VolCorridorAreaProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (!object.Equals(SurfaceVolume, other.SurfaceVolume)) return false;
      if (!object.Equals(CorridorArea, other.CorridorArea)) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (surfaceVolume_ != null) hash ^= SurfaceVolume.GetHashCode();
      if (corridorArea_ != null) hash ^= CorridorArea.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(SurfaceVolume);
      }
      if (corridorArea_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(CorridorArea);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (surfaceVolume_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(SurfaceVolume);
      }
      if (corridorArea_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CorridorArea);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(VolCorridorAreaProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.surfaceVolume_ != null) {
        if (surfaceVolume_ == null) {
          surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
         }
         }
         SurfaceVolume.MergeFrom(other.SurfaceVolume);
         public int ParallelDeflateMaxBufferPairs
      }
        {
      if (other.corridorArea_ != null) {
            get
        if (corridorArea_ == null) {
            {
          corridorArea_ = new global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto();
                if (_zf != null) return _zf.ParallelDeflateMaxBufferPairs;
                return _zos.ParallelDeflateMaxBufferPairs;
            }
         }
         }
        CorridorArea.MergeFrom(other.CorridorArea);
#endif
      }
    }


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
        public int CodecBufferSize
    public void MergeFrom(pb::CodedInputStream input) {
         {
      uint tag;
             get
      while ((tag = input.ReadTag()) != 0) {
             {
         switch(tag) {
                if (_zf != null) return _zf.CodecBufferSize;
          default:
                if (_zis != null) return _zis.CodecBufferSize;
             input.SkipLastField();
                return _zos.CodecBufferSize;
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            if (surfaceVolume_ == null) {
              surfaceVolume_ = new global::TPG.DrawObjects.Serialize.Protoc.SurfaceVolumeProto();
             }
             }
            input.ReadMessage(surfaceVolume_);
            break;
          }
          case 34: {
            if (corridorArea_ == null) {
              corridorArea_ = new global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto();
            }
            input.ReadMessage(corridorArea_);
            break;
          }
         }
         }
      }
    }


  }
        public Ionic.Zlib.CompressionStrategy Strategy
 
        {
  public sealed partial class LineProto : pb::IMessage<LineProto> {
            get
    private static readonly pb::MessageParser<LineProto> _parser = new pb::MessageParser<LineProto>(() => new LineProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.Strategy;
    public static pb::MessageParser<LineProto> Parser { get { return _parser; } }
                return _zos.Strategy;
 
            }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[26]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public LineProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public LineProto(LineProto other) : this() {
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public LineProto Clone() {
      return new LineProto(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as LineProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(LineProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(LineProto other) {
      if (other == null) {
        return;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
         }
         }
      }
    }


  }
        public Zip64Option UseZip64WhenSaving
 
        {
  public sealed partial class PolygonAreaProto : pb::IMessage<PolygonAreaProto> {
            get
    private static readonly pb::MessageParser<PolygonAreaProto> _parser = new pb::MessageParser<PolygonAreaProto>(() => new PolygonAreaProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.UseZip64WhenSaving;
    public static pb::MessageParser<PolygonAreaProto> Parser { get { return _parser; } }
                return _zos.EnableZip64;
 
            }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[27]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PolygonAreaProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PolygonAreaProto(PolygonAreaProto other) : this() {
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PolygonAreaProto Clone() {
      return new PolygonAreaProto(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PolygonAreaProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PolygonAreaProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PolygonAreaProto other) {
      if (other == null) {
        return;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
         }
         }
      }
    }


  }
         public System.Text.Encoding AlternateEncoding
 
         {
  public sealed partial class SimpleDrawObjectProto : pb::IMessage<SimpleDrawObjectProto> {
            get
    private static readonly pb::MessageParser<SimpleDrawObjectProto> _parser = new pb::MessageParser<SimpleDrawObjectProto>(() => new SimpleDrawObjectProto());
            {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.AlternateEncoding;
    public static pb::MessageParser<SimpleDrawObjectProto> Parser { get { return _parser; } }
                if (_zos!=null) return _zos.AlternateEncoding;
 
                return null;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
            }
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[28]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectProto(SimpleDrawObjectProto other) : this() {
      fieldIndexes_ = other.fieldIndexes_.Clone();
      invalidIndexes_ = other.invalidIndexes_.Clone();
      id_ = other.id_;
      DataFields = other.dataFields_ != null ? other.DataFields.Clone() : null;
      booleanAttributes_ = other.booleanAttributes_;
      compositeDrawObjects_ = other.compositeDrawObjects_.Clone();
      switch (other.TypeFieldsobjectCase) {
        case TypeFieldsobjectOneofCase.TacticalDataFields:
          TacticalDataFields = other.TacticalDataFields.Clone();
          break;
        case TypeFieldsobjectOneofCase.GenericDataFields:
          GenericDataFields = other.GenericDataFields.Clone();
          break;
      }
 
      switch (other.TypeGeopointCase) {
        case TypeGeopointOneofCase.GeoPoints:
          GeoPoints = other.GeoPoints.Clone();
          break;
        case TypeGeopointOneofCase.GeoShiftedIntPoints:
          GeoShiftedIntPoints = other.GeoShiftedIntPoints.Clone();
          break;
      }
 
      switch (other.TypeImplementationsCase) {
        case TypeImplementationsOneofCase.CorridorArea:
          CorridorArea = other.CorridorArea.Clone();
          break;
        case TypeImplementationsOneofCase.FanArea:
          FanArea = other.FanArea.Clone();
          break;
        case TypeImplementationsOneofCase.Ellipse:
          Ellipse = other.Ellipse.Clone();
          break;
        case TypeImplementationsOneofCase.VolPolyArea:
          VolPolyArea = other.VolPolyArea.Clone();
          break;
        case TypeImplementationsOneofCase.VolOrbitArea:
          VolOrbitArea = other.VolOrbitArea.Clone();
          break;
        case TypeImplementationsOneofCase.VolFanArea:
          VolFanArea = other.VolFanArea.Clone();
          break;
        case TypeImplementationsOneofCase.VolEllipse:
          VolEllipse = other.VolEllipse.Clone();
          break;
        case TypeImplementationsOneofCase.VolCorridorArea:
          VolCorridorArea = other.VolCorridorArea.Clone();
          break;
        case TypeImplementationsOneofCase.OrbitArea:
          OrbitArea = other.OrbitArea.Clone();
          break;
        case TypeImplementationsOneofCase.Point:
          Point = other.Point.Clone();
          break;
        case TypeImplementationsOneofCase.RangeRings:
          RangeRings = other.RangeRings.Clone();
          break;
        case TypeImplementationsOneofCase.Line:
          Line = other.Line.Clone();
          break;
        case TypeImplementationsOneofCase.PolygonArea:
          PolygonArea = other.PolygonArea.Clone();
          break;
        case TypeImplementationsOneofCase.ShiftedIntPoint:
          ShiftedIntPoint = other.ShiftedIntPoint.Clone();
          break;
        case TypeImplementationsOneofCase.ShiftedIntOrbitArea:
          ShiftedIntOrbitArea = other.ShiftedIntOrbitArea.Clone();
          break;
        case TypeImplementationsOneofCase.ShiftedIntEllipse:
          ShiftedIntEllipse = other.ShiftedIntEllipse.Clone();
          break;
        case TypeImplementationsOneofCase.ShiftedIntFanArea:
          ShiftedIntFanArea = other.ShiftedIntFanArea.Clone();
          break;
        case TypeImplementationsOneofCase.ShiftedIntRangeRings:
          ShiftedIntRangeRings = other.ShiftedIntRangeRings.Clone();
          break;
      }
 
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectProto Clone() {
      return new SimpleDrawObjectProto(this);
    }
 
    /// <summary>Field number for the "field_indexes" field.</summary>
    public const int FieldIndexesFieldNumber = 1;
    private static readonly pbc::MapField<uint, string>.Codec _map_fieldIndexes_codec
        = new pbc::MapField<uint, string>.Codec(pb::FieldCodec.ForUInt32(8), pb::FieldCodec.ForString(18), 10);
    private readonly pbc::MapField<uint, string> fieldIndexes_ = new pbc::MapField<uint, string>();
    /// <summary>
    ///Key is field index#, Value is version info
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::MapField<uint, string> FieldIndexes {
      get { return fieldIndexes_; }
    }
 
    /// <summary>Field number for the "invalid_indexes" field.</summary>
    public const int InvalidIndexesFieldNumber = 2;
    private static readonly pb::FieldCodec<uint> _repeated_invalidIndexes_codec
        = pb::FieldCodec.ForUInt32(18);
    private readonly pbc::RepeatedField<uint> invalidIndexes_ = new pbc::RepeatedField<uint>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<uint> InvalidIndexes {
      get { return invalidIndexes_; }
    }
 
    /// <summary>Field number for the "Id" field.</summary>
    public const int IdFieldNumber = 3;
    private string id_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "data_fields" field.</summary>
    public const int DataFieldsFieldNumber = 4;
    private global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto dataFields_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto DataFields {
      get { return dataFields_; }
      set {
        dataFields_ = value;
      }
    }
 
    /// <summary>Field number for the "TacticalDataFields" field.</summary>
    public const int TacticalDataFieldsFieldNumber = 5;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto TacticalDataFields {
      get { return typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.TacticalDataFields ? (global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto) typeFieldsobject_ : null; }
      set {
        typeFieldsobject_ = value;
        typeFieldsobjectCase_ = value == null ? TypeFieldsobjectOneofCase.None : TypeFieldsobjectOneofCase.TacticalDataFields;
      }
    }
 
    /// <summary>Field number for the "GenericDataFields" field.</summary>
    public const int GenericDataFieldsFieldNumber = 6;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto GenericDataFields {
      get { return typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.GenericDataFields ? (global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto) typeFieldsobject_ : null; }
      set {
         typeFieldsobject_ = value;
        typeFieldsobjectCase_ = value == null ? TypeFieldsobjectOneofCase.None : TypeFieldsobjectOneofCase.GenericDataFields;
      }
    }
 
    /// <summary>Field number for the "BooleanAttributes" field.</summary>
    public const int BooleanAttributesFieldNumber = 7;
    private uint booleanAttributes_;
    /// <summary>
    ///all ISimpleDrawDrawObject boolean attributes are bitmapped into this attribute
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint BooleanAttributes {
      get { return booleanAttributes_; }
      set {
         booleanAttributes_ = value;
      }
    }
 
    /// <summary>Field number for the "GeoPoints" field.</summary>
    public const int GeoPointsFieldNumber = 8;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto GeoPoints {
      get { return typeGeopointCase_ == TypeGeopointOneofCase.GeoPoints ? (global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto) typeGeopoint_ : null; }
      set {
        typeGeopoint_ = value;
        typeGeopointCase_ = value == null ? TypeGeopointOneofCase.None : TypeGeopointOneofCase.GeoPoints;
      }
    }
 
    /// <summary>Field number for the "GeoShiftedIntPoints" field.</summary>
    public const int GeoShiftedIntPointsFieldNumber = 9;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto GeoShiftedIntPoints {
      get { return typeGeopointCase_ == TypeGeopointOneofCase.GeoShiftedIntPoints ? (global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto) typeGeopoint_ : null; }
      set {
        typeGeopoint_ = value;
        typeGeopointCase_ = value == null ? TypeGeopointOneofCase.None : TypeGeopointOneofCase.GeoShiftedIntPoints;
      }
    }
 
    /// <summary>Field number for the "CorridorArea" field.</summary>
    public const int CorridorAreaFieldNumber = 10;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto CorridorArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.CorridorArea ? (global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.CorridorArea;
      }
    }
 
    /// <summary>Field number for the "FanArea" field.</summary>
    public const int FanAreaFieldNumber = 11;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto FanArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.FanArea ? (global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.FanArea;
      }
    }
 
    /// <summary>Field number for the "Ellipse" field.</summary>
    public const int EllipseFieldNumber = 12;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.EllipseProto Ellipse {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.Ellipse ? (global::TPG.DrawObjects.Serialize.Protoc.EllipseProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.Ellipse;
      }
    }
 
    /// <summary>Field number for the "VolPolyArea" field.</summary>
    public const int VolPolyAreaFieldNumber = 13;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto VolPolyArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.VolPolyArea ? (global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.VolPolyArea;
      }
    }
 
    /// <summary>Field number for the "VolOrbitArea" field.</summary>
    public const int VolOrbitAreaFieldNumber = 14;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto VolOrbitArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.VolOrbitArea ? (global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.VolOrbitArea;
      }
    }
 
    /// <summary>Field number for the "VolFanArea" field.</summary>
    public const int VolFanAreaFieldNumber = 15;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto VolFanArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.VolFanArea ? (global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.VolFanArea;
      }
    }
 
    /// <summary>Field number for the "VolEllipse" field.</summary>
    public const int VolEllipseFieldNumber = 16;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto VolEllipse {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.VolEllipse ? (global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.VolEllipse;
      }
    }
 
    /// <summary>Field number for the "VolCorridorArea" field.</summary>
    public const int VolCorridorAreaFieldNumber = 17;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto VolCorridorArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.VolCorridorArea ? (global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.VolCorridorArea;
      }
    }
 
    /// <summary>Field number for the "OrbitArea" field.</summary>
    public const int OrbitAreaFieldNumber = 18;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto OrbitArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.OrbitArea ? (global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.OrbitArea;
      }
    }
 
    /// <summary>Field number for the "Point" field.</summary>
    public const int PointFieldNumber = 19;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.PointProto Point {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.Point ? (global::TPG.DrawObjects.Serialize.Protoc.PointProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.Point;
      }
    }
 
    /// <summary>Field number for the "RangeRings" field.</summary>
    public const int RangeRingsFieldNumber = 20;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto RangeRings {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.RangeRings ? (global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.RangeRings;
      }
    }
 
    /// <summary>Field number for the "Line" field.</summary>
    public const int LineFieldNumber = 21;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.LineProto Line {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.Line ? (global::TPG.DrawObjects.Serialize.Protoc.LineProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.Line;
      }
    }
 
    /// <summary>Field number for the "PolygonArea" field.</summary>
    public const int PolygonAreaFieldNumber = 22;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto PolygonArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.PolygonArea ? (global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.PolygonArea;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntPoint" field.</summary>
    public const int ShiftedIntPointFieldNumber = 23;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto ShiftedIntPoint {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntPoint ? (global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.ShiftedIntPoint;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntOrbitArea" field.</summary>
    public const int ShiftedIntOrbitAreaFieldNumber = 24;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto ShiftedIntOrbitArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntOrbitArea ? (global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.ShiftedIntOrbitArea;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntEllipse" field.</summary>
    public const int ShiftedIntEllipseFieldNumber = 25;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto ShiftedIntEllipse {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntEllipse ? (global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.ShiftedIntEllipse;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntFanArea" field.</summary>
    public const int ShiftedIntFanAreaFieldNumber = 26;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto ShiftedIntFanArea {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntFanArea ? (global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.ShiftedIntFanArea;
      }
    }
 
    /// <summary>Field number for the "ShiftedIntRangeRings" field.</summary>
    public const int ShiftedIntRangeRingsFieldNumber = 27;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto ShiftedIntRangeRings {
      get { return typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntRangeRings ? (global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto) typeImplementations_ : null; }
      set {
        typeImplementations_ = value;
        typeImplementationsCase_ = value == null ? TypeImplementationsOneofCase.None : TypeImplementationsOneofCase.ShiftedIntRangeRings;
      }
    }
 
    /// <summary>Field number for the "composite_draw_objects" field.</summary>
    public const int CompositeDrawObjectsFieldNumber = 28;
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> _repeated_compositeDrawObjects_codec
        = pb::FieldCodec.ForMessage(226, global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto.Parser);
    private readonly pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> compositeDrawObjects_ = new pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> CompositeDrawObjects {
      get { return compositeDrawObjects_; }
    }
 
    private object typeFieldsobject_;
    /// <summary>Enum of possible cases for the "type_fieldsobject" oneof.</summary>
    public enum TypeFieldsobjectOneofCase {
      None = 0,
      TacticalDataFields = 5,
      GenericDataFields = 6,
    }
    private TypeFieldsobjectOneofCase typeFieldsobjectCase_ = TypeFieldsobjectOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TypeFieldsobjectOneofCase TypeFieldsobjectCase {
      get { return typeFieldsobjectCase_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void ClearTypeFieldsobject() {
      typeFieldsobjectCase_ = TypeFieldsobjectOneofCase.None;
      typeFieldsobject_ = null;
    }
 
    private object typeGeopoint_;
    /// <summary>Enum of possible cases for the "type_geopoint" oneof.</summary>
    public enum TypeGeopointOneofCase {
      None = 0,
      GeoPoints = 8,
      GeoShiftedIntPoints = 9,
    }
    private TypeGeopointOneofCase typeGeopointCase_ = TypeGeopointOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TypeGeopointOneofCase TypeGeopointCase {
      get { return typeGeopointCase_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void ClearTypeGeopoint() {
      typeGeopointCase_ = TypeGeopointOneofCase.None;
      typeGeopoint_ = null;
    }
 
    private object typeImplementations_;
    /// <summary>Enum of possible cases for the "type_implementations" oneof.</summary>
    public enum TypeImplementationsOneofCase {
      None = 0,
      CorridorArea = 10,
      FanArea = 11,
      Ellipse = 12,
      VolPolyArea = 13,
      VolOrbitArea = 14,
      VolFanArea = 15,
      VolEllipse = 16,
      VolCorridorArea = 17,
      OrbitArea = 18,
      Point = 19,
      RangeRings = 20,
      Line = 21,
      PolygonArea = 22,
      ShiftedIntPoint = 23,
      ShiftedIntOrbitArea = 24,
      ShiftedIntEllipse = 25,
      ShiftedIntFanArea = 26,
      ShiftedIntRangeRings = 27,
    }
    private TypeImplementationsOneofCase typeImplementationsCase_ = TypeImplementationsOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public TypeImplementationsOneofCase TypeImplementationsCase {
      get { return typeImplementationsCase_; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void ClearTypeImplementations() {
      typeImplementationsCase_ = TypeImplementationsOneofCase.None;
      typeImplementations_ = null;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SimpleDrawObjectProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SimpleDrawObjectProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!FieldIndexes.Equals(other.FieldIndexes)) return false;
      if(!invalidIndexes_.Equals(other.invalidIndexes_)) return false;
      if (Id != other.Id) return false;
      if (!object.Equals(DataFields, other.DataFields)) return false;
      if (!object.Equals(TacticalDataFields, other.TacticalDataFields)) return false;
      if (!object.Equals(GenericDataFields, other.GenericDataFields)) return false;
      if (BooleanAttributes != other.BooleanAttributes) return false;
      if (!object.Equals(GeoPoints, other.GeoPoints)) return false;
      if (!object.Equals(GeoShiftedIntPoints, other.GeoShiftedIntPoints)) return false;
      if (!object.Equals(CorridorArea, other.CorridorArea)) return false;
      if (!object.Equals(FanArea, other.FanArea)) return false;
      if (!object.Equals(Ellipse, other.Ellipse)) return false;
      if (!object.Equals(VolPolyArea, other.VolPolyArea)) return false;
      if (!object.Equals(VolOrbitArea, other.VolOrbitArea)) return false;
      if (!object.Equals(VolFanArea, other.VolFanArea)) return false;
      if (!object.Equals(VolEllipse, other.VolEllipse)) return false;
      if (!object.Equals(VolCorridorArea, other.VolCorridorArea)) return false;
      if (!object.Equals(OrbitArea, other.OrbitArea)) return false;
      if (!object.Equals(Point, other.Point)) return false;
      if (!object.Equals(RangeRings, other.RangeRings)) return false;
      if (!object.Equals(Line, other.Line)) return false;
      if (!object.Equals(PolygonArea, other.PolygonArea)) return false;
      if (!object.Equals(ShiftedIntPoint, other.ShiftedIntPoint)) return false;
      if (!object.Equals(ShiftedIntOrbitArea, other.ShiftedIntOrbitArea)) return false;
      if (!object.Equals(ShiftedIntEllipse, other.ShiftedIntEllipse)) return false;
      if (!object.Equals(ShiftedIntFanArea, other.ShiftedIntFanArea)) return false;
      if (!object.Equals(ShiftedIntRangeRings, other.ShiftedIntRangeRings)) return false;
      if(!compositeDrawObjects_.Equals(other.compositeDrawObjects_)) return false;
      if (TypeFieldsobjectCase != other.TypeFieldsobjectCase) return false;
      if (TypeGeopointCase != other.TypeGeopointCase) return false;
      if (TypeImplementationsCase != other.TypeImplementationsCase) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= FieldIndexes.GetHashCode();
      hash ^= invalidIndexes_.GetHashCode();
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (dataFields_ != null) hash ^= DataFields.GetHashCode();
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.TacticalDataFields) hash ^= TacticalDataFields.GetHashCode();
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.GenericDataFields) hash ^= GenericDataFields.GetHashCode();
      if (BooleanAttributes != 0) hash ^= BooleanAttributes.GetHashCode();
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoPoints) hash ^= GeoPoints.GetHashCode();
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoShiftedIntPoints) hash ^= GeoShiftedIntPoints.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.CorridorArea) hash ^= CorridorArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.FanArea) hash ^= FanArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Ellipse) hash ^= Ellipse.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolPolyArea) hash ^= VolPolyArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolOrbitArea) hash ^= VolOrbitArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolFanArea) hash ^= VolFanArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolEllipse) hash ^= VolEllipse.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolCorridorArea) hash ^= VolCorridorArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.OrbitArea) hash ^= OrbitArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Point) hash ^= Point.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.RangeRings) hash ^= RangeRings.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Line) hash ^= Line.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.PolygonArea) hash ^= PolygonArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntPoint) hash ^= ShiftedIntPoint.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntOrbitArea) hash ^= ShiftedIntOrbitArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntEllipse) hash ^= ShiftedIntEllipse.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntFanArea) hash ^= ShiftedIntFanArea.GetHashCode();
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntRangeRings) hash ^= ShiftedIntRangeRings.GetHashCode();
      hash ^= compositeDrawObjects_.GetHashCode();
      hash ^= (int) typeFieldsobjectCase_;
      hash ^= (int) typeGeopointCase_;
      hash ^= (int) typeImplementationsCase_;
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      fieldIndexes_.WriteTo(output, _map_fieldIndexes_codec);
      invalidIndexes_.WriteTo(output, _repeated_invalidIndexes_codec);
      if (Id.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Id);
      }
      if (dataFields_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(DataFields);
      }
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.TacticalDataFields) {
        output.WriteRawTag(42);
        output.WriteMessage(TacticalDataFields);
      }
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.GenericDataFields) {
        output.WriteRawTag(50);
        output.WriteMessage(GenericDataFields);
      }
      if (BooleanAttributes != 0) {
        output.WriteRawTag(56);
        output.WriteUInt32(BooleanAttributes);
      }
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoPoints) {
        output.WriteRawTag(66);
        output.WriteMessage(GeoPoints);
      }
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoShiftedIntPoints) {
        output.WriteRawTag(74);
        output.WriteMessage(GeoShiftedIntPoints);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.CorridorArea) {
        output.WriteRawTag(82);
        output.WriteMessage(CorridorArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.FanArea) {
        output.WriteRawTag(90);
        output.WriteMessage(FanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Ellipse) {
        output.WriteRawTag(98);
        output.WriteMessage(Ellipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolPolyArea) {
        output.WriteRawTag(106);
        output.WriteMessage(VolPolyArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolOrbitArea) {
        output.WriteRawTag(114);
        output.WriteMessage(VolOrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolFanArea) {
        output.WriteRawTag(122);
        output.WriteMessage(VolFanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolEllipse) {
        output.WriteRawTag(130, 1);
        output.WriteMessage(VolEllipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolCorridorArea) {
        output.WriteRawTag(138, 1);
        output.WriteMessage(VolCorridorArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.OrbitArea) {
        output.WriteRawTag(146, 1);
        output.WriteMessage(OrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Point) {
        output.WriteRawTag(154, 1);
        output.WriteMessage(Point);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.RangeRings) {
        output.WriteRawTag(162, 1);
        output.WriteMessage(RangeRings);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Line) {
        output.WriteRawTag(170, 1);
        output.WriteMessage(Line);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.PolygonArea) {
        output.WriteRawTag(178, 1);
        output.WriteMessage(PolygonArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntPoint) {
        output.WriteRawTag(186, 1);
        output.WriteMessage(ShiftedIntPoint);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntOrbitArea) {
        output.WriteRawTag(194, 1);
        output.WriteMessage(ShiftedIntOrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntEllipse) {
        output.WriteRawTag(202, 1);
        output.WriteMessage(ShiftedIntEllipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntFanArea) {
        output.WriteRawTag(210, 1);
        output.WriteMessage(ShiftedIntFanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntRangeRings) {
        output.WriteRawTag(218, 1);
        output.WriteMessage(ShiftedIntRangeRings);
      }
      compositeDrawObjects_.WriteTo(output, _repeated_compositeDrawObjects_codec);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += fieldIndexes_.CalculateSize(_map_fieldIndexes_codec);
      size += invalidIndexes_.CalculateSize(_repeated_invalidIndexes_codec);
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (dataFields_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DataFields);
      }
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.TacticalDataFields) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(TacticalDataFields);
      }
      if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.GenericDataFields) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(GenericDataFields);
      }
      if (BooleanAttributes != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(BooleanAttributes);
      }
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoPoints) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(GeoPoints);
      }
      if (typeGeopointCase_ == TypeGeopointOneofCase.GeoShiftedIntPoints) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(GeoShiftedIntPoints);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.CorridorArea) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CorridorArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.FanArea) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(FanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Ellipse) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Ellipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolPolyArea) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(VolPolyArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolOrbitArea) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(VolOrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolFanArea) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(VolFanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolEllipse) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(VolEllipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolCorridorArea) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(VolCorridorArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.OrbitArea) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(OrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Point) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(Point);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.RangeRings) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(RangeRings);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.Line) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(Line);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.PolygonArea) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(PolygonArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntPoint) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntPoint);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntOrbitArea) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntOrbitArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntEllipse) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntEllipse);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntFanArea) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntFanArea);
      }
      if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntRangeRings) {
        size += 2 + pb::CodedOutputStream.ComputeMessageSize(ShiftedIntRangeRings);
      }
      size += compositeDrawObjects_.CalculateSize(_repeated_compositeDrawObjects_codec);
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SimpleDrawObjectProto other) {
      if (other == null) {
        return;
      }
      fieldIndexes_.Add(other.fieldIndexes_);
      invalidIndexes_.Add(other.invalidIndexes_);
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      if (other.dataFields_ != null) {
        if (dataFields_ == null) {
          dataFields_ = new global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto();
         }
         }
         DataFields.MergeFrom(other.DataFields);
         public System.Text.Encoding DefaultEncoding
      }
         {
      if (other.BooleanAttributes != 0) {
             get
        BooleanAttributes = other.BooleanAttributes;
             {
      }
                if (_zf != null) return ZipFile.DefaultEncoding;
      compositeDrawObjects_.Add(other.compositeDrawObjects_);
                if (_zos!=null) return ZipOutputStream.DefaultEncoding;
      switch (other.TypeFieldsobjectCase) {
                return null;
        case TypeFieldsobjectOneofCase.TacticalDataFields:
          TacticalDataFields = other.TacticalDataFields;
          break;
        case TypeFieldsobjectOneofCase.GenericDataFields:
          GenericDataFields = other.GenericDataFields;
          break;
      }
 
      switch (other.TypeGeopointCase) {
        case TypeGeopointOneofCase.GeoPoints:
          GeoPoints = other.GeoPoints;
          break;
        case TypeGeopointOneofCase.GeoShiftedIntPoints:
          GeoShiftedIntPoints = other.GeoShiftedIntPoints;
          break;
      }
 
      switch (other.TypeImplementationsCase) {
        case TypeImplementationsOneofCase.CorridorArea:
          CorridorArea = other.CorridorArea;
          break;
        case TypeImplementationsOneofCase.FanArea:
          FanArea = other.FanArea;
          break;
        case TypeImplementationsOneofCase.Ellipse:
          Ellipse = other.Ellipse;
          break;
        case TypeImplementationsOneofCase.VolPolyArea:
          VolPolyArea = other.VolPolyArea;
          break;
        case TypeImplementationsOneofCase.VolOrbitArea:
          VolOrbitArea = other.VolOrbitArea;
          break;
        case TypeImplementationsOneofCase.VolFanArea:
          VolFanArea = other.VolFanArea;
          break;
        case TypeImplementationsOneofCase.VolEllipse:
          VolEllipse = other.VolEllipse;
          break;
        case TypeImplementationsOneofCase.VolCorridorArea:
          VolCorridorArea = other.VolCorridorArea;
          break;
        case TypeImplementationsOneofCase.OrbitArea:
          OrbitArea = other.OrbitArea;
          break;
        case TypeImplementationsOneofCase.Point:
          Point = other.Point;
          break;
        case TypeImplementationsOneofCase.RangeRings:
          RangeRings = other.RangeRings;
          break;
        case TypeImplementationsOneofCase.Line:
          Line = other.Line;
          break;
        case TypeImplementationsOneofCase.PolygonArea:
          PolygonArea = other.PolygonArea;
          break;
        case TypeImplementationsOneofCase.ShiftedIntPoint:
          ShiftedIntPoint = other.ShiftedIntPoint;
          break;
        case TypeImplementationsOneofCase.ShiftedIntOrbitArea:
          ShiftedIntOrbitArea = other.ShiftedIntOrbitArea;
          break;
        case TypeImplementationsOneofCase.ShiftedIntEllipse:
          ShiftedIntEllipse = other.ShiftedIntEllipse;
          break;
        case TypeImplementationsOneofCase.ShiftedIntFanArea:
          ShiftedIntFanArea = other.ShiftedIntFanArea;
          break;
        case TypeImplementationsOneofCase.ShiftedIntRangeRings:
          ShiftedIntRangeRings = other.ShiftedIntRangeRings;
          break;
      }
 
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
         switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            fieldIndexes_.AddEntriesFrom(input, _map_fieldIndexes_codec);
            break;
          }
          case 18:
          case 16: {
            invalidIndexes_.AddEntriesFrom(input, _repeated_invalidIndexes_codec);
            break;
          }
          case 26: {
            Id = input.ReadString();
            break;
          }
          case 34: {
            if (dataFields_ == null) {
              dataFields_ = new global::TPG.DrawObjects.Serialize.Protoc.DataFieldsProto();
             }
             }
            input.ReadMessage(dataFields_);
        }
            break;
        public ZipOption AlternateEncodingUsage
          }
        {
          case 42: {
             get
            global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.TacticalFieldsProto();
             {
            if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.TacticalDataFields) {
                if (_zf != null) return _zf.AlternateEncodingUsage;
              subBuilder.MergeFrom(TacticalDataFields);
                if (_zos!=null) return _zos.AlternateEncodingUsage;
            }
                return ZipOption.Never; // n/a
            input.ReadMessage(subBuilder);
             TacticalDataFields = subBuilder;
             break;
          }
          case 50: {
            global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.GenericFieldsProto();
            if (typeFieldsobjectCase_ == TypeFieldsobjectOneofCase.GenericDataFields) {
              subBuilder.MergeFrom(GenericDataFields);
            }
            input.ReadMessage(subBuilder);
            GenericDataFields = subBuilder;
            break;
          }
          case 56: {
            BooleanAttributes = input.ReadUInt32();
            break;
          }
          case 66: {
            global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.GeoDoublePointsProto();
            if (typeGeopointCase_ == TypeGeopointOneofCase.GeoPoints) {
              subBuilder.MergeFrom(GeoPoints);
             }
             }
            input.ReadMessage(subBuilder);
            GeoPoints = subBuilder;
            break;
          }
          case 74: {
            global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.GeoShiftedIntPointsProto();
            if (typeGeopointCase_ == TypeGeopointOneofCase.GeoShiftedIntPoints) {
              subBuilder.MergeFrom(GeoShiftedIntPoints);
            }
            input.ReadMessage(subBuilder);
            GeoShiftedIntPoints = subBuilder;
            break;
          }
          case 82: {
            global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.CorridorAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.CorridorArea) {
              subBuilder.MergeFrom(CorridorArea);
            }
            input.ReadMessage(subBuilder);
            CorridorArea = subBuilder;
            break;
          }
          case 90: {
            global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.FanArea) {
              subBuilder.MergeFrom(FanArea);
            }
            input.ReadMessage(subBuilder);
            FanArea = subBuilder;
            break;
          }
          case 98: {
            global::TPG.DrawObjects.Serialize.Protoc.EllipseProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.EllipseProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.Ellipse) {
              subBuilder.MergeFrom(Ellipse);
            }
            input.ReadMessage(subBuilder);
            Ellipse = subBuilder;
            break;
          }
          case 106: {
            global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.VolPolyAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolPolyArea) {
              subBuilder.MergeFrom(VolPolyArea);
            }
            input.ReadMessage(subBuilder);
            VolPolyArea = subBuilder;
            break;
          }
          case 114: {
            global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.VolOrbitAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolOrbitArea) {
              subBuilder.MergeFrom(VolOrbitArea);
            }
            input.ReadMessage(subBuilder);
            VolOrbitArea = subBuilder;
            break;
          }
          case 122: {
            global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.VolFanAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolFanArea) {
              subBuilder.MergeFrom(VolFanArea);
            }
            input.ReadMessage(subBuilder);
            VolFanArea = subBuilder;
            break;
          }
          case 130: {
            global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.VolEllipseProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolEllipse) {
              subBuilder.MergeFrom(VolEllipse);
            }
            input.ReadMessage(subBuilder);
            VolEllipse = subBuilder;
            break;
          }
          case 138: {
            global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.VolCorridorAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.VolCorridorArea) {
              subBuilder.MergeFrom(VolCorridorArea);
            }
            input.ReadMessage(subBuilder);
            VolCorridorArea = subBuilder;
            break;
          }
          case 146: {
            global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.OrbitArea) {
              subBuilder.MergeFrom(OrbitArea);
            }
            input.ReadMessage(subBuilder);
            OrbitArea = subBuilder;
            break;
          }
          case 154: {
            global::TPG.DrawObjects.Serialize.Protoc.PointProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.PointProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.Point) {
              subBuilder.MergeFrom(Point);
            }
            input.ReadMessage(subBuilder);
            Point = subBuilder;
            break;
          }
          case 162: {
            global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.RangeRingsProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.RangeRings) {
              subBuilder.MergeFrom(RangeRings);
            }
            input.ReadMessage(subBuilder);
            RangeRings = subBuilder;
            break;
          }
          case 170: {
            global::TPG.DrawObjects.Serialize.Protoc.LineProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.LineProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.Line) {
              subBuilder.MergeFrom(Line);
            }
            input.ReadMessage(subBuilder);
            Line = subBuilder;
            break;
          }
          case 178: {
            global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.PolygonAreaProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.PolygonArea) {
              subBuilder.MergeFrom(PolygonArea);
            }
            input.ReadMessage(subBuilder);
            PolygonArea = subBuilder;
            break;
          }
          case 186: {
            global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.PointShiftedIntProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntPoint) {
              subBuilder.MergeFrom(ShiftedIntPoint);
            }
            input.ReadMessage(subBuilder);
            ShiftedIntPoint = subBuilder;
            break;
          }
          case 194: {
            global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.OrbitAreaShiftedIntProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntOrbitArea) {
              subBuilder.MergeFrom(ShiftedIntOrbitArea);
            }
            input.ReadMessage(subBuilder);
            ShiftedIntOrbitArea = subBuilder;
            break;
          }
          case 202: {
            global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.EllipseAsShiftedIntProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntEllipse) {
              subBuilder.MergeFrom(ShiftedIntEllipse);
            }
            input.ReadMessage(subBuilder);
            ShiftedIntEllipse = subBuilder;
            break;
          }
          case 210: {
            global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.FanAreaAsShiftedIntProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntFanArea) {
              subBuilder.MergeFrom(ShiftedIntFanArea);
            }
            input.ReadMessage(subBuilder);
            ShiftedIntFanArea = subBuilder;
            break;
          }
          case 218: {
            global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto subBuilder = new global::TPG.DrawObjects.Serialize.Protoc.RangeRingsShiftedIntProto();
            if (typeImplementationsCase_ == TypeImplementationsOneofCase.ShiftedIntRangeRings) {
              subBuilder.MergeFrom(ShiftedIntRangeRings);
            }
            input.ReadMessage(subBuilder);
            ShiftedIntRangeRings = subBuilder;
            break;
          }
          case 226: {
            compositeDrawObjects_.AddEntriesFrom(input, _repeated_compositeDrawObjects_codec);
            break;
          }
         }
         }
      }
    }


  }
         public Stream ReadStream
 
         {
  public sealed partial class SimpleDrawObjectsProto : pb::IMessage<SimpleDrawObjectsProto> {
             get
    private static readonly pb::MessageParser<SimpleDrawObjectsProto> _parser = new pb::MessageParser<SimpleDrawObjectsProto>(() => new SimpleDrawObjectsProto());
             {
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
                if (_zf != null) return _zf.ReadStream;
    public static pb::MessageParser<SimpleDrawObjectsProto> Parser { get { return _parser; } }
                return _zis.ReadStream;
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[29]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectsProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectsProto(SimpleDrawObjectsProto other) : this() {
      drawobjects_ = other.drawobjects_.Clone();
      dataVersion_ = other.dataVersion_;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SimpleDrawObjectsProto Clone() {
      return new SimpleDrawObjectsProto(this);
    }
 
    /// <summary>Field number for the "drawobjects" field.</summary>
    public const int DrawobjectsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> _repeated_drawobjects_codec
        = pb::FieldCodec.ForMessage(10, global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto.Parser);
    private readonly pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> drawobjects_ = new pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto> Drawobjects {
      get { return drawobjects_; }
    }
 
    /// <summary>Field number for the "data_version" field.</summary>
    public const int DataVersionFieldNumber = 2;
    private uint dataVersion_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint DataVersion {
      get { return dataVersion_; }
      set {
         dataVersion_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SimpleDrawObjectsProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SimpleDrawObjectsProto other) {
      if (ReferenceEquals(other, null)) {
         return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!drawobjects_.Equals(other.drawobjects_)) return false;
      if (DataVersion != other.DataVersion) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= drawobjects_.GetHashCode();
      if (DataVersion != 0) hash ^= DataVersion.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      drawobjects_.WriteTo(output, _repeated_drawobjects_codec);
      if (DataVersion != 0) {
        output.WriteRawTag(16);
        output.WriteUInt32(DataVersion);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += drawobjects_.CalculateSize(_repeated_drawobjects_codec);
      if (DataVersion != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(DataVersion);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SimpleDrawObjectsProto other) {
      if (other == null) {
        return;
      }
      drawobjects_.Add(other.drawobjects_);
      if (other.DataVersion != 0) {
        DataVersion = other.DataVersion;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
             input.SkipLastField();
             break;
          case 10: {
            drawobjects_.AddEntriesFrom(input, _repeated_drawobjects_codec);
            break;
          }
          case 16: {
            DataVersion = input.ReadUInt32();
            break;
          }
        }
      }
    }
 
  }
 
  public sealed partial class DrawObjectProto : pb::IMessage<DrawObjectProto> {
    private static readonly pb::MessageParser<DrawObjectProto> _parser = new pb::MessageParser<DrawObjectProto>(() => new DrawObjectProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DrawObjectProto> Parser { get { return _parser; } }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[30]; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectProto() {
      OnConstruction();
    }
 
    partial void OnConstruction();
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectProto(DrawObjectProto other) : this() {
      Simpledrawobject = other.simpledrawobject_ != null ? other.Simpledrawobject.Clone() : null;
      c2525Code_ = other.c2525Code_;
      useDefaultEnums_ = other.useDefaultEnums_;
      useDefaultValuesInDataFields_ = other.useDefaultValuesInDataFields_;
      useDefaultValuesInExtendedFields_ = other.useDefaultValuesInExtendedFields_;
      useDefaultValuesInTypeFields_ = other.useDefaultValuesInTypeFields_;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectProto Clone() {
      return new DrawObjectProto(this);
    }
 
    /// <summary>Field number for the "simpledrawobject" field.</summary>
    public const int SimpledrawobjectFieldNumber = 1;
    private global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto simpledrawobject_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto Simpledrawobject {
      get { return simpledrawobject_; }
      set {
        simpledrawobject_ = value;
      }
    }
 
    /// <summary>Field number for the "c2525Code" field.</summary>
    public const int C2525CodeFieldNumber = 2;
    private string c2525Code_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string C2525Code {
      get { return c2525Code_; }
      set {
        c2525Code_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }
 
    /// <summary>Field number for the "UseDefaultEnums" field.</summary>
    public const int UseDefaultEnumsFieldNumber = 3;
    private uint useDefaultEnums_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint UseDefaultEnums {
      get { return useDefaultEnums_; }
      set {
        useDefaultEnums_ = value;
      }
    }
 
    /// <summary>Field number for the "UseDefaultValuesInDataFields" field.</summary>
    public const int UseDefaultValuesInDataFieldsFieldNumber = 4;
    private uint useDefaultValuesInDataFields_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint UseDefaultValuesInDataFields {
      get { return useDefaultValuesInDataFields_; }
      set {
        useDefaultValuesInDataFields_ = value;
      }
    }
 
    /// <summary>Field number for the "UseDefaultValuesInExtendedFields" field.</summary>
    public const int UseDefaultValuesInExtendedFieldsFieldNumber = 5;
    private uint useDefaultValuesInExtendedFields_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint UseDefaultValuesInExtendedFields {
      get { return useDefaultValuesInExtendedFields_; }
      set {
        useDefaultValuesInExtendedFields_ = value;
      }
    }
 
    /// <summary>Field number for the "UseDefaultValuesInTypeFields" field.</summary>
    public const int UseDefaultValuesInTypeFieldsFieldNumber = 6;
    private uint useDefaultValuesInTypeFields_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint UseDefaultValuesInTypeFields {
      get { return useDefaultValuesInTypeFields_; }
      set {
        useDefaultValuesInTypeFields_ = value;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DrawObjectProto);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DrawObjectProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Simpledrawobject, other.Simpledrawobject)) return false;
      if (C2525Code != other.C2525Code) return false;
      if (UseDefaultEnums != other.UseDefaultEnums) return false;
      if (UseDefaultValuesInDataFields != other.UseDefaultValuesInDataFields) return false;
      if (UseDefaultValuesInExtendedFields != other.UseDefaultValuesInExtendedFields) return false;
      if (UseDefaultValuesInTypeFields != other.UseDefaultValuesInTypeFields) return false;
      return true;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (simpledrawobject_ != null) hash ^= Simpledrawobject.GetHashCode();
      if (C2525Code.Length != 0) hash ^= C2525Code.GetHashCode();
      if (UseDefaultEnums != 0) hash ^= UseDefaultEnums.GetHashCode();
      if (UseDefaultValuesInDataFields != 0) hash ^= UseDefaultValuesInDataFields.GetHashCode();
      if (UseDefaultValuesInExtendedFields != 0) hash ^= UseDefaultValuesInExtendedFields.GetHashCode();
      if (UseDefaultValuesInTypeFields != 0) hash ^= UseDefaultValuesInTypeFields.GetHashCode();
      return hash;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (simpledrawobject_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Simpledrawobject);
      }
      if (C2525Code.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(C2525Code);
      }
      if (UseDefaultEnums != 0) {
        output.WriteRawTag(24);
        output.WriteUInt32(UseDefaultEnums);
      }
      if (UseDefaultValuesInDataFields != 0) {
        output.WriteRawTag(32);
        output.WriteUInt32(UseDefaultValuesInDataFields);
      }
      if (UseDefaultValuesInExtendedFields != 0) {
        output.WriteRawTag(40);
        output.WriteUInt32(UseDefaultValuesInExtendedFields);
      }
      if (UseDefaultValuesInTypeFields != 0) {
        output.WriteRawTag(48);
        output.WriteUInt32(UseDefaultValuesInTypeFields);
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (simpledrawobject_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Simpledrawobject);
      }
      if (C2525Code.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(C2525Code);
      }
      if (UseDefaultEnums != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(UseDefaultEnums);
      }
      if (UseDefaultValuesInDataFields != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(UseDefaultValuesInDataFields);
      }
      if (UseDefaultValuesInExtendedFields != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(UseDefaultValuesInExtendedFields);
      }
      if (UseDefaultValuesInTypeFields != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(UseDefaultValuesInTypeFields);
      }
      return size;
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DrawObjectProto other) {
      if (other == null) {
        return;
      }
      if (other.simpledrawobject_ != null) {
        if (simpledrawobject_ == null) {
          simpledrawobject_ = new global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto();
        }
        Simpledrawobject.MergeFrom(other.Simpledrawobject);
      }
      if (other.C2525Code.Length != 0) {
        C2525Code = other.C2525Code;
      }
      if (other.UseDefaultEnums != 0) {
        UseDefaultEnums = other.UseDefaultEnums;
      }
      if (other.UseDefaultValuesInDataFields != 0) {
        UseDefaultValuesInDataFields = other.UseDefaultValuesInDataFields;
      }
      if (other.UseDefaultValuesInExtendedFields != 0) {
        UseDefaultValuesInExtendedFields = other.UseDefaultValuesInExtendedFields;
      }
      if (other.UseDefaultValuesInTypeFields != 0) {
        UseDefaultValuesInTypeFields = other.UseDefaultValuesInTypeFields;
      }
    }
 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            if (simpledrawobject_ == null) {
              simpledrawobject_ = new global::TPG.DrawObjects.Serialize.Protoc.SimpleDrawObjectProto();
             }
             }
            input.ReadMessage(simpledrawobject_);
            break;
          }
          case 18: {
            C2525Code = input.ReadString();
            break;
          }
          case 24: {
            UseDefaultEnums = input.ReadUInt32();
            break;
          }
          case 32: {
            UseDefaultValuesInDataFields = input.ReadUInt32();
            break;
          }
          case 40: {
            UseDefaultValuesInExtendedFields = input.ReadUInt32();
            break;
          }
          case 48: {
            UseDefaultValuesInTypeFields = input.ReadUInt32();
            break;
          }
         }
         }
      }
    }
  }
  public sealed partial class DrawObjectsProto : pb::IMessage<DrawObjectsProto> {
    private static readonly pb::MessageParser<DrawObjectsProto> _parser = new pb::MessageParser<DrawObjectsProto>(() => new DrawObjectsProto());
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<DrawObjectsProto> Parser { get { return _parser; } }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::TPG.DrawObjects.Serialize.Protoc.SimpledrawobjectReflection.Descriptor.MessageTypes[31]; }
     }
     }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectsProto() {
      OnConstruction();
    }
    partial void OnConstruction();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectsProto(DrawObjectsProto other) : this() {
      drawobjects_ = other.drawobjects_.Clone();
      dataVersion_ = other.dataVersion_;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public DrawObjectsProto Clone() {
      return new DrawObjectsProto(this);
    }
    /// <summary>Field number for the "drawobjects" field.</summary>
    public const int DrawobjectsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto> _repeated_drawobjects_codec
        = pb::FieldCodec.ForMessage(10, global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto.Parser);
    private readonly pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto> drawobjects_ = new pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::TPG.DrawObjects.Serialize.Protoc.DrawObjectProto> Drawobjects {
      get { return drawobjects_; }
    }
    /// <summary>Field number for the "data_version" field.</summary>
    public const int DataVersionFieldNumber = 2;
    private uint dataVersion_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint DataVersion {
      get { return dataVersion_; }
      set {
        dataVersion_ = value;
      }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as DrawObjectsProto);
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(DrawObjectsProto other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!drawobjects_.Equals(other.drawobjects_)) return false;
      if (DataVersion != other.DataVersion) return false;
      return true;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= drawobjects_.GetHashCode();
      if (DataVersion != 0) hash ^= DataVersion.GetHashCode();
      return hash;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      drawobjects_.WriteTo(output, _repeated_drawobjects_codec);
      if (DataVersion != 0) {
        output.WriteRawTag(16);
        output.WriteUInt32(DataVersion);
      }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += drawobjects_.CalculateSize(_repeated_drawobjects_codec);
      if (DataVersion != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(DataVersion);
      }
      return size;
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(DrawObjectsProto other) {
      if (other == null) {
        return;
      }
      drawobjects_.Add(other.drawobjects_);
      if (other.DataVersion != 0) {
        DataVersion = other.DataVersion;
      }
    }
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            input.SkipLastField();
            break;
          case 10: {
            drawobjects_.AddEntriesFrom(input, _repeated_drawobjects_codec);
            break;
          }
          case 16: {
            DataVersion = input.ReadUInt32();
            break;
          }
        }
      }
    }
  }
  #endregion


}
}
#endregion Designer generated code


</source>
</source>

Revision as of 12:37, 1 August 2019

Her skal Mari leke.

This is an error! Or maybe a warning!
Tip: Here is a good tip!
Remember to always do the thing

Gigantisk haug med kode:

// ZipOutputStream.cs
//
// ------------------------------------------------------------------
//
// Copyright (c) 2009 Dino Chiesa.
// All rights reserved.
//
// This code module is part of DotNetZip, a zipfile class library.
//
// ------------------------------------------------------------------
//
// This code is licensed under the Microsoft Public License.
// See the file License.txt for the license details.
// More info on: http://dotnetzip.codeplex.com
//
// ------------------------------------------------------------------
//
// last saved (in emacs):
// Time-stamp: <2011-July-28 06:34:30>
//
// ------------------------------------------------------------------
//
// This module defines the ZipOutputStream class, which is a stream metaphor for
// generating zip files.  This class does not depend on Ionic.Zip.ZipFile, but rather
// stands alongside it as an alternative "container" for ZipEntry.  It replicates a
// subset of the properties, including these:
//
//  - Comment
//  - Encryption
//  - Password
//  - CodecBufferSize
//  - CompressionLevel
//  - CompressionMethod
//  - EnableZip64 (UseZip64WhenSaving)
//  - IgnoreCase (!CaseSensitiveRetrieval)
//
// It adds these novel methods:
//
//  - PutNextEntry
//
//
// ------------------------------------------------------------------
//

using System;
using System.Threading;
using System.Collections.Generic;
using System.IO;
using Ionic.Zip;

namespace Ionic.Zip
{
    /// <summary>
    ///   Provides a stream metaphor for generating zip files.
    /// </summary>
    ///
    /// <remarks>
    /// <para>
    ///   This class writes zip files, as defined in the <see
    ///   href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">specification
    ///   for zip files described by PKWare</see>.  The compression for this
    ///   implementation is provided by a managed-code version of Zlib, included with
    ///   DotNetZip in the classes in the Ionic.Zlib namespace.
    /// </para>
    ///
    /// <para>
    ///   This class provides an alternative programming model to the one enabled by the
    ///   <see cref="ZipFile"/> class. Use this when creating zip files, as an
    ///   alternative to the <see cref="ZipFile"/> class, when you would like to use a
    ///   <c>Stream</c> type to write the zip file.
    /// </para>
    ///
    /// <para>
    ///   Both the <c>ZipOutputStream</c> class and the <c>ZipFile</c> class can be used
    ///   to create zip files. Both of them support many of the common zip features,
    ///   including Unicode, different compression levels, and ZIP64.   They provide
    ///   very similar performance when creating zip files.
    /// </para>
    ///
    /// <para>
    ///   The <c>ZipFile</c> class is generally easier to use than
    ///   <c>ZipOutputStream</c> and should be considered a higher-level interface.  For
    ///   example, when creating a zip file via calls to the <c>PutNextEntry()</c> and
    ///   <c>Write()</c> methods on the <c>ZipOutputStream</c> class, the caller is
    ///   responsible for opening the file, reading the bytes from the file, writing
    ///   those bytes into the <c>ZipOutputStream</c>, setting the attributes on the
    ///   <c>ZipEntry</c>, and setting the created, last modified, and last accessed
    ///   timestamps on the zip entry. All of these things are done automatically by a
    ///   call to <see cref="ZipFile.AddFile(string,string)">ZipFile.AddFile()</see>.
    ///   For this reason, the <c>ZipOutputStream</c> is generally recommended for use
    ///   only when your application emits arbitrary data, not necessarily data from a
    ///   filesystem file, directly into a zip file, and does so using a <c>Stream</c>
    ///   metaphor.
    /// </para>
    ///
    /// <para>
    ///   Aside from the differences in programming model, there are other
    ///   differences in capability between the two classes.
    /// </para>
    ///
    /// <list type="bullet">
    ///   <item>
    ///     <c>ZipFile</c> can be used to read and extract zip files, in addition to
    ///     creating zip files. <c>ZipOutputStream</c> cannot read zip files. If you want
    ///     to use a stream to read zip files, check out the <see cref="ZipInputStream"/> class.
    ///   </item>
    ///
    ///   <item>
    ///     <c>ZipOutputStream</c> does not support the creation of segmented or spanned
    ///     zip files.
    ///   </item>
    ///
    ///   <item>
    ///     <c>ZipOutputStream</c> cannot produce a self-extracting archive.
    ///   </item>
    /// </list>
    ///
    /// <para>
    ///   Be aware that the <c>ZipOutputStream</c> class implements the <see
    ///   cref="System.IDisposable"/> interface.  In order for
    ///   <c>ZipOutputStream</c> to produce a valid zip file, you use use it within
    ///   a using clause (<c>Using</c> in VB), or call the <c>Dispose()</c> method
    ///   explicitly.  See the examples for how to employ a using clause.
    /// </para>
    ///
    /// <para>
    ///   Also, a note regarding compression performance: On the desktop .NET
    ///   Framework, DotNetZip can use a multi-threaded compression implementation
    ///   that provides significant speed increases on large files, over 300k or so,
    ///   at the cost of increased memory use at runtime.  (The output of the
    ///   compression is almost exactly the same size).  But, the multi-threaded
    ///   approach incurs a performance hit on smaller files. There's no way for the
    ///   ZipOutputStream to know whether parallel compression will be beneficial,
    ///   because the ZipOutputStream does not know how much data you will write
    ///   through the stream.  You may wish to set the <see
    ///   cref="ParallelDeflateThreshold"/> property to zero, if you are compressing
    ///   large files through <c>ZipOutputStream</c>.  This will cause parallel
    ///   compression to be used, always.
    /// </para>
    /// </remarks>
    public class ZipOutputStream : Stream
    {
        /// <summary>
        ///   Create a ZipOutputStream, wrapping an existing stream.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   The <see cref="ZipFile"/> class is generally easier to use when creating
        ///   zip files. The ZipOutputStream offers a different metaphor for creating a
        ///   zip file, based on the <see cref="System.IO.Stream"/> class.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <param name="stream">
        /// The stream to wrap. It must be writable. This stream will be closed at
        /// the time the ZipOutputStream is closed.
        /// </param>
        ///
        /// <example>
        ///
        ///   This example shows how to create a zip file, using the
        ///   ZipOutputStream class.
        ///
        /// <code lang="C#">
        /// private void Zipup()
        /// {
        ///     if (filesToZip.Count == 0)
        ///     {
        ///         System.Console.WriteLine("Nothing to do.");
        ///         return;
        ///     }
        ///
        ///     using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite ))
        ///     {
        ///         using (var output= new ZipOutputStream(raw))
        ///         {
        ///             output.Password = "VerySecret!";
        ///             output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///
        ///             foreach (string inputFileName in filesToZip)
        ///             {
        ///                 System.Console.WriteLine("file: {0}", inputFileName);
        ///
        ///                 output.PutNextEntry(inputFileName);
        ///                 using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write ))
        ///                 {
        ///                     byte[] buffer= new byte[2048];
        ///                     int n;
        ///                     while ((n= input.Read(buffer,0,buffer.Length)) > 0)
        ///                     {
        ///                         output.Write(buffer,0,n);
        ///                     }
        ///                 }
        ///             }
        ///         }
        ///     }
        /// }
        /// </code>
        ///
        /// <code lang="VB">
        /// Private Sub Zipup()
        ///     Dim outputFileName As String = "XmlData.zip"
        ///     Dim filesToZip As String() = Directory.GetFiles(".", "*.xml")
        ///     If (filesToZip.Length = 0) Then
        ///         Console.WriteLine("Nothing to do.")
        ///     Else
        ///         Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite)
        ///             Using output As ZipOutputStream = New ZipOutputStream(raw)
        ///                 output.Password = "VerySecret!"
        ///                 output.Encryption = EncryptionAlgorithm.WinZipAes256
        ///                 Dim inputFileName As String
        ///                 For Each inputFileName In filesToZip
        ///                     Console.WriteLine("file: {0}", inputFileName)
        ///                     output.PutNextEntry(inputFileName)
        ///                     Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        ///                         Dim n As Integer
        ///                         Dim buffer As Byte() = New Byte(2048) {}
        ///                         Do While (n = input.Read(buffer, 0, buffer.Length) > 0)
        ///                             output.Write(buffer, 0, n)
        ///                         Loop
        ///                     End Using
        ///                 Next
        ///             End Using
        ///         End Using
        ///     End If
        /// End Sub
        /// </code>
        /// </example>
        public ZipOutputStream(Stream stream) : this(stream, false) { }


        /// <summary>
        ///   Create a ZipOutputStream that writes to a filesystem file.
        /// </summary>
        ///
        /// <remarks>
        ///   The <see cref="ZipFile"/> class is generally easier to use when creating
        ///   zip files. The ZipOutputStream offers a different metaphor for creating a
        ///   zip file, based on the <see cref="System.IO.Stream"/> class.
        /// </remarks>
        ///
        /// <param name="fileName">
        ///   The name of the zip file to create.
        /// </param>
        ///
        /// <example>
        ///
        ///   This example shows how to create a zip file, using the
        ///   ZipOutputStream class.
        ///
        /// <code lang="C#">
        /// private void Zipup()
        /// {
        ///     if (filesToZip.Count == 0)
        ///     {
        ///         System.Console.WriteLine("Nothing to do.");
        ///         return;
        ///     }
        ///
        ///     using (var output= new ZipOutputStream(outputFileName))
        ///     {
        ///         output.Password = "VerySecret!";
        ///         output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///
        ///         foreach (string inputFileName in filesToZip)
        ///         {
        ///             System.Console.WriteLine("file: {0}", inputFileName);
        ///
        ///             output.PutNextEntry(inputFileName);
        ///             using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read,
        ///                                          FileShare.Read | FileShare.Write ))
        ///             {
        ///                 byte[] buffer= new byte[2048];
        ///                 int n;
        ///                 while ((n= input.Read(buffer,0,buffer.Length)) > 0)
        ///                 {
        ///                     output.Write(buffer,0,n);
        ///                 }
        ///             }
        ///         }
        ///     }
        /// }
        /// </code>
        ///
        /// <code lang="VB">
        /// Private Sub Zipup()
        ///     Dim outputFileName As String = "XmlData.zip"
        ///     Dim filesToZip As String() = Directory.GetFiles(".", "*.xml")
        ///     If (filesToZip.Length = 0) Then
        ///         Console.WriteLine("Nothing to do.")
        ///     Else
        ///         Using output As ZipOutputStream = New ZipOutputStream(outputFileName)
        ///             output.Password = "VerySecret!"
        ///             output.Encryption = EncryptionAlgorithm.WinZipAes256
        ///             Dim inputFileName As String
        ///             For Each inputFileName In filesToZip
        ///                 Console.WriteLine("file: {0}", inputFileName)
        ///                 output.PutNextEntry(inputFileName)
        ///                 Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        ///                     Dim n As Integer
        ///                     Dim buffer As Byte() = New Byte(2048) {}
        ///                     Do While (n = input.Read(buffer, 0, buffer.Length) > 0)
        ///                         output.Write(buffer, 0, n)
        ///                     Loop
        ///                 End Using
        ///             Next
        ///         End Using
        ///     End If
        /// End Sub
        /// </code>
        /// </example>
        public ZipOutputStream(String fileName)
        {
            Stream stream = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
            _Init(stream, false, fileName);
        }


        /// <summary>
        ///   Create a ZipOutputStream.
        /// </summary>
        ///
        /// <remarks>
        ///   See the documentation for the <see
        ///   cref="ZipOutputStream(Stream)">ZipOutputStream(Stream)</see>
        ///   constructor for an example.
        /// </remarks>
        ///
        /// <param name="stream">
        ///   The stream to wrap. It must be writable.
        /// </param>
        ///
        /// <param name="leaveOpen">
        ///   true if the application would like the stream
        ///   to remain open after the <c>ZipOutputStream</c> has been closed.
        /// </param>
        public ZipOutputStream(Stream stream, bool leaveOpen)
        {
            _Init(stream, leaveOpen, null);
        }

        private void _Init(Stream stream, bool leaveOpen, string name)
        {
            // workitem 9307
            _outputStream = stream.CanRead ? stream : new CountingStream(stream);
            CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
            CompressionMethod = Ionic.Zip.CompressionMethod.Deflate;
            _encryption = EncryptionAlgorithm.None;
            _entriesWritten = new Dictionary<String, ZipEntry>(StringComparer.Ordinal);
            _zip64 = Zip64Option.Never;
            _leaveUnderlyingStreamOpen = leaveOpen;
            Strategy = Ionic.Zlib.CompressionStrategy.Default;
            _name = name ?? "(stream)";
#if !NETCF
            ParallelDeflateThreshold = -1L;
#endif
        }


        /// <summary>Provides a string representation of the instance.</summary>
        /// <remarks>
        ///   <para>
        ///     This can be useful for debugging purposes.
        ///   </para>
        /// </remarks>
        /// <returns>a string representation of the instance.</returns>
        public override String ToString()
        {
            return String.Format ("ZipOutputStream::{0}(leaveOpen({1})))", _name, _leaveUnderlyingStreamOpen);
        }


        /// <summary>
        ///   Sets the password to be used on the <c>ZipOutputStream</c> instance.
        /// </summary>
        ///
        /// <remarks>
        ///
        /// <para>
        ///   When writing a zip archive, this password is applied to the entries, not
        ///   to the zip archive itself. It applies to any <c>ZipEntry</c> subsequently
        ///   written to the <c>ZipOutputStream</c>.
        /// </para>
        ///
        /// <para>
        ///   Using a password does not encrypt or protect the "directory" of the
        ///   archive - the list of entries contained in the archive.  If you set the
        ///   <c>Password</c> property, the password actually applies to individual
        ///   entries that are added to the archive, subsequent to the setting of this
        ///   property.  The list of filenames in the archive that is eventually created
        ///   will appear in clear text, but the contents of the individual files are
        ///   encrypted.  This is how Zip encryption works.
        /// </para>
        ///
        /// <para>
        ///   If you set this property, and then add a set of entries to the archive via
        ///   calls to <c>PutNextEntry</c>, then each entry is encrypted with that
        ///   password.  You may also want to change the password between adding
        ///   different entries. If you set the password, add an entry, then set the
        ///   password to <c>null</c> (<c>Nothing</c> in VB), and add another entry, the
        ///   first entry is encrypted and the second is not.
        /// </para>
        ///
        /// <para>
        ///   When setting the <c>Password</c>, you may also want to explicitly set the <see
        ///   cref="Encryption"/> property, to specify how to encrypt the entries added
        ///   to the ZipFile.  If you set the <c>Password</c> to a non-null value and do not
        ///   set <see cref="Encryption"/>, then PKZip 2.0 ("Weak") encryption is used.
        ///   This encryption is relatively weak but is very interoperable. If
        ///   you set the password to a <c>null</c> value (<c>Nothing</c> in VB),
        ///   <c>Encryption</c> is reset to None.
        /// </para>
        ///
        /// <para>
        ///   Special case: if you wrap a ZipOutputStream around a non-seekable stream,
        ///   and use encryption, and emit an entry of zero bytes, the <c>Close()</c> or
        ///   <c>PutNextEntry()</c> following the entry will throw an exception.
        /// </para>
        ///
        /// </remarks>
        public String Password
        {
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }

                _password = value;
                if (_password == null)
                {
                    _encryption = EncryptionAlgorithm.None;
                }
                else if (_encryption == EncryptionAlgorithm.None)
                {
                    _encryption = EncryptionAlgorithm.PkzipWeak;
                }
            }
        }


        /// <summary>
        ///   The Encryption to use for entries added to the <c>ZipOutputStream</c>.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   The specified Encryption is applied to the entries subsequently
        ///   written to the <c>ZipOutputStream</c> instance.
        /// </para>
        ///
        /// <para>
        ///   If you set this to something other than
        ///   EncryptionAlgorithm.None, you will also need to set the
        ///   <see cref="Password"/> to a non-null, non-empty value in
        ///   order to actually get encryption on the entry.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <seealso cref="Password">ZipOutputStream.Password</seealso>
        /// <seealso cref="Ionic.Zip.ZipEntry.Encryption">ZipEntry.Encryption</seealso>
        public EncryptionAlgorithm Encryption
        {
            get
            {
                return _encryption;
            }
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                if (value == EncryptionAlgorithm.Unsupported)
                {
                    _exceptionPending = true;
                    throw new InvalidOperationException("You may not set Encryption to that value.");
                }
                _encryption = value;
            }
        }


        /// <summary>
        ///   Size of the work buffer to use for the ZLIB codec during compression.
        /// </summary>
        ///
        /// <remarks>
        ///   Setting this may affect performance.  For larger files, setting this to a
        ///   larger size may improve performance, but I'm not sure.  Sorry, I don't
        ///   currently have good recommendations on how to set it.  You can test it if
        ///   you like.
        /// </remarks>
        public int CodecBufferSize
        {
            get;
            set;
        }


        /// <summary>
        ///   The compression strategy to use for all entries.
        /// </summary>
        ///
        /// <remarks>
        ///   Set the Strategy used by the ZLIB-compatible compressor, when compressing
        ///   data for the entries in the zip archive. Different compression strategies
        ///   work better on different sorts of data. The strategy parameter can affect
        ///   the compression ratio and the speed of compression but not the correctness
        ///   of the compresssion.  For more information see <see
        ///   cref="Ionic.Zlib.CompressionStrategy "/>.
        /// </remarks>
        public Ionic.Zlib.CompressionStrategy Strategy
        {
            get;
            set;
        }


        /// <summary>
        ///   The type of timestamp attached to the ZipEntry.
        /// </summary>
        ///
        /// <remarks>
        ///   Set this in order to specify the kind of timestamp that should be emitted
        ///   into the zip file for each entry.
        /// </remarks>
        public ZipEntryTimestamp Timestamp
        {
            get
            {
                return _timestamp;
            }
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _timestamp = value;
            }
        }


        /// <summary>
        ///   Sets the compression level to be used for entries subsequently added to
        ///   the zip archive.
        /// </summary>
        ///
        /// <remarks>
        ///  <para>
        ///    Varying the compression level used on entries can affect the
        ///    size-vs-speed tradeoff when compression and decompressing data streams
        ///    or files.
        ///  </para>
        ///
        ///  <para>
        ///    As with some other properties on the <c>ZipOutputStream</c> class, like <see
        ///    cref="Password"/>, and <see cref="Encryption"/>,
        ///    setting this property on a <c>ZipOutputStream</c>
        ///    instance will cause the specified <c>CompressionLevel</c> to be used on all
        ///    <see cref="ZipEntry"/> items that are subsequently added to the
        ///    <c>ZipOutputStream</c> instance.
        ///  </para>
        ///
        ///  <para>
        ///    If you do not set this property, the default compression level is used,
        ///    which normally gives a good balance of compression efficiency and
        ///    compression speed.  In some tests, using <c>BestCompression</c> can
        ///    double the time it takes to compress, while delivering just a small
        ///    increase in compression efficiency.  This behavior will vary with the
        ///    type of data you compress.  If you are in doubt, just leave this setting
        ///    alone, and accept the default.
        ///  </para>
        /// </remarks>
        public Ionic.Zlib.CompressionLevel CompressionLevel
        {
            get;
            set;
        }

        /// <summary>
        ///   The compression method used on each entry added to the ZipOutputStream.
        /// </summary>
        public Ionic.Zip.CompressionMethod CompressionMethod
        {
            get;
            set;
        }


        /// <summary>
        ///   A comment attached to the zip archive.
        /// </summary>
        ///
        /// <remarks>
        ///
        /// <para>
        ///   The application sets this property to specify a comment to be embedded
        ///   into the generated zip archive.
        /// </para>
        ///
        /// <para>
        ///   According to <see
        ///   href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">PKWARE's
        ///   zip specification</see>, the comment is not encrypted, even if there is a
        ///   password set on the zip file.
        /// </para>
        ///
        /// <para>
        ///   The specification does not describe how to indicate the encoding used
        ///   on a comment string. Many "compliant" zip tools and libraries use
        ///   IBM437 as the code page for comments; DotNetZip, too, follows that
        ///   practice.  On the other hand, there are situations where you want a
        ///   Comment to be encoded with something else, for example using code page
        ///   950 "Big-5 Chinese". To fill that need, DotNetZip will encode the
        ///   comment following the same procedure it follows for encoding
        ///   filenames: (a) if <see cref="AlternateEncodingUsage"/> is
        ///   <c>Never</c>, it uses the default encoding (IBM437). (b) if <see
        ///   cref="AlternateEncodingUsage"/> is <c>Always</c>, it always uses the
        ///   alternate encoding (<see cref="AlternateEncoding"/>). (c) if <see
        ///   cref="AlternateEncodingUsage"/> is <c>AsNecessary</c>, it uses the
        ///   alternate encoding only if the default encoding is not sufficient for
        ///   encoding the comment - in other words if decoding the result does not
        ///   produce the original string.  This decision is taken at the time of
        ///   the call to <c>ZipFile.Save()</c>.
        /// </para>
        ///
        /// </remarks>
        public string Comment
        {
            get { return _comment; }
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _comment = value;
            }
        }



        /// <summary>
        ///   Specify whether to use ZIP64 extensions when saving a zip archive.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   The default value for the property is <see
        ///   cref="Zip64Option.Never"/>. <see cref="Zip64Option.AsNecessary"/> is
        ///   safest, in the sense that you will not get an Exception if a
        ///   pre-ZIP64 limit is exceeded.
        /// </para>
        ///
        /// <para>
        ///   You must set this property before calling <c>Write()</c>.
        /// </para>
        ///
        /// </remarks>
        public Zip64Option EnableZip64
        {
            get
            {
                return _zip64;
            }
            set
            {
                if (_disposed)
                {
                    _exceptionPending = true;
                    throw new System.InvalidOperationException("The stream has been closed.");
                }
                _zip64 = value;
            }
        }


        /// <summary>
        ///   Indicates whether ZIP64 extensions were used when saving the zip archive.
        /// </summary>
        ///
        /// <remarks>
        ///   The value is defined only after the <c>ZipOutputStream</c> has been closed.
        /// </remarks>
        public bool OutputUsedZip64
        {
            get
            {
                return _anyEntriesUsedZip64 || _directoryNeededZip64;
            }
        }


        /// <summary>
        ///   Whether the ZipOutputStream should use case-insensitive comparisons when
        ///   checking for uniqueness of zip entries.
        /// </summary>
        ///
        /// <remarks>
        ///   <para>
        ///   Though the zip specification doesn't prohibit zipfiles with duplicate
        ///   entries, Sane zip files have no duplicates, and the DotNetZip library
        ///   cannot create zip files with duplicate entries. If an application attempts
        ///   to call <see cref="PutNextEntry(String)"/> with a name that duplicates one
        ///   already used within the archive, the library will throw an Exception.
        ///   </para>
        ///   <para>
        ///   This property allows the application to specify whether the
        ///   ZipOutputStream instance considers ordinal case when checking for
        ///   uniqueness of zip entries.
        ///   </para>
        /// </remarks>
        public bool IgnoreCase
        {
          get
          {
              return !_DontIgnoreCase;
          }

          set
          {
              _DontIgnoreCase = !value;
          }

        }


        /// <summary>
        ///   Indicates whether to encode entry filenames and entry comments using
        ///   Unicode (UTF-8).
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   <see href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">The
        ///   PKWare zip specification</see> provides for encoding file names and file
        ///   comments in either the IBM437 code page, or in UTF-8.  This flag selects
        ///   the encoding according to that specification.  By default, this flag is
        ///   false, and filenames and comments are encoded into the zip file in the
        ///   IBM437 codepage.  Setting this flag to true will specify that filenames
        ///   and comments that cannot be encoded with IBM437 will be encoded with
        ///   UTF-8.
        /// </para>
        ///
        /// <para>
        ///   Zip files created with strict adherence to the PKWare specification with
        ///   respect to UTF-8 encoding can contain entries with filenames containing
        ///   any combination of Unicode characters, including the full range of
        ///   characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other
        ///   alphabets.  However, because at this time, the UTF-8 portion of the PKWare
        ///   specification is not broadly supported by other zip libraries and
        ///   utilities, such zip files may not be readable by your favorite zip tool or
        ///   archiver. In other words, interoperability will decrease if you set this
        ///   flag to true.
        /// </para>
        ///
        /// <para>
        ///   In particular, Zip files created with strict adherence to the PKWare
        ///   specification with respect to UTF-8 encoding will not work well with
        ///   Explorer in Windows XP or Windows Vista, because Windows compressed
        ///   folders, as far as I know, do not support UTF-8 in zip files.  Vista can
        ///   read the zip files, but shows the filenames incorrectly. Unpacking from
        ///   Windows Vista Explorer will result in filenames that have rubbish
        ///   characters in place of the high-order UTF-8 bytes.
        /// </para>
        ///
        /// <para>
        ///   Also, zip files that use UTF-8 encoding will not work well with Java
        ///   applications that use the java.util.zip classes, as of v5.0 of the Java
        ///   runtime. The Java runtime does not correctly implement the PKWare
        ///   specification in this regard.
        /// </para>
        ///
        /// <para>
        ///   As a result, we have the unfortunate situation that "correct" behavior by
        ///   the DotNetZip library with regard to Unicode encoding of filenames during
        ///   zip creation will result in zip files that are readable by strictly
        ///   compliant and current tools (for example the most recent release of the
        ///   commercial WinZip tool); but these zip files will not be readable by
        ///   various other tools or libraries, including Windows Explorer.
        /// </para>
        ///
        /// <para>
        ///   The DotNetZip library can read and write zip files with UTF8-encoded
        ///   entries, according to the PKware spec.  If you use DotNetZip for both
        ///   creating and reading the zip file, and you use UTF-8, there will be no
        ///   loss of information in the filenames. For example, using a self-extractor
        ///   created by this library will allow you to unpack files correctly with no
        ///   loss of information in the filenames.
        /// </para>
        ///
        /// <para>
        ///   If you do not set this flag, it will remain false.  If this flag is false,
        ///   the <c>ZipOutputStream</c> will encode all filenames and comments using
        ///   the IBM437 codepage.  This can cause "loss of information" on some
        ///   filenames, but the resulting zipfile will be more interoperable with other
        ///   utilities. As an example of the loss of information, diacritics can be
        ///   lost.  The o-tilde character will be down-coded to plain o.  The c with a
        ///   cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c.
        ///   Likewise, the O-stroke character (Unicode 248), used in Danish and
        ///   Norwegian, will be down-coded to plain o. Chinese characters cannot be
        ///   represented in codepage IBM437; when using the default encoding, Chinese
        ///   characters in filenames will be represented as ?. These are all examples
        ///   of "information loss".
        /// </para>
        ///
        /// <para>
        ///   The loss of information associated to the use of the IBM437 encoding is
        ///   inconvenient, and can also lead to runtime errors. For example, using
        ///   IBM437, any sequence of 4 Chinese characters will be encoded as ????.  If
        ///   your application creates a <c>ZipOutputStream</c>, does not set the
        ///   encoding, then adds two files, each with names of four Chinese characters
        ///   each, this will result in a duplicate filename exception.  In the case
        ///   where you add a single file with a name containing four Chinese
        ///   characters, the zipfile will save properly, but extracting that file
        ///   later, with any zip tool, will result in an error, because the question
        ///   mark is not legal for use within filenames on Windows.  These are just a
        ///   few examples of the problems associated to loss of information.
        /// </para>
        ///
        /// <para>
        ///   This flag is independent of the encoding of the content within the entries
        ///   in the zip file. Think of the zip file as a container - it supports an
        ///   encoding.  Within the container are other "containers" - the file entries
        ///   themselves.  The encoding within those entries is independent of the
        ///   encoding of the zip archive container for those entries.
        /// </para>
        ///
        /// <para>
        ///   Rather than specify the encoding in a binary fashion using this flag, an
        ///   application can specify an arbitrary encoding via the <see
        ///   cref="ProvisionalAlternateEncoding"/> property.  Setting the encoding
        ///   explicitly when creating zip archives will result in non-compliant zip
        ///   files that, curiously, are fairly interoperable.  The challenge is, the
        ///   PKWare specification does not provide for a way to specify that an entry
        ///   in a zip archive uses a code page that is neither IBM437 nor UTF-8.
        ///   Therefore if you set the encoding explicitly when creating a zip archive,
        ///   you must take care upon reading the zip archive to use the same code page.
        ///   If you get it wrong, the behavior is undefined and may result in incorrect
        ///   filenames, exceptions, stomach upset, hair loss, and acne.
        /// </para>
        /// </remarks>
        /// <seealso cref="ProvisionalAlternateEncoding"/>
        [Obsolete("Beginning with v1.9.1.6 of DotNetZip, this property is obsolete. It will be removed in a future version of the library. Use AlternateEncoding and AlternateEncodingUsage instead.")]
        public bool UseUnicodeAsNecessary
        {
            get
            {
                return (_alternateEncoding == System.Text.Encoding.UTF8) &&
                    (AlternateEncodingUsage == ZipOption.AsNecessary);
            }
            set
            {
                if (value)
                {
                    _alternateEncoding = System.Text.Encoding.UTF8;
                    _alternateEncodingUsage = ZipOption.AsNecessary;

                }
                else
                {
                    _alternateEncoding = Ionic.Zip.ZipOutputStream.DefaultEncoding;
                    _alternateEncodingUsage = ZipOption.Never;
                }
            }
        }


        /// <summary>
        ///   The text encoding to use when emitting entries into the zip archive, for
        ///   those entries whose filenames or comments cannot be encoded with the
        ///   default (IBM437) encoding.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   In <see href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">its
        ///   zip specification</see>, PKWare describes two options for encoding
        ///   filenames and comments: using IBM437 or UTF-8.  But, some archiving tools
        ///   or libraries do not follow the specification, and instead encode
        ///   characters using the system default code page.  For example, WinRAR when
        ///   run on a machine in Shanghai may encode filenames with the Big-5 Chinese
        ///   (950) code page.  This behavior is contrary to the Zip specification, but
        ///   it occurs anyway.
        /// </para>
        ///
        /// <para>
        ///   When using DotNetZip to write zip archives that will be read by one of
        ///   these other archivers, set this property to specify the code page to use
        ///   when encoding the <see cref="ZipEntry.FileName"/> and <see
        ///   cref="ZipEntry.Comment"/> for each <c>ZipEntry</c> in the zip file, for
        ///   values that cannot be encoded with the default codepage for zip files,
        ///   IBM437.  This is why this property is "provisional".  In all cases, IBM437
        ///   is used where possible, in other words, where no loss of data would
        ///   result. It is possible, therefore, to have a given entry with a
        ///   <c>Comment</c> encoded in IBM437 and a <c>FileName</c> encoded with the
        ///   specified "provisional" codepage.
        /// </para>
        ///
        /// <para>
        ///   Be aware that a zip file created after you've explicitly set the
        ///   <c>ProvisionalAlternateEncoding</c> property to a value other than
        ///   IBM437 may not be compliant to the PKWare specification, and may not be
        ///   readable by compliant archivers.  On the other hand, many (most?)
        ///   archivers are non-compliant and can read zip files created in arbitrary
        ///   code pages.  The trick is to use or specify the proper codepage when
        ///   reading the zip.
        /// </para>
        ///
        /// <para>
        ///   When creating a zip archive using this library, it is possible to change
        ///   the value of <c>ProvisionalAlternateEncoding</c> between each entry you
        ///   add, and between adding entries and the call to <c>Close()</c>. Don't do
        ///   this. It will likely result in a zipfile that is not readable.  For best
        ///   interoperability, either leave <c>ProvisionalAlternateEncoding</c>
        ///   alone, or specify it only once, before adding any entries to the
        ///   <c>ZipOutputStream</c> instance.  There is one exception to this
        ///   recommendation, described later.
        /// </para>
        ///
        /// <para>
        ///   When using an arbitrary, non-UTF8 code page for encoding, there is no
        ///   standard way for the creator application - whether DotNetZip, WinZip,
        ///   WinRar, or something else - to formally specify in the zip file which
        ///   codepage has been used for the entries. As a result, readers of zip files
        ///   are not able to inspect the zip file and determine the codepage that was
        ///   used for the entries contained within it.  It is left to the application
        ///   or user to determine the necessary codepage when reading zip files encoded
        ///   this way.  If you use an incorrect codepage when reading a zipfile, you
        ///   will get entries with filenames that are incorrect, and the incorrect
        ///   filenames may even contain characters that are not legal for use within
        ///   filenames in Windows. Extracting entries with illegal characters in the
        ///   filenames will lead to exceptions. It's too bad, but this is just the way
        ///   things are with code pages in zip files. Caveat Emptor.
        /// </para>
        ///
        /// <para>
        ///   One possible approach for specifying the code page for a given zip file is
        ///   to describe the code page in a human-readable form in the Zip comment. For
        ///   example, the comment may read "Entries in this archive are encoded in the
        ///   Big5 code page".  For maximum interoperability, the zip comment in this
        ///   case should be encoded in the default, IBM437 code page.  In this case,
        ///   the zip comment is encoded using a different page than the filenames.  To
        ///   do this, Specify <c>ProvisionalAlternateEncoding</c> to your desired
        ///   region-specific code page, once before adding any entries, and then set
        ///   the <see cref="Comment"/> property and reset
        ///   <c>ProvisionalAlternateEncoding</c> to IBM437 before calling <c>Close()</c>.
        /// </para>
        /// </remarks>
        [Obsolete("use AlternateEncoding and AlternateEncodingUsage instead.")]
        public System.Text.Encoding ProvisionalAlternateEncoding
        {
            get
            {
                if (_alternateEncodingUsage == ZipOption.AsNecessary)
                    return _alternateEncoding;
                return null;
            }
            set
            {
                _alternateEncoding = value;
                _alternateEncodingUsage = ZipOption.AsNecessary;
            }
        }

        /// <summary>
        ///   A Text Encoding to use when encoding the filenames and comments for
        ///   all the ZipEntry items, during a ZipFile.Save() operation.
        /// </summary>
        /// <remarks>
        ///   <para>
        ///     Whether the encoding specified here is used during the save depends
        ///     on <see cref="AlternateEncodingUsage"/>.
        ///   </para>
        /// </remarks>
        public System.Text.Encoding AlternateEncoding
        {
            get
            {
                return _alternateEncoding;
            }
            set
            {
                _alternateEncoding = value;
            }
        }

        /// <summary>
        ///   A flag that tells if and when this instance should apply
        ///   AlternateEncoding to encode the filenames and comments associated to
        ///   of ZipEntry objects contained within this instance.
        /// </summary>
        public ZipOption AlternateEncodingUsage
        {
            get
            {
                return _alternateEncodingUsage;
            }
            set
            {
                _alternateEncodingUsage = value;
            }
        }

        /// <summary>
        /// The default text encoding used in zip archives.  It is numeric 437, also
        /// known as IBM437.
        /// </summary>
        /// <seealso cref="Ionic.Zip.ZipFile.ProvisionalAlternateEncoding"/>
        public static System.Text.Encoding DefaultEncoding
        {
            get
            {
                return System.Text.Encoding.GetEncoding("IBM437");
            }
        }


#if !NETCF
        /// <summary>
        ///   The size threshold for an entry, above which a parallel deflate is used.
        /// </summary>
        ///
        /// <remarks>
        ///
        ///   <para>
        ///     DotNetZip will use multiple threads to compress any ZipEntry, when
        ///     the <c>CompressionMethod</c> is Deflate, and if the entry is
        ///     larger than the given size.  Zero means "always use parallel
        ///     deflate", while -1 means "never use parallel deflate".
        ///   </para>
        ///
        ///   <para>
        ///     If the entry size cannot be known before compression, as with any entry
        ///     added via a ZipOutputStream, then Parallel deflate will never be
        ///     performed, unless the value of this property is zero.
        ///   </para>
        ///
        ///   <para>
        ///     A parallel deflate operations will speed up the compression of
        ///     large files, on computers with multiple CPUs or multiple CPU
        ///     cores.  For files above 1mb, on a dual core or dual-cpu (2p)
        ///     machine, the time required to compress the file can be 70% of the
        ///     single-threaded deflate.  For very large files on 4p machines the
        ///     compression can be done in 30% of the normal time.  The downside
        ///     is that parallel deflate consumes extra memory during the deflate,
        ///     and the deflation is slightly less effective.
        ///   </para>
        ///
        ///   <para>
        ///     Parallel deflate tends to not be as effective as single-threaded deflate
        ///     because the original data stream is split into multiple independent
        ///     buffers, each of which is compressed in parallel.  But because they are
        ///     treated independently, there is no opportunity to share compression
        ///     dictionaries, and additional framing bytes must be added to the output
        ///     stream.  For that reason, a deflated stream may be slightly larger when
        ///     compressed using parallel deflate, as compared to a traditional
        ///     single-threaded deflate. For files of about 512k, the increase over the
        ///     normal deflate is as much as 5% of the total compressed size. For larger
        ///     files, the difference can be as small as 0.1%.
        ///   </para>
        ///
        ///   <para>
        ///     Multi-threaded compression does not give as much an advantage when using
        ///     Encryption. This is primarily because encryption tends to slow down
        ///     the entire pipeline. Also, multi-threaded compression gives less of an
        ///     advantage when using lower compression levels, for example <see
        ///     cref="Ionic.Zlib.CompressionLevel.BestSpeed"/>.  You may have to perform
        ///     some tests to determine the best approach for your situation.
        ///   </para>
        ///
        ///   <para>
        ///     The default value for this property is -1, which means parallel
        ///     compression will not be performed unless you set it to zero.
        ///   </para>
        ///
        /// </remarks>
        public long ParallelDeflateThreshold
        {
            set
            {
                if ((value != 0) && (value != -1) && (value < 64 * 1024))
                    throw new ArgumentOutOfRangeException("value must be greater than 64k, or 0, or -1");
                _ParallelDeflateThreshold = value;
            }
            get
            {
                return _ParallelDeflateThreshold;
            }
        }


        /// <summary>
        ///   The maximum number of buffer pairs to use when performing
        ///   parallel compression.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   This property sets an upper limit on the number of memory
        ///   buffer pairs to create when performing parallel
        ///   compression.  The implementation of the parallel
        ///   compression stream allocates multiple buffers to
        ///   facilitate parallel compression.  As each buffer fills up,
        ///   the stream uses <see
        ///   cref="System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)">
        ///   ThreadPool.QueueUserWorkItem()</see> to compress those
        ///   buffers in a background threadpool thread. After a buffer
        ///   is compressed, it is re-ordered and written to the output
        ///   stream.
        /// </para>
        ///
        /// <para>
        ///   A higher number of buffer pairs enables a higher degree of
        ///   parallelism, which tends to increase the speed of compression on
        ///   multi-cpu computers.  On the other hand, a higher number of buffer
        ///   pairs also implies a larger memory consumption, more active worker
        ///   threads, and a higher cpu utilization for any compression. This
        ///   property enables the application to limit its memory consumption and
        ///   CPU utilization behavior depending on requirements.
        /// </para>
        ///
        /// <para>
        ///   For each compression "task" that occurs in parallel, there are 2
        ///   buffers allocated: one for input and one for output.  This property
        ///   sets a limit for the number of pairs.  The total amount of storage
        ///   space allocated for buffering will then be (N*S*2), where N is the
        ///   number of buffer pairs, S is the size of each buffer (<see
        ///   cref="CodecBufferSize"/>).  By default, DotNetZip allocates 4 buffer
        ///   pairs per CPU core, so if your machine has 4 cores, and you retain
        ///   the default buffer size of 128k, then the
        ///   ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer
        ///   memory in total, or 4mb, in blocks of 128kb.  If you then set this
        ///   property to 8, then the number will be 8 * 2 * 128kb of buffer
        ///   memory, or 2mb.
        /// </para>
        ///
        /// <para>
        ///   CPU utilization will also go up with additional buffers, because a
        ///   larger number of buffer pairs allows a larger number of background
        ///   threads to compress in parallel. If you find that parallel
        ///   compression is consuming too much memory or CPU, you can adjust this
        ///   value downward.
        /// </para>
        ///
        /// <para>
        ///   The default value is 16. Different values may deliver better or
        ///   worse results, depending on your priorities and the dynamic
        ///   performance characteristics of your storage and compute resources.
        /// </para>
        ///
        /// <para>
        ///   This property is not the number of buffer pairs to use; it is an
        ///   upper limit. An illustration: Suppose you have an application that
        ///   uses the default value of this property (which is 16), and it runs
        ///   on a machine with 2 CPU cores. In that case, DotNetZip will allocate
        ///   4 buffer pairs per CPU core, for a total of 8 pairs.  The upper
        ///   limit specified by this property has no effect.
        /// </para>
        ///
        /// <para>
        ///   The application can set this value at any time, but it is
        ///   effective only if set before calling
        ///   <c>ZipOutputStream.Write()</c> for the first time.
        /// </para>
        /// </remarks>
        ///
        /// <seealso cref="ParallelDeflateThreshold"/>
        ///
        public int ParallelDeflateMaxBufferPairs
        {
            get
            {
                return _maxBufferPairs;
            }
            set
            {
                if (value < 4)
                    throw new ArgumentOutOfRangeException("ParallelDeflateMaxBufferPairs",
                                                "Value must be 4 or greater.");
                _maxBufferPairs = value;
            }
        }
#endif


        private void InsureUniqueEntry(ZipEntry ze1)
        {
            if (_entriesWritten.ContainsKey(ze1.FileName))
            {
                _exceptionPending = true;
                throw new ArgumentException(String.Format("The entry '{0}' already exists in the zip archive.", ze1.FileName));
            }
        }


        internal Stream OutputStream
        {
            get
            {
                return _outputStream;
            }
        }

        internal String Name
        {
            get
            {
                return _name;
            }
        }

        /// <summary>
        ///   Returns true if an entry by the given name has already been written
        ///   to the ZipOutputStream.
        /// </summary>
        ///
        /// <param name="name">
        ///   The name of the entry to scan for.
        /// </param>
        ///
        /// <returns>
        /// true if an entry by the given name has already been written.
        /// </returns>
        public bool ContainsEntry(string name)
        {
            return _entriesWritten.ContainsKey(SharedUtilities.NormalizePathForUseInZipFile(name));
        }


        /// <summary>
        ///   Write the data from the buffer to the stream.
        /// </summary>
        ///
        /// <remarks>
        ///   As the application writes data into this stream, the data may be
        ///   compressed and encrypted before being written out to the underlying
        ///   stream, depending on the settings of the <see cref="CompressionLevel"/>
        ///   and the <see cref="Encryption"/> properties.
        /// </remarks>
        ///
        /// <param name="buffer">The buffer holding data to write to the stream.</param>
        /// <param name="offset">the offset within that data array to find the first byte to write.</param>
        /// <param name="count">the number of bytes to write.</param>
        public override void Write(byte[] buffer, int offset, int count)
        {
            if (_disposed)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("The stream has been closed.");
            }

            if (buffer==null)
            {
                _exceptionPending = true;
                throw new System.ArgumentNullException("buffer");
            }

            if (_currentEntry == null)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("You must call PutNextEntry() before calling Write().");
            }

            if (_currentEntry.IsDirectory)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("You cannot Write() data for an entry that is a directory.");
            }

            if (_needToWriteEntryHeader)
                _InitiateCurrentEntry(false);

            if (count != 0)
                _entryOutputStream.Write(buffer, offset, count);
        }



        /// <summary>
        ///   Specify the name of the next entry that will be written to the zip file.
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   Call this method just before calling <see cref="Write(byte[], int, int)"/>, to
        ///   specify the name of the entry that the next set of bytes written to
        ///   the <c>ZipOutputStream</c> belongs to. All subsequent calls to <c>Write</c>,
        ///   until the next call to <c>PutNextEntry</c>,
        ///   will be inserted into the named entry in the zip file.
        /// </para>
        ///
        /// <para>
        ///   If the <paramref name="entryName"/> used in <c>PutNextEntry()</c> ends in
        ///   a slash, then the entry added is marked as a directory. Because directory
        ///   entries do not contain data, a call to <c>Write()</c>, before an
        ///   intervening additional call to <c>PutNextEntry()</c>, will throw an
        ///   exception.
        /// </para>
        ///
        /// <para>
        ///   If you don't call <c>Write()</c> between two calls to
        ///   <c>PutNextEntry()</c>, the first entry is inserted into the zip file as a
        ///   file of zero size.  This may be what you want.
        /// </para>
        ///
        /// <para>
        ///   Because <c>PutNextEntry()</c> closes out the prior entry, if any, this
        ///   method may throw if there is a problem with the prior entry.
        /// </para>
        ///
        /// <para>
        ///   This method returns the <c>ZipEntry</c>.  You can modify public properties
        ///   on the <c>ZipEntry</c>, such as <see cref="ZipEntry.Encryption"/>, <see
        ///   cref="ZipEntry.Password"/>, and so on, until the first call to
        ///   <c>ZipOutputStream.Write()</c>, or until the next call to
        ///   <c>PutNextEntry()</c>.  If you modify the <c>ZipEntry</c> <em>after</em>
        ///   having called <c>Write()</c>, you may get a runtime exception, or you may
        ///   silently get an invalid zip archive.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <example>
        ///
        ///   This example shows how to create a zip file, using the
        ///   <c>ZipOutputStream</c> class.
        ///
        /// <code>
        /// private void Zipup()
        /// {
        ///     using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite ))
        ///     {
        ///         using (var output= new ZipOutputStream(fs))
        ///         {
        ///             output.Password = "VerySecret!";
        ///             output.Encryption = EncryptionAlgorithm.WinZipAes256;
        ///             output.PutNextEntry("entry1.txt");
        ///             byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1.");
        ///             output.Write(buffer,0,buffer.Length);
        ///             output.PutNextEntry("entry2.txt");  // this will be zero length
        ///             output.PutNextEntry("entry3.txt");
        ///             buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3.");
        ///             output.Write(buffer,0,buffer.Length);
        ///         }
        ///     }
        /// }
        /// </code>
        /// </example>
        ///
        /// <param name="entryName">
        ///   The name of the entry to be added, including any path to be used
        ///   within the zip file.
        /// </param>
        ///
        /// <returns>
        ///   The ZipEntry created.
        /// </returns>
        ///
        public ZipEntry PutNextEntry(String entryName)
        {
            if (String.IsNullOrEmpty(entryName))
                throw new ArgumentNullException("entryName");

            if (_disposed)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("The stream has been closed.");
            }

            _FinishCurrentEntry();
            _currentEntry = ZipEntry.CreateForZipOutputStream(entryName);
            _currentEntry._container = new ZipContainer(this);
            _currentEntry._BitField |= 0x0008;  // workitem 8932
            _currentEntry.SetEntryTimes(DateTime.Now, DateTime.Now, DateTime.Now);
            _currentEntry.CompressionLevel = this.CompressionLevel;
            _currentEntry.CompressionMethod = this.CompressionMethod;
            _currentEntry.Password = _password; // workitem 13909
            _currentEntry.Encryption = this.Encryption;
            // workitem 12634
            _currentEntry.AlternateEncoding = this.AlternateEncoding;
            _currentEntry.AlternateEncodingUsage = this.AlternateEncodingUsage;

            if (entryName.EndsWith("/"))  _currentEntry.MarkAsDirectory();

            _currentEntry.EmitTimesInWindowsFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Windows) != 0);
            _currentEntry.EmitTimesInUnixFormatWhenSaving = ((_timestamp & ZipEntryTimestamp.Unix) != 0);
            InsureUniqueEntry(_currentEntry);
            _needToWriteEntryHeader = true;

            return _currentEntry;
        }



        private void _InitiateCurrentEntry(bool finishing)
        {
            // If finishing==true, this means we're initiating the entry at the time of
            // Close() or PutNextEntry().  If this happens, it means no data was written
            // for the entry - Write() was never called.  (The usual case us to call
            // _InitiateCurrentEntry(bool) from within Write().)  If finishing==true,
            // the entry could be either a zero-byte file or a directory.

            _entriesWritten.Add(_currentEntry.FileName,_currentEntry);
            _entryCount++; // could use _entriesWritten.Count, but I don't want to incur
            // the cost.

            if (_entryCount > 65534 && _zip64 == Zip64Option.Never)
            {
                _exceptionPending = true;
                throw new System.InvalidOperationException("Too many entries. Consider setting ZipOutputStream.EnableZip64.");
            }

            // Write out the header.
            //
            // If finishing, and encryption is in use, then we don't want to emit the
            // normal encryption header.  Signal that with a cycle=99 to turn off
            // encryption for zero-byte entries or directories.
            //
            // If finishing, then we know the stream length is zero.  Else, unknown
            // stream length.  Passing stream length == 0 allows an optimization so as
            // not to setup an encryption or deflation stream, when stream length is
            // zero.

            _currentEntry.WriteHeader(_outputStream, finishing ? 99 : 0);
            _currentEntry.StoreRelativeOffset();

            if (!_currentEntry.IsDirectory)
            {
                _currentEntry.WriteSecurityMetadata(_outputStream);
                _currentEntry.PrepOutputStream(_outputStream,
                                               finishing ? 0 : -1,
                                               out _outputCounter,
                                               out _encryptor,
                                               out _deflater,
                                               out _entryOutputStream);
            }
            _needToWriteEntryHeader = false;
        }



        private void _FinishCurrentEntry()
        {
            if (_currentEntry != null)
            {
                if (_needToWriteEntryHeader)
                    _InitiateCurrentEntry(true); // an empty entry - no writes

                _currentEntry.FinishOutputStream(_outputStream, _outputCounter, _encryptor, _deflater, _entryOutputStream);
                _currentEntry.PostProcessOutput(_outputStream);
                // workitem 12964
                if (_currentEntry.OutputUsedZip64!=null)
                    _anyEntriesUsedZip64 |= _currentEntry.OutputUsedZip64.Value;

                // reset all the streams
                _outputCounter = null; _encryptor = _deflater = null; _entryOutputStream = null;
            }
        }



        /// <summary>
        /// Dispose the stream
        /// </summary>
        ///
        /// <remarks>
        /// <para>
        ///   This method writes the Zip Central directory, then closes the stream.  The
        ///   application must call Dispose() (or Close) in order to produce a valid zip file.
        /// </para>
        ///
        /// <para>
        ///   Typically the application will call <c>Dispose()</c> implicitly, via a <c>using</c>
        ///   statement in C#, or a <c>Using</c> statement in VB.
        /// </para>
        ///
        /// </remarks>
        ///
        /// <param name="disposing">set this to true, always.</param>
        protected override void Dispose(bool disposing)
        {
            if (_disposed) return;

            if (disposing) // not called from finalizer
            {
                // handle pending exceptions
                if (!_exceptionPending)
                {
                    _FinishCurrentEntry();
                    _directoryNeededZip64 = ZipOutput.WriteCentralDirectoryStructure(_outputStream,
                                                                                     _entriesWritten.Values,
                                                                                     1, // _numberOfSegmentsForMostRecentSave,
                                                                                     _zip64,
                                                                                     Comment,
                                                                                     new ZipContainer(this));
                    Stream wrappedStream = null;
                    CountingStream cs = _outputStream as CountingStream;
                    if (cs != null)
                    {
                        wrappedStream = cs.WrappedStream;
#if NETCF
                    cs.Close();
#else
                        cs.Dispose();
#endif
                    }
                    else
                    {
                        wrappedStream = _outputStream;
                    }

                    if (!_leaveUnderlyingStreamOpen)
                    {
#if NETCF
                    wrappedStream.Close();
#else
                        wrappedStream.Dispose();
#endif
                    }
                    _outputStream = null;
                }
            }
            _disposed = true;
        }



        /// <summary>
        /// Always returns false.
        /// </summary>
        public override bool CanRead { get { return false; } }

        /// <summary>
        /// Always returns false.
        /// </summary>
        public override bool CanSeek { get { return false; } }

        /// <summary>
        /// Always returns true.
        /// </summary>
        public override bool CanWrite { get { return true; } }

        /// <summary>
        /// Always returns a NotSupportedException.
        /// </summary>
        public override long Length { get { throw new NotSupportedException(); } }

        /// <summary>
        /// Setting this property always returns a NotSupportedException. Getting it
        /// returns the value of the Position on the underlying stream.
        /// </summary>
        public override long Position
        {
            get { return _outputStream.Position; }
            set { throw new NotSupportedException(); }
        }

        /// <summary>
        /// This is a no-op.
        /// </summary>
        public override void Flush() { }

        /// <summary>
        /// This method always throws a NotSupportedException.
        /// </summary>
        /// <param name="buffer">ignored</param>
        /// <param name="offset">ignored</param>
        /// <param name="count">ignored</param>
        /// <returns>nothing</returns>
        public override int Read(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException("Read");
        }

        /// <summary>
        /// This method always throws a NotSupportedException.
        /// </summary>
        /// <param name="offset">ignored</param>
        /// <param name="origin">ignored</param>
        /// <returns>nothing</returns>
        public override long Seek(long offset, SeekOrigin origin)
        {
            throw new NotSupportedException("Seek");
        }

        /// <summary>
        /// This method always throws a NotSupportedException.
        /// </summary>
        /// <param name="value">ignored</param>
        public override void SetLength(long value)
        {
            throw new NotSupportedException();
        }


        private EncryptionAlgorithm _encryption;
        private ZipEntryTimestamp _timestamp;
        internal String _password;
        private String _comment;
        private Stream _outputStream;
        private ZipEntry _currentEntry;
        internal Zip64Option _zip64;
        private Dictionary<String, ZipEntry> _entriesWritten;
        private int _entryCount;
        private ZipOption _alternateEncodingUsage = ZipOption.Never;
        private System.Text.Encoding _alternateEncoding
            = System.Text.Encoding.GetEncoding("IBM437"); // default = IBM437

        private bool _leaveUnderlyingStreamOpen;
        private bool _disposed;
        private bool _exceptionPending; // **see note below
        private bool _anyEntriesUsedZip64, _directoryNeededZip64;
        private CountingStream _outputCounter;
        private Stream _encryptor;
        private Stream _deflater;
        private Ionic.Crc.CrcCalculatorStream _entryOutputStream;
        private bool _needToWriteEntryHeader;
        private string _name;
        private bool _DontIgnoreCase;
#if !NETCF
        internal Ionic.Zlib.ParallelDeflateOutputStream ParallelDeflater;
        private long _ParallelDeflateThreshold;
        private int _maxBufferPairs = 16;
#endif

        // **Note regarding exceptions:

        // When ZipOutputStream is employed within a using clause, which
        // is the typical scenario, and an exception is thrown within
        // the scope of the using, Close()/Dispose() is invoked
        // implicitly before processing the initial exception.  In that
        // case, _exceptionPending is true, and we don't want to try to
        // write anything in the Close/Dispose logic.  Doing so can
        // cause additional exceptions that mask the original one. So,
        // the _exceptionPending flag is used to track that, and to
        // allow the original exception to be propagated to the
        // application without extra "noise."

    }



    internal class ZipContainer
    {
        private ZipFile _zf;
        private ZipOutputStream _zos;
        private ZipInputStream _zis;

        public ZipContainer(Object o)
        {
            _zf = (o as ZipFile);
            _zos = (o as ZipOutputStream);
            _zis = (o as ZipInputStream);
        }

        public ZipFile ZipFile
        {
            get { return _zf; }
        }

        public ZipOutputStream ZipOutputStream
        {
            get { return _zos; }
        }

        public string Name
        {
            get
            {
                if (_zf != null) return _zf.Name;
                if (_zis != null) throw new NotSupportedException();
                return _zos.Name;
            }
        }

        public string Password
        {
            get
            {
                if (_zf != null) return _zf._Password;
                if (_zis != null) return _zis._Password;
                return _zos._password;
            }
        }

        public Zip64Option Zip64
        {
            get
            {
                if (_zf != null) return _zf._zip64;
                if (_zis != null) throw new NotSupportedException();
                return _zos._zip64;
            }
        }

        public int BufferSize
        {
            get
            {
                if (_zf != null) return _zf.BufferSize;
                if (_zis != null) throw new NotSupportedException();
                return 0;
            }
        }

#if !NETCF
        public Ionic.Zlib.ParallelDeflateOutputStream ParallelDeflater
        {
            get
            {
                if (_zf != null) return _zf.ParallelDeflater;
                if (_zis != null) return null;
                return _zos.ParallelDeflater;
            }
            set
            {
                if (_zf != null) _zf.ParallelDeflater = value;
                else if (_zos != null) _zos.ParallelDeflater = value;
            }
        }

        public long ParallelDeflateThreshold
        {
            get
            {
                if (_zf != null) return _zf.ParallelDeflateThreshold;
                return _zos.ParallelDeflateThreshold;
            }
        }
        public int ParallelDeflateMaxBufferPairs
        {
            get
            {
                if (_zf != null) return _zf.ParallelDeflateMaxBufferPairs;
                return _zos.ParallelDeflateMaxBufferPairs;
            }
        }
#endif

        public int CodecBufferSize
        {
            get
            {
                if (_zf != null) return _zf.CodecBufferSize;
                if (_zis != null) return _zis.CodecBufferSize;
                return _zos.CodecBufferSize;
            }
        }

        public Ionic.Zlib.CompressionStrategy Strategy
        {
            get
            {
                if (_zf != null) return _zf.Strategy;
                return _zos.Strategy;
            }
        }

        public Zip64Option UseZip64WhenSaving
        {
            get
            {
                if (_zf != null) return _zf.UseZip64WhenSaving;
                return _zos.EnableZip64;
            }
        }

        public System.Text.Encoding AlternateEncoding
        {
            get
            {
                if (_zf != null) return _zf.AlternateEncoding;
                if (_zos!=null) return _zos.AlternateEncoding;
                return null;
            }
        }
        public System.Text.Encoding DefaultEncoding
        {
            get
            {
                if (_zf != null) return ZipFile.DefaultEncoding;
                if (_zos!=null) return ZipOutputStream.DefaultEncoding;
                return null;
            }
        }
        public ZipOption AlternateEncodingUsage
        {
            get
            {
                if (_zf != null) return _zf.AlternateEncodingUsage;
                if (_zos!=null) return _zos.AlternateEncodingUsage;
                return ZipOption.Never; // n/a
            }
        }

        public Stream ReadStream
        {
            get
            {
                if (_zf != null) return _zf.ReadStream;
                return _zis.ReadStream;
            }
        }
    }

}